from sympy import Expr, log, Abs, sqrt
from sympy.abc import x, u

class CustomExpr(Expr):
pass

expr = log(Abs(sqrt(1+2/x)-1))

print(expr.subs(x, u))
print(expr.subs(x, CustomExpr(u)))

The first one prints, as expected, log(|sqrt(1 + 2/u) - 1|)

But the second prints something different:
log(sqrt(i*sin(atan2(-2*im(CustomExpr(re(u) + 
i*im(u)))/(re(CustomExpr(re(u) + i*im(u)))**2 + im(CustomExpr(re(u) + 
i*im(u)))**2), 1 + 2*re(CustomExpr(re(u) + i*im(u)))/(re(CustomExpr(re(u) + 
i*im(u)))**2 + im(CustomExpr(re(u) + i*im(u)))**2))/2)*conjugate(((1 + 
2*re(CustomExpr(re(u) + i*im(u)))/(re(CustomExpr(re(u) + i*im(u)))**2 + 
im(CustomExpr(re(u) + i*im(u)))**2))**2 + 4*im(CustomExpr(re(u) + 
i*im(u)))**2/(re(CustomExpr(re(u) + i*im(u)))**2 + im(CustomExpr(re(u) + 
i*im(u)))**2)**2)**(1/4)) - i*sin(atan2(-2*im(CustomExpr(re(u) + 
i*im(u)))/(re(CustomExpr(re(u) + i*im(u)))**2 + im(CustomExpr(re(u) + 
i*im(u)))**2), 1 + 2*re(CustomExpr(re(u) + i*im(u)))/(re(CustomExpr(re(u) + 
i*im(u)))**2 + im(CustomExpr(re(u) + i*im(u)))**2))/2)*conjugate(((1 + 
2*re(CustomExpr(re(u) + i*im(u)))/(re(CustomExpr(re(u) + i*im(u)))**2 + 
im(CustomExpr(re(u) + i*im(u)))**2))**2 + 4*im(CustomExpr(re(u) + 
i*im(u)))**2/(re(CustomExpr(re(u) + i*im(u)))**2 + im(CustomExpr(re(u) + 
i*im(u)))**2)**2)**(1/4))*sqrt(1 + 2*CustomExpr(u)**(-1)) - 
cos(atan2(-2*im(CustomExpr(re(u) + i*im(u)))/(re(CustomExpr(re(u) + 
i*im(u)))**2 + im(CustomExpr(re(u) + i*im(u)))**2), 1 + 
2*re(CustomExpr(re(u) + i*im(u)))/(re(CustomExpr(re(u) + i*im(u)))**2 + 
im(CustomExpr(re(u) + i*im(u)))**2))/2)*conjugate(((1 + 
2*re(CustomExpr(re(u) + i*im(u)))/(re(CustomExpr(re(u) + i*im(u)))**2 + 
im(CustomExpr(re(u) + i*im(u)))**2))**2 + 4*im(CustomExpr(re(u) + 
i*im(u)))**2/(re(CustomExpr(re(u) + i*im(u)))**2 + im(CustomExpr(re(u) + 
i*im(u)))**2)**2)**(1/4)) + cos(atan2(-2*im(CustomExpr(re(u) + 
i*im(u)))/(re(CustomExpr(re(u) + i*im(u)))**2 + im(CustomExpr(re(u) + 
i*im(u)))**2), 1 + 2*re(CustomExpr(re(u) + i*im(u)))/(re(CustomExpr(re(u) + 
i*im(u)))**2 + im(CustomExpr(re(u) + i*im(u)))**2))/2)*conjugate(((1 + 
2*re(CustomExpr(re(u) + i*im(u)))/(re(CustomExpr(re(u) + i*im(u)))**2 + 
im(CustomExpr(re(u) + i*im(u)))**2))**2 + 4*im(CustomExpr(re(u) + 
i*im(u)))**2/(re(CustomExpr(re(u) + i*im(u)))**2 + im(CustomExpr(re(u) + 
i*im(u)))**2)**2)**(1/4))*sqrt(1 + 2*CustomExpr(u)**(-1)) + 1 - sqrt(1 + 
2*CustomExpr(u)**(-1))))

Is this a bug or it works as expected?

How to make print(expr.subs(x, CustomExpr(u))) output log(|sqrt(1 + 2/u) - 
1|)?

Thank you.

-- 
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 [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/sympy/a93b9e4e-a9e5-4233-8417-c68121430c33n%40googlegroups.com.

Reply via email to