В Wolfram Mathematica я могу использовать ToExpression, чтобы преобразовать строку в выражение и оценить выражение.
Пример:
Reflection[expr_, a_] := expr /. a[l_] -> I*a[-l]
StringA = "Reflection[a[0]b[3],b]"
Output=ToExpression[StringA]
результат ia [0] b [-3]
Однако я не знаю, как реализовать это в Python (или Sympy).
import numpy as np
import sympy as sp
a, b, c, d, e, f=map(sp.IndexedBase,['a','b','c','d','e', 'f'])
l1=map(sp.Wild,['l1'])
imagI=sp.I ## equals to Imaginary
def Reflection(expr, p):
expr=imagI*expr.replace(p[l1],p[-l1], map=False, simultaneous=True, exact=False)
return expr
fundict={'Reflection':Reflection}
pdict={'a':a,'b':b,'c':c,'d':d,'e':e,'f':f} ##A dictionary used for connect the string to existed variable
mydict=dict(fundict,**pdict) ## combine two dictionary
StringA ='Reflection(a(0)b(3),b)'
Как реализовать ту же работу, что и ToExpression?
И более сложный случай:
Reflection[expr_, a_] := expr /. a[l_] -> I*a[-l]
OAMHolo[expr_, a_, n_] := expr /. a[l_] -> a[l + n]
StringA = "Reflection[OAMHolo[Reflection[a[0]b[3],b],a,3],b]"
Output=ToExpression[StringA]
Выход -a [3] b [3]
В случаях с Python я пробовал exec (), replace (), но они не работают. Итак, как реализовать этот случай в Python? Большое спасибо!