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.
