Opened 8 years ago

Closed 6 years ago

#15271 closed defect (wontfix)

pretty_print_default fails in a terminal session

Reported by: iandrus Owned by:
Priority: major Milestone: sage-duplicate/invalid/wontfix
Component: user interface Keywords:
Cc: vbraun, ppurka, novoselt Merged in:
Authors: Reviewers:
Report Upstream: N/A Work issues:
Branch: Commit:
Dependencies: Stopgaps:

Status badges

Description

Calling pretty_print_default in a terminal fails:

┌────────────────────────────────────────────────────────────────────┐
│ Sage Version 5.12, Release Date: 2013-10-07                        │
│ Type "notebook()" for the browser-based notebook interface.        │
│ Type "help()" for help.                                            │
└────────────────────────────────────────────────────────────────────┘
sage: pretty_print_default(True)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-1-b70acc55a8d2> in <module>()
----> 1 pretty_print_default(True)

/Users/ivanandres/SageStuff/sage-5.12/local/lib/python2.7/site-packages/sage/misc/latex.pyc in pretty_print_default(enable)
   2463     """
   2464     import sys
-> 2465     sys.displayhook.set_display('typeset' if enable else 'simple')
   2466
   2467

AttributeError: 'DisplayHook' object has no attribute 'set_display'
sage:

Perhaps calling pretty_print_default doesn't make much sense in the terminal, but it's used in the emacs interface to be able to display typeset output.

I think doctests pass because the doctesting framework sets sys.displayhook to something else, namely sage.misc.displayhook.DisplayHook(sys.displayhook). I think the regression was introduced in #15168, and so I have cc'ed the people involved there in case they want to weigh in on how this should be fixed.

Change History (18)

comment:1 Changed 8 years ago by ppurka

As commented in the function, this should probably be removed from the global namespace. It is really not useful in the terminal.

comment:2 Changed 8 years ago by vbraun

Correct, the terminal uses IPython's machinery instead of sys.displayhook. The doctests and the notebook run commands in non-ipython sessions, so our displayhook is used. IMHO the best way to switch IPython's behavior is with the %display magic, that is,

sage: %display typeset
sage: 1+1
<html><script type="math/tex">\newcommand{\Bold}[1]{\mathbf{#1}}2</script></html>

I see that we don't actually doctest that, this ought to be added to sage/misc/sage_extension.py

comment:3 Changed 8 years ago by ppurka

If we want to fix this function, can this be made to call whatever the magic %display typeset runs?

Maybe run the current code inside a try: except: construct?

Last edited 8 years ago by ppurka (previous) (diff)

comment:4 Changed 8 years ago by vbraun

We can, but imho we should just remove pretty_print_default.

comment:5 Changed 8 years ago by ppurka

Let's use this ticket for removing the function from the global namespace.

comment:6 follow-up: Changed 8 years ago by ppurka

@iandrus - Would the emacs interface work if you set sys.displayhook = sage.misc.displayhook.DisplayHook from emacs?

comment:7 in reply to: ↑ 6 ; follow-ups: Changed 8 years ago by iandrus

Replying to ppurka:

@iandrus - Would the emacs interface work if you set sys.displayhook = sage.misc.displayhook.DisplayHook from emacs?

Yes that works. Just to be clear, sage.misc.displayhook.DisplayHook only exists in 5.12 (and later), right?

comment:8 in reply to: ↑ 7 Changed 8 years ago by ppurka

Replying to iandrus:

Replying to ppurka:

@iandrus - Would the emacs interface work if you set sys.displayhook = sage.misc.displayhook.DisplayHook from emacs?

Yes that works. Just to be clear, sage.misc.displayhook.DisplayHook only exists in 5.12 (and later), right?

No. That exists from earlier, probably sage-5.11 (#12719).

comment:9 in reply to: ↑ 7 Changed 8 years ago by iandrus

Replying to iandrus:

Replying to ppurka:

@iandrus - Would the emacs interface work if you set sys.displayhook = sage.misc.displayhook.DisplayHook from emacs?

Yes that works. Just to be clear, sage.misc.displayhook.DisplayHook only exists in 5.12 (and later), right?

I spoke too soon. Using sage.misc.displayhook.DisplayHook makes plots not appear (in DOCTEST_MODE so they can be viewed inline as well). I haven't had a change to debug into it yet.

comment:10 Changed 8 years ago by vbraun

No graphics is shown in DOCTEST_MODE, this is the expected behavior.

Whats wrong with %display typeset?

comment:11 Changed 7 years ago by vbraun_spam

  • Milestone changed from sage-6.1 to sage-6.2

comment:12 Changed 7 years ago by vbraun_spam

  • Milestone changed from sage-6.2 to sage-6.3

comment:13 follow-up: Changed 7 years ago by iandrus

Sage mode now uses %display typeset, so I no longer care about this--we can just remove pretty_print_default.

Last edited 7 years ago by iandrus (previous) (diff)

comment:14 Changed 7 years ago by vbraun_spam

  • Milestone changed from sage-6.3 to sage-6.4

comment:15 in reply to: ↑ 13 Changed 6 years ago by kcrisman

Sage mode now uses %display typeset, so I no longer care about this--we can just remove pretty_print_default.

At least from the command line. Possibly also pretty_print?

However, this is needed in all_notebook.py, so don't just remove it completely!

comment:16 Changed 6 years ago by iandrus

  • Milestone changed from sage-6.4 to sage-duplicate/invalid/wontfix
  • Status changed from new to needs_review

pretty_print_default seems to no longer be in the global namespace in a terminal session, so I move we close this as won't fix.

comment:17 Changed 6 years ago by vbraun

  • Status changed from needs_review to positive_review

comment:18 Changed 6 years ago by vbraun

  • Resolution set to wontfix
  • Status changed from positive_review to closed
Note: See TracTickets for help on using tickets.