Description of problem: When trying to execute the command 'sage', the application crashes. First line of the error message is:- 'Oops, Sage crashed. We do our best to make it stable, but...' Version-Release number of selected component (if applicable): 6.5 How reproducible: Just enter 'sage' at a command prompt. Steps to Reproduce: 1. Start a terminal. 2. Enter 'sage' 3. Error message then appears after the application has crashed. Actual results: *****Error message from terminal***** ┌────────────────────────────────────────────────────────────────────┐ │ Sage Version 6.5, Release Date: 2015-02-17 │ │ Type "notebook()" for the browser-based notebook interface. │ │ Type "help()" for help. │ └────────────────────────────────────────────────────────────────────┘ ********************************************************************** Oops, Sage crashed. We do our best to make it stable, but... A crash report was automatically generated with the following information: - A verbatim copy of the crash traceback. - A copy of your input history during this session. - Data on your current Sage configuration. It was left in the file named: '/home/merlin/.ipython/Sage_crash_report.txt' If you can email this file to the developers, the information in it will help them in understanding and correcting the problem. You can mail it to: sage-support at sage-support with the subject 'Sage Crash Report'. If you want to do it now, the following command will work (under Unix): mail -s 'Sage Crash Report' sage-support < /home/merlin/.ipython/Sage_crash_report.txt To ensure accurate tracking of this issue, please file a report about it at: http://trac.sagemath.org Hit <Enter> to quit (your terminal may close): *****Error message from sage crash report file***** *************************************************************************** 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 Fri Aug 28 15:49:21 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 0x7f6a17d09b90>> 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 0x7f6a17cff1b8> app = <sage.repl.interpreter.SageTerminalApp object at 0x7f6a17d09b90> 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 0x7f6a17d09b90>> 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 0x7f6a14d5f110>> 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 0x7f6a14d5f110>> 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 0x7f6a17d03d70> self.shell = <sage.repl.interpreter.SageTerminalInteractiveShell object at 0x7f6a1787ced0> 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 0x7f6a1787ced0>,) 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 0x7f6a1787ced0> /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): Expected results: Should be presented with the usual 'sage' command prompt. Additional info: This problem has occurred due to the last sagemath update. This has happened on both of my PCs.
Thanks for noticing the problem. I will make an update. If you have a fedora account, please give it karma once it hits testing. For the moment, you can correct it by reverting this patch: http://pkgs.fedoraproject.org/cgit/sagemath.git/tree/sagemath-ipython3.patch You can edit the file: /usr/lib64/python2.7/site-packages/sage/repl/display/formatter.py Replace lines 63 and 64 with: from IPython.core.formatters import PlainTextFormatter, warn_format_error It was my fault to forget to apply conditionally the patch when making a f22 update.
sagemath-6.5-9.fc22 has been submitted as an update to Fedora 22. https://bodhi.fedoraproject.org/updates/FEDORA-2015-14561
sagemath-6.5-9.fc22 has been pushed to the Fedora 22 testing repository. If problems still persist, please make note of it in this bug report.\nIf you want to test the update, you can install it with \n su -c 'yum --enablerepo=updates-testing update sagemath'. You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-2015-14561
*** Bug 1258249 has been marked as a duplicate of this bug. ***
sagemath-6.5-9.fc22 has been pushed to the Fedora 22 stable repository. If problems still persist, please make note of it in this bug report.