Skip to content

Commit dbc5df3

Browse files
committed
2 parents 4c9a9dd + 6e2c3c4 commit dbc5df3

10 files changed

+87
-32
lines changed

src/sage/rings/abc.pxd

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from .ring cimport Field
2+
3+
cdef class RealField(Field):
4+
5+
pass
6+
7+
8+
cdef class RealDoubleField(Field):
9+
10+
pass
11+
12+
13+
cdef class ComplexField(Field):
14+
15+
pass
16+
17+
18+
cdef class ComplexDoubleField(Field):
19+
20+
pass

src/sage/rings/abc.pyx

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
"""
2+
Abstract base classes for rings
3+
"""
4+
5+
cdef class RealField(Field):
6+
r"""
7+
Abstract base class for :class:`~sage.rings.real_mpfr.RealField_class`.
8+
"""
9+
10+
pass
11+
12+
13+
cdef class RealDoubleField(Field):
14+
r"""
15+
Abstract base class for :class:`~sage.rings.real_double.RealDoubleField_class`.
16+
"""
17+
18+
pass
19+
20+
21+
cdef class ComplexField(Field):
22+
r"""
23+
Abstract base class for :class:`~sage.rings.complex_mpfr.ComplexField_class`.
24+
"""
25+
26+
pass
27+
28+
29+
cdef class ComplexDoubleField(Field):
30+
r"""
31+
Abstract base class for :class:`~sage.rings.complex_double.ComplexDoubleField_class`.
32+
"""
33+
34+
pass

src/sage/rings/complex_double.pxd

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ from sage.libs.gsl.types cimport gsl_complex
22

33
cimport sage.structure.element
44
cimport sage.rings.ring
5+
cimport sage.rings.abc
56

67

7-
cdef class ComplexDoubleField_class(sage.rings.ring.Field):
8+
cdef class ComplexDoubleField_class(sage.rings.abc.ComplexDoubleField):
89
pass
910

1011

src/sage/rings/complex_double.pyx

+1-1
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ def is_ComplexDoubleField(x):
126126
return isinstance(x, ComplexDoubleField_class)
127127

128128

129-
cdef class ComplexDoubleField_class(sage.rings.ring.Field):
129+
cdef class ComplexDoubleField_class(sage.rings.abc.ComplexDoubleField):
130130
"""
131131
An approximation to the field of complex numbers using double
132132
precision floating point numbers. Answers derived from calculations

src/sage/rings/complex_mpfr.pyx

+1-1
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ def ComplexField(prec=53, names=None):
202202
return C
203203

204204

205-
class ComplexField_class(ring.Field):
205+
class ComplexField_class(sage.rings.abc.ComplexField):
206206
"""
207207
An approximation to the field of complex numbers using floating
208208
point numbers with any specified precision. Answers derived from

src/sage/rings/polynomial/polynomial_element.pyx

+23-25
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ TESTS::
5151
# https://www.gnu.org/licenses/
5252
# ****************************************************************************
5353

54-
cdef is_FractionField, is_RealField, is_ComplexField
54+
cdef is_FractionField
5555
cdef ZZ, QQ, RR, CC, RDF, CDF
5656

5757
cimport cython
@@ -84,13 +84,14 @@ from sage.structure.richcmp cimport (richcmp, richcmp_item,
8484
from sage.interfaces.singular import singular as singular_default, is_SingularElement
8585
from sage.libs.all import pari, pari_gen, PariError
8686

87-
from sage.rings.real_mpfr import RealField, is_RealField, RR
87+
cimport sage.rings.abc
88+
from sage.rings.real_mpfr import RealField, RR
8889

89-
from sage.rings.complex_mpfr import is_ComplexField, ComplexField
90+
from sage.rings.complex_mpfr import ComplexField
9091
CC = ComplexField()
9192

92-
from sage.rings.real_double import is_RealDoubleField, RDF
93-
from sage.rings.complex_double import is_ComplexDoubleField, CDF
93+
from sage.rings.real_double import RDF
94+
from sage.rings.complex_double import CDF
9495
from sage.rings.real_mpfi import is_RealIntervalField
9596

9697
from sage.structure.coerce cimport coercion_model
@@ -7912,25 +7913,23 @@ cdef class Polynomial(CommutativeAlgebraElement):
79127913

79137914
late_import()
79147915

7915-
input_fp = (is_RealField(K)
7916-
or is_ComplexField(K)
7917-
or is_RealDoubleField(K)
7918-
or is_ComplexDoubleField(K))
7919-
output_fp = (is_RealField(L)
7920-
or is_ComplexField(L)
7921-
or is_RealDoubleField(L)
7922-
or is_ComplexDoubleField(L))
7923-
input_complex = (is_ComplexField(K)
7924-
or is_ComplexDoubleField(K))
7925-
output_complex = (is_ComplexField(L)
7926-
or is_ComplexDoubleField(L))
7916+
input_fp = isinstance(K, (sage.rings.abc.RealField,
7917+
sage.rings.abc.ComplexField,
7918+
sage.rings.abc.RealDoubleField,
7919+
sage.rings.abc.ComplexDoubleField))
7920+
output_fp = isinstance(L, (sage.rings.abc.RealField,
7921+
sage.rings.abc.ComplexField,
7922+
sage.rings.abc.RealDoubleField,
7923+
sage.rings.abc.ComplexDoubleField))
7924+
input_complex = isinstance(K, (sage.rings.abc.ComplexField, sage.rings.abc.ComplexDoubleField))
7925+
output_complex = isinstance(L, (sage.rings.abc.ComplexField, sage.rings.abc.ComplexDoubleField))
79277926
input_gaussian = (isinstance(K, NumberField_quadratic)
79287927
and list(K.polynomial()) == [1, 0, 1])
79297928

79307929
if input_fp and output_fp:
79317930
# allow for possibly using a fast but less reliable
79327931
# floating point algorithm from numpy
7933-
low_prec = is_RealDoubleField(K) or is_ComplexDoubleField(K)
7932+
low_prec = isinstance(K, (sage.rings.abc.RealDoubleField, sage.rings.abc.ComplexDoubleField))
79347933
if algorithm is None:
79357934
if low_prec:
79367935
algorithm = 'either'
@@ -7943,8 +7942,7 @@ cdef class Polynomial(CommutativeAlgebraElement):
79437942
# We should support GSL, too. We could also support PARI's
79447943
# old Newton-iteration algorithm.
79457944

7946-
input_arbprec = (is_RealField(K) or
7947-
is_ComplexField(K))
7945+
input_arbprec = isinstance(K, (sage.rings.abc.RealField, sage.rings.abc.ComplexField))
79487946

79497947
if algorithm == 'numpy' or algorithm == 'either':
79507948
if K.prec() > 53 and L.prec() > 53:
@@ -8082,7 +8080,7 @@ cdef class Polynomial(CommutativeAlgebraElement):
80828080
# If we want the complex roots, and the input is not
80838081
# floating point, we convert to a real polynomial
80848082
# (except when the input coefficients are Gaussian rationals).
8085-
if is_ComplexDoubleField(L):
8083+
if isinstance(L, sage.rings.abc.ComplexDoubleField):
80868084
real_field = RDF
80878085
else:
80888086
real_field = RealField(L.prec())
@@ -8250,7 +8248,7 @@ cdef class Polynomial(CommutativeAlgebraElement):
82508248
True
82518249
"""
82528250
K = self.base_ring()
8253-
if is_RealField(K) or is_RealDoubleField(K):
8251+
if isinstance(K, (sage.rings.abc.RealField, sage.rings.abc.RealDoubleField)):
82548252
return self.roots(multiplicities=False)
82558253

82568254
return self.roots(ring=RR, multiplicities=False)
@@ -8292,11 +8290,11 @@ cdef class Polynomial(CommutativeAlgebraElement):
82928290
True
82938291
"""
82948292
K = self.base_ring()
8295-
if is_RealField(K):
8293+
if isinstance(K, sage.rings.abc.RealField):
82968294
return self.roots(ring=ComplexField(K.prec()), multiplicities=False)
8297-
if is_RealDoubleField(K):
8295+
if isinstance(K, sage.rings.abc.RealDoubleField):
82988296
return self.roots(ring=CDF, multiplicities=False)
8299-
if is_ComplexField(K) or is_ComplexDoubleField(K):
8297+
if isinstance(K, (sage.rings.abc.ComplexField, sage.rings.abc.ComplexDoubleField)):
83008298
return self.roots(multiplicities=False)
83018299

83028300
return self.roots(ring=CC, multiplicities=False)

src/sage/rings/real_double.pxd

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
from sage.structure.element cimport RingElement, ModuleElement, Element, FieldElement
22
from sage.rings.ring cimport Field
3+
cimport sage.rings.abc
34

4-
cdef class RealDoubleField_class(Field):
5+
cdef class RealDoubleField_class(sage.rings.abc.RealDoubleField):
56
cdef _new_c(self, double value)
67

78
cdef class RealDoubleElement(FieldElement):

src/sage/rings/real_double.pyx

+1-1
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ def is_RealDoubleField(x):
8787
"""
8888
return isinstance(x, RealDoubleField_class)
8989

90-
cdef class RealDoubleField_class(Field):
90+
cdef class RealDoubleField_class(sage.rings.abc.RealDoubleField):
9191
"""
9292
An approximation to the field of real numbers using double
9393
precision floating point numbers. Answers derived from calculations

src/sage/rings/real_mpfr.pxd

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
from sage.libs.mpfr.types cimport mpfr_rnd_t, mpfr_t
22

33
cimport sage.rings.ring
4+
cimport sage.rings.abc
45
cimport sage.structure.element
56
from cypari2.types cimport GEN
67
from sage.libs.mpfr.types cimport mpfr_prec_t
78

89
cdef class RealNumber(sage.structure.element.RingElement) # forward decl
910

10-
cdef class RealField_class(sage.rings.ring.Field):
11+
cdef class RealField_class(sage.rings.abc.RealField):
1112
cdef mpfr_prec_t __prec
1213
cdef bint sci_not
1314
cdef mpfr_rnd_t rnd

src/sage/rings/real_mpfr.pyx

+1-1
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,7 @@ cpdef RealField(mpfr_prec_t prec=53, int sci_not=0, rnd=MPFR_RNDN):
454454
return R
455455

456456

457-
cdef class RealField_class(sage.rings.ring.Field):
457+
cdef class RealField_class(sage.rings.abc.RealField):
458458
"""
459459
An approximation to the field of real numbers using floating point
460460
numbers with any specified precision. Answers derived from

0 commit comments

Comments
 (0)