Hello, during my experiments with python3, I am now stopped on a crash involving hash of Complex interval fields.
The full log is attached. It ends with TypeError: key = (Complex Interval Field with 53 bits of precision, ('x',), False, None) unhashable type: 'ComplexIntervalField_class_with_category' This is strange, because CIF and type(CIF) are both hashable in the usual sage with python2. has anybody any idea of what is happening ? Frederic -- You received this message because you are subscribed to the Google Groups "sage-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at https://groups.google.com/group/sage-devel. For more options, visit https://groups.google.com/d/optout.
*************************************************************************** IPython post-mortem report {'commit_hash': '5c9c918', 'commit_source': 'installation', 'default_encoding': 'UTF-8', 'ipython_path': '/home/chapoton/sage3/local/lib/python3.6/site-packages/IPython', 'ipython_version': '5.1.0', 'os_name': 'posix', 'platform': 'Linux-4.10.0-32-generic-x86_64-with-debian-stretch-sid', 'sys_executable': '/home/chapoton/sage3/local/bin/python3', 'sys_platform': 'linux', 'sys_version': '3.6.1 (default, May 25 2017, 08:13:20) \n[GCC 6.3.0 20170406]'} *************************************************************************** *************************************************************************** Crash traceback: --------------------------------------------------------------------------- --------------------------------------------------------------------------- TypeError Python 3.6.1: /home/chapoton/sage3/local/bin/python3 Sat Aug 26 08:37:09 2017 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. /home/chapoton/sage3/local/lib/python3.6/site-packages/sage/rings/polynomial/polynomial_ring_constructor.py in _get_from_cache(key=(Complex Interval Field with 53 bits of precision, ('x',), False, None)) 603 try: --> 604 return _cache[key] global _cache = <WeakValueDictionary at 0x7fee50b01ac8> key = (Complex Interval Field with 53 bits of precision, ('x',), False, None) 605 except TypeError as msg: /home/chapoton/sage3/src/sage/misc/weak_dict.pyx in sage.misc.weak_dict.WeakValueDictionary.__getitem__ (/home/chapoton/sage3/src/build/cythonized/sage/misc/weak_dict.c:3507)() TypeError: unhashable type: 'ComplexIntervalField_class_with_category' During handling of the above exception, another exception occurred: --------------------------------------------------------------------------- TypeError Python 3.6.1: /home/chapoton/sage3/local/bin/python3 Sat Aug 26 08:37:09 2017 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. /home/chapoton/sage3/src/bin/sage-ipython in <module>() 1 #!/usr/bin/env python3 2 # -*- coding: utf-8 -*- 3 """ 4 Sage IPython startup script. 5 """ 6 7 from sage.repl.interpreter import SageTerminalApp 8 9 app = SageTerminalApp.instance() ---> 10 app.initialize() global app.initialize = <bound method TerminalIPythonApp.initialize of <sage.repl.interpreter.SageTerminalApp object at 0x7feeeb977630>> 11 app.start() <decorator-gen-109> in initialize(self=<sage.repl.interpreter.SageTerminalApp object>, argv=None) /home/chapoton/sage3/local/lib/python3.6/site-packages/traitlets/config/application.py in catch_config_error(method=<function TerminalIPythonApp.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 TerminalIPythonApp.initialize at 0x7feee4e55268> app = <sage.repl.interpreter.SageTerminalApp object at 0x7feeeb977630> 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 /home/chapoton/sage3/local/lib/python3.6/site-packages/IPython/terminal/ipapp.py in initialize(self=<sage.repl.interpreter.SageTerminalApp object>, argv=None) 294 295 return super(TerminalIPythonApp, self).parse_command_line(argv) 296 297 @catch_config_error 298 def initialize(self, argv=None): 299 """Do actions after construct, but before starting the app.""" 300 super(TerminalIPythonApp, self).initialize(argv) 301 if self.subapp is not None: 302 # don't bother initializing further, starting subapp 303 return 304 # print self.extra_args 305 if self.extra_args and not self.something_to_run: 306 self.file_to_run = self.extra_args[0] 307 self.init_path() 308 # create the shell --> 309 self.init_shell() self.init_shell = <bound method SageTerminalApp.init_shell of <sage.repl.interpreter.SageTerminalApp object at 0x7feeeb977630>> 310 # and draw the banner 311 self.init_banner() 312 # Now a variety of things that happen after the banner is printed. 313 self.init_gui_pylab() 314 self.init_extensions() 315 self.init_code() 316 317 def init_shell(self): 318 """initialize the InteractiveShell instance""" 319 # Create an InteractiveShell instance. 320 # shell.display_banner should always be False for the terminal 321 # based app, because we call shell.show_banner() by hand below 322 # so the banner shows *before* all extension loading stuff. 323 self.shell = TerminalInteractiveShell.instance(parent=self, 324 profile_dir=self.profile_dir, /home/chapoton/sage3/local/lib/python3.6/site-packages/sage/repl/interpreter.py 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 0x7feee4e6ee48>> global SAGE_EXTENSION = 'sage' 763 764 /home/chapoton/sage3/local/lib/python3.6/site-packages/IPython/core/extensions.py 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 0x7feee4e6ee48>> mod = <module 'sage' from '/home/chapoton/sage3/local/lib/python3.6/site-packages/sage/__init__.py'> 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: /home/chapoton/sage3/local/lib/python3.6/site-packages/IPython/core/extensions.py in _call_load_ipython_extension(self=<IPython.core.extensions.ExtensionManager object>, mod=<module 'sage' from '/home/chapoton/sage3/local/lib/python3.6/site-packages/sage/__init__.py'>) 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 0x7feeea1160d0> self.shell = <sage.repl.interpreter.SageTerminalInteractiveShell object at 0x7feee4e6eeb8> 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. /home/chapoton/sage3/local/lib/python3.6/site-packages/sage/__init__.py 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 0x7feedfb99d08> args = (<sage.repl.interpreter.SageTerminalInteractiveShell object at 0x7feee4e6eeb8>,) 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 /home/chapoton/sage3/local/lib/python3.6/site-packages/sage/repl/ipython_extension.py 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 0x7feee4e6eeb8>,) 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) /home/chapoton/sage3/local/lib/python3.6/site-packages/sage/repl/ipython_extension.py 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 0x7feee4e6eeb8> /home/chapoton/sage3/local/lib/python3.6/site-packages/sage/repl/ipython_extension.py 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) /home/chapoton/sage3/local/lib/python3.6/site-packages/sage/all.py in <module>() 87 from sage.misc.all import * # takes a while 88 from sage.typeset.all import * 89 from sage.repl.all import * 90 91 from sage.misc.sh import sh 92 93 from sage.libs.all import * 94 from sage.data_structures.all import * 95 from sage.doctest.all import * 96 97 from sage.structure.all import * 98 from sage.rings.all import * 99 from sage.arith.all import * 100 from sage.matrix.all import * 101 --> 102 from sage.symbolic.all import * global sage.symbolic.all = undefined 103 from sage.modules.all import * 104 from sage.monoids.all import * 105 from sage.algebras.all import * 106 from sage.modular.all import * 107 from sage.sat.all import * 108 from sage.schemes.all import * 109 from sage.graphs.all import * 110 from sage.groups.all import * 111 from sage.databases.all import * 112 from sage.categories.all import * 113 from sage.sets.all import * 114 from sage.probability.all import * 115 from sage.interfaces.all import * 116 117 from sage.functions.all import * /home/chapoton/sage3/local/lib/python3.6/site-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 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 14 15 from .units import units /home/chapoton/sage3/src/sage/libs/pynac/pynac.pyx in init sage.libs.pynac.pynac() 2529 py_funcs.subs_args_to_PyTuple = &subs_args_to_PyTuple 2530 py_funcs.py_print_function = &py_print_function 2531 py_funcs.py_latex_function = &py_latex_function 2532 py_funcs.py_get_ginac_serial = &py_get_ginac_serial 2533 py_funcs.py_get_sfunction_from_serial = &py_get_sfunction_from_serial 2534 py_funcs.py_get_serial_from_sfunction = &py_get_serial_from_sfunction 2535 py_funcs.py_get_serial_for_new_sfunction = &py_get_serial_for_new_sfunction 2536 2537 py_funcs.py_get_constant = &py_get_constant 2538 py_funcs.py_print_fderivative = &py_print_fderivative 2539 py_funcs.py_latex_fderivative = &py_latex_fderivative 2540 py_funcs.paramset_to_PyTuple = ¶mset_to_PyTuple 2541 py_funcs.py_rational_power_parts = &py_rational_power_parts 2542 2543 init_function_table() -> 2544 init_pynac_I() global init_pynac_I = <built-in function init_pynac_I> 2545 2546 set_ginac_fn_serial() /home/chapoton/sage3/src/sage/libs/pynac/pynac.pyx in sage.libs.pynac.pynac.init_pynac_I (/home/chapoton/sage3/src/build/cythonized/sage/libs/pynac/pynac.cpp:28548)() 2415 <type 'sage.rings.number_field.number_field_element_quadratic.NumberFieldElement_quadratic'> 2416 2417 Check that :trac:`10064` is fixed:: 2418 2419 sage: y = I*I*x / x # so y is the expression -1 2420 sage: y.is_positive() 2421 False 2422 sage: z = -x / x 2423 sage: z.is_positive() 2424 False 2425 sage: bool(z == y) 2426 True 2427 """ 2428 global pynac_I, I 2429 from sage.rings.number_field.number_field import QuadraticField -> 2430 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.gen of Complex Field with 53 bits of precision> global latex_name = undefined 2431 pynac_I = K.gen() 2432 ginac_pyinit_I(pynac_I) 2433 I = new_Expression_from_GEx(ring.SR, g_I) 2434 2435 2436 def init_function_table(): 2437 """ 2438 Initializes the function pointer table in Pynac. This must be 2439 called before Pynac is used; otherwise, there will be segfaults. 2440 """ 2441 2442 py_funcs.py_binomial_int = &py_binomial_int 2443 py_funcs.py_binomial = &py_binomial 2444 py_funcs.py_gcd = &py_gcd 2445 py_funcs.py_lcm = &py_lcm /home/chapoton/sage3/local/lib/python3.6/site-packages/sage/rings/number_field/number_field.py in QuadraticField(D=b'-1', name='I', check=True, embedding=b.'100000000000000'*I, latex_name='i', **args={}) 912 False 913 """ 914 D = QQ(D) 915 if check: 916 if D.is_square(): 917 raise ValueError("D must not be a perfect square.") 918 R = QQ['x'] 919 f = R([-D, 0, 1]) 920 if embedding is True: 921 if D > 0: 922 embedding = RLF(D).sqrt() 923 else: 924 embedding = CLF(D).sqrt() 925 if latex_name == 'sqrt': 926 latex_name = r'\sqrt{%s}' % D --> 927 return NumberField(f, name, check=False, embedding=embedding, latex_name=latex_name, **args) global NumberField = <function NumberField at 0x7fee4c817840> f = b'1'*x^2 + b'1' name = 'I' check = True embedding = b.'100000000000000'*I latex_name = 'i' args = {} 928 929 def is_AbsoluteNumberField(x): 930 """ 931 Return True if x is an absolute number field. 932 933 EXAMPLES:: 934 935 sage: from sage.rings.number_field.number_field import is_AbsoluteNumberField 936 sage: is_AbsoluteNumberField(NumberField(x^2+1,'a')) 937 True 938 sage: is_AbsoluteNumberField(NumberField([x^3 + 17, x^2+1],'a')) 939 False 940 941 The rationals are a number field, but they're not of the absolute 942 number field class. /home/chapoton/sage3/local/lib/python3.6/site-packages/sage/rings/number_field/number_field.py in NumberField(polynomial=b'1'*x^2 + b'1', name='I', check=False, names=None, embedding=b.'100000000000000'*I, latex_name='i', assume_disc_small=False, maximize_at_primes=None, structure=None) 514 (2,) 515 516 It is an error not to specify the generator:: 517 518 sage: K = NumberField(x^2-2) 519 Traceback (most recent call last): 520 ... 521 TypeError: You must specify the name of the generator. 522 523 """ 524 if names is not None: 525 name = names 526 if isinstance(polynomial, (list,tuple)): 527 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) 528 --> 529 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 = <class 'sage.rings.number_field.number_field.NumberFieldFactory'> polynomial = b'1'*x^2 + b'1' name = 'I' check = False embedding = b.'100000000000000'*I latex_name = 'i' assume_disc_small = False maximize_at_primes = None structure = None 530 531 class NumberFieldFactory(UniqueFactory): 532 r""" 533 Factory for number fields. 534 535 This should usually not be called directly, use :meth:`NumberField` 536 instead. 537 538 INPUT: 539 540 - ``polynomial`` - a polynomial over `\QQ` or a number field. 541 - ``name`` - a string (default: ``'a'``), the name of the generator 542 - ``check`` - a boolean (default: ``True``); do type checking and 543 irreducibility checking. 544 - ``embedding`` - ``None`` or an element, the images of the generator /home/chapoton/sage3/src/sage/structure/factory.pyx in sage.structure.factory.UniqueFactory.__call__ (/home/chapoton/sage3/src/build/cythonized/sage/structure/factory.c:1882)() /home/chapoton/sage3/src/sage/structure/factory.pyx in sage.structure.factory.UniqueFactory.get_object (/home/chapoton/sage3/src/build/cythonized/sage/structure/factory.c:2116)() /home/chapoton/sage3/src/sage/misc/cachefunc.pyx in sage.misc.cachefunc.cache_key (/home/chapoton/sage3/src/build/cythonized/sage/misc/cachefunc.c:3097)() /home/chapoton/sage3/src/sage/misc/cachefunc.pyx in sage.misc.cachefunc.cache_key_unhashable (/home/chapoton/sage3/src/build/cythonized/sage/misc/cachefunc.c:3411)() /home/chapoton/sage3/src/sage/misc/cachefunc.pyx in genexpr (/home/chapoton/sage3/src/build/cythonized/sage/misc/cachefunc.c:3308)() /home/chapoton/sage3/src/sage/misc/cachefunc.pyx in sage.misc.cachefunc.cache_key (/home/chapoton/sage3/src/build/cythonized/sage/misc/cachefunc.c:3097)() /home/chapoton/sage3/src/sage/misc/cachefunc.pyx in sage.misc.cachefunc.cache_key_unhashable (/home/chapoton/sage3/src/build/cythonized/sage/misc/cachefunc.c:3411)() /home/chapoton/sage3/src/sage/misc/cachefunc.pyx in genexpr (/home/chapoton/sage3/src/build/cythonized/sage/misc/cachefunc.c:3308)() /home/chapoton/sage3/src/sage/misc/cachefunc.pyx in sage.misc.cachefunc.cache_key (/home/chapoton/sage3/src/build/cythonized/sage/misc/cachefunc.c:3097)() /home/chapoton/sage3/src/sage/misc/cachefunc.pyx in sage.misc.cachefunc.cache_key_unhashable (/home/chapoton/sage3/src/build/cythonized/sage/misc/cachefunc.c:3466)() /home/chapoton/sage3/src/sage/structure/element.pyx in sage.structure.element.Element._cache_key (/home/chapoton/sage3/src/build/cythonized/sage/structure/element.c:9862)() /home/chapoton/sage3/src/sage/structure/sage_object.pyx in sage.structure.sage_object.SageObject.__repr__ (/home/chapoton/sage3/src/build/cythonized/sage/structure/sage_object.c:2705)() /home/chapoton/sage3/src/sage/rings/real_lazy.pyx in sage.rings.real_lazy.LazyFieldElement._repr_ (/home/chapoton/sage3/src/build/cythonized/sage/rings/real_lazy.c:9675)() /home/chapoton/sage3/src/sage/rings/real_lazy.pyx in sage.rings.real_lazy.LazyFieldElement.approx (/home/chapoton/sage3/src/build/cythonized/sage/rings/real_lazy.c:9770)() /home/chapoton/sage3/src/sage/rings/real_lazy.pyx in sage.rings.real_lazy.LazyAlgebraic.eval (/home/chapoton/sage3/src/build/cythonized/sage/rings/real_lazy.c:18752)() /home/chapoton/sage3/src/sage/rings/polynomial/polynomial_element.pyx in sage.rings.polynomial.polynomial_element.Polynomial.roots (/home/chapoton/sage3/src/build/cythonized/sage/rings/polynomial/polynomial_element.c:68682)() /home/chapoton/sage3/local/lib/python3.6/site-packages/sage/rings/polynomial/complex_roots.py in complex_roots(p=b'1'*x^2 + b'1', skip_squarefree=False, retval='algebraic', min_prec=0) 252 253 all_rts = [] 254 ok = True 255 256 for (factor, exp) in factors: 257 cfac = CCX(factor) 258 rts = cfac.roots(multiplicities=False) 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)) irts = undefined global interval_roots = <function interval_roots at 0x7fee39a0d7b8> factor = b'1'*x^2 + b'1' rts = [b.'-100000000000000'*I, b.'100000000000000'*I] global max = undefined prec = 53 min_prec = 0 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: 274 all_rts.append((irt, factor, exp)) 275 276 if ok and intervals_disjoint([rt for (rt, fac, mult) in all_rts]): 277 all_rts = sort_complex_numbers_for_display(all_rts) 278 if retval == 'interval': 279 return [(rt, mult) for (rt, fac, mult) in all_rts] 280 elif retval == 'algebraic': 281 return [(QQbar.polynomial_root(fac, rt), mult) for (rt, fac, mult) in all_rts] 282 elif retval == 'algebraic_real': /home/chapoton/sage3/local/lib/python3.6/site-packages/sage/rings/polynomial/complex_roots.py in interval_roots(p=b'1'*x^2 + b'1', rts=[b.'-100000000000000'*I, b.'100000000000000'*I], prec=53) 55 fail, we return None. 56 57 EXAMPLES:: 58 59 sage: x = polygen(ZZ) 60 sage: p = x^3 - 1 61 sage: rts = [CC.zeta(3)^i for i in range(0, 3)] 62 sage: from sage.rings.polynomial.complex_roots import interval_roots 63 sage: interval_roots(p, rts, 53) 64 [1, -0.500000000000000? + 0.866025403784439?*I, -0.500000000000000? - 0.866025403784439?*I] 65 sage: interval_roots(p, rts, 200) 66 [1, -0.500000000000000000000000000000000000000000000000000000000000? + 0.866025403784438646763723170752936183471402626905190314027904?*I, -0.500000000000000000000000000000000000000000000000000000000000? - 0.866025403784438646763723170752936183471402626905190314027904?*I] 67 """ 68 69 CIF = ComplexIntervalField(prec) ---> 70 CIFX = CIF['x'] CIFX = undefined CIF = Complex Interval Field with 53 bits of precision 71 72 ip = CIFX(p) 73 ipd = CIFX(p.derivative()) 74 75 irts = [] 76 77 for rt in rts: 78 irt = refine_root(ip, ipd, CIF(rt), CIF) 79 if irt is None: 80 return None 81 irts.append(irt) 82 83 return irts 84 85 def intervals_disjoint(intvs): /home/chapoton/sage3/src/sage/structure/parent.pyx in sage.structure.parent.Parent.__getitem__ (/home/chapoton/sage3/src/build/cythonized/sage/structure/parent.c:11975)() /home/chapoton/sage3/local/lib/python3.6/site-packages/sage/categories/rings.py in __getitem__(self=Complex Interval Field with 53 bits of precision, arg='x') 1067 and elt.imag().is_zero()): 1068 emb = RLF(elt) 1069 else: 1070 emb = CLF(elt) 1071 return self.extension(minpolys[0], names[0], embedding=emb) 1072 try: 1073 # Doing the extension all at once is best, if possible... 1074 return self.extension(minpolys, names) 1075 except (TypeError, ValueError): 1076 # ...but we can also construct it iteratively 1077 return reduce(lambda R, ext: R.extension(*ext), zip(minpolys, names), self) 1078 1079 # 2. Otherwise, try to return a polynomial ring 1080 1081 from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing -> 1082 return PolynomialRing(self, elts) PolynomialRing = <function PolynomialRing at 0x7fee50f9c840> self = Complex Interval Field with 53 bits of precision elts = ('x',) 1083 1084 class ElementMethods: 1085 def is_unit(self): 1086 r""" 1087 Return whether this element is a unit in the ring. 1088 1089 .. NOTE:: 1090 1091 This is a generic implementation for (non-commutative) rings 1092 which only works for the one element, its additive inverse, and 1093 the zero element. Most rings should provide a more specialized 1094 implementation. 1095 1096 EXAMPLES:: 1097 /home/chapoton/sage3/local/lib/python3.6/site-packages/sage/rings/polynomial/polynomial_ring_constructor.py in PolynomialRing(base_ring=Complex Interval Field with 53 bits of precision, *args=(('x',),), **kwds={}) 570 # At this point, we have only handled the "names" keyword if it was 571 # needed. Since we know the variable names, it would logically be 572 # an error to specify an additional "names" keyword. However, 573 # people often abuse the preparser with 574 # R.<x> = PolynomialRing(QQ, 'x') 575 # and we allow this for historical reasons. However, the names 576 # must be consistent! 577 if "names" in kwds: 578 kwnames = kwds.pop("names") 579 if kwnames != names: 580 raise TypeError("variable names specified twice inconsistently: %r and %r" % (names, kwnames)) 581 582 if multivariate or len(names) != 1: 583 return _multi_variate(base_ring, names, **kwds) 584 else: --> 585 return _single_variate(base_ring, names, **kwds) global _single_variate = <function _single_variate at 0x7fee4f870d08> base_ring = Complex Interval Field with 53 bits of precision global names = undefined kwds = {} 586 587 588 def unpickle_PolynomialRing(base_ring, arg1=None, arg2=None, sparse=False): 589 """ 590 Custom unpickling function for polynomial rings. 591 592 This has the same positional arguments as the old 593 ``PolynomialRing`` constructor before :trac:`23338`. 594 """ 595 args = [arg for arg in (arg1, arg2) if arg is not None] 596 return PolynomialRing(base_ring, *args, sparse=sparse) 597 598 from sage.structure.sage_object import register_unpickle_override 599 register_unpickle_override('sage.rings.polynomial.polynomial_ring_constructor', 'PolynomialRing', unpickle_PolynomialRing) 600 /home/chapoton/sage3/local/lib/python3.6/site-packages/sage/rings/polynomial/polynomial_ring_constructor.py in _single_variate(base_ring=Complex Interval Field with 53 bits of precision, name=('x',), sparse=False, implementation=None, order=None) 610 def _save_in_cache(key, R): 611 try: 612 _cache[key] = R 613 except TypeError as msg: 614 raise TypeError('key = %s\n%s'%(key,msg)) 615 616 617 def _single_variate(base_ring, name, sparse=None, implementation=None, order=None): 618 # The "order" argument is unused, but we allow it (and ignore it) 619 # for consistency with the multi-variate case. 620 sparse = bool(sparse) 621 if sparse: 622 implementation = None 623 624 key = (base_ring, name, sparse, implementation) --> 625 R = _get_from_cache(key) R = undefined global _get_from_cache = <function _get_from_cache at 0x7fee4f870bf8> key = (Complex Interval Field with 53 bits of precision, ('x',), False, None) 626 if R is not None: 627 return R 628 629 import sage.rings.polynomial.polynomial_ring as m 630 if isinstance(base_ring, ring.CommutativeRing): 631 if is_IntegerModRing(base_ring) and not sparse: 632 n = base_ring.order() 633 if n.is_prime(): 634 R = m.PolynomialRing_dense_mod_p(base_ring, name, implementation=implementation) 635 elif n > 1: 636 R = m.PolynomialRing_dense_mod_n(base_ring, name, implementation=implementation) 637 else: # n == 1! 638 R = m.PolynomialRing_integral_domain(base_ring, name) # specialized code breaks in this case. 639 640 elif is_FiniteField(base_ring) and not sparse: /home/chapoton/sage3/local/lib/python3.6/site-packages/sage/rings/polynomial/polynomial_ring_constructor.py in _get_from_cache(key=(Complex Interval Field with 53 bits of precision, ('x',), False, None)) 591 592 This has the same positional arguments as the old 593 ``PolynomialRing`` constructor before :trac:`23338`. 594 """ 595 args = [arg for arg in (arg1, arg2) if arg is not None] 596 return PolynomialRing(base_ring, *args, sparse=sparse) 597 598 from sage.structure.sage_object import register_unpickle_override 599 register_unpickle_override('sage.rings.polynomial.polynomial_ring_constructor', 'PolynomialRing', unpickle_PolynomialRing) 600 601 602 def _get_from_cache(key): 603 try: 604 return _cache[key] 605 except TypeError as msg: --> 606 raise TypeError('key = %s\n%s'%(key,msg)) global TypeError = undefined key = (Complex Interval Field with 53 bits of precision, ('x',), False, None) msg = undefined 607 except KeyError: 608 return None 609 610 def _save_in_cache(key, R): 611 try: 612 _cache[key] = R 613 except TypeError as msg: 614 raise TypeError('key = %s\n%s'%(key,msg)) 615 616 617 def _single_variate(base_ring, name, sparse=None, implementation=None, order=None): 618 # The "order" argument is unused, but we allow it (and ignore it) 619 # for consistency with the multi-variate case. 620 sparse = bool(sparse) 621 if sparse: TypeError: key = (Complex Interval Field with 53 bits of precision, ('x',), False, None) unhashable type: 'ComplexIntervalField_class_with_category' *************************************************************************** History of session input: *** Last line of input (may not be in above history):