Substituição recursiva no sympy

Eu tenho uma expressão sympy com várias variáveis que precisam ser substituídas. O problema é que algumas das expressões a serem substituídas também contêm instâncias de variáveis que precisam ser substituídas.

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

Se a lista de substituição estiver na ordem correta, ela aplicará cada substituição sequencialmente, embora no meu aplicativo real eu não saiba qual ordem seria apropriada:

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

Eu posso forçar a substituição aplicando a substituição n vezes aexpr oureplace, mas isso parece um desperdício computacional:

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

Eu estava esperando por umrecursive opção parasubs, mas isso parece não existir. Alguma opção melhor?

questionAnswers(3)

yourAnswerToTheQuestion