On 07/04/2021 11:59, Oscar Benjamin wrote:
On Wed, 7 Apr 2021 at 10:28, 'Bruce Allen' via sympy
<sympy@googlegroups.com> wrote:
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?
I'm not sure. I can't reproduce this without u though. I tried making
u=(the srepr output) but then the substitution worked fine.


Oscar

Oscar,

That question made me wonder if

Symbol('a', real=True, positive=True) and Symbol('a')

Are the same objects. Logically I imagine they can't be - either one symbol is 
mutated or they remain distinct.

David

--
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sympy+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/621065e1-7cf0-4a9e-cc74-5e2553c9ce9d%40dbailey.co.uk.

Reply via email to