Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Trac #24440: Infinite loop from converting to QQbar
{{{ sage: QQbar(tanh(pi + 0.1)) /home/ralf/sage/src/sage/structure/parent.pyx in sage.structure.parent.Parent.__call__ (build/cythonized/sage/structure/parent.c:9406)() 915 if mor is not None: 916 if no_extra_args: --> 917 return mor._call_(x) 918 else: 919 return mor._call_with_args(x, args, kwds) /home/ralf/sage/src/sage/structure/coerce_maps.pyx in sage.structure.coerce_maps.DefaultConvertMap_unique._call_ (build/cythonized/sage/structure/coerce_maps.c:4972)() 153 print(type(C), C) 154 print(type(C._element_constructor), C._element_constructor) --> 155 raise 156 157 cpdef Element _call_with_args(self, x, args=(), kwds={}): /home/ralf/sage/src/sage/structure/coerce_maps.pyx in sage.structure.coerce_maps.DefaultConvertMap_unique._call_ (build/cythonized/sage/structure/coerce_maps.c:4840)() 148 cdef Parent C = self._codomain 149 try: --> 150 return C._element_constructor(x) 151 except Exception: 152 if print_warnings: /home/ralf/sage/local/lib/python2.7/site-packages/sage/rings/qqbar.pyc in _element_constructor_(self, x) 1138 return AlgebraicNumber(x._descr) 1139 elif hasattr(x, '_algebraic_'): -> 1140 return x._algebraic_(QQbar) 1141 return AlgebraicNumber(x) 1142 /home/ralf/sage/src/sage/symbolic/expression.pyx in sage.symbolic.expression.Expression._algebraic_ (build/cythonized/sage/symbolic/expression.cpp:12139)() 1477 """ 1478 from sage.symbolic.expression_conversions import algebraic -> 1479 return algebraic(self, field) 1480 1481 def __hash__(self): /home/ralf/sage/local/lib/python2.7/site- packages/sage/symbolic/expression_conversions.pyc in algebraic(ex, field) 1046 0 1047 """ -> 1048 return AlgebraicConverter(field)(ex) 1049 1050 ############## /home/ralf/sage/local/lib/python2.7/site- packages/sage/symbolic/expression_conversions.pyc in __call__(self, ex) 224 return self.tuple(ex) 225 else: --> 226 return self.composition(ex, operator) 227 228 def get_fake_div(self, ex): /home/ralf/sage/local/lib/python2.7/site- packages/sage/symbolic/expression_conversions.pyc in composition(self, ex, operator) 987 res = -QQbar.zeta(4)*(exp_ia - ~exp_ia)/(exp_ia + ~exp_ia) 988 elif func_name in ['sinh', 'cosh', 'tanh']: --> 989 exp_a = exp(operand)._algebraic_(QQbar) 990 if func_name == 'sinh': 991 res = (exp_a - ~exp_a)/2 /home/ralf/sage/src/sage/symbolic/expression.pyx in sage.symbolic.expression.Expression._algebraic_ (build/cythonized/sage/symbolic/expression.cpp:12139)() 1477 """ 1478 from sage.symbolic.expression_conversions import algebraic -> 1479 return algebraic(self, field) 1480 1481 def __hash__(self): /home/ralf/sage/local/lib/python2.7/site- packages/sage/symbolic/expression_conversions.pyc in algebraic(ex, field) 1046 0 1047 """ -> 1048 return AlgebraicConverter(field)(ex) 1049 1050 ############## ... last 6 frames repeated, from the frame below ... /home/ralf/sage/local/lib/python2.7/site- packages/sage/symbolic/expression_conversions.pyc in __call__(self, ex) 216 div = self.get_fake_div(ex) 217 return self.arithmetic(div, div.operator()) --> 218 return self.arithmetic(ex, operator) 219 elif operator in relation_operators: 220 return self.relation(ex, operator) RuntimeError: maximum recursion depth exceeded in __instancecheck__ }}} It seems that only `pi` as constant will trigger it. URL: https://trac.sagemath.org/24440 Reported by: rws Ticket author(s): Ralf Stephan Reviewer(s): Sébastien Labbé
- Loading branch information