Skip to content

Commit 11eed27

Browse files
author
Release Manager
committed
gh-35283: Modularization fixes for imports of number fields <!-- ^^^^^ Please provide a concise, informative and self-explanatory title. Don't put issue numbers in there, do this in the PR body below. For example, instead of "Fixes #1234" use "Introduce new method to calculate 1+1" --> ### 📚 Description <!-- Describe your changes here in detail --> <!-- Why is this change required? What problem does it solve? --> <!-- If it resolves an open issue, please link to the issue here. For example "Closes #1337" --> Using the ABC `sage.rings.number_field.number_field_base.NumberField` Deprecating `is_NumberField`. Part of: - #29705 ### 📝 Checklist <!-- Put an `x` in all the boxes that apply. --> <!-- If your change requires a documentation PR, please link it appropriately --> <!-- If you're unsure about any of these, don't hesitate to ask. We're here to help! --> - [x] I have made sure that the title is self-explanatory and the description concisely explains the PR. - [x] I have linked an issue or discussion. - [ ] I have created tests covering the changes. - [ ] I have updated the documentation accordingly. ### ⌛ Dependencies <!-- List all open pull requests that this PR logically depends on --> <!-- - #xyz: short description why this is a dependency - #abc: ... --> - Depends on #35277 URL: #35283 Reported by: Matthias Köppe Reviewer(s): Marc Mezzarobba
2 parents f73c88b + 62b1287 commit 11eed27

26 files changed

+125
-99
lines changed

src/sage/algebras/quatalg/quaternion_algebra.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
from sage.rings.ideal import Ideal_fractional
5252
from sage.rings.rational_field import is_RationalField, QQ
5353
from sage.rings.infinity import infinity
54-
from sage.rings.number_field.number_field import is_NumberField
54+
from sage.rings.number_field.number_field_base import NumberField
5555
from sage.rings.power_series_ring import PowerSeriesRing
5656
from sage.structure.category_object import normalize_names
5757
from sage.structure.parent import Parent
@@ -662,7 +662,7 @@ def __init__(self, base_ring, a, b, names='i,j,k'):
662662
self._b = b
663663
if is_RationalField(base_ring) and a.denominator() == 1 == b.denominator():
664664
self.Element = QuaternionAlgebraElement_rational_field
665-
elif (is_NumberField(base_ring) and base_ring.degree() > 2 and base_ring.is_absolute() and
665+
elif (isinstance(base_ring, NumberField) and base_ring.degree() > 2 and base_ring.is_absolute() and
666666
a.denominator() == 1 == b.denominator() and base_ring.defining_polynomial().is_monic()):
667667
# This QuaternionAlgebraElement_number_field class is not
668668
# designed to work with elements of a quadratic field. To

src/sage/categories/number_fields.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,8 @@ def __contains__(self, x):
8989
sage: ZZ in NumberFields()
9090
False
9191
"""
92-
import sage.rings.number_field.number_field_base
93-
return sage.rings.number_field.number_field_base.is_NumberField(x)
92+
from sage.rings.number_field.number_field_base import NumberField
93+
return isinstance(x, NumberField)
9494

9595
def _call_(self, x):
9696
r"""

src/sage/matrix/matrix2.pyx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ from sage.misc.verbose import verbose, get_verbose
8989
from sage.categories.fields import Fields
9090
from sage.categories.integral_domains import IntegralDomains
9191
from sage.rings.ring import is_Ring
92-
from sage.rings.number_field.number_field_base import is_NumberField
92+
from sage.rings.number_field.number_field_base import NumberField
9393
from sage.rings.integer_ring import ZZ, is_IntegerRing
9494
from sage.rings.integer import Integer
9595
from sage.rings.rational_field import QQ, is_RationalField
@@ -4457,7 +4457,7 @@ cdef class Matrix(Matrix1):
44574457
raise ValueError("'padic' matrix kernel algorithm only available over the rationals and the integers, not over %s" % R)
44584458
elif algorithm == 'flint' and not (is_IntegerRing(R) or is_RationalField(R)):
44594459
raise ValueError("'flint' matrix kernel algorithm only available over the rationals and the integers, not over %s" % R)
4460-
elif algorithm == 'pari' and not (is_IntegerRing(R) or (is_NumberField(R) and not is_RationalField(R))):
4460+
elif algorithm == 'pari' and not (is_IntegerRing(R) or (isinstance(R, NumberField) and not is_RationalField(R))):
44614461
raise ValueError("'pari' matrix kernel algorithm only available over non-trivial number fields and the integers, not over %s" % R)
44624462
elif algorithm == 'generic' and R not in _Fields:
44634463
raise ValueError("'generic' matrix kernel algorithm only available over a field, not over %s" % R)
@@ -4514,7 +4514,7 @@ cdef class Matrix(Matrix1):
45144514
except AttributeError:
45154515
pass
45164516

4517-
if M is None and is_NumberField(R):
4517+
if M is None and isinstance(R, NumberField):
45184518
format, M = self._right_kernel_matrix_over_number_field()
45194519

45204520
if M is None and R in _Fields:

src/sage/modular/dirichlet.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@
6060
import sage.misc.prandom as random
6161
import sage.modules.free_module_element as free_module_element
6262
import sage.rings.abc
63-
import sage.rings.number_field.number_field as number_field
6463

6564
from sage.arith.functions import lcm
6665
from sage.arith.misc import bernoulli, kronecker, factor, gcd, fundamental_discriminant, euler_phi, valuation
@@ -77,7 +76,7 @@
7776
from sage.rings.finite_rings.integer_mod_ring import IntegerModRing
7877
from sage.rings.integer import Integer
7978
from sage.rings.integer_ring import ZZ
80-
from sage.rings.number_field.number_field import CyclotomicField
79+
from sage.rings.number_field.number_field import CyclotomicField, NumberField, NumberField_generic
8180
from sage.rings.power_series_ring import PowerSeriesRing
8281
from sage.rings.rational_field import RationalField, QQ, is_RationalField
8382
from sage.rings.ring import is_Ring
@@ -1039,7 +1038,7 @@ def fixed_field(self):
10391038
sage: psi.fixed_field()
10401039
Number Field in a with defining polynomial x^5 + x^4 - 12*x^3 - 21*x^2 + x + 5
10411040
"""
1042-
return number_field.NumberField(self.fixed_field_polynomial(), 'a')
1041+
return NumberField(self.fixed_field_polynomial(), 'a')
10431042

10441043
@cached_method
10451044
def decomposition(self):
@@ -1903,7 +1902,7 @@ def minimize_base_ring(self):
19031902
K = IntegerModRing(p)
19041903
elif self.order() <= 2:
19051904
K = QQ
1906-
elif (isinstance(R, number_field.NumberField_generic)
1905+
elif (isinstance(R, NumberField_generic)
19071906
and euler_phi(self.order()) < R.absolute_degree()):
19081907
K = CyclotomicField(self.order())
19091908
else:

src/sage/modular/modsym/space.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
from sage.rings.integer_ring import ZZ
3636
from sage.rings.integer import Integer
3737
from sage.rings.infinity import infinity
38-
from sage.rings.number_field.number_field_base import is_NumberField
38+
from sage.rings.number_field.number_field_base import NumberField
3939
from sage.rings.power_series_ring import PowerSeriesRing
4040
from sage.rings.rational_field import QQ
4141
from sage.structure.all import Sequence, SageObject
@@ -1046,7 +1046,7 @@ def _q_expansion_module_rational(self, prec):
10461046
if not self.is_cuspidal():
10471047
raise ValueError("self must be cuspidal")
10481048
K = self.base_ring()
1049-
if not is_NumberField(K):
1049+
if not isinstance(K, NumberField):
10501050
raise TypeError("self must be over QQ or a number field.")
10511051
n = K.degree()
10521052
if n == 1:

src/sage/rings/morphism.pyx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3162,7 +3162,7 @@ def _tensor_product_ring(B, A):
31623162
ValueError: term ordering must be global
31633163
"""
31643164
from .finite_rings.finite_field_base import FiniteField
3165-
from .number_field.number_field_base import is_NumberField
3165+
from .number_field.number_field_base import NumberField
31663166
from .polynomial.multi_polynomial_ring import is_MPolynomialRing
31673167
from .polynomial.polynomial_quotient_ring import is_PolynomialQuotientRing
31683168
from .polynomial.polynomial_ring import is_PolynomialRing
@@ -3179,7 +3179,7 @@ def _tensor_product_ring(B, A):
31793179
def term_order(A):
31803180
# univariate rings do not have a term order
31813181
if (is_PolynomialRing(A) or is_PolynomialQuotientRing(A)
3182-
or ((is_NumberField(A) or isinstance(A, FiniteField))
3182+
or (isinstance(A, (NumberField, FiniteField))
31833183
and not A.is_prime_field())):
31843184
return TermOrder('lex', 1)
31853185
try:
@@ -3202,7 +3202,7 @@ def _tensor_product_ring(B, A):
32023202
elif is_QuotientRing(A):
32033203
to_R = A.ambient().hom(R_gens_A, R, check=False)
32043204
return list(to_R(A.defining_ideal()).gens())
3205-
elif ((is_NumberField(A) or isinstance(A, FiniteField))
3205+
elif (isinstance(A, (NumberField, FiniteField))
32063206
and not A.is_prime_field()):
32073207
to_R = A.polynomial_ring().hom(R_gens_A, R, check=False)
32083208
return [to_R(A.polynomial())]

src/sage/rings/number_field/number_field.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -918,10 +918,10 @@ def QuadraticField(D, name='a', check=True, embedding=True, latex_name='sqrt', *
918918
919919
::
920920
921-
sage: from sage.rings.number_field.number_field import is_NumberField
921+
sage: from sage.rings.number_field.number_field_base import NumberField
922922
sage: type(K)
923923
<class 'sage.rings.number_field.number_field.NumberField_quadratic_with_category'>
924-
sage: is_NumberField(K)
924+
sage: isinstance(K, NumberField)
925925
True
926926
927927
Quadratic number fields are cached::
@@ -8308,7 +8308,7 @@ def _coerce_map_from_(self, R):
83088308
if is_NumberFieldOrder(R) and self.has_coerce_map_from(R.number_field()):
83098309
return self._generic_coerce_map(R)
83108310
# R is not QQ by the above tests
8311-
if is_NumberField(R) and R.coerce_embedding() is not None:
8311+
if isinstance(R, number_field_base.NumberField) and R.coerce_embedding() is not None:
83128312
if self.coerce_embedding() is not None:
83138313
try:
83148314
return number_field_morphisms.EmbeddedNumberFieldMorphism(R, self)

src/sage/rings/number_field/number_field_base.pyx

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,29 +11,41 @@ TESTS::
1111

1212
def is_NumberField(x):
1313
"""
14-
Return True if x is of number field type.
14+
Return True if ``x`` is of number field type.
15+
16+
This function is deprecated.
1517
1618
EXAMPLES::
1719
1820
sage: from sage.rings.number_field.number_field_base import is_NumberField
19-
sage: is_NumberField(NumberField(x^2+1,'a'))
21+
sage: is_NumberField(NumberField(x^2 + 1, 'a'))
22+
doctest:...: DeprecationWarning: the function is_NumberField is deprecated; use
23+
isinstance(x, sage.rings.number_field.number_field_base.NumberField) instead
24+
See https://github.com/sagemath/sage/issues/35283 for details.
2025
True
21-
sage: is_NumberField(QuadraticField(-97,'theta'))
26+
sage: is_NumberField(QuadraticField(-97, 'theta'))
2227
True
2328
sage: is_NumberField(CyclotomicField(97))
2429
True
2530
26-
Note that the rational numbers QQ are a number field.::
31+
Note that the rational numbers ``QQ`` are a number field.::
2732
2833
sage: is_NumberField(QQ)
2934
True
3035
sage: is_NumberField(ZZ)
3136
False
3237
"""
38+
from sage.misc.superseded import deprecation
39+
deprecation(35283,
40+
"the function is_NumberField is deprecated; use "
41+
"isinstance(x, sage.rings.number_field.number_field_base.NumberField) instead")
42+
3343
return isinstance(x, NumberField)
3444

45+
3546
from sage.rings.ring cimport Field
3647

48+
3749
cdef class NumberField(Field):
3850
r"""
3951
Base class for all number fields.

src/sage/rings/number_field/number_field_element.pyx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1672,8 +1672,8 @@ cdef class NumberFieldElement(NumberFieldElement_base):
16721672
return self.is_norm(L, element=True, proof=proof)[0]
16731673

16741674
K = self.parent()
1675-
from sage.rings.number_field.number_field_base import is_NumberField
1676-
if not is_NumberField(L):
1675+
from sage.rings.number_field.number_field_base import NumberField
1676+
if not isinstance(L, NumberField):
16771677
raise ValueError("L (=%s) must be a NumberField in is_norm" % L)
16781678

16791679
from sage.rings.number_field.number_field import is_AbsoluteNumberField
@@ -3812,8 +3812,8 @@ cdef class NumberFieldElement(NumberFieldElement_base):
38123812
if base is self.parent():
38133813
return MatrixSpace(base,1)([self])
38143814
if base is not None and base is not self.base_ring():
3815-
from sage.rings.number_field.number_field_base import is_NumberField
3816-
if is_NumberField(base):
3815+
from sage.rings.number_field.number_field_base import NumberField
3816+
if isinstance(base, NumberField):
38173817
return self._matrix_over_base(base)
38183818
else:
38193819
return self._matrix_over_base_morphism(base)

src/sage/rings/number_field/number_field_rel.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@
9393
from .number_field import (NumberField, NumberField_generic,
9494
put_natural_embedding_first, proof_flag,
9595
is_NumberFieldHomsetCodomain)
96-
from sage.rings.number_field.number_field_base import is_NumberField
96+
from sage.rings.number_field.number_field_base import NumberField as NumberField_base
9797
from sage.rings.number_field.order import (RelativeOrder, is_NumberFieldOrder,
9898
relative_order_from_ring_generators)
9999
from sage.rings.number_field.morphism import RelativeNumberFieldHomomorphism_from_abs
@@ -277,7 +277,7 @@ def __init__(self, base, polynomial, name,
277277
raise NotImplementedError("Embeddings not implemented for relative number fields")
278278
if names is not None:
279279
name = names
280-
if not is_NumberField(base):
280+
if not isinstance(base, NumberField_base):
281281
raise TypeError("base (=%s) must be a number field"%base)
282282
if not isinstance(polynomial, polynomial_element.Polynomial):
283283
try:

0 commit comments

Comments
 (0)