Skip to content

Commit c8ecb7e

Browse files
committed
Improvements
1 parent c6475b6 commit c8ecb7e

File tree

7 files changed

+117
-127
lines changed

7 files changed

+117
-127
lines changed

symengine/__init__.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@
99
UndefFunction, Function, FunctionSymbol as AppliedUndef,
1010
have_numpy, true, false, Equality, Unequality, GreaterThan,
1111
LessThan, StrictGreaterThan, StrictLessThan, Eq, Ne, Ge, Le,
12-
Gt, Lt, golden_ratio, catalan, eulergamma, Dummy, perfect_power,
13-
integer_nthroot, isprime, sqrt_mod)
12+
Gt, Lt, golden_ratio as GoldenRatio, catalan as Catalan,
13+
eulergamma as EulerGamma, Dummy, perfect_power, integer_nthroot,
14+
isprime, sqrt_mod)
1415
from .utilities import var, symbols
1516
from .functions import *
1617

symengine/lib/symengine.pxd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,7 @@ cdef extern from "<symengine/rational.h>" namespace "SymEngine":
372372
cdef RCP[const Number] from_mpq "SymEngine::Rational::from_mpq"(rational_class r) nogil
373373
cdef void get_num_den(const Rational &rat, const Ptr[RCP[Integer]] &num,
374374
const Ptr[RCP[Integer]] &den) nogil
375+
cdef RCP[const Number] rational(long n, long d) nogil
375376

376377
cdef extern from "<symengine/complex.h>" namespace "SymEngine":
377378
cdef cppclass Complex(Number):

symengine/lib/symengine_wrapper.pyx

Lines changed: 82 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -1174,92 +1174,96 @@ cdef class Constant(Basic):
11741174
self.thisptr = symengine.make_rcp_Constant(name.encode("utf-8"))
11751175

11761176
def _sympy_(self):
1177-
import sympy
1178-
if self == E:
1179-
return sympy.E
1180-
elif self == pi:
1181-
return sympy.pi
1182-
elif self == golden_ratio:
1183-
return sympy.GoldenRatio
1184-
elif self == catalan:
1185-
return sympy.Catalan
1186-
elif self == eulergamma:
1187-
return sympy.EulerGamma
1188-
else:
1189-
raise Exception("Unknown Constant")
1177+
raise Exception("Unknown Constant")
11901178

11911179
def _sage_(self):
1192-
import sage.all as sage
1193-
if self == E:
1194-
return sage.e
1195-
elif self == pi:
1196-
return sage.pi
1197-
elif self == golden_ratio:
1198-
return sage.golden_ratio
1199-
elif self == catalan:
1200-
return sage.catalan
1201-
elif self == eulergamma:
1202-
return sage.euler_gamma
1203-
else:
1204-
raise Exception("Unknown Constant")
1180+
raise Exception("Unknown Constant")
12051181

12061182

1207-
class ImaginaryUnit(Complex):
1183+
cdef class ImaginaryUnit(Complex):
12081184

1209-
def __new__(cls):
1210-
cdef Basic r = Complex.__new__(ImaginaryUnit)
1211-
r.thisptr = symengine.I
1212-
return r
1185+
def __cinit__(Basic self):
1186+
self.thisptr = symengine.I
12131187

12141188
I = ImaginaryUnit()
12151189

12161190

1217-
class Pi(Constant):
1191+
cdef class Pi(Constant):
12181192

1219-
def __new__(cls):
1220-
cdef Basic r = Constant.__new__(Pi)
1221-
r.thisptr = symengine.pi
1222-
return r
1193+
def __cinit__(Basic self):
1194+
self.thisptr = symengine.pi
1195+
1196+
def _sympy_(self):
1197+
import sympy
1198+
return sympy.pi
1199+
1200+
def _sage_(self):
1201+
import sage.all as sage
1202+
return sage.pi
12231203

12241204
pi = Pi()
12251205

12261206

1227-
class Exp1(Constant):
1207+
cdef class Exp1(Constant):
12281208

1229-
def __new__(cls):
1230-
cdef Basic r = Constant.__new__(Exp1)
1231-
r.thisptr = symengine.E
1232-
return r
1209+
def __cinit__(Basic self):
1210+
self.thisptr = symengine.E
1211+
1212+
def _sympy_(self):
1213+
import sympy
1214+
return sympy.E
1215+
1216+
def _sage_(self):
1217+
import sage.all as sage
1218+
return sage.e
12331219

12341220
E = Exp1()
12351221

12361222

1237-
class GoldenRatio(Constant):
1223+
cdef class GoldenRatio(Constant):
12381224

1239-
def __new__(cls):
1240-
cdef Basic r = Constant.__new__(GoldenRatio)
1241-
r.thisptr = symengine.GoldenRatio
1242-
return r
1225+
def __cinit__(Basic self):
1226+
self.thisptr = symengine.GoldenRatio
1227+
1228+
def _sympy_(self):
1229+
import sympy
1230+
return sympy.GoldenRatio
1231+
1232+
def _sage_(self):
1233+
import sage.all as sage
1234+
return sage.golden_ratio
12431235

12441236
golden_ratio = GoldenRatio()
12451237

12461238

1247-
class Catalan(Constant):
1239+
cdef class Catalan(Constant):
12481240

1249-
def __new__(cls):
1250-
cdef Basic r = Constant.__new__(Catalan)
1251-
r.thisptr = symengine.Catalan
1252-
return r
1241+
def __cinit__(Basic self):
1242+
self.thisptr = symengine.Catalan
1243+
1244+
def _sympy_(self):
1245+
import sympy
1246+
return sympy.Catalan
1247+
1248+
def _sage_(self):
1249+
import sage.all as sage
1250+
return sage.catalan
12531251

12541252
catalan = Catalan()
12551253

12561254

1257-
class EulerGamma(Constant):
1255+
cdef class EulerGamma(Constant):
12581256

1259-
def __new__(cls):
1260-
cdef Basic r = Constant.__new__(EulerGamma)
1261-
r.thisptr = symengine.EulerGamma
1262-
return r
1257+
def __cinit__(Basic self):
1258+
self.thisptr = symengine.EulerGamma
1259+
1260+
def _sympy_(self):
1261+
import sympy
1262+
return sympy.EulerGamma
1263+
1264+
def _sage_(self):
1265+
import sage.all as sage
1266+
return sage.euler_gamma
12631267

12641268
eulergamma = EulerGamma()
12651269

@@ -1270,7 +1274,7 @@ cdef class Boolean(Basic):
12701274
return c2py(<RCP[const symengine.Basic]>(deref(symengine.rcp_static_cast_Boolean(self.thisptr)).logical_not()))
12711275

12721276

1273-
class BooleanAtom(Boolean):
1277+
cdef class BooleanAtom(Boolean):
12741278

12751279
@property
12761280
def is_Boolean(self):
@@ -1281,12 +1285,10 @@ class BooleanAtom(Boolean):
12811285
return True
12821286

12831287

1284-
class BooleanTrue(BooleanAtom):
1288+
cdef class BooleanTrue(BooleanAtom):
12851289

1286-
def __new__(cls):
1287-
cdef Basic r = BooleanAtom.__new__(BooleanTrue)
1288-
r.thisptr = symengine.boolTrue
1289-
return r
1290+
def __cinit__(Basic self):
1291+
self.thisptr = symengine.boolTrue
12901292

12911293
def _sympy_(self):
12921294
import sympy
@@ -1298,12 +1300,10 @@ class BooleanTrue(BooleanAtom):
12981300
true = BooleanTrue()
12991301

13001302

1301-
class BooleanFalse(BooleanAtom):
1303+
cdef class BooleanFalse(BooleanAtom):
13021304

1303-
def __new__(cls):
1304-
cdef Basic r = BooleanAtom.__new__(BooleanFalse)
1305-
r.thisptr = symengine.boolFalse
1306-
return r
1305+
def __cinit__(Basic self):
1306+
self.thisptr = symengine.boolFalse
13071307

13081308
def _sympy_(self):
13091309
import sympy
@@ -1842,16 +1842,14 @@ cdef class Complex(Number):
18421842
return self.real_part()._sage_() + sage.I * self.imaginary_part()._sage_()
18431843

18441844

1845-
class Infinity(Number):
1845+
cdef class Infinity(Number):
18461846

18471847
@property
18481848
def is_infinite(self):
18491849
return True
18501850

1851-
def __new__(cls):
1852-
cdef Basic r = Number.__new__(Infinity)
1853-
r.thisptr = symengine.Inf
1854-
return r
1851+
def __cinit__(Basic self):
1852+
self.thisptr = symengine.Inf
18551853

18561854
def _sympy_(self):
18571855
import sympy
@@ -1864,16 +1862,14 @@ class Infinity(Number):
18641862
oo = Infinity()
18651863

18661864

1867-
class NegativeInfinity(Number):
1865+
cdef class NegativeInfinity(Number):
18681866

18691867
@property
18701868
def is_infinite(self):
18711869
return True
18721870

1873-
def __new__(cls):
1874-
cdef Basic r = Number.__new__(NegativeInfinity)
1875-
r.thisptr = symengine.neg(symengine.Inf)
1876-
return r
1871+
def __cinit__(Basic self):
1872+
self.thisptr = symengine.neg(symengine.Inf)
18771873

18781874
def _sympy_(self):
18791875
import sympy
@@ -1886,16 +1882,14 @@ class NegativeInfinity(Number):
18861882
minus_oo = NegativeInfinity()
18871883

18881884

1889-
class ComplexInfinity(Number):
1885+
cdef class ComplexInfinity(Number):
18901886

18911887
@property
18921888
def is_infinite(self):
18931889
return True
18941890

1895-
def __new__(cls):
1896-
cdef Basic r = Number.__new__(ComplexInfinity)
1897-
r.thisptr = symengine.ComplexInf
1898-
return r
1891+
def __cinit__(Basic self):
1892+
self.thisptr = symengine.ComplexInf
18991893

19001894
def _sympy_(self):
19011895
import sympy
@@ -1908,7 +1902,7 @@ class ComplexInfinity(Number):
19081902
zoo = ComplexInfinity()
19091903

19101904

1911-
class NaN(Number):
1905+
cdef class NaN(Number):
19121906

19131907
@property
19141908
def is_rational(self):
@@ -1926,10 +1920,8 @@ class NaN(Number):
19261920
def is_finite(self):
19271921
return None
19281922

1929-
def __new__(cls):
1930-
cdef Basic r = Number.__new__(NaN)
1931-
r.thisptr = symengine.Nan
1932-
return r
1923+
def __cinit__(Basic self):
1924+
self.thisptr = symengine.Nan
19331925

19341926
def _sympy_(self):
19351927
import sympy
@@ -1971,12 +1963,8 @@ minus_one = NegativeOne()
19711963

19721964
class Half(Rational):
19731965
def __new__(cls):
1974-
cdef Basic r = Number.__new__(Integer)
1975-
cdef Basic s = Number.__new__(Integer)
19761966
cdef Basic q = Number.__new__(Half)
1977-
r.thisptr = <RCP[const symengine.Basic]>symengine.integer(1)
1978-
s.thisptr = <RCP[const symengine.Basic]>symengine.integer(2)
1979-
q.thisptr = symengine.div(r.thisptr, s.thisptr)
1967+
q.thisptr = <RCP[const symengine.Basic]>symengine.rational(1, 2)
19801968
return q
19811969

19821970
half = Half()
@@ -3698,9 +3686,9 @@ cdef class Sieve_iterator:
36983686

36993687

37003688
def module_cleanup():
3701-
global I, E, pi, oo, zoo, nan, true, false, golden_ratio, catalan, eulergamma, sympy_module, sage_module
3689+
global I, E, pi, oo, minus_oo, zoo, nan, true, false, golden_ratio, catalan, eulergamma, sympy_module, sage_module
37023690
funcs.clear()
3703-
del I, E, pi, oo, zoo, nan, true, false, golden_ratio, catalan, eulergamma, sympy_module, sage_module
3691+
del I, E, pi, oo, minus_oo, zoo, nan, true, false, golden_ratio, catalan, eulergamma, sympy_module, sage_module
37043692

37053693
import atexit
37063694
atexit.register(module_cleanup)

symengine/tests/test_functions.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
from symengine import (Symbol, sin, cos, sqrt, Add, Mul, function_symbol, Integer, log, E, symbols, I,
2-
Rational)
2+
Rational, EulerGamma)
33
from symengine.lib.symengine_wrapper import (Subs, Derivative, LambertW, zeta, dirichlet_eta,
44
zoo, pi, KroneckerDelta, LeviCivita, erf, erfc,
55
oo, lowergamma, uppergamma, exp, loggamma, beta,
6-
polygamma, digamma, trigamma, eulergamma, sign,
7-
floor, ceiling, conjugate, nan, Float)
6+
polygamma, digamma, trigamma, sign, floor, ceiling,
7+
conjugate, nan, Float)
88

99
import unittest
1010

@@ -281,8 +281,8 @@ def test_polygamma():
281281
assert polygamma(0, -9) == zoo
282282
assert polygamma(0, -1) == zoo
283283
assert polygamma(0, 0) == zoo
284-
assert polygamma(0, 1) == -eulergamma
285-
assert polygamma(0, 7) == Rational(49, 20) - eulergamma
284+
assert polygamma(0, 1) == -EulerGamma
285+
assert polygamma(0, 7) == Rational(49, 20) - EulerGamma
286286
assert polygamma(1, 1) == pi**2/6
287287
assert polygamma(1, 2) == pi**2/6 - 1
288288
assert polygamma(1, 3) == pi**2/6 - Rational(5, 4)
@@ -295,7 +295,7 @@ def test_digamma():
295295
x = Symbol("x")
296296
assert digamma(x) == polygamma(0, x)
297297
assert digamma(0) == zoo
298-
assert digamma(1) == -eulergamma
298+
assert digamma(1) == -EulerGamma
299299

300300

301301
def test_trigamma():

symengine/tests/test_sage.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
from symengine import (Integer, symbols, sin, cos, pi, E, I, oo, zoo,
22
nan, true, false, Add, function_symbol, DenseMatrix,
3-
sympify, log)
3+
sympify, log, EulerGamma, Catalan, GoldenRatio)
44
from symengine.lib.symengine_wrapper import (PyNumber, PyFunction,
5-
sage_module, wrap_sage_function, catalan, golden_ratio, eulergamma,
6-
LambertW, KroneckerDelta, erf, lowergamma, uppergamma, loggamma,
7-
beta, floor, ceiling, conjugate)
5+
sage_module, wrap_sage_function, LambertW, KroneckerDelta, erf,
6+
lowergamma, uppergamma, loggamma, beta, floor, ceiling, conjugate)
87
import unittest
98

109
try:
@@ -108,9 +107,9 @@ def test_sage_conversions():
108107
assert pi._sage_() == sage.pi
109108
assert E._sage_() == sage.e
110109
assert I._sage_() == sage.I
111-
assert golden_ratio._sage_() == sage.golden_ratio
112-
assert catalan._sage_() == sage.catalan
113-
assert eulergamma._sage_() == sage.euler_gamma
110+
assert GoldenRatio._sage_() == sage.golden_ratio
111+
assert Catalan._sage_() == sage.catalan
112+
assert EulerGamma._sage_() == sage.euler_gamma
114113
assert oo._sage_() == sage.oo
115114
assert zoo._sage_() == sage.unsigned_infinity
116115
assert nan._sage_() == sage.NaN
@@ -119,9 +118,9 @@ def test_sage_conversions():
119118

120119
assert pi == sympify(sage.pi)
121120
assert E == sympify(sage.e)
122-
assert golden_ratio == sympify(sage.golden_ratio)
123-
assert catalan == sympify(sage.catalan)
124-
assert eulergamma == sympify(sage.euler_gamma)
121+
assert GoldenRatio == sympify(sage.golden_ratio)
122+
assert Catalan == sympify(sage.catalan)
123+
assert EulerGamma == sympify(sage.euler_gamma)
125124
assert oo == sympify(sage.oo)
126125
assert zoo == sympify(sage.unsigned_infinity)
127126
assert nan == sympify(sage.NaN)

0 commit comments

Comments
 (0)