The Sage pretty printer

Any transformation to a string goes through here. In other words, the SagePlainTextFormatter is entirely implemented via SagePrettyPrinter. Other formatters may or may not use SagePrettyPrinter to generate text output.

AUTHORS:

  • Bill Cauchois (2009): initial version
  • Jean-Baptiste Priez <jbp@kerios.fr> (2013): ASCII art
  • Volker Braun (2013): refactored into DisplayHookBase
class sage.repl.display.pretty_print.SagePrettyPrinter(output, max_width, newline, max_seq_length=None)

Bases: IPython.lib.pretty.PrettyPrinter

Pretty print Sage objects for the commandline

INPUT:

See IPython documentation.

EXAMPLES:

sage: 123
123

IPython pretty printers:

sage: set({1, 2, 3})
{1, 2, 3}
sage: dict(zzz=123, aaa=99, xab=10)    # sorted by keys
{'aaa': 99, 'xab': 10, 'zzz': 123}

These are overridden in IPython in a way that we feel is somewhat confusing, and we prefer to print them like plain Python which is more informative. See trac ticket #14466

sage: 'this is a string'
'this is a string'
sage: type(123)
<type 'sage.rings.integer.Integer'>
sage: type
<... 'type'>
sage: import types
sage: type('name', (), {})
<class '__main__.name'>
sage: types.BuiltinFunctionType
<type 'builtin_function_or_method'>

sage: def foo(): pass
sage: foo
<function foo at 0x...>
pretty(obj)

Pretty print obj

This is the only method that outside code should invoke.

INPUT:

  • obj – anything.

OUTPUT:

String representation for object.

EXAMPLES:

sage: from sage.repl.display.pretty_print import SagePrettyPrinter
sage: from six import StringIO
sage: stream = StringIO()
sage: SagePrettyPrinter(stream, 78, '\n').pretty([type, 123, 'foo'])
sage: stream.getvalue()
"[<... 'type'>,"
toplevel()

Return whether we are currently at the top level.

OUTPUT:

Boolean. Whether we are currently pretty-printing an object at the outermost level (True), or whether the object is inside a container (False).

EXAMPLES:

sage: from sage.repl.display.pretty_print import SagePrettyPrinter
sage: from six import StringIO
sage: stream = StringIO()
sage: spp = SagePrettyPrinter(stream, 78, '\n')
sage: spp.toplevel()
True