Skip to content

Commit 7b61cda

Browse files
author
Release Manager
committed
gh-38124: Deprecate `is_NumberFieldOrder`, `is_AbsoluteNumberField`, `is_RelativeNumberField`, `is_NumberFieldIdeal`, `is_NumberFieldFractionalIdeal`, `is_NumberFieldFractionalIdeal_rel` <!-- ^ Please provide a concise and informative title. --> <!-- ^ Don't put issue numbers in the title, do this in the PR description below. --> <!-- ^ For example, instead of "Fixes #12345" use "Introduce new method to calculate 1 + 2". --> <!-- v Describe your changes below in detail. --> <!-- v Why is this change required? What problem does it solve? --> <!-- v If this PR resolves an open issue, please link to it here. For example, "Fixes #12345". --> ### 📝 Checklist <!-- Put an `x` in all the boxes that apply. --> - [x] The title is concise and informative. - [ ] The description explains in detail what this PR is about. - [ ] I have linked a relevant issue or discussion. - [ ] I have created tests covering the changes. - [ ] I have updated the documentation and checked the documentation preview. ### ⌛ Dependencies <!-- List all open PRs that this PR logically depends on. For example, --> <!-- - #12345: short description why this is a dependency --> <!-- - #34567: ... --> URL: #38124 Reported by: Matthias Köppe Reviewer(s): Kwankyu Lee, Matthias Köppe
2 parents 1f7efa0 + 8f764a6 commit 7b61cda

File tree

13 files changed

+86
-47
lines changed

13 files changed

+86
-47
lines changed

src/sage/dynamics/arithmetic_dynamics/projective_ds.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5893,8 +5893,7 @@ def sigma_invariants(self, n, formal=False, embedding=None, type='point',
58935893
base_ring = base_ring.base_ring()
58945894
elif base_ring in FunctionFields():
58955895
base_ring = base_ring.constant_base_field()
5896-
from sage.rings.number_field.order import is_NumberFieldOrder
5897-
if not (base_ring in NumberFields() or is_NumberFieldOrder(base_ring)
5896+
if not (base_ring in NumberFields() or base_ring == ZZ or isinstance(base_ring, sage.rings.abc.Order)
58985897
or (base_ring in FiniteFields())):
58995898
raise NotImplementedError("incompatible base field, see documentation")
59005899

src/sage/rings/finite_rings/residue_field.pyx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ from sage.rings.finite_rings.finite_field_constructor import zech_log_bound, Fin
184184
from sage.rings.finite_rings.finite_field_prime_modn import FiniteField_prime_modn
185185
from sage.rings.ideal import is_Ideal
186186
from sage.rings.number_field.number_field_element_base import NumberFieldElement_base
187-
from sage.rings.number_field.number_field_ideal import is_NumberFieldIdeal
187+
from sage.rings.number_field.number_field_ideal import NumberFieldIdeal
188188

189189
from sage.rings.fraction_field import is_FractionField
190190

@@ -345,7 +345,7 @@ class ResidueFieldFactory(UniqueFactory):
345345
if not p.ring().base_ring().is_prime_field():
346346
# neither of these will work over non-prime fields quite yet. We should use relative finite field extensions.
347347
raise NotImplementedError
348-
elif not (is_NumberFieldIdeal(p) or p.ring() is ZZ):
348+
elif not (isinstance(p, NumberFieldIdeal) or p.ring() is ZZ):
349349
raise NotImplementedError
350350
if isinstance(names, tuple):
351351
if names:
@@ -411,7 +411,7 @@ class ResidueFieldFactory(UniqueFactory):
411411
raise ValueError("unrecognized finite field type")
412412

413413
# Should generalize to allowing residue fields of relative extensions to be extensions of finite fields.
414-
if is_NumberFieldIdeal(p):
414+
if isinstance(p, NumberFieldIdeal):
415415
characteristic = p.smallest_integer()
416416
else: # ideal of a function field
417417
characteristic = pring.base_ring().characteristic()

src/sage/rings/number_field/number_field.py

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181

8282

8383
import sage.libs.ntl.all as ntl
84-
84+
import sage.rings.abc
8585
import sage.rings.complex_mpfr
8686
from sage.rings.polynomial.polynomial_element import Polynomial
8787
import sage.rings.real_mpfr
@@ -212,7 +212,7 @@ def proof_flag(t):
212212
from sage.structure.factory import UniqueFactory
213213
from . import number_field_element
214214
from . import number_field_element_quadratic
215-
from .number_field_ideal import is_NumberFieldIdeal, NumberFieldFractionalIdeal
215+
from .number_field_ideal import NumberFieldIdeal, NumberFieldFractionalIdeal
216216
from sage.libs.pari.all import pari, pari_gen
217217

218218
from sage.rings.rational_field import QQ
@@ -1018,6 +1018,9 @@ def is_AbsoluteNumberField(x):
10181018
sage: from sage.rings.number_field.number_field import is_AbsoluteNumberField
10191019
sage: x = polygen(ZZ, 'x')
10201020
sage: is_AbsoluteNumberField(NumberField(x^2 + 1, 'a'))
1021+
doctest:warning...
1022+
DeprecationWarning: The function is_AbsoluteNumberField is deprecated; use 'isinstance(..., NumberField_absolute)' instead.
1023+
See https://github.com/sagemath/sage/issues/38124 for details.
10211024
True
10221025
sage: is_AbsoluteNumberField(NumberField([x^3 + 17, x^2 + 1], 'a'))
10231026
False
@@ -1030,6 +1033,10 @@ def is_AbsoluteNumberField(x):
10301033
sage: is_AbsoluteNumberField(QQ)
10311034
False
10321035
"""
1036+
from sage.misc.superseded import deprecation
1037+
deprecation(38124,
1038+
"The function is_AbsoluteNumberField is deprecated; "
1039+
"use 'isinstance(..., NumberField_absolute)' instead.")
10331040
return isinstance(x, NumberField_absolute)
10341041

10351042

@@ -6953,16 +6960,15 @@ def residue_field(self, prime, names=None, check=True):
69536960
...
69546961
ValueError: Fractional ideal (5) is not a prime ideal
69556962
"""
6956-
from sage.rings.number_field.number_field_ideal import is_NumberFieldIdeal
6957-
if is_NumberFieldIdeal(prime) and prime.number_field() is not self:
6963+
if isinstance(prime, NumberFieldIdeal) and prime.number_field() is not self:
69586964
raise ValueError("%s is not an ideal of %s" % (prime, self))
69596965
# This allows principal ideals to be specified using a generator:
69606966
try:
69616967
prime = self.ideal(prime)
69626968
except TypeError:
69636969
pass
69646970

6965-
if not is_NumberFieldIdeal(prime) or prime.number_field() is not self:
6971+
if not isinstance(prime, NumberFieldIdeal) or prime.number_field() is not self:
69666972
raise ValueError("%s is not an ideal of %s" % (prime, self))
69676973
if check and not prime.is_prime():
69686974
raise ValueError("%s is not a prime ideal" % prime)
@@ -7088,7 +7094,7 @@ def uniformizer(self, P, others="positive"):
70887094
sage: x in (t^2 + 3*t +1, t^2 - 4*t +1)
70897095
True
70907096
"""
7091-
if not is_NumberFieldIdeal(P):
7097+
if not isinstance(P, NumberFieldIdeal):
70927098
P = self.ideal(P)
70937099
P = P.pari_prime()
70947100
if others == "positive":
@@ -8444,10 +8450,9 @@ def _coerce_map_from_(self, R):
84448450
"""
84458451
if R is int:
84468452
return self._generic_coerce_map(R)
8447-
elif R in (ZZ, QQ, self.base()):
8453+
if R in (ZZ, QQ, self.base()):
84488454
return self._generic_coerce_map(R)
8449-
from sage.rings.number_field.order import is_NumberFieldOrder
8450-
if is_NumberFieldOrder(R) and self.has_coerce_map_from(R.number_field()):
8455+
if isinstance(R, sage.rings.abc.Order) and self.has_coerce_map_from(R.number_field()):
84518456
return self._generic_coerce_map(R)
84528457
# R is not QQ by the above tests
84538458
if isinstance(R, number_field_base.NumberField) and R.coerce_embedding() is not None:
@@ -10348,7 +10353,7 @@ def hilbert_symbol(self, a, b, P=None):
1034810353
if P(a) > 0 or P(b) > 0:
1034910354
return 1
1035010355
return -1
10351-
if not is_NumberFieldIdeal(P):
10356+
if not isinstance(P, NumberFieldIdeal):
1035210357
P = self.ideal(P)
1035310358
if P.number_field() is not self:
1035410359
raise ValueError("P (=%s) should be an ideal of self (=%s) in hilbert_symbol, not of %s" % (P, self, P.number_field()))

src/sage/rings/number_field/number_field_element.pyx

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ from sage.libs.gmp.pylong cimport mpz_pythonhash
5050
from cpython.object cimport Py_EQ, Py_NE, Py_LT, Py_GT, Py_LE, Py_GE
5151
from sage.structure.richcmp cimport rich_to_bool
5252

53+
import sage.rings.abc
5354
import sage.rings.polynomial.polynomial_element
5455
from sage.rings.polynomial.evaluation_ntl cimport ZZX_evaluation_mpfi
5556
import sage.rings.rational_field
@@ -1663,8 +1664,8 @@ cdef class NumberFieldElement(NumberFieldElement_base):
16631664
if not isinstance(L, NumberField):
16641665
raise ValueError("L (=%s) must be a NumberField in is_norm" % L)
16651666

1666-
from sage.rings.number_field.number_field import is_AbsoluteNumberField
1667-
if is_AbsoluteNumberField(L):
1667+
from sage.rings.number_field.number_field import NumberField_absolute
1668+
if isinstance(L, NumberField_absolute):
16681669
Lrel = L.relativize(K.hom(L), L.variable_name() + '0')
16691670
b, x = self.is_norm(Lrel, element=True, proof=proof)
16701671
h = Lrel.structure()[0]
@@ -1803,8 +1804,8 @@ cdef class NumberFieldElement(NumberFieldElement_base):
18031804
- Francis Clarke (2010-12-26)
18041805
"""
18051806
K = self.parent()
1806-
from sage.rings.number_field.number_field_rel import is_RelativeNumberField
1807-
if (not is_RelativeNumberField(L)) or L.base_field() != K:
1807+
from sage.rings.number_field.number_field_rel import NumberField_relative
1808+
if not isinstance(L, NumberField_relative) or L.base_field() != K:
18081809
raise ValueError("L (=%s) must be a relative number field with base field K (=%s) in rnfisnorm" % (L, K))
18091810

18101811
rnf_data = K.pari_rnfnorm_data(L, proof=proof)
@@ -1988,8 +1989,7 @@ cdef class NumberFieldElement(NumberFieldElement_base):
19881989
raise ArithmeticError("factorization of 0 is not defined")
19891990

19901991
K = self.parent()
1991-
from sage.rings.number_field.order import is_NumberFieldOrder
1992-
if is_NumberFieldOrder(K):
1992+
if isinstance(K, sage.rings.abc.Order):
19931993
K = K.number_field()
19941994
fac = K.ideal(self).factor()
19951995
# Check whether all prime ideals in `fac` are principal
@@ -2088,8 +2088,7 @@ cdef class NumberFieldElement(NumberFieldElement_base):
20882088
if R.is_field():
20892089
return R.one()
20902090

2091-
from sage.rings.number_field.order import is_NumberFieldOrder
2092-
if not is_NumberFieldOrder(R):
2091+
if not isinstance(R, sage.rings.abc.Order):
20932092
raise NotImplementedError("gcd() for %r is not implemented" % R)
20942093

20952094
K = R.number_field()
@@ -3914,8 +3913,8 @@ cdef class NumberFieldElement(NumberFieldElement_base):
39143913
...
39153914
ValueError: P must be prime
39163915
"""
3917-
from sage.rings.number_field.number_field_ideal import is_NumberFieldIdeal
3918-
if not is_NumberFieldIdeal(P):
3916+
from sage.rings.number_field.number_field_ideal import NumberFieldIdeal
3917+
if not isinstance(P, NumberFieldIdeal):
39193918
if isinstance(P, NumberFieldElement):
39203919
P = self.number_field().fractional_ideal(P)
39213920
else:

src/sage/rings/number_field/number_field_ideal.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1789,6 +1789,10 @@ def is_NumberFieldIdeal(x):
17891789
17901790
sage: from sage.rings.number_field.number_field_ideal import is_NumberFieldIdeal
17911791
sage: is_NumberFieldIdeal(2/3)
1792+
doctest:warning...
1793+
DeprecationWarning: The function is_NumberFieldIdeal is deprecated;
1794+
use 'isinstance(..., NumberFieldIdeal)' instead.
1795+
See https://github.com/sagemath/sage/issues/38124 for details.
17921796
False
17931797
sage: is_NumberFieldIdeal(ideal(5))
17941798
False
@@ -1804,6 +1808,10 @@ def is_NumberFieldIdeal(x):
18041808
sage: is_NumberFieldIdeal(Z)
18051809
True
18061810
"""
1811+
from sage.misc.superseded import deprecation
1812+
deprecation(38124,
1813+
"The function is_NumberFieldIdeal is deprecated; "
1814+
"use 'isinstance(..., NumberFieldIdeal)' instead.")
18071815
return isinstance(x, NumberFieldIdeal)
18081816

18091817

@@ -3316,6 +3324,10 @@ def is_NumberFieldFractionalIdeal(x):
33163324
33173325
sage: from sage.rings.number_field.number_field_ideal import is_NumberFieldFractionalIdeal
33183326
sage: is_NumberFieldFractionalIdeal(2/3)
3327+
doctest:warning...
3328+
DeprecationWarning: The function is_NumberFieldFractionalIdeal is deprecated;
3329+
use 'isinstance(..., NumberFieldFractionalIdeal)' instead.
3330+
See https://github.com/sagemath/sage/issues/38124 for details.
33193331
False
33203332
sage: is_NumberFieldFractionalIdeal(ideal(5))
33213333
False
@@ -3330,6 +3342,10 @@ def is_NumberFieldFractionalIdeal(x):
33303342
sage: is_NumberFieldFractionalIdeal(Z)
33313343
False
33323344
"""
3345+
from sage.misc.superseded import deprecation
3346+
deprecation(38124,
3347+
"The function is_NumberFieldFractionalIdeal is deprecated; "
3348+
"use 'isinstance(..., NumberFieldFractionalIdeal)' instead.")
33333349
return isinstance(x, NumberFieldFractionalIdeal)
33343350

33353351

src/sage/rings/number_field/number_field_ideal_rel.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -891,6 +891,10 @@ def is_NumberFieldFractionalIdeal_rel(x):
891891
sage: from sage.rings.number_field.number_field_ideal_rel import is_NumberFieldFractionalIdeal_rel
892892
sage: from sage.rings.number_field.number_field_ideal import is_NumberFieldFractionalIdeal
893893
sage: is_NumberFieldFractionalIdeal_rel(2/3)
894+
doctest:warning...
895+
DeprecationWarning: The function is_NumberFieldFractionalIdeal_rel is deprecated;
896+
use 'isinstance(..., NumberFieldFractionalIdeal_rel' instead.
897+
See https://github.com/sagemath/sage/issues/38124 for details.
894898
False
895899
sage: is_NumberFieldFractionalIdeal_rel(ideal(5))
896900
False
@@ -911,7 +915,9 @@ def is_NumberFieldFractionalIdeal_rel(x):
911915
Fractional ideal (-a)
912916
sage: is_NumberFieldFractionalIdeal_rel(N)
913917
False
914-
sage: is_NumberFieldFractionalIdeal(N)
915-
True
916918
"""
919+
from sage.misc.superseded import deprecation
920+
deprecation(38124,
921+
"The function is_NumberFieldFractionalIdeal_rel is deprecated; "
922+
"use 'isinstance(..., NumberFieldFractionalIdeal_rel' instead.")
917923
return isinstance(x, NumberFieldFractionalIdeal_rel)

src/sage/rings/number_field/number_field_rel.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
from sage.categories.map import Map
8181
from sage.structure.sequence import Sequence
8282

83+
import sage.rings.abc
8384
import sage.structure.parent_gens
8485

8586
from . import maps
@@ -93,12 +94,12 @@
9394

9495
from . import number_field_element
9596
import sage.rings.number_field.number_field_ideal_rel
96-
from .number_field_ideal import is_NumberFieldIdeal
97+
from .number_field_ideal import NumberFieldIdeal
9798
from .number_field import (NumberField, NumberField_generic,
9899
put_natural_embedding_first, proof_flag,
99100
is_NumberFieldHomsetCodomain)
100101
from sage.rings.number_field.number_field_base import NumberField as NumberField_base
101-
from sage.rings.number_field.order import (RelativeOrder, is_NumberFieldOrder,
102+
from sage.rings.number_field.order import (RelativeOrder,
102103
relative_order_from_ring_generators)
103104
from sage.rings.number_field.morphism import RelativeNumberFieldHomomorphism_from_abs
104105
from sage.libs.pari.all import pari_gen
@@ -122,6 +123,10 @@ def is_RelativeNumberField(x):
122123
sage: from sage.rings.number_field.number_field_rel import is_RelativeNumberField
123124
sage: x = polygen(ZZ, 'x')
124125
sage: is_RelativeNumberField(NumberField(x^2+1,'a'))
126+
doctest:warning...
127+
DeprecationWarning: The function is_RelativeNumberField is deprecated;
128+
use 'isinstance(..., NumberField_relative)' instead.
129+
See https://github.com/sagemath/sage/issues/38124 for details.
125130
False
126131
sage: k.<a> = NumberField(x^3 - 2)
127132
sage: l.<b> = k.extension(x^3 - 3); l
@@ -131,6 +136,10 @@ def is_RelativeNumberField(x):
131136
sage: is_RelativeNumberField(QQ)
132137
False
133138
"""
139+
from sage.misc.superseded import deprecation
140+
deprecation(38124,
141+
"The function is_RelativeNumberField is deprecated; "
142+
"use 'isinstance(..., NumberField_relative)' instead.")
134143
return isinstance(x, NumberField_relative)
135144

136145

@@ -1013,9 +1022,9 @@ def _coerce_map_from_(self, R):
10131022
"""
10141023
if R is int:
10151024
return self._generic_coerce_map(R)
1016-
elif R in (ZZ, QQ, self.base_field()):
1025+
if R in (ZZ, QQ, self.base_field()):
10171026
return self._generic_coerce_map(R)
1018-
if is_NumberFieldOrder(R) and R.number_field() is self:
1027+
if isinstance(R, sage.rings.abc.Order) and R.number_field() is self:
10191028
return self._generic_coerce_map(R)
10201029
mor = self.base_field()._internal_coerce_map_from(R)
10211030
if mor is not None:
@@ -1310,7 +1319,7 @@ def is_isomorphic_relative(self, other, base_isom=None):
13101319
Ring endomorphism of Number Field in z9 with defining polynomial x^6 + x^3 + 1
13111320
Defn: z9 |--> z9^4
13121321
"""
1313-
if is_RelativeNumberField(other):
1322+
if isinstance(other, NumberField_relative):
13141323
s_base_field = self.base_field()
13151324
o_base_field = other.base_field()
13161325
if base_isom is None:
@@ -2722,7 +2731,7 @@ def uniformizer(self, P, others="positive"):
27222731
sage: (P, 1) in K.factor(u)
27232732
True
27242733
"""
2725-
if not is_NumberFieldIdeal(P):
2734+
if not isinstance(P, NumberFieldIdeal):
27262735
P = self.ideal(P)
27272736
if not P.is_maximal():
27282737
raise ValueError("P (=%s) must be a nonzero prime." % P)

src/sage/rings/number_field/order.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,11 @@ def is_NumberFieldOrder(R):
362362
363363
sage: from sage.rings.number_field.order import is_NumberFieldOrder
364364
sage: x = polygen(ZZ, 'x')
365-
sage: is_NumberFieldOrder(NumberField(x^2 + 1,'a').maximal_order())
365+
sage: is_NumberFieldOrder(NumberField(x^2 + 1, 'a').maximal_order())
366+
doctest:warning...
367+
DeprecationWarning: The function is_NumberFieldOrder is deprecated;
368+
use 'isinstance(..., sage.rings.abc.Order) or ... == ZZ' instead.
369+
See https://github.com/sagemath/sage/issues/38124 for details.
366370
True
367371
sage: is_NumberFieldOrder(ZZ)
368372
True
@@ -371,6 +375,10 @@ def is_NumberFieldOrder(R):
371375
sage: is_NumberFieldOrder(45)
372376
False
373377
"""
378+
from sage.misc.superseded import deprecation
379+
deprecation(38124,
380+
"The function is_NumberFieldOrder is deprecated; "
381+
"use 'isinstance(..., sage.rings.abc.Order) or ... == ZZ' instead.")
374382
return isinstance(R, Order) or R == ZZ
375383

376384

@@ -2842,7 +2850,7 @@ def absolute_order_from_module_generators(gens,
28422850
raise ValueError("each generator must be integral")
28432851

28442852
K = gens.universe()
2845-
if is_NumberFieldOrder(K):
2853+
if isinstance(K, Order) or K == ZZ:
28462854
K = K.number_field()
28472855
V, from_V, to_V = K.vector_space()
28482856
mod_gens = [to_V(x) for x in gens]

src/sage/rings/polynomial/multi_polynomial_libsingular.pyx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,6 @@ from sage.rings.integer_ring import is_IntegerRing, ZZ
231231
from sage.rings.integer cimport Integer
232232
from sage.rings.number_field.number_field_base cimport NumberField
233233

234-
from sage.rings.number_field.order import is_NumberFieldOrder
235234
from sage.categories.number_fields import NumberFields
236235

237236
from sage.structure.element import coerce_binop
@@ -5614,7 +5613,7 @@ cdef class MPolynomial_libsingular(MPolynomial_libsingular_base):
56145613
return RealField(prec).zero()
56155614

56165615
K = self.base_ring()
5617-
if K in NumberFields() or is_NumberFieldOrder(K):
5616+
if K in NumberFields() or isinstance(K, sage.rings.abc.Order) or K == ZZ:
56185617
f = self
56195618
else:
56205619
raise TypeError("Must be over a Numberfield or a Numberfield Order.")
@@ -5666,7 +5665,7 @@ cdef class MPolynomial_libsingular(MPolynomial_libsingular_base):
56665665
prec = 53
56675666

56685667
K = FractionField(self.base_ring())
5669-
if K not in NumberFields() or is_NumberFieldOrder(K):
5668+
if K not in NumberFields() and not isinstance(K, sage.rings.abc.Order) and K != ZZ:
56705669
raise TypeError("must be over a Numberfield or a Numberfield order")
56715670

56725671
return max([K(c).local_height(v, prec=prec) for c in self.coefficients()])
@@ -5710,7 +5709,7 @@ cdef class MPolynomial_libsingular(MPolynomial_libsingular_base):
57105709
1.0
57115710
"""
57125711
K = FractionField(self.base_ring())
5713-
if K not in NumberFields() or is_NumberFieldOrder(K):
5712+
if K not in NumberFields() and not isinstance(K, sage.rings.abc.Order) and K != ZZ:
57145713
return TypeError("must be over a Numberfield or a Numberfield Order")
57155714

57165715
if K == QQ:

0 commit comments

Comments
 (0)