From cb885133d7a003c5fe0a476d2ebf40e573668184 Mon Sep 17 00:00:00 2001 From: Ralf Stephan Date: Thu, 25 May 2017 17:22:38 +0200 Subject: [PATCH] 23077: Fix complex handling of libs/pynac/py_float() --- src/sage/functions/bessel.py | 4 ++-- src/sage/functions/hypergeometric.py | 2 +- src/sage/libs/pynac/pynac.pyx | 8 +++++++- src/sage/symbolic/expression.pyx | 6 ++---- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/sage/functions/bessel.py b/src/sage/functions/bessel.py index 40dacbc337e..587c5ee016b 100644 --- a/src/sage/functions/bessel.py +++ b/src/sage/functions/bessel.py @@ -686,7 +686,7 @@ class Function_Bessel_I(BuiltinFunction): sage: a = bessel_I(pi, bessel_I(1, I)) sage: N(a, digits=20) - 0.00026073272117205890528 - 0.0011528954889080572266*I + 0.00026073272117205890524 - 0.0011528954889080572268*I sage: f = bessel_I(2, x) sage: f.diff(x) @@ -876,7 +876,7 @@ class Function_Bessel_K(BuiltinFunction): sage: a = bessel_K(pi, bessel_K(1, I)); a bessel_K(pi, bessel_K(1, I)) sage: N(a, digits=20) - 3.8507583115005220157 + 0.068528298579883425792*I + 3.8507583115005220156 + 0.068528298579883425456*I sage: f = bessel_K(2, x) sage: f.diff(x) diff --git a/src/sage/functions/hypergeometric.py b/src/sage/functions/hypergeometric.py index eff8ff9db88..7829213c479 100644 --- a/src/sage/functions/hypergeometric.py +++ b/src/sage/functions/hypergeometric.py @@ -103,7 +103,7 @@ sage: hypergeometric([1, 2, 3], [4, 5, 6], 1/2).n(digits=30) 1.02573619590133865036584139535 sage: hypergeometric([5 - 3*I], [3/2, 2 + I, sqrt(2)], 4 + I).n() - 5.52605111678805 - 7.86331357527544*I + 5.52605111678803 - 7.86331357527540*I sage: hypergeometric((10, 10), (50,), 2.) -1705.75733163554 - 356.749986056024*I diff --git a/src/sage/libs/pynac/pynac.pyx b/src/sage/libs/pynac/pynac.pyx index 733dc6c2bfe..8cb2a082187 100644 --- a/src/sage/libs/pynac/pynac.pyx +++ b/src/sage/libs/pynac/pynac.pyx @@ -1328,7 +1328,13 @@ cdef py_float(n, PyObject* kwds): """ if kwds is not NULL: - return (kwds)['parent'](n) + try: + return (kwds)['parent'](n) + except TypeError: + try: + return (kwds)['parent'].complex_field()(n) + except AttributeError: + return CC(n) else: try: return RR(n) diff --git a/src/sage/symbolic/expression.pyx b/src/sage/symbolic/expression.pyx index 8517128d815..192bcb07a0b 100644 --- a/src/sage/symbolic/expression.pyx +++ b/src/sage/symbolic/expression.pyx @@ -1385,11 +1385,9 @@ cdef class Expression(CommutativeRingElement): 0.6666666666666666 sage: float(sqrt(SR(2))) 1.4142135623730951 - sage: float(x^2 + 1) - Traceback (most recent call last): - ... - TypeError: unable to simplify to float approximation sage: float(SR(RIF(2))) + 2.0 + sage: float(x^2 + 1) Traceback (most recent call last): ... TypeError: unable to simplify to float approximation