@@ -278,10 +278,10 @@ def sympy2symengine(a, raise_error=False):
278
278
"""
279
279
import sympy
280
280
from sympy.core.function import AppliedUndef as sympy_AppliedUndef
281
- if isinstance (a, sympy.Symbol):
281
+ if isinstance (a, sympy.Dummy):
282
+ return Dummy(a.name, a.dummy_index)
283
+ elif isinstance (a, sympy.Symbol):
282
284
return Symbol(a.name)
283
- elif isinstance (a, sympy.Dummy):
284
- return Dummy(a.name)
285
285
elif isinstance (a, sympy.Mul):
286
286
return mul(* [sympy2symengine(x, raise_error) for x in a.args])
287
287
elif isinstance (a, sympy.Add):
@@ -1304,10 +1304,10 @@ cdef class Symbol(Expr):
1304
1304
return sympy.Symbol(str (self ))
1305
1305
1306
1306
def __reduce__ (self ):
1307
- if type (self ) == Symbol:
1307
+ if type (self ) in ( Symbol, Dummy) :
1308
1308
return Basic.__reduce__(self )
1309
1309
else :
1310
- raise NotImplementedError (" pickling for Symbol subclass not implemented" )
1310
+ raise NotImplementedError (" pickling for subclass of Symbol or Dummy not implemented" )
1311
1311
1312
1312
def _sage_ (self ):
1313
1313
import sage.all as sage
@@ -1340,15 +1340,20 @@ cdef class Symbol(Expr):
1340
1340
1341
1341
cdef class Dummy(Symbol):
1342
1342
1343
- def __init__ (Basic self , name = None , *args , **kwargs ):
1344
- if name is None :
1345
- self .thisptr = symengine.make_rcp_Dummy()
1343
+ def __init__ (Basic self , name = None , dummy_index = None , *args , **kwargs ):
1344
+ cdef size_t index
1345
+ if dummy_index is None :
1346
+ if name is None :
1347
+ self .thisptr = symengine.make_rcp_Dummy()
1348
+ else :
1349
+ self .thisptr = symengine.make_rcp_Dummy(name.encode(" utf-8" ))
1346
1350
else :
1347
- self .thisptr = symengine.make_rcp_Dummy(name.encode(" utf-8" ))
1351
+ index = dummy_index
1352
+ self .thisptr = symengine.make_rcp_Dummy(name.encode(" utf-8" ), index)
1348
1353
1349
1354
def _sympy_ (self ):
1350
1355
import sympy
1351
- return sympy.Dummy(str ( self )[ 1 :] )
1356
+ return sympy.Dummy(name = self .name, dummy_index = self .dummy_index )
1352
1357
1353
1358
@property
1354
1359
def is_Dummy (self ):
@@ -1358,6 +1363,12 @@ cdef class Dummy(Symbol):
1358
1363
def func (self ):
1359
1364
return self .__class__
1360
1365
1366
+ @property
1367
+ def dummy_index (self ):
1368
+ cdef RCP[const symengine.Dummy] this = \
1369
+ symengine.rcp_static_cast_Dummy(self .thisptr)
1370
+ cdef size_t index = deref(this).get_index()
1371
+ return index
1361
1372
1362
1373
def symarray (prefix , shape , **kwargs ):
1363
1374
""" Creates an nd-array of symbols
0 commit comments