Рекурсивная замена в симпы

У меня есть выражение симпатии с несколькими переменными, которые необходимо заменить. Проблема в том, что некоторые из выражений, которые должны быть заменены, также содержат экземпляры переменных, которые необходимо заменить.

from sympy import *
from sympy.abs import a,b, x,y

expr = a + b
replace = [[a, x+y], [b, 2*a]]

expr.subs(replace) # 2*a + x + y, I want 3*x + 3*y

Если список замен находится в правильном порядке, он будет применять каждую замену последовательно, хотя в моем реальном приложении я не знаю, какой порядок будет подходящим:

expr.subs(reversed(replace)) # 3*x + 3*y

Я могу форсировать подстановку, применяя подстановку n раз кexpr или жеreplace, но это кажется вычислительно расточительным:

result = expr
for _ in replace:
    # Applying n times
    result = result.subs(replace)

Я надеялся наrecursive возможностьsubsно этого, похоже, не существует. Есть лучшие варианты?

Ответы на вопрос(3)

Ваш ответ на вопрос