SymPy - sustituye entradas simbólicas en una matriz

Tengo una función de Python que genera un sympy.Matrix con entradas simbólicas. Funciona de manera efectiva como:

import sympy as sp
M = sp.Matrix([[1,0,2],[0,1,2],[1,2,0]])

def make_symbolic_matrix(M):
    M_sym = sp.zeros(3)
    syms = ['a0:3']
    for i in xrange(3):
        for j in xrange(3):
            if M[i,j] == 1:
                M_sym = syms[i]
            elif M[i,j] == 2:
                M_sym = 1 - syms[i]
    return M_sym

Esto funciona bien Saco una matriz, que puedo usar para todos los cálculos simbólicos que necesito.

Mi problema es que ahora quiero evaluar mi matriz en el valor de parámetro especificado. Por lo general, solo usaría el atributo .subs. Sin embargo, dado que los símbolos, que ahora se usan como entradas en mi matriz, se definieron originalmente como elementos temporales en una función, no sé cómo llamarlos.

Parece que debería ser posible, ya que soy capaz de realizar cálculos simbólicos.

Lo que quiero hacer sería algo así (siguiendo el código anterior):

M_sym = make_matrix(M)
M_eval = M_sym.subs([(a0,.8),(a1,.3),(a2,.5)])

Pero todo lo que obtengo es "el nombre 'a0' no está definido".

¡Sería súper feliz si alguien por ahí tuviera una solución!

PD. No solo estoy definiendo los símbolos globalmente, porque en el problema real no sé cuántos parámetros tengo de vez en cuando.

Respuestas a la pregunta(3)

Su respuesta a la pregunta