Bug 1258249 - Sagemath crash
Summary: Sagemath crash
Keywords:
Status: CLOSED DUPLICATE of bug 1258006
Alias: None
Product: Fedora
Classification: Fedora
Component: sagemath
Version: 22
Hardware: Unspecified
OS: Unspecified
unspecified
high
Target Milestone: ---
Assignee: Paulo Andrade
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2015-08-30 14:06 UTC by Germano Massullo
Modified: 2023-09-14 03:04 UTC (History)
3 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2015-09-06 14:56:43 UTC
Type: Bug
Embargoed:


Attachments (Terms of Use)

Description Germano Massullo 2015-08-30 14:06:36 UTC
Description of problem:
Lastest update trigges Sagemath crash at start. I am waiting for registration response from upstream trac, so I can report the bug also there.

Version-Release number of selected component (if applicable):
sagemath-6.5-7.fc22.x86_64

How reproducible:
start sage from system console




Additional info:
***************************************************************************

IPython post-mortem report

{'commit_hash': 'af17558',
 'commit_source': 'installation',
 'default_encoding': 'UTF-8',
 'ipython_path': '/usr/lib/python2.7/site-packages/IPython',
 'ipython_version': '2.4.1',
 'os_name': 'posix',
 'platform': 'Linux-4.1.6-200.fc22.x86_64-x86_64-with-fedora-22-Twenty_Two',
 'sys_executable': '/usr/bin/python',
 'sys_platform': 'linux2',
 'sys_version': '2.7.10 (default, Jul  5 2015, 14:15:43) \n[GCC 5.1.1 20150618 (Red Hat 5.1.1-4)]'}

***************************************************************************



***************************************************************************

Crash traceback:

---------------------------------------------------------------------------
ImportError                                  Python 2.7.10: /usr/bin/python
                                                   Sun Aug 30 09:40:36 2015
A problem occured executing Python code.  Here is the sequence of function
calls leading up to the error, with the most recent (innermost) call last.
/usr/lib64/sagemath/local/bin/sage-ipython in <module>()
      1 #!/usr/bin/env python
      2 # -*- coding: utf-8 -*-
      3 """
      4 Sage IPython startup script.
      5 """
      6 from sage.repl.interpreter import SageTerminalApp
      7 
      8 # installs the extra readline commands before the IPython initialization begins.
      9 from sage.repl.readline_extra_commands import *
     10 
     11 app = SageTerminalApp.instance()
---> 12 app.initialize()
        global app.initialize = <bound method SageTerminalApp.initialize of <sage.repl.interpreter.SageTerminalApp object at 0x7fc3b82abb10>>
     13 app.start()

/usr/lib/python2.7/site-packages/IPython/terminal/ipapp.pyc in initialize(self=<sage.repl.interpreter.SageTerminalApp object>, argv=None)

/usr/lib/python2.7/site-packages/IPython/config/application.pyc in catch_config_error(method=<function initialize>, app=<sage.repl.interpreter.SageTerminalApp object>, *args=(None,), **kwargs={})
     77 
     78 #-----------------------------------------------------------------------------
     79 # Application class
     80 #-----------------------------------------------------------------------------
     81 
     82 @decorator
     83 def catch_config_error(method, app, *args, **kwargs):
     84     """Method decorator for catching invalid config (Trait/ArgumentErrors) during init.
     85 
     86     On a TraitError (generally caused by bad config), this will print the trait's
     87     message, and exit the app.
     88     
     89     For use on init methods, to prevent invoking excepthook on invalid input.
     90     """
     91     try:
---> 92         return method(app, *args, **kwargs)
        method = <function initialize at 0x7fc3b82a1230>
        app = <sage.repl.interpreter.SageTerminalApp object at 0x7fc3b82abb10>
        args = (None,)
        kwargs = {}
     93     except (TraitError, ArgumentError) as e:
     94         app.print_help()
     95         app.log.fatal("Bad config encountered during initialization:")
     96         app.log.fatal(str(e))
     97         app.log.debug("Config at the time: %s", app.config)
     98         app.exit(1)
     99 
    100 
    101 class ApplicationError(Exception):
    102     pass
    103 
    104 class LevelFormatter(logging.Formatter):
    105     """Formatter with additional `highlevel` record
    106     
    107     This field is empty if log level is less than highlevel_limit,

/usr/lib/python2.7/site-packages/IPython/terminal/ipapp.pyc in initialize(self=<sage.repl.interpreter.SageTerminalApp object>, argv=None)
    317     
    318     @catch_config_error
    319     def initialize(self, argv=None):
    320         """Do actions after construct, but before starting the app."""
    321         super(TerminalIPythonApp, self).initialize(argv)
    322         if self.subapp is not None:
    323             # don't bother initializing further, starting subapp
    324             return
    325         if not self.ignore_old_config:
    326             check_for_old_config(self.ipython_dir)
    327         # print self.extra_args
    328         if self.extra_args and not self.something_to_run:
    329             self.file_to_run = self.extra_args[0]
    330         self.init_path()
    331         # create the shell
--> 332         self.init_shell()
        self.init_shell = <bound method SageTerminalApp.init_shell of <sage.repl.interpreter.SageTerminalApp object at 0x7fc3b82abb10>>
    333         # and draw the banner
    334         self.init_banner()
    335         # Now a variety of things that happen after the banner is printed.
    336         self.init_gui_pylab()
    337         self.init_extensions()
    338         self.init_code()
    339 
    340     def init_shell(self):
    341         """initialize the InteractiveShell instance"""
    342         # Create an InteractiveShell instance.
    343         # shell.display_banner should always be False for the terminal
    344         # based app, because we call shell.show_banner() by hand below
    345         # so the banner shows *before* all extension loading stuff.
    346         self.shell = TerminalInteractiveShell.instance(parent=self,
    347                         display_banner=False, profile_dir=self.profile_dir,

/usr/lib64/python2.7/site-packages/sage/repl/interpreter.pyc in init_shell(self=<sage.repl.interpreter.SageTerminalApp object>)
    599         # Shell initialization
    600         self.shell = SageTerminalInteractiveShell.instance(
    601             parent=self,
    602             config=self.config,
    603             display_banner=False,
    604             profile_dir=self.profile_dir,
    605             ipython_dir=self.ipython_dir)
    606         self.shell.configurables.append(self)
    607         self.shell.has_sage_extensions = SAGE_EXTENSION in self.extensions
    608 
    609         if self.shell.has_sage_extensions:
    610             self.extensions.remove(SAGE_EXTENSION)
    611 
    612             # load sage extension here to get a crash if
    613             # something is wrong with the sage library
--> 614             self.shell.extension_manager.load_extension(SAGE_EXTENSION)
        self.shell.extension_manager.load_extension = <bound method ExtensionManager.load_extension of <IPython.core.extensions.ExtensionManager object at 0x7fc3b65429d0>>
        global SAGE_EXTENSION = 'sage'
    615 
    616 

/usr/lib/python2.7/site-packages/IPython/core/extensions.pyc in load_extension(self=<IPython.core.extensions.ExtensionManager object>, module_str='sage')
     85 
     86         Returns the string "already loaded" if the extension is already loaded,
     87         "no load function" if the module doesn't have a load_ipython_extension
     88         function, or None if it succeeded.
     89         """
     90         if module_str in self.loaded:
     91             return "already loaded"
     92         
     93         from IPython.utils.syspathcontext import prepended_to_syspath
     94         
     95         with self.shell.builtin_trap:
     96             if module_str not in sys.modules:
     97                 with prepended_to_syspath(self.ipython_extension_dir):
     98                     __import__(module_str)
     99             mod = sys.modules[module_str]
--> 100             if self._call_load_ipython_extension(mod):
        self._call_load_ipython_extension = <bound method ExtensionManager._call_load_ipython_extension of <IPython.core.extensions.ExtensionManager object at 0x7fc3b65429d0>>
        mod = <module 'sage' from '/usr/lib64/python2.7/site-packages/sage/__init__.pyc'>
    101                 self.loaded.add(module_str)
    102             else:
    103                 return "no load function"
    104 
    105     def unload_extension(self, module_str):
    106         """Unload an IPython extension by its module name.
    107 
    108         This function looks up the extension's name in ``sys.modules`` and
    109         simply calls ``mod.unload_ipython_extension(self)``.
    110         
    111         Returns the string "no unload function" if the extension doesn't define
    112         a function to unload itself, "not loaded" if the extension isn't loaded,
    113         otherwise None.
    114         """
    115         if module_str not in self.loaded:

/usr/lib/python2.7/site-packages/IPython/core/extensions.pyc in _call_load_ipython_extension(self=<IPython.core.extensions.ExtensionManager object>, mod=<module 'sage' from '/usr/lib64/python2.7/site-packages/sage/__init__.pyc'>)
    132         """
    133         from IPython.utils.syspathcontext import prepended_to_syspath
    134 
    135         if (module_str in self.loaded) and (module_str in sys.modules):
    136             self.unload_extension(module_str)
    137             mod = sys.modules[module_str]
    138             with prepended_to_syspath(self.ipython_extension_dir):
    139                 reload(mod)
    140             if self._call_load_ipython_extension(mod):
    141                 self.loaded.add(module_str)
    142         else:
    143             self.load_extension(module_str)
    144 
    145     def _call_load_ipython_extension(self, mod):
    146         if hasattr(mod, 'load_ipython_extension'):
--> 147             mod.load_ipython_extension(self.shell)
        mod.load_ipython_extension = <function load_ipython_extension at 0x7fc3b82a4de8>
        self.shell = <sage.repl.interpreter.SageTerminalInteractiveShell object at 0x7fc3b801d150>
    148             return True
    149 
    150     def _call_unload_ipython_extension(self, mod):
    151         if hasattr(mod, 'unload_ipython_extension'):
    152             mod.unload_ipython_extension(self.shell)
    153             return True
    154 
    155     def install_extension(self, url, filename=None):
    156         """Download and install an IPython extension. 
    157 
    158         If filename is given, the file will be so named (inside the extension
    159         directory). Otherwise, the name from the URL will be used. The file must
    160         have a .py or .zip extension; otherwise, a ValueError will be raised.
    161 
    162         Returns the full path to the installed file.

/usr/lib64/python2.7/site-packages/sage/repl/ipython_extension.pyc in wrapper(*args=(<sage.repl.interpreter.SageTerminalInteractiveShell object>,), **kwargs={})
    416         ....:     if work:
    417         ....:         return 'foo worked'
    418         ....:     raise RuntimeError("foo didn't work")
    419         sage: foo(False)
    420         Traceback (most recent call last):
    421         ...
    422         RuntimeError: foo didn't work
    423         sage: foo(True)
    424         'foo worked'
    425         sage: foo(False)
    426         sage: foo(True)
    427     """
    428     @wraps(func)
    429     def wrapper(*args, **kwargs):
    430         if not wrapper.has_run:
--> 431             result = func(*args, **kwargs)
        result = undefined
        global func = undefined
        args = (<sage.repl.interpreter.SageTerminalInteractiveShell object at 0x7fc3b801d150>,)
        kwargs = {}
    432             wrapper.has_run = True
    433             return result
    434     wrapper.has_run = False
    435     return wrapper
    436 
    437 
    438 @run_once
    439 def load_ipython_extension(ip):
    440     """
    441     Load the extension in IPython.
    442     """
    443     # this modifies ip
    444     SageCustomizations(shell=ip)

/usr/lib64/python2.7/site-packages/sage/repl/ipython_extension.pyc in load_ipython_extension(ip=<sage.repl.interpreter.SageTerminalInteractiveShell object>)
    429     def wrapper(*args, **kwargs):
    430         if not wrapper.has_run:
    431             result = func(*args, **kwargs)
    432             wrapper.has_run = True
    433             return result
    434     wrapper.has_run = False
    435     return wrapper
    436 
    437 
    438 @run_once
    439 def load_ipython_extension(ip):
    440     """
    441     Load the extension in IPython.
    442     """
    443     # this modifies ip
--> 444     SageCustomizations(shell=ip)
        global SageCustomizations = <class 'sage.repl.ipython_extension.SageCustomizations'>
        global shell = undefined
        ip = <sage.repl.interpreter.SageTerminalInteractiveShell object at 0x7fc3b801d150>

/usr/lib64/python2.7/site-packages/sage/repl/ipython_extension.pyc in __init__(self=<sage.repl.ipython_extension.SageCustomizations object>, shell=<sage.repl.interpreter.SageTerminalInteractiveShell object>)
    286 
    287         self.shell.display_formatter.formatters['text/plain'].set_display(
    288                 self._magic_display_status)
    289 
    290 class SageCustomizations(object):
    291 
    292     def __init__(self, shell=None):
    293         """
    294         Initialize the Sage plugin.
    295         """
    296         self.shell = shell
    297 
    298         self.auto_magics = SageMagics(shell)
    299         self.shell.register_magics(self.auto_magics)
    300 
--> 301         import sage.repl.display.formatter as formatter
        sage.repl.display.formatter = undefined
        formatter = undefined
    302         self.shell.display_formatter.formatters['text/plain'] = (
    303                 formatter.SageConsoleTextFormatter(config=shell.config))
    304 
    305         import sage.misc.edit_module as edit_module
    306         self.shell.set_hook('editor', edit_module.edit_devel)
    307 
    308         self.init_inspector()
    309         self.init_line_transforms()
    310 
    311         import inputhook
    312         inputhook.install()
    313 
    314         import sage.all # until sage's import hell is fixed
    315 
    316         self.shell.verbose_quit = True

/usr/lib64/python2.7/site-packages/sage/repl/display/formatter.py in <module>()
     49 This other facility uses a simple
     50 :class:`~sage.misc.ascii_art.AsciiArt` object (see and
     51 :meth:`sage.structure.sage_object.SageObject._ascii_art_`).  """
     52 
     53 #*****************************************************************************
     54 #       Copyright (C) 2014 Volker Braun <vbraun.name>
     55 #
     56 #  Distributed under the terms of the GNU General Public License (GPL)
     57 #  as published by the Free Software Foundation; either version 2 of
     58 #  the License, or (at your option) any later version.
     59 #                  http://www.gnu.org/licenses/
     60 #*****************************************************************************
     61 
     62 
     63 from IPython.core.formatters import PlainTextFormatter
---> 64 from IPython.core.formatters import catch_format_error as warn_format_error
        global IPython.core.formatters = undefined
        global catch_format_error = undefined
        global warn_format_error = undefined
     65 from IPython.utils.py3compat import str_to_unicode, unicode_to_str
     66 
     67 from sage.repl.display.pretty_print import (
     68     SagePrettyPrinter, AsciiArtPrettyPrinter, TypesetPrettyPrinter
     69 )
     70 
     71 
     72 class SagePlainTextFormatter(PlainTextFormatter):
     73 
     74     def __init__(self, *args, **kwds):
     75         r"""
     76         Improved plain text formatter.
     77 
     78         In particular, it has the following two features:
     79     

ImportError: cannot import name catch_format_error

***************************************************************************

History of session input:
*** Last line of input (may not be in above history):

Comment 1 Volker Braun 2015-08-30 14:35:17 UTC
Requires IPython 3.x, verified working with IPython 3.2.1

Comment 2 Germano Massullo 2015-08-30 16:42:15 UTC
upstream bugreport https://groups.google.com/forum/#!topic/sage-support/Axq6YFPt8ek

Comment 3 Germano Massullo 2015-08-31 18:17:51 UTC
(In reply to Volker Braun from comment #1)
> Requires IPython 3.x

I can't see that in the crashreport. Where did you find out that information?

Comment 4 Germano Massullo 2015-09-06 14:54:11 UTC
Problem solved with https://bodhi.fedoraproject.org/updates/FEDORA-2015-14561

Comment 5 Germano Massullo 2015-09-06 14:56:43 UTC

*** This bug has been marked as a duplicate of bug 1258006 ***

Comment 6 Red Hat Bugzilla 2023-09-14 03:04:29 UTC
The needinfo request[s] on this closed bug have been removed as they have been unresolved for 1000 days


Note You need to log in before you can comment on or make changes to this bug.