Skip to content

Commit bac0d56

Browse files
author
Release Manager
committed
Trac #32660: Add sage.rings.abc.{AlgebraicField,...,NumberField_quadratic}, deprecate is_AlgebraicField, ..., is_CyclotomicField, is_QuadraticField
Part of meta-ticket #32414. URL: https://trac.sagemath.org/32660 Reported by: mkoeppe Ticket author(s): Matthias Koeppe Reviewer(s): Jonathan Kliem
2 parents 7dd78ef + 3643052 commit bac0d56

File tree

16 files changed

+152
-93
lines changed

16 files changed

+152
-93
lines changed

src/sage/combinat/root_system/coxeter_type.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@
2121
from sage.misc.cachefunc import cached_method
2222
from sage.misc.classcall_metaclass import ClasscallMetaclass
2323
from sage.combinat.root_system.cartan_type import CartanType
24+
import sage.rings.abc
2425
from sage.matrix.args import SparseEntry
2526
from sage.matrix.all import Matrix
2627
from sage.symbolic.ring import SR
2728
from sage.structure.unique_representation import UniqueRepresentation
2829
from sage.structure.sage_object import SageObject
29-
from sage.rings.number_field.number_field import is_QuadraticField
3030

3131

3232
class CoxeterType(SageObject, metaclass=ClasscallMetaclass):
@@ -391,7 +391,7 @@ def val(x):
391391
return (E(2*x) + ~E(2*x)) / R(-2)
392392
else:
393393
return R(x)
394-
elif is_QuadraticField(R):
394+
elif isinstance(R, sage.rings.abc.NumberField_quadratic):
395395

396396
def val(x):
397397
if x > -1:

src/sage/groups/matrix_gps/coxeter_group.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,11 @@
2727
from sage.matrix.args import SparseEntry
2828
from sage.matrix.matrix_space import MatrixSpace
2929

30+
import sage.rings.abc
3031
from sage.rings.integer_ring import ZZ
3132
from sage.rings.infinity import infinity
3233
from sage.rings.universal_cyclotomic_field import UniversalCyclotomicField
33-
from sage.rings.number_field.number_field import QuadraticField, is_QuadraticField
34+
from sage.rings.number_field.number_field import QuadraticField
3435

3536
from sage.misc.cachefunc import cached_method
3637

@@ -280,7 +281,7 @@ def val(x):
280281
return 2
281282
else:
282283
return E(2 * x) + ~E(2 * x)
283-
elif is_QuadraticField(base_ring):
284+
elif isinstance(base_ring, sage.rings.abc.NumberField_quadratic):
284285

285286
def val(x):
286287
if x == -1:

src/sage/groups/misc_gps/argument_groups.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -735,9 +735,9 @@ def _element_constructor_(self, data, exponent=None, **kwds):
735735
zeta2^5
736736
"""
737737
from sage.groups.generic import discrete_log
738+
import sage.rings.abc
738739
from sage.rings.asymptotic.misc import combine_exceptions
739740
from sage.rings.rational_field import QQ
740-
from sage.rings.number_field.number_field import NumberField_cyclotomic
741741

742742
if exponent is None:
743743
if isinstance(data, int) and data == 0:
@@ -769,7 +769,7 @@ def _element_constructor_(self, data, exponent=None, **kwds):
769769
elif isinstance(P, UnitCircleGroup):
770770
exponent = data.exponent
771771

772-
elif isinstance(P, NumberField_cyclotomic):
772+
elif isinstance(P, sage.rings.abc.NumberField_cyclotomic):
773773
zeta = P.gen()
774774
n = zeta.multiplicative_order()
775775
try:

src/sage/interfaces/polymake.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -332,8 +332,10 @@ def convert(y):
332332
r.__sage_dict = z # do this to avoid having the entries of the list be garbage collected
333333
return r
334334

335-
from sage.rings.all import Integer, Rational, RDF
336-
from sage.rings.number_field.number_field import is_QuadraticField
335+
import sage.rings.abc
336+
from sage.rings.integer import Integer
337+
from sage.rings.rational import Rational
338+
from sage.rings.real_double import RDF
337339

338340
def to_str(x):
339341
if isinstance(x, list):
@@ -350,7 +352,7 @@ def to_str(x):
350352
except AttributeError:
351353
pass
352354

353-
if is_QuadraticField(parent):
355+
if isinstance(parent, sage.rings.abc.NumberField_quadratic):
354356
return x._polymake_init_()
355357
try:
356358
if x.parent().is_exact():

src/sage/matrix/matrix_space.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ def get_matrix_class(R, nrows, ncols, sparse, implementation):
255255
if R.order() < matrix_modn_dense_double.MAX_MODULUS:
256256
return matrix_modn_dense_double.Matrix_modn_dense_double
257257

258-
if sage.rings.number_field.number_field.is_CyclotomicField(R):
258+
if isinstance(R, sage.rings.abc.NumberField_cyclotomic):
259259
from . import matrix_cyclo_dense
260260
return matrix_cyclo_dense.Matrix_cyclo_dense
261261

@@ -338,7 +338,7 @@ def get_matrix_class(R, nrows, ncols, sparse, implementation):
338338
raise ValueError("'numpy' matrices are only available over RDF and CDF")
339339

340340
if implementation == 'rational':
341-
if sage.rings.number_field.number_field.is_CyclotomicField(R):
341+
if isinstance(R, sage.rings.abc.NumberField_cyclotomic):
342342
from . import matrix_cyclo_dense
343343
return matrix_cyclo_dense.Matrix_cyclo_dense
344344
raise ValueError("'rational' matrices are only available over a cyclotomic field")

src/sage/modular/dirichlet.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@
6969
from sage.categories.map import Map
7070
from sage.rings.rational_field import is_RationalField
7171
import sage.rings.abc
72-
from sage.rings.qqbar import is_AlgebraicField
7372
from sage.rings.ring import is_Ring
7473

7574
from sage.misc.functional import round
@@ -1347,10 +1346,10 @@ def gauss_sum(self, a=1):
13471346
m = G.modulus()
13481347
if isinstance(K, sage.rings.abc.ComplexField):
13491348
return self.gauss_sum_numerical(a=a)
1350-
elif is_AlgebraicField(K):
1349+
elif isinstance(K, sage.rings.abc.AlgebraicField):
13511350
L = K
13521351
zeta = L.zeta(m)
1353-
elif number_field.is_CyclotomicField(K) or is_RationalField(K):
1352+
elif isinstance(K, sage.rings.abc.NumberField_cyclotomic) or is_RationalField(K):
13541353
chi = chi.minimize_base_ring()
13551354
n = lcm(m, G.zeta_order())
13561355
L = rings.CyclotomicField(n)
@@ -1427,11 +1426,11 @@ def gauss_sum_numerical(self, prec=53, a=1):
14271426
def phi(t):
14281427
return t
14291428
CC = K
1430-
elif is_AlgebraicField(K):
1429+
elif isinstance(K, sage.rings.abc.AlgebraicField):
14311430
from sage.rings.complex_mpfr import ComplexField
14321431
CC = ComplexField(prec)
14331432
phi = CC.coerce_map_from(K)
1434-
elif number_field.is_CyclotomicField(K) or is_RationalField(K):
1433+
elif isinstance(K, sage.rings.abc.NumberField_cyclotomic) or is_RationalField(K):
14351434
phi = K.complex_embedding(prec)
14361435
CC = phi.codomain()
14371436
else:
@@ -1650,7 +1649,7 @@ def kloosterman_sum_numerical(self, prec=53, a=1, b=0):
16501649
"""
16511650
G = self.parent()
16521651
K = G.base_ring()
1653-
if not (number_field.is_CyclotomicField(K) or is_RationalField(K)):
1652+
if not (isinstance(K, sage.rings.abc.NumberField_cyclotomic) or is_RationalField(K)):
16541653
raise NotImplementedError("Kloosterman sums only currently implemented when the base ring is a cyclotomic field or QQ.")
16551654
phi = K.complex_embedding(prec)
16561655
CC = phi.codomain()

src/sage/rings/abc.pyx

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,46 @@
22
Abstract base classes for rings
33
"""
44

5+
class NumberField_quadratic(Field):
6+
r"""
7+
Abstract base class for :class:`~sage.rings.number_field.number_field.NumberField_quadratic`.
8+
"""
9+
10+
pass
11+
12+
13+
class NumberField_cyclotomic(Field):
14+
r"""
15+
Abstract base class for :class:`~sage.rings.number_field.number_field.NumberField_cyclotomic`.
16+
"""
17+
18+
pass
19+
20+
21+
class AlgebraicField_common(Field):
22+
r"""
23+
Abstract base class for :class:`~sage.rings.qqbar.AlgebraicField_common`.
24+
"""
25+
26+
pass
27+
28+
29+
class AlgebraicField(AlgebraicField_common):
30+
r"""
31+
Abstract base class for :class:`~sage.rings.qqbar.AlgebraicField`.
32+
"""
33+
34+
pass
35+
36+
37+
class AlgebraicRealField(AlgebraicField_common):
38+
r"""
39+
Abstract base class for :class:`~sage.rings.qqbar.AlgebraicRealField`.
40+
"""
41+
42+
pass
43+
44+
545
cdef class RealField(Field):
646
r"""
747
Abstract base class for :class:`~sage.rings.real_mpfr.RealField_class`.

src/sage/rings/complex_mpfr.pyx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ from sage.structure.parent_gens import ParentWithGens
4646

4747
from sage.misc.sage_eval import sage_eval
4848

49+
import sage.rings.abc
4950
from sage.arith.constants cimport LOG_TEN_TWO_PLUS_EPSILON
5051
from . import ring, infinity
5152
from .integer cimport Integer
@@ -64,7 +65,6 @@ gmpy2.import_gmpy2()
6465

6566
# Some objects that are note imported at startup in order to break
6667
# circular imports
67-
NumberField_quadratic = None
6868
NumberFieldElement_quadratic = None
6969
AlgebraicNumber_base = None
7070
AlgebraicNumber = None
@@ -81,7 +81,6 @@ def late_import():
8181
8282
sage: sage.rings.complex_mpfr.late_import()
8383
"""
84-
global NumberField_quadratic
8584
global NumberFieldElement_quadratic
8685
global AlgebraicNumber_base
8786
global AlgebraicNumber
@@ -92,7 +91,6 @@ def late_import():
9291
if NumberFieldElement_quadratic is None:
9392
import sage.rings.number_field.number_field
9493
import sage.rings.number_field.number_field_element_quadratic as nfeq
95-
NumberField_quadratic = sage.rings.number_field.number_field.NumberField_quadratic
9694
NumberFieldElement_quadratic = nfeq.NumberFieldElement_quadratic
9795
import sage.rings.qqbar
9896
AlgebraicNumber_base = sage.rings.qqbar.AlgebraicNumber_base
@@ -528,7 +526,7 @@ class ComplexField_class(sage.rings.abc.ComplexField):
528526

529527
late_import()
530528
if isinstance(x, NumberFieldElement_quadratic):
531-
if isinstance(x.parent(), NumberField_quadratic) and list(x.parent().polynomial()) == [1, 0, 1]:
529+
if isinstance(x.parent(), sage.rings.abc.NumberField_quadratic) and list(x.parent().polynomial()) == [1, 0, 1]:
532530
(re, im) = list(x)
533531
return ComplexNumber(self, re, im)
534532

src/sage/rings/number_field/number_field.py

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1041,10 +1041,17 @@ def is_QuadraticField(x):
10411041
r"""
10421042
Return True if x is of the quadratic *number* field type.
10431043
1044+
This function is deprecated. Use :func:`isinstance` with
1045+
:class:`~sage.rings.abc.NumberField_quadratic` instead.
1046+
10441047
EXAMPLES::
10451048
10461049
sage: from sage.rings.number_field.number_field import is_QuadraticField
10471050
sage: is_QuadraticField(QuadraticField(5,'a'))
1051+
doctest:warning...
1052+
DeprecationWarning: is_QuadraticField is deprecated;
1053+
use isinstance(..., sage.rings.abc.NumberField_quadratic instead
1054+
See https://trac.sagemath.org/32660 for details.
10481055
True
10491056
sage: is_QuadraticField(NumberField(x^2 - 5, 'b'))
10501057
True
@@ -1057,6 +1064,8 @@ def is_QuadraticField(x):
10571064
sage: is_QuadraticField(GF(9,'a'))
10581065
False
10591066
"""
1067+
from sage.misc.superseded import deprecation
1068+
deprecation(32660, 'is_QuadraticField is deprecated; use isinstance(..., sage.rings.abc.NumberField_quadratic instead')
10601069
return isinstance(x, NumberField_quadratic)
10611070

10621071

@@ -1229,10 +1238,17 @@ def is_CyclotomicField(x):
12291238
number field that just happens to be isomorphic to a cyclotomic
12301239
field.
12311240
1241+
This function is deprecated. Use :func:`isinstance` with
1242+
:class:`~sage.rings.abc.NumberField_cyclotomic` instead.
1243+
12321244
EXAMPLES::
12331245
12341246
sage: from sage.rings.number_field.number_field import is_CyclotomicField
12351247
sage: is_CyclotomicField(NumberField(x^2 + 1,'zeta4'))
1248+
doctest:warning...
1249+
DeprecationWarning: is_CyclotomicField is deprecated;
1250+
use isinstance(..., sage.rings.abc.NumberField_cyclotomic instead
1251+
See https://trac.sagemath.org/32660 for details.
12361252
False
12371253
sage: is_CyclotomicField(CyclotomicField(4))
12381254
True
@@ -1243,6 +1259,8 @@ def is_CyclotomicField(x):
12431259
sage: is_CyclotomicField(7)
12441260
False
12451261
"""
1262+
from sage.misc.superseded import deprecation
1263+
deprecation(32660, 'is_CyclotomicField is deprecated; use isinstance(..., sage.rings.abc.NumberField_cyclotomic instead')
12461264
return isinstance(x, NumberField_cyclotomic)
12471265

12481266

@@ -10346,7 +10364,7 @@ def _factor_univariate_polynomial(self, poly, **kwargs):
1034610364
return poly._factor_pari_helper(G)
1034710365

1034810366

10349-
class NumberField_cyclotomic(NumberField_absolute):
10367+
class NumberField_cyclotomic(NumberField_absolute, sage.rings.abc.NumberField_cyclotomic):
1035010368
"""
1035110369
Create a cyclotomic extension of the rational field.
1035210370
@@ -11249,7 +11267,7 @@ def is_isomorphic(self, other):
1124911267
sage: K.is_isomorphic(CyclotomicField(8))
1125011268
False
1125111269
"""
11252-
if is_CyclotomicField(other):
11270+
if isinstance(other, NumberField_cyclotomic):
1125311271
return self.zeta_order() == other.zeta_order()
1125411272
return NumberField_generic.is_isomorphic(self, other)
1125511273

@@ -11709,7 +11727,7 @@ def roots_of_unity(self):
1170911727
return v
1171011728

1171111729

11712-
class NumberField_quadratic(NumberField_absolute):
11730+
class NumberField_quadratic(NumberField_absolute, sage.rings.abc.NumberField_quadratic):
1171311731
r"""
1171411732
Create a quadratic extension of the rational field.
1171511733

0 commit comments

Comments
 (0)