I went to type some sagelib code into ipython this morning, and got a
circular import error. The simplest reproducer is,
$ python -q
>>> from sage.rings.integer_ring import ZZ
...
ImportError: cannot import name 'ZZ' from partially initialized module
'sage.rings.integer_ring' (most likely due to a circular import)
(/home/mjo/.../
integer_ring.cpython-313-riscv64-linux-musl.so)
This particular instance is from the loop,
integer_ring -> integer
-> rational
-> rational_field
-> categories/finite_fields
-> integer_ring
which is easily fixable. Yet after fixing it, I still get an
AttributeError from the integer <-> integer_ring loop:
$ python -q
>>> from sage.rings.integer_ring import ZZ
Traceback (most recent call last):
File "<python-input-0>", line 1, in <module>
from sage.rings.integer_ring import ZZ
File "sage/rings/integer_ring.pyx", line 1, in init sage.rings.integer_ring
r"""
File "sage/rings/integer.pyx", line 312, in init sage.rings.integer
cdef Parent the_integer_ring = integer_ring.ZZ
AttributeError: partially initialized module
'sage.rings.integer_ring' from
'/home/mjo/.../
integer_ring.cpython-313-riscv64-linux-musl.so'
has no attribute 'ZZ' (most likely due to a circular import)
This has me confused. I'm certain I've imported ZZ from python before,
and I'm also pretty sure that the integer <-> integer_ring loop is not
new.
Has anything else changed? Is it just me? (This requires sagelib to be
installed as a python package via pip, meson, or a package manager; it
works fine from within a sage prompt.)