Source code for qnet.printing.treeprinting

"""Tree printer for Expressions

This is mainly for interactive use.
"""
from ._render_head_repr import render_head_repr

__all__ = []
__private__ = ['tree', 'print_tree']


def _shorten_render(renderer, max_len):
    """Return a modified that returns the representation of expr, or '...' if
    that representation is longer than `max_len`"""

    def short_renderer(expr):
        res = renderer(expr)
        if len(res) > max_len:
            return '...'
        else:
            return res

    return short_renderer


def _shorten_render_unicode():
    from qnet.printing import unicode as unicode_printer
    return _shorten_render(unicode_printer, 15)


def _shorten_render_ascii():
    from qnet.printing import ascii as ascii_printer
    return _shorten_render(ascii_printer, 15)





[docs]def tree(expr, **kwargs): """Give the output of `tree` as a multiline string, using line drawings to visualize the hierarchy of expressions (similar to the ``tree`` unix command line program for showing directory trees) See also: :func:`qnet.printing.srepr` with ``indented=True`` produces a similar tree-like rendering of the given expression that can be re-evaluated to the original expression. """ return "\n".join(print_tree(expr, _print=False, **kwargs))