diff --git a/src/sage/categories/category_types.py b/src/sage/categories/category_types.py index ed4fdce2c62..faf22f2f3e3 100644 --- a/src/sage/categories/category_types.py +++ b/src/sage/categories/category_types.py @@ -616,8 +616,8 @@ def __contains__(self, x): """ if super().__contains__(x): return True - from sage.rings.ideal import is_Ideal - return is_Ideal(x) and x.ring() == self.ring() + from sage.rings.ideal import Ideal_generic + return isinstance(x, Ideal_generic) and x.ring() == self.ring() def __call__(self, v): """ diff --git a/src/sage/combinat/finite_state_machine.py b/src/sage/combinat/finite_state_machine.py index 480c4b4f890..b5facfc94a5 100644 --- a/src/sage/combinat/finite_state_machine.py +++ b/src/sage/combinat/finite_state_machine.py @@ -10790,8 +10790,8 @@ def entry(transition): else: base_ring = transition_matrix.parent().base_ring() from sage.rings.polynomial.multi_polynomial_ring \ - import is_MPolynomialRing - if is_MPolynomialRing(base_ring): + import MPolynomialRing_base + if isinstance(base_ring, MPolynomialRing_base): # if base_ring is already a multivariate polynomial # ring, extend it instead of creating a univariate # polynomial ring over a polynomial ring. This diff --git a/src/sage/crypto/lattice.py b/src/sage/crypto/lattice.py index 513730ff89f..1078f419132 100644 --- a/src/sage/crypto/lattice.py +++ b/src/sage/crypto/lattice.py @@ -22,7 +22,7 @@ # http://www.gnu.org/licenses/ #***************************************************************************** -from sage.rings.polynomial.polynomial_ring import is_PolynomialRing +from sage.rings.polynomial.polynomial_ring import PolynomialRing_general def gen_lattice(type='modular', n=4, m=8, q=11, seed=None, quotient=None, dual=False, ntl=False, lattice=False): @@ -254,7 +254,7 @@ def gen_lattice(type='modular', n=4, m=8, q=11, seed=None, P = quotient.parent() # P should be a univariate polynomial ring over ZZ_q - if not is_PolynomialRing(P): + if not isinstance(P, PolynomialRing_general): raise TypeError("quotient should be a univariate polynomial") assert P.base_ring() is ZZ_q diff --git a/src/sage/dynamics/arithmetic_dynamics/affine_ds.py b/src/sage/dynamics/arithmetic_dynamics/affine_ds.py index 2b9dd28b13b..5229e1c9f74 100644 --- a/src/sage/dynamics/arithmetic_dynamics/affine_ds.py +++ b/src/sage/dynamics/arithmetic_dynamics/affine_ds.py @@ -46,7 +46,7 @@ class initialization directly. from sage.rings.finite_rings.finite_field_base import FiniteField from sage.rings.fraction_field import FractionField from sage.rings.fraction_field import FractionField_generic -from sage.rings.quotient_ring import is_QuotientRing +from sage.rings.quotient_ring import QuotientRing_nc from sage.schemes.affine.affine_morphism import SchemeMorphism_polynomial_affine_space from sage.schemes.affine.affine_morphism import SchemeMorphism_polynomial_affine_space_field from sage.schemes.affine.affine_morphism import SchemeMorphism_polynomial_affine_space_finite_field @@ -268,7 +268,7 @@ def __classcall_private__(cls, morphism_or_polys, domain=None): PR = PR.ring().change_ring(K).fraction_field() polys = [PR(poly) for poly in polys] else: - quotient_ring = any(is_QuotientRing(poly.parent()) for poly in polys) + quotient_ring = any(isinstance(poly.parent(), QuotientRing_nc) for poly in polys) # If any of the list entries lies in a quotient ring, we try # to lift all entries to a common polynomial ring. if quotient_ring: diff --git a/src/sage/dynamics/arithmetic_dynamics/projective_ds.py b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py index a04cf57a28d..a553b9dd3a8 100644 --- a/src/sage/dynamics/arithmetic_dynamics/projective_ds.py +++ b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py @@ -94,9 +94,9 @@ class initialization directly. from sage.rings.integer_ring import ZZ from sage.rings.polynomial.flatten import FlatteningMorphism, UnflatteningMorphism from sage.rings.morphism import RingHomomorphism_im_gens -from sage.rings.polynomial.multi_polynomial_ring_base import is_MPolynomialRing +from sage.rings.polynomial.multi_polynomial_ring_base import MPolynomialRing_base from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing -from sage.rings.polynomial.polynomial_ring import is_PolynomialRing +from sage.rings.polynomial.polynomial_ring import PolynomialRing_general from sage.rings.quotient_ring import QuotientRing_generic from sage.rings.rational_field import QQ from sage.rings.real_mpfr import RealField @@ -384,7 +384,7 @@ def __classcall_private__(cls, morphism_or_polys, domain=None, names=None): polys = list(morphism_or_polys) if len(polys) == 1: raise ValueError("list/tuple must have at least 2 polynomials") - test = lambda x: is_PolynomialRing(x) or is_MPolynomialRing(x) + test = lambda x: isinstance(x, PolynomialRing_general) or isinstance(x, MPolynomialRing_base) if not all(test(poly.parent()) for poly in polys): try: polys = [poly.lift() for poly in polys] @@ -394,8 +394,8 @@ def __classcall_private__(cls, morphism_or_polys, domain=None, names=None): # homogenize! f = morphism_or_polys aff_CR = f.parent() - if (not is_PolynomialRing(aff_CR) and not isinstance(aff_CR, FractionField_generic) - and not (is_MPolynomialRing(aff_CR) and aff_CR.ngens() == 1)): + if (not isinstance(aff_CR, PolynomialRing_general) and not isinstance(aff_CR, FractionField_generic) + and not (isinstance(aff_CR, MPolynomialRing_base) and aff_CR.ngens() == 1)): msg = '{} is not a single variable polynomial or rational function' raise ValueError(msg.format(f)) if isinstance(aff_CR, FractionField_generic): @@ -3533,7 +3533,7 @@ def affine_preperiodic_model(self, m, n, return_conjugation=False): if hyperplane_found: break else: - if is_PolynomialRing(R) or is_MPolynomialRing(R) or isinstance(R, FractionField_generic): + if isinstance(R, PolynomialRing_general) or isinstance(R, MPolynomialRing_base) or isinstance(R, FractionField_generic): # for polynomial rings, we can get an infinite family of hyperplanes # by increasing the degree var = R.gen() @@ -4598,7 +4598,7 @@ def preperiodic_points(self, m, n, **kwds): for k in ZZ(n).divisors(): if ZZ(n/k).is_prime(): Sn.append(k) - if (is_PolynomialRing(R) or is_MPolynomialRing(R)): + if (isinstance(R, PolynomialRing_general) or isinstance(R, MPolynomialRing_base)): phi = FlatteningMorphism(CR) flatCR = phi.codomain() Ik = flatCR.ideal(1) @@ -4881,7 +4881,7 @@ def periodic_points(self, n, minimal=True, formal=False, R=None, algorithm='vari raise NotImplementedError('periodic points not implemented for fraction function fields; ' 'clear denominators and use the polynomial ring instead') if isinstance(R, FractionField_generic): - if is_MPolynomialRing(R.ring()): + if isinstance(R.ring(), MPolynomialRing_base): raise NotImplementedError('periodic points not implemented for fraction function fields; ' 'clear denominators and use the polynomial ring instead') CR = f_sub.coordinate_ring() @@ -4954,7 +4954,7 @@ def periodic_points(self, n, minimal=True, formal=False, R=None, algorithm='vari for k in ZZ(n).divisors(): if ZZ(n/k).is_prime(): Sn.append(k) - if (is_PolynomialRing(R) or is_MPolynomialRing(R)): + if (isinstance(R, PolynomialRing_general) or isinstance(R, MPolynomialRing_base)): phi = FlatteningMorphism(CR) flatCR = phi.codomain() Ik = flatCR.ideal(1) @@ -5785,7 +5785,7 @@ def sigma_invariants(self, n, formal=False, embedding=None, type='point', else: F = base_ring if isinstance(base_ring, FractionField_generic): - if is_MPolynomialRing(base_ring.ring()) or is_PolynomialRing(base_ring.ring()): + if isinstance(base_ring.ring(), MPolynomialRing_base) or isinstance(base_ring.ring(), PolynomialRing_general): f.normalize_coordinates() f_ring = f.change_ring(base_ring.ring()) X = f_ring.periodic_points(n, minimal=False, formal=formal, return_scheme=True) @@ -5888,7 +5888,7 @@ def sigma_invariants(self, n, formal=False, embedding=None, type='point', base_ring = dom.base_ring() if isinstance(base_ring, FractionField_generic): base_ring = base_ring.ring() - if (is_PolynomialRing(base_ring) or is_MPolynomialRing(base_ring)): + if (isinstance(base_ring, PolynomialRing_general) or isinstance(base_ring, MPolynomialRing_base)): base_ring = base_ring.base_ring() elif base_ring in FunctionFields(): base_ring = base_ring.constant_base_field() @@ -8437,6 +8437,14 @@ def normal_form(self, return_conjugation=False): To: Finite Field in z2 of size 3^2 Defn: 1 |--> 1 + Fixes :issue:`38012` by not forcing univariate polynomial to be univariate:: + + sage: R. = PolynomialRing(QQ) + sage: f = DynamicalSystem_affine(z^2 + z + 1).homogenize(1) + sage: f.normal_form() + Dynamical System of Projective Space of dimension 1 over Rational Field + Defn: Defined on coordinates by sending (x0 : x1) to + (x0^2 + 5/4*x1^2 : x1^2) """ # defines the field of fixed points if self.codomain().dimension_relative() != 1: @@ -8465,7 +8473,8 @@ def normal_form(self, return_conjugation=False): #we find one and not go all the way to the splitting field i = 0 if G.degree() != 0: - G = G.polynomial(G.variable(0)) + if isinstance(G.parent(), MPolynomialRing_base): + G = G.polynomial(G.variable(0)) else: #no other fixed points raise NotImplementedError("map is not a polynomial") diff --git a/src/sage/ext/fast_callable.pyx b/src/sage/ext/fast_callable.pyx index 9d2db75be3d..48c736fff93 100644 --- a/src/sage/ext/fast_callable.pyx +++ b/src/sage/ext/fast_callable.pyx @@ -475,9 +475,9 @@ def fast_callable(x, domain=None, vars=None, x = x.function(*vars) if vars is None: - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing - from sage.rings.polynomial.multi_polynomial_ring import is_MPolynomialRing - if is_PolynomialRing(x.parent()) or is_MPolynomialRing(x.parent()): + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general + from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_base + if isinstance(x.parent(), PolynomialRing_general) or isinstance(x.parent(), MPolynomialRing_base): vars = x.parent().variable_names() else: # constant diff --git a/src/sage/interfaces/singular.py b/src/sage/interfaces/singular.py index c0ab80e0a68..5dd0672c137 100644 --- a/src/sage/interfaces/singular.py +++ b/src/sage/interfaces/singular.py @@ -1797,7 +1797,7 @@ def sage_poly(self, R=None, kcache=None): # TODO: Refactor imports to move this to the top from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_polydict from sage.rings.polynomial.multi_polynomial_libsingular import MPolynomialRing_libsingular - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general from sage.rings.polynomial.polydict import ETuple from sage.rings.polynomial.polynomial_singular_interface import can_convert_to_singular from sage.rings.quotient_ring import QuotientRing_generic @@ -1888,7 +1888,7 @@ def sage_poly(self, R=None, kcache=None): return R(sage_repr) - elif is_PolynomialRing(R) and (ring_is_fine or can_convert_to_singular(R)): + elif isinstance(R, PolynomialRing_general) and (ring_is_fine or can_convert_to_singular(R)): sage_repr = [0] * int(self.deg() + 1) diff --git a/src/sage/matrix/matrix_space.py b/src/sage/matrix/matrix_space.py index 71eb305c2be..038b7673561 100644 --- a/src/sage/matrix/matrix_space.py +++ b/src/sage/matrix/matrix_space.py @@ -298,7 +298,7 @@ def get_matrix_class(R, nrows, ncols, sparse, implementation): except ImportError: pass else: - if polynomial_ring.is_PolynomialRing(R) and R.base_ring() in _Fields: + if isinstance(R, polynomial_ring.PolynomialRing_general) and R.base_ring() in _Fields: try: from . import matrix_polynomial_dense except ImportError: @@ -306,7 +306,7 @@ def get_matrix_class(R, nrows, ncols, sparse, implementation): else: return matrix_polynomial_dense.Matrix_polynomial_dense - elif multi_polynomial_ring_base.is_MPolynomialRing(R) and R.base_ring() in _Fields: + elif isinstance(R, multi_polynomial_ring_base.MPolynomialRing_base) and R.base_ring() in _Fields: try: from . import matrix_mpolynomial_dense except ImportError: diff --git a/src/sage/modular/modform/hecke_operator_on_qexp.py b/src/sage/modular/modform/hecke_operator_on_qexp.py index daf4c3bfbec..3dc270b657b 100644 --- a/src/sage/modular/modform/hecke_operator_on_qexp.py +++ b/src/sage/modular/modform/hecke_operator_on_qexp.py @@ -19,7 +19,7 @@ from sage.rings.infinity import Infinity from sage.rings.integer import Integer from sage.rings.integer_ring import ZZ -from sage.rings.power_series_ring_element import is_PowerSeries +from sage.rings.power_series_ring_element import PowerSeries lazy_import('sage.rings.number_field.number_field', 'CyclotomicField') @@ -87,7 +87,7 @@ def hecke_operator_on_qexp(f, n, k, eps=None, # ZZ can coerce to GF(p), but QQ can't. eps = DirichletGroup(1, base_ring=ZZ)[0] if check: - if not (is_PowerSeries(f) or isinstance(f, ModularFormElement)): + if not (isinstance(f, PowerSeries) or isinstance(f, ModularFormElement)): raise TypeError("f (=%s) must be a power series or modular form" % f) if not isinstance(eps, DirichletCharacter): raise TypeError("eps (=%s) must be a Dirichlet character" % eps) @@ -235,7 +235,7 @@ def hecke_operator_on_basis(B, n, k, eps=None, already_echelonized=False): eps = DirichletGroup(1, R)[0] all_powerseries = True for x in B: - if not is_PowerSeries(x): + if not isinstance(x, PowerSeries): all_powerseries = False if not all_powerseries: raise TypeError("each element of B must be a power series") diff --git a/src/sage/modular/modform/space.py b/src/sage/modular/modform/space.py index 7dba1ae3a0f..5002b281518 100644 --- a/src/sage/modular/modform/space.py +++ b/src/sage/modular/modform/space.py @@ -70,7 +70,7 @@ from sage.rings.integer import Integer from sage.rings.integer_ring import ZZ from sage.rings.power_series_ring import PowerSeriesRing -from sage.rings.power_series_ring_element import is_PowerSeries +from sage.rings.power_series_ring_element import PowerSeries from sage.rings.rational_field import QQ from sage.categories.rings import Rings @@ -1121,7 +1121,7 @@ def _element_constructor_(self, x, check=True): return self(x.q_expansion(self._q_expansion_module().degree())) - elif is_PowerSeries(x): + elif isinstance(x, PowerSeries): if x.prec() == PlusInfinity(): if x == 0: return self.element_class(self, self.free_module().zero()) @@ -1914,7 +1914,7 @@ def find_in_space(self, f, forms=None, prec=None, indep=True): B = V.span_of_basis(w) else: B = V.span(w) - if is_PowerSeries(f) and f.prec() < n: + if isinstance(f, PowerSeries) and f.prec() < n: raise ValueError("you need at least %s terms of precision" % n) x = V(f.padded_list(n)) return B.coordinates(x) diff --git a/src/sage/modular/modform_hecketriangle/abstract_space.py b/src/sage/modular/modform_hecketriangle/abstract_space.py index 719d8847f31..dda22dd1b34 100644 --- a/src/sage/modular/modform_hecketriangle/abstract_space.py +++ b/src/sage/modular/modform_hecketriangle/abstract_space.py @@ -23,7 +23,7 @@ from sage.rings.integer import Integer from sage.rings.integer_ring import ZZ from sage.rings.laurent_series_ring import is_LaurentSeriesRing -from sage.rings.polynomial.polynomial_ring import is_PolynomialRing +from sage.rings.polynomial.polynomial_ring import PolynomialRing_general from sage.rings.power_series_ring import is_PowerSeriesRing from sage.rings.rational_field import QQ from sage.structure.element import parent @@ -1721,7 +1721,7 @@ def construct_form(self, laurent_series, order_1=ZZ(0), check=True, rationalize= """ base_ring = laurent_series.base_ring() - if is_PolynomialRing(base_ring.base()): + if isinstance(base_ring.base(), PolynomialRing_general): if not (self.coeff_ring().has_coerce_map_from(base_ring)): raise ValueError("The Laurent coefficients don't coerce into the coefficient ring of self!") elif rationalize: @@ -2015,7 +2015,7 @@ def construct_quasi_form(self, laurent_series, order_1=ZZ(0), check=True, ration """ base_ring = laurent_series.base_ring() - if is_PolynomialRing(base_ring.base()): + if isinstance(base_ring.base(), PolynomialRing_general): if not (self.coeff_ring().has_coerce_map_from(base_ring)): raise ValueError("The Laurent coefficients don't coerce into the coefficient ring of self!") elif rationalize: @@ -2282,7 +2282,7 @@ def rationalize_series(self, laurent_series, coeff_bound=1e-10, denom_factor=ZZ( # If the coefficients already coerce to our coefficient ring # and are in polynomial form we simply return the Laurent series - if (is_PolynomialRing(base_ring.base())): + if (isinstance(base_ring.base(), PolynomialRing_general)): if (self.coeff_ring().has_coerce_map_from(base_ring)): return laurent_series else: diff --git a/src/sage/modular/modform_hecketriangle/functors.py b/src/sage/modular/modform_hecketriangle/functors.py index b0fdfcf5ac7..caf554da0de 100644 --- a/src/sage/modular/modform_hecketriangle/functors.py +++ b/src/sage/modular/modform_hecketriangle/functors.py @@ -79,7 +79,7 @@ def _get_base_ring(ring, var_name="d"): """ # from sage.rings.fraction_field import FractionField_generic - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general from sage.categories.pushout import FractionField as FractionFieldFunctor base_ring = ring @@ -87,7 +87,7 @@ def _get_base_ring(ring, var_name="d"): # base_ring = base_ring.base() if (base_ring.construction() and base_ring.construction()[0] == FractionFieldFunctor()): base_ring = base_ring.construction()[1] - if (is_PolynomialRing(base_ring) and base_ring.ngens() == 1 and base_ring.variable_name() == var_name): + if (isinstance(base_ring, PolynomialRing_general) and base_ring.ngens() == 1 and base_ring.variable_name() == var_name): base_ring = base_ring.base() if (base_ring.construction() and base_ring.construction()[0] == FractionFieldFunctor()): base_ring = base_ring.construction()[1] diff --git a/src/sage/rings/asymptotic/asymptotic_ring.py b/src/sage/rings/asymptotic/asymptotic_ring.py index d85f407872f..3eff60575f7 100644 --- a/src/sage/rings/asymptotic/asymptotic_ring.py +++ b/src/sage/rings/asymptotic/asymptotic_ring.py @@ -4078,8 +4078,8 @@ def _element_constructor_(self, data, simplify=True, convert=True): from .misc import combine_exceptions from sage.symbolic.ring import SymbolicRing - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing - from sage.rings.polynomial.multi_polynomial_ring_base import is_MPolynomialRing + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general + from sage.rings.polynomial.multi_polynomial_ring_base import MPolynomialRing_base from sage.rings.power_series_ring import is_PowerSeriesRing if isinstance(P, SymbolicRing): @@ -4097,7 +4097,7 @@ def _element_constructor_(self, data, simplify=True, convert=True): (data, self)), e) return sum(summands, self.zero()) - elif is_PolynomialRing(P): + elif isinstance(P, PolynomialRing_general): p = P.gen() try: return sum(iter(self.create_summand('exact', growth=p**i, @@ -4108,7 +4108,7 @@ def _element_constructor_(self, data, simplify=True, convert=True): raise combine_exceptions( ValueError('Polynomial %s is not in %s' % (data, self)), e) - elif is_MPolynomialRing(P): + elif isinstance(P, MPolynomialRing_base): try: return sum(iter(self.create_summand('exact', growth=g, coefficient=c) for c, g in iter(data)), diff --git a/src/sage/rings/asymptotic/asymptotics_multivariate_generating_functions.py b/src/sage/rings/asymptotic/asymptotics_multivariate_generating_functions.py index f5163d394a5..dbfac432165 100644 --- a/src/sage/rings/asymptotic/asymptotics_multivariate_generating_functions.py +++ b/src/sage/rings/asymptotic/asymptotics_multivariate_generating_functions.py @@ -510,10 +510,10 @@ def dimension(self): sage: F.dimension() 2 """ - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing - from sage.rings.polynomial.multi_polynomial_ring_base import is_MPolynomialRing + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general + from sage.rings.polynomial.multi_polynomial_ring_base import MPolynomialRing_base R = self.denominator_ring - if is_PolynomialRing(R) or is_MPolynomialRing(R): + if isinstance(R, PolynomialRing_general) or isinstance(R, MPolynomialRing_base): return R.ngens() raise NotImplementedError('only polynomial rings are supported as base') @@ -3222,9 +3222,9 @@ def _element_constructor_(self, *args, **kwargs): p = numerator q = R(denominator) - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing - from sage.rings.polynomial.multi_polynomial_ring_base import is_MPolynomialRing - if is_PolynomialRing(R) or is_MPolynomialRing(R): + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general + from sage.rings.polynomial.multi_polynomial_ring_base import MPolynomialRing_base + if isinstance(R, PolynomialRing_general) or isinstance(R, MPolynomialRing_base): if not R(q).is_unit(): # Factor denominator try: @@ -3292,9 +3292,9 @@ def _coerce_map_from_(self, P): from sage.rings.fraction_field import FractionField_generic if isinstance(P, FractionField_generic): B = P.base() - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing - from sage.rings.polynomial.multi_polynomial_ring_base import is_MPolynomialRing - if is_PolynomialRing(B) or is_MPolynomialRing(B): + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general + from sage.rings.polynomial.multi_polynomial_ring_base import MPolynomialRing_base + if isinstance(B, PolynomialRing_general) or isinstance(B, MPolynomialRing_base): if self.base().has_coerce_map_from(B): return True diff --git a/src/sage/rings/asymptotic/growth_group.py b/src/sage/rings/asymptotic/growth_group.py index 1d7d3049405..1cb36bf08d2 100644 --- a/src/sage/rings/asymptotic/growth_group.py +++ b/src/sage/rings/asymptotic/growth_group.py @@ -1805,9 +1805,9 @@ def _initial_category_(base): # The following block can be removed once #19269 is fixed. from sage.rings.integer_ring import ZZ from sage.rings.rational_field import QQ - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general if base is ZZ or base is QQ or \ - is_PolynomialRing(base) and \ + isinstance(base, PolynomialRing_general) and \ (base.base_ring() is ZZ or base.base_ring() is QQ): return Posets() else: diff --git a/src/sage/rings/asymptotic/misc.py b/src/sage/rings/asymptotic/misc.py index c33ea3e5a94..3d01676282c 100644 --- a/src/sage/rings/asymptotic/misc.py +++ b/src/sage/rings/asymptotic/misc.py @@ -149,8 +149,8 @@ def parent_to_repr_short(P): from sage.rings.real_mpfi import RIF from sage.rings.real_mpfr import RR from sage.symbolic.ring import SR - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing - from sage.rings.polynomial.multi_polynomial_ring_base import is_MPolynomialRing + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general + from sage.rings.polynomial.multi_polynomial_ring_base import MPolynomialRing_base from sage.rings.power_series_ring import is_PowerSeriesRing def abbreviate(P): @@ -168,7 +168,7 @@ def abbreviate(P): pass raise ValueError('Cannot abbreviate %s.' % (P,)) - poly = is_PolynomialRing(P) or is_MPolynomialRing(P) + poly = isinstance(P, PolynomialRing_general) or isinstance(P, MPolynomialRing_base) from sage.rings import multi_power_series_ring power = is_PowerSeriesRing(P) or \ multi_power_series_ring.is_MPowerSeriesRing(P) diff --git a/src/sage/rings/finite_rings/residue_field.pyx b/src/sage/rings/finite_rings/residue_field.pyx index 7a7fa6dfc23..b9663dd0f08 100644 --- a/src/sage/rings/finite_rings/residue_field.pyx +++ b/src/sage/rings/finite_rings/residue_field.pyx @@ -182,14 +182,14 @@ from sage.rings.integer_ring import ZZ from sage.rings.rational_field import QQ from sage.rings.finite_rings.finite_field_constructor import zech_log_bound, FiniteField as GF from sage.rings.finite_rings.finite_field_prime_modn import FiniteField_prime_modn -from sage.rings.ideal import is_Ideal +from sage.rings.ideal import Ideal_generic from sage.rings.number_field.number_field_element_base import NumberFieldElement_base from sage.rings.number_field.number_field_ideal import NumberFieldIdeal from sage.rings.fraction_field import FractionField_generic from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing -from sage.rings.polynomial.polynomial_ring import is_PolynomialRing +from sage.rings.polynomial.polynomial_ring import PolynomialRing_general from sage.rings.polynomial.polynomial_element import Polynomial from sage.structure.element cimport Element, parent, Vector @@ -322,7 +322,7 @@ class ResidueFieldFactory(UniqueFactory): Residue field in abar of Fractional ideal (2*a^2 + 3*a - 10) """ if check: - if not is_Ideal(p): + if not isinstance(p, Ideal_generic): if isinstance(p, (int, Integer, Rational)): p = ZZ.ideal(p) elif isinstance(p, NumberFieldElement_base): @@ -339,7 +339,7 @@ class ResidueFieldFactory(UniqueFactory): raise ValueError("p must be an ideal or element of a number field or function field.") if not p.is_prime(): raise ValueError("p (%s) must be prime" % p) - if is_PolynomialRing(p.ring()): + if isinstance(p.ring(), PolynomialRing_general): if not p.ring().base_ring().is_finite(): raise ValueError("residue fields only supported for polynomial rings over finite fields") if not p.ring().base_ring().is_prime_field(): @@ -375,7 +375,7 @@ class ResidueFieldFactory(UniqueFactory): if pring is ZZ: return ResidueFiniteField_prime_modn(p, names, p.gen(), None, None, None) - if is_PolynomialRing(pring): + if isinstance(pring, PolynomialRing_general): K = pring.fraction_field() Kbase = pring.base_ring() f = p.gen() @@ -1403,7 +1403,7 @@ cdef class ResidueFieldHomomorphism_global(RingHomomorphism): # No special code for residue fields of Z, since we just use the normal reduction map to GF(p) if self._K is ZZ: return self._F(x) - if is_PolynomialRing(self._K): + if isinstance(self._K, PolynomialRing_general): p = self._F.p.gen() if p.degree() == 1: return self._F((x % p)[0]) @@ -1661,7 +1661,7 @@ cdef class LiftingMap(Section): return self._K(self._K.ring_of_integers()(x)) else: return self._K(self._K.ring_of_integers()(x.polynomial().list())) - elif is_PolynomialRing(self._K): + elif isinstance(self._K, PolynomialRing_general): return self._K(x.polynomial().list()) # Else the lifting map is just x |--> to_order(x * PB) x = self._F(x) diff --git a/src/sage/rings/function_field/valuation.py b/src/sage/rings/function_field/valuation.py index 5bd32b7901e..c9d4f1bbe6f 100644 --- a/src/sage/rings/function_field/valuation.py +++ b/src/sage/rings/function_field/valuation.py @@ -242,8 +242,8 @@ def create_key_and_extra_args(self, domain, prime): # unique extension to domain base_valuation = domain.base_field().valuation(prime) return self.create_key_and_extra_args_from_valuation(domain, base_valuation) - from sage.rings.ideal import is_Ideal - if is_Ideal(prime): + from sage.rings.ideal import Ideal_generic + if isinstance(prime, Ideal_generic): raise NotImplementedError("a place cannot be given by an ideal yet") raise NotImplementedError("argument must be a place or a pseudo-valuation on a supported subring but %r does not satisfy this for the domain %r" % (prime, domain)) diff --git a/src/sage/rings/homset.py b/src/sage/rings/homset.py index 6e3126d7ebd..9b4a072e901 100644 --- a/src/sage/rings/homset.py +++ b/src/sage/rings/homset.py @@ -55,9 +55,9 @@ def RingHomset(R, S, category=None): Set of Homomorphisms from Integer Ring to Rational Field """ - if quotient_ring.is_QuotientRing(R): - from .polynomial.polynomial_quotient_ring import is_PolynomialQuotientRing - if not is_PolynomialQuotientRing(R): # backwards compatibility + if isinstance(R, quotient_ring.QuotientRing_nc): + from .polynomial.polynomial_quotient_ring import PolynomialQuotientRing_generic + if not isinstance(R, PolynomialQuotientRing_generic): # backwards compatibility return RingHomset_quo_ring(R, S, category=category) return RingHomset_generic(R, S, category=category) diff --git a/src/sage/rings/ideal.py b/src/sage/rings/ideal.py index ccb9128a540..9ef03a7133d 100644 --- a/src/sage/rings/ideal.py +++ b/src/sage/rings/ideal.py @@ -222,6 +222,9 @@ def is_Ideal(x): sage: from sage.rings.ideal import is_Ideal sage: R = ZZ sage: is_Ideal(R) + doctest:warning... + DeprecationWarning: The function is_Ideal is deprecated; use 'isinstance(..., Ideal_generic)' instead. + See https://github.com/sagemath/sage/issues/38266 for details. False sage: 1*R; is_Ideal(1*R) Principal ideal (1) of Integer Ring @@ -240,6 +243,10 @@ def is_Ideal(x): sage: is_Ideal((x^2 + 1)*R) True """ + from sage.misc.superseded import deprecation + deprecation(38266, + "The function is_Ideal is deprecated; " + "use 'isinstance(..., Ideal_generic)' instead.") return isinstance(x, Ideal_generic) diff --git a/src/sage/rings/integer_ring.pyx b/src/sage/rings/integer_ring.pyx index a1574d00756..77e0be1dd79 100644 --- a/src/sage/rings/integer_ring.pyx +++ b/src/sage/rings/integer_ring.pyx @@ -958,7 +958,7 @@ cdef class IntegerRing_class(CommutativeRing): """ if isinstance(I, sage.rings.integer.Integer): n = I - elif sage.rings.ideal.is_Ideal(I): + elif isinstance(I, sage.rings.ideal.Ideal_generic): if not (I.ring() is self): raise TypeError("I must be an ideal of ZZ") n = I.gens()[0] @@ -1027,7 +1027,7 @@ cdef class IntegerRing_class(CommutativeRing): """ if isinstance(prime, sage.rings.integer.Integer): p = self.ideal(prime) - elif sage.rings.ideal.is_Ideal(prime): + elif isinstance(prime, sage.rings.ideal.Ideal_generic): if not (prime.ring() is self): raise TypeError("%s is not an ideal of ZZ" % prime) p = prime diff --git a/src/sage/rings/laurent_series_ring.py b/src/sage/rings/laurent_series_ring.py index e2b03bcca58..6e8e8a932b0 100644 --- a/src/sage/rings/laurent_series_ring.py +++ b/src/sage/rings/laurent_series_ring.py @@ -678,13 +678,13 @@ def _coerce_map_from_(self, P): from sage.rings.polynomial.laurent_polynomial_ring_base import ( LaurentPolynomialRing_generic, ) - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general from sage.rings.power_series_ring import is_PowerSeriesRing if ((is_LaurentSeriesRing(P) or isinstance(P, LaurentPolynomialRing_generic) or is_PowerSeriesRing(P) or - is_PolynomialRing(P)) + isinstance(P, PolynomialRing_general)) and P.variable_name() == self.variable_name() and A.has_coerce_map_from(P.base_ring())): return True diff --git a/src/sage/rings/laurent_series_ring_element.pyx b/src/sage/rings/laurent_series_ring_element.pyx index 62c244d1669..18dfe49843f 100644 --- a/src/sage/rings/laurent_series_ring_element.pyx +++ b/src/sage/rings/laurent_series_ring_element.pyx @@ -78,6 +78,10 @@ from sage.misc.derivative import multi_derivative def is_LaurentSeries(x): + from sage.misc.superseded import deprecation_cython + deprecation_cython(38266, + "The function is_LaurentSeries is deprecated; " + "use 'isinstance(..., LaurentSeries)' instead.") return isinstance(x, LaurentSeries) diff --git a/src/sage/rings/morphism.pyx b/src/sage/rings/morphism.pyx index bad89829a70..23942100ac0 100644 --- a/src/sage/rings/morphism.pyx +++ b/src/sage/rings/morphism.pyx @@ -898,7 +898,7 @@ cdef class RingHomomorphism(RingMap): Ideal (xx, xx*yy + 3*xx) of Quotient of Multivariate Polynomial Ring in x, y over Rational Field by the ideal (x^2, y^2) """ - if not ideal.is_Ideal(I): + if not isinstance(I, ideal.Ideal_generic): raise TypeError("I must be an ideal") R = self.codomain() return R.ideal([self(y) for y in I.gens()]) @@ -1038,10 +1038,10 @@ cdef class RingHomomorphism(RingMap): sage: f.kernel() # needs sage.libs.singular Ideal (0) of Multivariate Polynomial Ring in t, u over Rational Field """ - from sage.rings.polynomial.polynomial_quotient_ring import is_PolynomialQuotientRing - from sage.rings.quotient_ring import is_QuotientRing - from sage.rings.polynomial.multi_polynomial_ring import is_MPolynomialRing - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing + from sage.rings.polynomial.polynomial_quotient_ring import PolynomialQuotientRing_generic + from sage.rings.quotient_ring import QuotientRing_nc + from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_base + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general B = self.codomain() graph, from_B, to_A = self._graph_ideal() Q = graph.ring() @@ -1050,14 +1050,14 @@ cdef class RingHomomorphism(RingMap): # avoid adding the 0-ideal to the graph ideal in order to benefit # from a cached Gröbner basis graph_I = graph - elif (is_MPolynomialRing(B) or is_PolynomialRing(B) - or is_QuotientRing(B) or is_PolynomialQuotientRing(B)): + elif (isinstance(B, MPolynomialRing_base) or isinstance(B, PolynomialRing_general) + or isinstance(B, QuotientRing_nc) or isinstance(B, PolynomialQuotientRing_generic)): graph_I = graph + from_B(I) else: # non-zero fractional ideals of number fields not yet supported raise NotImplementedError("inverse image not implemented " "for ideals in %s" % B) - if is_QuotientRing(Q): + if isinstance(Q, QuotientRing_nc): # elimination_ideal does not work with quotient rings, so # switch to the cover ring gens_B_lifted = Q.cover_ring().gens()[:B.ngens()] @@ -1287,7 +1287,7 @@ cdef class RingHomomorphism(RingMap): ... NotImplementedError: rings are not commutative """ - from sage.rings.quotient_ring import is_QuotientRing + from sage.rings.quotient_ring import QuotientRing_nc from sage.rings.ideal import Ideal_generic A = self.domain() B = self.codomain() @@ -1306,7 +1306,7 @@ cdef class RingHomomorphism(RingMap): A_to_Q = A.hom(Q.gens()[B.ngens():], Q, check=False) B_to_Q = B.hom(Q.gens()[:B.ngens()], Q, check=False) graph = Q.ideal([B_to_Q(self(x)) - A_to_Q(x) for x in A.gens()]) - R = Q.cover_ring() if is_QuotientRing(Q) else Q + R = Q.cover_ring() if isinstance(Q, QuotientRing_nc) else Q R_to_A = R.hom(tuple([0] * B.ngens()) + A.gens(), A, check=False) Q_to_A = R_to_A if R is Q else R_to_A * Q.lifting_map() @@ -3139,12 +3139,12 @@ def _tensor_product_ring(B, A): """ from sage.rings.finite_rings.finite_field_base import FiniteField from sage.rings.number_field.number_field_base import NumberField - from sage.rings.polynomial.multi_polynomial_ring import is_MPolynomialRing - from sage.rings.polynomial.polynomial_quotient_ring import is_PolynomialQuotientRing - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing + from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_base + from sage.rings.polynomial.polynomial_quotient_ring import PolynomialQuotientRing_generic + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.rings.polynomial.term_order import TermOrder - from sage.rings.quotient_ring import is_QuotientRing + from sage.rings.quotient_ring import QuotientRing_nc if set(B.variable_names()).isdisjoint(A.variable_names()): names = B.variable_names() + A.variable_names() @@ -3154,7 +3154,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) + if (isinstance(A, PolynomialRing_general) or isinstance(A, PolynomialQuotientRing_generic) or (isinstance(A, (NumberField, FiniteField)) and not A.is_prime_field())): return TermOrder('lex', 1) @@ -3170,12 +3170,12 @@ def _tensor_product_ring(B, A): order=term_order(B) + term_order(A)) def relations(A, R_gens_A): - if is_MPolynomialRing(A) or is_PolynomialRing(A): + if isinstance(A, MPolynomialRing_base) or isinstance(A, PolynomialRing_general): return [] - elif is_PolynomialQuotientRing(A): + elif isinstance(A, PolynomialQuotientRing_generic): to_R = A.ambient().hom(R_gens_A, R, check=False) return [to_R(A.modulus())] - elif is_QuotientRing(A): + elif isinstance(A, QuotientRing_nc): to_R = A.ambient().hom(R_gens_A, R, check=False) return list(to_R(A.defining_ideal()).gens()) elif (isinstance(A, (NumberField, FiniteField)) diff --git a/src/sage/rings/multi_power_series_ring.py b/src/sage/rings/multi_power_series_ring.py index d399fdb6c0b..ab2b35d718c 100644 --- a/src/sage/rings/multi_power_series_ring.py +++ b/src/sage/rings/multi_power_series_ring.py @@ -207,9 +207,9 @@ from sage.rings.infinity import infinity from sage.rings.multi_power_series_ring_element import MPowerSeries -from sage.rings.polynomial.polynomial_ring import is_PolynomialRing +from sage.rings.polynomial.polynomial_ring import PolynomialRing_general from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing -from sage.rings.polynomial.multi_polynomial_ring import is_MPolynomialRing +from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_base from sage.rings.polynomial.term_order import TermOrder from sage.rings.power_series_ring import PowerSeriesRing, PowerSeriesRing_generic, is_PowerSeriesRing from sage.rings.ring import CommutativeRing @@ -663,8 +663,8 @@ def _coerce_impl(self, f): True """ P = f.parent() - if is_MPolynomialRing(P) or is_MPowerSeriesRing(P) \ - or is_PolynomialRing(P) or is_PowerSeriesRing(P): + if isinstance(P, MPolynomialRing_base) or is_MPowerSeriesRing(P) \ + or isinstance(P, PolynomialRing_general) or is_PowerSeriesRing(P): if set(P.variable_names()).issubset(set(self.variable_names())): if self.has_coerce_map_from(P.base_ring()): return self(f) @@ -827,8 +827,8 @@ def _coerce_map_from_(self, P): sage: R.has_coerce_map_from(L) True """ - if is_MPolynomialRing(P) or is_MPowerSeriesRing(P) \ - or is_PolynomialRing(P) or is_PowerSeriesRing(P): + if isinstance(P, MPolynomialRing_base) or is_MPowerSeriesRing(P) \ + or isinstance(P, PolynomialRing_general) or is_PowerSeriesRing(P): if set(P.variable_names()).issubset(set(self.variable_names())): if self.has_coerce_map_from(P.base_ring()): return True diff --git a/src/sage/rings/multi_power_series_ring_element.py b/src/sage/rings/multi_power_series_ring_element.py index 32e16def317..72cb8b4a2d8 100644 --- a/src/sage/rings/multi_power_series_ring_element.py +++ b/src/sage/rings/multi_power_series_ring_element.py @@ -159,7 +159,7 @@ from sage.rings.finite_rings.integer_mod_ring import Zmod from sage.rings.infinity import infinity, is_Infinite from sage.rings.integer import Integer -from sage.rings.polynomial.polynomial_ring import is_PolynomialRing +from sage.rings.polynomial.polynomial_ring import PolynomialRing_general from sage.rings.power_series_ring import is_PowerSeriesRing from sage.rings.power_series_ring_element import PowerSeries @@ -174,8 +174,14 @@ def is_MPowerSeries(f): sage: from sage.rings.multi_power_series_ring_element import is_MPowerSeries sage: M = PowerSeriesRing(ZZ,4,'v') sage: is_PowerSeries(M.random_element(10)) + doctest:warning... + DeprecationWarning: The function is_PowerSeries is deprecated; use 'isinstance(..., PowerSeries)' instead. + See https://github.com/sagemath/sage/issues/38266 for details. True sage: is_MPowerSeries(M.random_element(10)) + doctest:warning... + DeprecationWarning: The function is_MPowerSeries is deprecated; use 'isinstance(..., MPowerSeries)' instead. + See https://github.com/sagemath/sage/issues/38266 for details. True sage: T. = PowerSeriesRing(RR) sage: is_MPowerSeries(1 - v + v^2 +O(v^3)) @@ -183,6 +189,10 @@ def is_MPowerSeries(f): sage: is_PowerSeries(1 - v + v^2 +O(v^3)) True """ + from sage.misc.superseded import deprecation + deprecation(38266, + "The function is_MPowerSeries is deprecated; " + "use 'isinstance(..., MPowerSeries)' instead.") return isinstance(f, MPowerSeries) @@ -369,7 +379,7 @@ def __init__(self, parent, x=0, prec=infinity, is_gen=False, check=False): # x is either a multivariate or univariate power series # # test whether x coerces directly to designated parent - if is_MPowerSeries(x): + if isinstance(x, MPowerSeries): try: self._bg_value = parent._bg_ps_ring(x._bg_value) except TypeError: @@ -393,7 +403,7 @@ def __init__(self, parent, x=0, prec=infinity, is_gen=False, check=False): self._bg_value = parent._send_to_bg(x).add_bigoh(prec) # test whether x coerces to underlying polynomial ring of parent - elif is_PolynomialRing(xparent): + elif isinstance(xparent, PolynomialRing_general): self._bg_value = parent._send_to_bg(x).add_bigoh(prec) else: diff --git a/src/sage/rings/padics/padic_valuation.py b/src/sage/rings/padics/padic_valuation.py index 1cf29093ba6..757786a6300 100644 --- a/src/sage/rings/padics/padic_valuation.py +++ b/src/sage/rings/padics/padic_valuation.py @@ -122,7 +122,7 @@ def create_key_and_extra_args(self, R, prime=None, approximants=None): from sage.rings.rational_field import QQ from sage.rings.padics.padic_generic import pAdicGeneric from sage.rings.number_field.number_field_base import NumberField - from sage.rings.polynomial.polynomial_quotient_ring import is_PolynomialQuotientRing + from sage.rings.polynomial.polynomial_quotient_ring import PolynomialQuotientRing_generic if R.characteristic() != 0: # We do not support equal characteristic yet @@ -132,7 +132,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 isinstance(R.fraction_field(), NumberField) or is_PolynomialQuotientRing(R): + elif isinstance(R.fraction_field(), NumberField) or isinstance(R, PolynomialQuotientRing_generic): 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,)) @@ -362,13 +362,13 @@ def _normalize_number_field_data(self, R): x^2 + 1) """ - from sage.rings.polynomial.polynomial_quotient_ring import is_PolynomialQuotientRing + from sage.rings.polynomial.polynomial_quotient_ring import PolynomialQuotientRing_generic 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() - elif is_PolynomialQuotientRing(R): + elif isinstance(R, PolynomialQuotientRing_generic): from sage.categories.number_fields import NumberFields if R.base_ring().fraction_field() not in NumberFields(): raise NotImplementedError("cannot normalize quotients over %r" % (R.base_ring(),)) @@ -394,7 +394,7 @@ def create_object(self, version, key, **extra_args): from sage.rings.rational_field import QQ 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.polynomial.polynomial_quotient_ring import PolynomialQuotientRing_generic from sage.rings.number_field.number_field_base import NumberField R = key[0] parent = DiscretePseudoValuationSpace(R) @@ -412,7 +412,7 @@ def create_object(self, version, key, **extra_args): K = R.fraction_field() if isinstance(K, NumberField): G = K.relative_polynomial() - elif is_PolynomialQuotientRing(R): + elif isinstance(R, PolynomialQuotientRing_generic): G = R.modulus() else: raise NotImplementedError @@ -570,8 +570,8 @@ def is_unramified(self, G, include_steps=False, assume_squarefree=False): """ R = G.parent() - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing - if not is_PolynomialRing(R) or R.base_ring() is not self.domain() or not G.is_monic(): + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general + if not isinstance(R, PolynomialRing_general) or R.base_ring() is not self.domain() or not G.is_monic(): raise ValueError("G must be a monic univariate polynomial over the domain of this valuation") if not assume_squarefree and not G.is_squarefree(): raise ValueError("G must be squarefree") @@ -668,8 +668,8 @@ def is_totally_ramified(self, G, include_steps=False, assume_squarefree=False): """ R = G.parent() - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing - if not is_PolynomialRing(R) or R.base_ring() is not self.domain() or not G.is_monic(): + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general + if not isinstance(R, PolynomialRing_general) or R.base_ring() is not self.domain() or not G.is_monic(): raise ValueError("G must be a monic univariate polynomial over the domain of this valuation") if not assume_squarefree and not G.is_squarefree(): raise ValueError("G must be squarefree") @@ -800,9 +800,9 @@ def extensions(self, ring): if domain_fraction_field.is_subring(ring): return pAdicValuation(domain_fraction_field, self).extensions(ring) if self.domain().is_subring(ring): - from sage.rings.polynomial.polynomial_quotient_ring import is_PolynomialQuotientRing - if is_PolynomialQuotientRing(ring): - if is_PolynomialQuotientRing(self.domain()): + from sage.rings.polynomial.polynomial_quotient_ring import PolynomialQuotientRing_generic + if isinstance(ring, PolynomialQuotientRing_generic): + if isinstance(self.domain(), PolynomialQuotientRing_generic): if self.domain().modulus() == ring.modulus(): base_extensions = self._base_valuation.extensions(self._base_valuation.domain().change_ring(self._base_valuation.domain().base_ring().fraction_field())) return [pAdicValuation(ring, base._initial_approximation) for base in base_extensions] @@ -1463,8 +1463,8 @@ def _fraction_field(ring): if ring in Fields(): return ring - from sage.rings.polynomial.polynomial_quotient_ring import is_PolynomialQuotientRing - if is_PolynomialQuotientRing(ring): + from sage.rings.polynomial.polynomial_quotient_ring import PolynomialQuotientRing_generic + if isinstance(ring, PolynomialQuotientRing_generic): from sage.categories.integral_domains import IntegralDomains if ring in IntegralDomains(): return ring.base().change_ring(ring.base_ring().fraction_field()).quo(ring.modulus()) diff --git a/src/sage/rings/polynomial/flatten.py b/src/sage/rings/polynomial/flatten.py index ef71d2b13a6..da8da019c20 100644 --- a/src/sage/rings/polynomial/flatten.py +++ b/src/sage/rings/polynomial/flatten.py @@ -38,8 +38,8 @@ from sage.categories.morphism import Morphism from sage.misc.cachefunc import cached_method from .polynomial_ring_constructor import PolynomialRing -from .polynomial_ring import is_PolynomialRing -from .multi_polynomial_ring_base import is_MPolynomialRing +from .polynomial_ring import PolynomialRing_general +from .multi_polynomial_ring_base import MPolynomialRing_base from sage.rings.fraction_field import FractionField_generic from sage.rings.fraction_field_element import FractionFieldElement from sage.rings.polynomial.polydict import ETuple @@ -160,14 +160,14 @@ def __init__(self, domain): sage: fl.section()(fl(p)) == p True """ - if not is_PolynomialRing(domain) and not is_MPolynomialRing(domain): + if not isinstance(domain, PolynomialRing_general) and not isinstance(domain, MPolynomialRing_base): raise ValueError("domain should be a polynomial ring") ring = domain variables = [] intermediate_rings = [] - while is_PolynomialRing(ring) or is_MPolynomialRing(ring): + while isinstance(ring, PolynomialRing_general) or isinstance(ring, MPolynomialRing_base): intermediate_rings.append(ring) v = ring.variable_names() variables.extend(reversed(v)) @@ -181,7 +181,7 @@ def __init__(self, domain): if b not in variables: # not just variables[:i]! break variables[i] = b - if is_MPolynomialRing(domain): + if isinstance(domain, MPolynomialRing_base): codomain = PolynomialRing(ring, variables, len(variables)) else: codomain = PolynomialRing(ring, variables) @@ -221,12 +221,12 @@ def _call_(self, p): for ring in self._intermediate_rings: new_p = {} - if is_PolynomialRing(ring): + if isinstance(ring, PolynomialRing_general): for mon, pp in p.items(): assert pp.parent() is ring for i, j in pp.dict().items(): new_p[(i,)+(mon)] = j - elif is_MPolynomialRing(ring): + elif isinstance(ring, MPolynomialRing_base): for mon, pp in p.items(): assert pp.parent() is ring for mmon, q in pp.dict().items(): @@ -345,17 +345,17 @@ def __init__(self, domain, codomain): ... ValueError: rings must have the same number of variables """ - if not is_MPolynomialRing(domain): + if not isinstance(domain, MPolynomialRing_base): raise ValueError("domain should be a multivariate polynomial ring") - if not is_PolynomialRing(codomain) and not is_MPolynomialRing(codomain): + if not isinstance(codomain, PolynomialRing_general) and not isinstance(codomain, MPolynomialRing_base): raise ValueError("codomain should be a polynomial ring") ring = codomain intermediate_rings = [] while True: - is_polynomial_ring = is_PolynomialRing(ring) - if not (is_polynomial_ring or is_MPolynomialRing(ring)): + is_polynomial_ring = isinstance(ring, PolynomialRing_general) + if not (is_polynomial_ring or isinstance(ring, MPolynomialRing_base)): break intermediate_rings.append((ring, is_polynomial_ring)) ring = ring.base_ring() @@ -499,7 +499,7 @@ def __init__(self, domain, D): Defn: Defined on coordinates by sending (z) to (z^2 + 1.00000000000000) """ - if not is_PolynomialRing(domain) and not is_MPolynomialRing(domain): + if not isinstance(domain, PolynomialRing_general) and not isinstance(domain, MPolynomialRing_base): raise TypeError("domain should be a polynomial ring") # use only the generators that are in the stack somewhere, @@ -538,7 +538,7 @@ def __init__(self, domain, D): # Construct unflattened codomain R new_vars = [] R = domain - while is_PolynomialRing(R) or is_MPolynomialRing(R) or isinstance(R, FractionField_generic): + while isinstance(R, PolynomialRing_general) or isinstance(R, MPolynomialRing_base) or isinstance(R, FractionField_generic): if isinstance(R, FractionField_generic): # We've hit base_ring, so set _sub_specialization and exit the loop field_over = R.base() @@ -563,7 +563,7 @@ def __init__(self, domain, D): # We're still in the polynomials, so keep track of the tower old = R.gens() new = [t for t in old if t not in D] - force_multivariate = ((len(old) == 1) and is_MPolynomialRing(R)) + force_multivariate = ((len(old) == 1) and isinstance(R, MPolynomialRing_base)) new_vars.append((new, force_multivariate, old)) R = R.base_ring() diff --git a/src/sage/rings/polynomial/groebner_fan.py b/src/sage/rings/polynomial/groebner_fan.py index 83877f35072..148d92786fd 100644 --- a/src/sage/rings/polynomial/groebner_fan.py +++ b/src/sage/rings/polynomial/groebner_fan.py @@ -65,7 +65,7 @@ from sage.structure.sage_object import SageObject from sage.interfaces.gfan import gfan -from .multi_polynomial_ideal import is_MPolynomialIdeal +from .multi_polynomial_ideal import MPolynomialIdeal from .polynomial_ring_constructor import PolynomialRing from sage.rings.rational_field import QQ from sage.rings.integer import Integer @@ -824,7 +824,7 @@ class to compute the Stanley-Reisner ideal of the tropical prevariety:: if symmetry: print("WARNING! Symmetry option not yet implemented!!") self.__verbose = verbose - if not is_MPolynomialIdeal(I): + if not isinstance(I, MPolynomialIdeal): raise TypeError("I must be a multivariate polynomial ideal") if not prefix_check([str(R_gen) for R_gen in I.ring().gens()]): raise RuntimeError("Ring variables cannot contain each other as prefixes") diff --git a/src/sage/rings/polynomial/laurent_polynomial.pyx b/src/sage/rings/polynomial/laurent_polynomial.pyx index 650388e7f0f..d50daa8ecc5 100644 --- a/src/sage/rings/polynomial/laurent_polynomial.pyx +++ b/src/sage/rings/polynomial/laurent_polynomial.pyx @@ -13,7 +13,7 @@ from sage.structure.element import coerce_binop, parent from sage.structure.factorization import Factorization from sage.misc.derivative import multi_derivative from sage.rings.polynomial.polynomial_element import Polynomial -from sage.rings.polynomial.polynomial_ring import is_PolynomialRing +from sage.rings.polynomial.polynomial_ring import PolynomialRing_general from sage.structure.richcmp cimport richcmp, rich_to_bool from sage.rings.infinity import minus_infinity @@ -431,7 +431,7 @@ cdef class LaurentPolynomial_univariate(LaurentPolynomial): if self.__n < 0: raise ValueError("Laurent polynomial with negative valuation cannot be converted to polynomial") - if is_PolynomialRing(R): + if isinstance(R, PolynomialRing_general): return R(self.__u) << self.__n elif self.__n == 0: return R(self.__u) @@ -1401,8 +1401,8 @@ cdef class LaurentPolynomial_univariate(LaurentPolynomial): sage: f * (t^-2 + 1) + (1/2*t^4 + 1/2*t^3) * (t^-3 + 1) 1 """ - from sage.rings.ideal import is_Ideal - if is_Ideal(m): + from sage.rings.ideal import Ideal_generic + if isinstance(m, Ideal_generic): v = m.gens_reduced() if len(v) > 1: raise NotImplementedError("only inversion modulo principal ideals implemented") diff --git a/src/sage/rings/polynomial/laurent_polynomial_ring.py b/src/sage/rings/polynomial/laurent_polynomial_ring.py index c10db4a39ca..10ef6777303 100644 --- a/src/sage/rings/polynomial/laurent_polynomial_ring.py +++ b/src/sage/rings/polynomial/laurent_polynomial_ring.py @@ -235,18 +235,18 @@ def LaurentPolynomialRing(base_ring, *args, **kwds): sage: (w0 + 2*w8 + w13)^2 # needs sage.modules w0^2 + 4*w0*w8 + 4*w8^2 + 2*w0*w13 + 4*w8*w13 + w13^2 """ - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing - from sage.rings.polynomial.multi_polynomial_ring_base import is_MPolynomialRing + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general + from sage.rings.polynomial.multi_polynomial_ring_base import MPolynomialRing_base R = PolynomialRing(base_ring, *args, **kwds) if R in _cache: return _cache[R] # put () here to re-enable weakrefs - if is_PolynomialRing(R): + if isinstance(R, PolynomialRing_general): # univariate case P = LaurentPolynomialRing_univariate(R) else: - assert is_MPolynomialRing(R) + assert isinstance(R, MPolynomialRing_base) P = LaurentPolynomialRing_mpair(R) _cache[R] = P diff --git a/src/sage/rings/polynomial/multi_polynomial_ideal.py b/src/sage/rings/polynomial/multi_polynomial_ideal.py index d5b7dce9866..83ecff24c52 100644 --- a/src/sage/rings/polynomial/multi_polynomial_ideal.py +++ b/src/sage/rings/polynomial/multi_polynomial_ideal.py @@ -326,6 +326,10 @@ def is_MPolynomialIdeal(x) -> bool: but matches Magma's behavior. :: sage: is_MPolynomialIdeal(I) + doctest:warning... + DeprecationWarning: The function is_MPolynomialIdeal is deprecated; + use 'isinstance(..., MPolynomialIdeal)' instead. + See https://github.com/sagemath/sage/issues/38266 for details. False :: @@ -334,6 +338,10 @@ def is_MPolynomialIdeal(x) -> bool: sage: is_MPolynomialIdeal(I) True """ + from sage.misc.superseded import deprecation + deprecation(38266, + "The function is_MPolynomialIdeal is deprecated; " + "use 'isinstance(..., MPolynomialIdeal)' instead.") return isinstance(x, MPolynomialIdeal) @@ -592,12 +600,11 @@ def _groebner_cover(self): [[1], [1], [[[(2*a + 3)], [[1]]]]]] """ from sage.rings.fraction_field import FractionField_generic - from sage.rings.polynomial.multi_polynomial_ring_base import \ - is_MPolynomialRing - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing + from sage.rings.polynomial.multi_polynomial_ring_base import MPolynomialRing_base + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general F = self.base_ring() if (not isinstance(F, FractionField_generic) or - (not is_MPolynomialRing(F.ring()) and not is_PolynomialRing(F.ring()))): + not isinstance(F.ring(), (MPolynomialRing_base, PolynomialRing_general))): raise TypeError("the base ring must be a field with parameters") from sage.arith.functions import lcm from sage.libs.singular.function import lib, singular_function diff --git a/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx b/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx index 6b838190c52..ca305456a39 100644 --- a/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx +++ b/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx @@ -218,7 +218,7 @@ from sage.rings.polynomial.multi_polynomial_ring_base import BooleanPolynomialRi from sage.rings.polynomial.multi_polynomial_element import MPolynomial_polydict from sage.rings.polynomial.multi_polynomial_ideal import MPolynomialIdeal from sage.rings.polynomial.polydict cimport ETuple -from sage.rings.polynomial.polynomial_ring import is_PolynomialRing +from sage.rings.polynomial.polynomial_ring import PolynomialRing_general # base ring imports import sage.rings.abc @@ -509,7 +509,7 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_base): return True elif base_ring.has_coerce_map_from(other._mpoly_base_ring(self.variable_names())): return True - elif is_PolynomialRing(other): + elif isinstance(other, PolynomialRing_general): if base_ring.has_coerce_map_from(other._mpoly_base_ring(self.variable_names())): return True @@ -1099,8 +1099,8 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_base): coerce = kwds.get('coerce', True) if len(gens) == 1: gens = gens[0] - from sage.rings.ideal import is_Ideal - if is_Ideal(gens): + from sage.rings.ideal import Ideal_generic + if isinstance(gens, Ideal_generic): if gens.ring() is self: return gens gens = gens.gens() diff --git a/src/sage/rings/polynomial/multi_polynomial_ring.py b/src/sage/rings/polynomial/multi_polynomial_ring.py index 03343b85b99..20c7b68d48b 100644 --- a/src/sage/rings/polynomial/multi_polynomial_ring.py +++ b/src/sage/rings/polynomial/multi_polynomial_ring.py @@ -144,7 +144,7 @@ def __eq__(self, other): sage: loads(R.dumps()) == R True """ - if not is_MPolynomialRing(other): + if not isinstance(other, MPolynomialRing_base): return False return ((self.base_ring(), self.ngens(), self.variable_names(), self.term_order()) == @@ -943,8 +943,8 @@ def ideal(self, *gens, **kwds): """ do_coerce = False if len(gens) == 1: - from sage.rings.ideal import is_Ideal - if is_Ideal(gens[0]): + from sage.rings.ideal import Ideal_generic + if isinstance(gens[0], Ideal_generic): if gens[0].ring() is self: return gens[0] gens = gens[0].gens() diff --git a/src/sage/rings/polynomial/multi_polynomial_ring_base.pyx b/src/sage/rings/polynomial/multi_polynomial_ring_base.pyx index 55d2900fa61..3200f8a554c 100644 --- a/src/sage/rings/polynomial/multi_polynomial_ring_base.pyx +++ b/src/sage/rings/polynomial/multi_polynomial_ring_base.pyx @@ -29,6 +29,10 @@ from sage.rings.polynomial.polynomial_ring_constructor import (PolynomialRing, def is_MPolynomialRing(x): + from sage.misc.superseded import deprecation_cython + deprecation_cython(38266, + "The function is_MPolynomialRing is deprecated; " + "use 'isinstance(..., MPolynomialRing_base)' instead.") return isinstance(x, MPolynomialRing_base) @@ -135,7 +139,7 @@ cdef class MPolynomialRing_base(CommutativeRing): Multivariate Polynomial Ring in x, y over Rational Field """ base = self.base_ring() - if is_MPolynomialRing(base) or polynomial_ring.is_PolynomialRing(base): + if isinstance(base, MPolynomialRing_base) or isinstance(base, polynomial_ring.PolynomialRing_general): from sage.rings.polynomial.flatten import FlatteningMorphism return FlatteningMorphism(self) else: @@ -590,14 +594,14 @@ cdef class MPolynomialRing_base(CommutativeRing): P = x.parent() # polynomial rings in the same variable over the any base # that coerces in: - if is_MPolynomialRing(P): + if isinstance(P, MPolynomialRing_base): if P.variable_names() == self.variable_names(): if self.has_coerce_map_from(P.base_ring()): return self(x) elif self.base_ring().has_coerce_map_from(P._mpoly_base_ring(self.variable_names())): return self(x) - elif polynomial_ring.is_PolynomialRing(P): + elif isinstance(P, polynomial_ring.PolynomialRing_general): if P.variable_name() in self.variable_names(): if self.has_coerce_map_from(P.base_ring()): return self(x) @@ -634,7 +638,7 @@ cdef class MPolynomialRing_base(CommutativeRing): # One is not a parent -- not equal and not ordered return op == Py_NE - if not is_MPolynomialRing(right): + if not isinstance(right, MPolynomialRing_base): return op == Py_NE lft = left diff --git a/src/sage/rings/polynomial/multi_polynomial_sequence.py b/src/sage/rings/polynomial/multi_polynomial_sequence.py index b559993d39f..35227eb54f5 100644 --- a/src/sage/rings/polynomial/multi_polynomial_sequence.py +++ b/src/sage/rings/polynomial/multi_polynomial_sequence.py @@ -168,9 +168,9 @@ from sage.rings.finite_rings.finite_field_constructor import FiniteField as GF from sage.rings.infinity import Infinity from sage.rings.polynomial.multi_polynomial_ideal import MPolynomialIdeal -from sage.rings.polynomial.multi_polynomial_ring import is_MPolynomialRing +from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_base from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing -from sage.rings.quotient_ring import is_QuotientRing +from sage.rings.quotient_ring import QuotientRing_nc from sage.structure.sequence import Sequence_generic try: @@ -197,12 +197,17 @@ def is_PolynomialSequence(F): sage: F = Sequence(I, P); F [x^2 + y^2, x^2 - y^2] - sage: from sage.rings.polynomial.multi_polynomial_sequence import is_PolynomialSequence - sage: is_PolynomialSequence(F) + sage: from sage.rings.polynomial.multi_polynomial_sequence import PolynomialSequence_generic + sage: isinstance(F, PolynomialSequence_generic) True """ - return isinstance(F,PolynomialSequence_generic) + from sage.misc.superseded import deprecation + deprecation(38266, + "The function is_PolynomialSequence is deprecated; " + "use 'isinstance(..., PolynomialSequence_generic)' instead.") + return isinstance(F, PolynomialSequence_generic) + def PolynomialSequence(arg1, arg2=None, immutable=False, cr=False, cr_str=None): """ @@ -297,7 +302,7 @@ def PolynomialSequence(arg1, arg2=None, immutable=False, cr=False, cr_str=None): except ImportError: BooleanMonomialMonoid = () - is_ring = lambda r: is_MPolynomialRing(r) or isinstance(r, BooleanMonomialMonoid) or (is_QuotientRing(r) and is_MPolynomialRing(r.cover_ring())) + is_ring = lambda r: isinstance(r, MPolynomialRing_base) or isinstance(r, BooleanMonomialMonoid) or (isinstance(r, QuotientRing_nc) and isinstance(r.cover_ring(), MPolynomialRing_base)) if is_ring(arg1): ring, gens = arg1, arg2 @@ -958,7 +963,7 @@ def __add__(self, right): b^2 + 2*a*c + 2*b*d - c, a^127 + a] """ - if is_PolynomialSequence(right) and right.ring() == self.ring(): + if isinstance(right, PolynomialSequence_generic) and right.ring() == self.ring(): return PolynomialSequence(self.ring(), self.parts() + right.parts()) elif isinstance(right,(tuple,list)) and all((x.parent() == self.ring() for x in right)): diff --git a/src/sage/rings/polynomial/polynomial_element.pyx b/src/sage/rings/polynomial/polynomial_element.pyx index dcf2af7cdf2..9029427c6a1 100644 --- a/src/sage/rings/polynomial/polynomial_element.pyx +++ b/src/sage/rings/polynomial/polynomial_element.pyx @@ -118,9 +118,9 @@ from sage.arith.functions import lcm from sage.rings.polynomial import polynomial_fateman -from sage.rings.ideal import is_Ideal -from sage.rings.polynomial.polynomial_ring import is_PolynomialRing -from sage.rings.polynomial.multi_polynomial_ring import is_MPolynomialRing +from sage.rings.ideal import Ideal_generic +from sage.rings.polynomial.polynomial_ring import PolynomialRing_general +from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_base from sage.rings.polynomial.multi_polynomial cimport MPolynomial from sage.rings.polynomial.polynomial_quotient_ring_element import PolynomialQuotientRingElement from sage.misc.cachefunc import cached_function @@ -1616,8 +1616,8 @@ cdef class Polynomial(CommutativePolynomial): - Robert Bradshaw (2007-05-31) """ - from sage.rings.ideal import is_Ideal - if is_Ideal(m): + from sage.rings.ideal import Ideal_generic + if isinstance(m, Ideal_generic): v = m.gens_reduced() if len(v) > 1: raise NotImplementedError("Don't know how to invert modulo non-principal ideal %s" % m) @@ -7550,7 +7550,7 @@ cdef class Polynomial(CommutativePolynomial): raise TypeError("p2 must be a polynomial") p1, p2 = coercion_model.canonical_coercion(p1, p2) K = p1.parent() - assert is_PolynomialRing(p1.parent()) + assert isinstance(p1.parent(), PolynomialRing_general) S = K.base_ring() Sf = S.fraction_field() @@ -7984,7 +7984,7 @@ cdef class Polynomial(CommutativePolynomial): return self # return 0 n = self.degree() base_ring = self._parent.base_ring() - if (is_MPolynomialRing(base_ring) or + if (isinstance(base_ring, MPolynomialRing_base) or is_PowerSeriesRing(base_ring)): # It is often cheaper to compute discriminant of simple # multivariate polynomial and substitute the real @@ -9988,7 +9988,7 @@ cdef class Polynomial(CommutativePolynomial): _p = self._parent.coerce(p) elif p is infinity.infinity: return -self.degree() - elif is_Ideal(p) and p.ring() is self._parent: # eventually need to handle fractional ideals in the fraction field + elif isinstance(p, Ideal_generic) and p.ring() is self._parent: # eventually need to handle fractional ideals in the fraction field if self._parent.base_ring().is_field(): # common case _p = p.gen() else: diff --git a/src/sage/rings/polynomial/polynomial_quotient_ring.py b/src/sage/rings/polynomial/polynomial_quotient_ring.py index 0ce0673ad67..e97f8b03f19 100644 --- a/src/sage/rings/polynomial/polynomial_quotient_ring.py +++ b/src/sage/rings/polynomial/polynomial_quotient_ring.py @@ -266,6 +266,10 @@ def create_object(self, version, key): PolynomialQuotientRing = PolynomialQuotientRingFactory("PolynomialQuotientRing") def is_PolynomialQuotientRing(x): + from sage.misc.superseded import deprecation + deprecation(38266, + "The function is_PolynomialQuotientRing is deprecated; " + "use 'isinstance(..., PolynomialQuotientRing_generic)' instead.") return isinstance(x, PolynomialQuotientRing_generic) @@ -1342,10 +1346,10 @@ def _S_decomposition(self, S): if not isinstance(K, NumberField) or not self.__polynomial.is_squarefree(): raise NotImplementedError - from sage.rings.ideal import is_Ideal + from sage.rings.ideal import Ideal_generic for p in S: # second check due to inconsistency over QQ - see # 7596 - if not (is_Ideal(p) + if not (isinstance(p, Ideal_generic) and (p.ring() is K or p.ring() is K.ring_of_integers()) and p.is_prime()): raise TypeError("S must be a list of prime ideals of the base field.") diff --git a/src/sage/rings/polynomial/polynomial_ring.py b/src/sage/rings/polynomial/polynomial_ring.py index d0d2d1241ab..628bce00ba5 100644 --- a/src/sage/rings/polynomial/polynomial_ring.py +++ b/src/sage/rings/polynomial/polynomial_ring.py @@ -191,6 +191,10 @@ def is_PolynomialRing(x): sage: from sage.rings.polynomial.polynomial_ring import is_PolynomialRing sage: from sage.rings.polynomial.multi_polynomial_ring import is_MPolynomialRing sage: is_PolynomialRing(2) + doctest:warning... + DeprecationWarning: The function is_PolynomialRing is deprecated; + use 'isinstance(..., PolynomialRing_general)' instead. + See https://github.com/sagemath/sage/issues/38266 for details. False This polynomial ring is not univariate. @@ -200,6 +204,10 @@ def is_PolynomialRing(x): sage: is_PolynomialRing(ZZ['x,y,z']) False sage: is_MPolynomialRing(ZZ['x,y,z']) + doctest:warning... + DeprecationWarning: The function is_MPolynomialRing is deprecated; + use 'isinstance(..., MPolynomialRing_base)' instead. + See https://github.com/sagemath/sage/issues/38266 for details. True :: @@ -221,6 +229,10 @@ def is_PolynomialRing(x): sage: type(R) """ + from sage.misc.superseded import deprecation + deprecation(38266, + "The function is_PolynomialRing is deprecated; " + "use 'isinstance(..., PolynomialRing_general)' instead.") return isinstance(x, PolynomialRing_general) @@ -616,9 +628,9 @@ def flattening_morphism(self): sage: QQ['x'].flattening_morphism() Identity endomorphism of Univariate Polynomial Ring in x over Rational Field """ - from .multi_polynomial_ring import is_MPolynomialRing + from .multi_polynomial_ring import MPolynomialRing_base base = self.base_ring() - if is_PolynomialRing(base) or is_MPolynomialRing(base): + if isinstance(base, PolynomialRing_general) or isinstance(base, MPolynomialRing_base): from .flatten import FlatteningMorphism return FlatteningMorphism(self) else: @@ -803,7 +815,7 @@ def _coerce_map_from_(self, P): # polynomial rings in the same variable over a base that canonically # coerces into self.base_ring() - if is_PolynomialRing(P): + if isinstance(P, PolynomialRing_general): if self.construction()[0] != P.construction()[0]: # Construction (including variable names) must be the # same to allow coercion @@ -842,8 +854,8 @@ def _coerce_map_from_(self, P): return PolynomialRingHomomorphism_from_base(RingHomset(P, self), f) # Last, we consider multivariate polynomial rings: - from sage.rings.polynomial.multi_polynomial_ring import is_MPolynomialRing - if is_MPolynomialRing(P) and self.variable_name() in P.variable_names(): + from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_base + if isinstance(P, MPolynomialRing_base) and self.variable_name() in P.variable_names(): P_ = P.remove_var(self.variable_name()) return self.base_ring() != P_ and self.base_ring().has_coerce_map_from(P_) @@ -1596,7 +1608,7 @@ def _Karatsuba_threshold(self): 0 """ base_ring = self.base_ring() - if is_PolynomialRing(base_ring): + if isinstance(base_ring, PolynomialRing_general): return 0 try: from sage.matrix.matrix_space import MatrixSpace diff --git a/src/sage/rings/power_series_mpoly.pyx b/src/sage/rings/power_series_mpoly.pyx index 714d939c30b..1acbdbd6e69 100644 --- a/src/sage/rings/power_series_mpoly.pyx +++ b/src/sage/rings/power_series_mpoly.pyx @@ -3,7 +3,7 @@ from sage.rings.power_series_ring_element cimport PowerSeries from sage.structure.element cimport Element from sage.rings.infinity import infinity -from sage.rings.polynomial.multi_polynomial_ring_base import is_MPolynomialRing +from sage.rings.polynomial.multi_polynomial_ring_base import MPolynomialRing_base from sage.rings import power_series_poly @@ -56,7 +56,7 @@ cdef class PowerSeries_mpoly(PowerSeries): # avoid having an if statement in the inner loop of a # doubly-nested for loop. d = {} - if is_MPolynomialRing(B): + if isinstance(B, MPolynomialRing_base): for i in range(len(v)): for n, c in v[i].dict().iteritems(): d[tuple(n) + (i,)] = c diff --git a/src/sage/rings/power_series_ring.py b/src/sage/rings/power_series_ring.py index 1052d963bdc..bc78e0d98e2 100644 --- a/src/sage/rings/power_series_ring.py +++ b/src/sage/rings/power_series_ring.py @@ -148,8 +148,8 @@ ) from sage.rings.fraction_field_element import FractionFieldElement from sage.rings.infinity import infinity -from sage.rings.polynomial.multi_polynomial_ring_base import is_MPolynomialRing -from sage.rings.polynomial.polynomial_ring import is_PolynomialRing +from sage.rings.polynomial.multi_polynomial_ring_base import MPolynomialRing_base +from sage.rings.polynomial.polynomial_ring import PolynomialRing_general from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.structure.category_object import normalize_names from sage.structure.element import Expression, parent @@ -580,7 +580,7 @@ def __init__(self, base_ring, name=None, default_prec=None, sparse=False, K = base_ring names = K.variable_names() + (name,) self.__mpoly_ring = PolynomialRing(K.base_ring(), names=names) - assert is_MPolynomialRing(self.__mpoly_ring) + assert isinstance(self.__mpoly_ring, MPolynomialRing_base) self.Element = power_series_mpoly.PowerSeries_mpoly elif implementation == 'pari': from .power_series_pari import PowerSeries_pari @@ -711,7 +711,7 @@ def _coerce_map_from_(self, S): """ if self.base_ring().has_coerce_map_from(S): return True - if (is_PolynomialRing(S) or is_PowerSeriesRing(S)) and self.base_ring().has_coerce_map_from(S.base_ring()) \ + if (isinstance(S, PolynomialRing_general) or is_PowerSeriesRing(S)) and self.base_ring().has_coerce_map_from(S.base_ring()) \ and self.variable_names() == S.variable_names(): return True diff --git a/src/sage/rings/power_series_ring_element.pyx b/src/sage/rings/power_series_ring_element.pyx index 8e1b76a7cc9..f05ef305d81 100644 --- a/src/sage/rings/power_series_ring_element.pyx +++ b/src/sage/rings/power_series_ring_element.pyx @@ -125,6 +125,9 @@ def is_PowerSeries(x): sage: R. = PowerSeriesRing(ZZ) sage: from sage.rings.power_series_ring_element import is_PowerSeries sage: is_PowerSeries(1 + x^2) + doctest:warning... + DeprecationWarning: The function is_PowerSeries is deprecated; use 'isinstance(..., PowerSeries)' instead. + See https://github.com/sagemath/sage/issues/38266 for details. True sage: is_PowerSeries(x - x) True @@ -135,6 +138,10 @@ def is_PowerSeries(x): sage: is_PowerSeries(1 + x^2) # needs sage.symbolic False """ + from sage.misc.superseded import deprecation_cython + deprecation_cython(38266, + "The function is_PowerSeries is deprecated; " + "use 'isinstance(..., PowerSeries)' instead.") return isinstance(x, PowerSeries) diff --git a/src/sage/rings/qqbar_decorators.py b/src/sage/rings/qqbar_decorators.py index 13d6d562824..7343a0b9b08 100644 --- a/src/sage/rings/qqbar_decorators.py +++ b/src/sage/rings/qqbar_decorators.py @@ -86,13 +86,13 @@ def wrapper(*args, **kwds): from sage.misc.flatten import flatten from sage.rings.polynomial.polynomial_element import Polynomial from sage.rings.polynomial.multi_polynomial import MPolynomial - from sage.rings.polynomial.multi_polynomial_sequence import PolynomialSequence, is_PolynomialSequence + from sage.rings.polynomial.multi_polynomial_sequence import PolynomialSequence, PolynomialSequence_generic from sage.rings.ideal import Ideal, Ideal_generic from sage.rings.abc import AlgebraicField_common if not any(isinstance(a, (Polynomial, MPolynomial, Ideal_generic)) and isinstance(a.base_ring(), AlgebraicField_common) - or is_PolynomialSequence(a) + or isinstance(a, PolynomialSequence_generic) and isinstance(a.ring().base_ring(), AlgebraicField_common) for a in args): return func(*args, **kwds) @@ -123,7 +123,7 @@ def forward_map(item): return item.map_coefficients(elem_dict.__getitem__, new_base_ring=numfield) elif isinstance(item, MPolynomial): return item.map_coefficients(elem_dict.__getitem__, new_base_ring=numfield) - elif is_PolynomialSequence(item): + elif isinstance(item, PolynomialSequence_generic): return PolynomialSequence(map(forward_map, item), immutable=item.is_immutable()) elif isinstance(item, list): @@ -144,7 +144,7 @@ def reverse_map(item): return item.map_coefficients(morphism) elif isinstance(item, MPolynomial): return item.map_coefficients(morphism) - elif is_PolynomialSequence(item): + elif isinstance(item, PolynomialSequence_generic): return PolynomialSequence(map(reverse_map, item), immutable=item.is_immutable()) elif isinstance(item, list): diff --git a/src/sage/rings/quotient_ring.py b/src/sage/rings/quotient_ring.py index 468f81115b7..49f2336cfb3 100644 --- a/src/sage/rings/quotient_ring.py +++ b/src/sage/rings/quotient_ring.py @@ -351,6 +351,10 @@ def is_QuotientRing(x): sage: I = R.ideal([4 + 3*x + x^2, 1 + x^2]) sage: S = R.quotient_ring(I) sage: is_QuotientRing(S) + doctest:warning... + DeprecationWarning: The function is_QuotientRing is deprecated; + use 'isinstance(..., QuotientRing_nc)' instead. + See https://github.com/sagemath/sage/issues/38266 for details. True sage: is_QuotientRing(R) False @@ -366,6 +370,10 @@ def is_QuotientRing(x): sage: is_QuotientRing(F) False """ + from sage.misc.superseded import deprecation + deprecation(38266, + "The function is_QuotientRing is deprecated; " + "use 'isinstance(..., QuotientRing_nc)' instead.") return isinstance(x, QuotientRing_nc) diff --git a/src/sage/rings/valuation/augmented_valuation.py b/src/sage/rings/valuation/augmented_valuation.py index 3d415c6e83c..de97c20fe0b 100644 --- a/src/sage/rings/valuation/augmented_valuation.py +++ b/src/sage/rings/valuation/augmented_valuation.py @@ -555,8 +555,8 @@ def extensions(self, ring): if ring is self.domain(): return [self] - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing - if is_PolynomialRing(ring): # univariate + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general + if isinstance(ring, PolynomialRing_general): # univariate base_valuations = self._base_valuation.extensions(ring) phi = self.phi().change_ring(ring.base_ring()) @@ -595,8 +595,8 @@ def restriction(self, ring): base = self._base_valuation.restriction(ring) if ring.is_subring(self.domain().base_ring()): return base - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing - if is_PolynomialRing(ring): # univariate + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general + if isinstance(ring, PolynomialRing_general): # univariate return base.augmentation(self.phi().change_ring(ring.base_ring()), self._mu) return super().restriction(ring) @@ -817,8 +817,8 @@ def change_domain(self, ring): [ Gauss valuation induced by 2-adic valuation, v(x) = 1 ] """ - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing - if is_PolynomialRing(ring) and ring.variable_name() == self.domain().variable_name(): + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general + if isinstance(ring, PolynomialRing_general) and ring.variable_name() == self.domain().variable_name(): return self._base_valuation.change_domain(ring).augmentation(self.phi().change_ring(ring.base_ring()), self._mu, check=False) return super().change_domain(ring) diff --git a/src/sage/rings/valuation/developing_valuation.py b/src/sage/rings/valuation/developing_valuation.py index f99c2b5161c..5387ec8dda7 100644 --- a/src/sage/rings/valuation/developing_valuation.py +++ b/src/sage/rings/valuation/developing_valuation.py @@ -83,8 +83,8 @@ def __init__(self, parent, phi): DiscretePseudoValuation.__init__(self, parent) domain = parent.domain() - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing - if not is_PolynomialRing(domain) or not domain.ngens() == 1: + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general + if not isinstance(domain, PolynomialRing_general) or not domain.ngens() == 1: raise TypeError("domain must be a univariate polynomial ring but %r is not" % (domain,)) phi = domain.coerce(phi) diff --git a/src/sage/rings/valuation/gauss_valuation.py b/src/sage/rings/valuation/gauss_valuation.py index 0443ba9c670..509fa0610ab 100644 --- a/src/sage/rings/valuation/gauss_valuation.py +++ b/src/sage/rings/valuation/gauss_valuation.py @@ -89,8 +89,8 @@ def create_key(self, domain, v=None): ValueError: the domain of v must be the base ring of domain but 2-adic valuation is not defined over Integer Ring but over Rational Field """ - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing - if not is_PolynomialRing(domain): + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general + if not isinstance(domain, PolynomialRing_general): raise TypeError("GaussValuations can only be created over polynomial rings but %r is not a polynomial ring" % (domain,)) if not domain.ngens() == 1: raise NotImplementedError("domain must be univariate but %r is not univariate" % (domain,)) @@ -527,8 +527,8 @@ def change_domain(self, ring): Gauss valuation induced by 2-adic valuation """ - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing - if is_PolynomialRing(ring) and ring.ngens() == 1: + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general + if isinstance(ring, PolynomialRing_general) and ring.ngens() == 1: base_valuation = self._base_valuation.change_domain(ring.base_ring()) return GaussValuation(self.domain().change_ring(ring.base_ring()), base_valuation) return super().change_domain(ring) @@ -546,8 +546,8 @@ def extensions(self, ring): [Gauss valuation induced by 2-adic valuation] """ - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing - if is_PolynomialRing(ring) and ring.ngens() == 1: + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general + if isinstance(ring, PolynomialRing_general) and ring.ngens() == 1: if self.domain().is_subring(ring): return [GaussValuation(ring, w) for w in self._base_valuation.extensions(ring.base_ring())] return super().extensions(ring) @@ -567,8 +567,8 @@ def restriction(self, ring): """ if ring.is_subring(self.domain().base_ring()): return self._base_valuation.restriction(ring) - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing - if is_PolynomialRing(ring) and ring.ngens() == 1: + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general + if isinstance(ring, PolynomialRing_general) and ring.ngens() == 1: if ring.base().is_subring(self.domain().base()): return GaussValuation(ring, self._base_valuation.restriction(ring.base())) return super().restriction(ring) diff --git a/src/sage/rings/valuation/inductive_valuation.py b/src/sage/rings/valuation/inductive_valuation.py index 40f405e1b21..017e808ab99 100644 --- a/src/sage/rings/valuation/inductive_valuation.py +++ b/src/sage/rings/valuation/inductive_valuation.py @@ -1700,8 +1700,8 @@ def change_domain(self, ring): 2-adic valuation """ - from sage.rings.polynomial.polynomial_quotient_ring import is_PolynomialQuotientRing - if is_PolynomialQuotientRing(ring) and ring.base() is self.domain() and ring.modulus() == self.phi(): + from sage.rings.polynomial.polynomial_quotient_ring import PolynomialQuotientRing_generic + if isinstance(ring, PolynomialQuotientRing_generic) and ring.base() is self.domain() and ring.modulus() == self.phi(): return self.restriction(self.domain().base())._extensions_to_quotient(ring, approximants=[self])[0] return super().change_domain(ring) diff --git a/src/sage/rings/valuation/limit_valuation.py b/src/sage/rings/valuation/limit_valuation.py index 11b41cf9fed..acb3fc478e0 100644 --- a/src/sage/rings/valuation/limit_valuation.py +++ b/src/sage/rings/valuation/limit_valuation.py @@ -422,8 +422,8 @@ def extensions(self, ring): """ if self.domain() is ring: return [self] - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing - if is_PolynomialRing(ring) and self.domain().base_ring().is_subring(ring.base_ring()): + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general + if isinstance(ring, PolynomialRing_general) and self.domain().base_ring().is_subring(ring.base_ring()): if self.domain().base_ring().fraction_field() is ring.base_ring(): return [LimitValuation(self._initial_approximation.change_domain(ring), self._G.change_ring(ring.base_ring()))] @@ -681,8 +681,8 @@ def residue_ring(self): # the approximation ends in v(phi)=infty return R else: - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing - assert (is_PolynomialRing(R)) + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general + assert (isinstance(R, PolynomialRing_general)) return R.base_ring() def _ge_(self, other): diff --git a/src/sage/rings/valuation/valuation_space.py b/src/sage/rings/valuation/valuation_space.py index 3eb143a6d4b..25ebb581430 100644 --- a/src/sage/rings/valuation/valuation_space.py +++ b/src/sage/rings/valuation/valuation_space.py @@ -535,8 +535,8 @@ def residue_field(self): from sage.categories.fields import Fields if ret in Fields(): return ret - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing - if is_PolynomialRing(ret): + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general + if isinstance(ret, PolynomialRing_general): from sage.rings.function_field.constructor import FunctionField return FunctionField(ret.base_ring().fraction_field(), names=(ret.variable_name(),)) return ret.fraction_field() diff --git a/src/sage/schemes/affine/affine_space.py b/src/sage/schemes/affine/affine_space.py index 889d9005ed6..2b297d0c672 100644 --- a/src/sage/schemes/affine/affine_space.py +++ b/src/sage/schemes/affine/affine_space.py @@ -15,8 +15,8 @@ from sage.rings.integer_ring import ZZ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.rings.rational_field import RationalField -from sage.rings.polynomial.polynomial_ring import is_PolynomialRing -from sage.rings.polynomial.multi_polynomial_ring import is_MPolynomialRing +from sage.rings.polynomial.polynomial_ring import PolynomialRing_general +from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_base from sage.rings.finite_rings.finite_field_base import FiniteField from sage.categories.map import Map from sage.categories.fields import Fields @@ -109,7 +109,7 @@ def AffineSpace(n, R=None, names=None, ambient_projective_space=None, ... NameError: variable names passed to AffineSpace conflict with names in ring """ - if (is_MPolynomialRing(n) or is_PolynomialRing(n)) and R is None: + if (isinstance(n, MPolynomialRing_base) or isinstance(n, PolynomialRing_general)) and R is None: R = n if names is not None: # Check for the case that the user provided a variable name diff --git a/src/sage/schemes/curves/constructor.py b/src/sage/schemes/curves/constructor.py index 687a238fcfa..4514943ddfd 100644 --- a/src/sage/schemes/curves/constructor.py +++ b/src/sage/schemes/curves/constructor.py @@ -39,7 +39,7 @@ from sage.categories.number_fields import NumberFields from sage.rings.polynomial.multi_polynomial import MPolynomial -from sage.rings.polynomial.multi_polynomial_ring import is_MPolynomialRing +from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_base from sage.rings.finite_rings.finite_field_base import FiniteField from sage.rings.rational_field import QQ @@ -240,7 +240,7 @@ def Curve(F, A=None): if isinstance(F, (list, tuple)): P = Sequence(F).universe() - if not is_MPolynomialRing(P): + if not isinstance(P, MPolynomialRing_base): raise TypeError("universe of F must be a multivariate polynomial ring") for f in F: if not f.is_homogeneous(): diff --git a/src/sage/schemes/elliptic_curves/constructor.py b/src/sage/schemes/elliptic_curves/constructor.py index 21470bd890a..ccbc004a8d3 100644 --- a/src/sage/schemes/elliptic_curves/constructor.py +++ b/src/sage/schemes/elliptic_curves/constructor.py @@ -28,7 +28,7 @@ from sage.rings.rational_field import RationalField import sage.rings.abc -from sage.rings.polynomial.multi_polynomial_ring import is_MPolynomialRing +from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_base from sage.rings.number_field.number_field_base import NumberField from sage.rings.finite_rings.finite_field_base import FiniteField from sage.rings.polynomial.multi_polynomial import MPolynomial @@ -1098,7 +1098,7 @@ def EllipticCurve_from_cubic(F, P=None, morphism=True): # check the input R = F.parent() K = R.base_ring() - if not is_MPolynomialRing(R): + if not isinstance(R, MPolynomialRing_base): raise TypeError('equation must be a polynomial') if R.ngens() != 3 or F.nvariables() != 3: raise TypeError('equation must be a polynomial in three variables') @@ -1333,7 +1333,7 @@ def chord_and_tangent(F, P): from sage.schemes.curves.constructor import Curve # check the input R = F.parent() - if not is_MPolynomialRing(R): + if not isinstance(R, MPolynomialRing_base): raise TypeError('equation must be a polynomial') if R.ngens() != 3: raise TypeError('{} is not a polynomial in three variables'.format(F)) diff --git a/src/sage/schemes/elliptic_curves/ell_local_data.py b/src/sage/schemes/elliptic_curves/ell_local_data.py index f600259eef7..d0bbd858d44 100644 --- a/src/sage/schemes/elliptic_curves/ell_local_data.py +++ b/src/sage/schemes/elliptic_curves/ell_local_data.py @@ -102,7 +102,7 @@ from sage.rings.number_field.number_field_ideal import NumberFieldFractionalIdeal from sage.rings.number_field.number_field_base import NumberField -from sage.rings.ideal import is_Ideal +from sage.rings.ideal import Ideal_generic from .constructor import EllipticCurve from .kodaira_symbol import KodairaSymbol @@ -1185,7 +1185,7 @@ def check_prime(K, P): raise TypeError("The element %s is not prime" % (P,)) elif P in QQ: raise TypeError("The element %s is not prime" % (P,)) - elif is_Ideal(P) and P.base_ring() is ZZ: + elif isinstance(P, Ideal_generic) and P.base_ring() is ZZ: if P.is_prime(): return P.gen() else: diff --git a/src/sage/schemes/generic/algebraic_scheme.py b/src/sage/schemes/generic/algebraic_scheme.py index 8cc0e544917..275379e1562 100644 --- a/src/sage/schemes/generic/algebraic_scheme.py +++ b/src/sage/schemes/generic/algebraic_scheme.py @@ -116,7 +116,7 @@ from sage.categories.number_fields import NumberFields -from sage.rings.ideal import is_Ideal +from sage.rings.ideal import Ideal_generic from sage.rings.integer_ring import ZZ from sage.rings.rational_field import RationalField from sage.rings.finite_rings.finite_field_base import FiniteField @@ -936,17 +936,17 @@ def __init__(self, A, polynomials, category=None): Closed subscheme of Projective Space of dimension 2 over Rational Field defined by: x^2 - y*z """ - from sage.rings.polynomial.multi_polynomial_sequence import is_PolynomialSequence + from sage.rings.polynomial.multi_polynomial_sequence import PolynomialSequence_generic AlgebraicScheme.__init__(self, A, category=category) self._base_ring = A.base_ring() R = A.coordinate_ring() - if is_Ideal(polynomials): + if isinstance(polynomials, Ideal_generic): I = polynomials polynomials = I.gens() if I.ring() is R: # Otherwise we will recompute I later after self.__I = I # converting generators to the correct ring - if isinstance(polynomials, tuple) or is_PolynomialSequence(polynomials) or is_iterator(polynomials): + if isinstance(polynomials, tuple) or isinstance(polynomials, PolynomialSequence_generic) or is_iterator(polynomials): polynomials = list(polynomials) elif not isinstance(polynomials, list): # Looks like we got a single polynomial diff --git a/src/sage/schemes/generic/point.py b/src/sage/schemes/generic/point.py index 7ef85645f56..e5695cca656 100644 --- a/src/sage/schemes/generic/point.py +++ b/src/sage/schemes/generic/point.py @@ -170,8 +170,8 @@ def __init__(self, S, P, check=False): the Ideal (-x^2 + y*z) of Multivariate Polynomial Ring in x, y, z over Rational Field """ R = S.coordinate_ring() - from sage.rings.ideal import is_Ideal - if not is_Ideal(P): + from sage.rings.ideal import Ideal_generic + if not isinstance(P, Ideal_generic): P = R.ideal(P) elif P.ring() is not R: P = R.ideal(P.gens()) diff --git a/src/sage/schemes/generic/scheme.py b/src/sage/schemes/generic/scheme.py index 715c9d2a687..c1c60256387 100644 --- a/src/sage/schemes/generic/scheme.py +++ b/src/sage/schemes/generic/scheme.py @@ -23,7 +23,7 @@ from sage.misc.cachefunc import cached_method from sage.rings.integer_ring import ZZ from sage.categories.commutative_rings import CommutativeRings -from sage.rings.ideal import is_Ideal +from sage.rings.ideal import Ideal_generic from sage.structure.unique_representation import UniqueRepresentation from sage.schemes.generic.point import SchemeTopologicalPoint_prime_ideal @@ -1016,7 +1016,7 @@ def __call__(self, *args): if len(args) == 1: x = args[0] if ((isinstance(x, self.element_class) and (x.parent() is self or x.parent() == self)) - or (is_Ideal(x) and x.ring() is self.coordinate_ring())): + or (isinstance(x, Ideal_generic) and x.ring() is self.coordinate_ring())): # Construct a topological point from x. return self._element_constructor_(x) try: @@ -1046,7 +1046,7 @@ def _element_constructor_(self, x): return x elif x.parent() == self: return self.element_class(self, x.prime_ideal()) - elif is_Ideal(x) and x.ring() is self.coordinate_ring(): + elif isinstance(x, Ideal_generic) and x.ring() is self.coordinate_ring(): return self.element_class(self, x) raise TypeError('cannot convert %s to a topological point of %s' % (x, self)) diff --git a/src/sage/schemes/plane_conics/constructor.py b/src/sage/schemes/plane_conics/constructor.py index 308b56f6db0..27cacbf72b0 100644 --- a/src/sage/schemes/plane_conics/constructor.py +++ b/src/sage/schemes/plane_conics/constructor.py @@ -32,8 +32,8 @@ from sage.rings.number_field.number_field_base import NumberField 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.multi_polynomial_ring import MPolynomialRing_base +from sage.rings.polynomial.polynomial_ring import PolynomialRing_general 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 @@ -242,7 +242,7 @@ def Conic(base_field, F=None, names=None, unique=True): return ProjectiveConic_rational_field(P2, F) if isinstance(base_field, NumberField): return ProjectiveConic_number_field(P2, F) - if isinstance(base_field, FractionField_generic) and (is_PolynomialRing(base_field.ring()) or is_MPolynomialRing(base_field.ring())): + if isinstance(base_field, FractionField_generic) and (isinstance(base_field.ring(), PolynomialRing_general) or isinstance(base_field.ring(), MPolynomialRing_base)): return ProjectiveConic_rational_function_field(P2, F) return ProjectiveConic_field(P2, F) diff --git a/src/sage/schemes/projective/projective_space.py b/src/sage/schemes/projective/projective_space.py index c05588f4698..529127850e5 100644 --- a/src/sage/schemes/projective/projective_space.py +++ b/src/sage/schemes/projective/projective_space.py @@ -85,8 +85,8 @@ 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 -from sage.rings.polynomial.polynomial_ring import is_PolynomialRing +from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_base +from sage.rings.polynomial.polynomial_ring import PolynomialRing_general from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.rings.rational_field import QQ, RationalField from sage.rings.fraction_field import FractionField @@ -243,7 +243,7 @@ def ProjectiveSpace(n, R=None, names=None): sage: P.gens() == R.gens() True """ - if (is_MPolynomialRing(n) or is_PolynomialRing(n)) and R is None: + if (isinstance(n, MPolynomialRing_base) or isinstance(n, PolynomialRing_general)) and R is None: if names is not None: # Check for the case that the user provided a variable name # That does not match what we wanted to use from R diff --git a/src/sage/schemes/toric/fano_variety.py b/src/sage/schemes/toric/fano_variety.py index c17cf7c37d7..ab7a7a2f4eb 100644 --- a/src/sage/schemes/toric/fano_variety.py +++ b/src/sage/schemes/toric/fano_variety.py @@ -128,8 +128,8 @@ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.rings.rational_field import QQ -from sage.rings.polynomial.multi_polynomial_ring import is_MPolynomialRing -from sage.rings.polynomial.polynomial_ring import is_PolynomialRing +from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_base +from sage.rings.polynomial.polynomial_ring import PolynomialRing_general from sage.rings.fraction_field import FractionField_generic from sage.schemes.toric.toric_subscheme import AlgebraicScheme_subscheme_toric @@ -1593,7 +1593,7 @@ def add_variables(field, variables): if isinstance(field, FractionField_generic): # Q(a) ---> Q(a, b) rather than Q(a)(b) R = field.ring() - if is_PolynomialRing(R) or is_MPolynomialRing(R): + if isinstance(R, PolynomialRing_general) or isinstance(R, MPolynomialRing_base): new_variables = list(R.variable_names()) for v in variables: if v not in new_variables: diff --git a/src/sage/structure/element.pyx b/src/sage/structure/element.pyx index a53c70a3f60..2b772465831 100644 --- a/src/sage/structure/element.pyx +++ b/src/sage/structure/element.pyx @@ -3208,8 +3208,8 @@ cdef class CommutativeRingElement(RingElement): sage: (x^2 + y^2 + z^2).mod( (x^3, y - z) ) # needs sage.libs.singular x^2 + 2*z^2 """ - from sage.rings.ideal import is_Ideal - if not is_Ideal(I) or not I.ring() is self._parent: + from sage.rings.ideal import Ideal_generic + if not isinstance(I, Ideal_generic) or not I.ring() is self._parent: I = self._parent.ideal(I) #raise TypeError, "I = %s must be an ideal in %s"%(I, self.parent()) return I.reduce(self) diff --git a/src/sage/structure/sequence.py b/src/sage/structure/sequence.py index 0a4563d27e4..8abe231d8a3 100644 --- a/src/sage/structure/sequence.py +++ b/src/sage/structure/sequence.py @@ -256,12 +256,12 @@ def Sequence(x, universe=None, check=True, immutable=False, cr=False, cr_str=Non try: from sage.rings.polynomial.multi_polynomial_sequence import PolynomialSequence from sage.rings.polynomial.pbori.pbori import BooleanMonomialMonoid - from sage.rings.polynomial.multi_polynomial_ring import is_MPolynomialRing - from sage.rings.quotient_ring import is_QuotientRing + from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_base + from sage.rings.quotient_ring import QuotientRing_nc except ImportError: pass else: - if is_MPolynomialRing(universe) or isinstance(universe, BooleanMonomialMonoid) or (is_QuotientRing(universe) and is_MPolynomialRing(universe.cover_ring())): + if isinstance(universe, MPolynomialRing_base) or isinstance(universe, BooleanMonomialMonoid) or (isinstance(universe, QuotientRing_nc) and isinstance(universe.cover_ring(), MPolynomialRing_base)): return PolynomialSequence(x, universe, immutable=immutable, cr=cr, cr_str=cr_str) return Sequence_generic(x, universe, check, immutable, cr, cr_str, use_sage_types) diff --git a/src/sage/symbolic/expression.pyx b/src/sage/symbolic/expression.pyx index a92fe241355..cb65cfe3b9a 100644 --- a/src/sage/symbolic/expression.pyx +++ b/src/sage/symbolic/expression.pyx @@ -7710,10 +7710,10 @@ cdef class Expression(Expression_abc): TypeError: y is not a variable of Multivariate Polynomial Ring in x over Ring of integers modulo 4 """ from sage.symbolic.ring import SR - from sage.rings.polynomial.multi_polynomial_ring import is_MPolynomialRing + from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_base base_ring = R.base_ring() if base_ring == SR: - if is_MPolynomialRing(R): + if isinstance(R, MPolynomialRing_base): return R({tuple([0]*R.ngens()):self}) else: return R([self]) diff --git a/src/sage/symbolic/ring.pyx b/src/sage/symbolic/ring.pyx index 501b0920898..324745d94aa 100644 --- a/src/sage/symbolic/ring.pyx +++ b/src/sage/symbolic/ring.pyx @@ -208,8 +208,8 @@ cdef class SymbolicRing(sage.rings.abc.SymbolicRing): return False else: from sage.rings.fraction_field import FractionField_generic - from sage.rings.polynomial.polynomial_ring import is_PolynomialRing - from sage.rings.polynomial.multi_polynomial_ring import is_MPolynomialRing + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general + from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_base from sage.rings.polynomial.laurent_polynomial_ring_base import LaurentPolynomialRing_generic from sage.rings.infinity import InfinityRing, UnsignedInfinityRing from sage.rings.real_lazy import RLF, CLF @@ -220,7 +220,7 @@ cdef class SymbolicRing(sage.rings.abc.SymbolicRing): if R._is_numerical(): # Almost anything with a coercion into any precision of CC return R not in (RLF, CLF) - elif is_PolynomialRing(R) or is_MPolynomialRing(R) or isinstance(R, FractionField_generic) or isinstance(R, LaurentPolynomialRing_generic): + elif isinstance(R, PolynomialRing_general) or isinstance(R, MPolynomialRing_base) or isinstance(R, FractionField_generic) or isinstance(R, LaurentPolynomialRing_generic): base = R.base_ring() return base is not self and self.has_coerce_map_from(base) elif (R is InfinityRing or R is UnsignedInfinityRing