[IPython-dev] what is the best way of doing pretty print with ipython

Ondrej Certik ondrej at certik.cz
Mon Jan 7 09:05:48 EST 2008


On Jan 7, 2008 3:02 PM, Ondrej Certik <ondrej at certik.cz> wrote:
> Hi,
>
> in SymPy, we use ipython as an easy to use shell and generally it
> works incredibly well:
>
> $ bin/isympy
> Python 2.4.4 console for SymPy 0.5.11-hg. These commands were executed:
> >>> from __future__ import division
> >>> from sympy import *
> >>> x, y, z = symbols('xyz')
> >>> k, m, n = symbols('kmn', integer=True)
> >>> f = Function("f")
> >>> Basic.set_repr_level(2)     # pretty print output; Use "1" for python output
> >>> pprint_try_use_unicode()    # use unicode pretty print when available
>
> Documentation can be found at http://sympy.org/
>
>
> In [1]: integr
> integrals  integrate
>
> In [1]: integrate(x**2 * cos(x), x)
> Out[1]:
>              2
> -2*sin(x) + x *sin(x) + 2*x*cos(x)
>
> In [2]: x**2
> Out[2]:
>  2
> x
>
> In [3]:
>
>
> However, we are abusing python repr() function as shown here:
>
> In [3]: repr(x**2)
> Out[3]: ' 2\nx '
>
> In [4]: str(x**2)
> Out[4]: 'x**2'
>
> The repr() should return just one line and be something that can be
> "almost" parsed back to python.
>
> We can control this behavior:
>
> In [1]: x**2
> Out[1]:
>  2
> x
>
> In [2]: Basic.set_repr_level(1)
> Out[2]: 2
>
> In [3]: x**2
> Out[3]: x**2
>
>
> But it doesn't help always, consider:
>
> In [1]: (x**2, x**3, y)
> Out[1]:
> ( 2
> x ,  3
> x , y)
>
> In [2]: Basic.set_repr_level(1)
> Out[2]: 2
>
> In [3]: (x**2, x**3, y)
> Out[3]: (x**2, x**3, y)
>
>
> the [3] is fine, but [1] is completely messed up.

BTW, here we discovered a more serious issue with ipython and repr
returning several lines with unicode:

http://code.google.com/p/sympy/issues/detail?id=484

Is the problem in ipython or sympy? I guess there is some bug in
ipython too, because it messes up the terminal when I return from
ipython.
So whatever broken program ipython executes (sympy), it should return
the terminal in a sane state.

Ondrej



More information about the IPython-dev mailing list