From 5430085b8a8a8be5dead88bb74d7388777ea6849 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Fri, 31 May 2024 20:14:37 -0700 Subject: [PATCH 1/7] src/sage/dynamics/arithmetic_dynamics/projective_ds.py: Replace use of is_NumberFieldOrder --- src/sage/dynamics/arithmetic_dynamics/projective_ds.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/sage/dynamics/arithmetic_dynamics/projective_ds.py b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py index 9bd6aa91a48..90001c4ac9c 100644 --- a/src/sage/dynamics/arithmetic_dynamics/projective_ds.py +++ b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py @@ -5893,8 +5893,7 @@ def sigma_invariants(self, n, formal=False, embedding=None, type='point', base_ring = base_ring.base_ring() elif base_ring in FunctionFields(): base_ring = base_ring.constant_base_field() - from sage.rings.number_field.order import is_NumberFieldOrder - if not (base_ring in NumberFields() or is_NumberFieldOrder(base_ring) + if not (base_ring in NumberFields() or base_ring == ZZ or isinstance(base_ring, sage.rings.abc.Order) or (base_ring in FiniteFields())): raise NotImplementedError("incompatible base field, see documentation") From b0041f049ee4ae1209c0c5958b0c5d2b69485427 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Fri, 31 May 2024 20:27:10 -0700 Subject: [PATCH 2/7] sage.rings.number_field: Deprecate is_NumberFieldOrder --- src/sage/rings/number_field/number_field.py | 7 +++---- src/sage/rings/number_field/number_field_element.pyx | 7 +++---- src/sage/rings/number_field/number_field_rel.py | 7 ++++--- src/sage/rings/number_field/order.py | 12 ++++++++++-- 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/sage/rings/number_field/number_field.py b/src/sage/rings/number_field/number_field.py index 1413b1ea057..a70e1aac930 100644 --- a/src/sage/rings/number_field/number_field.py +++ b/src/sage/rings/number_field/number_field.py @@ -81,7 +81,7 @@ import sage.libs.ntl.all as ntl - +import sage.rings.abc import sage.rings.complex_mpfr from sage.rings.polynomial.polynomial_element import Polynomial import sage.rings.real_mpfr @@ -8444,10 +8444,9 @@ def _coerce_map_from_(self, R): """ if R is int: return self._generic_coerce_map(R) - elif R in (ZZ, QQ, self.base()): + if R in (ZZ, QQ, self.base()): return self._generic_coerce_map(R) - from sage.rings.number_field.order import is_NumberFieldOrder - if is_NumberFieldOrder(R) and self.has_coerce_map_from(R.number_field()): + if isinstance(R, sage.rings.abc.Order) and self.has_coerce_map_from(R.number_field()): return self._generic_coerce_map(R) # R is not QQ by the above tests if isinstance(R, number_field_base.NumberField) and R.coerce_embedding() is not None: diff --git a/src/sage/rings/number_field/number_field_element.pyx b/src/sage/rings/number_field/number_field_element.pyx index 844a4ec3162..da1fbd358b1 100644 --- a/src/sage/rings/number_field/number_field_element.pyx +++ b/src/sage/rings/number_field/number_field_element.pyx @@ -50,6 +50,7 @@ from sage.libs.gmp.pylong cimport mpz_pythonhash from cpython.object cimport Py_EQ, Py_NE, Py_LT, Py_GT, Py_LE, Py_GE from sage.structure.richcmp cimport rich_to_bool +import sage.rings.abc import sage.rings.polynomial.polynomial_element from sage.rings.polynomial.evaluation_ntl cimport ZZX_evaluation_mpfi import sage.rings.rational_field @@ -1988,8 +1989,7 @@ cdef class NumberFieldElement(NumberFieldElement_base): raise ArithmeticError("factorization of 0 is not defined") K = self.parent() - from sage.rings.number_field.order import is_NumberFieldOrder - if is_NumberFieldOrder(K): + if isinstance(K, sage.rings.abc.Order): K = K.number_field() fac = K.ideal(self).factor() # Check whether all prime ideals in `fac` are principal @@ -2088,8 +2088,7 @@ cdef class NumberFieldElement(NumberFieldElement_base): if R.is_field(): return R.one() - from sage.rings.number_field.order import is_NumberFieldOrder - if not is_NumberFieldOrder(R): + if not isinstance(R, sage.rings.abc.Order): raise NotImplementedError("gcd() for %r is not implemented" % R) K = R.number_field() diff --git a/src/sage/rings/number_field/number_field_rel.py b/src/sage/rings/number_field/number_field_rel.py index 0fdc3a8e89c..30ef0b7b33e 100644 --- a/src/sage/rings/number_field/number_field_rel.py +++ b/src/sage/rings/number_field/number_field_rel.py @@ -80,6 +80,7 @@ from sage.categories.map import is_Map from sage.structure.sequence import Sequence +import sage.rings.abc import sage.structure.parent_gens from . import maps @@ -98,7 +99,7 @@ put_natural_embedding_first, proof_flag, is_NumberFieldHomsetCodomain) from sage.rings.number_field.number_field_base import NumberField as NumberField_base -from sage.rings.number_field.order import (RelativeOrder, is_NumberFieldOrder, +from sage.rings.number_field.order import (RelativeOrder, relative_order_from_ring_generators) from sage.rings.number_field.morphism import RelativeNumberFieldHomomorphism_from_abs from sage.libs.pari.all import pari_gen @@ -1013,9 +1014,9 @@ def _coerce_map_from_(self, R): """ if R is int: return self._generic_coerce_map(R) - elif R in (ZZ, QQ, self.base_field()): + if R in (ZZ, QQ, self.base_field()): return self._generic_coerce_map(R) - if is_NumberFieldOrder(R) and R.number_field() is self: + if isinstance(R, sage.rings.abc.Order) and R.number_field() is self: return self._generic_coerce_map(R) mor = self.base_field()._internal_coerce_map_from(R) if mor is not None: diff --git a/src/sage/rings/number_field/order.py b/src/sage/rings/number_field/order.py index 94d0732704d..f5d51d955cf 100644 --- a/src/sage/rings/number_field/order.py +++ b/src/sage/rings/number_field/order.py @@ -362,7 +362,11 @@ def is_NumberFieldOrder(R): sage: from sage.rings.number_field.order import is_NumberFieldOrder sage: x = polygen(ZZ, 'x') - sage: is_NumberFieldOrder(NumberField(x^2 + 1,'a').maximal_order()) + sage: is_NumberFieldOrder(NumberField(x^2 + 1, 'a').maximal_order()) + doctest:warning... + DeprecationWarning: The function is_NumberFieldOrder is deprecated; + use 'isinstance(..., sage.rings.abc.Order) or ... == ZZ' instead. + See https://github.com/sagemath/sage/issues/38124 for details. True sage: is_NumberFieldOrder(ZZ) True @@ -371,6 +375,10 @@ def is_NumberFieldOrder(R): sage: is_NumberFieldOrder(45) False """ + from sage.misc.superseded import deprecation + deprecation(38124, + "The function is_NumberFieldOrder is deprecated; " + "use 'isinstance(..., sage.rings.abc.Order) or ... == ZZ' instead.") return isinstance(R, Order) or R == ZZ @@ -2842,7 +2850,7 @@ def absolute_order_from_module_generators(gens, raise ValueError("each generator must be integral") K = gens.universe() - if is_NumberFieldOrder(K): + if isinstance(K, Order) or K == ZZ: K = K.number_field() V, from_V, to_V = K.vector_space() mod_gens = [to_V(x) for x in gens] From af6769fbd2b953e62beb1ddb95510dc7f2090842 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Fri, 31 May 2024 20:27:42 -0700 Subject: [PATCH 3/7] sage.rings, sage.schemes: Replace use of is_NumberFieldOrder --- src/sage/rings/polynomial/multi_polynomial_libsingular.pyx | 7 +++---- src/sage/schemes/projective/projective_point.py | 4 ++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx b/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx index d1f17f7f899..20dad3d7fb3 100644 --- a/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx +++ b/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx @@ -229,7 +229,6 @@ from sage.rings.integer_ring import is_IntegerRing, ZZ from sage.rings.integer cimport Integer from sage.rings.number_field.number_field_base cimport NumberField -from sage.rings.number_field.order import is_NumberFieldOrder from sage.categories.number_fields import NumberFields from sage.structure.element import coerce_binop @@ -5613,7 +5612,7 @@ cdef class MPolynomial_libsingular(MPolynomial_libsingular_base): return RealField(prec).zero() K = self.base_ring() - if K in NumberFields() or is_NumberFieldOrder(K): + if K in NumberFields() or isinstance(K, sage.rings.abc.Order) or K == ZZ: f = self else: raise TypeError("Must be over a Numberfield or a Numberfield Order.") @@ -5665,7 +5664,7 @@ cdef class MPolynomial_libsingular(MPolynomial_libsingular_base): prec = 53 K = FractionField(self.base_ring()) - if K not in NumberFields() or is_NumberFieldOrder(K): + if K not in NumberFields() and not isinstance(K, sage.rings.abc.Order) and K != ZZ: raise TypeError("must be over a Numberfield or a Numberfield order") return max([K(c).local_height(v, prec=prec) for c in self.coefficients()]) @@ -5709,7 +5708,7 @@ cdef class MPolynomial_libsingular(MPolynomial_libsingular_base): 1.0 """ K = FractionField(self.base_ring()) - if K not in NumberFields() or is_NumberFieldOrder(K): + if K not in NumberFields() and not isinstance(K, sage.rings.abc.Order) and K != ZZ: return TypeError("must be over a Numberfield or a Numberfield Order") if K == QQ: diff --git a/src/sage/schemes/projective/projective_point.py b/src/sage/schemes/projective/projective_point.py index 6aebc66a5e6..5cf1dde42cc 100644 --- a/src/sage/schemes/projective/projective_point.py +++ b/src/sage/schemes/projective/projective_point.py @@ -31,7 +31,7 @@ _NumberFields = NumberFields() from sage.rings.integer_ring import ZZ from sage.rings.fraction_field import FractionField -from sage.rings.number_field.order import is_NumberFieldOrder, Order as NumberFieldOrder +from sage.rings.number_field.order import Order as NumberFieldOrder from sage.rings.qqbar import number_field_elements_from_algebraics from sage.rings.quotient_ring import QuotientRing_generic from sage.rings.rational_field import QQ @@ -749,7 +749,7 @@ def global_height(self, prec=None): if prec is None: prec = 53 K = self.codomain().base_ring() - if K in _NumberFields or is_NumberFieldOrder(K): + if K in _NumberFields or isinstance(K, NumberFieldOrder) or K == ZZ: P = self else: try: From 3db25a119b14bb63c5caa3f5e093cc661645fc86 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Fri, 31 May 2024 20:33:48 -0700 Subject: [PATCH 4/7] Deprecate is_NumberFieldIdeal, is_NumberFieldFractionalIdeal, is_NumberFieldFractionalIdeal_rel --- src/sage/rings/finite_rings/residue_field.pyx | 6 +++--- src/sage/rings/number_field/number_field.py | 11 +++++------ .../rings/number_field/number_field_element.pyx | 4 ++-- .../rings/number_field/number_field_ideal.py | 16 ++++++++++++++++ .../rings/number_field/number_field_ideal_rel.py | 10 ++++++++-- src/sage/rings/number_field/number_field_rel.py | 4 ++-- .../schemes/elliptic_curves/ell_local_data.py | 4 ++-- 7 files changed, 38 insertions(+), 17 deletions(-) diff --git a/src/sage/rings/finite_rings/residue_field.pyx b/src/sage/rings/finite_rings/residue_field.pyx index 83d78abb2aa..e4e617a33eb 100644 --- a/src/sage/rings/finite_rings/residue_field.pyx +++ b/src/sage/rings/finite_rings/residue_field.pyx @@ -184,7 +184,7 @@ from sage.rings.finite_rings.finite_field_constructor import zech_log_bound, Fin from sage.rings.finite_rings.finite_field_prime_modn import FiniteField_prime_modn from sage.rings.ideal import is_Ideal from sage.rings.number_field.number_field_element_base import NumberFieldElement_base -from sage.rings.number_field.number_field_ideal import is_NumberFieldIdeal +from sage.rings.number_field.number_field_ideal import NumberFieldIdeal from sage.rings.fraction_field import is_FractionField @@ -345,7 +345,7 @@ class ResidueFieldFactory(UniqueFactory): if not p.ring().base_ring().is_prime_field(): # neither of these will work over non-prime fields quite yet. We should use relative finite field extensions. raise NotImplementedError - elif not (is_NumberFieldIdeal(p) or p.ring() is ZZ): + elif not (isinstance(p, NumberFieldIdeal) or p.ring() is ZZ): raise NotImplementedError if isinstance(names, tuple): if names: @@ -411,7 +411,7 @@ class ResidueFieldFactory(UniqueFactory): raise ValueError("unrecognized finite field type") # Should generalize to allowing residue fields of relative extensions to be extensions of finite fields. - if is_NumberFieldIdeal(p): + if isinstance(p, NumberFieldIdeal): characteristic = p.smallest_integer() else: # ideal of a function field characteristic = pring.base_ring().characteristic() diff --git a/src/sage/rings/number_field/number_field.py b/src/sage/rings/number_field/number_field.py index a70e1aac930..27f2b3e87a0 100644 --- a/src/sage/rings/number_field/number_field.py +++ b/src/sage/rings/number_field/number_field.py @@ -212,7 +212,7 @@ def proof_flag(t): from sage.structure.factory import UniqueFactory from . import number_field_element from . import number_field_element_quadratic -from .number_field_ideal import is_NumberFieldIdeal, NumberFieldFractionalIdeal +from .number_field_ideal import NumberFieldIdeal, NumberFieldFractionalIdeal from sage.libs.pari.all import pari, pari_gen from sage.rings.rational_field import QQ @@ -6953,8 +6953,7 @@ def residue_field(self, prime, names=None, check=True): ... ValueError: Fractional ideal (5) is not a prime ideal """ - from sage.rings.number_field.number_field_ideal import is_NumberFieldIdeal - if is_NumberFieldIdeal(prime) and prime.number_field() is not self: + if isinstance(prime, NumberFieldIdeal) and prime.number_field() is not self: raise ValueError("%s is not an ideal of %s" % (prime, self)) # This allows principal ideals to be specified using a generator: try: @@ -6962,7 +6961,7 @@ def residue_field(self, prime, names=None, check=True): except TypeError: pass - if not is_NumberFieldIdeal(prime) or prime.number_field() is not self: + if not isinstance(prime, NumberFieldIdeal) or prime.number_field() is not self: raise ValueError("%s is not an ideal of %s" % (prime, self)) if check and not prime.is_prime(): raise ValueError("%s is not a prime ideal" % prime) @@ -7088,7 +7087,7 @@ def uniformizer(self, P, others="positive"): sage: x in (t^2 + 3*t +1, t^2 - 4*t +1) True """ - if not is_NumberFieldIdeal(P): + if not isinstance(P, NumberFieldIdeal): P = self.ideal(P) P = P.pari_prime() if others == "positive": @@ -10347,7 +10346,7 @@ def hilbert_symbol(self, a, b, P=None): if P(a) > 0 or P(b) > 0: return 1 return -1 - if not is_NumberFieldIdeal(P): + if not isinstance(P, NumberFieldIdeal): P = self.ideal(P) if P.number_field() is not self: raise ValueError("P (=%s) should be an ideal of self (=%s) in hilbert_symbol, not of %s" % (P, self, P.number_field())) diff --git a/src/sage/rings/number_field/number_field_element.pyx b/src/sage/rings/number_field/number_field_element.pyx index da1fbd358b1..e3e51d16e65 100644 --- a/src/sage/rings/number_field/number_field_element.pyx +++ b/src/sage/rings/number_field/number_field_element.pyx @@ -3913,8 +3913,8 @@ cdef class NumberFieldElement(NumberFieldElement_base): ... ValueError: P must be prime """ - from sage.rings.number_field.number_field_ideal import is_NumberFieldIdeal - if not is_NumberFieldIdeal(P): + from sage.rings.number_field.number_field_ideal import NumberFieldIdeal + if not isinstance(P, NumberFieldIdeal): if isinstance(P, NumberFieldElement): P = self.number_field().fractional_ideal(P) else: diff --git a/src/sage/rings/number_field/number_field_ideal.py b/src/sage/rings/number_field/number_field_ideal.py index 1be7a76f46f..40aa829c286 100644 --- a/src/sage/rings/number_field/number_field_ideal.py +++ b/src/sage/rings/number_field/number_field_ideal.py @@ -1789,6 +1789,10 @@ def is_NumberFieldIdeal(x): sage: from sage.rings.number_field.number_field_ideal import is_NumberFieldIdeal sage: is_NumberFieldIdeal(2/3) + doctest:warning... + DeprecationWarning: The function is_NumberFieldIdeal is deprecated; + use 'isinstance(..., NumberFieldIdeal)' instead. + See https://github.com/sagemath/sage/issues/38124 for details. False sage: is_NumberFieldIdeal(ideal(5)) False @@ -1804,6 +1808,10 @@ def is_NumberFieldIdeal(x): sage: is_NumberFieldIdeal(Z) True """ + from sage.misc.superseded import deprecation + deprecation(38124, + "The function is_NumberFieldIdeal is deprecated; " + "use 'isinstance(..., NumberFieldIdeal)' instead.") return isinstance(x, NumberFieldIdeal) @@ -3316,6 +3324,10 @@ def is_NumberFieldFractionalIdeal(x): sage: from sage.rings.number_field.number_field_ideal import is_NumberFieldFractionalIdeal sage: is_NumberFieldFractionalIdeal(2/3) + doctest:warning... + DeprecationWarning: The function is_NumberFieldFractionalIdeal is deprecated; + use 'isinstance(..., NumberFieldFractionalIdeal)' instead. + See https://github.com/sagemath/sage/issues/38124 for details. False sage: is_NumberFieldFractionalIdeal(ideal(5)) False @@ -3330,6 +3342,10 @@ def is_NumberFieldFractionalIdeal(x): sage: is_NumberFieldFractionalIdeal(Z) False """ + from sage.misc.superseded import deprecation + deprecation(38124, + "The function is_NumberFieldFractionalIdeal is deprecated; " + "use 'isinstance(..., NumberFieldFractionalIdeal)' instead.") return isinstance(x, NumberFieldFractionalIdeal) diff --git a/src/sage/rings/number_field/number_field_ideal_rel.py b/src/sage/rings/number_field/number_field_ideal_rel.py index 7c0e4daa7a2..bb74b64a8e6 100644 --- a/src/sage/rings/number_field/number_field_ideal_rel.py +++ b/src/sage/rings/number_field/number_field_ideal_rel.py @@ -891,6 +891,10 @@ def is_NumberFieldFractionalIdeal_rel(x): sage: from sage.rings.number_field.number_field_ideal_rel import is_NumberFieldFractionalIdeal_rel sage: from sage.rings.number_field.number_field_ideal import is_NumberFieldFractionalIdeal sage: is_NumberFieldFractionalIdeal_rel(2/3) + doctest:warning... + DeprecationWarning: The function is_NumberFieldFractionalIdeal_rel is deprecated; + use 'isinstance(..., NumberFieldFractionalIdeal_rel' instead. + See https://github.com/sagemath/sage/issues/38124 for details. False sage: is_NumberFieldFractionalIdeal_rel(ideal(5)) False @@ -911,7 +915,9 @@ def is_NumberFieldFractionalIdeal_rel(x): Fractional ideal (-a) sage: is_NumberFieldFractionalIdeal_rel(N) False - sage: is_NumberFieldFractionalIdeal(N) - True """ + from sage.misc.superseded import deprecation + deprecation(38124, + "The function is_NumberFieldFractionalIdeal_rel is deprecated; " + "use 'isinstance(..., NumberFieldFractionalIdeal_rel' instead.") return isinstance(x, NumberFieldFractionalIdeal_rel) diff --git a/src/sage/rings/number_field/number_field_rel.py b/src/sage/rings/number_field/number_field_rel.py index 30ef0b7b33e..18a1e855e59 100644 --- a/src/sage/rings/number_field/number_field_rel.py +++ b/src/sage/rings/number_field/number_field_rel.py @@ -94,7 +94,7 @@ from . import number_field_element import sage.rings.number_field.number_field_ideal_rel -from .number_field_ideal import is_NumberFieldIdeal +from .number_field_ideal import NumberFieldIdeal from .number_field import (NumberField, NumberField_generic, put_natural_embedding_first, proof_flag, is_NumberFieldHomsetCodomain) @@ -2723,7 +2723,7 @@ def uniformizer(self, P, others="positive"): sage: (P, 1) in K.factor(u) True """ - if not is_NumberFieldIdeal(P): + if not isinstance(P, NumberFieldIdeal): P = self.ideal(P) if not P.is_maximal(): raise ValueError("P (=%s) must be a nonzero prime." % P) diff --git a/src/sage/schemes/elliptic_curves/ell_local_data.py b/src/sage/schemes/elliptic_curves/ell_local_data.py index 8192b8ce84c..02a85d0e459 100644 --- a/src/sage/schemes/elliptic_curves/ell_local_data.py +++ b/src/sage/schemes/elliptic_curves/ell_local_data.py @@ -100,7 +100,7 @@ from sage.rings.rational_field import QQ from sage.rings.integer_ring import ZZ from sage.rings.integer import Integer -from sage.rings.number_field.number_field_ideal import is_NumberFieldFractionalIdeal +from sage.rings.number_field.number_field_ideal import NumberFieldFractionalIdeal from sage.rings.number_field.number_field_base import NumberField from sage.rings.ideal import is_Ideal @@ -1197,7 +1197,7 @@ def check_prime(K, P): if not isinstance(K, NumberField): raise TypeError("%s is not a number field" % (K,)) - if is_NumberFieldFractionalIdeal(P) or P in K: + if isinstance(P, NumberFieldFractionalIdeal) or P in K: # if P is an ideal, making sure it is a fractional ideal of K P = K.fractional_ideal(P) if P.is_prime(): From 1429056bae3fadc3dd19a4a04ff08a1d30a0eb1b Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Fri, 31 May 2024 20:52:27 -0700 Subject: [PATCH 5/7] Deprecate is_RelativeNumberField --- src/sage/rings/number_field/number_field_element.pyx | 4 ++-- src/sage/rings/number_field/number_field_rel.py | 10 +++++++++- .../polynomial/polynomial_quotient_ring_element.py | 4 ++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/sage/rings/number_field/number_field_element.pyx b/src/sage/rings/number_field/number_field_element.pyx index e3e51d16e65..5a676b289fc 100644 --- a/src/sage/rings/number_field/number_field_element.pyx +++ b/src/sage/rings/number_field/number_field_element.pyx @@ -1804,8 +1804,8 @@ cdef class NumberFieldElement(NumberFieldElement_base): - Francis Clarke (2010-12-26) """ K = self.parent() - from sage.rings.number_field.number_field_rel import is_RelativeNumberField - if (not is_RelativeNumberField(L)) or L.base_field() != K: + from sage.rings.number_field.number_field_rel import NumberField_relative + if not isinstance(L, NumberField_relative) or L.base_field() != K: raise ValueError("L (=%s) must be a relative number field with base field K (=%s) in rnfisnorm" % (L, K)) rnf_data = K.pari_rnfnorm_data(L, proof=proof) diff --git a/src/sage/rings/number_field/number_field_rel.py b/src/sage/rings/number_field/number_field_rel.py index 18a1e855e59..2afbf53a29d 100644 --- a/src/sage/rings/number_field/number_field_rel.py +++ b/src/sage/rings/number_field/number_field_rel.py @@ -123,6 +123,10 @@ def is_RelativeNumberField(x): sage: from sage.rings.number_field.number_field_rel import is_RelativeNumberField sage: x = polygen(ZZ, 'x') sage: is_RelativeNumberField(NumberField(x^2+1,'a')) + doctest:warning... + DeprecationWarning: The function is_RelativeNumberField is deprecated; + use 'isinstance(..., NumberField_relative)' instead. + See https://github.com/sagemath/sage/issues/38124 for details. False sage: k. = NumberField(x^3 - 2) sage: l. = k.extension(x^3 - 3); l @@ -132,6 +136,10 @@ def is_RelativeNumberField(x): sage: is_RelativeNumberField(QQ) False """ + from sage.misc.superseded import deprecation + deprecation(38124, + "The function is_RelativeNumberField is deprecated; " + "use 'isinstance(..., NumberField_relative)' instead.") return isinstance(x, NumberField_relative) @@ -1311,7 +1319,7 @@ def is_isomorphic_relative(self, other, base_isom=None): Ring endomorphism of Number Field in z9 with defining polynomial x^6 + x^3 + 1 Defn: z9 |--> z9^4 """ - if is_RelativeNumberField(other): + if isinstance(other, NumberField_relative): s_base_field = self.base_field() o_base_field = other.base_field() if base_isom is None: diff --git a/src/sage/rings/polynomial/polynomial_quotient_ring_element.py b/src/sage/rings/polynomial/polynomial_quotient_ring_element.py index b1414f7e715..e2d582ab777 100644 --- a/src/sage/rings/polynomial/polynomial_quotient_ring_element.py +++ b/src/sage/rings/polynomial/polynomial_quotient_ring_element.py @@ -565,8 +565,8 @@ def field_extension(self, names): f = R.hom([alpha], F, check=False) - import sage.rings.number_field.number_field_rel as number_field_rel - if number_field_rel.is_RelativeNumberField(F): + from sage.rings.number_field.number_field_rel import NumberField_relative + if isinstance(F, NumberField_relative): base_map = F.base_field().hom([R.base_ring().gen()]) g = F.Hom(R)(x, base_map) From 6ea3748a12f38e2c609f157c773e1a63980f0d33 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Fri, 31 May 2024 20:56:03 -0700 Subject: [PATCH 6/7] Deprecate is_AbsoluteNumberField --- src/sage/rings/number_field/number_field.py | 7 +++++++ src/sage/rings/number_field/number_field_element.pyx | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/sage/rings/number_field/number_field.py b/src/sage/rings/number_field/number_field.py index 27f2b3e87a0..a89caa7ebc2 100644 --- a/src/sage/rings/number_field/number_field.py +++ b/src/sage/rings/number_field/number_field.py @@ -1018,6 +1018,9 @@ def is_AbsoluteNumberField(x): sage: from sage.rings.number_field.number_field import is_AbsoluteNumberField sage: x = polygen(ZZ, 'x') sage: is_AbsoluteNumberField(NumberField(x^2 + 1, 'a')) + doctest:warning... + DeprecationWarning: The function is_AbsoluteNumberField is deprecated; use 'isinstance(..., NumberField_absolute)' instead. + See https://github.com/sagemath/sage/issues/38124 for details. True sage: is_AbsoluteNumberField(NumberField([x^3 + 17, x^2 + 1], 'a')) False @@ -1030,6 +1033,10 @@ def is_AbsoluteNumberField(x): sage: is_AbsoluteNumberField(QQ) False """ + from sage.misc.superseded import deprecation + deprecation(38124, + "The function is_AbsoluteNumberField is deprecated; " + "use 'isinstance(..., NumberField_absolute)' instead.") return isinstance(x, NumberField_absolute) diff --git a/src/sage/rings/number_field/number_field_element.pyx b/src/sage/rings/number_field/number_field_element.pyx index 5a676b289fc..1b682403909 100644 --- a/src/sage/rings/number_field/number_field_element.pyx +++ b/src/sage/rings/number_field/number_field_element.pyx @@ -1664,8 +1664,8 @@ cdef class NumberFieldElement(NumberFieldElement_base): if not isinstance(L, NumberField): raise ValueError("L (=%s) must be a NumberField in is_norm" % L) - from sage.rings.number_field.number_field import is_AbsoluteNumberField - if is_AbsoluteNumberField(L): + from sage.rings.number_field.number_field import NumberField_absolute + if isinstance(L, NumberField_absolute): Lrel = L.relativize(K.hom(L), L.variable_name() + '0') b, x = self.is_norm(Lrel, element=True, proof=proof) h = Lrel.structure()[0] From f342d5f2c0a599f940a8cb312d07f306d1d156e6 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Fri, 31 May 2024 20:58:45 -0700 Subject: [PATCH 7/7] src/sage/rings/polynomial/polynomial_element.pyx: Remove unused import --- src/sage/rings/polynomial/polynomial_element.pyx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/sage/rings/polynomial/polynomial_element.pyx b/src/sage/rings/polynomial/polynomial_element.pyx index 4893670b5a7..76cc77d61de 100644 --- a/src/sage/rings/polynomial/polynomial_element.pyx +++ b/src/sage/rings/polynomial/polynomial_element.pyx @@ -5841,8 +5841,6 @@ cdef class Polynomial(CommutativePolynomial): if self.degree() <= 1: return R.fraction_field() - from sage.rings.number_field.number_field import is_NumberField, NumberField - if is_IntegerRing(R): from sage.rings.number_field.number_field import NumberField return NumberField(self, names)