diff --git a/symengine/lib/symengine.pxd b/symengine/lib/symengine.pxd index c22d78745..c9918752a 100644 --- a/symengine/lib/symengine.pxd +++ b/symengine/lib/symengine.pxd @@ -315,6 +315,7 @@ cdef extern from "" namespace "SymEngine": bool is_a_Xor "SymEngine::is_a"(const Basic &b) nogil rcp_const_basic expand(rcp_const_basic &o, bool deep) nogil except + void as_numer_denom(rcp_const_basic &x, const Ptr[RCP[Basic]] &numer, const Ptr[RCP[Basic]] &denom) nogil + void as_real_imag(rcp_const_basic &x, const Ptr[RCP[Basic]] &real, const Ptr[RCP[Basic]] &imag) nogil void cse(vec_pair &replacements, vec_basic &reduced_exprs, const vec_basic &exprs) nogil except + cdef extern from "" namespace "SymEngine": diff --git a/symengine/lib/symengine_wrapper.pyx b/symengine/lib/symengine_wrapper.pyx index 9eb0695c1..9a93e5eed 100644 --- a/symengine/lib/symengine_wrapper.pyx +++ b/symengine/lib/symengine_wrapper.pyx @@ -900,6 +900,11 @@ cdef class Basic(object): symengine.as_numer_denom(self.thisptr, symengine.outArg(_num), symengine.outArg(_den)) return c2py(_num), c2py(_den) + def as_real_imag(Basic self not None): + cdef rcp_const_basic _real, _imag + symengine.as_real_imag(self.thisptr, symengine.outArg(_real), symengine.outArg(_imag)) + return c2py(_real), c2py(_imag) + def n(self, prec = 53, real = False): if real: return eval_real(self, prec) diff --git a/symengine/tests/test_arit.py b/symengine/tests/test_arit.py index c7192fe55..06b5ee575 100644 --- a/symengine/tests/test_arit.py +++ b/symengine/tests/test_arit.py @@ -1,7 +1,7 @@ from symengine.utilities import raises from symengine import Symbol, Integer, Add, Mul, Pow, Rational, sqrt -from symengine.lib.symengine_wrapper import Zero, One, NegativeOne, Half +from symengine.lib.symengine_wrapper import Zero, One, NegativeOne, Half, I def test_arit1(): @@ -165,6 +165,11 @@ def test_as_numer_denom(): assert x == Integer(-5) assert y == Integer(1) +def test_as_real_imag(): + x, y = (5 + 6 * I).as_real_imag() + + assert x == 5 + assert y == 6 def test_from_args(): x = Symbol("x")