Subs sympy free vars with a string

Subs sympy free vars with a string

我正在将自定义格式(如“{a} + {b}”)解析为 sympy 表达式。我成功地工作了。现在,有没有办法将该 sympy 表达式转换回原始字符串,假设我有一个映射自由变量名称和相应的大括号字符串表示的字典?

假设上面的自由变量是“a”和“b”,我想做类似的事情

str(expr.subs({'a': '{a}', 'b': '{b}'}))

但是 sympy 似乎不允许替换成这样的任意字符串。

您可以子类化 codegenerator (e.g. StrPrinter), and overwrite the function that outputs the free variables. You can copy the original function from the sympy source 并进行一些修改。

这是一个例子:

import sympy as sp
from sympy.printing import StrPrinter

class CustomStrPrinter(StrPrinter):
    def _print_Symbol(self, expr):
        return f'{{{expr.name}}}'

a, b = sp.symbols('a b')
expr = a + b

custom_strPrinter = CustomStrPrinter().doprint
print(custom_strPrinter(expr))  # {a} + {b}