Package: sagemath Version: 8.2-5 Severity: important Dear Maintainer,
when I start sage, it immediately crashes with the attached crash report. Before running sage I removed the directories .ipython, .sage and .local/lib/python* (which I discovered contained some Python modules that were executed by sage upon startup). The end of the crash report seems to mention a segmentation fault in some pari module, but I am not able to extract more information from it. Thanks, Giovanni. -- System Information: Debian Release: buster/sid APT prefers unstable-debug APT policy: (500, 'unstable-debug'), (500, 'unstable'), (500, 'testing'), (1, 'experimental') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 4.17.0-1-amd64 (SMP w/8 CPU cores) Locale: LANG=it_IT.utf8, LC_CTYPE=it_IT.utf8 (charmap=UTF-8), LANGUAGE=it_IT.utf8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled Versions of packages sagemath depends on: ii cysignals-tools 1.6.7+ds-4 ii cython 0.28.4-1 ii ecl 16.1.2-4+b1 ii eclib-tools 20171002-1+b3 ii f2c 20160102-1 ii fflas-ffpack 2.3.2-2 ii flintqs 1:1.0-3 ii gap-core 4r8p8-3 ii gfan 0.5+dfsg-6 ii gmp-ecm 7.0.4+ds-3 ii ipython 5.5.0-1 ii iso-codes 3.79-1 ii jmol 14.6.4+2016.11.05+dfsg1-3.1 ii lcalc 1.23+dfsg-7 ii less 487-0.1+b1 ii libatlas3-base [liblapack.so.3] 3.10.3-7+b1 ii libblas3 [libblas.so.3] 3.8.0-1+b1 ii libbrial-groebner3 1.2.0-2 ii libbrial3 1.2.0-2 ii libc6 2.27-5 ii libcdd-tools 094h-1+b1 ii libcliquer1 1.21-2 ii libec3 20171002-1+b3 ii libecm1 7.0.4+ds-3 ii libflint-2.5.2 2.5.2-18 ii libflint-arb2 1:2.12.0-3 ii libgap-sage-4 4.8.8+3+20160327g69a66f0+dsx-1 ii libgcc1 1:8.2.0-4 ii libgd3 2.2.5-4 ii libgivaro9 4.0.4-2 ii libglpk40 4.65-2 ii libgmp10 2:6.1.2+dfsg-3 ii libgmpxx4ldbl 2:6.1.2+dfsg-3 ii libgsl23 2.5+dfsg-4 ii libgslcblas0 2.5+dfsg-4 ii libiml0 1.0.4-1+b2 ii libjs-mathjax 2.7.4+dfsg-1 ii libjs-three 80+dfsg2-2 ii liblapack3 [liblapack.so.3] 3.8.0-1+b1 ii liblfunction0 1.23+dfsg-7 ii liblinbox-1.5.2-0 1.5.2-2 ii liblinboxsage-1.5.2-0 1.5.2-2 ii liblrcalc1 1.2-2+b1 ii libm4ri-0.0.20140914 20140914-2+b1 ii libm4rie-0.0.20150908 20150908-2 ii libmpc3 1.1.0-1 ii libmpfi0 1.5.3+ds-2 ii libmpfr6 4.0.1-1 ii libntl35 10.5.0-2 ii libopenblas-base [liblapack.so.3] 0.3.2+ds-1 ii libpari-gmp-tls5 2.9.5-1 ii libplanarity0 3.0.0.5-3 ii libpng16-16 1.6.34-2 ii libppl14 1:1.2-3 ii libpynac17 0.7.19-2 ii libratpoints-2.1.3 1:2.1.3-1+b2 ii libreadline7 7.0-5 ii librw0 0.8+ds-1 ii libsingular4 1:4.1.0-p3+ds-2+b3 ii libstdc++6 8.2.0-4 ii libsymmetrica2 2.0+ds-5 ii libzn-poly-0.9 0.9-3+b2 ii maxima-sage 5.39.0+ds-3 ii maxima-sage-doc 5.39.0+ds-3 ii maxima-sage-share 5.39.0+ds-3 ii nauty 2.6r10+ds-1 ii octave 4.4.1~rc2-3 ii palp 2.1-5 ii pari-doc 2.11.0-1 ii pari-galdata 0.20080411-2 ii pari-gp 2.11.0-1 ii pari-seadata 0.20090618-1 ii python 2.7.15-3 ii python-alabaster 0.7.8-1 ii python-babel 2.4.0+dfsg.1-2 ii python-backports-abc 0.5-2 ii python-backports-shutil-get-terminal-size 1.0.0-5 ii python-backports.functools-lru-cache 1.5-1 ii python-backports.ssl-match-hostname 3.5.0.1-1 ii python-brial 1.2.0-2 ii python-configparser 3.5.0b2-1 ii python-crypto 2.6.1-9+b1 ii python-cvxopt 1.1.9+dfsg-3+b1 ii python-cycler 0.10.0-1 ii python-cypari2 1.2.1-1 ii python-cysignals-pari 1.6.7+ds-4 ii python-decorator 4.3.0-1 ii python-docutils 0.14+dfsg-3 ii python-enum34 1.1.6-2 ii python-flask 1.0.2-1 ii python-flask-autoindex 0.6.1-1 ii python-flask-babel 0.11.2-2 ii python-flask-oldsessions 0.10+git20121007-2 ii python-flask-openid 1.2.5+dfsg-2 ii python-flask-silk 0.2-13 ii python-fpylll 0.3.0+ds-3+b1 ii python-functools32 3.2.3.2-3 ii python-future 0.15.2-4 ii python-gd 0.59-1 ii python-gnutls 3.0.0-1 ii python-imagesize 1.0.0-1 ii python-ipython-genutils 0.2.0-1 ii python-itsdangerous 0.24+dfsg1-2 ii python-jsonschema 2.6.0-2 ii python-matplotlib 2.2.2-4+b1 ii python-mistune 0.8.3-2 ii python-moinmoin 1.9.9-1 ii python-mpmath 1.0.0-1 ii python-networkx 2.1-1 ii python-numpy [python-numpy-abi9] 1:1.14.5-1+b1 ii python-openid 2.2.5-6 ii python-path 11.0.1-2 ii python-pathlib2 2.3.2-1 ii python-pexpect 4.6.0-1 ii python-pickleshare 0.7.4-4 ii python-pil 5.2.0-2 ii python-pip 9.0.1-2.3 ii python-pkgconfig 1.3.1-1 ii python-ply 3.11-3 ii python-prompt-toolkit 1.0.15-1 ii python-psutil 5.4.6-1+b1 ii python-ptyprocess 0.6.0-1 ii python-pygments 2.2.0+dfsg-1 ii python-rpy2 2.8.6-2+b1 ii python-sagenb 1.0.1+ds1-5 ii python-sagenb-export 3.2-3 ii python-scipy 1.1.0-1+b1 ii python-setuptools 39.2.0-1 ii python-setuptools-scm 3.0.6-1 ii python-simplegeneric 0.8.1-2 ii python-singledispatch 3.4.0.3-2 ii python-snowballstemmer 1.2.1-1 ii python-sphinx 1.7.6-1 ii python-subprocess32 3.5.2-1 ii python-sympy 1.2-1 ii python-terminado 0.8.1-3 ii python-tk 2.7.15-1 ii python-tornado 5.0.2-1+b1 ii python-traitlets 4.3.2-1 ii python-twisted 18.7.0-2 ii python-typing 3.6.4-1 ii python-tz 2018.5-1 ii python-vcversioner 2.16.0.0-1 ii python-wcwidth 0.1.7+dfsg1-2 ii python-werkzeug 0.14.1+dfsg1-1 ii python-zmq 17.1.0-1 ii python-zope.interface 4.3.2-1+b2 ii python2.7 2.7.15-3 ii python3 3.6.6-1 ii r-base-core 3.5.1-1+b1 ii r-cran-lattice 0.20-35-1+b2 ii rubiks 20070912-3 ii sagemath-common 8.2-5 ii sagemath-database-conway-polynomials 0.5-4 ii sagemath-database-elliptic-curves 0.8-2 ii sagemath-database-graphs 20161026+dfsg-2 ii sagemath-database-mutually-combinatorial-de 20140630-3 ii sagemath-database-polytopes 20170220-2 ii singular 1:4.1.0-p3+ds-2+b3 ii singular-doc 1:4.1.0-p3+ds-2 ii sqlite3 3.24.0-1 ii sympow 2.023.3-1 ii tachyon 0.99~b6+dsx-8 ii xcas 1.2.3.57+dfsg1-2+b5 ii zlib1g 1:1.2.11.dfsg-1 Versions of packages sagemath recommends: ii sagemath-doc-en 8.2-5 ii sagemath-jupyter 8.2-5 ii sagetex 3.0+ds-6 ii texlive-latex-base 2018.20180725-1 Versions of packages sagemath suggests: pn dot2tex <none> pn gap-design <none> pn gap-factint <none> pn gap-grape <none> pn gap-guava <none> pn gap-laguna <none> pn gap-sonata <none> pn gap-toric <none> -- no debconf information
*************************************************************************** IPython post-mortem report {'commit_hash': u'b467d487e', 'commit_source': 'installation', 'default_encoding': 'UTF-8', 'ipython_path': '/usr/lib/python2.7/dist-packages/IPython', 'ipython_version': '5.5.0', 'os_name': 'posix', 'platform': 'Linux-4.17.0-1-amd64-x86_64-with-debian-buster-sid', 'sys_executable': '/usr/bin/python', 'sys_platform': 'linux2', 'sys_version': '2.7.15 (default, Jul 28 2018, 11:29:29) \n[GCC 8.1.0]'} *************************************************************************** *************************************************************************** Crash traceback: --------------------------------------------------------------------------- --------------------------------------------------------------------------- SignalError Python 2.7.15: /usr/bin/python Tue Aug 21 08:54:13 2018 A problem occurred executing Python code. Here is the sequence of function calls leading up to the error, with the most recent (innermost) call last. /usr/share/sagemath/bin/sage-ipython in <module>() 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 """ 4 Sage IPython startup script. 5 """ 6 7 # Display startup banner. Do this before anything else to give the user 8 # early feedback that Sage is starting. 9 from sage.misc.banner import banner 10 banner() 11 12 from sage.repl.interpreter import SageTerminalApp 13 14 app = SageTerminalApp.instance() ---> 15 app.initialize() global app.initialize = <bound method SageTerminalApp.initialize of <sage.repl.interpreter.SageTerminalApp object at 0x7fc8152821d0>> 16 app.start() <decorator-gen-110> in initialize(self=<sage.repl.interpreter.SageTerminalApp object>, argv=None) /usr/lib/python2.7/dist-packages/traitlets/config/application.pyc in catch_config_error(method=<function initialize>, app=<sage.repl.interpreter.SageTerminalApp object>, *args=(None,), **kwargs={}) 72 TRAITLETS_APPLICATION_RAISE_CONFIG_FILE_ERROR = False 73 else: 74 raise ValueError("Unsupported value for environment variable: 'TRAITLETS_APPLICATION_RAISE_CONFIG_FILE_ERROR' is set to '%s' which is none of {'0', '1', 'false', 'true', ''}."% _envvar ) 75 76 77 @decorator 78 def catch_config_error(method, app, *args, **kwargs): 79 """Method decorator for catching invalid config (Trait/ArgumentErrors) during init. 80 81 On a TraitError (generally caused by bad config), this will print the trait's 82 message, and exit the app. 83 84 For use on init methods, to prevent invoking excepthook on invalid input. 85 """ 86 try: ---> 87 return method(app, *args, **kwargs) method = <function initialize at 0x7fc8135bd398> app = <sage.repl.interpreter.SageTerminalApp object at 0x7fc8152821d0> args = (None,) kwargs = {} 88 except (TraitError, ArgumentError) as e: 89 app.print_help() 90 app.log.fatal("Bad config encountered during initialization:") 91 app.log.fatal(str(e)) 92 app.log.debug("Config at the time: %s", app.config) 93 app.exit(1) 94 95 96 class ApplicationError(Exception): 97 pass 98 99 100 class LevelFormatter(logging.Formatter): 101 """Formatter with additional `highlevel` record 102 /usr/lib/python2.7/dist-packages/IPython/terminal/ipapp.pyc in initialize(self=<sage.repl.interpreter.SageTerminalApp object>, argv=None) 301 302 return super(TerminalIPythonApp, self).parse_command_line(argv) 303 304 @catch_config_error 305 def initialize(self, argv=None): 306 """Do actions after construct, but before starting the app.""" 307 super(TerminalIPythonApp, self).initialize(argv) 308 if self.subapp is not None: 309 # don't bother initializing further, starting subapp 310 return 311 # print self.extra_args 312 if self.extra_args and not self.something_to_run: 313 self.file_to_run = self.extra_args[0] 314 self.init_path() 315 # create the shell --> 316 self.init_shell() self.init_shell = <bound method SageTerminalApp.init_shell of <sage.repl.interpreter.SageTerminalApp object at 0x7fc8152821d0>> 317 # and draw the banner 318 self.init_banner() 319 # Now a variety of things that happen after the banner is printed. 320 self.init_gui_pylab() 321 self.init_extensions() 322 self.init_code() 323 324 def init_shell(self): 325 """initialize the InteractiveShell instance""" 326 # Create an InteractiveShell instance. 327 # shell.display_banner should always be False for the terminal 328 # based app, because we call shell.show_banner() by hand below 329 # so the banner shows *before* all extension loading stuff. 330 self.shell = self.interactive_shell_class.instance(parent=self, 331 profile_dir=self.profile_dir, /usr/lib/python2.7/dist-packages/sage/repl/interpreter.pyc in init_shell(self=<sage.repl.interpreter.SageTerminalApp object>) 747 self.shell.has_sage_extensions = SAGE_EXTENSION in self.extensions 748 749 # Load the %lprun extension if available 750 try: 751 import line_profiler 752 except ImportError: 753 pass 754 else: 755 self.extensions.append('line_profiler') 756 757 if self.shell.has_sage_extensions: 758 self.extensions.remove(SAGE_EXTENSION) 759 760 # load sage extension here to get a crash if 761 # something is wrong with the sage library --> 762 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 0x7fc814900810>> global SAGE_EXTENSION = 'sage' 763 764 /usr/lib/python2.7/dist-packages/IPython/core/extensions.pyc in load_extension(self=<IPython.core.extensions.ExtensionManager object>, module_str='sage') 70 71 Returns the string "already loaded" if the extension is already loaded, 72 "no load function" if the module doesn't have a load_ipython_extension 73 function, or None if it succeeded. 74 """ 75 if module_str in self.loaded: 76 return "already loaded" 77 78 from IPython.utils.syspathcontext import prepended_to_syspath 79 80 with self.shell.builtin_trap: 81 if module_str not in sys.modules: 82 with prepended_to_syspath(self.ipython_extension_dir): 83 __import__(module_str) 84 mod = sys.modules[module_str] ---> 85 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 0x7fc814900810>> mod = <module 'sage' from '/usr/lib/python2.7/dist-packages/sage/__init__.pyc'> 86 self.loaded.add(module_str) 87 else: 88 return "no load function" 89 90 def unload_extension(self, module_str): 91 """Unload an IPython extension by its module name. 92 93 This function looks up the extension's name in ``sys.modules`` and 94 simply calls ``mod.unload_ipython_extension(self)``. 95 96 Returns the string "no unload function" if the extension doesn't define 97 a function to unload itself, "not loaded" if the extension isn't loaded, 98 otherwise None. 99 """ 100 if module_str not in self.loaded: /usr/lib/python2.7/dist-packages/IPython/core/extensions.pyc in _call_load_ipython_extension(self=<IPython.core.extensions.ExtensionManager object>, mod=<module 'sage' from '/usr/lib/python2.7/dist-packages/sage/__init__.pyc'>) 117 """ 118 from IPython.utils.syspathcontext import prepended_to_syspath 119 120 if (module_str in self.loaded) and (module_str in sys.modules): 121 self.unload_extension(module_str) 122 mod = sys.modules[module_str] 123 with prepended_to_syspath(self.ipython_extension_dir): 124 reload(mod) 125 if self._call_load_ipython_extension(mod): 126 self.loaded.add(module_str) 127 else: 128 self.load_extension(module_str) 129 130 def _call_load_ipython_extension(self, mod): 131 if hasattr(mod, 'load_ipython_extension'): --> 132 mod.load_ipython_extension(self.shell) mod.load_ipython_extension = <function load_ipython_extension at 0x7fc8154dd668> self.shell = <sage.repl.interpreter.SageTerminalInteractiveShell object at 0x7fc81355edd0> 133 return True 134 135 def _call_unload_ipython_extension(self, mod): 136 if hasattr(mod, 'unload_ipython_extension'): 137 mod.unload_ipython_extension(self.shell) 138 return True 139 140 def install_extension(self, url, filename=None): 141 """Download and install an IPython extension. 142 143 If filename is given, the file will be so named (inside the extension 144 directory). Otherwise, the name from the URL will be used. The file must 145 have a .py or .zip extension; otherwise, a ValueError will be raised. 146 147 Returns the full path to the installed file. /usr/lib/python2.7/dist-packages/sage/__init__.pyc in load_ipython_extension(*args=(<sage.repl.interpreter.SageTerminalInteractiveShell object>,)) 1 __all__ = ['all'] 2 3 # Make sure that the correct zlib library is loaded. This is needed 4 # to prevent the system zlib to be loaded instead of the Sage one. 5 # See https://trac.sagemath.org/ticket/23122 6 import zlib 7 8 # IPython calls this when starting up 9 def load_ipython_extension(*args): 10 import sage.repl.ipython_extension ---> 11 sage.repl.ipython_extension.load_ipython_extension(*args) sage.repl.ipython_extension.load_ipython_extension = <function load_ipython_extension at 0x7fc8121d8de8> args = (<sage.repl.interpreter.SageTerminalInteractiveShell object at 0x7fc81355edd0>,) 12 13 14 # Monkey-patch inspect.isfunction() to support Cython functions. 15 def isfunction(obj): 16 """ 17 Check whether something is a function. 18 19 We assume that anything which has a genuine ``__code__`` 20 attribute (not using ``__getattr__`` overrides) is a function. 21 This is meant to support Cython functions. 22 23 EXAMPLES:: 24 25 sage: from inspect import isfunction 26 sage: def f(): pass 27 sage: isfunction(f) 28 True 29 sage: isfunction(lambda x:x) 30 True 31 sage: from sage.categories.coercion_methods import _mul_parent /usr/lib/python2.7/dist-packages/sage/repl/ipython_extension.pyc in wrapper(*args=(<sage.repl.interpreter.SageTerminalInteractiveShell object>,), **kwargs={}) 546 ....: if work: 547 ....: return 'foo worked' 548 ....: raise RuntimeError("foo didn't work") 549 sage: foo(False) 550 Traceback (most recent call last): 551 ... 552 RuntimeError: foo didn't work 553 sage: foo(True) 554 'foo worked' 555 sage: foo(False) 556 sage: foo(True) 557 """ 558 @wraps(func) 559 def wrapper(*args, **kwargs): 560 if not wrapper.has_run: --> 561 result = func(*args, **kwargs) result = undefined global func = undefined args = (<sage.repl.interpreter.SageTerminalInteractiveShell object at 0x7fc81355edd0>,) kwargs = {} 562 wrapper.has_run = True 563 return result 564 wrapper.has_run = False 565 return wrapper 566 567 568 @run_once 569 def load_ipython_extension(ip): 570 """ 571 Load the extension in IPython. 572 """ 573 # this modifies ip 574 SageCustomizations(shell=ip) /usr/lib/python2.7/dist-packages/sage/repl/ipython_extension.pyc in load_ipython_extension(ip=<sage.repl.interpreter.SageTerminalInteractiveShell object>) 559 def wrapper(*args, **kwargs): 560 if not wrapper.has_run: 561 result = func(*args, **kwargs) 562 wrapper.has_run = True 563 return result 564 wrapper.has_run = False 565 return wrapper 566 567 568 @run_once 569 def load_ipython_extension(ip): 570 """ 571 Load the extension in IPython. 572 """ 573 # this modifies ip --> 574 SageCustomizations(shell=ip) global SageCustomizations = <class 'sage.repl.ipython_extension.SageCustomizations'> global shell = undefined ip = <sage.repl.interpreter.SageTerminalInteractiveShell object at 0x7fc81355edd0> /usr/lib/python2.7/dist-packages/sage/repl/ipython_extension.pyc in __init__(self=<sage.repl.ipython_extension.SageCustomizations object>, shell=<sage.repl.interpreter.SageTerminalInteractiveShell object>) 417 def __init__(self, shell=None): 418 """ 419 Initialize the Sage plugin. 420 """ 421 self.shell = shell 422 423 self.auto_magics = SageMagics(shell) 424 self.shell.register_magics(self.auto_magics) 425 426 import sage.misc.edit_module as edit_module 427 self.shell.set_hook('editor', edit_module.edit_devel) 428 429 self.init_inspector() 430 self.init_line_transforms() 431 --> 432 import sage.all # until sage's import hell is fixed sage.all = undefined 433 434 self.shell.verbose_quit = True 435 self.set_quit_hook() 436 437 self.register_interface_magics() 438 439 if SAGE_IMPORTALL == 'yes': 440 self.init_environment() 441 442 def register_interface_magics(self): 443 """ 444 Register magics for each of the Sage interfaces 445 """ 446 from sage.repl.interface_magic import InterfaceMagic 447 InterfaceMagic.register_all(self.shell) /usr/lib/python2.7/dist-packages/sage/all.py in <module>() 83 from sage.misc.all import * # takes a while 84 from sage.typeset.all import * 85 from sage.repl.all import * 86 87 from sage.misc.sh import sh 88 89 from sage.libs.all import * 90 from sage.data_structures.all import * 91 from sage.doctest.all import * 92 93 from sage.structure.all import * 94 from sage.rings.all import * 95 from sage.arith.all import * 96 from sage.matrix.all import * 97 ---> 98 from sage.symbolic.all import * global sage.symbolic.all = undefined 99 from sage.modules.all import * 100 from sage.monoids.all import * 101 from sage.algebras.all import * 102 from sage.modular.all import * 103 from sage.sat.all import * 104 from sage.schemes.all import * 105 from sage.graphs.all import * 106 from sage.groups.all import * 107 from sage.arith.power import generic_power as power 108 from sage.databases.all import * 109 from sage.categories.all import * 110 from sage.sets.all import * 111 from sage.probability.all import * 112 from sage.interfaces.all import * 113 /usr/lib/python2.7/dist-packages/sage/symbolic/all.py in <module>() 1 from __future__ import absolute_import 2 ----> 3 from sage.libs.pynac.pynac import I global sage.libs.pynac.pynac = undefined global I = undefined 4 i = I 5 6 from .ring import SR 7 from .constants import (pi, e, NaN, golden_ratio, log2, euler_gamma, catalan, 8 khinchin, twinprime, mertens, glaisher) 9 from .expression import Expression, solve_diophantine, hold 10 from .callable import CallableSymbolicExpressionRing 11 12 from sage.symbolic.relation import solve, solve_mod, solve_ineq 13 from sage.symbolic.assumptions import assume, forget, assumptions, assuming 14 15 from .units import units /usr/lib/python2.7/dist-packages/sage/libs/pynac/pynac.pyx in init sage.libs.pynac.pynac() 2516 py_funcs.ex_to_pyExpression = &ex_to_pyExpression 2517 py_funcs.subs_args_to_PyTuple = &subs_args_to_PyTuple 2518 py_funcs.py_print_function = &py_print_function 2519 py_funcs.py_latex_function = &py_latex_function 2520 py_funcs.py_get_ginac_serial = &py_get_ginac_serial 2521 py_funcs.py_get_sfunction_from_serial = &py_get_sfunction_from_serial 2522 py_funcs.py_get_serial_from_sfunction = &py_get_serial_from_sfunction 2523 py_funcs.py_get_serial_for_new_sfunction = &py_get_serial_for_new_sfunction 2524 2525 py_funcs.py_get_constant = &py_get_constant 2526 py_funcs.py_print_fderivative = &py_print_fderivative 2527 py_funcs.py_latex_fderivative = &py_latex_fderivative 2528 py_funcs.paramset_to_PyTuple = ¶mset_to_PyTuple 2529 2530 init_function_table() -> 2531 init_pynac_I() global init_pynac_I = <built-in function init_pynac_I> 2532 2533 set_ginac_fn_serial() /usr/lib/python2.7/dist-packages/sage/libs/pynac/pynac.pyx in sage.libs.pynac.pynac.init_pynac_I (build/cythonized/sage/libs/pynac/pynac.cpp:28036)() 2418 <type 'sage.rings.number_field.number_field_element_quadratic.NumberFieldElement_quadratic'> 2419 2420 Check that :trac:`10064` is fixed:: 2421 2422 sage: y = I*I*x / x # so y is the expression -1 2423 sage: y.is_positive() 2424 False 2425 sage: z = -x / x 2426 sage: z.is_positive() 2427 False 2428 sage: bool(z == y) 2429 True 2430 """ 2431 global pynac_I, I 2432 from sage.rings.number_field.number_field import QuadraticField -> 2433 K = QuadraticField(-1, 'I', embedding=CC.gen(), latex_name='i') global K = undefined global QuadraticField = undefined global embedding = undefined global CC.gen = <bound method ComplexField_class_with_category.gen of Complex Field with 53 bits of precision> global latex_name = undefined 2434 pynac_I = K.gen() 2435 ginac_pyinit_I(pynac_I) 2436 I = new_Expression_from_GEx(ring.SR, g_I) 2437 2438 2439 def init_function_table(): 2440 """ 2441 Initializes the function pointer table in Pynac. This must be 2442 called before Pynac is used; otherwise, there will be segfaults. 2443 """ 2444 2445 py_funcs.py_gcd = &py_gcd 2446 py_funcs.py_lcm = &py_lcm 2447 py_funcs.py_real = &py_real 2448 py_funcs.py_imag = &py_imag /usr/lib/python2.7/dist-packages/sage/rings/number_field/number_field.pyc in QuadraticField(D=-1, name='I', check=True, embedding=1.00000000000000*I, latex_name='i', **args={}) 928 False 929 """ 930 D = QQ(D) 931 if check: 932 if D.is_square(): 933 raise ValueError("D must not be a perfect square.") 934 R = QQ['x'] 935 f = R([-D, 0, 1]) 936 if embedding is True: 937 if D > 0: 938 embedding = RLF(D).sqrt() 939 else: 940 embedding = CLF(D).sqrt() 941 if latex_name == 'sqrt': 942 latex_name = r'\sqrt{%s}' % D --> 943 return NumberField(f, name, check=False, embedding=embedding, latex_name=latex_name, **args) global NumberField = <function NumberField at 0x7fc602d8c050> f = x^2 + 1 name = 'I' check = True global False = undefined embedding = 1.00000000000000*I latex_name = 'i' args = {} 944 945 def is_AbsoluteNumberField(x): 946 """ 947 Return True if x is an absolute number field. 948 949 EXAMPLES:: 950 951 sage: from sage.rings.number_field.number_field import is_AbsoluteNumberField 952 sage: is_AbsoluteNumberField(NumberField(x^2+1,'a')) 953 True 954 sage: is_AbsoluteNumberField(NumberField([x^3 + 17, x^2+1],'a')) 955 False 956 957 The rationals are a number field, but they're not of the absolute 958 number field class. /usr/lib/python2.7/dist-packages/sage/rings/number_field/number_field.pyc in NumberField(polynomial=x^2 + 1, name='I', check=False, names=None, embedding=1.00000000000000*I, latex_name='i', assume_disc_small=False, maximize_at_primes=None, structure=None) 530 sage: K = NumberField(t^4 - 2, 'a') 531 sage: K.hom([K.gen().matrix()]) 532 Ring morphism: 533 From: Number Field in a with defining polynomial x^4 - 2 534 To: Full MatrixSpace of 4 by 4 dense matrices over Rational Field 535 Defn: a |--> [0 1 0 0] 536 [0 0 1 0] 537 [0 0 0 1] 538 [2 0 0 0] 539 """ 540 if names is not None: 541 name = names 542 if isinstance(polynomial, (list,tuple)): 543 return NumberFieldTower(polynomial, names=name, check=check, embeddings=embedding, latex_names=latex_name, assume_disc_small=assume_disc_small, maximize_at_primes=maximize_at_primes, structures=structure) 544 --> 545 return NumberField_version2(polynomial=polynomial, name=name, check=check, embedding=embedding, latex_name=latex_name, assume_disc_small=assume_disc_small, maximize_at_primes=maximize_at_primes, structure=structure) global NumberField_version2 = <sage.rings.number_field.number_field.NumberFieldFactory object at 0x7fc602d7bc00> polynomial = x^2 + 1 name = 'I' check = False embedding = 1.00000000000000*I latex_name = 'i' assume_disc_small = False maximize_at_primes = None structure = None 546 547 class NumberFieldFactory(UniqueFactory): 548 r""" 549 Factory for number fields. 550 551 This should usually not be called directly, use :meth:`NumberField` 552 instead. 553 554 INPUT: 555 556 - ``polynomial`` - a polynomial over `\QQ` or a number field. 557 - ``name`` - a string (default: ``'a'``), the name of the generator 558 - ``check`` - a boolean (default: ``True``); do type checking and 559 irreducibility checking. 560 - ``embedding`` - ``None`` or an element, the images of the generator /usr/lib/python2.7/dist-packages/sage/structure/factory.pyx in sage.structure.factory.UniqueFactory.__call__ (build/cythonized/sage/structure/factory.c:2016)() 353 It already created one, so don't re-create:: 354 355 sage: test_factory(1,2,3) 356 <sage.structure.test_factory.A instance at ...> 357 sage: test_factory(1,2,3) is test_factory(1,2,3) 358 True 359 360 Of course, with a different key, a new object will be created:: 361 362 sage: test_factory(1,2,3) is test_factory(1,2,4) 363 Making object (1, 2, 4) 364 False 365 """ 366 key, kwds = self.create_key_and_extra_args(*args, **kwds) 367 version = self.get_version(sage_version) --> 368 return self.get_object(version, key, kwds) global self.get_object = undefined global version = undefined global key = undefined global kwds = undefined 369 370 cpdef get_object(self, version, key, extra_args): 371 """ 372 Returns the object corresponding to ``key``, creating it with 373 ``extra_args`` if necessary (for example, it isn't in the cache 374 or it is unpickling from an older version of Sage). 375 376 EXAMPLES:: 377 378 sage: from sage.structure.test_factory import test_factory 379 sage: a = test_factory.get_object(3.0, 'a', {}); a 380 Making object a 381 <sage.structure.test_factory.A instance at ...> 382 sage: test_factory.get_object(3.0, 'a', {}) is test_factory.get_object(3.0, 'a', {}) 383 True /usr/lib/python2.7/dist-packages/sage/structure/factory.pyx in sage.structure.factory.UniqueFactory.get_object (build/cythonized/sage/structure/factory.c:2205)() 390 391 TESTS: 392 393 Check that :trac:`16317` has been fixed, i.e., caching works for 394 unhashable objects:: 395 396 sage: K.<u> = Qq(4) 397 sage: test_factory.get_object(3.0, (K(1), 'c'), {}) is test_factory.get_object(3.0, (K(1), 'c'), {}) 398 Making object (1 + O(2^20), 'c') 399 True 400 401 """ 402 cache_key = key 403 try: 404 try: --> 405 return self._cache[version, cache_key] global self._cache = undefined global version = undefined global cache_key = undefined 406 except TypeError: # key is unhashable 407 cache_key = _cache_key(cache_key) 408 return self._cache[version, cache_key] 409 except KeyError: 410 pass 411 obj = self.create_object(version, key, **extra_args) 412 self._cache[version, cache_key] = obj 413 try: 414 for key in self.other_keys(key, obj): 415 try: 416 self._cache[version, key] = obj 417 except TypeError: # key is unhashable 418 self._cache[version, _cache_key(key)] = obj 419 obj._factory_data = self, version, key, extra_args 420 /usr/lib/python2.7/dist-packages/sage/misc/weak_dict.pyx in sage.misc.weak_dict.WeakValueDictionary.__getitem__ (build/cythonized/sage/misc/weak_dict.c:3654)() 679 680 sage: D[10] = ZZ 681 sage: D[int(10)] 682 Integer Ring 683 684 Check that :trac:`15956` has been fixed, i.e., a ``TypeError`` is 685 raised for unhashable objects:: 686 687 sage: D = sage.misc.weak_dict.WeakValueDictionary() 688 sage: D[matrix([])] 689 Traceback (most recent call last): 690 ... 691 TypeError: mutable matrices are unhashable 692 693 """ --> 694 cdef PyObject* wr = PyDict_GetItemWithError(self, k) global cdef = undefined global PyObject = undefined global wr = undefined global PyDict_GetItemWithError = undefined global self = undefined global k = undefined 695 if wr == NULL: 696 raise KeyError(k) 697 out = PyWeakref_GetObject(wr) 698 if out == Py_None: 699 raise KeyError(k) 700 return <object>out 701 702 def __contains__(self, k): 703 """ 704 Containment in the set of keys. 705 706 TESTS:: 707 708 sage: import sage.misc.weak_dict 709 sage: class Vals(object): pass /usr/lib/python2.7/dist-packages/sage/cpython/dict_del_by_value.pyx in sage.cpython.dict_del_by_value.PyDict_GetItemWithError (build/cythonized/sage/cpython/dict_del_by_value.c:1200)() 43 Py_ssize_t ma_mask 44 PyDictEntry* ma_table 45 PyDictEntry* (*ma_lookup)(PyDictObject *mp, PyObject *key, Py_hash_t hash) except NULL 46 47 PyObject* Py_None 48 #we need this redefinition because we want to be able to call 49 #PyWeakref_GetObject with borrowed references. This is the recommended 50 #strategy according to Cython/Includes/cpython/__init__.pxd 51 PyObject* PyWeakref_GetObject(PyObject * wr) 52 int PyList_SetItem(object list, Py_ssize_t index, PyObject * item) except -1 53 54 from cpython.object cimport PyObject_Hash 55 cdef PyObject* PyDict_GetItemWithError(dict op, object key) except? NULL: 56 cdef PyDictEntry* ep 57 cdef PyDictObject* mp = <PyDictObject*><void *>op ---> 58 ep = mp.ma_lookup(mp, <PyObject*><void*>key, PyObject_Hash(key)) global ep = undefined global mp.ma_lookup = undefined global mp = undefined global PyObject = undefined global void = undefined global key = undefined global PyObject_Hash = undefined 59 if ep: 60 return ep.me_value 61 else: 62 return NULL 63 64 #this routine extracts the "dummy" sentinel value that is used in dicts to mark 65 #"freed" slots. We need that to delete things ourselves. 66 67 cdef PyObject* init_dummy() except NULL: 68 cdef dict D = dict() 69 cdef PyDictObject* mp = <PyDictObject *><void *>D 70 cdef size_t mask 71 cdef PyDictEntry* ep0 = mp.ma_table 72 cdef PyDictEntry* ep 73 cdef size_t i /usr/lib/python2.7/dist-packages/sage/rings/real_lazy.pyx in sage.rings.real_lazy.LazyFieldElement.__hash__ (build/cythonized/sage/rings/real_lazy.c:9311)() 691 except TypeError: 692 pass 693 left, right = self.approx(), other.approx() 694 return richcmp(left.endpoints(), right.endpoints(), op) 695 696 def __hash__(self): 697 """ 698 Return the hash value of ``self``. 699 700 EXAMPLES:: 701 702 sage: a = RLF(3) 703 sage: hash(a) 704 3 705 """ --> 706 return hash(complex(self)) global hash = undefined global complex = undefined global self = undefined 707 708 cdef LazyFieldElement _new_wrapper(self, value): 709 cdef LazyWrapper e = <LazyWrapper>LazyWrapper.__new__(LazyWrapper) 710 e._parent = self._parent 711 e._value = value 712 return e 713 714 cdef LazyFieldElement _new_binop(self, LazyFieldElement left, LazyFieldElement right, op): 715 cdef LazyBinop e = <LazyBinop>LazyBinop.__new__(LazyBinop) 716 e._parent = self._parent 717 e._left = left 718 e._right = right 719 e._op = op 720 return e 721 /usr/lib/python2.7/dist-packages/sage/rings/real_lazy.pyx in sage.rings.real_lazy.LazyFieldElement.__complex__ (build/cythonized/sage/rings/real_lazy.c:10068)() 805 """ 806 return self.eval(R) 807 808 _real_mpfi_ = _complex_mpfi_ =_mpfr_ = _complex_mpfr_field_ = _generic_ 809 810 def __complex__(self): 811 """ 812 Return ``self`` as a complex. 813 814 EXAMPLES:: 815 816 sage: complex(CLF(-1)^(1/4)) 817 (0.707106781186547...+0.707106781186547...j) 818 """ 819 try: --> 820 return self.eval(complex) global self.eval = undefined global complex = undefined 821 except Exception: 822 from .complex_field import ComplexField 823 return complex(self.eval(ComplexField(53))) 824 825 cpdef eval(self, R): 826 """ 827 Abstract method for converting ``self`` into an element of ``R``. 828 829 EXAMPLES:: 830 831 sage: a = RLF(12) 832 sage: a.eval(ZZ) 833 12 834 """ 835 raise NotImplementedError("Subclasses must override this method.") /usr/lib/python2.7/dist-packages/sage/rings/real_lazy.pyx in sage.rings.real_lazy.LazyAlgebraic.eval (build/cythonized/sage/rings/real_lazy.c:18537)() 1592 sage: from sage.rings.real_lazy import LazyAlgebraic 1593 sage: a = LazyAlgebraic(CLF, QQ['x'].cyclotomic_polynomial(7), 0.6+0.8*CC.0) 1594 sage: a 1595 0.6234898018587335? + 0.7818314824680299?*I 1596 sage: ComplexField(150)(a) # indirect doctest 1597 0.62348980185873353052500488400423981063227473 + 0.78183148246802980870844452667405775023233452*I 1598 1599 sage: a = LazyAlgebraic(CLF, QQ['x'].0^2-7, -2.0) 1600 sage: RR(a) 1601 -2.64575131106459 1602 sage: RR(a)^2 1603 7.00000000000000 1604 """ 1605 if isinstance(R, type): 1606 if self._prec < 53: -> 1607 self.eval(self.parent().interval_field(64)) # up the prec global self.eval = undefined global self.parent.interval_field = undefined 1608 elif R.is_exact() or self._prec < R.prec(): 1609 # Carl Witty said: 1610 # Quadratic equation faster and more accurate than roots(), 1611 # but the current code doesn't do the right thing with interval 1612 # arithmetic (it returns a point interval) so it's being disabled 1613 # for now 1614 # if self._quadratic_disc is not None: 1615 # c, b, a = self._poly.list() 1616 # if self._root_approx.real() < -b/2*a: 1617 # z = (-b - R(self._quadratic_disc).sqrt()) / (2*a) 1618 # else: 1619 # z = (-b + R(self._quadratic_disc).sqrt()) / (2*a) 1620 # if z.parent() is not R: 1621 # z = R(z) 1622 # self._root_approx = z /usr/lib/python2.7/dist-packages/sage/rings/real_lazy.pyx in sage.rings.real_lazy.LazyAlgebraic.eval (build/cythonized/sage/rings/real_lazy.c:18694)() 1618 # else: 1619 # z = (-b + R(self._quadratic_disc).sqrt()) / (2*a) 1620 # if z.parent() is not R: 1621 # z = R(z) 1622 # self._root_approx = z 1623 # from sage.rings.complex_interval_field import is_IntervalField 1624 # if is_IntervalField(R): 1625 # self._root_approx = (self._root_approx.upper() + self._root_approx.lower()) / 2 1626 # self._prec = R.prec() 1627 # return R(self._root_approx) 1628 if self._root is None: 1629 # This could be done much more efficiently with Newton iteration, 1630 # but will require some care to make sure we get the right root, and 1631 # to the correct precision. 1632 from sage.rings.qqbar import AA, QQbar -> 1633 roots = self._poly.roots(ring = AA if isinstance(self._parent, RealLazyField_class) else QQbar) global roots = undefined global self._poly.roots = undefined global ring = undefined global AA = undefined global isinstance = undefined global self._parent = undefined global RealLazyField_class = <class 'sage.rings.real_lazy.RealLazyField_class'> global QQbar = undefined 1634 best_root = roots[0][0] 1635 min_dist = abs(self._root_approx - best_root) 1636 for r, e in roots[1:]: 1637 dist = abs(self._root_approx - r) 1638 if dist < min_dist: 1639 best_root = r 1640 min_dist = dist 1641 self._root = best_root 1642 if self._root is not None: 1643 return R(self._root) 1644 1645 def __float__(self): 1646 """ 1647 TESTS:: 1648 /usr/lib/python2.7/dist-packages/sage/rings/polynomial/polynomial_element.pyx in sage.rings.polynomial.polynomial_element.Polynomial.roots (build/cythonized/sage/rings/polynomial/polynomial_element.c:69561)() 7613 7614 if multiplicities: 7615 return rts 7616 else: 7617 return [rt for (rt, mult) in rts] 7618 7619 if (is_IntegerRing(K) or is_RationalField(K) 7620 or is_AlgebraicField_common(K) or input_gaussian) and \ 7621 (is_ComplexIntervalField(L) or is_AlgebraicField_common(L)): 7622 7623 from sage.rings.polynomial.complex_roots import complex_roots 7624 7625 if is_ComplexIntervalField(L): 7626 rts = complex_roots(self, min_prec=L.prec()) 7627 elif is_AlgebraicField(L): -> 7628 rts = complex_roots(self, retval='algebraic') global rts = undefined global complex_roots = undefined global self = undefined global retval = undefined 7629 else: 7630 rts = complex_roots(self, retval='algebraic_real') 7631 7632 if multiplicities: 7633 return rts 7634 else: 7635 return [rt for (rt, mult) in rts] 7636 7637 if output_fp and output_complex and not input_gaussian: 7638 # If we want the complex roots, and the input is not 7639 # floating point, we convert to a real polynomial 7640 # (except when the input coefficients are Gaussian rationals). 7641 if is_ComplexDoubleField(L): 7642 real_field = RDF 7643 else: /usr/lib/python2.7/dist-packages/sage/rings/polynomial/complex_roots.pyc in complex_roots(p=x^2 + 1, skip_squarefree=False, retval='algebraic', min_prec=0) 243 if skip_squarefree: 244 factors = [(p, 1)] 245 else: 246 factors = p.squarefree_decomposition() 247 248 prec = 53 249 while True: 250 CC = ComplexField(prec) 251 CCX = CC['x'] 252 253 all_rts = [] 254 ok = True 255 256 for (factor, exp) in factors: 257 cfac = CCX(factor) --> 258 rts = cfac.roots(multiplicities=False) rts = undefined cfac.roots = <built-in method roots of PolynomialRing_field_with_category.element_class object at 0x7fc5e80839f0> global multiplicities = undefined global False = undefined 259 # Make sure the number of roots we found is the degree. If 260 # we don't find that many roots, it's because the 261 # precision isn't big enough and though the (possibly 262 # exact) polynomial "factor" is squarefree, it is not 263 # squarefree as an element of CCX. 264 if len(rts) < factor.degree(): 265 ok = False 266 break 267 irts = interval_roots(factor, rts, max(prec, min_prec)) 268 if irts is None: 269 ok = False 270 break 271 if retval != 'interval': 272 factor = QQbar.common_polynomial(factor) 273 for irt in irts: /usr/lib/python2.7/dist-packages/sage/rings/polynomial/polynomial_element.pyx in sage.rings.polynomial.polynomial_element.Polynomial.roots (build/cythonized/sage/rings/polynomial/polynomial_element.c:66289)() 7521 ext_rts1 = numpy.roots(numpy_array) 7522 rts = [] 7523 for rt in ext_rts1: 7524 rts.append(CDF(rt)) 7525 rts.sort() 7526 ext_rts = rts 7527 except (ValueError, LinAlgError): 7528 if algorithm == 'either': 7529 algorithm = 'pari' 7530 else: 7531 raise 7532 7533 if algorithm == 'pari': 7534 if not input_arbprec: 7535 self = self.change_ring(CC if input_complex else RR) -> 7536 ext_rts = self.__pari__().polroots(precision=L.prec()) global ext_rts = undefined global self.__pari__.polroots = undefined global precision = undefined global L.prec = undefined 7537 7538 if output_complex: 7539 rts = sort_complex_numbers_for_display([L(root) for root in ext_rts]) 7540 else: 7541 rts = sorted([L(root.real()) for root in ext_rts if root.imag() == 0]) 7542 7543 rts_mult = [] 7544 j = 0 7545 while j < len(rts): 7546 rt = rts[j] 7547 mult = rts.count(rt) 7548 rts_mult.append((rt, mult)) 7549 j += mult 7550 7551 if multiplicities: /usr/lib/python2.7/dist-packages/sage/rings/polynomial/polynomial_element.pyx in sage.rings.polynomial.polynomial_element.Polynomial.__pari__ (build/cythonized/sage/rings/polynomial/polynomial_element.c:53916)() 5933 sage: R.<x> = S['x'] 5934 sage: pari(x^2 + 9*x) 5935 x^2 + 2*x 5936 sage: pari(a*x + 9*b*x^3) 5937 2*b*x^3 + a*x 5938 5939 :: 5940 5941 sage: S.<a> = Integers(8)['a'] 5942 sage: R.<x> = S['x'] 5943 sage: pari(x^2 + 2*x) 5944 Mod(1, 8)*x^2 + Mod(2, 8)*x 5945 sage: pari(a*x + 10*x^3) 5946 Mod(2, 8)*x^3 + Mod(1, 8)*a*x 5947 """ -> 5948 return self._pari_with_name(self._parent.variable_name()) global self._pari_with_name = undefined global self._parent.variable_name = undefined 5949 5950 def _pari_or_constant(self, name=None): 5951 r""" 5952 Convert ``self`` to PARI. This behaves identical to :meth:`__pari__` 5953 or :meth:`_pari_with_name` except for constant polynomials: 5954 then the constant is returned instead of a constant polynomial. 5955 5956 INPUT: 5957 5958 - ``name`` -- (default: None) Variable name. If not given, use 5959 ``self.parent().variable_name()``. This argument is irrelevant 5960 for constant polynomials. 5961 5962 EXAMPLES:: 5963 /usr/lib/python2.7/dist-packages/sage/rings/polynomial/polynomial_element.pyx in sage.rings.polynomial.polynomial_element.Polynomial._pari_with_name (build/cythonized/sage/rings/polynomial/polynomial_element.c:54381)() 5986 def _pari_with_name(self, name='x'): 5987 r""" 5988 Return polynomial as a PARI object with topmost variable 5989 ``name``. By default, use 'x' for the variable name. 5990 5991 For internal use only. 5992 5993 EXAMPLES: 5994 5995 sage: R.<a> = PolynomialRing(ZZ) 5996 sage: (2*a^2 + a)._pari_with_name() 5997 2*x^2 + x 5998 sage: (2*a^2 + a)._pari_with_name('y') 5999 2*y^2 + y 6000 """ -> 6001 vals = [x.__pari__() for x in self.list()] global vals = undefined global x.__pari__ = undefined global x = undefined global self.list = undefined 6002 return pari(vals).Polrev(name) 6003 6004 def _pari_init_(self): 6005 return repr(self.__pari__()) 6006 6007 def _magma_init_(self, magma): 6008 """ 6009 Return a string that evaluates in Magma to this polynomial. 6010 6011 EXAMPLES:: 6012 6013 sage: magma = Magma() # new session 6014 sage: R.<y> = ZZ[] 6015 sage: f = y^3 - 17*y + 5 6016 sage: f._magma_init_(magma) # optional - magma /usr/lib/python2.7/dist-packages/sage/rings/complex_number.pyx in sage.rings.complex_number.ComplexNumber.__pari__ (build/cythonized/sage/rings/complex_number.c:7370)() 579 <type 'cypari2.gen.Gen'> 580 sage: a.__pari__() 581 2.00000000000000 + 1.00000000000000*I 582 sage: type(a.__pari__()) 583 <type 'cypari2.gen.Gen'> 584 sage: a = CC(pi) 585 sage: pari(a) 586 3.14159265358979 587 sage: pari(a).type() 588 't_REAL' 589 sage: a = CC(-2).sqrt() 590 sage: pari(a) 591 1.41421356237310*I 592 """ 593 if self.is_real(): --> 594 return self.real().__pari__() global self.real.__pari__ = undefined 595 return sage.libs.pari.all.pari.complex(self.real() or 0, self.imag()) 596 597 def __mpc__(self): 598 """ 599 Convert Sage ``ComplexNumber`` to gmpy2 ``mpc``. 600 601 EXAMPLES:: 602 603 sage: c = ComplexNumber(2,1) 604 sage: c.__mpc__() # optional - gmpy2 605 mpc('2.0+1.0j') 606 sage: from gmpy2 import mpc # optional - gmpy2 607 sage: mpc(c) # optional - gmpy2 608 mpc('2.0+1.0j') 609 sage: CF = ComplexField(134) /usr/lib/python2.7/dist-packages/sage/rings/real_mpfr.pyx in sage.rings.real_mpfr.RealNumber.__pari__ (build/cythonized/sage/rings/real_mpfr.c:23306)() 3185 Check that the largest and smallest exponents representable by 3186 PARI convert correctly:: 3187 3188 sage: a = pari(0.5) << (sys.maxsize+1)/4 3189 sage: RR(a) >> (sys.maxsize+1)/4 3190 0.500000000000000 3191 sage: a = pari(0.5) >> (sys.maxsize-3)/4 3192 sage: RR(a) << (sys.maxsize-3)/4 3193 0.500000000000000 3194 """ 3195 # This uses interfaces of MPFR and PARI which are documented 3196 # (and not marked subject-to-change). It could be faster 3197 # by using internal interfaces of MPFR, which are documented 3198 # as subject-to-change. 3199 -> 3200 sig_on() global sig_on = undefined 3201 if mpfr_nan_p(self.value) or mpfr_inf_p(self.value): 3202 raise ValueError('Cannot convert NaN or infinity to Pari float') 3203 3204 # wordsize for PARI 3205 cdef unsigned long wordsize = sizeof(long)*8 3206 3207 cdef int prec 3208 prec = (<RealField_class>self._parent).__prec 3209 3210 # We round up the precision to the nearest multiple of wordsize. 3211 cdef int rounded_prec 3212 rounded_prec = (self.prec() + wordsize - 1) & ~(wordsize - 1) 3213 3214 # Yes, assigning to self works fine, even in Cython. 3215 if rounded_prec > prec: SignalError: Segmentation fault *************************************************************************** History of session input: *** Last line of input (may not be in above history):