Skip to content

Commit f214e0d

Browse files
committed
Use EvalfDomain
1 parent 3294ae5 commit f214e0d

File tree

3 files changed

+20
-6
lines changed

3 files changed

+20
-6
lines changed

symengine/lib/symengine.pxd

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -958,7 +958,11 @@ cdef extern from "<utility>" namespace "std":
958958
cdef PiecewiseVec std_move_PiecewiseVec "std::move" (PiecewiseVec) nogil
959959

960960
cdef extern from "<symengine/eval.h>" namespace "SymEngine":
961-
rcp_const_basic evalf(const Basic &b, unsigned long bits, bool real) nogil except +
961+
enum EvalfDomain:
962+
EvalfComplex "SymEngine::EvalfDomain::Complex" = 0,
963+
EvalfReal "SymEngine::EvalfDomain::Real" = 1,
964+
EvalfSymbolic "SymEngine::EvalfDomain::Symbolic" = 2
965+
rcp_const_basic evalf(const Basic &b, unsigned long bits, EvalfDomain domain) nogil except +
962966

963967
cdef extern from "<symengine/eval_double.h>" namespace "SymEngine":
964968
double eval_double(const Basic &b) nogil except +

symengine/lib/symengine_wrapper.pyx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -915,7 +915,7 @@ cdef class Basic(object):
915915
symengine.as_real_imag(self.thisptr, symengine.outArg(_real), symengine.outArg(_imag))
916916
return c2py(<rcp_const_basic>_real), c2py(<rcp_const_basic>_imag)
917917

918-
def n(self, unsigned long prec = 53, cppbool real=False):
918+
def n(self, unsigned long prec = 53, real=None):
919919
return evalf(self, prec, real)
920920

921921
evalf = n
@@ -3991,9 +3991,16 @@ def Xnor(*args):
39913991
v.push_back(symengine.rcp_static_cast_Boolean(e_.thisptr))
39923992
return c2py(<rcp_const_basic>(symengine.logical_xnor(v)))
39933993

3994-
def evalf(x, unsigned long bits=53, cppbool real=False):
3994+
def evalf(x, unsigned long bits=53, real=None):
39953995
cdef Basic X = sympify(x)
3996-
return c2py(<rcp_const_basic>(symengine.evalf(deref(X.thisptr), bits, real)))
3996+
cdef symengine.EvalfDomain d
3997+
if real is None:
3998+
d = symengine.EvalfSymbolic
3999+
elif real:
4000+
d = symengine.EvalfReal
4001+
else:
4002+
d = symengine.EvalfComplex
4003+
return c2py(<rcp_const_basic>(symengine.evalf(deref(X.thisptr), bits, d)))
39974004

39984005
def eval_double(x):
39994006
warnings.warn("eval_double is deprecated. Use evalf(..., real=True)", DeprecationWarning)

symengine/tests/test_eval.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,19 @@ def test_eval_double1():
99
e = sin(x)**2 + cos(x)**2
1010
e = e.subs(x, 7)
1111
assert abs(e.n(real=True) - 1) < 1e-9
12+
assert abs(e.n() - 1) < 1e-9
1213

1314

1415
def test_eval_double2():
1516
x = Symbol("x")
1617
e = sin(x)**2 + sqrt(2)
17-
assert abs(e.n(real=True) - x**2 - 1.414) < 1e-3
18+
raises(RuntimeError, lambda: e.n(real=True))
19+
assert abs(e.n() - x**2 - 1.414) < 1e-3
1820

1921
def test_n():
2022
x = Symbol("x")
21-
assert x.n(real=True) == x + 0.0
23+
raises(RuntimeError, lambda: x.n(real=True))
24+
assert x.n() == x + 0.0
2225

2326
x = 2 + I
2427
raises(RuntimeError, lambda: (x.n(real=True)))

0 commit comments

Comments
 (0)