3535from mathics .core .list import ListExpression
3636from mathics .core .number import FP_MANTISA_BINARY_DIGITS
3737from mathics .core .symbols import (
38+ SYMPY_SLOT_PREFIX ,
39+ SYMPY_SYMBOL_PREFIX ,
3840 Symbol ,
3941 SymbolFalse ,
4042 SymbolNull ,
4143 SymbolPlus ,
4244 SymbolPower ,
4345 SymbolTimes ,
4446 SymbolTrue ,
45- sympy_slot_prefix ,
46- sympy_symbol_prefix ,
47+ sympy_name ,
4748)
4849from mathics .core .systemsymbols import (
4950 SymbolC ,
109110
110111def is_Cn_expr (name : str ) -> bool :
111112 """Check if name is of the form {prefix}Cnnn"""
112- if name .startswith (sympy_symbol_prefix ) or name .startswith (sympy_slot_prefix ):
113+ if name .startswith (SYMPY_SYMBOL_PREFIX ) or name .startswith (SYMPY_SLOT_PREFIX ):
113114 return False
114115 if not name .startswith ("C" ):
115116 return False
@@ -238,13 +239,7 @@ def expression_to_sympy(expr: Expression, **kwargs):
238239
239240 functions = kwargs .get ("converted_functions" , [])
240241 if head_name in functions :
241- sym_args = [element .to_sympy () for element in expr ._elements ]
242- if None in sym_args :
243- return None
244- func = sympy .Function (str (sympy_symbol_prefix + expr .get_head_name ()))(
245- * sym_args
246- )
247- return func
242+ return expr ._as_sympy_function (** kwargs )
248243
249244 lookup_name = expr .get_lookup_name ()
250245 builtin = mathics_to_sympy .get (lookup_name )
@@ -269,7 +264,7 @@ def symbol_to_sympy(symbol: Symbol, **kwargs) -> Sympy_Symbol:
269264
270265 builtin = mathics_to_sympy .get (symbol .name )
271266 if builtin is None or not builtin .sympy_name or not builtin .is_constant (): # nopep8
272- return Sympy_Symbol (sympy_symbol_prefix + symbol . name )
267+ return Sympy_Symbol (sympy_name ( symbol ) )
273268 return builtin .to_sympy (symbol , ** kwargs )
274269
275270
@@ -369,15 +364,15 @@ def old_from_sympy(expr) -> BaseElement:
369364 if expr .is_Symbol :
370365 name = str (expr )
371366 if isinstance (expr , sympy .Dummy ):
372- name = name + ( f"__Dummy_ { expr .dummy_index } ") # type: ignore[attr-defined]
367+ name = f"sympy`dummy`Dummy$ { expr .dummy_index } " # type: ignore[attr-defined]
373368 # Probably, this should be the value attribute
374369 return Symbol (name , sympy_dummy = expr )
375370 if is_Cn_expr (name ):
376371 return Expression (SymbolC , Integer (int (name [1 :])))
377- if name .startswith (sympy_symbol_prefix ):
378- name = name [len (sympy_symbol_prefix ) :]
379- if name .startswith (sympy_slot_prefix ):
380- index = int (name [len (sympy_slot_prefix ) :])
372+ if name .startswith (SYMPY_SYMBOL_PREFIX ):
373+ name = name [len (SYMPY_SYMBOL_PREFIX ) :]
374+ if name .startswith (SYMPY_SLOT_PREFIX ):
375+ index = int (name [len (SYMPY_SLOT_PREFIX ) :])
381376 return Expression (SymbolSlot , Integer (index ))
382377 elif expr .is_NumberSymbol :
383378 name = str (expr )
@@ -497,7 +492,7 @@ def old_from_sympy(expr) -> BaseElement:
497492 return Expression (SymbolRoot , from_sympy (e_root ), Integer (indx + 1 ))
498493 if isinstance (expr , sympy .Lambda ):
499494 variables = [
500- sympy .Symbol (f"{ sympy_slot_prefix } { index + 1 } " )
495+ sympy .Symbol (f"{ SYMPY_SLOT_PREFIX } { index + 1 } " )
501496 for index in range (len (expr .variables ))
502497 ]
503498 return Expression (SymbolFunction , from_sympy (expr (* variables )))
@@ -540,8 +535,8 @@ def old_from_sympy(expr) -> BaseElement:
540535 Expression (Symbol ("C" ), Integer (int (name [1 :]))),
541536 * [from_sympy (arg ) for arg in expr .args ],
542537 )
543- if name .startswith (sympy_symbol_prefix ):
544- name = name [len (sympy_symbol_prefix ) :]
538+ if name .startswith (SYMPY_SYMBOL_PREFIX ):
539+ name = name [len (SYMPY_SYMBOL_PREFIX ) :]
545540 args = [from_sympy (arg ) for arg in expr .args ]
546541 builtin = sympy_to_mathics .get (name )
547542 if builtin is not None :
0 commit comments