how to get a more readable output of integral_steps in ipython3

131 views
Skip to first unread message

chaowen guo

unread,
May 20, 2016, 7:51:17 PM5/20/16
to sympy
Hi:

I find out that integral_steps in sympy.integrals.manualintegrate can print out the exact step about how sympy integrate an expression. However the answer is pretty unreadable. For example:

import sympy
x=sympy.symbols('x',real=True)
e,m,w=sympy.symbols('e,m,w',positive=True)
sympy.manualintegrate.integral_steps(sympy.sqrt(2*e*m-(x*m*w)**2),x)

the output is:
TrigSubstitutionRule(theta=_theta, func=sqrt(2)*sqrt(e)*sin(_theta)/(sqrt(m)*w), rewritten=2*e*cos(_theta)**2/w, substep=ConstantTimesRule(constant=2*e/w, other=cos(_theta)**2, substep=RewriteRule(rewritten=cos(2*_theta)/2 + 1/2, substep=AddRule(substeps=[ConstantTimesRule(constant=1/2, other=cos(2*_theta), substep=URule(u_var=_u, u_func=2*_theta, constant=1/2, substep=ConstantTimesRule(constant=1/2, other=cos(_u), substep=TrigRule(func='cos', arg=_u, context=cos(_u), symbol=_u), context=cos(_u), symbol=_u), context=cos(2*_theta), symbol=_theta), context=cos(2*_theta)/2, symbol=_theta), ConstantRule(constant=1/2, context=1/2, symbol=_theta)], context=cos(2*_theta)/2 + 1/2, symbol=_theta), context=cos(_theta)**2, symbol=_theta), context=2*e*cos(_theta)**2/w, symbol=_theta), restriction=And(x < sqrt(2)*sqrt(e)/(sqrt(m)*w), x > -sqrt(2)*sqrt(e)/(sqrt(m)*w)), context=sqrt(2*e*m - m**2*w**2*x**2), symbol=x)

It is hard to read and understand.

Although sympy gamma can output the integrate step more clearly, but sympy gamma just support an expression. If the expression depends on context, it is totally useless.

The manualintegrate.py said sympy gamma use https://github.com/sympy/sympy_gamma/blob/master/app/logic/intsteps.py to output integrate step.

So I try
import intsteps
intsteps.print_html_steps(sympy.sqrt(2*e*m-(x*m*w)**2),x)

the output is still ugly:

'<ol>\n    <p>TrigSubstitutionRule(theta=_theta, func=sqrt(2)*sqrt(e)*sin(_theta)/(sqrt(m)*w), rewritten=2*e*cos(_theta)**2/w, substep=ConstantTimesRule(constant=2*e/w, other=cos(_theta)**2, substep=RewriteRule(rewritten=cos(2*_theta)/2 + 1/2, substep=AddRule(substeps=[ConstantTimesRule(constant=1/2, other=cos(2*_theta), substep=URule(u_var=_u, u_func=2*_theta, constant=1/2, substep=ConstantTimesRule(constant=1/2, other=cos(_u), substep=TrigRule(func=\'cos\', arg=_u, context=cos(_u), symbol=_u), context=cos(_u), symbol=_u), context=cos(2*_theta), symbol=_theta), context=cos(2*_theta)/2, symbol=_theta), ConstantRule(constant=1/2, context=1/2, symbol=_theta)], context=cos(2*_theta)/2 + 1/2, symbol=_theta), context=cos(_theta)**2, symbol=_theta), context=2*e*cos(_theta)**2/w, symbol=_theta), restriction=And(x < sqrt(2)*sqrt(e)/(sqrt(m)*w), x > -sqrt(2)*sqrt(e)/(sqrt(m)*w)), context=sqrt(2*e*m - m**2*w**2*x**2), symbol=x)</p>\n<li>\n    <p>Now simplify:</p>\n    <p><script type="math/tex; mode=display">\\begin{cases} \\frac{e}{w} \\operatorname{asin}{\\left (\\frac{\\sqrt{2} \\sqrt{m} w x}{2 \\sqrt{e}} \\right )} + \\frac{\\sqrt{m} x}{2} \\sqrt{2 e - m w^{2} x^{2}} & \\text{for}\\: x > - \\frac{\\sqrt{2} \\sqrt{e}}{\\sqrt{m} w} \\wedge x < \\frac{\\sqrt{2} \\sqrt{e}}{\\sqrt{m} w} \\end{cases}</script></p>\n</li>\n<li>\n    <p>Add the constant of integration:</p>\n    <p><script type="math/tex; mode=display">\\begin{cases} \\frac{e}{w} \\operatorname{asin}{\\left (\\frac{\\sqrt{2} \\sqrt{m} w x}{2 \\sqrt{e}} \\right )} + \\frac{\\sqrt{m} x}{2} \\sqrt{2 e - m w^{2} x^{2}} & \\text{for}\\: x > - \\frac{\\sqrt{2} \\sqrt{e}}{\\sqrt{m} w} \\wedge x < \\frac{\\sqrt{2} \\sqrt{e}}{\\sqrt{m} w} \\end{cases}+ \\mathrm{constant}</script></p>\n</li>\n</ol>\n<hr/>\n    <p>The answer is:</p>\n    <p><script type="math/tex; mode=display">\\begin{cases} \\frac{e}{w} \\operatorname{asin}{\\left (\\frac{\\sqrt{2} \\sqrt{m} w x}{2 \\sqrt{e}} \\right )} + \\frac{\\sqrt{m} x}{2} \\sqrt{2 e - m w^{2} x^{2}} & \\text{for}\\: x > - \\frac{\\sqrt{2} \\sqrt{e}}{\\sqrt{m} w} \\wedge x < \\frac{\\sqrt{2} \\sqrt{e}}{\\sqrt{m} w} \\end{cases}+ \\mathrm{constant}</script></p>'

So how to get a more readable output of integral_steps in ipython3?

Reply all
Reply to author
Forward
0 new messages