2525 SYMPY_SYMBOL_PREFIX ,
2626 Symbol ,
2727 SymbolPlus ,
28+ sympy_name ,
2829)
2930from mathics .core .systemsymbols import (
3031 SymbolD ,
3637 SymbolSlot ,
3738)
3839
40+ Symbol_f = Symbol ("Global`f" )
41+ Symbol_x = Symbol ("Global`x" )
42+ Symbol_y = Symbol ("Global`y" )
43+ Symbol_z = Symbol ("Global`z" )
44+ Symbol_Mathics_User_x = Symbol ("Mathics`User`x" )
45+
3946
4047class SympyConvert (unittest .TestCase ):
4148 def compare_to_sympy (self , mathics_expr , sympy_expr , ** kwargs ):
@@ -49,11 +56,17 @@ def compare(self, mathics_expr, sympy_expr, **kwargs):
4956 self .compare_to_mathics (mathics_expr , sympy_expr )
5057
5158 def testSymbol (self ):
52- self .compare (Symbol ( "Global`x" ) , sympy .Symbol (f" { SYMPY_SYMBOL_PREFIX } Global`x" ))
59+ self .compare (Symbol_x , sympy .Symbol (sympy_name ( Symbol_x ) ))
5360 self .compare (
54- Symbol ( "_Mathics_User_x" ) ,
55- sympy .Symbol (f" { SYMPY_SYMBOL_PREFIX } System`_Mathics_User_x" ),
61+ Symbol_Mathics_User_x ,
62+ sympy .Symbol (sympy_name ( Symbol_Mathics_User_x ) ),
5663 )
64+ # Sympy symbols without prefix are mapped to symbols in
65+ # System` context:
66+ self .compare_to_mathics (Symbol ("x" ), sympy .Symbol ("x" ))
67+ # Notice that a sympy Symbol named "x" is converted
68+ # to the Mathics symbol "System`x", and then, when converted
69+ # back to sympy, goes to sympy.Symbol("_uSystem_x").
5770
5871 def testReal (self ):
5972 self .compare (Real ("1.0" ), sympy .Float ("1.0" ))
@@ -87,25 +100,25 @@ def testString(self):
87100
88101 def testAdd (self ):
89102 self .compare (
90- Expression (SymbolPlus , Integer1 , Symbol ( "Global`x" ) ),
91- sympy .Add (sympy .Integer (1 ), sympy .Symbol (f" { SYMPY_SYMBOL_PREFIX } Global`x" )),
103+ Expression (SymbolPlus , Integer1 , Symbol_x ),
104+ sympy .Add (sympy .Integer (1 ), sympy .Symbol (sympy_name ( Symbol_x ) )),
92105 )
93106
94107 def testIntegrate (self ):
95108 self .compare (
96- Expression (SymbolIntegrate , Symbol ( "Global`x" ), Symbol ( "Global`y" ) ),
109+ Expression (SymbolIntegrate , Symbol_x , Symbol_y ),
97110 sympy .Integral (
98- sympy .Symbol (f" { SYMPY_SYMBOL_PREFIX } Global`x" ),
99- sympy .Symbol (f" { SYMPY_SYMBOL_PREFIX } Global`y" ),
111+ sympy .Symbol (sympy_name ( Symbol_x ) ),
112+ sympy .Symbol (sympy_name ( Symbol_y ) ),
100113 ),
101114 )
102115
103116 def testDerivative (self ):
104117 self .compare (
105- Expression (SymbolD , Symbol ( "Global`x" ), Symbol ( "Global`y" ) ),
118+ Expression (SymbolD , Symbol_x , Symbol_y ),
106119 sympy .Derivative (
107- sympy .Symbol (f" { SYMPY_SYMBOL_PREFIX } Global`x" ),
108- sympy .Symbol (f" { SYMPY_SYMBOL_PREFIX } Global`y" ),
120+ sympy .Symbol (sympy_name ( Symbol_x ) ),
121+ sympy .Symbol (sympy_name ( Symbol_y ) ),
109122 ),
110123 )
111124
@@ -114,47 +127,43 @@ def testDerivative2(self):
114127
115128 head = Expression (
116129 Expression (SymbolDerivative , Integer1 , Integer0 ),
117- Symbol ( "Global`f" ) ,
130+ Symbol_f ,
118131 )
119- expr = Expression (head , Symbol ( "Global`x" ), Symbol ( "Global`y" ) )
132+ expr = Expression (head , Symbol_x , Symbol_y )
120133
121- sfxy = sympy .Function (str (f"{ SYMPY_SYMBOL_PREFIX } Global`f" ))(
122- sympy .Symbol (f"{ SYMPY_SYMBOL_PREFIX } Global`x" ),
123- sympy .Symbol (f"{ SYMPY_SYMBOL_PREFIX } Global`y" ),
124- )
125- sym_expr = sympy .Derivative (
126- sfxy , sympy .Symbol (f"{ SYMPY_SYMBOL_PREFIX } Global`x" )
134+ sfxy = sympy .Function (sympy_name (Symbol_f ))(
135+ sympy .Symbol (sympy_name (Symbol_x )),
136+ sympy .Symbol (sympy_name (Symbol_y )),
127137 )
138+ sym_expr = sympy .Derivative (sfxy , sympy .Symbol (sympy_name (Symbol_x )))
128139
129140 self .compare_to_sympy (expr , sym_expr , ** kwargs )
130141 # compare_to_mathics fails because Derivative becomes D (which then evaluates to Derivative)
131142
132143 def testConvertedFunctions (self ):
133144 kwargs = {"converted_functions" : set (["Global`f" ])}
134145
135- marg1 = Expression (Symbol ("Global`f" ), Symbol ("Global`x" ))
136- sarg1 = sympy .Function (str (f"{ SYMPY_SYMBOL_PREFIX } Global`f" ))(
137- sympy .Symbol (f"{ SYMPY_SYMBOL_PREFIX } Global`x" )
138- )
146+ marg1 = Expression (Symbol_f , Symbol_x )
147+ sarg1 = sympy .Function (sympy_name (Symbol_f ))(sympy .Symbol (sympy_name (Symbol_x )))
139148 self .compare (marg1 , sarg1 , ** kwargs )
140149
141- marg2 = Expression (Symbol ( "Global`f" ), Symbol ( "Global`x" ), Symbol ( "Global`y" ) )
142- sarg2 = sympy .Function (str ( f" { SYMPY_SYMBOL_PREFIX } Global`f" ))(
143- sympy .Symbol (f" { SYMPY_SYMBOL_PREFIX } Global`x" ),
144- sympy .Symbol (f" { SYMPY_SYMBOL_PREFIX } Global`y" ),
150+ marg2 = Expression (Symbol_f , Symbol_x , Symbol_y )
151+ sarg2 = sympy .Function (sympy_name ( Symbol_f ))(
152+ sympy .Symbol (sympy_name ( Symbol_x ) ),
153+ sympy .Symbol (sympy_name ( Symbol_y ) ),
145154 )
146155 self .compare (marg2 , sarg2 , ** kwargs )
147156
148157 self .compare (
149- Expression (SymbolD , marg2 , Symbol ( "Global`x" ) ),
150- sympy .Derivative (sarg2 , sympy .Symbol (f" { SYMPY_SYMBOL_PREFIX } Global`x" )),
158+ Expression (SymbolD , marg2 , Symbol_x ),
159+ sympy .Derivative (sarg2 , sympy .Symbol (sympy_name ( Symbol_x ) )),
151160 ** kwargs ,
152161 )
153162
154163 def testExpression (self ):
155164 self .compare (
156- Expression (SymbolSin , Symbol ( "Global`x" ) ),
157- sympy .sin (sympy .Symbol (f" { SYMPY_SYMBOL_PREFIX } Global`x" )),
165+ Expression (SymbolSin , Symbol_x ),
166+ sympy .sin (sympy .Symbol (sympy_name ( Symbol_x ) )),
158167 )
159168
160169 def testConstant (self ):
@@ -163,14 +172,14 @@ def testConstant(self):
163172
164173 def testGamma (self ):
165174 self .compare (
166- Expression (SymbolGamma , Symbol ( "Global`z" ) ),
167- sympy .gamma (sympy .Symbol (f" { SYMPY_SYMBOL_PREFIX } Global`z" )),
175+ Expression (SymbolGamma , Symbol_z ),
176+ sympy .gamma (sympy .Symbol (sympy_name ( Symbol_z ) )),
168177 )
169178 self .compare (
170- Expression (SymbolGamma , Symbol ( "Global`z" ), Symbol ( "Global`x" ) ),
179+ Expression (SymbolGamma , Symbol_z , Symbol_x ),
171180 sympy .uppergamma (
172- sympy .Symbol (f" { SYMPY_SYMBOL_PREFIX } Global`z" ),
173- sympy .Symbol (f" { SYMPY_SYMBOL_PREFIX } Global`x" ),
181+ sympy .Symbol (sympy_name ( Symbol_z ) ),
182+ sympy .Symbol (sympy_name ( Symbol_x ) ),
174183 ),
175184 )
176185
0 commit comments