prettyprinter icon indicating copy to clipboard operation
prettyprinter copied to clipboard

Prettyprinting an IPython.core.magics.execution.TimeitResult crashes prettyprinter

Open anntzer opened this issue 6 years ago • 0 comments

  • PrettyPrinter version: 0.18.0
  • Python version: 3.7
  • Operating System: Fedora Linux

Description

Prettyprinting an IPython.core.magics.execution.TimeitResult crashes prettyprinter. That class is defined at https://github.com/ipython/ipython/blob/master/IPython/core/magics/execution.py.

What I Did

In IPython 7.8.0 with prettyprinter enabled:

In [1]: x = %timeit -o pass                                                                                          5.06 ns ± 0.0139 ns per loop (mean ± std. dev. of 7 runs, 100000000 loops each)

In [2]: type(x)                                                                                                      
Out[2]: IPython.core.magics.execution.TimeitResult  # class

In [3]: x                                                                                                            
Out[3]: ---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
~/.local/lib/python3.7/site-packages/IPython/core/formatters.py in __call__(self, obj)
    700                 type_pprinters=self.type_printers,
    701                 deferred_pprinters=self.deferred_printers)
--> 702             printer.pretty(obj)
    703             printer.flush()
    704             return stream.getvalue()

~/.local/lib/python3.7/site-packages/prettyprinter/extras/ipython.py in pretty(self, obj)
     58                 ),
     59                 width=columns,
---> 60                 end=None
     61             )
     62 

~/.local/lib/python3.7/site-packages/prettyprinter/__init__.py in cpprint(object, stream, indent, width, depth, compact, ribbon_width, max_seq_len, sort_dict_keys, style, end)
    253         else stream
    254     )
--> 255     colored_render_to_stream(stream, sdocs, style=style)
    256     if end:
    257         stream.write(end)

~/.local/lib/python3.7/site-packages/prettyprinter/color.py in colored_render_to_stream(stream, sdocs, style, newline, separator)
    201         style = default_style
    202 
--> 203     evald = list(sdocs)
    204 
    205     if not evald:

~/.local/lib/python3.7/site-packages/prettyprinter/layout.py in best_layout(doc, width, ribbon_frac, fitting_predicate, outcol, mode)
    253                 ribbon_width=ribbon_width,
    254             )
--> 255             normalized = normalize_doc(evaluated_doc)
    256             triplestack.append((indent, mode, normalized))
    257         elif isinstance(doc, Annotated):

~/.local/lib/python3.7/site-packages/prettyprinter/doctypes.py in normalize_doc(doc)
      4             return NIL
      5         return doc
----> 6     return doc.normalize()
      7 
      8 

~/.local/lib/python3.7/site-packages/prettyprinter/doctypes.py in normalize(self)
     55         propagate_broken = False
     56         for doc in self.docs:
---> 57             doc = normalize_doc(doc)
     58             if isinstance(doc, Concat):
     59                 normalized_docs.extend(doc.docs)

~/.local/lib/python3.7/site-packages/prettyprinter/doctypes.py in normalize_doc(doc)
      4             return NIL
      5         return doc
----> 6     return doc.normalize()
      7 
      8 

~/.local/lib/python3.7/site-packages/prettyprinter/doctypes.py in normalize(self)
    199         elif doc_normalized is NIL:
    200             return NIL
--> 201         return Group(doc_normalized)
    202 
    203     def __repr__(self):

~/.local/lib/python3.7/site-packages/prettyprinter/doctypes.py in __init__(self, doc)
    187 
    188     def __init__(self, doc):
--> 189         assert isinstance(doc, Doc)
    190         self.doc = doc
    191

anntzer avatar Oct 03 '19 10:10 anntzer