I am trying to reverse the order of an expression before printing it for my 
documentation, and I want ascending order, but SymPy always gives me 
descending order. All of the expressions are polynomials, specifically 
partial sums of power series. Since, according to Internet searches, there 
is no easy way to do this, I have tried a number of things, including 
manipulating the expression tree. The original expression is always Add of 
a tuple, and each tuple is a rational number and x**n. When I loop through 
the expression and Add the components, I always get the same order. The 
elegant solution would be to reverse the tuple and Add it all at once, but 
that is deprecated and gives me a tuple instead of a sum.

Here is some sample code, a test program that demonstrates the problem.

from sympy import symbols, Rational, Add, latex, Eq
x = symbols('x')
lhs = symbols('X')
rhs = Rational(3)/Rational(4)*x**3 + Rational(2)/Rational(5)*x**2 + 
Rational(1)/Rational(4)*x
X1 = rhs.args
#X2 = X1[::-1] # Why don't I need this? My debugger shows the expression 
and the tuple in reverse order.
X2 = X1
# Try the expected order of Add. This produces a sum, but with an extra set 
of parantheses, and not the desired order.
X3 = X2[0]
X2R = X2[1:len(X2)]
for indT in range(0, len(X2R)):
    termT = X2R[indT]
    X3 = Add(X3, termT, evaluate=False)
# Try the other order of Add. This looks the same as X3.
X4 = X2[0]
for indT in range(0, len(X2R)):
    termT = X2R[indT]
    X4 = Add(termT, X4, evaluate=False)
# Try single step. This is deprecated, gives the correct order, but returns 
a tuple instead of a sum.
#X2 = X1[::-1] # Why don't I need this?
X2 = X1
X5 = Add(X2, evaluate=False) 
         
print(latex(Eq(lhs, rhs))) # original order
print(latex(Eq(lhs, X3))) # still original order
print(latex(Eq(lhs, X4))) # still original order
print(latex(Eq(lhs, X5))) # desired order, but tuple instead of sum

-- 
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 on the web visit 
https://groups.google.com/d/msgid/sympy/166a5149-26b2-47f7-9956-943b9d379d92n%40googlegroups.com.

Reply via email to