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 = &paramset_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):

Reply via email to