Warnings traceback for top level

39 views
Skip to first unread message

Andrey Novoseltsev

unread,
May 23, 2016, 5:33:20 PM5/23/16
to sage-devel
While IPython shows nice traceback for exceptions, even for 1/0 in the interpreter, it is quite confusing for warnings, e.g.

novoselt@sage:~/sage$ sage
┌────────────────────────────────────────────────────────────────────┐
│ SageMath version 7.3.beta0, Release Date: 2016-05-21               │
│ Type "notebook()" for the browser-based notebook interface.        │
│ Type "help()" for help.                                            │
└────────────────────────────────────────────────────────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Warning: this is a prerelease version, and it may be unstable.     ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
sage: Piecewise([[(1,2),x]])
/home/novoselt/sage/src/bin/sage-ipython:1: DeprecationWarning: use lower-case piecewise instead
See http://trac.sagemath.org/14801 for details.
  #!/usr/bin/env python
/home/novoselt/sage/local/lib/python2.7/site-packages/IPython/core/formatters.py:92: DeprecationWarning: DisplayFormatter._ipython_display_formatter_default is deprecated: use @default decorator instead.
  def _ipython_display_formatter_default(self):
/home/novoselt/sage/local/lib/python2.7/site-packages/IPython/core/formatters.py:98: DeprecationWarning: DisplayFormatter._formatters_default is deprecated: use @default decorator instead.
  def _formatters_default(self):
/home/novoselt/sage/local/lib/python2.7/site-packages/IPython/core/formatters.py:677: DeprecationWarning: PlainTextFormatter._deferred_printers_default is deprecated: use @default decorator instead.
  def _deferred_printers_default(self):
/home/novoselt/sage/local/lib/python2.7/site-packages/IPython/core/formatters.py:669: DeprecationWarning: PlainTextFormatter._singleton_printers_default is deprecated: use @default decorator instead.
  def _singleton_printers_default(self):
/home/novoselt/sage/local/lib/python2.7/site-packages/IPython/core/formatters.py:672: DeprecationWarning: PlainTextFormatter._type_printers_default is deprecated: use @default decorator instead.
  def _type_printers_default(self):
/home/novoselt/sage/local/lib/python2.7/site-packages/IPython/core/formatters.py:669: DeprecationWarning: PlainTextFormatter._singleton_printers_default is deprecated: use @default decorator instead.
  def _singleton_printers_default(self):
/home/novoselt/sage/local/lib/python2.7/site-packages/IPython/core/formatters.py:672: DeprecationWarning: PlainTextFormatter._type_printers_default is deprecated: use @default decorator instead.
  def _type_printers_default(self):
/home/novoselt/sage/local/lib/python2.7/site-packages/IPython/core/formatters.py:677: DeprecationWarning: PlainTextFormatter._deferred_printers_default is deprecated: use @default decorator instead.
  def _deferred_printers_default(self):
Piecewise defined function with 1 parts, [[(1, 2), x]]

A lot of trailing messages are surely annoying, but right after the deprecation warning we see

  #!/usr/bin/env python

which is the first line of the sage-ipython script which has nothing to do with my piecewise function.

I just managed to go from

/home/sc_serv/sagecell/receiver.py:79: DeprecationWarning: use lower-case piecewise instead
See http://trac.sagemath.org/14801 for details.
  # something here so that worker processes don't have this overhead

to

sagemathcell.py:79: DeprecationWarning: use lower-case piecewise instead
See http://trac.sagemath.org/14801 for details.
  f = Piecewise([((a, b), e.function(x)) for e, a, b in f])

warning message in a long interact entered in SageMathCell. The hack is here
https://github.com/sagemath/sagecell/commit/6c6216e4c8253ccd4c006bc055eaa8024c286940

Should something like this be done in Sage or perhaps in IPython directly?

Volker Braun

unread,
May 23, 2016, 6:22:58 PM5/23/16
to sage-devel
Apparently the IPython/Jupyter devs don't want to change their deprecation warnings and advise users to filter them out: https://github.com/ipython/ipython/issues/9242. So something like

warnings.filterwarnings('default', category=DeprecationWarning, module='.*/mypackage/.*')

should work if we wouldn't reset the filter.

Andrey Novoseltsev

unread,
May 23, 2016, 6:27:47 PM5/23/16
to sage-devel
On Monday, 23 May 2016 16:22:58 UTC-6, Volker Braun wrote:
Apparently the IPython/Jupyter devs don't want to change their deprecation warnings and advise users to filter them out: https://github.com/ipython/ipython/issues/9242. So something like

warnings.filterwarnings('default', category=DeprecationWarning, module='.*/mypackage/.*')

should work if we wouldn't reset the filter.

Yeap, I am working on setting up filters correctly and dealing with their deprecations. The point here however is that warning message is broken at the top level - it referenced an unrelated file instead of the user code.
Reply all
Reply to author
Forward
0 new messages