I have a very basic sympy question, which has me stumped, and am hoping
that someone here can set me straight. I have an expression for which
subs() seems to have no effect:
>>> a=Symbol('a', real=True, positive=True)
>>> q=u[7]
>>> q
-a*(45*a**18 - 120*a**16 + 240*a**12 - 504*a**8 + 1440*a**4 - 2700*a**2
- 4645)/4050
>>> q.subs(a, Rational(1,2))
-a*(45*a**18 - 120*a**16 + 240*a**12 - 504*a**8 + 1440*a**4 - 2700*a**2
- 4645)/4050
>>> srepr(q)
"Mul(Integer(-1), Rational(1, 4050), Symbol('a', real=True,
positive=True), Add(Mul(Integer(45), Pow(Symbol('a', real=True,
positive=True), Integer(18))), Mul(Integer(-1), Integer(120),
Pow(Symbol('a', real=True, positive=True), Integer(16))),
Mul(Integer(240), Pow(Symbol('a', real=True, positive=True),
Integer(12))), Mul(Integer(-1), Integer(504), Pow(Symbol('a', real=True,
positive=True), Integer(8))), Mul(Integer(1440), Pow(Symbol('a',
real=True, positive=True), Integer(4))), Mul(Integer(-1), Integer(2700),
Pow(Symbol('a', real=True, positive=True), Integer(2))), Integer(-4645)))"
But if I just cut and paste the same expression into the variable, then
subs() works as expected:
>>> q=-a*(45*a**18 - 120*a**16 + 240*a**12 - 504*a**8 + 1440*a**4 -
2700*a**2 - 4645)/4050
>>> q.subs(a, Rational(1,2))
1371514291/2123366400
The internal representation is identical:
>>> srepr(q)
"Mul(Integer(-1), Rational(1, 4050), Symbol('a', real=True,
positive=True), Add(Mul(Integer(45), Pow(Symbol('a', real=True,
positive=True), Integer(18))), Mul(Integer(-1), Integer(120),
Pow(Symbol('a', real=True, positive=True), Integer(16))),
Mul(Integer(240), Pow(Symbol('a', real=True, positive=True),
Integer(12))), Mul(Integer(-1), Integer(504), Pow(Symbol('a', real=True,
positive=True), Integer(8))), Mul(Integer(1440), Pow(Symbol('a',
real=True, positive=True), Integer(4))), Mul(Integer(-1), Integer(2700),
Pow(Symbol('a', real=True, positive=True), Integer(2))), Integer(-4645)))"
Why does subs() work in one case, and not in the other?