Skip to content

Commit 43e93c6

Browse files
committed
Convert to float for Basic
1 parent 10b20ed commit 43e93c6

File tree

1 file changed

+19
-38
lines changed

1 file changed

+19
-38
lines changed

symengine/lib/symengine_wrapper.pyx

Lines changed: 19 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1066,6 +1066,25 @@ cdef class Basic(object):
10661066
s.append(c2py(<rcp_const_basic>(Y[i]))._sympy_())
10671067
return s
10681068

1069+
def __float__(self):
1070+
f = self.n(real=True)
1071+
if not isinstance(f, RealDouble):
1072+
raise TypeError("Can't convert expression to float")
1073+
return float(f)
1074+
1075+
def __int__(self):
1076+
return int(float(self))
1077+
1078+
def __long__(self):
1079+
return long(float(self))
1080+
1081+
def __complex__(self):
1082+
f = self.n(real=False)
1083+
if not isinstance(f, (ComplexDouble, RealDouble)):
1084+
raise TypeError("Can't convert expression to float")
1085+
return complex(f)
1086+
1087+
10691088
def series(ex, x=None, x0=0, n=6, as_deg_coef_pair=False):
10701089
# TODO: check for x0 an infinity, see sympy/core/expr.py
10711090
# TODO: nonzero x0
@@ -1610,17 +1629,6 @@ class Rational(Number):
16101629
def func(self):
16111630
return self.__class__
16121631

1613-
def __int__(Basic self):
1614-
return int(float(self))
1615-
1616-
def __long__(self):
1617-
return int(self)
1618-
1619-
def __float__(Basic self):
1620-
return symengine.mp_get_d(deref(symengine.rcp_static_cast_Rational(self.thisptr)).as_rational_class())
1621-
1622-
def __complex__(self):
1623-
return complex(float(self))
16241632

16251633
class Integer(Rational):
16261634

@@ -1710,9 +1718,6 @@ class Integer(Rational):
17101718
def __int__(Basic self):
17111719
return symengine.mp_get_si(deref(symengine.rcp_static_cast_Integer(self.thisptr)).as_integer_class())
17121720

1713-
def __float__(Basic self):
1714-
return symengine.mp_get_d(deref(symengine.rcp_static_cast_Integer(self.thisptr)).as_integer_class())
1715-
17161721
@property
17171722
def p(self):
17181723
return int(self)
@@ -1801,27 +1806,12 @@ class RealDouble(Float):
18011806
def __float__(Basic self):
18021807
return deref(symengine.rcp_static_cast_RealDouble(self.thisptr)).as_double()
18031808

1804-
def __int__(self):
1805-
return int(float(self))
1806-
1807-
def __long__(self):
1808-
return long(float(self))
1809-
18101809
def __complex__(self):
18111810
return complex(float(self))
18121811

18131812

18141813
cdef class ComplexBase(Number):
18151814

1816-
def __int__(self):
1817-
return int(complex(self))
1818-
1819-
def __long__(self):
1820-
return long(complex(self))
1821-
1822-
def __float__(self):
1823-
return float(complex(self))
1824-
18251815
def real_part(Basic self):
18261816
return c2py(<rcp_const_basic>deref(symengine.rcp_static_cast_ComplexBase(self.thisptr)).real_part())
18271817

@@ -1884,9 +1874,6 @@ class RealMPFR(Float):
18841874
except ImportError:
18851875
import sage.all as sage
18861876
return sage.RealField(int(self.get_prec()))(str(self))
1887-
1888-
def __float__(self):
1889-
return float(self.n(real=True))
18901877
ELSE:
18911878
pass
18921879

@@ -1911,9 +1898,6 @@ cdef class ComplexMPC(ComplexBase):
19111898
except ImportError:
19121899
import sage.all as sage
19131900
return sage.MPComplexField(int(self.get_prec()))(str(self.real_part()), str(self.imaginary_part()))
1914-
1915-
def __complex__(self):
1916-
return complex(self.n(real=False))
19171901
ELSE:
19181902
pass
19191903

@@ -1928,9 +1912,6 @@ cdef class Complex(ComplexBase):
19281912
import sage.all as sage
19291913
return self.real_part()._sage_() + sage.I * self.imaginary_part()._sage_()
19301914

1931-
def __complex__(self):
1932-
return complex(self.n(real=False))
1933-
19341915

19351916
cdef class Infinity(Number):
19361917

0 commit comments

Comments
 (0)