Skip to content

Commit 34be642

Browse files
author
Matthias Koeppe
committed
sage.rings.number_field.number_field_element_base: New
1 parent 715b914 commit 34be642

File tree

13 files changed

+59
-44
lines changed

13 files changed

+59
-44
lines changed

src/sage/interfaces/maxima_lib.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1165,7 +1165,7 @@ def reduce_load_MaximaLib():
11651165
import sage.symbolic.expression
11661166
import sage.symbolic.integration.integral
11671167

1168-
from sage.structure.element import NumberFieldElement
1168+
from sage.rings.number_field.number_field_element_base import NumberFieldElement_base
11691169
from sage.symbolic.operators import FDerivativeOperator, add_vararg, mul_vararg
11701170

11711171
car=EclObject("car")
@@ -1525,7 +1525,7 @@ def pyobject_to_max(obj):
15251525
"""
15261526
if isinstance(obj,sage.rings.rational.Rational):
15271527
return EclObject(obj) if (obj.denom().is_one()) else EclObject([[rat], obj.numer(),obj.denom()])
1528-
elif isinstance(obj, NumberFieldElement):
1528+
elif isinstance(obj, NumberFieldElement_base):
15291529
from sage.rings.number_field.number_field_element_quadratic import NumberFieldElement_quadratic
15301530
if isinstance(obj, NumberFieldElement_quadratic) and obj.parent().defining_polynomial().list() == [1,0,1]:
15311531
re, im = obj.list()

src/sage/rings/finite_rings/residue_field.pyx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,8 @@ from sage.rings.finite_rings.finite_field_ntl_gf2e import FiniteField_ntl_gf2e
160160
from sage.rings.finite_rings.finite_field_prime_modn import FiniteField_prime_modn
161161
from sage.rings.finite_rings.finite_field_pari_ffelt import FiniteField_pari_ffelt
162162
from sage.rings.ideal import is_Ideal
163-
from sage.structure.element cimport Element, NumberFieldElement
163+
from sage.rings.number_field.number_field_element_base import NumberFieldElement_base
164+
from sage.structure.element cimport Element
164165

165166
from sage.rings.number_field.number_field_ideal import is_NumberFieldIdeal
166167

@@ -294,7 +295,7 @@ class ResidueFieldFactory(UniqueFactory):
294295
if not is_Ideal(p):
295296
if isinstance(p, (int, Integer, Rational)):
296297
p = ZZ.ideal(p)
297-
elif isinstance(p, NumberFieldElement):
298+
elif isinstance(p, NumberFieldElement_base):
298299
if p.parent().is_field():
299300
p = p.parent().ring_of_integers().ideal(p)
300301
else:

src/sage/rings/integer_ring.pyx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,9 @@ import sage.libs.pari.all
5858
import sage.rings.ideal
5959
from sage.categories.basic import EuclideanDomains
6060
from sage.categories.infinite_enumerated_sets import InfiniteEnumeratedSets
61+
from sage.rings.number_field.number_field_element_base import NumberFieldElement_base
6162
from sage.structure.coerce cimport is_numpy_type
62-
from sage.structure.element cimport parent, NumberFieldElement
63+
from sage.structure.element cimport parent
6364
from sage.structure.parent_gens import ParentWithGens
6465
from sage.structure.parent cimport Parent
6566
from sage.structure.richcmp cimport rich_to_bool
@@ -414,7 +415,7 @@ cdef class IntegerRing_class(PrincipalIdealDomain):
414415
if x in self:
415416
return self
416417

417-
if isinstance(x, NumberFieldElement):
418+
if isinstance(x, NumberFieldElement_base):
418419
K, from_K = parent(x).subfield(x)
419420
return K.order(K.gen())
420421

src/sage/rings/number_field/number_field_element.pxd

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
cimport sage.structure.element
22
from sage.libs.gmp.types cimport mpz_t
33
from sage.rings.integer cimport Integer
4+
from sage.rings.number_field.number_field_element_base cimport NumberFieldElement_base
45
from sage.rings.polynomial.polynomial_element cimport Polynomial
5-
from sage.structure.element cimport FieldElement, RingElement, ModuleElement
6-
from sage.structure.element cimport NumberFieldElement as NumberFieldElement_base
76
from sage.structure.parent cimport Parent
87
from sage.structure.parent_base cimport ParentWithBase
98
from sage.libs.ntl.types cimport ZZ_c, ZZX_c

src/sage/rings/number_field/number_field_element.pyx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
# distutils: extra_link_args = NTL_LIBEXTRA
66
# distutils: language = c++
77
"""
8-
Number Field Elements
8+
Number field elements (implementation using NTL)
99
1010
AUTHORS:
1111
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from sage.structure.element cimport FieldElement
2+
3+
4+
cdef class NumberFieldElement_base(FieldElement):
5+
pass
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
r"""
2+
Number field elements (abstract base class)
3+
"""
4+
5+
# ****************************************************************************
6+
# Copyright (C) 2023 Matthias Koeppe
7+
#
8+
# Distributed under the terms of the GNU General Public License (GPL)
9+
# as published by the Free Software Foundation; either version 2 of
10+
# the License, or (at your option) any later version.
11+
# https://www.gnu.org/licenses/
12+
# ****************************************************************************
13+
14+
cdef class NumberFieldElement_base(FieldElement):
15+
r"""
16+
Abstract base class for :class:`~sage.rings.number_field.number_field_element.NumberFieldElement`
17+
18+
This class is defined for the purpose of :func:`isinstance` tests. It should not be
19+
instantiated.
20+
21+
EXAMPLES::
22+
23+
sage: k.<a> = NumberField(x^3 + x + 1)
24+
sage: isinstance(a, sage.rings.number_field.number_field_element_base.NumberFieldElement_base)
25+
True
26+
27+
By design, there is a unique direct subclass::
28+
29+
sage: len(sage.rings.number_field.number_field_element_base.NumberFieldElement_base.__subclasses__()) <= 1
30+
True
31+
"""
32+
33+
pass

src/sage/rings/universal_cyclotomic_field.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@
167167

168168
from sage.structure.richcmp import rich_to_bool
169169
from sage.structure.unique_representation import UniqueRepresentation
170-
from sage.structure.element import FieldElement, parent, NumberFieldElement
170+
from sage.structure.element import FieldElement, parent
171171

172172
from sage.structure.coerce import py_scalar_to_element
173173
from sage.categories.morphism import Morphism
@@ -177,6 +177,7 @@
177177
from sage.rings.rational import Rational
178178

179179
from sage.rings.integer_ring import ZZ
180+
from sage.rings.number_field.number_field_element_base import NumberFieldElement_base
180181
from sage.rings.rational_field import QQ
181182
from sage.rings.infinity import Infinity
182183
from sage.rings.qqbar import AA, QQbar
@@ -1538,7 +1539,7 @@ def _element_constructor_(self, elt):
15381539
import sage.rings.abc
15391540
P = parent(elt)
15401541
if isinstance(P, sage.rings.abc.NumberField_cyclotomic):
1541-
if isinstance(elt, NumberFieldElement):
1542+
if isinstance(elt, NumberFieldElement_base):
15421543
from sage.rings.number_field.number_field import CyclotomicField
15431544
n = P.gen().multiplicative_order()
15441545
elt = CyclotomicField(n)(elt)

src/sage/schemes/elliptic_curves/cm.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
4343

4444
from sage.misc.cachefunc import cached_function
45-
from sage.structure.element import NumberFieldElement
45+
from sage.rings.number_field.number_field_element_base import NumberFieldElement_base
4646

4747

4848
@cached_function
@@ -626,7 +626,7 @@ def is_cm_j_invariant(j, method='new'):
626626
True
627627
"""
628628
# First we check that j is an algebraic number:
629-
if not isinstance(j, NumberFieldElement) and j not in QQ:
629+
if not isinstance(j, NumberFieldElement_base) and j not in QQ:
630630
raise NotImplementedError("is_cm_j_invariant() is only implemented for number field elements")
631631

632632
# for j in ZZ we have a lookup-table:

src/sage/schemes/elliptic_curves/heegner.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@
117117
from sage.rings.real_mpfr import RealField
118118
from sage.quadratic_forms.all import (BinaryQF,
119119
BinaryQF_reduced_representatives)
120-
from sage.structure.element import NumberFieldElement
120+
from sage.rings.number_field.number_field_element_base import NumberFieldElement_base
121121
from sage.structure.sage_object import SageObject
122122
from sage.structure.richcmp import (richcmp_method, richcmp,
123123
richcmp_not_equal, rich_to_bool)
@@ -2684,7 +2684,7 @@ def __init__(self, N, D, c=ZZ(1), f=None, check=True):
26842684
elif isinstance(f, BinaryQF):
26852685
# convert from BinaryQF
26862686
f = tuple(f)
2687-
elif isinstance(f, NumberFieldElement):
2687+
elif isinstance(f, NumberFieldElement_base):
26882688
# tau = number field element
26892689
g = f.minpoly()
26902690
if g.degree() != 2:

0 commit comments

Comments
 (0)