Sustitución recursiva en sympy

Tengo una expresión simétrica con múltiples variables que necesitan ser sustituidas. El problema es que algunas de las expresiones a ser sustituidas también contienen instancias de variables que necesitan ser sustituidas.

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

Si la lista de reemplazo está en el orden correcto, aplicará cada sustitución secuencialmente, aunque en mi aplicación real no sé qué orden sería apropiado:

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

Puedo forzar la sustitución aplicando la sustitución n veces a cualquieraexpr oreplace, pero eso parece un desperdicio computacional:

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

Esperaba unrecursive opción desubs, pero eso no parece existir. ¿Alguna mejor opción?

Respuestas a la pregunta(3)

Su respuesta a la pregunta