Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
8d1ef97
Use try..except when importing polynomial implementation classes
mkoeppe Jan 25, 2023
0bcf157
PolynomialRing_dense_...: Fall back to other implementations on Impor…
mkoeppe Mar 7, 2023
3a96723
sage.rings.polynomial: Handle implementation better when implementati…
mkoeppe Mar 12, 2023
c0d0535
src/sage/rings/polynomial/polynomial_ring.py: Add an 'implementation'…
mkoeppe Mar 13, 2023
ca3f6a4
src/sage/rings/polynomial/polynomial_ring.py: Pass keyword 'implement…
mkoeppe Mar 13, 2023
58712e2
src/sage/rings/polynomial/polynomial_ring.py: Fix setting of self._im…
mkoeppe Mar 13, 2023
a0f6fef
Replace isinstance(..., sage.rings.number_field.number_field.NumberFi…
mkoeppe Mar 4, 2023
a3e48e9
sage.rings: Fix numberfield imports
mkoeppe Mar 14, 2023
1cc6b9a
src/sage/modular/dirichlet.py: Fix up import
mkoeppe Mar 14, 2023
340110f
Import is_NumberField from sage.rings.number_field.number_field_base
mkoeppe Mar 14, 2023
2a797cd
Replace is_NumberField by isinstance(...) using git grep -l 'base imp…
mkoeppe Mar 14, 2023
9d6948b
Replace remaining uses of is_NumberField by isinstance(...)
mkoeppe Mar 14, 2023
3c0ff68
src/sage/rings/number_field/number_field_base.pyx: Repair and depreca…
mkoeppe Mar 14, 2023
012e16f
src/sage/rings/polynomial/polynomial_element.pyx: Use sage.rings.abc.…
mkoeppe Mar 14, 2023
0eb6c59
src/sage/rings/number_field/number_field.py: Fix isinstance
mkoeppe Mar 14, 2023
9976c4c
src/sage/rings/number_field/number_field_rel.py: Fix up import
mkoeppe Mar 15, 2023
e3162a6
src/sage/rings/polynomial/polynomial_element.pyx: Fix import/isinstance
mkoeppe Mar 15, 2023
3cd6056
Fix up imports
mkoeppe Mar 15, 2023
9e17e3c
Merge branch 't/32664/add_sage_rings_abc_finitefield__deprecate_is_fi…
mkoeppe Mar 16, 2023
063fcf6
Merge remote-tracking branch 'upstream/develop' into numberfield_abc_…
mkoeppe Mar 19, 2023
350cdde
Merge tag '10.0.beta6' into numberfield_abc_imports
mkoeppe Mar 26, 2023
62b1287
Merge branch 'polynomial_ring_impl' into numberfield_abc_imports
mkoeppe Mar 30, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/sage/algebras/quatalg/quaternion_algebra.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
from sage.rings.ideal import Ideal_fractional
from sage.rings.rational_field import is_RationalField, QQ
from sage.rings.infinity import infinity
from sage.rings.number_field.number_field import is_NumberField
from sage.rings.number_field.number_field_base import NumberField
from sage.rings.power_series_ring import PowerSeriesRing
from sage.structure.category_object import normalize_names
from sage.structure.parent import Parent
Expand Down Expand Up @@ -662,7 +662,7 @@ def __init__(self, base_ring, a, b, names='i,j,k'):
self._b = b
if is_RationalField(base_ring) and a.denominator() == 1 == b.denominator():
self.Element = QuaternionAlgebraElement_rational_field
elif (is_NumberField(base_ring) and base_ring.degree() > 2 and base_ring.is_absolute() and
elif (isinstance(base_ring, NumberField) and base_ring.degree() > 2 and base_ring.is_absolute() and
a.denominator() == 1 == b.denominator() and base_ring.defining_polynomial().is_monic()):
# This QuaternionAlgebraElement_number_field class is not
# designed to work with elements of a quadratic field. To
Expand Down
4 changes: 2 additions & 2 deletions src/sage/categories/number_fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,8 @@ def __contains__(self, x):
sage: ZZ in NumberFields()
False
"""
import sage.rings.number_field.number_field_base
return sage.rings.number_field.number_field_base.is_NumberField(x)
from sage.rings.number_field.number_field_base import NumberField
return isinstance(x, NumberField)

def _call_(self, x):
r"""
Expand Down
4 changes: 2 additions & 2 deletions src/sage/categories/pushout.py
Original file line number Diff line number Diff line change
Expand Up @@ -3462,8 +3462,8 @@ def merge(self, other):
# nothing else helps, hence, we move to the pushout of the codomains of the embeddings
try:
P = pushout(self.embeddings[0].parent(), other.embeddings[0].parent())
from sage.rings.number_field.number_field import is_NumberField
if is_NumberField(P):
from sage.rings.number_field.number_field_base import NumberField
if isinstance(P, NumberField):
return P.construction()[0]
except CoercionException:
return None
Expand Down
6 changes: 3 additions & 3 deletions src/sage/matrix/matrix2.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ from sage.misc.verbose import verbose, get_verbose
from sage.categories.fields import Fields
from sage.categories.integral_domains import IntegralDomains
from sage.rings.ring import is_Ring
from sage.rings.number_field.number_field_base import is_NumberField
from sage.rings.number_field.number_field_base import NumberField
from sage.rings.integer_ring import ZZ, is_IntegerRing
from sage.rings.integer import Integer
from sage.rings.rational_field import QQ, is_RationalField
Expand Down Expand Up @@ -4457,7 +4457,7 @@ cdef class Matrix(Matrix1):
raise ValueError("'padic' matrix kernel algorithm only available over the rationals and the integers, not over %s" % R)
elif algorithm == 'flint' and not (is_IntegerRing(R) or is_RationalField(R)):
raise ValueError("'flint' matrix kernel algorithm only available over the rationals and the integers, not over %s" % R)
elif algorithm == 'pari' and not (is_IntegerRing(R) or (is_NumberField(R) and not is_RationalField(R))):
elif algorithm == 'pari' and not (is_IntegerRing(R) or (isinstance(R, NumberField) and not is_RationalField(R))):
raise ValueError("'pari' matrix kernel algorithm only available over non-trivial number fields and the integers, not over %s" % R)
elif algorithm == 'generic' and R not in _Fields:
raise ValueError("'generic' matrix kernel algorithm only available over a field, not over %s" % R)
Expand Down Expand Up @@ -4514,7 +4514,7 @@ cdef class Matrix(Matrix1):
except AttributeError:
pass

if M is None and is_NumberField(R):
if M is None and isinstance(R, NumberField):
format, M = self._right_kernel_matrix_over_number_field()

if M is None and R in _Fields:
Expand Down
7 changes: 3 additions & 4 deletions src/sage/modular/dirichlet.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@
import sage.misc.prandom as random
import sage.modules.free_module_element as free_module_element
import sage.rings.abc
import sage.rings.number_field.number_field as number_field

from sage.arith.functions import lcm
from sage.arith.misc import bernoulli, kronecker, factor, gcd, fundamental_discriminant, euler_phi, valuation
Expand All @@ -77,7 +76,7 @@
from sage.rings.finite_rings.integer_mod_ring import IntegerModRing
from sage.rings.integer import Integer
from sage.rings.integer_ring import ZZ
from sage.rings.number_field.number_field import CyclotomicField
from sage.rings.number_field.number_field import CyclotomicField, NumberField, NumberField_generic
from sage.rings.power_series_ring import PowerSeriesRing
from sage.rings.rational_field import RationalField, QQ, is_RationalField
from sage.rings.ring import is_Ring
Expand Down Expand Up @@ -1039,7 +1038,7 @@ def fixed_field(self):
sage: psi.fixed_field()
Number Field in a with defining polynomial x^5 + x^4 - 12*x^3 - 21*x^2 + x + 5
"""
return number_field.NumberField(self.fixed_field_polynomial(), 'a')
return NumberField(self.fixed_field_polynomial(), 'a')

@cached_method
def decomposition(self):
Expand Down Expand Up @@ -1903,7 +1902,7 @@ def minimize_base_ring(self):
K = IntegerModRing(p)
elif self.order() <= 2:
K = QQ
elif (isinstance(R, number_field.NumberField_generic)
elif (isinstance(R, NumberField_generic)
and euler_phi(self.order()) < R.absolute_degree()):
K = CyclotomicField(self.order())
else:
Expand Down
4 changes: 2 additions & 2 deletions src/sage/modular/modsym/space.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
from sage.rings.integer_ring import ZZ
from sage.rings.integer import Integer
from sage.rings.infinity import infinity
from sage.rings.number_field.number_field_base import is_NumberField
from sage.rings.number_field.number_field_base import NumberField
from sage.rings.power_series_ring import PowerSeriesRing
from sage.rings.rational_field import QQ
from sage.structure.all import Sequence, SageObject
Expand Down Expand Up @@ -1046,7 +1046,7 @@ def _q_expansion_module_rational(self, prec):
if not self.is_cuspidal():
raise ValueError("self must be cuspidal")
K = self.base_ring()
if not is_NumberField(K):
if not isinstance(K, NumberField):
raise TypeError("self must be over QQ or a number field.")
n = K.degree()
if n == 1:
Expand Down
6 changes: 3 additions & 3 deletions src/sage/rings/morphism.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -3162,7 +3162,7 @@ def _tensor_product_ring(B, A):
ValueError: term ordering must be global
"""
from .finite_rings.finite_field_base import FiniteField
from .number_field.number_field_base import is_NumberField
from .number_field.number_field_base import NumberField
from .polynomial.multi_polynomial_ring import is_MPolynomialRing
from .polynomial.polynomial_quotient_ring import is_PolynomialQuotientRing
from .polynomial.polynomial_ring import is_PolynomialRing
Expand All @@ -3179,7 +3179,7 @@ def _tensor_product_ring(B, A):
def term_order(A):
# univariate rings do not have a term order
if (is_PolynomialRing(A) or is_PolynomialQuotientRing(A)
or ((is_NumberField(A) or isinstance(A, FiniteField))
or (isinstance(A, (NumberField, FiniteField))
and not A.is_prime_field())):
return TermOrder('lex', 1)
try:
Expand All @@ -3202,7 +3202,7 @@ def _tensor_product_ring(B, A):
elif is_QuotientRing(A):
to_R = A.ambient().hom(R_gens_A, R, check=False)
return list(to_R(A.defining_ideal()).gens())
elif ((is_NumberField(A) or isinstance(A, FiniteField))
elif (isinstance(A, (NumberField, FiniteField))
and not A.is_prime_field()):
to_R = A.polynomial_ring().hom(R_gens_A, R, check=False)
return [to_R(A.polynomial())]
Expand Down
6 changes: 3 additions & 3 deletions src/sage/rings/number_field/number_field.py
Original file line number Diff line number Diff line change
Expand Up @@ -918,10 +918,10 @@ def QuadraticField(D, name='a', check=True, embedding=True, latex_name='sqrt', *

::

sage: from sage.rings.number_field.number_field import is_NumberField
sage: from sage.rings.number_field.number_field_base import NumberField
sage: type(K)
<class 'sage.rings.number_field.number_field.NumberField_quadratic_with_category'>
sage: is_NumberField(K)
sage: isinstance(K, NumberField)
True

Quadratic number fields are cached::
Expand Down Expand Up @@ -8308,7 +8308,7 @@ def _coerce_map_from_(self, R):
if is_NumberFieldOrder(R) and self.has_coerce_map_from(R.number_field()):
return self._generic_coerce_map(R)
# R is not QQ by the above tests
if is_NumberField(R) and R.coerce_embedding() is not None:
if isinstance(R, number_field_base.NumberField) and R.coerce_embedding() is not None:
if self.coerce_embedding() is not None:
try:
return number_field_morphisms.EmbeddedNumberFieldMorphism(R, self)
Expand Down
20 changes: 16 additions & 4 deletions src/sage/rings/number_field/number_field_base.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -11,29 +11,41 @@ TESTS::

def is_NumberField(x):
"""
Return True if x is of number field type.
Return True if ``x`` is of number field type.

This function is deprecated.

EXAMPLES::

sage: from sage.rings.number_field.number_field_base import is_NumberField
sage: is_NumberField(NumberField(x^2+1,'a'))
sage: is_NumberField(NumberField(x^2 + 1, 'a'))
doctest:...: DeprecationWarning: the function is_NumberField is deprecated; use
isinstance(x, sage.rings.number_field.number_field_base.NumberField) instead
See https://github.com/sagemath/sage/issues/35283 for details.
True
sage: is_NumberField(QuadraticField(-97,'theta'))
sage: is_NumberField(QuadraticField(-97, 'theta'))
True
sage: is_NumberField(CyclotomicField(97))
True

Note that the rational numbers QQ are a number field.::
Note that the rational numbers ``QQ`` are a number field.::

sage: is_NumberField(QQ)
True
sage: is_NumberField(ZZ)
False
"""
from sage.misc.superseded import deprecation
deprecation(35283,
"the function is_NumberField is deprecated; use "
"isinstance(x, sage.rings.number_field.number_field_base.NumberField) instead")

return isinstance(x, NumberField)


from sage.rings.ring cimport Field


cdef class NumberField(Field):
r"""
Base class for all number fields.
Expand Down
8 changes: 4 additions & 4 deletions src/sage/rings/number_field/number_field_element.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -1672,8 +1672,8 @@ cdef class NumberFieldElement(NumberFieldElement_base):
return self.is_norm(L, element=True, proof=proof)[0]

K = self.parent()
from sage.rings.number_field.number_field_base import is_NumberField
if not is_NumberField(L):
from sage.rings.number_field.number_field_base import NumberField
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
Expand Down Expand Up @@ -3812,8 +3812,8 @@ cdef class NumberFieldElement(NumberFieldElement_base):
if base is self.parent():
return MatrixSpace(base,1)([self])
if base is not None and base is not self.base_ring():
from sage.rings.number_field.number_field_base import is_NumberField
if is_NumberField(base):
from sage.rings.number_field.number_field_base import NumberField
if isinstance(base, NumberField):
return self._matrix_over_base(base)
else:
return self._matrix_over_base_morphism(base)
Expand Down
4 changes: 2 additions & 2 deletions src/sage/rings/number_field/number_field_rel.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@
from .number_field import (NumberField, NumberField_generic,
put_natural_embedding_first, proof_flag,
is_NumberFieldHomsetCodomain)
from sage.rings.number_field.number_field_base import is_NumberField
from sage.rings.number_field.number_field_base import NumberField as NumberField_base
from sage.rings.number_field.order import (RelativeOrder, is_NumberFieldOrder,
relative_order_from_ring_generators)
from sage.rings.number_field.morphism import RelativeNumberFieldHomomorphism_from_abs
Expand Down Expand Up @@ -277,7 +277,7 @@ def __init__(self, base, polynomial, name,
raise NotImplementedError("Embeddings not implemented for relative number fields")
if names is not None:
name = names
if not is_NumberField(base):
if not isinstance(base, NumberField_base):
raise TypeError("base (=%s) must be a number field"%base)
if not isinstance(polynomial, polynomial_element.Polynomial):
try:
Expand Down
16 changes: 8 additions & 8 deletions src/sage/rings/padics/padic_valuation.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ def create_key_and_extra_args(self, R, prime=None, approximants=None):
from sage.rings.integer_ring import ZZ
from sage.rings.rational_field import QQ
from sage.rings.padics.padic_generic import pAdicGeneric
from sage.rings.number_field.number_field import is_NumberField
from sage.rings.number_field.number_field_base import NumberField
from sage.rings.polynomial.polynomial_quotient_ring import is_PolynomialQuotientRing

if R.characteristic() != 0:
Expand All @@ -133,7 +133,7 @@ def create_key_and_extra_args(self, R, prime=None, approximants=None):
return self.create_key_for_integers(R, prime), {}
elif isinstance(R, pAdicGeneric):
return self.create_key_for_local_ring(R, prime), {}
elif is_NumberField(R.fraction_field()) or is_PolynomialQuotientRing(R):
elif isinstance(R.fraction_field(), NumberField) or is_PolynomialQuotientRing(R):
return self.create_key_and_extra_args_for_number_field(R, prime, approximants=approximants)
else:
raise NotImplementedError("p-adic valuations not implemented for %r"%(R,))
Expand Down Expand Up @@ -362,8 +362,8 @@ def _normalize_number_field_data(self, R):

"""
from sage.rings.polynomial.polynomial_quotient_ring import is_PolynomialQuotientRing
from sage.rings.number_field.number_field import is_NumberField
if is_NumberField(R.fraction_field()):
from sage.rings.number_field.number_field_base import NumberField
if isinstance(R.fraction_field(), NumberField):
L = R.fraction_field()
G = L.relative_polynomial()
K = L.base_ring()
Expand Down Expand Up @@ -395,7 +395,7 @@ def create_object(self, version, key, **extra_args):
from sage.rings.padics.padic_generic import pAdicGeneric
from sage.rings.valuation.valuation_space import DiscretePseudoValuationSpace
from sage.rings.polynomial.polynomial_quotient_ring import is_PolynomialQuotientRing
from sage.rings.number_field.number_field import is_NumberField
from sage.rings.number_field.number_field_base import NumberField
R = key[0]
parent = DiscretePseudoValuationSpace(R)
if isinstance(R, pAdicGeneric):
Expand All @@ -410,7 +410,7 @@ def create_object(self, version, key, **extra_args):
approximants = extra_args['approximants']
parent = DiscretePseudoValuationSpace(R)
K = R.fraction_field()
if is_NumberField(K):
if isinstance(K, NumberField):
G = K.relative_polynomial()
elif is_PolynomialQuotientRing(R):
G = R.modulus()
Expand Down Expand Up @@ -803,8 +803,8 @@ def extensions(self, ring):
return self._extensions_to_quotient(ring)
elif self.domain().is_subring(ring.base_ring()):
return sum([w.extensions(ring) for w in self.extensions(ring.base_ring())], [])
from sage.rings.number_field.number_field import is_NumberField
if is_NumberField(ring.fraction_field()):
from sage.rings.number_field.number_field_base import NumberField
if isinstance(ring.fraction_field(), NumberField):
if ring.base_ring().fraction_field() is self.domain().fraction_field():
approximants = self.mac_lane_approximants(ring.fraction_field().relative_polynomial().change_ring(self.domain()), assume_squarefree=True, require_incomparability=True)
return [pAdicValuation(ring, approximant, approximants) for approximant in approximants]
Expand Down
12 changes: 9 additions & 3 deletions src/sage/rings/polynomial/multi_polynomial_element.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,6 @@

from sage.rings.rational_field import QQ
from sage.rings.fraction_field import FractionField
from sage.rings.number_field.order import is_NumberFieldOrder
from sage.categories.number_fields import NumberFields
from sage.rings.real_mpfr import RealField


class MPolynomial_element(MPolynomial):
Expand Down Expand Up @@ -1078,8 +1075,11 @@ def global_height(self, prec=None):
prec = 53

if self.is_zero():
from sage.rings.real_mpfr import RealField
return RealField(prec).zero()

from sage.rings.number_field.order import is_NumberFieldOrder
from sage.categories.number_fields import NumberFields
from sage.rings.qqbar import QQbar, number_field_elements_from_algebraics

K = self.base_ring()
Expand Down Expand Up @@ -1135,6 +1135,9 @@ def local_height(self, v, prec=None):
sage: f.local_height(2, prec=2)
0.75
"""
from sage.rings.number_field.order import is_NumberFieldOrder
from sage.categories.number_fields import NumberFields

if prec is None:
prec = 53

Expand Down Expand Up @@ -1183,6 +1186,9 @@ def local_height_arch(self, i, prec=None):
sage: f.local_height_arch(0, prec=2)
1.0
"""
from sage.rings.number_field.order import is_NumberFieldOrder
from sage.categories.number_fields import NumberFields

if prec is None:
prec = 53

Expand Down
Loading