diff --git a/src/.relint.yml b/src/.relint.yml index 86684ad1040..617c086c109 100644 --- a/src/.relint.yml +++ b/src/.relint.yml @@ -49,6 +49,6 @@ Hint: namespace package. Type import_statements("SOME_IDENTIFIER") to find a more specific import, Hint: or use 'sage --fiximports' to fix automatically in the source file. # Keep in sync with SAGE_ROOT/src/sage/misc/replace_dot_all.py - pattern: 'from\s+sage(|[.](arith|categories|combinat|ext|graphs(|[.]decompositions)|interfaces|libs|matrix|misc|numerical(|[.]backends)|rings|sets))[.]all\s+import' + pattern: 'from\s+sage(|[.](arith|categories|combinat|ext|graphs(|[.]decompositions)|interfaces|libs|matrix|misc|numerical(|[.]backends)|rings(|[.]finite_rings)|sets))[.]all\s+import' filePattern: '.*[.](py|pyx|pxi)$' error: false # Make this a warning instead of an error for now diff --git a/src/sage/arith/multi_modular.pyx b/src/sage/arith/multi_modular.pyx index 2958315c346..766c9923404 100644 --- a/src/sage/arith/multi_modular.pyx +++ b/src/sage/arith/multi_modular.pyx @@ -16,7 +16,7 @@ from cysignals.memory cimport check_allocarray, check_reallocarray, sig_free from sage.libs.gmp.mpz cimport * from sage.rings.integer cimport Integer, smallInteger -from sage.arith.all import random_prime +from sage.arith.misc import random_prime from types import GeneratorType from sage.ext.stdsage cimport PY_NEW from cpython.object cimport PyObject_RichCompare diff --git a/src/sage/arith/numerical_approx.pyx b/src/sage/arith/numerical_approx.pyx index b53d7679099..005b88621c4 100644 --- a/src/sage/arith/numerical_approx.pyx +++ b/src/sage/arith/numerical_approx.pyx @@ -15,7 +15,9 @@ Generic numerical approximation function from sage.structure.parent cimport Parent from sage.structure.element cimport parent cdef Parent CDF -from sage.rings.all import RealField, ComplexField, CDF +from sage.rings.real_mpfr import RealField +from sage.rings.complex_mpfr import ComplexField +from sage.rings.complex_double import CDF def numerical_approx_generic(x, prec): diff --git a/src/sage/crypto/boolean_function.pyx b/src/sage/crypto/boolean_function.pyx index 13b8a1c82a1..adb2405457e 100644 --- a/src/sage/crypto/boolean_function.pyx +++ b/src/sage/crypto/boolean_function.pyx @@ -38,8 +38,7 @@ from sage.rings.integer_ring import ZZ from sage.rings.integer cimport Integer from sage.rings.finite_rings.finite_field_constructor import GF from sage.rings.polynomial.pbori.pbori import BooleanPolynomial -from sage.rings.finite_rings.finite_field_constructor import is_FiniteField -from sage.rings.finite_rings.finite_field_givaro import FiniteField_givaro +from sage.rings.finite_rings.finite_field_base import FiniteField from sage.rings.polynomial.polynomial_element import Polynomial from sage.misc.superseded import deprecated_function_alias @@ -329,11 +328,15 @@ cdef class BooleanFunction(SageObject): elif isinstance(x, Polynomial): K = x.base_ring() - if is_FiniteField(K) and K.characteristic() == 2: + if isinstance(K, FiniteField) and K.characteristic() == 2: self._nvariables = K.degree() bitset_init(self._truth_table, (1< = CC[] - sage: f = z^5 - 1 + sage: f = z^5 - 1 sage: general_julia(f) 500x500px 24-bit RGB image """ diff --git a/src/sage/groups/cubic_braid.py b/src/sage/groups/cubic_braid.py index a9465ef2b3d..206eedb1856 100644 --- a/src/sage/groups/cubic_braid.py +++ b/src/sage/groups/cubic_braid.py @@ -1543,10 +1543,10 @@ def as_matrix_group(self, root_bur=None, domain=None, characteristic=None, var=' self._classical_invariant_form = herm_form if unitary: - from sage.rings.finite_rings.finite_field_base import is_FiniteField + from sage.rings.finite_rings.finite_field_base import FiniteField from sage.groups.matrix_gps.unitary import GU d, d = herm_form.dimensions() - if is_FiniteField(domain): + if isinstance(domain, FiniteField): base_group = GU(d, domain, var=domain.gen(), invariant_form=herm_form) else: base_group = GU(d, domain, invariant_form=herm_form) diff --git a/src/sage/groups/matrix_gps/orthogonal.py b/src/sage/groups/matrix_gps/orthogonal.py index 8ff96051a8b..242c3f42529 100644 --- a/src/sage/groups/matrix_gps/orthogonal.py +++ b/src/sage/groups/matrix_gps/orthogonal.py @@ -85,7 +85,7 @@ # **************************************************************************** from sage.rings.integer_ring import ZZ -from sage.rings.finite_rings.finite_field_base import is_FiniteField +from sage.rings.finite_rings.finite_field_base import FiniteField from sage.misc.latex import latex from sage.misc.cachefunc import cached_method from sage.groups.matrix_gps.named_group import ( @@ -127,7 +127,7 @@ def normalize_args_e(degree, ring, e): ... ValueError: must have e=-1 or e=1 for even degree """ - if is_FiniteField(ring) and degree%2 == 0: + if isinstance(ring, FiniteField) and degree%2 == 0: if e not in (-1, +1): raise ValueError('must have e=-1 or e=1 for even degree') else: @@ -171,7 +171,7 @@ def _OG(n, R, special, e=0, var='a', invariant_form=None): e = normalize_args_e(degree, ring, e) if invariant_form is not None: - if is_FiniteField(ring): + if isinstance(ring, FiniteField): raise NotImplementedError("invariant_form for finite groups is fixed by GAP") if e == 0: @@ -202,7 +202,7 @@ def _OG(n, R, special, e=0, var='a', invariant_form=None): latex(ring), '+' if e == 1 else '-') - if is_FiniteField(ring): + if isinstance(ring, FiniteField): cmd = '{0}O({1}, {2}, {3})'.format(ltx_prefix, e, degree, ring.order()) return OrthogonalMatrixGroup_gap(degree, ring, False, name, ltx, cmd) else: diff --git a/src/sage/groups/matrix_gps/symplectic.py b/src/sage/groups/matrix_gps/symplectic.py index 3715f531913..8dd041af286 100644 --- a/src/sage/groups/matrix_gps/symplectic.py +++ b/src/sage/groups/matrix_gps/symplectic.py @@ -42,7 +42,7 @@ from sage.misc.latex import latex from sage.misc.cachefunc import cached_method -from sage.rings.finite_rings.finite_field_base import is_FiniteField +from sage.rings.finite_rings.finite_field_base import FiniteField from sage.groups.matrix_gps.named_group import ( normalize_args_vectorspace, normalize_args_invariant_form, NamedMatrixGroup_generic, NamedMatrixGroup_gap) @@ -145,7 +145,7 @@ def Sp(n, R, var='a', invariant_form=None): raise ValueError('the degree must be even') if invariant_form is not None: - if is_FiniteField(ring): + if isinstance(ring, FiniteField): raise NotImplementedError("invariant_form for finite groups is fixed by GAP") invariant_form = normalize_args_invariant_form(ring, degree, invariant_form) diff --git a/src/sage/groups/matrix_gps/unitary.py b/src/sage/groups/matrix_gps/unitary.py index f4d8df525be..d8919f82695 100644 --- a/src/sage/groups/matrix_gps/unitary.py +++ b/src/sage/groups/matrix_gps/unitary.py @@ -50,7 +50,7 @@ # **************************************************************************** from sage.rings.finite_rings.finite_field_constructor import GF -from sage.rings.finite_rings.finite_field_base import is_FiniteField +from sage.rings.finite_rings.finite_field_base import FiniteField from sage.misc.latex import latex from sage.misc.cachefunc import cached_method from sage.groups.matrix_gps.named_group import ( @@ -77,7 +77,7 @@ def finite_field_sqrt(ring): sage: finite_field_sqrt(GF(4, 'a')) 2 """ - if not is_FiniteField(ring): + if not isinstance(ring, FiniteField): raise ValueError('not a finite field') q, rem = ring.cardinality().sqrtrem() if rem: @@ -107,7 +107,7 @@ def _UG(n, R, special, var='a', invariant_form=None): latex_prefix ='S' degree, ring = normalize_args_vectorspace(n, R, var=var) - if is_FiniteField(ring): + if isinstance(ring, FiniteField): q = ring.cardinality() ring = GF(q**2, name=var) if invariant_form is not None: @@ -134,7 +134,7 @@ def _UG(n, R, special, var='a', invariant_form=None): name = '{0} Unitary Group of degree {1} over {2}'.format(prefix, degree, ring) ltx = r'\text{{{0}U}}_{{{1}}}({2})'.format(latex_prefix, degree, latex(ring)) - if is_FiniteField(ring): + if isinstance(ring, FiniteField): cmd = '{0}U({1}, {2})'.format(latex_prefix, degree, q) return UnitaryMatrixGroup_gap(degree, ring, special, name, ltx, cmd) else: diff --git a/src/sage/interfaces/gap.py b/src/sage/interfaces/gap.py index a38d2bd6d02..a87decbabbb 100644 --- a/src/sage/interfaces/gap.py +++ b/src/sage/interfaces/gap.py @@ -1753,7 +1753,7 @@ def intmod_gap_to_sage(x): sage: b.parent() Ring of integers modulo 65537 """ - from sage.rings.finite_rings.all import FiniteField + from sage.rings.finite_rings.finite_field_constructor import FiniteField from sage.rings.finite_rings.integer_mod import Mod from sage.rings.integer import Integer s = str(x) diff --git a/src/sage/lfunctions/dokchitser.py b/src/sage/lfunctions/dokchitser.py index c526b9321a4..58499396d6c 100644 --- a/src/sage/lfunctions/dokchitser.py +++ b/src/sage/lfunctions/dokchitser.py @@ -33,7 +33,7 @@ import string from sage.structure.sage_object import SageObject -from sage.rings.all import ComplexField +from sage.rings.complex_mpfr import ComplexField from sage.rings.integer import Integer from sage.misc.sage_eval import sage_eval from sage.misc.verbose import verbose diff --git a/src/sage/lfunctions/pari.py b/src/sage/lfunctions/pari.py index f75b232e595..bbf289aa21c 100644 --- a/src/sage/lfunctions/pari.py +++ b/src/sage/lfunctions/pari.py @@ -22,7 +22,10 @@ from cypari2.gen import Gen from sage.libs.pari import pari from sage.structure.sage_object import SageObject -from sage.rings.all import (ZZ, RealField, ComplexField, PowerSeriesRing) +from sage.rings.integer_ring import ZZ +from sage.rings.real_mpfr import RealField +from sage.rings.complex_mpfr import ComplexField +from sage.rings.power_series_ring import PowerSeriesRing class lfun_generic(): diff --git a/src/sage/lfunctions/zero_sums.pyx b/src/sage/lfunctions/zero_sums.pyx index 2b0ca332b2a..1b584caec25 100644 --- a/src/sage/lfunctions/zero_sums.pyx +++ b/src/sage/lfunctions/zero_sums.pyx @@ -18,20 +18,21 @@ AUTHORS: # https://www.gnu.org/licenses/ # **************************************************************************** -from sage.structure.sage_object cimport SageObject -from sage.rings.integer_ring import ZZ -from sage.rings.real_double import RDF -from sage.rings.complex_double import CDF -from sage.rings.infinity import PlusInfinity -from sage.arith.all import prime_powers, next_prime +from sage.arith.misc import next_prime, prime_powers from sage.functions.log import log, exp from sage.functions.other import real, imag -from sage.symbolic.constants import pi, euler_gamma +from sage.libs.flint.ulong_extras cimport n_is_prime from sage.libs.pari.all import pari from sage.misc.verbose import verbose from sage.parallel.decorate import parallel from sage.parallel.ncpus import ncpus as num_cpus -from sage.libs.flint.ulong_extras cimport n_is_prime +from sage.rings.complex_double import CDF +from sage.rings.infinity import PlusInfinity +from sage.rings.integer_ring import ZZ +from sage.rings.real_double import RDF +from sage.structure.sage_object cimport SageObject +from sage.symbolic.constants import euler_gamma, pi + cdef extern from "": double c_exp "exp"(double) diff --git a/src/sage/matrix/matrix_space.py b/src/sage/matrix/matrix_space.py index afd06c9db20..3a48b7bccbe 100644 --- a/src/sage/matrix/matrix_space.py +++ b/src/sage/matrix/matrix_space.py @@ -43,7 +43,7 @@ from sage.structure.parent import Parent from sage.structure.unique_representation import UniqueRepresentation import sage.rings.integer as integer -import sage.rings.finite_rings.finite_field_constructor +from sage.rings.finite_rings.finite_field_base import FiniteField import sage.misc.latex as latex import sage.modules.free_module @@ -223,7 +223,7 @@ def get_matrix_class(R, nrows, ncols, sparse, implementation): else: return matrix_complex_double_dense.Matrix_complex_double_dense - elif sage.rings.finite_rings.finite_field_constructor.is_FiniteField(R): + elif isinstance(R, FiniteField): if R.order() == 2: try: from . import matrix_mod2_dense diff --git a/src/sage/modules/free_module.py b/src/sage/modules/free_module.py index 743fc2fbbcc..41bd5633503 100644 --- a/src/sage/modules/free_module.py +++ b/src/sage/modules/free_module.py @@ -183,7 +183,6 @@ import sage.misc.latex as latex from sage.modules.module import Module -import sage.rings.finite_rings.finite_field_constructor as finite_field import sage.rings.ring as ring import sage.rings.abc import sage.rings.integer_ring @@ -195,6 +194,7 @@ from sage.categories.infinite_enumerated_sets import InfiniteEnumeratedSets from sage.misc.lazy_attribute import lazy_attribute from sage.misc.randstate import current_randstate +from sage.rings.finite_rings.finite_field_base import FiniteField from sage.structure.factory import UniqueFactory from sage.structure.sequence import Sequence from sage.structure.richcmp import (richcmp_method, rich_to_bool, richcmp, @@ -6348,7 +6348,7 @@ def _element_constructor_(self, e, *args, **kwds): """ try: k = e.parent() - if finite_field.is_FiniteField(k) and k.base_ring() == self.base_ring() and k.degree() == self.degree(): + if isinstance(k, FiniteField) and k.base_ring() == self.base_ring() and k.degree() == self.degree(): return self(e._vector_()) except AttributeError: pass diff --git a/src/sage/quadratic_forms/binary_qf.py b/src/sage/quadratic_forms/binary_qf.py index 6eebe6f0c46..4b85ad40ed7 100755 --- a/src/sage/quadratic_forms/binary_qf.py +++ b/src/sage/quadratic_forms/binary_qf.py @@ -52,8 +52,9 @@ from functools import total_ordering from sage.libs.pari.all import pari_gen -from sage.rings.all import ZZ, is_fundamental_discriminant -from sage.arith.all import gcd +from sage.rings.integer_ring import ZZ +from sage.rings.number_field.number_field import is_fundamental_discriminant +from sage.arith.misc import gcd from sage.structure.sage_object import SageObject from sage.matrix.matrix_space import MatrixSpace from sage.matrix.constructor import Matrix @@ -1528,7 +1529,7 @@ def small_prime_value(self, Bmax=1000): sage: [Q.small_prime_value() for Q in BinaryQF_reduced_representatives(-47, primitive_only=True)] [47, 2, 2, 3, 3] """ - from sage.sets.all import Set + from sage.sets.set import Set from sage.arith.srange import xsrange B = 10 while True: diff --git a/src/sage/quadratic_forms/count_local_2.pyx b/src/sage/quadratic_forms/count_local_2.pyx index 36b6b9d593c..299554de655 100644 --- a/src/sage/quadratic_forms/count_local_2.pyx +++ b/src/sage/quadratic_forms/count_local_2.pyx @@ -2,13 +2,11 @@ r""" Optimized counting of congruence solutions """ -from sage.arith.all import valuation, kronecker_symbol, is_prime +from sage.arith.misc import is_prime, kronecker as kronecker_symbol, valuation +from sage.rings.finite_rings.integer_mod cimport IntegerMod_gmp from sage.rings.finite_rings.integer_mod import Mod from sage.rings.finite_rings.integer_mod_ring import IntegerModRing - from sage.rings.integer_ring import ZZ - -from sage.rings.finite_rings.integer_mod cimport IntegerMod_gmp from sage.sets.set import Set diff --git a/src/sage/quadratic_forms/extras.py b/src/sage/quadratic_forms/extras.py index be7f05b0439..e042d3c037f 100644 --- a/src/sage/quadratic_forms/extras.py +++ b/src/sage/quadratic_forms/extras.py @@ -4,7 +4,7 @@ from sage.matrix.constructor import matrix from sage.structure.element import is_Matrix -from sage.arith.all import legendre_symbol +from sage.arith.misc import legendre_symbol from sage.rings.integer_ring import ZZ diff --git a/src/sage/quadratic_forms/genera/genus.py b/src/sage/quadratic_forms/genera/genus.py index 5451df7ae29..51d4b82d339 100644 --- a/src/sage/quadratic_forms/genera/genus.py +++ b/src/sage/quadratic_forms/genera/genus.py @@ -22,7 +22,8 @@ from sage.misc.lazy_import import lazy_import from sage.misc.misc_c import prod from sage.misc.cachefunc import cached_method -from sage.arith.all import LCM, fundamental_discriminant +from sage.arith.functions import lcm as LCM +from sage.arith.misc import fundamental_discriminant from sage.matrix.matrix_space import MatrixSpace from sage.matrix.constructor import matrix from sage.rings.integer_ring import IntegerRing, ZZ diff --git a/src/sage/quadratic_forms/genera/normal_form.py b/src/sage/quadratic_forms/genera/normal_form.py index bebd2478ec4..616cc5c516b 100644 --- a/src/sage/quadratic_forms/genera/normal_form.py +++ b/src/sage/quadratic_forms/genera/normal_form.py @@ -87,7 +87,9 @@ # https://www.gnu.org/licenses/ # **************************************************************************** -from sage.rings.all import Zp, ZZ, GF +from sage.rings.padics.factory import Zp +from sage.rings.integer_ring import ZZ +from sage.rings.finite_rings.finite_field_constructor import FiniteField as GF from sage.matrix.constructor import Matrix from copy import copy from sage.rings.finite_rings.integer_mod import mod diff --git a/src/sage/quadratic_forms/genera/spinor_genus.py b/src/sage/quadratic_forms/genera/spinor_genus.py index e42e4b6e361..8e77961b864 100644 --- a/src/sage/quadratic_forms/genera/spinor_genus.py +++ b/src/sage/quadratic_forms/genera/spinor_genus.py @@ -27,7 +27,8 @@ from sage.groups.abelian_gps.abelian_group_gap import (AbelianGroupGap, AbelianGroupElement_gap) -from sage.rings.all import ZZ, QQ +from sage.rings.integer_ring import ZZ +from sage.rings.rational_field import QQ class SpinorOperator(AbelianGroupElement_gap): diff --git a/src/sage/quadratic_forms/qfsolve.py b/src/sage/quadratic_forms/qfsolve.py index d5e15d9f83e..82b22328818 100644 --- a/src/sage/quadratic_forms/qfsolve.py +++ b/src/sage/quadratic_forms/qfsolve.py @@ -26,7 +26,9 @@ # http://www.gnu.org/licenses/ #***************************************************************************** -from sage.rings.all import ZZ, QQ, Integer +from sage.rings.integer_ring import ZZ +from sage.rings.rational_field import QQ +from sage.rings.integer import Integer from sage.modules.free_module_element import vector from sage.matrix.constructor import Matrix diff --git a/src/sage/quadratic_forms/quadratic_form.py b/src/sage/quadratic_forms/quadratic_form.py index 47f3d8be23e..4541759d86c 100644 --- a/src/sage/quadratic_forms/quadratic_form.py +++ b/src/sage/quadratic_forms/quadratic_form.py @@ -27,8 +27,10 @@ from sage.rings.integer_ring import IntegerRing, ZZ from sage.rings.ring import Ring from sage.misc.functional import denominator, is_even -from sage.arith.all import GCD, LCM -from sage.rings.all import Ideal, QQ +from sage.arith.misc import GCD +from sage.arith.functions import lcm as LCM +from sage.rings.ideal import Ideal +from sage.rings.rational_field import QQ from sage.rings.ring import is_Ring, PrincipalIdealDomain from sage.structure.element import is_Vector from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing diff --git a/src/sage/quadratic_forms/quadratic_form__automorphisms.py b/src/sage/quadratic_forms/quadratic_form__automorphisms.py index 3d72cf3be11..48a473f44c4 100644 --- a/src/sage/quadratic_forms/quadratic_form__automorphisms.py +++ b/src/sage/quadratic_forms/quadratic_form__automorphisms.py @@ -14,7 +14,7 @@ from sage.modules.all import FreeModule from sage.modules.free_module_element import vector -from sage.arith.all import GCD +from sage.arith.misc import GCD @cached_method diff --git a/src/sage/quadratic_forms/quadratic_form__equivalence_testing.py b/src/sage/quadratic_forms/quadratic_form__equivalence_testing.py index b69bb6abf9d..3175126556d 100644 --- a/src/sage/quadratic_forms/quadratic_form__equivalence_testing.py +++ b/src/sage/quadratic_forms/quadratic_form__equivalence_testing.py @@ -5,11 +5,16 @@ - Anna Haensch (2014-12-01): added test for rational isometry """ -from sage.arith.all import hilbert_symbol, prime_divisors, is_prime, valuation, GCD, legendre_symbol -from sage.rings.integer_ring import ZZ -from sage.rings.rational_field import QQ +from sage.arith.misc import (hilbert_symbol, + GCD, + is_prime, + legendre_symbol, + prime_divisors, + valuation) from sage.quadratic_forms.quadratic_form import is_QuadraticForm +from sage.rings.integer_ring import ZZ +from sage.rings.rational_field import QQ ############################################################################## diff --git a/src/sage/quadratic_forms/quadratic_form__genus.py b/src/sage/quadratic_forms/quadratic_form__genus.py index 18a02061029..30bd73145f9 100644 --- a/src/sage/quadratic_forms/quadratic_form__genus.py +++ b/src/sage/quadratic_forms/quadratic_form__genus.py @@ -7,9 +7,9 @@ # # ############################################################# +from sage.arith.misc import is_prime, prime_divisors from sage.quadratic_forms.genera.genus import Genus, LocalGenusSymbol from sage.rings.integer_ring import ZZ -from sage.arith.all import is_prime, prime_divisors def global_genus_symbol(self): diff --git a/src/sage/quadratic_forms/quadratic_form__local_density_congruence.py b/src/sage/quadratic_forms/quadratic_form__local_density_congruence.py index 71872a37b8e..bf09113ae73 100644 --- a/src/sage/quadratic_forms/quadratic_form__local_density_congruence.py +++ b/src/sage/quadratic_forms/quadratic_form__local_density_congruence.py @@ -10,7 +10,7 @@ from sage.sets.set import Set from sage.rings.rational_field import QQ -from sage.arith.all import valuation +from sage.arith.misc import valuation from sage.misc.verbose import verbose from sage.quadratic_forms.count_local_2 import count_modp__by_gauss_sum diff --git a/src/sage/quadratic_forms/quadratic_form__local_density_interfaces.py b/src/sage/quadratic_forms/quadratic_form__local_density_interfaces.py index aa4fb04ad63..2b8c1a455a4 100644 --- a/src/sage/quadratic_forms/quadratic_form__local_density_interfaces.py +++ b/src/sage/quadratic_forms/quadratic_form__local_density_interfaces.py @@ -4,7 +4,7 @@ # // This is needed in the filter for primitivity... # #include "../max-min.h" -from sage.arith.all import valuation +from sage.arith.misc import valuation from sage.rings.rational_field import QQ diff --git a/src/sage/quadratic_forms/quadratic_form__local_field_invariants.py b/src/sage/quadratic_forms/quadratic_form__local_field_invariants.py index 3556c101705..cf0589872a6 100644 --- a/src/sage/quadratic_forms/quadratic_form__local_field_invariants.py +++ b/src/sage/quadratic_forms/quadratic_form__local_field_invariants.py @@ -21,15 +21,15 @@ # places, is_semi_definite, and support for number fields. ########################################################################### - from copy import deepcopy -from sage.rings.integer_ring import ZZ -from sage.rings.rational_field import QQ -from sage.rings.real_mpfr import RR -from sage.arith.all import prime_divisors, hilbert_symbol + +from sage.arith.misc import hilbert_symbol, prime_divisors from sage.functions.all import sgn from sage.matrix.matrix_space import MatrixSpace from sage.misc.cachefunc import cached_method +from sage.rings.integer_ring import ZZ +from sage.rings.rational_field import QQ +from sage.rings.real_mpfr import RR def rational_diagonal_form(self, return_matrix=False): diff --git a/src/sage/quadratic_forms/quadratic_form__local_normal_form.py b/src/sage/quadratic_forms/quadratic_form__local_normal_form.py index 429c7c68896..2eb5839306d 100644 --- a/src/sage/quadratic_forms/quadratic_form__local_normal_form.py +++ b/src/sage/quadratic_forms/quadratic_form__local_normal_form.py @@ -21,7 +21,9 @@ from sage.rings.infinity import Infinity from sage.rings.integer_ring import IntegerRing, ZZ from sage.rings.rational_field import QQ -from sage.arith.all import GCD, valuation, is_prime +from sage.arith.misc import GCD +from sage.arith.misc import valuation +from sage.arith.misc import is_prime def find_entry_with_minimal_scale_at_prime(self, p): diff --git a/src/sage/quadratic_forms/quadratic_form__local_representation_conditions.py b/src/sage/quadratic_forms/quadratic_form__local_representation_conditions.py index 5d39650ecb4..661078d8788 100644 --- a/src/sage/quadratic_forms/quadratic_form__local_representation_conditions.py +++ b/src/sage/quadratic_forms/quadratic_form__local_representation_conditions.py @@ -8,7 +8,7 @@ from __future__ import annotations from copy import deepcopy -from sage.arith.all import prime_divisors, valuation, is_square +from sage.arith.misc import is_square, prime_divisors, valuation from sage.misc.functional import numerator, denominator from sage.quadratic_forms.extras import least_quadratic_nonresidue from sage.rings.infinity import infinity diff --git a/src/sage/quadratic_forms/quadratic_form__mass__Conway_Sloane_masses.py b/src/sage/quadratic_forms/quadratic_form__mass__Conway_Sloane_masses.py index 65c524db39a..551354251ce 100644 --- a/src/sage/quadratic_forms/quadratic_form__mass__Conway_Sloane_masses.py +++ b/src/sage/quadratic_forms/quadratic_form__mass__Conway_Sloane_masses.py @@ -1,12 +1,16 @@ """ Conway-Sloane masses """ +from sage.arith.misc import (fundamental_discriminant, + is_prime, + kronecker as kronecker_symbol, + legendre_symbol, + prime_divisors) +from sage.misc.misc_c import prod +from sage.quadratic_forms.special_values import gamma__exact, zeta__exact, quadratic_L_function__exact from sage.rings.integer_ring import ZZ from sage.rings.rational_field import QQ -from sage.arith.all import kronecker_symbol, legendre_symbol, prime_divisors, is_prime, fundamental_discriminant from sage.symbolic.constants import pi -from sage.misc.misc_c import prod -from sage.quadratic_forms.special_values import gamma__exact, zeta__exact, quadratic_L_function__exact def parity(self, allow_rescaling_flag=True): diff --git a/src/sage/quadratic_forms/quadratic_form__mass__Siegel_densities.py b/src/sage/quadratic_forms/quadratic_form__mass__Siegel_densities.py index 97b07023060..08b388d4285 100644 --- a/src/sage/quadratic_forms/quadratic_form__mass__Siegel_densities.py +++ b/src/sage/quadratic_forms/quadratic_form__mass__Siegel_densities.py @@ -12,17 +12,17 @@ import copy +from sage.arith.misc import kronecker, legendre_symbol, prime_divisors +from sage.functions.all import sgn +from sage.matrix.matrix_space import MatrixSpace +from sage.misc.functional import squarefree_part from sage.misc.misc_c import prod from sage.misc.mrange import mrange -from sage.rings.integer_ring import ZZ +from sage.quadratic_forms.special_values import gamma__exact, zeta__exact, quadratic_L_function__exact from sage.rings.finite_rings.integer_mod_ring import IntegerModRing +from sage.rings.integer_ring import ZZ from sage.rings.rational_field import QQ -from sage.arith.all import legendre_symbol, kronecker, prime_divisors -from sage.functions.all import sgn -from sage.quadratic_forms.special_values import gamma__exact, zeta__exact, quadratic_L_function__exact -from sage.misc.functional import squarefree_part from sage.symbolic.constants import pi -from sage.matrix.matrix_space import MatrixSpace def mass__by_Siegel_densities(self, odd_algorithm="Pall", even_algorithm="Watson"): diff --git a/src/sage/quadratic_forms/quadratic_form__neighbors.py b/src/sage/quadratic_forms/quadratic_form__neighbors.py index 96a5203101d..11065d861aa 100644 --- a/src/sage/quadratic_forms/quadratic_form__neighbors.py +++ b/src/sage/quadratic_forms/quadratic_form__neighbors.py @@ -4,7 +4,8 @@ from sage.modules.free_module_element import vector from sage.rings.integer_ring import ZZ -from sage.rings.all import GF, QQ +from sage.rings.finite_rings.finite_field_constructor import FiniteField as GF +from sage.rings.rational_field import QQ from copy import deepcopy from sage.matrix.constructor import matrix diff --git a/src/sage/quadratic_forms/quadratic_form__siegel_product.py b/src/sage/quadratic_forms/quadratic_form__siegel_product.py index 1cf72a23745..6c5118309c9 100644 --- a/src/sage/quadratic_forms/quadratic_form__siegel_product.py +++ b/src/sage/quadratic_forms/quadratic_form__siegel_product.py @@ -10,15 +10,15 @@ # http://www.gnu.org/licenses/ #***************************************************************************** -from sage.rings.integer_ring import ZZ -from sage.rings.rational_field import QQ -from sage.arith.all import kronecker_symbol, bernoulli, prime_divisors, fundamental_discriminant +from sage.arith.misc import (bernoulli, + fundamental_discriminant, + kronecker as kronecker_symbol, + prime_divisors) from sage.misc.functional import sqrt -from sage.quadratic_forms.special_values import QuadraticBernoulliNumber - - from sage.misc.verbose import verbose - +from sage.quadratic_forms.special_values import QuadraticBernoulliNumber +from sage.rings.integer_ring import ZZ +from sage.rings.rational_field import QQ #/*! \brief Computes the product of all local densities for comparison with independently computed Eisenstein coefficients. diff --git a/src/sage/quadratic_forms/quadratic_form__split_local_covering.py b/src/sage/quadratic_forms/quadratic_form__split_local_covering.py index 2fc02f60e56..4078e6fede8 100644 --- a/src/sage/quadratic_forms/quadratic_form__split_local_covering.py +++ b/src/sage/quadratic_forms/quadratic_form__split_local_covering.py @@ -18,7 +18,7 @@ from sage.matrix.constructor import matrix from sage.functions.all import floor from sage.rings.integer_ring import ZZ -from sage.arith.all import GCD +from sage.arith.misc import GCD def cholesky_decomposition(self, bit_prec = 53): diff --git a/src/sage/quadratic_forms/quadratic_form__ternary_Tornaria.py b/src/sage/quadratic_forms/quadratic_form__ternary_Tornaria.py index 22334a8e857..ff1476c32d9 100644 --- a/src/sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +++ b/src/sage/quadratic_forms/quadratic_form__ternary_Tornaria.py @@ -11,17 +11,19 @@ # https://www.gnu.org/licenses/ # **************************************************************************** -from sage.rings.integer_ring import ZZ -from sage.misc.functional import is_odd - +from sage.arith.misc import (CRT_vectors, + factor, + gcd, + hilbert_symbol, + kronecker as kronecker_symbol, + prime_to_m_part) from sage.libs.pari.all import pari +from sage.misc.functional import is_odd from sage.misc.misc_c import prod -from sage.arith.all import (factor, gcd, prime_to_m_part, CRT_vectors, - hilbert_symbol, kronecker_symbol) - -from sage.quadratic_forms.quadratic_form import QuadraticForm__constructor as QuadraticForm from sage.modules.free_module import FreeModule from sage.modules.free_module_element import vector +from sage.quadratic_forms.quadratic_form import QuadraticForm__constructor as QuadraticForm +from sage.rings.integer_ring import ZZ # TO DO -- Add second argument diff --git a/src/sage/quadratic_forms/special_values.py b/src/sage/quadratic_forms/special_values.py index af80989032e..dbfad45e31e 100644 --- a/src/sage/quadratic_forms/special_values.py +++ b/src/sage/quadratic_forms/special_values.py @@ -7,16 +7,21 @@ - :func:`quadratic_L_function__numerical` -- Numerical values of the Dirichlet L-functions of quadratic characters in the domain of convergence """ +import sage.rings.abc + +from sage.arith.misc import (bernoulli, + factorial, + fundamental_discriminant, + kronecker as kronecker_symbol) from sage.combinat.combinat import bernoulli_polynomial from sage.misc.functional import denominator -from sage.arith.all import kronecker_symbol, bernoulli, factorial, fundamental_discriminant from sage.rings.infinity import infinity from sage.rings.integer_ring import ZZ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.rings.rational_field import QQ -import sage.rings.abc from sage.symbolic.constants import pi, I + # ---------------- The Gamma Function ------------------ def gamma__exact(n): @@ -60,7 +65,7 @@ def gamma__exact(n): ... TypeError: you must give an integer or half-integer argument """ - from sage.all import sqrt + from sage.misc.functional import sqrt n = QQ(n) if denominator(n) == 1: @@ -213,7 +218,8 @@ def quadratic_L_function__exact(n, d): - [IR1990]_ - [Was1997]_ """ - from sage.all import SR, sqrt + from sage.symbolic.ring import SR + from sage.misc.functional import sqrt if n <= 0: return QuadraticBernoulliNumber(1-n,d)/(n-1) elif n >= 1: diff --git a/src/sage/quadratic_forms/ternary.pyx b/src/sage/quadratic_forms/ternary.pyx index 168ef3392bb..727b31ce080 100644 --- a/src/sage/quadratic_forms/ternary.pyx +++ b/src/sage/quadratic_forms/ternary.pyx @@ -12,13 +12,13 @@ Helper code for ternary quadratic forms # http://www.gnu.org/licenses/ #***************************************************************************** -from sage.rings.integer_ring import ZZ +from sage.arith.misc import gcd, inverse_mod, xgcd from sage.matrix.constructor import matrix, identity_matrix, diagonal_matrix +from sage.misc.prandom import randint from sage.modules.free_module_element import vector -from sage.arith.all import inverse_mod, xgcd, gcd from sage.quadratic_forms.extras import extend_to_primitive from sage.rings.finite_rings.integer_mod import mod -from sage.misc.prandom import randint +from sage.rings.integer_ring import ZZ def red_mfact(a,b): diff --git a/src/sage/quadratic_forms/ternary_qf.py b/src/sage/quadratic_forms/ternary_qf.py index 7932c432779..bb98b11cb30 100644 --- a/src/sage/quadratic_forms/ternary_qf.py +++ b/src/sage/quadratic_forms/ternary_qf.py @@ -26,19 +26,25 @@ # https://www.gnu.org/licenses/ # **************************************************************************** -from sage.structure.sage_object import SageObject -from sage.rings.integer_ring import ZZ -from sage.arith.all import gcd, kronecker_symbol -from sage.quadratic_forms.quadratic_form import QuadraticForm +from sage.arith.misc import gcd, kronecker as kronecker_symbol from sage.matrix.constructor import matrix, identity_matrix -from sage.structure.element import is_Vector, is_Matrix -from sage.quadratic_forms.ternary import _reduced_ternary_form_eisenstein_with_matrix -from sage.quadratic_forms.ternary import _reduced_ternary_form_eisenstein_without_matrix, _find_zeros_mod_p_odd, _find_zeros_mod_p_2, _find_p_neighbor_from_vec, _basic_lemma -from sage.quadratic_forms.ternary import _find_all_ternary_qf_by_level_disc, _find_a_ternary_qf_by_level_disc from sage.misc.prandom import randint +from sage.quadratic_forms.quadratic_form import QuadraticForm +from sage.quadratic_forms.ternary import (_basic_lemma, + _find_a_ternary_qf_by_level_disc, + _find_all_ternary_qf_by_level_disc, + _find_p_neighbor_from_vec, + _find_zeros_mod_p_2, + _find_zeros_mod_p_odd, + _reduced_ternary_form_eisenstein_with_matrix, + _reduced_ternary_form_eisenstein_without_matrix) + from sage.rings.finite_rings.integer_mod import mod -from sage.rings.ring import is_Ring +from sage.rings.integer_ring import ZZ from sage.rings.polynomial.polynomial_ring import polygens +from sage.rings.ring import is_Ring +from sage.structure.element import is_Vector, is_Matrix +from sage.structure.sage_object import SageObject class TernaryQF(SageObject): diff --git a/src/sage/rings/algebraic_closure_finite_field.py b/src/sage/rings/algebraic_closure_finite_field.py index d45c3ec2cb0..273610c0afd 100644 --- a/src/sage/rings/algebraic_closure_finite_field.py +++ b/src/sage/rings/algebraic_closure_finite_field.py @@ -57,10 +57,9 @@ from sage.misc.abstract_method import abstract_method from sage.misc.fast_methods import WithEqualityById -from sage.rings.finite_rings.element_base import is_FiniteFieldElement -from sage.rings.finite_rings.finite_field_base import is_FiniteField +from sage.rings.finite_rings.finite_field_base import FiniteField from sage.rings.ring import Field -from sage.structure.element import FieldElement +from sage.structure.element import Element, FieldElement from sage.structure.richcmp import richcmp @@ -91,7 +90,7 @@ def __init__(self, parent, value): and ``loads(dumps(x))``. """ - if is_FiniteFieldElement(value): + if isinstance(value, Element) and isinstance(value.parent(), FiniteField): n = value.parent().degree() else: from sage.rings.integer import Integer @@ -659,7 +658,7 @@ def _coerce_map_from_(self, other): """ if other is self: return True - elif is_FiniteField(other) and self._subfield(other.degree()) is other: + elif isinstance(other, FiniteField) and self._subfield(other.degree()) is other: return True elif self._subfield(1).has_coerce_map_from(other): return True @@ -1092,7 +1091,7 @@ def __init__(self, base_ring, name, category=None, lattice=None, use_database=Tr :meth:`AlgebraicClosureFiniteFieldElement.__init__`. """ - if not (is_FiniteField(base_ring) and base_ring.is_prime_field()): + if not (isinstance(base_ring, FiniteField) and base_ring.is_prime_field()): raise NotImplementedError('algebraic closures of finite fields are only implemented for prime fields') from sage.rings.finite_rings.conway_polynomials import PseudoConwayLattice p = base_ring.characteristic() diff --git a/src/sage/rings/finite_rings/__init__.py b/src/sage/rings/finite_rings/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/sage/rings/finite_rings/element_base.pyx b/src/sage/rings/finite_rings/element_base.pyx index 29ab05dd8ba..4f785ebf181 100755 --- a/src/sage/rings/finite_rings/element_base.pyx +++ b/src/sage/rings/finite_rings/element_base.pyx @@ -25,20 +25,27 @@ from sage.misc.superseded import deprecated_function_alias def is_FiniteFieldElement(x): """ - Returns if x is a finite field element. + Return True if ``x`` is a finite field element. + + This function is deprecated. EXAMPLES:: sage: from sage.rings.finite_rings.element_base import is_FiniteFieldElement sage: is_FiniteFieldElement(1) + doctest:...: DeprecationWarning: the function is_FiniteFieldElement is deprecated; use isinstance(x, sage.structure.element.FieldElement) and x.parent().is_finite() instead + See https://github.com/sagemath/sage/issues/32664 for details. False sage: is_FiniteFieldElement(IntegerRing()) False sage: is_FiniteFieldElement(GF(5)(2)) True """ - from sage.rings.finite_rings.finite_field_base import is_FiniteField - return isinstance(x, Element) and is_FiniteField(x.parent()) + from sage.misc.superseded import deprecation + deprecation(32664, "the function is_FiniteFieldElement is deprecated; use isinstance(x, sage.structure.element.FieldElement) and x.parent().is_finite() instead") + + from sage.rings.finite_rings.finite_field_base import FiniteField + return isinstance(x, Element) and isinstance(x.parent(), FiniteField) cdef class FiniteRingElement(CommutativeRingElement): diff --git a/src/sage/rings/finite_rings/finite_field_base.pyx b/src/sage/rings/finite_rings/finite_field_base.pyx index 8a2d0ce94fa..06e57a04952 100644 --- a/src/sage/rings/finite_rings/finite_field_base.pyx +++ b/src/sage/rings/finite_rings/finite_field_base.pyx @@ -930,7 +930,7 @@ cdef class FiniteField(Field): sage: GF(3, 'a').is_prime_field() True """ - return self.degree()==1 + return self.degree() == 1 def modulus(self): r""" @@ -1356,7 +1356,7 @@ cdef class FiniteField(Field): return True if isinstance(R, sage.rings.abc.IntegerModRing) and self.characteristic().divides(R.characteristic()): return R.hom((self.one(),), check=False) - if is_FiniteField(R): + if isinstance(R, FiniteField): if R is self: return True from .residue_field import ResidueField_generic @@ -2115,10 +2115,14 @@ def is_FiniteField(R): Return whether the implementation of ``R`` has the interface provided by the standard finite field implementation. + This function is deprecated. + EXAMPLES:: sage: from sage.rings.finite_rings.finite_field_base import is_FiniteField sage: is_FiniteField(GF(9,'a')) + doctest:...: DeprecationWarning: the function is_FiniteField is deprecated; use isinstance(x, sage.rings.finite_rings.finite_field_base.FiniteField) instead + See https://github.com/sagemath/sage/issues/32664 for details. True sage: is_FiniteField(GF(next_prime(10^10))) True @@ -2128,4 +2132,6 @@ def is_FiniteField(R): sage: is_FiniteField(Integers(7)) False """ + from sage.misc.superseded import deprecation + deprecation(32664, "the function is_FiniteField is deprecated; use isinstance(x, sage.rings.finite_rings.finite_field_base.FiniteField) instead") return isinstance(R, FiniteField) diff --git a/src/sage/rings/finite_rings/finite_field_constructor.py b/src/sage/rings/finite_rings/finite_field_constructor.py index 8b51fd37b2e..048da483147 100644 --- a/src/sage/rings/finite_rings/finite_field_constructor.py +++ b/src/sage/rings/finite_rings/finite_field_constructor.py @@ -791,24 +791,32 @@ def create_object(self, version, key, **kwds): def is_PrimeFiniteField(x): """ - Returns True if x is a prime finite field. + Returns True if ``x`` is a prime finite field. + + This function is deprecated. EXAMPLES:: sage: from sage.rings.finite_rings.finite_field_constructor import is_PrimeFiniteField sage: is_PrimeFiniteField(QQ) + doctest:...: DeprecationWarning: the function is_PrimeFiniteField is deprecated; use isinstance(x, sage.rings.finite_rings.finite_field_base.FiniteField) and x.is_prime_field() instead + See https://github.com/sagemath/sage/issues/32664 for details. False sage: is_PrimeFiniteField(GF(7)) True - sage: is_PrimeFiniteField(GF(7^2,'a')) + sage: is_PrimeFiniteField(GF(7^2, 'a')) False - sage: is_PrimeFiniteField(GF(next_prime(10^90,proof=False))) + sage: is_PrimeFiniteField(GF(next_prime(10^90, proof=False))) True """ + from sage.misc.superseded import deprecation + deprecation(32664, "the function is_PrimeFiniteField is deprecated; use isinstance(x, sage.rings.finite_rings.finite_field_base.FiniteField) and x.is_prime_field() instead") + from .finite_field_prime_modn import FiniteField_prime_modn from sage.rings.finite_rings.finite_field_base import FiniteField as FiniteField_generic return isinstance(x, FiniteField_prime_modn) or \ (isinstance(x, FiniteField_generic) and x.degree() == 1) + zech_log_bound = 2**16 diff --git a/src/sage/rings/finite_rings/finite_field_ntl_gf2e.py b/src/sage/rings/finite_rings/finite_field_ntl_gf2e.py index e750f2fef5e..33ea3d1bcfc 100644 --- a/src/sage/rings/finite_rings/finite_field_ntl_gf2e.py +++ b/src/sage/rings/finite_rings/finite_field_ntl_gf2e.py @@ -52,6 +52,7 @@ def late_import(): import sage.rings.polynomial.polynomial_element is_Polynomial = sage.rings.polynomial.polynomial_element.is_Polynomial + class FiniteField_ntl_gf2e(FiniteField): """ Finite Field of characteristic 2 and order `2^n`. diff --git a/src/sage/rings/finite_rings/hom_finite_field.pyx b/src/sage/rings/finite_rings/hom_finite_field.pyx index 86d2401ceec..44dc3450be8 100644 --- a/src/sage/rings/finite_rings/hom_finite_field.pyx +++ b/src/sage/rings/finite_rings/hom_finite_field.pyx @@ -106,7 +106,7 @@ from sage.rings.integer cimport Integer from sage.categories.homset import Hom from sage.structure.element cimport Element -from sage.rings.finite_rings.finite_field_base import is_FiniteField +from sage.rings.finite_rings.finite_field_base import FiniteField as FiniteField_base from sage.rings.morphism cimport RingHomomorphism, RingHomomorphism_im_gens, FrobeniusEndomorphism_generic from sage.rings.finite_rings.finite_field_constructor import FiniteField @@ -227,9 +227,9 @@ cdef class FiniteFieldHomomorphism_generic(RingHomomorphism_im_gens): """ domain = parent.domain() codomain = parent.codomain() - if not is_FiniteField(domain): + if not isinstance(domain, FiniteField_base): raise TypeError("The domain is not a finite field or does not provide the required interface for finite fields") - if not is_FiniteField(codomain): + if not isinstance(codomain, FiniteField_base): raise TypeError("The codomain is not a finite field or does not provide the required interface for finite fields") if domain.characteristic() != codomain.characteristic() or codomain.degree() % domain.degree() != 0: raise ValueError("No embedding of %s into %s" % (domain, codomain)) @@ -522,7 +522,7 @@ cdef class FrobeniusEndomorphism_finite_field(FrobeniusEndomorphism_generic): ... TypeError: The domain is not a finite field or does not provide the required interface for finite fields """ - if not is_FiniteField(domain): + if not isinstance(domain, FiniteField_base): raise TypeError("The domain is not a finite field or does not provide the required interface for finite fields") try: n = Integer(n) diff --git a/src/sage/rings/finite_rings/hom_prime_finite_field.pyx b/src/sage/rings/finite_rings/hom_prime_finite_field.pyx index b24c8bbfb3e..617595ea383 100644 --- a/src/sage/rings/finite_rings/hom_prime_finite_field.pyx +++ b/src/sage/rings/finite_rings/hom_prime_finite_field.pyx @@ -33,7 +33,7 @@ from .hom_finite_field cimport SectionFiniteFieldHomomorphism_generic from .hom_finite_field cimport FiniteFieldHomomorphism_generic from .hom_finite_field cimport FrobeniusEndomorphism_finite_field -from sage.rings.finite_rings.finite_field_base import FiniteField, is_FiniteField +from sage.rings.finite_rings.finite_field_base import FiniteField from sage.rings.morphism cimport RingHomomorphism_im_gens @@ -71,7 +71,7 @@ cdef class FiniteFieldHomomorphism_prime(FiniteFieldHomomorphism_generic): TypeError: The domain is not a finite prime field """ domain = parent.domain() - if not is_FiniteField(domain) or not domain.is_prime_field(): + if not isinstance(domain, FiniteField) or not domain.is_prime_field(): raise TypeError("The domain is not a finite prime field") if section_class is None: section_class = SectionFiniteFieldHomomorphism_prime @@ -100,7 +100,7 @@ cdef class FrobeniusEndomorphism_prime(FrobeniusEndomorphism_finite_field): fields (i.e. identity map :-). """ def __init__(self, domain, power=1): - if not is_FiniteField(domain) or not domain.is_prime_field(): + if not isinstance(domain, FiniteField) or not domain.is_prime_field(): raise TypeError("The domain is not a finite prime field") FrobeniusEndomorphism_finite_field.__init__(self, Hom(domain, domain)) self._order = 1 diff --git a/src/sage/rings/finite_rings/homset.py b/src/sage/rings/finite_rings/homset.py index 0a7578a092e..ef629016983 100644 --- a/src/sage/rings/finite_rings/homset.py +++ b/src/sage/rings/finite_rings/homset.py @@ -37,7 +37,7 @@ from sage.rings.homset import RingHomset_generic from sage.rings.finite_rings.hom_finite_field import FiniteFieldHomomorphism_generic -from sage.rings.finite_rings.finite_field_base import is_FiniteField +from sage.rings.finite_rings.finite_field_base import FiniteField from sage.rings.integer import Integer from sage.rings.morphism import RingHomomorphism_im_gens from sage.structure.sequence import Sequence @@ -96,7 +96,7 @@ def __call__(self, im_gens, base_map=None, check=True): if self.domain().degree() == 1: from sage.rings.finite_rings.hom_prime_finite_field import FiniteFieldHomomorphism_prime return FiniteFieldHomomorphism_prime(self, im_gens, base_map=base_map, check=check) - if is_FiniteField(self.codomain()): + if isinstance(self.codomain(), FiniteField): return FiniteFieldHomomorphism_generic(self, im_gens, base_map=base_map, check=check) # Currently, FiniteFieldHomomorphism_generic does not work if # the codomain is not derived from the finite field base class; diff --git a/src/sage/rings/morphism.pyx b/src/sage/rings/morphism.pyx index f7f83974425..204e6ddf474 100644 --- a/src/sage/rings/morphism.pyx +++ b/src/sage/rings/morphism.pyx @@ -3160,7 +3160,7 @@ def _tensor_product_ring(B, A): ... ValueError: term ordering must be global """ - from .finite_rings.finite_field_base import is_FiniteField + from .finite_rings.finite_field_base import FiniteField from .number_field.number_field_base import is_NumberField from .polynomial.multi_polynomial_ring import is_MPolynomialRing from .polynomial.polynomial_quotient_ring import is_PolynomialQuotientRing @@ -3178,7 +3178,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 is_FiniteField(A)) + or ((is_NumberField(A) or isinstance(A, FiniteField)) and not A.is_prime_field())): return TermOrder('lex', 1) try: @@ -3201,7 +3201,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 is_FiniteField(A)) + elif ((is_NumberField(A) or isinstance(A, FiniteField)) and not A.is_prime_field()): to_R = A.polynomial_ring().hom(R_gens_A, R, check=False) return [to_R(A.polynomial())] diff --git a/src/sage/rings/padics/padic_template_element.pxi b/src/sage/rings/padics/padic_template_element.pxi index ce9e7029002..a21494e5479 100644 --- a/src/sage/rings/padics/padic_template_element.pxi +++ b/src/sage/rings/padics/padic_template_element.pxi @@ -29,6 +29,7 @@ import sage.rings.finite_rings.integer_mod from cypari2.types cimport * from cypari2.gen cimport Gen as pari_gen from sage.libs.pari.convert_gmp cimport INT_to_mpz +from sage.rings.finite_rings.finite_field_base import FiniteField from sage.rings.padics.common_conversion cimport get_ordp, get_preccap from sage.rings.integer cimport Integer from sage.rings.infinity import infinity @@ -37,6 +38,7 @@ from sage.rings.padics.precision_error import PrecisionError from sage.rings.padics.misc import trim_zeros from sage.rings.polynomial.polynomial_element import Polynomial from sage.structure.element import canonical_coercion + import itertools cdef long maxordp = (1L << (sizeof(long) * 8 - 2)) - 1 @@ -145,7 +147,7 @@ cdef class pAdicTemplateElement(pAdicGenericElement): elif sage.rings.finite_rings.integer_mod.is_IntegerMod(x): if not Integer(self.prime_pow.prime).divides(x.parent().order()): raise TypeError("p does not divide modulus %s"%x.parent().order()) - elif sage.rings.finite_rings.element_base.is_FiniteFieldElement(x): + elif isinstance(x, Element) and isinstance(x.parent(), FiniteField): k = self.parent().residue_field() if not k.has_coerce_map_from(x.parent()): raise NotImplementedError("conversion from finite fields which do not embed into the residue field not implemented") diff --git a/src/sage/rings/polynomial/polynomial_element.pyx b/src/sage/rings/polynomial/polynomial_element.pyx index 88a25eae183..8b3a7549be1 100644 --- a/src/sage/rings/polynomial/polynomial_element.pyx +++ b/src/sage/rings/polynomial/polynomial_element.pyx @@ -4477,7 +4477,7 @@ cdef class Polynomial(CommutativePolynomial): if not (ch == 0 or is_prime(ch)): raise NotImplementedError("factorization of polynomials over rings with composite characteristic is not implemented") - from sage.rings.finite_rings.finite_field_constructor import is_FiniteField + from sage.rings.finite_rings.finite_field_base import FiniteField n = None @@ -4487,7 +4487,7 @@ cdef class Polynomial(CommutativePolynomial): except PariError: raise NotImplementedError - elif is_FiniteField(R): + elif isinstance(R, FiniteField): v = [x.__pari__("a") for x in self.list()] f = pari(v).Polrev() G = list(f.factor()) @@ -4755,7 +4755,7 @@ cdef class Polynomial(CommutativePolynomial): name = normalize_names(1, names)[0] from sage.rings.number_field.number_field_base import is_NumberField - from sage.rings.finite_rings.finite_field_base import is_FiniteField + from sage.rings.finite_rings.finite_field_base import FiniteField f = self.monic() # Given polynomial, made monic F = f.parent().base_ring() # Base field @@ -4766,7 +4766,7 @@ cdef class Polynomial(CommutativePolynomial): if is_NumberField(F): from sage.rings.number_field.splitting_field import splitting_field return splitting_field(f, name, map, **kwds) - elif is_FiniteField(F): + elif isinstance(F, FiniteField): degree = lcm([f.degree() for f, _ in self.factor()]) return F.extension(degree, name, map=map, **kwds) diff --git a/src/sage/rings/polynomial/polynomial_ring_constructor.py b/src/sage/rings/polynomial/polynomial_ring_constructor.py index 65e67cc3527..d2f03c205a3 100644 --- a/src/sage/rings/polynomial/polynomial_ring_constructor.py +++ b/src/sage/rings/polynomial/polynomial_ring_constructor.py @@ -26,7 +26,7 @@ import sage.rings.abc from sage.rings.integer import Integer -from sage.rings.finite_rings.finite_field_base import is_FiniteField +from sage.rings.finite_rings.finite_field_base import FiniteField from sage.misc.cachefunc import weak_cached_function import sage.misc.weak_dict @@ -747,7 +747,7 @@ def _single_variate(base_ring, name, sparse=None, implementation=None, order=Non specialized = polynomial_ring.PolynomialRing_dense_mod_p elif n > 1: # Specialized code breaks for n == 1 specialized = polynomial_ring.PolynomialRing_dense_mod_n - elif is_FiniteField(base_ring): + elif isinstance(base_ring, FiniteField): specialized = polynomial_ring.PolynomialRing_dense_finite_field elif isinstance(base_ring, padic_base_leaves.pAdicFieldCappedRelative): specialized = polynomial_ring.PolynomialRing_dense_padic_field_capped_relative diff --git a/src/sage/rings/polynomial/polynomial_singular_interface.py b/src/sage/rings/polynomial/polynomial_singular_interface.py index 2b5bfd4bf94..f19415b34d3 100644 --- a/src/sage/rings/polynomial/polynomial_singular_interface.py +++ b/src/sage/rings/polynomial/polynomial_singular_interface.py @@ -44,7 +44,7 @@ from sage.interfaces.singular import singular from sage.rings.rational_field import is_RationalField from sage.rings.function_field.function_field import RationalFunctionField -from sage.rings.finite_rings.finite_field_base import is_FiniteField +from sage.rings.finite_rings.finite_field_base import FiniteField from sage.rings.integer_ring import ZZ import sage.rings.finite_rings.finite_field_constructor @@ -103,13 +103,13 @@ def _do_singular_init_(singular, base_ring, char, _vars, order): elif isinstance(base_ring, sage.rings.abc.IntegerModRing): char = base_ring.characteristic() - if sage.rings.finite_rings.finite_field_constructor.is_FiniteField(base_ring) and char <= 2147483647: + if isinstance(base_ring, FiniteField) and char <= 2147483647: return make_ring(str(char)), None if char.is_power_of(2): return make_ring(f"(integer,2,{char.nbits()-1})"), None return make_ring(f"(integer,{char})"), None - elif sage.rings.finite_rings.finite_field_constructor.is_FiniteField(base_ring): + elif isinstance(base_ring, FiniteField): # not the prime field! gen = str(base_ring.gen()) R = make_ring(f"({char},{gen})") @@ -148,7 +148,7 @@ def _do_singular_init_(singular, base_ring, char, _vars, order): if B.is_prime_field() or B is ZZ: return make_ring(f"({base_char},{gens})"), None - if is_FiniteField(B) and B.characteristic() <= 2147483647: + if isinstance(B, FiniteField) and B.characteristic() <= 2147483647: ext_gen = str(B.gen()) _vars = '(' + ext_gen + ', ' + _vars[1:] @@ -333,7 +333,7 @@ def _singular_(self, singular=singular): R._check_valid() if self.base_ring() is ZZ or self.base_ring().is_prime_field(): return R - if sage.rings.finite_rings.finite_field_constructor.is_FiniteField(self.base_ring()) or \ + if isinstance(self.base_ring(), FiniteField) or \ (number_field.number_field_base.is_NumberField(self.base_ring()) and self.base_ring().is_absolute()): R.set_ring() # sorry for that, but needed for minpoly if singular.eval('minpoly') != f"({self.__minpoly})": @@ -427,14 +427,14 @@ def can_convert_to_singular(R): sage.rings.abc.RealField, sage.rings.abc.ComplexField, sage.rings.abc.RealDoubleField, sage.rings.abc.ComplexDoubleField))): return True - elif sage.rings.finite_rings.finite_field_constructor.is_FiniteField(base_ring): + elif isinstance(base_ring, FiniteField): return base_ring.characteristic() <= 2147483647 elif number_field.number_field_base.is_NumberField(base_ring): return base_ring.is_absolute() elif sage.rings.fraction_field.is_FractionField(base_ring): B = base_ring.base_ring() return (B.is_prime_field() or B is ZZ - or (is_FiniteField(B) and B.characteristic() <= 2147483647)) + or (isinstance(B, FiniteField) and B.characteristic() <= 2147483647)) elif isinstance(base_ring, RationalFunctionField): return base_ring.constant_field().is_prime_field() else: diff --git a/src/sage/schemes/affine/affine_homset.py b/src/sage/schemes/affine/affine_homset.py index 98b3b3a8994..914e54f7148 100644 --- a/src/sage/schemes/affine/affine_homset.py +++ b/src/sage/schemes/affine/affine_homset.py @@ -41,7 +41,7 @@ from sage.rings.rational_field import is_RationalField from sage.categories.fields import Fields from sage.categories.number_fields import NumberFields -from sage.rings.finite_rings.finite_field_constructor import is_FiniteField +from sage.rings.finite_rings.finite_field_base import FiniteField from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.schemes.generic.homset import SchemeHomset_points, SchemeHomset_generic @@ -354,7 +354,7 @@ def points(self, **kwds): raise TypeError("a positive bound B (= %s) must be specified"%B) from sage.schemes.affine.affine_rational_point import enum_affine_number_field return enum_affine_number_field(self, bound=B, tolerance=tol, precision=prec) - elif is_FiniteField(R): + elif isinstance(R, FiniteField): from sage.schemes.affine.affine_rational_point import enum_affine_finite_field return enum_affine_finite_field(self) else: diff --git a/src/sage/schemes/affine/affine_morphism.py b/src/sage/schemes/affine/affine_morphism.py index 38b71556ba2..b61b011f979 100644 --- a/src/sage/schemes/affine/affine_morphism.py +++ b/src/sage/schemes/affine/affine_morphism.py @@ -62,12 +62,11 @@ from sage.arith.misc import GCD as gcd from sage.rings.integer import Integer -from sage.rings.finite_rings.finite_field_constructor import is_PrimeFiniteField from sage.rings.fraction_field import FractionField from sage.rings.fraction_field_element import FractionFieldElement from sage.rings.integer_ring import ZZ from sage.rings.rational_field import QQ -from sage.rings.finite_rings.finite_field_constructor import is_FiniteField +from sage.rings.finite_rings.finite_field_base import FiniteField from sage.schemes.generic.morphism import SchemeMorphism_polynomial @@ -229,7 +228,8 @@ def __init__(self, parent, polys, check=True): SchemeMorphism_polynomial.__init__(self, parent, polys, check) # used in _fast_eval and _fastpolys - self._is_prime_finite_field = is_PrimeFiniteField(polys[0].base_ring()) + R = polys[0].base_ring() + self._is_prime_finite_field = isinstance(R, FiniteField) and R.is_prime_field() def __call__(self, x, check=True): """ @@ -683,7 +683,7 @@ def as_dynamical_system(self): R = self.base_ring() if R not in _Fields: return DynamicalSystem_affine(list(self), self.domain()) - if is_FiniteField(R): + if isinstance(R, FiniteField): return DynamicalSystem_affine_finite_field(list(self), self.domain()) return DynamicalSystem_affine_field(list(self), self.domain()) diff --git a/src/sage/schemes/affine/affine_space.py b/src/sage/schemes/affine/affine_space.py index ba56ef9fc8d..52c13b29068 100644 --- a/src/sage/schemes/affine/affine_space.py +++ b/src/sage/schemes/affine/affine_space.py @@ -17,7 +17,7 @@ from sage.rings.rational_field import is_RationalField from sage.rings.polynomial.polynomial_ring import is_PolynomialRing from sage.rings.polynomial.multi_polynomial_ring import is_MPolynomialRing -from sage.rings.finite_rings.finite_field_constructor import is_FiniteField +from sage.rings.finite_rings.finite_field_base import FiniteField from sage.categories.map import Map from sage.categories.fields import Fields from sage.categories.homset import Hom @@ -132,7 +132,7 @@ def AffineSpace(n, R=None, names=None, ambient_projective_space=None, from sage.schemes.projective.projective_space import ProjectiveSpace ambient_projective_space = ProjectiveSpace(n, R) if R in _Fields: - if is_FiniteField(R): + if isinstance(R, FiniteField): return AffineSpace_finite_field(n, R, names, ambient_projective_space, default_embedding_index) else: @@ -270,12 +270,12 @@ def rational_points(self, F=None): TypeError: second argument (= Integer Ring) must be a finite field """ if F is None: - if not is_FiniteField(self.base_ring()): - raise TypeError("base ring (= %s) must be a finite field"%self.base_ring()) - return [ P for P in self ] - elif not is_FiniteField(F): - raise TypeError("second argument (= %s) must be a finite field"%F) - return [ P for P in self.base_extend(F) ] + if not isinstance(self.base_ring(), FiniteField): + raise TypeError("base ring (= %s) must be a finite field" % self.base_ring()) + return [P for P in self] + elif not isinstance(F, FiniteField): + raise TypeError("second argument (= %s) must be a finite field" % F) + return [P for P in self.base_extend(F)] def __eq__(self, right): """ diff --git a/src/sage/schemes/curves/constructor.py b/src/sage/schemes/curves/constructor.py index c3ff0fa9a42..88f9b95701f 100644 --- a/src/sage/schemes/curves/constructor.py +++ b/src/sage/schemes/curves/constructor.py @@ -38,7 +38,7 @@ from sage.rings.polynomial.multi_polynomial import MPolynomial from sage.rings.polynomial.multi_polynomial_ring import is_MPolynomialRing -from sage.rings.finite_rings.finite_field_constructor import is_FiniteField +from sage.rings.finite_rings.finite_field_base import FiniteField from sage.rings.rational_field import QQ @@ -294,7 +294,7 @@ def Curve(F, A=None): if is_AffineSpace(A): if n != 2: - if is_FiniteField(k): + if isinstance(k, FiniteField): if A.coordinate_ring().ideal(F).is_prime(): return IntegralAffineCurve_finite_field(A, F) if k in Fields(): @@ -307,7 +307,7 @@ def Curve(F, A=None): raise TypeError("need a single nonconstant polynomial to define a plane curve") F = F[0] - if is_FiniteField(k): + if isinstance(k, FiniteField): if _is_irreducible_and_reduced(F): return IntegralAffinePlaneCurve_finite_field(A, F) return AffinePlaneCurve_finite_field(A, F) @@ -321,7 +321,7 @@ def Curve(F, A=None): if n != 2: if not all(f.is_homogeneous() for f in F): raise TypeError("polynomials defining a curve in a projective space must be homogeneous") - if is_FiniteField(k): + if isinstance(k, FiniteField): if A.coordinate_ring().ideal(F).is_prime(): return IntegralProjectiveCurve_finite_field(A, F) if k in Fields(): @@ -339,7 +339,7 @@ def Curve(F, A=None): if not F.is_homogeneous(): raise TypeError("{} is not a homogeneous polynomial".format(F)) - if is_FiniteField(k): + if isinstance(k, FiniteField): if _is_irreducible_and_reduced(F): return IntegralProjectivePlaneCurve_finite_field(A, F) return ProjectivePlaneCurve_finite_field(A, F) diff --git a/src/sage/schemes/cyclic_covers/constructor.py b/src/sage/schemes/cyclic_covers/constructor.py index 32bdf239b99..0a8926d7db6 100644 --- a/src/sage/schemes/cyclic_covers/constructor.py +++ b/src/sage/schemes/cyclic_covers/constructor.py @@ -8,9 +8,10 @@ # https://www.gnu.org/licenses/ # ***************************************************************************** +from sage.rings.finite_rings.finite_field_base import FiniteField from sage.rings.polynomial.polynomial_element import Polynomial -from sage.rings.finite_rings.finite_field_constructor import is_FiniteField from sage.schemes.affine.affine_space import AffineSpace + from .cycliccover_generic import CyclicCover_generic from .cycliccover_finite_field import CyclicCover_finite_field @@ -127,7 +128,7 @@ def CyclicCover(r, f, names=None, check_smooth=True): names = ["x", "y"] A2 = AffineSpace(2, R, names=names) - if is_FiniteField(R): + if isinstance(R, FiniteField): return CyclicCover_finite_field(A2, r, f, names=names) else: return CyclicCover_generic(A2, r, f, names=names) diff --git a/src/sage/schemes/elliptic_curves/constructor.py b/src/sage/schemes/elliptic_curves/constructor.py index d924bd8f45c..8d1a7ddf363 100644 --- a/src/sage/schemes/elliptic_curves/constructor.py +++ b/src/sage/schemes/elliptic_curves/constructor.py @@ -27,7 +27,7 @@ import sage.rings.abc from sage.rings.polynomial.multi_polynomial_ring import is_MPolynomialRing -from sage.rings.finite_rings.finite_field_constructor import is_FiniteField +from sage.rings.finite_rings.finite_field_base import FiniteField from sage.rings.number_field.number_field import is_NumberField from sage.rings.polynomial.multi_polynomial import MPolynomial from sage.rings.ring import is_Ring @@ -477,7 +477,7 @@ def create_object(self, version, key, **kwds): elif isinstance(R, sage.rings.abc.pAdicField): from .ell_padic_field import EllipticCurve_padic_field return EllipticCurve_padic_field(R, x) - elif is_FiniteField(R) or (isinstance(R, sage.rings.abc.IntegerModRing) and R.characteristic().is_prime()): + elif isinstance(R, FiniteField) or (isinstance(R, sage.rings.abc.IntegerModRing) and R.characteristic().is_prime()): from .ell_finite_field import EllipticCurve_finite_field return EllipticCurve_finite_field(R, x) elif R in _Fields: diff --git a/src/sage/schemes/elliptic_curves/ell_finite_field.py b/src/sage/schemes/elliptic_curves/ell_finite_field.py index 9da8cc3acfd..d0279e553f1 100644 --- a/src/sage/schemes/elliptic_curves/ell_finite_field.py +++ b/src/sage/schemes/elliptic_curves/ell_finite_field.py @@ -31,7 +31,7 @@ from sage.arith.misc import binomial, GCD as gcd from sage.groups.additive_abelian.additive_abelian_wrapper import AdditiveAbelianGroupWrapper from sage.misc.cachefunc import cached_method -from sage.rings.finite_rings.element_base import is_FiniteFieldElement +from sage.rings.finite_rings.finite_field_base import FiniteField from sage.rings.finite_rings.finite_field_constructor import FiniteField as GF from sage.rings.integer import Integer from sage.rings.integer_ring import ZZ @@ -39,6 +39,7 @@ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.schemes.curves.projective_curve import Hasse_bounds from sage.schemes.hyperelliptic_curves.hyperelliptic_finite_field import HyperellipticCurve_finite_field +from sage.structure.element import Element from . import ell_point from .constructor import EllipticCurve @@ -2102,7 +2103,7 @@ def is_j_supersingular(j, proof=True): sage: [p for p in prime_range(100) if is_j_supersingular(GF(p)(123456))] [2, 3, 59, 89] """ - if not is_FiniteFieldElement(j): + if not (isinstance(j, Element) and isinstance(j.parent(), FiniteField)): raise ValueError("%s must be an element of a finite field" % j) F = j.parent() diff --git a/src/sage/schemes/generic/algebraic_scheme.py b/src/sage/schemes/generic/algebraic_scheme.py index 9e1fe6b4b56..6391bc54eeb 100644 --- a/src/sage/schemes/generic/algebraic_scheme.py +++ b/src/sage/schemes/generic/algebraic_scheme.py @@ -132,7 +132,7 @@ from sage.rings.integer_ring import ZZ from sage.rings.qqbar import QQbar from sage.rings.rational_field import is_RationalField -from sage.rings.finite_rings.finite_field_constructor import is_FiniteField +from sage.rings.finite_rings.finite_field_base import FiniteField from sage.rings.number_field.order import is_NumberFieldOrder from sage.misc.latex import latex @@ -886,7 +886,7 @@ def rational_points(self, **kwds): if bound == 0: if is_RationalField(F): raise TypeError("A positive bound (= %s) must be specified."%bound) - if not is_FiniteField(F): + if not isinstance(F, FiniteField): raise TypeError("Argument F (= %s) must be a finite field."%F) pts = [] for P in self.ambient_space().rational_points(F): diff --git a/src/sage/schemes/hyperelliptic_curves/constructor.py b/src/sage/schemes/hyperelliptic_curves/constructor.py index e73efa85558..afd87af8cb3 100644 --- a/src/sage/schemes/hyperelliptic_curves/constructor.py +++ b/src/sage/schemes/hyperelliptic_curves/constructor.py @@ -23,10 +23,10 @@ from .hyperelliptic_g2 import HyperellipticCurve_g2 import sage.rings.abc -from sage.rings.rational_field import is_RationalField -from sage.rings.finite_rings.finite_field_constructor import is_FiniteField -from sage.rings.polynomial.polynomial_element import Polynomial +from sage.rings.finite_rings.finite_field_base import FiniteField +from sage.rings.polynomial.polynomial_element import Polynomial +from sage.rings.rational_field import is_RationalField from sage.structure.dynamic_class import dynamic_class @@ -249,7 +249,11 @@ def HyperellipticCurve(f, h=0, names=None, PP=None, check_squarefree=True): genus_classes = {2: HyperellipticCurve_g2} - is_pAdicField = lambda x: isinstance(x, sage.rings.abc.pAdicField) + def is_FiniteField(x): + return isinstance(x, FiniteField) + + def is_pAdicField(x): + return isinstance(x, sage.rings.abc.pAdicField) fields = [ ("FiniteField", is_FiniteField, HyperellipticCurve_finite_field), diff --git a/src/sage/schemes/plane_conics/constructor.py b/src/sage/schemes/plane_conics/constructor.py index abff2935854..258476ca09c 100644 --- a/src/sage/schemes/plane_conics/constructor.py +++ b/src/sage/schemes/plane_conics/constructor.py @@ -27,20 +27,18 @@ from sage.matrix.constructor import Matrix from sage.modules.free_module_element import vector from sage.quadratic_forms.quadratic_form import is_QuadraticForm -from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing - from sage.rings.ring import IntegralDomain from sage.rings.rational_field import is_RationalField -from sage.rings.finite_rings.finite_field_constructor import is_FiniteField -from sage.rings.polynomial.multi_polynomial import MPolynomial -from sage.rings.polynomial.polynomial_ring import is_PolynomialRing -from sage.rings.polynomial.multi_polynomial_ring import is_MPolynomialRing +from sage.rings.finite_rings.finite_field_base import FiniteField from sage.rings.fraction_field import is_FractionField - from sage.rings.number_field.number_field import is_NumberField -from sage.schemes.projective.projective_space import ProjectiveSpace -from sage.schemes.projective.projective_point import SchemeMorphism_point_projective_field +from sage.rings.polynomial.multi_polynomial import MPolynomial +from sage.rings.polynomial.multi_polynomial_ring import is_MPolynomialRing +from sage.rings.polynomial.polynomial_ring import is_PolynomialRing +from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.schemes.affine.affine_point import SchemeMorphism_point_affine +from sage.schemes.projective.projective_point import SchemeMorphism_point_projective_field +from sage.schemes.projective.projective_space import ProjectiveSpace from sage.structure.all import Sequence from sage.structure.element import is_Matrix @@ -233,7 +231,7 @@ def Conic(base_field, F=None, names=None, unique=True): if F.parent().ngens() == 3: P2 = ProjectiveSpace(2, base_field, names) - if is_FiniteField(base_field): + if isinstance(base_field, FiniteField): return ProjectiveConic_finite_field(P2, F) if is_RationalField(base_field): return ProjectiveConic_rational_field(P2, F) diff --git a/src/sage/schemes/product_projective/homset.py b/src/sage/schemes/product_projective/homset.py index 28aa566bb73..b56eccb968e 100644 --- a/src/sage/schemes/product_projective/homset.py +++ b/src/sage/schemes/product_projective/homset.py @@ -22,7 +22,7 @@ from sage.categories.number_fields import NumberFields from sage.misc.mrange import xmrange from sage.misc.misc_c import prod -from sage.rings.finite_rings.finite_field_constructor import is_FiniteField +from sage.rings.finite_rings.finite_field_base import FiniteField from sage.rings.rational_field import is_RationalField from sage.schemes.generic.algebraic_scheme import AlgebraicScheme_subscheme from sage.schemes.generic.homset import SchemeHomset_points @@ -228,7 +228,7 @@ def points(self, **kwds): raise TypeError("a positive bound B (= %s) must be specified"%B) from sage.schemes.product_projective.rational_point import enum_product_projective_number_field return enum_product_projective_number_field(self, bound=B) - elif is_FiniteField(R): + elif isinstance(R, FiniteField): from sage.schemes.product_projective.rational_point import enum_product_projective_finite_field return enum_product_projective_finite_field(self) else: diff --git a/src/sage/schemes/product_projective/space.py b/src/sage/schemes/product_projective/space.py index 604adcc8a41..4597d1c3798 100644 --- a/src/sage/schemes/product_projective/space.py +++ b/src/sage/schemes/product_projective/space.py @@ -45,7 +45,7 @@ from sage.rings.integer import Integer from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.rings.rational_field import QQ -from sage.rings.finite_rings.finite_field_constructor import is_FiniteField +from sage.rings.finite_rings.finite_field_base import FiniteField from sage.categories.fields import Fields from sage.categories.commutative_rings import CommutativeRings from sage.rings.polynomial.polydict import ETuple @@ -137,7 +137,7 @@ def ProductProjectiveSpaces(n, R=None, names='x'): raise AttributeError("components must be over the same base ring") N.append(PS.dimension_relative()) names += PS.variable_names() - if is_FiniteField(R): + if isinstance(R, FiniteField): X = ProductProjectiveSpaces_finite_field(N, R, names) elif R in Fields(): X = ProductProjectiveSpaces_field(N, R, names) @@ -162,7 +162,7 @@ def ProductProjectiveSpaces(n, R=None, names='x'): else: n_vars = sum(1+d for d in n) names = normalize_names(n_vars, name_list) - if is_FiniteField(R): + if isinstance(R, FiniteField): X = ProductProjectiveSpaces_finite_field(n, R, names) elif R in Fields(): X = ProductProjectiveSpaces_field(n, R, names) @@ -1302,6 +1302,6 @@ def rational_points(self, F=None): """ if F is None: return list(self) - elif not is_FiniteField(F): + elif not isinstance(F, FiniteField): raise TypeError("second argument (= %s) must be a finite field"%F) return list(self.base_extend(F)) diff --git a/src/sage/schemes/projective/projective_homset.py b/src/sage/schemes/projective/projective_homset.py index 3ffd4a6b6e4..3ee0b78876e 100644 --- a/src/sage/schemes/projective/projective_homset.py +++ b/src/sage/schemes/projective/projective_homset.py @@ -47,7 +47,7 @@ from sage.rings.rational_field import is_RationalField from sage.categories.fields import Fields from sage.categories.number_fields import NumberFields -from sage.rings.finite_rings.finite_field_constructor import is_FiniteField +from sage.rings.finite_rings.finite_field_base import FiniteField from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.schemes.generic.algebraic_scheme import AlgebraicScheme_subscheme from copy import copy @@ -284,7 +284,7 @@ def points(self, **kwds): raise TypeError("a positive bound B (= %s) must be specified"%B) from sage.schemes.projective.projective_rational_point import enum_projective_number_field return enum_projective_number_field(self, bound=B, tolerance=tol, precision=prec) - elif is_FiniteField(R): + elif isinstance(R, FiniteField): from sage.schemes.projective.projective_rational_point import enum_projective_finite_field return enum_projective_finite_field(self.extended_codomain()) else: diff --git a/src/sage/schemes/projective/projective_morphism.py b/src/sage/schemes/projective/projective_morphism.py index facc90bb53d..9c608f67a48 100644 --- a/src/sage/schemes/projective/projective_morphism.py +++ b/src/sage/schemes/projective/projective_morphism.py @@ -73,8 +73,7 @@ import sage.rings.abc from sage.rings.integer import Integer from sage.rings.algebraic_closure_finite_field import AlgebraicClosureFiniteField_generic -from sage.rings.finite_rings.finite_field_constructor import is_FiniteField -from sage.rings.finite_rings.finite_field_constructor import is_PrimeFiniteField +from sage.rings.finite_rings.finite_field_base import FiniteField from sage.rings.finite_rings.finite_field_constructor import GF from sage.rings.fraction_field import FractionField from sage.rings.integer_ring import ZZ @@ -275,7 +274,8 @@ def __init__(self, parent, polys, check=True): SchemeMorphism_polynomial.__init__(self, parent, polys, check) - self._is_prime_finite_field = is_PrimeFiniteField(polys[0].base_ring()) + R = polys[0].base_ring() + self._is_prime_finite_field = isinstance(R, FiniteField) and R.is_prime_field() def __call__(self, x, check=True): r""" @@ -728,7 +728,7 @@ def as_dynamical_system(self): R = self.base_ring() if R not in _Fields: return DynamicalSystem_projective(list(self), self.domain()) - if is_FiniteField(R): + if isinstance(R, FiniteField): return DynamicalSystem_projective_finite_field(list(self), self.domain()) return DynamicalSystem_projective_field(list(self), self.domain()) @@ -1007,7 +1007,7 @@ def normalize_coordinates(self, **kwds): # scales by 1/gcd of the coefficients. if R in _NumberFields: O = R.maximal_order() - elif is_FiniteField(R): + elif isinstance(R, FiniteField): O = R elif isinstance(R, QuotientRing_generic): O = R.ring() diff --git a/src/sage/schemes/projective/projective_space.py b/src/sage/schemes/projective/projective_space.py index 670304af237..e215da942e1 100644 --- a/src/sage/schemes/projective/projective_space.py +++ b/src/sage/schemes/projective/projective_space.py @@ -81,7 +81,7 @@ from sage.arith.misc import gcd, binomial -from sage.rings.finite_rings.finite_field_constructor import is_FiniteField +from sage.rings.finite_rings.finite_field_base import FiniteField from sage.rings.integer import Integer from sage.rings.integer_ring import ZZ from sage.rings.polynomial.multi_polynomial_ring import is_MPolynomialRing @@ -256,7 +256,7 @@ def ProjectiveSpace(n, R=None, names=None): if R is None: R = ZZ # default is the integers if R in _Fields: - if is_FiniteField(R): + if isinstance(R, FiniteField): return ProjectiveSpace_finite_field(n, R, names) if is_RationalField(R): return ProjectiveSpace_rational_field(n, R, names) @@ -2253,7 +2253,7 @@ def rational_points(self, F=None): """ if F is None: return [P for P in self] - elif not is_FiniteField(F): + elif not isinstance(F, FiniteField): raise TypeError("second argument (= %s) must be a finite field" % F) return [P for P in self.base_extend(F)] diff --git a/src/sage/schemes/projective/projective_subscheme.py b/src/sage/schemes/projective/projective_subscheme.py index 8a93cb30d83..4a178c53766 100644 --- a/src/sage/schemes/projective/projective_subscheme.py +++ b/src/sage/schemes/projective/projective_subscheme.py @@ -29,7 +29,7 @@ from sage.matrix.constructor import matrix from sage.rings.integer_ring import ZZ -from sage.rings.finite_rings.finite_field_constructor import is_FiniteField +from sage.rings.finite_rings.finite_field_base import FiniteField from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.rings.rational_field import is_RationalField @@ -982,7 +982,7 @@ def dual(self): from sage.libs.singular.function_factory import ff K = self.base_ring() - if not (is_RationalField(K) or is_FiniteField(K)): + if not (is_RationalField(K) or isinstance(K, FiniteField)): raise NotImplementedError("base ring must be QQ or a finite field") I = self.defining_ideal() m = I.ngens() diff --git a/src/sage/symbolic/ring.pyx b/src/sage/symbolic/ring.pyx index 2bfb28f249e..f1547a92301 100644 --- a/src/sage/symbolic/ring.pyx +++ b/src/sage/symbolic/ring.pyx @@ -217,7 +217,7 @@ cdef class SymbolicRing(sage.rings.abc.SymbolicRing): from sage.rings.complex_mpfr import ComplexField from sage.rings.infinity import InfinityRing, UnsignedInfinityRing from sage.rings.real_lazy import RLF, CLF - from sage.rings.finite_rings.finite_field_base import is_FiniteField + from sage.rings.finite_rings.finite_field_base import FiniteField from sage.interfaces.maxima import Maxima @@ -234,8 +234,8 @@ cdef class SymbolicRing(sage.rings.abc.SymbolicRing): sage.rings.abc.ComplexIntervalField, sage.rings.abc.RealBallField, sage.rings.abc.ComplexBallField, - sage.rings.abc.IntegerModRing)) - or is_FiniteField(R)): + sage.rings.abc.IntegerModRing, + FiniteField))): return True elif isinstance(R, GenericSymbolicSubring): return True