From 34a5f92d06679ece241b83f4a9e3293765065c7c Mon Sep 17 00:00:00 2001 From: vboxuser Date: Tue, 4 Jun 2024 11:23:23 -0500 Subject: [PATCH 01/18] Fixing issue 38012 --- .../dynamics/arithmetic_dynamics/projective_ds.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/sage/dynamics/arithmetic_dynamics/projective_ds.py b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py index 4b42ad87b1f..49507781286 100644 --- a/src/sage/dynamics/arithmetic_dynamics/projective_ds.py +++ b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py @@ -8440,6 +8440,14 @@ def normal_form(self, return_conjugation=False): To: Finite Field in z2 of size 3^2 Defn: 1 |--> 1 + :: + + 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: @@ -8468,7 +8476,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 is_MPolynomialRing(G.parent()): + G = G.polynomial(G.variable(0)) else: #no other fixed points raise NotImplementedError("map is not a polynomial") From 9d5a23af29af6889a79d26566c02a278d8425f91 Mon Sep 17 00:00:00 2001 From: vboxuser Date: Tue, 4 Jun 2024 13:09:15 -0500 Subject: [PATCH 02/18] Added comment saying purpose of change and reformated polynomial --- src/sage/dynamics/arithmetic_dynamics/projective_ds.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sage/dynamics/arithmetic_dynamics/projective_ds.py b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py index 49507781286..d44535ecdb4 100644 --- a/src/sage/dynamics/arithmetic_dynamics/projective_ds.py +++ b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py @@ -8440,10 +8440,10 @@ 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 = 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 From 7f64cf8efb5cfe2eee78d42ef19dc7d07bef8f69 Mon Sep 17 00:00:00 2001 From: Nathabolin <162615271+Nathabolin@users.noreply.github.com> Date: Wed, 5 Jun 2024 19:02:29 -0500 Subject: [PATCH 03/18] Update src/sage/dynamics/arithmetic_dynamics/projective_ds.py Co-authored-by: Sebastian A. Spindler <153911337+S17A05@users.noreply.github.com> --- src/sage/dynamics/arithmetic_dynamics/projective_ds.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sage/dynamics/arithmetic_dynamics/projective_ds.py b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py index d44535ecdb4..b910efd6e2d 100644 --- a/src/sage/dynamics/arithmetic_dynamics/projective_ds.py +++ b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py @@ -8477,7 +8477,7 @@ def normal_form(self, return_conjugation=False): i = 0 if G.degree() != 0: if is_MPolynomialRing(G.parent()): - G = G.polynomial(G.variable(0)) + G = G.polynomial(G.variable(0)) else: #no other fixed points raise NotImplementedError("map is not a polynomial") From 8c97c9988fe9cf325abd99b3f6fade3a2438b5ee Mon Sep 17 00:00:00 2001 From: Nathabolin <162615271+Nathabolin@users.noreply.github.com> Date: Wed, 5 Jun 2024 19:02:41 -0500 Subject: [PATCH 04/18] Update src/sage/dynamics/arithmetic_dynamics/projective_ds.py Co-authored-by: Sebastian A. Spindler <153911337+S17A05@users.noreply.github.com> --- src/sage/dynamics/arithmetic_dynamics/projective_ds.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sage/dynamics/arithmetic_dynamics/projective_ds.py b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py index b910efd6e2d..4f1dd9b8630 100644 --- a/src/sage/dynamics/arithmetic_dynamics/projective_ds.py +++ b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py @@ -8440,7 +8440,7 @@ 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:: + 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) From ae8699dff8db0db61c71843665dab1d7d782a92a Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Sun, 23 Jun 2024 11:57:18 -0700 Subject: [PATCH 05/18] for a in "CLASS='Ideal|PolynomialSequence|PolynomialQuotientRing';SUFFIX=_generic" "CLASS='MPolynomialRing';SUFFIX=_base" "CLASS='QuotientRing';SUFFIX=_nc" "CLASS='LaurentSeries|MPowerSeries|MPolynomialIdeal|PowerSeries';SUFFIX=" ; do eval "$a"; git --no-pager grep -l -E 'is_('$CLASS')' src/sage | xargs sed -E -i.bak 's/import is_('$CLASS')/import \1'$SUFFIX'/;/^ +/s/is_('$CLASS')[(]([^()]*([(][^()]*[)])?[^()]*)[)]/isinstance(\2, \1'$SUFFIX')/g'; done --- src/sage/categories/category_types.py | 4 +-- src/sage/combinat/finite_state_machine.py | 4 +-- .../dynamics/arithmetic_dynamics/affine_ds.py | 4 +-- .../arithmetic_dynamics/projective_ds.py | 18 +++++------ src/sage/ext/fast_callable.pyx | 4 +-- src/sage/matrix/matrix_space.py | 2 +- .../modular/modform/hecke_operator_on_qexp.py | 6 ++-- src/sage/modular/modform/space.py | 6 ++-- .../modform_hecketriangle/abstract_space.py | 4 +-- src/sage/rings/asymptotic/asymptotic_ring.py | 6 ++-- ...otics_multivariate_generating_functions.py | 12 +++---- src/sage/rings/asymptotic/misc.py | 6 ++-- src/sage/rings/finite_rings/residue_field.pyx | 4 +-- src/sage/rings/function_field/valuation.py | 4 +-- src/sage/rings/homset.py | 6 ++-- src/sage/rings/ideal.py | 12 +++---- src/sage/rings/integer_ring.pyx | 4 +-- src/sage/rings/laurent_series_ring.py | 4 +-- src/sage/rings/morphism.pyx | 32 +++++++++---------- src/sage/rings/multi_power_series_ring.py | 10 +++--- .../rings/multi_power_series_ring_element.py | 18 +++++------ src/sage/rings/padics/padic_valuation.py | 22 ++++++------- src/sage/rings/polynomial/flatten.py | 22 ++++++------- src/sage/rings/polynomial/groebner_fan.py | 4 +-- .../rings/polynomial/laurent_polynomial.pyx | 4 +-- .../polynomial/laurent_polynomial_ring.py | 4 +-- .../polynomial/multi_polynomial_ideal.py | 8 ++--- .../multi_polynomial_libsingular.pyx | 4 +-- .../rings/polynomial/multi_polynomial_ring.py | 6 ++-- .../polynomial/multi_polynomial_ring_base.pyx | 6 ++-- .../polynomial/multi_polynomial_sequence.py | 12 +++---- .../rings/polynomial/polynomial_element.pyx | 14 ++++---- .../polynomial/polynomial_quotient_ring.py | 4 +-- src/sage/rings/polynomial/polynomial_ring.py | 12 +++---- src/sage/rings/power_series_mpoly.pyx | 4 +-- src/sage/rings/power_series_ring.py | 6 ++-- src/sage/rings/power_series_ring_element.pyx | 10 +++--- src/sage/rings/puiseux_series_ring.py | 2 +- src/sage/rings/qqbar_decorators.py | 6 ++-- src/sage/rings/quotient_ring.py | 10 +++--- .../rings/valuation/inductive_valuation.py | 4 +-- src/sage/schemes/affine/affine_space.py | 4 +-- src/sage/schemes/curves/constructor.py | 4 +-- .../schemes/elliptic_curves/constructor.py | 6 ++-- .../schemes/elliptic_curves/ell_local_data.py | 4 +-- src/sage/schemes/generic/algebraic_scheme.py | 8 ++--- src/sage/schemes/generic/point.py | 4 +-- src/sage/schemes/generic/scheme.py | 6 ++-- .../hyperelliptic_curves/monsky_washnitzer.py | 2 +- src/sage/schemes/plane_conics/constructor.py | 4 +-- .../schemes/projective/projective_space.py | 4 +-- src/sage/schemes/toric/fano_variety.py | 4 +-- src/sage/structure/element.pyx | 4 +-- src/sage/structure/sequence.py | 6 ++-- src/sage/symbolic/expression.pyx | 4 +-- src/sage/symbolic/ring.pyx | 4 +-- 56 files changed, 201 insertions(+), 201 deletions(-) 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/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..8efa6eb858e 100644 --- a/src/sage/dynamics/arithmetic_dynamics/projective_ds.py +++ b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py @@ -94,7 +94,7 @@ 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.quotient_ring import QuotientRing_generic @@ -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: is_PolynomialRing(x) or isinstance(x, MPolynomialRing_base) if not all(test(poly.parent()) for poly in polys): try: polys = [poly.lift() for poly in polys] @@ -395,7 +395,7 @@ def __classcall_private__(cls, morphism_or_polys, domain=None, names=None): 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)): + 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 is_PolynomialRing(R) 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 (is_PolynomialRing(R) 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 (is_PolynomialRing(R) 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 is_PolynomialRing(base_ring.ring()): 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 (is_PolynomialRing(base_ring) or isinstance(base_ring, MPolynomialRing_base)): base_ring = base_ring.base_ring() elif base_ring in FunctionFields(): base_ring = base_ring.constant_base_field() diff --git a/src/sage/ext/fast_callable.pyx b/src/sage/ext/fast_callable.pyx index 9d2db75be3d..c5b9fc715bd 100644 --- a/src/sage/ext/fast_callable.pyx +++ b/src/sage/ext/fast_callable.pyx @@ -476,8 +476,8 @@ def fast_callable(x, domain=None, vars=None, 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.multi_polynomial_ring import MPolynomialRing_base + if is_PolynomialRing(x.parent()) or isinstance(x.parent(), MPolynomialRing_base): vars = x.parent().variable_names() else: # constant diff --git a/src/sage/matrix/matrix_space.py b/src/sage/matrix/matrix_space.py index 71eb305c2be..bb55bb00a4d 100644 --- a/src/sage/matrix/matrix_space.py +++ b/src/sage/matrix/matrix_space.py @@ -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 multi_polynomial_ring_base.isinstance(R, 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..b8f6f1aac2c 100644 --- a/src/sage/modular/modform_hecketriangle/abstract_space.py +++ b/src/sage/modular/modform_hecketriangle/abstract_space.py @@ -22,9 +22,9 @@ from sage.rings.infinity import infinity 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.laurent_series_ring import LaurentSeriesRing from sage.rings.polynomial.polynomial_ring import is_PolynomialRing -from sage.rings.power_series_ring import is_PowerSeriesRing +from sage.rings.power_series_ring import PowerSeriesRing from sage.rings.rational_field import QQ from sage.structure.element import parent diff --git a/src/sage/rings/asymptotic/asymptotic_ring.py b/src/sage/rings/asymptotic/asymptotic_ring.py index d85f407872f..28614754660 100644 --- a/src/sage/rings/asymptotic/asymptotic_ring.py +++ b/src/sage/rings/asymptotic/asymptotic_ring.py @@ -4079,8 +4079,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.power_series_ring import is_PowerSeriesRing + from sage.rings.polynomial.multi_polynomial_ring_base import MPolynomialRing_base + from sage.rings.power_series_ring import PowerSeriesRing if isinstance(P, SymbolicRing): from sage.symbolic.operators import add_vararg @@ -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..f18a43ae1a7 100644 --- a/src/sage/rings/asymptotic/asymptotics_multivariate_generating_functions.py +++ b/src/sage/rings/asymptotic/asymptotics_multivariate_generating_functions.py @@ -511,9 +511,9 @@ def dimension(self): 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.multi_polynomial_ring_base import MPolynomialRing_base R = self.denominator_ring - if is_PolynomialRing(R) or is_MPolynomialRing(R): + if is_PolynomialRing(R) or isinstance(R, MPolynomialRing_base): return R.ngens() raise NotImplementedError('only polynomial rings are supported as base') @@ -3223,8 +3223,8 @@ def _element_constructor_(self, *args, **kwargs): 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.multi_polynomial_ring_base import MPolynomialRing_base + if is_PolynomialRing(R) or isinstance(R, MPolynomialRing_base): if not R(q).is_unit(): # Factor denominator try: @@ -3293,8 +3293,8 @@ def _coerce_map_from_(self, P): 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.multi_polynomial_ring_base import MPolynomialRing_base + if is_PolynomialRing(B) or isinstance(B, MPolynomialRing_base): if self.base().has_coerce_map_from(B): return True diff --git a/src/sage/rings/asymptotic/misc.py b/src/sage/rings/asymptotic/misc.py index c33ea3e5a94..6f4c02a54bf 100644 --- a/src/sage/rings/asymptotic/misc.py +++ b/src/sage/rings/asymptotic/misc.py @@ -150,8 +150,8 @@ def parent_to_repr_short(P): 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.power_series_ring import is_PowerSeriesRing + from sage.rings.polynomial.multi_polynomial_ring_base import MPolynomialRing_base + from sage.rings.power_series_ring import PowerSeriesRing def abbreviate(P): try: @@ -168,7 +168,7 @@ def abbreviate(P): pass raise ValueError('Cannot abbreviate %s.' % (P,)) - poly = is_PolynomialRing(P) or is_MPolynomialRing(P) + poly = is_PolynomialRing(P) 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..a42e5cb2dad 100644 --- a/src/sage/rings/finite_rings/residue_field.pyx +++ b/src/sage/rings/finite_rings/residue_field.pyx @@ -182,7 +182,7 @@ 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 @@ -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): 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..e2bdde6c034 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 quotient_ring.isinstance(R, 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..81637c02f3f 100644 --- a/src/sage/rings/ideal.py +++ b/src/sage/rings/ideal.py @@ -219,14 +219,14 @@ def is_Ideal(x): that Sage does not interpret rings objects themselves as ideals. However, one can still explicitly construct these ideals:: - sage: from sage.rings.ideal import is_Ideal + sage: from sage.rings.ideal import Ideal_generic sage: R = ZZ - sage: is_Ideal(R) + sage: isinstance(R, Ideal_generic) False - sage: 1*R; is_Ideal(1*R) + sage: 1*R; isinstance(1*R, Ideal_generic) Principal ideal (1) of Integer Ring True - sage: 0*R; is_Ideal(0*R) + sage: 0*R; isinstance(0*R, Ideal_generic) Principal ideal (0) of Integer Ring True @@ -235,9 +235,9 @@ def is_Ideal(x): sage: R = PolynomialRing(QQ, 'x'); x = R.gen() sage: I = R.ideal(x^2 + 1); I Principal ideal (x^2 + 1) of Univariate Polynomial Ring in x over Rational Field - sage: is_Ideal(I) + sage: isinstance(I, Ideal_generic) True - sage: is_Ideal((x^2 + 1)*R) + sage: isinstance((x^2 + 1)*R, Ideal_generic) True """ return isinstance(x, Ideal_generic) diff --git a/src/sage/rings/integer_ring.pyx b/src/sage/rings/integer_ring.pyx index a1574d00756..9fa4cace737 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 sage.rings.ideal.isinstance(I, 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 sage.rings.ideal.isinstance(prime, 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..18f74005b9e 100644 --- a/src/sage/rings/laurent_series_ring.py +++ b/src/sage/rings/laurent_series_ring.py @@ -59,7 +59,7 @@ def is_LaurentSeriesRing(x): TESTS:: - sage: from sage.rings.laurent_series_ring import is_LaurentSeriesRing + sage: from sage.rings.laurent_series_ring import LaurentSeriesRing sage: K. = LaurentSeriesRing(QQ) sage: is_LaurentSeriesRing(K) True @@ -679,7 +679,7 @@ def _coerce_map_from_(self, P): LaurentPolynomialRing_generic, ) from sage.rings.polynomial.polynomial_ring import is_PolynomialRing - from sage.rings.power_series_ring import is_PowerSeriesRing + from sage.rings.power_series_ring import PowerSeriesRing if ((is_LaurentSeriesRing(P) or isinstance(P, LaurentPolynomialRing_generic) or diff --git a/src/sage/rings/morphism.pyx b/src/sage/rings/morphism.pyx index bad89829a70..0306d5567f2 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 ideal.isinstance(I, Ideal_generic): raise TypeError("I must be an ideal") R = self.codomain() return R.ideal([self(y) for y in I.gens()]) @@ -1038,9 +1038,9 @@ 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_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 is_PolynomialRing B = self.codomain() graph, from_B, to_A = self._graph_ideal() @@ -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 is_PolynomialRing(B) + 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.multi_polynomial_ring import MPolynomialRing_base + from sage.rings.polynomial.polynomial_quotient_ring import PolynomialQuotientRing_generic from sage.rings.polynomial.polynomial_ring import is_PolynomialRing 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 (is_PolynomialRing(A) 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 is_PolynomialRing(A): 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..cba2aeadfa9 100644 --- a/src/sage/rings/multi_power_series_ring.py +++ b/src/sage/rings/multi_power_series_ring.py @@ -209,7 +209,7 @@ 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_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 @@ -233,8 +233,8 @@ def is_MPowerSeriesRing(x): TESTS:: - sage: from sage.rings.power_series_ring import is_PowerSeriesRing - sage: from sage.rings.multi_power_series_ring import is_MPowerSeriesRing + sage: from sage.rings.power_series_ring import PowerSeriesRing + sage: from sage.rings.multi_power_series_ring import MPowerSeriesRing sage: M = PowerSeriesRing(ZZ, 4, 'v') sage: is_PowerSeriesRing(M) False @@ -663,7 +663,7 @@ def _coerce_impl(self, f): True """ P = f.parent() - if is_MPolynomialRing(P) or is_MPowerSeriesRing(P) \ + if isinstance(P, MPolynomialRing_base) or is_MPowerSeriesRing(P) \ or is_PolynomialRing(P) or is_PowerSeriesRing(P): if set(P.variable_names()).issubset(set(self.variable_names())): if self.has_coerce_map_from(P.base_ring()): @@ -827,7 +827,7 @@ def _coerce_map_from_(self, P): sage: R.has_coerce_map_from(L) True """ - if is_MPolynomialRing(P) or is_MPowerSeriesRing(P) \ + if isinstance(P, MPolynomialRing_base) or is_MPowerSeriesRing(P) \ or is_PolynomialRing(P) or is_PowerSeriesRing(P): if set(P.variable_names()).issubset(set(self.variable_names())): if self.has_coerce_map_from(P.base_ring()): diff --git a/src/sage/rings/multi_power_series_ring_element.py b/src/sage/rings/multi_power_series_ring_element.py index 32e16def317..31401bddd5b 100644 --- a/src/sage/rings/multi_power_series_ring_element.py +++ b/src/sage/rings/multi_power_series_ring_element.py @@ -160,7 +160,7 @@ 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.power_series_ring import is_PowerSeriesRing +from sage.rings.power_series_ring import PowerSeriesRing from sage.rings.power_series_ring_element import PowerSeries @@ -170,17 +170,17 @@ def is_MPowerSeries(f): TESTS:: - sage: from sage.rings.power_series_ring_element import is_PowerSeries - sage: from sage.rings.multi_power_series_ring_element import is_MPowerSeries + sage: from sage.rings.power_series_ring_element import PowerSeries + sage: from sage.rings.multi_power_series_ring_element import MPowerSeries sage: M = PowerSeriesRing(ZZ,4,'v') - sage: is_PowerSeries(M.random_element(10)) + sage: isinstance(M.random_element(10), PowerSeries) True - sage: is_MPowerSeries(M.random_element(10)) + sage: isinstance(M.random_element(10), MPowerSeries) True sage: T. = PowerSeriesRing(RR) - sage: is_MPowerSeries(1 - v + v^2 +O(v^3)) + sage: isinstance(1 - v + v^2 +O(v^3), MPowerSeries) False - sage: is_PowerSeries(1 - v + v^2 +O(v^3)) + sage: isinstance(1 - v + v^2 +O(v^3), PowerSeries) True """ return isinstance(f, MPowerSeries) @@ -364,12 +364,12 @@ def __init__(self, parent, x=0, prec=infinity, is_gen=False, check=False): # test whether x coerces to background univariate # power series ring of parent - from sage.rings.multi_power_series_ring import is_MPowerSeriesRing + from sage.rings.multi_power_series_ring import MPowerSeriesRing if is_PowerSeriesRing(xparent) or is_MPowerSeriesRing(xparent): # 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: diff --git a/src/sage/rings/padics/padic_valuation.py b/src/sage/rings/padics/padic_valuation.py index 1cf29093ba6..73e500adca0 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 @@ -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..fded7abffd9 100644 --- a/src/sage/rings/polynomial/flatten.py +++ b/src/sage/rings/polynomial/flatten.py @@ -39,7 +39,7 @@ 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 .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 is_PolynomialRing(domain) 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 is_PolynomialRing(ring) 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) @@ -226,7 +226,7 @@ def _call_(self, p): 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,9 +345,9 @@ 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 is_PolynomialRing(codomain) and not isinstance(codomain, MPolynomialRing_base): raise ValueError("codomain should be a polynomial ring") ring = codomain @@ -355,7 +355,7 @@ def __init__(self, domain, codomain): while True: is_polynomial_ring = is_PolynomialRing(ring) - if not (is_polynomial_ring or is_MPolynomialRing(ring)): + 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 is_PolynomialRing(domain) 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 is_PolynomialRing(R) 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..b9d4065cbca 100644 --- a/src/sage/rings/polynomial/laurent_polynomial.pyx +++ b/src/sage/rings/polynomial/laurent_polynomial.pyx @@ -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..5ef5081638e 100644 --- a/src/sage/rings/polynomial/laurent_polynomial_ring.py +++ b/src/sage/rings/polynomial/laurent_polynomial_ring.py @@ -236,7 +236,7 @@ def LaurentPolynomialRing(base_ring, *args, **kwds): 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.multi_polynomial_ring_base import MPolynomialRing_base R = PolynomialRing(base_ring, *args, **kwds) if R in _cache: @@ -246,7 +246,7 @@ def LaurentPolynomialRing(base_ring, *args, **kwds): # 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..f2f4488231e 100644 --- a/src/sage/rings/polynomial/multi_polynomial_ideal.py +++ b/src/sage/rings/polynomial/multi_polynomial_ideal.py @@ -317,7 +317,7 @@ def is_MPolynomialIdeal(x) -> bool: EXAMPLES:: - sage: from sage.rings.polynomial.multi_polynomial_ideal import is_MPolynomialIdeal + sage: from sage.rings.polynomial.multi_polynomial_ideal import MPolynomialIdeal sage: P. = PolynomialRing(QQ) sage: I = [x + 2*y + 2*z - 1, x^2 + 2*y^2 + 2*z^2 - x, 2*x*y + 2*y*z - y] @@ -325,13 +325,13 @@ def is_MPolynomialIdeal(x) -> bool: the ideal itself. This distinction is inconsistent with Singular but matches Magma's behavior. :: - sage: is_MPolynomialIdeal(I) + sage: isinstance(I, MPolynomialIdeal) False :: sage: I = Ideal(I) - sage: is_MPolynomialIdeal(I) + sage: isinstance(I, MPolynomialIdeal) True """ return isinstance(x, MPolynomialIdeal) @@ -597,7 +597,7 @@ def _groebner_cover(self): from sage.rings.polynomial.polynomial_ring import is_PolynomialRing 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) and not is_PolynomialRing(F.ring()))): 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..145a645eac4 100644 --- a/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx +++ b/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx @@ -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..da82ae22c20 100644 --- a/src/sage/rings/polynomial/multi_polynomial_ring_base.pyx +++ b/src/sage/rings/polynomial/multi_polynomial_ring_base.pyx @@ -135,7 +135,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 polynomial_ring.is_PolynomialRing(base): from sage.rings.polynomial.flatten import FlatteningMorphism return FlatteningMorphism(self) else: @@ -590,7 +590,7 @@ 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) @@ -634,7 +634,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..73bce2bc2be 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,8 +197,8 @@ 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 """ @@ -297,7 +297,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 +958,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..6a407449ca6 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.ideal import Ideal_generic from sage.rings.polynomial.polynomial_ring import is_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.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) @@ -7979,12 +7979,12 @@ cdef class Polynomial(CommutativePolynomial): 4 + 4*T + O(T^2) """ # Late import to avoid cyclic dependencies: - from sage.rings.power_series_ring import is_PowerSeriesRing + from sage.rings.power_series_ring import PowerSeriesRing if self.is_zero(): 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..cead3f518eb 100644 --- a/src/sage/rings/polynomial/polynomial_quotient_ring.py +++ b/src/sage/rings/polynomial/polynomial_quotient_ring.py @@ -1342,10 +1342,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..7a47b7bfc3b 100644 --- a/src/sage/rings/polynomial/polynomial_ring.py +++ b/src/sage/rings/polynomial/polynomial_ring.py @@ -189,7 +189,7 @@ def is_PolynomialRing(x): EXAMPLES:: sage: from sage.rings.polynomial.polynomial_ring import is_PolynomialRing - sage: from sage.rings.polynomial.multi_polynomial_ring import is_MPolynomialRing + sage: from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_base sage: is_PolynomialRing(2) False @@ -199,7 +199,7 @@ def is_PolynomialRing(x): sage: is_PolynomialRing(ZZ['x,y,z']) False - sage: is_MPolynomialRing(ZZ['x,y,z']) + sage: isinstance(ZZ['x,y,z'], MPolynomialRing_base) True :: @@ -616,9 +616,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 is_PolynomialRing(base) or isinstance(base, MPolynomialRing_base): from .flatten import FlatteningMorphism return FlatteningMorphism(self) else: @@ -842,8 +842,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_) 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..4b3887b008a 100644 --- a/src/sage/rings/power_series_ring.py +++ b/src/sage/rings/power_series_ring.py @@ -148,7 +148,7 @@ ) 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.multi_polynomial_ring_base import MPolynomialRing_base from sage.rings.polynomial.polynomial_ring import is_PolynomialRing from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.structure.category_object import normalize_names @@ -466,7 +466,7 @@ def is_PowerSeriesRing(R): EXAMPLES:: - sage: from sage.rings.power_series_ring import is_PowerSeriesRing + sage: from sage.rings.power_series_ring import PowerSeriesRing sage: is_PowerSeriesRing(10) False sage: is_PowerSeriesRing(QQ[['x']]) @@ -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 diff --git a/src/sage/rings/power_series_ring_element.pyx b/src/sage/rings/power_series_ring_element.pyx index 8e1b76a7cc9..637ed2dd78b 100644 --- a/src/sage/rings/power_series_ring_element.pyx +++ b/src/sage/rings/power_series_ring_element.pyx @@ -123,16 +123,16 @@ def is_PowerSeries(x): EXAMPLES:: sage: R. = PowerSeriesRing(ZZ) - sage: from sage.rings.power_series_ring_element import is_PowerSeries - sage: is_PowerSeries(1 + x^2) + sage: from sage.rings.power_series_ring_element import PowerSeries + sage: isinstance(1 + x^2, PowerSeries) True - sage: is_PowerSeries(x - x) + sage: isinstance(x - x, PowerSeries) True - sage: is_PowerSeries(0) + sage: isinstance(0, PowerSeries) False sage: var('x') # needs sage.symbolic x - sage: is_PowerSeries(1 + x^2) # needs sage.symbolic + sage: isinstance(1 + x^2, PowerSeries) # needs sage.symbolic False """ return isinstance(x, PowerSeries) diff --git a/src/sage/rings/puiseux_series_ring.py b/src/sage/rings/puiseux_series_ring.py index d63b5bcc665..662a17a7cc1 100644 --- a/src/sage/rings/puiseux_series_ring.py +++ b/src/sage/rings/puiseux_series_ring.py @@ -30,7 +30,7 @@ from sage.rings.infinity import infinity from sage.rings.laurent_series_ring import LaurentSeriesRing from sage.rings.laurent_series_ring_element import LaurentSeries -from sage.rings.power_series_ring import is_PowerSeriesRing +from sage.rings.power_series_ring import PowerSeriesRing from sage.rings.power_series_ring_element import PowerSeries from sage.rings.puiseux_series_ring_element import PuiseuxSeries from sage.structure.element import parent diff --git a/src/sage/rings/qqbar_decorators.py b/src/sage/rings/qqbar_decorators.py index 13d6d562824..5d6bc228a82 100644 --- a/src/sage/rings/qqbar_decorators.py +++ b/src/sage/rings/qqbar_decorators.py @@ -92,7 +92,7 @@ def wrapper(*args, **kwds): 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..9d65bb1d257 100644 --- a/src/sage/rings/quotient_ring.py +++ b/src/sage/rings/quotient_ring.py @@ -346,13 +346,13 @@ def is_QuotientRing(x): EXAMPLES:: - sage: from sage.rings.quotient_ring import is_QuotientRing + sage: from sage.rings.quotient_ring import QuotientRing_nc sage: R. = PolynomialRing(ZZ,'x') sage: I = R.ideal([4 + 3*x + x^2, 1 + x^2]) sage: S = R.quotient_ring(I) - sage: is_QuotientRing(S) + sage: isinstance(S, QuotientRing_nc) True - sage: is_QuotientRing(R) + sage: isinstance(R, QuotientRing_nc) False :: @@ -361,9 +361,9 @@ def is_QuotientRing(x): sage: F. = FreeAlgebra(QQ, implementation='letterplace') sage: I = F * [x*y + y*z, x^2 + x*y - y*x - y^2] * F sage: Q = F.quo(I) - sage: is_QuotientRing(Q) + sage: isinstance(Q, QuotientRing_nc) True - sage: is_QuotientRing(F) + sage: isinstance(F, QuotientRing_nc) False """ return isinstance(x, QuotientRing_nc) 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/schemes/affine/affine_space.py b/src/sage/schemes/affine/affine_space.py index 889d9005ed6..e8a68d9633d 100644 --- a/src/sage/schemes/affine/affine_space.py +++ b/src/sage/schemes/affine/affine_space.py @@ -16,7 +16,7 @@ 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.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 is_PolynomialRing(n)) 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/hyperelliptic_curves/monsky_washnitzer.py b/src/sage/schemes/hyperelliptic_curves/monsky_washnitzer.py index d9a9996d44e..6b97e69dd3a 100644 --- a/src/sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +++ b/src/sage/schemes/hyperelliptic_curves/monsky_washnitzer.py @@ -69,7 +69,7 @@ from sage.rings.integer_ring import ZZ from sage.categories.integral_domains import IntegralDomains from sage.rings.infinity import Infinity -from sage.rings.laurent_series_ring import is_LaurentSeriesRing +from sage.rings.laurent_series_ring import LaurentSeriesRing from sage.rings.padics.factory import Qp as pAdicField from sage.rings.polynomial.polynomial_element import Polynomial from sage.schemes.elliptic_curves.constructor import EllipticCurve diff --git a/src/sage/schemes/plane_conics/constructor.py b/src/sage/schemes/plane_conics/constructor.py index 308b56f6db0..ee12866398e 100644 --- a/src/sage/schemes/plane_conics/constructor.py +++ b/src/sage/schemes/plane_conics/constructor.py @@ -32,7 +32,7 @@ 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.multi_polynomial_ring import MPolynomialRing_base from sage.rings.polynomial.polynomial_ring import is_PolynomialRing from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.schemes.affine.affine_point import SchemeMorphism_point_affine @@ -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 (is_PolynomialRing(base_field.ring()) 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..a02a4e73bdc 100644 --- a/src/sage/schemes/projective/projective_space.py +++ b/src/sage/schemes/projective/projective_space.py @@ -85,7 +85,7 @@ 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.multi_polynomial_ring import MPolynomialRing_base from sage.rings.polynomial.polynomial_ring import is_PolynomialRing from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.rings.rational_field import QQ, RationalField @@ -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 is_PolynomialRing(n)) 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..1af5c674372 100644 --- a/src/sage/schemes/toric/fano_variety.py +++ b/src/sage/schemes/toric/fano_variety.py @@ -128,7 +128,7 @@ 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.multi_polynomial_ring import MPolynomialRing_base from sage.rings.polynomial.polynomial_ring import is_PolynomialRing from sage.rings.fraction_field import FractionField_generic @@ -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 is_PolynomialRing(R) 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..71d0f2fa63e 100644 --- a/src/sage/symbolic/ring.pyx +++ b/src/sage/symbolic/ring.pyx @@ -209,7 +209,7 @@ cdef class SymbolicRing(sage.rings.abc.SymbolicRing): 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.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 is_PolynomialRing(R) 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 From acf326c639f94793758090c83c85d13a68f3383c Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Sun, 23 Jun 2024 12:21:02 -0700 Subject: [PATCH 06/18] for a in "CLASS='PolynomialRing';SUFFIX=_general" ; do eval "$a"; git --no-pager grep -l -E 'is_('$CLASS')' src/sage | xargs sed -E -i.bak 's/import is_('$CLASS')/import \1'$SUFFIX'/;/^ +/s/is_('$CLASS')[(]([^()]*([(][^()]*[)])?[^()]*)[)]/isinstance(\2, \1'$SUFFIX')/g'; done --- src/sage/crypto/lattice.py | 4 ++-- .../arithmetic_dynamics/projective_ds.py | 16 ++++++++-------- src/sage/ext/fast_callable.pyx | 4 ++-- src/sage/interfaces/singular.py | 4 ++-- src/sage/matrix/matrix_space.py | 2 +- .../modform_hecketriangle/abstract_space.py | 8 ++++---- .../modular/modform_hecketriangle/functors.py | 4 ++-- src/sage/rings/asymptotic/asymptotic_ring.py | 4 ++-- ...mptotics_multivariate_generating_functions.py | 12 ++++++------ src/sage/rings/asymptotic/growth_group.py | 4 ++-- src/sage/rings/asymptotic/misc.py | 4 ++-- src/sage/rings/finite_rings/residue_field.pyx | 10 +++++----- src/sage/rings/laurent_series_ring.py | 4 ++-- src/sage/rings/morphism.pyx | 10 +++++----- src/sage/rings/multi_power_series_ring.py | 6 +++--- .../rings/multi_power_series_ring_element.py | 4 ++-- src/sage/rings/padics/padic_valuation.py | 8 ++++---- src/sage/rings/polynomial/flatten.py | 16 ++++++++-------- src/sage/rings/polynomial/laurent_polynomial.pyx | 4 ++-- .../rings/polynomial/laurent_polynomial_ring.py | 4 ++-- .../rings/polynomial/multi_polynomial_ideal.py | 4 ++-- .../polynomial/multi_polynomial_libsingular.pyx | 4 ++-- .../polynomial/multi_polynomial_ring_base.pyx | 4 ++-- src/sage/rings/polynomial/polynomial_element.pyx | 4 ++-- src/sage/rings/polynomial/polynomial_ring.py | 16 ++++++++-------- src/sage/rings/power_series_ring.py | 4 ++-- src/sage/rings/valuation/augmented_valuation.py | 12 ++++++------ src/sage/rings/valuation/developing_valuation.py | 4 ++-- src/sage/rings/valuation/gauss_valuation.py | 16 ++++++++-------- src/sage/rings/valuation/limit_valuation.py | 8 ++++---- src/sage/rings/valuation/valuation_space.py | 4 ++-- src/sage/schemes/affine/affine_space.py | 4 ++-- src/sage/schemes/plane_conics/constructor.py | 4 ++-- src/sage/schemes/projective/projective_space.py | 4 ++-- src/sage/schemes/toric/fano_variety.py | 4 ++-- src/sage/symbolic/ring.pyx | 4 ++-- 36 files changed, 116 insertions(+), 116 deletions(-) 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/projective_ds.py b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py index 8efa6eb858e..f03ef12945a 100644 --- a/src/sage/dynamics/arithmetic_dynamics/projective_ds.py +++ b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py @@ -96,7 +96,7 @@ class initialization directly. from sage.rings.morphism import RingHomomorphism_im_gens 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 isinstance(x, MPolynomialRing_base) + 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,7 +394,7 @@ 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) + 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)) @@ -3533,7 +3533,7 @@ def affine_preperiodic_model(self, m, n, return_conjugation=False): if hyperplane_found: break else: - if is_PolynomialRing(R) or isinstance(R, MPolynomialRing_base) 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 isinstance(R, MPolynomialRing_base)): + if (isinstance(R, PolynomialRing_general) or isinstance(R, MPolynomialRing_base)): phi = FlatteningMorphism(CR) flatCR = phi.codomain() Ik = flatCR.ideal(1) @@ -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 isinstance(R, MPolynomialRing_base)): + 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 isinstance(base_ring.ring(), MPolynomialRing_base) 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 isinstance(base_ring, MPolynomialRing_base)): + 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() diff --git a/src/sage/ext/fast_callable.pyx b/src/sage/ext/fast_callable.pyx index c5b9fc715bd..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.polynomial_ring import PolynomialRing_general from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_base - if is_PolynomialRing(x.parent()) or isinstance(x.parent(), 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 bb55bb00a4d..88248a73dcb 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 polynomial_ring.isinstance(R, PolynomialRing_general) and R.base_ring() in _Fields: try: from . import matrix_polynomial_dense except ImportError: diff --git a/src/sage/modular/modform_hecketriangle/abstract_space.py b/src/sage/modular/modform_hecketriangle/abstract_space.py index b8f6f1aac2c..2fcd95ca2ec 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 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 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 28614754660..360eea59bf6 100644 --- a/src/sage/rings/asymptotic/asymptotic_ring.py +++ b/src/sage/rings/asymptotic/asymptotic_ring.py @@ -4078,7 +4078,7 @@ 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.polynomial_ring import PolynomialRing_general from sage.rings.polynomial.multi_polynomial_ring_base import MPolynomialRing_base from sage.rings.power_series_ring import PowerSeriesRing @@ -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, diff --git a/src/sage/rings/asymptotic/asymptotics_multivariate_generating_functions.py b/src/sage/rings/asymptotic/asymptotics_multivariate_generating_functions.py index f18a43ae1a7..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.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 isinstance(R, MPolynomialRing_base): + 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.polynomial_ring import PolynomialRing_general from sage.rings.polynomial.multi_polynomial_ring_base import MPolynomialRing_base - if is_PolynomialRing(R) or isinstance(R, 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.polynomial_ring import PolynomialRing_general from sage.rings.polynomial.multi_polynomial_ring_base import MPolynomialRing_base - if is_PolynomialRing(B) or isinstance(B, 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 6f4c02a54bf..57467729fd9 100644 --- a/src/sage/rings/asymptotic/misc.py +++ b/src/sage/rings/asymptotic/misc.py @@ -149,7 +149,7 @@ 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.polynomial_ring import PolynomialRing_general from sage.rings.polynomial.multi_polynomial_ring_base import MPolynomialRing_base from sage.rings.power_series_ring import PowerSeriesRing @@ -168,7 +168,7 @@ def abbreviate(P): pass raise ValueError('Cannot abbreviate %s.' % (P,)) - poly = is_PolynomialRing(P) or isinstance(P, MPolynomialRing_base) + 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 a42e5cb2dad..b9663dd0f08 100644 --- a/src/sage/rings/finite_rings/residue_field.pyx +++ b/src/sage/rings/finite_rings/residue_field.pyx @@ -189,7 +189,7 @@ 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 @@ -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/laurent_series_ring.py b/src/sage/rings/laurent_series_ring.py index 18f74005b9e..238b1e66288 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 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/morphism.pyx b/src/sage/rings/morphism.pyx index 0306d5567f2..9ded5707f30 100644 --- a/src/sage/rings/morphism.pyx +++ b/src/sage/rings/morphism.pyx @@ -1041,7 +1041,7 @@ cdef class RingHomomorphism(RingMap): 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 is_PolynomialRing + from sage.rings.polynomial.polynomial_ring import PolynomialRing_general B = self.codomain() graph, from_B, to_A = self._graph_ideal() Q = graph.ring() @@ -1050,7 +1050,7 @@ 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 (isinstance(B, MPolynomialRing_base) or is_PolynomialRing(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: @@ -3141,7 +3141,7 @@ def _tensor_product_ring(B, A): from sage.rings.number_field.number_field_base import NumberField 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 is_PolynomialRing + 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 QuotientRing_nc @@ -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 isinstance(A, PolynomialQuotientRing_generic) + 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,7 +3170,7 @@ def _tensor_product_ring(B, A): order=term_order(B) + term_order(A)) def relations(A, R_gens_A): - if isinstance(A, MPolynomialRing_base) or is_PolynomialRing(A): + if isinstance(A, MPolynomialRing_base) or isinstance(A, PolynomialRing_general): return [] elif isinstance(A, PolynomialQuotientRing_generic): to_R = A.ambient().hom(R_gens_A, R, check=False) diff --git a/src/sage/rings/multi_power_series_ring.py b/src/sage/rings/multi_power_series_ring.py index cba2aeadfa9..7478f1cdd68 100644 --- a/src/sage/rings/multi_power_series_ring.py +++ b/src/sage/rings/multi_power_series_ring.py @@ -207,7 +207,7 @@ 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 MPolynomialRing_base from sage.rings.polynomial.term_order import TermOrder @@ -664,7 +664,7 @@ def _coerce_impl(self, f): """ P = f.parent() if isinstance(P, MPolynomialRing_base) or is_MPowerSeriesRing(P) \ - or is_PolynomialRing(P) or is_PowerSeriesRing(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) @@ -828,7 +828,7 @@ def _coerce_map_from_(self, P): True """ if isinstance(P, MPolynomialRing_base) or is_MPowerSeriesRing(P) \ - or is_PolynomialRing(P) or is_PowerSeriesRing(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 31401bddd5b..b97f3dd83aa 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 PowerSeriesRing from sage.rings.power_series_ring_element import PowerSeries @@ -393,7 +393,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 73e500adca0..757786a6300 100644 --- a/src/sage/rings/padics/padic_valuation.py +++ b/src/sage/rings/padics/padic_valuation.py @@ -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") diff --git a/src/sage/rings/polynomial/flatten.py b/src/sage/rings/polynomial/flatten.py index fded7abffd9..da8da019c20 100644 --- a/src/sage/rings/polynomial/flatten.py +++ b/src/sage/rings/polynomial/flatten.py @@ -38,7 +38,7 @@ 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 .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 @@ -160,14 +160,14 @@ def __init__(self, domain): sage: fl.section()(fl(p)) == p True """ - if not is_PolynomialRing(domain) and not isinstance(domain, MPolynomialRing_base): + 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 isinstance(ring, MPolynomialRing_base): + while isinstance(ring, PolynomialRing_general) or isinstance(ring, MPolynomialRing_base): intermediate_rings.append(ring) v = ring.variable_names() variables.extend(reversed(v)) @@ -221,7 +221,7 @@ 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(): @@ -347,14 +347,14 @@ def __init__(self, domain, codomain): """ if not isinstance(domain, MPolynomialRing_base): raise ValueError("domain should be a multivariate polynomial ring") - if not is_PolynomialRing(codomain) and not isinstance(codomain, MPolynomialRing_base): + 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) + 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)) @@ -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 isinstance(domain, MPolynomialRing_base): + 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 isinstance(R, MPolynomialRing_base) 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() diff --git a/src/sage/rings/polynomial/laurent_polynomial.pyx b/src/sage/rings/polynomial/laurent_polynomial.pyx index b9d4065cbca..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) diff --git a/src/sage/rings/polynomial/laurent_polynomial_ring.py b/src/sage/rings/polynomial/laurent_polynomial_ring.py index 5ef5081638e..10ef6777303 100644 --- a/src/sage/rings/polynomial/laurent_polynomial_ring.py +++ b/src/sage/rings/polynomial/laurent_polynomial_ring.py @@ -235,14 +235,14 @@ 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.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: diff --git a/src/sage/rings/polynomial/multi_polynomial_ideal.py b/src/sage/rings/polynomial/multi_polynomial_ideal.py index f2f4488231e..d1dd1126a03 100644 --- a/src/sage/rings/polynomial/multi_polynomial_ideal.py +++ b/src/sage/rings/polynomial/multi_polynomial_ideal.py @@ -594,10 +594,10 @@ def _groebner_cover(self): 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.polynomial_ring import PolynomialRing_general F = self.base_ring() if (not isinstance(F, FractionField_generic) or - (not isinstance(F.ring(), MPolynomialRing_base) and not is_PolynomialRing(F.ring()))): + (not isinstance(F.ring(), MPolynomialRing_base) and not isinstance(F.ring(), 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 145a645eac4..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 diff --git a/src/sage/rings/polynomial/multi_polynomial_ring_base.pyx b/src/sage/rings/polynomial/multi_polynomial_ring_base.pyx index da82ae22c20..856e8b1e7f8 100644 --- a/src/sage/rings/polynomial/multi_polynomial_ring_base.pyx +++ b/src/sage/rings/polynomial/multi_polynomial_ring_base.pyx @@ -135,7 +135,7 @@ cdef class MPolynomialRing_base(CommutativeRing): Multivariate Polynomial Ring in x, y over Rational Field """ base = self.base_ring() - if isinstance(base, MPolynomialRing_base) or polynomial_ring.is_PolynomialRing(base): + if isinstance(base, MPolynomialRing_base) or polynomial_ring.isinstance(base, PolynomialRing_general): from sage.rings.polynomial.flatten import FlatteningMorphism return FlatteningMorphism(self) else: @@ -597,7 +597,7 @@ cdef class MPolynomialRing_base(CommutativeRing): 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 polynomial_ring.isinstance(P, PolynomialRing_general): if P.variable_name() in self.variable_names(): if self.has_coerce_map_from(P.base_ring()): return self(x) diff --git a/src/sage/rings/polynomial/polynomial_element.pyx b/src/sage/rings/polynomial/polynomial_element.pyx index 6a407449ca6..b93871b819a 100644 --- a/src/sage/rings/polynomial/polynomial_element.pyx +++ b/src/sage/rings/polynomial/polynomial_element.pyx @@ -119,7 +119,7 @@ from sage.arith.functions import lcm from sage.rings.polynomial import polynomial_fateman from sage.rings.ideal import Ideal_generic -from sage.rings.polynomial.polynomial_ring import is_PolynomialRing +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 @@ -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() diff --git a/src/sage/rings/polynomial/polynomial_ring.py b/src/sage/rings/polynomial/polynomial_ring.py index 7a47b7bfc3b..c1d09543688 100644 --- a/src/sage/rings/polynomial/polynomial_ring.py +++ b/src/sage/rings/polynomial/polynomial_ring.py @@ -188,23 +188,23 @@ def is_PolynomialRing(x): EXAMPLES:: - sage: from sage.rings.polynomial.polynomial_ring import is_PolynomialRing + sage: from sage.rings.polynomial.polynomial_ring import PolynomialRing_general sage: from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_base - sage: is_PolynomialRing(2) + sage: isinstance(2, PolynomialRing_general) False This polynomial ring is not univariate. :: - sage: is_PolynomialRing(ZZ['x,y,z']) + sage: isinstance(ZZ['x,y,z'], PolynomialRing_general) False sage: isinstance(ZZ['x,y,z'], MPolynomialRing_base) True :: - sage: is_PolynomialRing(ZZ['w']) + sage: isinstance(ZZ['w'], PolynomialRing_general) True Univariate means not only in one variable, but is a specific data @@ -216,7 +216,7 @@ def is_PolynomialRing(x): sage: # needs sage.libs.singular sage: R. = PolynomialRing(ZZ, implementation="singular"); R Multivariate Polynomial Ring in w over Integer Ring - sage: is_PolynomialRing(R) + sage: isinstance(R, PolynomialRing_general) False sage: type(R) @@ -618,7 +618,7 @@ def flattening_morphism(self): """ from .multi_polynomial_ring import MPolynomialRing_base base = self.base_ring() - if is_PolynomialRing(base) or isinstance(base, MPolynomialRing_base): + if isinstance(base, PolynomialRing_general) or isinstance(base, MPolynomialRing_base): from .flatten import FlatteningMorphism return FlatteningMorphism(self) else: @@ -803,7 +803,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 @@ -1596,7 +1596,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_ring.py b/src/sage/rings/power_series_ring.py index 4b3887b008a..e2d12196fff 100644 --- a/src/sage/rings/power_series_ring.py +++ b/src/sage/rings/power_series_ring.py @@ -149,7 +149,7 @@ from sage.rings.fraction_field_element import FractionFieldElement from sage.rings.infinity import infinity from sage.rings.polynomial.multi_polynomial_ring_base import MPolynomialRing_base -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.structure.category_object import normalize_names from sage.structure.element import Expression, parent @@ -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/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/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 e8a68d9633d..2b297d0c672 100644 --- a/src/sage/schemes/affine/affine_space.py +++ b/src/sage/schemes/affine/affine_space.py @@ -15,7 +15,7 @@ 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.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 @@ -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 (isinstance(n, MPolynomialRing_base) 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/plane_conics/constructor.py b/src/sage/schemes/plane_conics/constructor.py index ee12866398e..27cacbf72b0 100644 --- a/src/sage/schemes/plane_conics/constructor.py +++ b/src/sage/schemes/plane_conics/constructor.py @@ -33,7 +33,7 @@ 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 MPolynomialRing_base -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.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 isinstance(base_field.ring(), MPolynomialRing_base)): + 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 a02a4e73bdc..529127850e5 100644 --- a/src/sage/schemes/projective/projective_space.py +++ b/src/sage/schemes/projective/projective_space.py @@ -86,7 +86,7 @@ from sage.rings.integer import Integer from sage.rings.integer_ring import ZZ from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_base -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.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 (isinstance(n, MPolynomialRing_base) 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 1af5c674372..ab7a7a2f4eb 100644 --- a/src/sage/schemes/toric/fano_variety.py +++ b/src/sage/schemes/toric/fano_variety.py @@ -129,7 +129,7 @@ from sage.rings.rational_field import QQ from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_base -from sage.rings.polynomial.polynomial_ring import is_PolynomialRing +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 isinstance(R, MPolynomialRing_base): + 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/symbolic/ring.pyx b/src/sage/symbolic/ring.pyx index 71d0f2fa63e..324745d94aa 100644 --- a/src/sage/symbolic/ring.pyx +++ b/src/sage/symbolic/ring.pyx @@ -208,7 +208,7 @@ 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.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 @@ -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 isinstance(R, MPolynomialRing_base) 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 From 52442e89a71a4e5e82d4da46202f035e5a2878c3 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Sun, 23 Jun 2024 12:23:08 -0700 Subject: [PATCH 07/18] Fixups --- src/sage/matrix/matrix_space.py | 4 ++-- src/sage/rings/homset.py | 2 +- src/sage/rings/integer_ring.pyx | 4 ++-- src/sage/rings/morphism.pyx | 2 +- src/sage/rings/polynomial/multi_polynomial_ring_base.pyx | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/sage/matrix/matrix_space.py b/src/sage/matrix/matrix_space.py index 88248a73dcb..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.isinstance(R, PolynomialRing_general) 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.isinstance(R, MPolynomialRing_base) 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/rings/homset.py b/src/sage/rings/homset.py index e2bdde6c034..9b4a072e901 100644 --- a/src/sage/rings/homset.py +++ b/src/sage/rings/homset.py @@ -55,7 +55,7 @@ def RingHomset(R, S, category=None): Set of Homomorphisms from Integer Ring to Rational Field """ - if quotient_ring.isinstance(R, QuotientRing_nc): + 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) diff --git a/src/sage/rings/integer_ring.pyx b/src/sage/rings/integer_ring.pyx index 9fa4cace737..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.isinstance(I, Ideal_generic): + 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.isinstance(prime, Ideal_generic): + 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/morphism.pyx b/src/sage/rings/morphism.pyx index 9ded5707f30..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.isinstance(I, Ideal_generic): + 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()]) diff --git a/src/sage/rings/polynomial/multi_polynomial_ring_base.pyx b/src/sage/rings/polynomial/multi_polynomial_ring_base.pyx index 856e8b1e7f8..6a7abc1c493 100644 --- a/src/sage/rings/polynomial/multi_polynomial_ring_base.pyx +++ b/src/sage/rings/polynomial/multi_polynomial_ring_base.pyx @@ -135,7 +135,7 @@ cdef class MPolynomialRing_base(CommutativeRing): Multivariate Polynomial Ring in x, y over Rational Field """ base = self.base_ring() - if isinstance(base, MPolynomialRing_base) or polynomial_ring.isinstance(base, PolynomialRing_general): + if isinstance(base, MPolynomialRing_base) or isinstance(base, polynomial_ring.PolynomialRing_general): from sage.rings.polynomial.flatten import FlatteningMorphism return FlatteningMorphism(self) else: @@ -597,7 +597,7 @@ cdef class MPolynomialRing_base(CommutativeRing): elif self.base_ring().has_coerce_map_from(P._mpoly_base_ring(self.variable_names())): return self(x) - elif polynomial_ring.isinstance(P, PolynomialRing_general): + 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) From d99754cb590b7e26a860eb892febe610581cfc6b Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Sun, 23 Jun 2024 12:56:34 -0700 Subject: [PATCH 08/18] src/sage/rings/polynomial/polynomial_element.pyx: Fix up --- src/sage/rings/polynomial/polynomial_element.pyx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sage/rings/polynomial/polynomial_element.pyx b/src/sage/rings/polynomial/polynomial_element.pyx index b93871b819a..9029427c6a1 100644 --- a/src/sage/rings/polynomial/polynomial_element.pyx +++ b/src/sage/rings/polynomial/polynomial_element.pyx @@ -7979,7 +7979,7 @@ cdef class Polynomial(CommutativePolynomial): 4 + 4*T + O(T^2) """ # Late import to avoid cyclic dependencies: - from sage.rings.power_series_ring import PowerSeriesRing + from sage.rings.power_series_ring import is_PowerSeriesRing if self.is_zero(): return self # return 0 n = self.degree() From e3b443d8494c2c28543284d7875041b2c73afc94 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Sun, 23 Jun 2024 14:17:29 -0700 Subject: [PATCH 09/18] src/sage/rings/qqbar_decorators.py: Fix up --- src/sage/rings/qqbar_decorators.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sage/rings/qqbar_decorators.py b/src/sage/rings/qqbar_decorators.py index 5d6bc228a82..7343a0b9b08 100644 --- a/src/sage/rings/qqbar_decorators.py +++ b/src/sage/rings/qqbar_decorators.py @@ -86,7 +86,7 @@ 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 From 62428c6fabd404ce5fa543538182a583bf52ea4e Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Sun, 23 Jun 2024 14:50:26 -0700 Subject: [PATCH 10/18] Deprecations --- src/sage/rings/ideal.py | 16 ++++++++++------ src/sage/rings/laurent_series_ring_element.pyx | 4 ++++ .../rings/multi_power_series_ring_element.py | 16 ++++++++++------ .../rings/polynomial/multi_polynomial_ideal.py | 10 +++++++--- .../polynomial/multi_polynomial_ring_base.pyx | 4 ++++ .../polynomial/multi_polynomial_sequence.py | 7 ++++++- .../polynomial/polynomial_quotient_ring.py | 4 ++++ src/sage/rings/polynomial/polynomial_ring.py | 18 +++++++++++------- src/sage/rings/power_series_ring_element.pyx | 14 +++++++++----- src/sage/rings/quotient_ring.py | 14 +++++++++----- 10 files changed, 74 insertions(+), 33 deletions(-) diff --git a/src/sage/rings/ideal.py b/src/sage/rings/ideal.py index 81637c02f3f..9d062f0d5ae 100644 --- a/src/sage/rings/ideal.py +++ b/src/sage/rings/ideal.py @@ -219,14 +219,14 @@ def is_Ideal(x): that Sage does not interpret rings objects themselves as ideals. However, one can still explicitly construct these ideals:: - sage: from sage.rings.ideal import Ideal_generic + sage: from sage.rings.ideal import is_Ideal sage: R = ZZ - sage: isinstance(R, Ideal_generic) + sage: is_Ideal(R) False - sage: 1*R; isinstance(1*R, Ideal_generic) + sage: 1*R; is_Ideal(1*R) Principal ideal (1) of Integer Ring True - sage: 0*R; isinstance(0*R, Ideal_generic) + sage: 0*R; is_Ideal(0*R) Principal ideal (0) of Integer Ring True @@ -235,11 +235,15 @@ def is_Ideal(x): sage: R = PolynomialRing(QQ, 'x'); x = R.gen() sage: I = R.ideal(x^2 + 1); I Principal ideal (x^2 + 1) of Univariate Polynomial Ring in x over Rational Field - sage: isinstance(I, Ideal_generic) + sage: is_Ideal(I) True - sage: isinstance((x^2 + 1)*R, Ideal_generic) + 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/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/multi_power_series_ring_element.py b/src/sage/rings/multi_power_series_ring_element.py index b97f3dd83aa..11b196c9d16 100644 --- a/src/sage/rings/multi_power_series_ring_element.py +++ b/src/sage/rings/multi_power_series_ring_element.py @@ -170,19 +170,23 @@ def is_MPowerSeries(f): TESTS:: - sage: from sage.rings.power_series_ring_element import PowerSeries - sage: from sage.rings.multi_power_series_ring_element import MPowerSeries + sage: from sage.rings.power_series_ring_element import is_PowerSeries + sage: from sage.rings.multi_power_series_ring_element import is_MPowerSeries sage: M = PowerSeriesRing(ZZ,4,'v') - sage: isinstance(M.random_element(10), PowerSeries) + sage: is_PowerSeries(M.random_element(10)) True - sage: isinstance(M.random_element(10), MPowerSeries) + sage: is_MPowerSeries(M.random_element(10)) True sage: T. = PowerSeriesRing(RR) - sage: isinstance(1 - v + v^2 +O(v^3), MPowerSeries) + sage: is_MPowerSeries(1 - v + v^2 +O(v^3)) False - sage: isinstance(1 - v + v^2 +O(v^3), PowerSeries) + 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) diff --git a/src/sage/rings/polynomial/multi_polynomial_ideal.py b/src/sage/rings/polynomial/multi_polynomial_ideal.py index d1dd1126a03..9932f13a0aa 100644 --- a/src/sage/rings/polynomial/multi_polynomial_ideal.py +++ b/src/sage/rings/polynomial/multi_polynomial_ideal.py @@ -317,7 +317,7 @@ def is_MPolynomialIdeal(x) -> bool: EXAMPLES:: - sage: from sage.rings.polynomial.multi_polynomial_ideal import MPolynomialIdeal + sage: from sage.rings.polynomial.multi_polynomial_ideal import is_MPolynomialIdeal sage: P. = PolynomialRing(QQ) sage: I = [x + 2*y + 2*z - 1, x^2 + 2*y^2 + 2*z^2 - x, 2*x*y + 2*y*z - y] @@ -325,15 +325,19 @@ def is_MPolynomialIdeal(x) -> bool: the ideal itself. This distinction is inconsistent with Singular but matches Magma's behavior. :: - sage: isinstance(I, MPolynomialIdeal) + sage: is_MPolynomialIdeal(I) False :: sage: I = Ideal(I) - sage: isinstance(I, MPolynomialIdeal) + 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) diff --git a/src/sage/rings/polynomial/multi_polynomial_ring_base.pyx b/src/sage/rings/polynomial/multi_polynomial_ring_base.pyx index 6a7abc1c493..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) diff --git a/src/sage/rings/polynomial/multi_polynomial_sequence.py b/src/sage/rings/polynomial/multi_polynomial_sequence.py index 73bce2bc2be..35227eb54f5 100644 --- a/src/sage/rings/polynomial/multi_polynomial_sequence.py +++ b/src/sage/rings/polynomial/multi_polynomial_sequence.py @@ -202,7 +202,12 @@ def is_PolynomialSequence(F): 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): """ diff --git a/src/sage/rings/polynomial/polynomial_quotient_ring.py b/src/sage/rings/polynomial/polynomial_quotient_ring.py index cead3f518eb..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) diff --git a/src/sage/rings/polynomial/polynomial_ring.py b/src/sage/rings/polynomial/polynomial_ring.py index c1d09543688..9aa36fb2058 100644 --- a/src/sage/rings/polynomial/polynomial_ring.py +++ b/src/sage/rings/polynomial/polynomial_ring.py @@ -188,23 +188,23 @@ def is_PolynomialRing(x): EXAMPLES:: - sage: from sage.rings.polynomial.polynomial_ring import PolynomialRing_general - sage: from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_base - sage: isinstance(2, PolynomialRing_general) + 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) False This polynomial ring is not univariate. :: - sage: isinstance(ZZ['x,y,z'], PolynomialRing_general) + sage: is_PolynomialRing(ZZ['x,y,z']) False - sage: isinstance(ZZ['x,y,z'], MPolynomialRing_base) + sage: is_MPolynomialRing(ZZ['x,y,z']) True :: - sage: isinstance(ZZ['w'], PolynomialRing_general) + sage: is_PolynomialRing(ZZ['w']) True Univariate means not only in one variable, but is a specific data @@ -216,11 +216,15 @@ def is_PolynomialRing(x): sage: # needs sage.libs.singular sage: R. = PolynomialRing(ZZ, implementation="singular"); R Multivariate Polynomial Ring in w over Integer Ring - sage: isinstance(R, PolynomialRing_general) + sage: is_PolynomialRing(R) False 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) diff --git a/src/sage/rings/power_series_ring_element.pyx b/src/sage/rings/power_series_ring_element.pyx index 637ed2dd78b..6da3587ccf5 100644 --- a/src/sage/rings/power_series_ring_element.pyx +++ b/src/sage/rings/power_series_ring_element.pyx @@ -123,18 +123,22 @@ def is_PowerSeries(x): EXAMPLES:: sage: R. = PowerSeriesRing(ZZ) - sage: from sage.rings.power_series_ring_element import PowerSeries - sage: isinstance(1 + x^2, PowerSeries) + sage: from sage.rings.power_series_ring_element import is_PowerSeries + sage: is_PowerSeries(1 + x^2) True - sage: isinstance(x - x, PowerSeries) + sage: is_PowerSeries(x - x) True - sage: isinstance(0, PowerSeries) + sage: is_PowerSeries(0) False sage: var('x') # needs sage.symbolic x - sage: isinstance(1 + x^2, PowerSeries) # needs sage.symbolic + 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/quotient_ring.py b/src/sage/rings/quotient_ring.py index 9d65bb1d257..a7dc727fddc 100644 --- a/src/sage/rings/quotient_ring.py +++ b/src/sage/rings/quotient_ring.py @@ -346,13 +346,13 @@ def is_QuotientRing(x): EXAMPLES:: - sage: from sage.rings.quotient_ring import QuotientRing_nc + sage: from sage.rings.quotient_ring import is_QuotientRing sage: R. = PolynomialRing(ZZ,'x') sage: I = R.ideal([4 + 3*x + x^2, 1 + x^2]) sage: S = R.quotient_ring(I) - sage: isinstance(S, QuotientRing_nc) + sage: is_QuotientRing(S) True - sage: isinstance(R, QuotientRing_nc) + sage: is_QuotientRing(R) False :: @@ -361,11 +361,15 @@ def is_QuotientRing(x): sage: F. = FreeAlgebra(QQ, implementation='letterplace') sage: I = F * [x*y + y*z, x^2 + x*y - y*x - y^2] * F sage: Q = F.quo(I) - sage: isinstance(Q, QuotientRing_nc) + sage: is_QuotientRing(Q) True - sage: isinstance(F, QuotientRing_nc) + 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) From 203c4da0781cbe8bc6d5e9fabd199e5c7476f4aa Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Sun, 23 Jun 2024 15:04:04 -0700 Subject: [PATCH 11/18] src/sage/rings/asymptotic/misc.py: Fixup --- src/sage/rings/asymptotic/misc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sage/rings/asymptotic/misc.py b/src/sage/rings/asymptotic/misc.py index 57467729fd9..3d01676282c 100644 --- a/src/sage/rings/asymptotic/misc.py +++ b/src/sage/rings/asymptotic/misc.py @@ -151,7 +151,7 @@ def parent_to_repr_short(P): from sage.symbolic.ring import SR 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 PowerSeriesRing + from sage.rings.power_series_ring import is_PowerSeriesRing def abbreviate(P): try: From 68921bc195d4f6cd81c3f2216b04e30b5ff35d75 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Sun, 23 Jun 2024 15:04:04 -0700 Subject: [PATCH 12/18] Deprecations --- src/sage/rings/polynomial/polynomial_ring.py | 8 ++++++++ src/sage/rings/quotient_ring.py | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/src/sage/rings/polynomial/polynomial_ring.py b/src/sage/rings/polynomial/polynomial_ring.py index 9aa36fb2058..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 :: diff --git a/src/sage/rings/quotient_ring.py b/src/sage/rings/quotient_ring.py index a7dc727fddc..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 From 9acf49ea12298f8f002ea719058249a78539f801 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Sun, 23 Jun 2024 15:19:23 -0700 Subject: [PATCH 13/18] src/sage/rings/laurent_series_ring.py: Fix up --- src/sage/rings/laurent_series_ring.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sage/rings/laurent_series_ring.py b/src/sage/rings/laurent_series_ring.py index 238b1e66288..1a271f968f9 100644 --- a/src/sage/rings/laurent_series_ring.py +++ b/src/sage/rings/laurent_series_ring.py @@ -679,7 +679,7 @@ def _coerce_map_from_(self, P): LaurentPolynomialRing_generic, ) from sage.rings.polynomial.polynomial_ring import PolynomialRing_general - from sage.rings.power_series_ring import PowerSeriesRing + from sage.rings.power_series_ring import is_PowerSeriesRing if ((is_LaurentSeriesRing(P) or isinstance(P, LaurentPolynomialRing_generic) or From 1dd13ceb70957f80242c87a5a7a5db16b1a6bac5 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Sun, 23 Jun 2024 15:37:14 -0700 Subject: [PATCH 14/18] Fixups --- src/sage/rings/asymptotic/asymptotic_ring.py | 2 +- src/sage/rings/multi_power_series_ring_element.py | 4 ++-- src/sage/rings/polynomial/multi_polynomial_ideal.py | 9 ++++++--- src/sage/rings/puiseux_series_ring.py | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/sage/rings/asymptotic/asymptotic_ring.py b/src/sage/rings/asymptotic/asymptotic_ring.py index 360eea59bf6..3eff60575f7 100644 --- a/src/sage/rings/asymptotic/asymptotic_ring.py +++ b/src/sage/rings/asymptotic/asymptotic_ring.py @@ -4080,7 +4080,7 @@ def _element_constructor_(self, data, simplify=True, convert=True): from sage.symbolic.ring import SymbolicRing 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 PowerSeriesRing + from sage.rings.power_series_ring import is_PowerSeriesRing if isinstance(P, SymbolicRing): from sage.symbolic.operators import add_vararg diff --git a/src/sage/rings/multi_power_series_ring_element.py b/src/sage/rings/multi_power_series_ring_element.py index 11b196c9d16..0b67125f074 100644 --- a/src/sage/rings/multi_power_series_ring_element.py +++ b/src/sage/rings/multi_power_series_ring_element.py @@ -160,7 +160,7 @@ from sage.rings.infinity import infinity, is_Infinite from sage.rings.integer import Integer from sage.rings.polynomial.polynomial_ring import PolynomialRing_general -from sage.rings.power_series_ring import PowerSeriesRing +from sage.rings.power_series_ring import is_PowerSeriesRing from sage.rings.power_series_ring_element import PowerSeries @@ -368,7 +368,7 @@ def __init__(self, parent, x=0, prec=infinity, is_gen=False, check=False): # test whether x coerces to background univariate # power series ring of parent - from sage.rings.multi_power_series_ring import MPowerSeriesRing + from sage.rings.multi_power_series_ring import is_MPowerSeriesRing if is_PowerSeriesRing(xparent) or is_MPowerSeriesRing(xparent): # x is either a multivariate or univariate power series # diff --git a/src/sage/rings/polynomial/multi_polynomial_ideal.py b/src/sage/rings/polynomial/multi_polynomial_ideal.py index 9932f13a0aa..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 :: @@ -596,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.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 isinstance(F.ring(), MPolynomialRing_base) and not isinstance(F.ring(), PolynomialRing_general))): + 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/puiseux_series_ring.py b/src/sage/rings/puiseux_series_ring.py index 662a17a7cc1..d63b5bcc665 100644 --- a/src/sage/rings/puiseux_series_ring.py +++ b/src/sage/rings/puiseux_series_ring.py @@ -30,7 +30,7 @@ from sage.rings.infinity import infinity from sage.rings.laurent_series_ring import LaurentSeriesRing from sage.rings.laurent_series_ring_element import LaurentSeries -from sage.rings.power_series_ring import PowerSeriesRing +from sage.rings.power_series_ring import is_PowerSeriesRing from sage.rings.power_series_ring_element import PowerSeries from sage.rings.puiseux_series_ring_element import PuiseuxSeries from sage.structure.element import parent From 6085d64377306bb910e1c996cf138c7c2bbcc63f Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Sun, 23 Jun 2024 16:00:28 -0700 Subject: [PATCH 15/18] Fixups --- src/sage/rings/ideal.py | 3 +++ src/sage/rings/laurent_series_ring.py | 2 +- src/sage/rings/multi_power_series_ring.py | 4 ++-- src/sage/rings/multi_power_series_ring_element.py | 6 ++++++ src/sage/rings/power_series_ring.py | 2 +- src/sage/rings/power_series_ring_element.pyx | 3 +++ 6 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/sage/rings/ideal.py b/src/sage/rings/ideal.py index 9d062f0d5ae..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 diff --git a/src/sage/rings/laurent_series_ring.py b/src/sage/rings/laurent_series_ring.py index 1a271f968f9..6e8e8a932b0 100644 --- a/src/sage/rings/laurent_series_ring.py +++ b/src/sage/rings/laurent_series_ring.py @@ -59,7 +59,7 @@ def is_LaurentSeriesRing(x): TESTS:: - sage: from sage.rings.laurent_series_ring import LaurentSeriesRing + sage: from sage.rings.laurent_series_ring import is_LaurentSeriesRing sage: K. = LaurentSeriesRing(QQ) sage: is_LaurentSeriesRing(K) True diff --git a/src/sage/rings/multi_power_series_ring.py b/src/sage/rings/multi_power_series_ring.py index 7478f1cdd68..ab2b35d718c 100644 --- a/src/sage/rings/multi_power_series_ring.py +++ b/src/sage/rings/multi_power_series_ring.py @@ -233,8 +233,8 @@ def is_MPowerSeriesRing(x): TESTS:: - sage: from sage.rings.power_series_ring import PowerSeriesRing - sage: from sage.rings.multi_power_series_ring import MPowerSeriesRing + sage: from sage.rings.power_series_ring import is_PowerSeriesRing + sage: from sage.rings.multi_power_series_ring import is_MPowerSeriesRing sage: M = PowerSeriesRing(ZZ, 4, 'v') sage: is_PowerSeriesRing(M) False diff --git a/src/sage/rings/multi_power_series_ring_element.py b/src/sage/rings/multi_power_series_ring_element.py index 0b67125f074..72cb8b4a2d8 100644 --- a/src/sage/rings/multi_power_series_ring_element.py +++ b/src/sage/rings/multi_power_series_ring_element.py @@ -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)) diff --git a/src/sage/rings/power_series_ring.py b/src/sage/rings/power_series_ring.py index e2d12196fff..bc78e0d98e2 100644 --- a/src/sage/rings/power_series_ring.py +++ b/src/sage/rings/power_series_ring.py @@ -466,7 +466,7 @@ def is_PowerSeriesRing(R): EXAMPLES:: - sage: from sage.rings.power_series_ring import PowerSeriesRing + sage: from sage.rings.power_series_ring import is_PowerSeriesRing sage: is_PowerSeriesRing(10) False sage: is_PowerSeriesRing(QQ[['x']]) diff --git a/src/sage/rings/power_series_ring_element.pyx b/src/sage/rings/power_series_ring_element.pyx index 6da3587ccf5..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 From 632fca486363918b592b5df04d79b23b3602d6f5 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Sun, 23 Jun 2024 16:27:03 -0700 Subject: [PATCH 16/18] src/sage/schemes/hyperelliptic_curves/monsky_washnitzer.py: Fix up --- src/sage/schemes/hyperelliptic_curves/monsky_washnitzer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sage/schemes/hyperelliptic_curves/monsky_washnitzer.py b/src/sage/schemes/hyperelliptic_curves/monsky_washnitzer.py index 6b97e69dd3a..d9a9996d44e 100644 --- a/src/sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +++ b/src/sage/schemes/hyperelliptic_curves/monsky_washnitzer.py @@ -69,7 +69,7 @@ from sage.rings.integer_ring import ZZ from sage.categories.integral_domains import IntegralDomains from sage.rings.infinity import Infinity -from sage.rings.laurent_series_ring import LaurentSeriesRing +from sage.rings.laurent_series_ring import is_LaurentSeriesRing from sage.rings.padics.factory import Qp as pAdicField from sage.rings.polynomial.polynomial_element import Polynomial from sage.schemes.elliptic_curves.constructor import EllipticCurve From d822ab19e330eb8e6009890217d0b47d39b559a9 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Sun, 23 Jun 2024 18:16:03 -0700 Subject: [PATCH 17/18] src/sage/modular/modform_hecketriangle/abstract_space.py: Fix up --- src/sage/modular/modform_hecketriangle/abstract_space.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sage/modular/modform_hecketriangle/abstract_space.py b/src/sage/modular/modform_hecketriangle/abstract_space.py index 2fcd95ca2ec..dda22dd1b34 100644 --- a/src/sage/modular/modform_hecketriangle/abstract_space.py +++ b/src/sage/modular/modform_hecketriangle/abstract_space.py @@ -22,9 +22,9 @@ from sage.rings.infinity import infinity from sage.rings.integer import Integer from sage.rings.integer_ring import ZZ -from sage.rings.laurent_series_ring import LaurentSeriesRing +from sage.rings.laurent_series_ring import is_LaurentSeriesRing from sage.rings.polynomial.polynomial_ring import PolynomialRing_general -from sage.rings.power_series_ring import PowerSeriesRing +from sage.rings.power_series_ring import is_PowerSeriesRing from sage.rings.rational_field import QQ from sage.structure.element import parent From 6a16461619cd42b1445c2198a7305829e78cd7a6 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Mon, 22 Jul 2024 13:13:20 +0100 Subject: [PATCH 18/18] src/sage/dynamics/arithmetic_dynamics/projective_ds.py: Replace a use of is_MPolynomialRing --- src/sage/dynamics/arithmetic_dynamics/projective_ds.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sage/dynamics/arithmetic_dynamics/projective_ds.py b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py index 6409fd9025f..a553b9dd3a8 100644 --- a/src/sage/dynamics/arithmetic_dynamics/projective_ds.py +++ b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py @@ -8473,7 +8473,7 @@ 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: - if is_MPolynomialRing(G.parent()): + if isinstance(G.parent(), MPolynomialRing_base): G = G.polynomial(G.variable(0)) else: #no other fixed points