Skip to content

Commit

Permalink
sagemathgh-38128: Deprecate is_AlgebraicNumber, is_AlgebraicReal,…
Browse files Browse the repository at this point in the history
… `is_ComplexDoubleElement`, `is_ComplexIntervalFieldElement`, `is_ComplexNumber`, `is_FractionField`, `is_FractionFieldElement`, `is_Integer`, `is_IntegerMod`, `is_IntegerRing`, `is_Rational`, `is_RationalField`, `is_RealDoubleElement`, `is_RealIntervalField`, `is_RealIntervalFieldElement`, `is_RealNumber`

    
<!-- ^ Please provide a concise and informative title. -->
<!-- ^ Don't put issue numbers in the title, do this in the PR
description below. -->
<!-- ^ For example, instead of "Fixes sagemath#12345" use "Introduce new method
to calculate 1 + 2". -->
<!-- v Describe your changes below in detail. -->
<!-- v Why is this change required? What problem does it solve? -->
<!-- v If this PR resolves an open issue, please link to it here. For
example, "Fixes sagemath#12345". -->

- Fixes sagemath#24525

### 📝 Checklist

<!-- Put an `x` in all the boxes that apply. -->

- [x] The title is concise and informative.
- [ ] The description explains in detail what this PR is about.
- [x] I have linked a relevant issue or discussion.
- [ ] I have created tests covering the changes.
- [ ] I have updated the documentation and checked the documentation
preview.

### ⌛ Dependencies

<!-- List all open PRs that this PR logically depends on. For example,
-->
<!-- - sagemath#12345: short description why this is a dependency -->
<!-- - sagemath#34567: ... -->
    
URL: sagemath#38128
Reported by: Matthias Köppe
Reviewer(s): gmou3
  • Loading branch information
Release Manager committed Jun 15, 2024
2 parents 44e8300 + e88d435 commit 98a2b16
Show file tree
Hide file tree
Showing 71 changed files with 331 additions and 210 deletions.
16 changes: 8 additions & 8 deletions src/sage/algebras/quatalg/quaternion_algebra.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
from sage.rings.rational import Rational
from sage.rings.finite_rings.finite_field_constructor import GF
from sage.rings.ideal import Ideal_fractional
from sage.rings.rational_field import is_RationalField, QQ
from sage.rings.rational_field import RationalField, QQ
from sage.rings.infinity import infinity
from sage.rings.number_field.number_field_base import NumberField
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
Expand Down Expand Up @@ -429,7 +429,7 @@ def is_division_algebra(self) -> bool:
...
NotImplementedError: base field must be rational numbers
"""
if not is_RationalField(self.base_ring()):
if not isinstance(self.base_ring(), RationalField):
raise NotImplementedError("base field must be rational numbers")
return self.discriminant() != 1

Expand All @@ -453,7 +453,7 @@ def is_matrix_ring(self) -> bool:
NotImplementedError: base field must be rational numbers
"""
if not is_RationalField(self.base_ring()):
if not isinstance(self.base_ring(), RationalField):
raise NotImplementedError("base field must be rational numbers")
return self.discriminant() == 1

Expand Down Expand Up @@ -678,7 +678,7 @@ def __init__(self, base_ring, a, b, names='i,j,k'):
Parent.__init__(self, base=base_ring, names=names, category=cat)
self._a = a
self._b = b
if is_RationalField(base_ring) and a.denominator() == 1 == b.denominator():
if isinstance(base_ring, RationalField) and a.denominator() == 1 == b.denominator():
self.Element = QuaternionAlgebraElement_rational_field
elif (isinstance(base_ring, NumberField) and base_ring.degree() > 2 and base_ring.is_absolute() and
a.denominator() == 1 == b.denominator() and base_ring.defining_polynomial().is_monic()):
Expand Down Expand Up @@ -1066,7 +1066,7 @@ def is_definite(self):
...
ValueError: base field must be rational numbers
"""
if not is_RationalField(self.base_ring()):
if not isinstance(self.base_ring(), RationalField):
raise ValueError("base field must be rational numbers")
a, b = self.invariants()
return a < 0 and b < 0
Expand Down Expand Up @@ -1218,7 +1218,7 @@ def discriminant(self):
sage: QuaternionAlgebra(QQ[sqrt(2)], 3, 19).discriminant() # needs sage.symbolic
Fractional ideal (1)
"""
if not is_RationalField(self.base_ring()):
if not isinstance(self.base_ring(), RationalField):
try:
F = self.base_ring()
return F.hilbert_conductor(self._a, self._b)
Expand All @@ -1245,7 +1245,7 @@ def ramified_primes(self):
sage: QuaternionAlgebra(QQ, -58, -69).ramified_primes()
[3, 23, 29]
"""
if not is_RationalField(self.base_ring()):
if not isinstance(self.base_ring(), RationalField):
raise ValueError("base field must be the rational numbers")

a, b = self._a, self._b
Expand Down Expand Up @@ -2517,7 +2517,7 @@ def attempt_isomorphism(self, other):
if other.quaternion_algebra() != Q:
raise TypeError('not an order in the same quaternion algebra')

if not is_RationalField(Q.base_ring()):
if not isinstance(Q.base_ring(), RationalField):
raise NotImplementedError('only implemented for orders in a rational quaternion algebra')
if not Q.is_definite():
raise NotImplementedError('only implemented for definite quaternion orders')
Expand Down
4 changes: 2 additions & 2 deletions src/sage/combinat/finite_state_machine_generators.py
Original file line number Diff line number Diff line change
Expand Up @@ -268,8 +268,8 @@ def Word(self, word, input_alphabet=None):
TESTS::
sage: from sage.rings.integer import is_Integer
sage: all(is_Integer(s.label()) for s in A.states())
sage: from sage.rings.integer import Integer
sage: all(isinstance(s.label(), Integer) for s in A.states())
True
"""
letters = list(word)
Expand Down
4 changes: 2 additions & 2 deletions src/sage/combinat/sf/jack.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
from sage.rings.rational_field import QQ
from sage.arith.misc import gcd
from sage.arith.functions import lcm
from sage.rings.fraction_field import is_FractionField
from sage.rings.fraction_field import FractionField_generic
from sage.misc.misc_c import prod
from sage.categories.morphism import SetMorphism
from sage.categories.homset import Hom, End
Expand Down Expand Up @@ -481,7 +481,7 @@ def normalize_coefficients(self, c):
6/(t^2 + 3*t + 2)
"""
BR = self.base_ring()
if is_FractionField(BR) and BR.base_ring() == QQ:
if isinstance(BR, FractionField_generic) and BR.base_ring() == QQ:
denom = c.denominator()
numer = c.numerator()

Expand Down
4 changes: 2 additions & 2 deletions src/sage/dynamics/arithmetic_dynamics/affine_ds.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ class initialization directly.
from sage.rings.integer import Integer
from sage.rings.finite_rings.finite_field_base import FiniteField
from sage.rings.fraction_field import FractionField
from sage.rings.fraction_field import is_FractionField
from sage.rings.fraction_field import FractionField_generic
from sage.rings.quotient_ring import is_QuotientRing
from sage.schemes.affine.affine_morphism import SchemeMorphism_polynomial_affine_space
from sage.schemes.affine.affine_morphism import SchemeMorphism_polynomial_affine_space_field
Expand Down Expand Up @@ -261,7 +261,7 @@ def __classcall_private__(cls, morphism_or_polys, domain=None):
polys = [morphism_or_polys]

PR = get_coercion_model().common_parent(*polys)
fraction_field = any(is_FractionField(poly.parent()) for poly in polys)
fraction_field = any(isinstance(poly.parent(), FractionField_generic) for poly in polys)
if fraction_field:
K = PR.base_ring().fraction_field()
# Replace base ring with its fraction field
Expand Down
20 changes: 10 additions & 10 deletions src/sage/dynamics/arithmetic_dynamics/projective_ds.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,8 @@ class initialization directly.
from sage.rings.finite_rings.finite_field_base import FiniteField
from sage.rings.finite_rings.finite_field_constructor import GF
from sage.rings.finite_rings.integer_mod_ring import Zmod
from sage.rings.fraction_field import (FractionField, is_FractionField, FractionField_1poly_field)
from sage.rings.fraction_field_element import is_FractionFieldElement, FractionFieldElement
from sage.rings.fraction_field import FractionField, FractionField_generic, FractionField_1poly_field
from sage.rings.fraction_field_element import FractionFieldElement
from sage.rings.function_field.function_field import is_FunctionField
from sage.rings.integer import Integer
from sage.rings.integer_ring import ZZ
Expand Down Expand Up @@ -394,11 +394,11 @@ 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 is_FractionField(aff_CR)
if (not is_PolynomialRing(aff_CR) and not isinstance(aff_CR, FractionField_generic)
and not (is_MPolynomialRing(aff_CR) and aff_CR.ngens() == 1)):
msg = '{} is not a single variable polynomial or rational function'
raise ValueError(msg.format(f))
if is_FractionField(aff_CR):
if isinstance(aff_CR, FractionField_generic):
polys = [f.numerator(),f.denominator()]
else:
polys = [f, aff_CR(1)]
Expand Down Expand Up @@ -889,7 +889,7 @@ def dynatomic_polynomial(self, period):
# do it again to divide out by denominators of coefficients
PHI = QR2[0].sage()
PHI = PHI.numerator()._maxima_().divide(PHI.denominator())[0].sage()
if not is_FractionFieldElement(PHI):
if not isinstance(PHI, FractionFieldElement):
from sage.symbolic.expression_conversions import polynomial
PHI = polynomial(PHI, ring=self.coordinate_ring())
except (TypeError, NotImplementedError): #something Maxima, or the conversion, can't handle
Expand Down Expand Up @@ -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 is_FractionField(R):
if is_PolynomialRing(R) or is_MPolynomialRing(R) or isinstance(R, FractionField_generic):
# for polynomial rings, we can get an infinite family of hyperplanes
# by increasing the degree
var = R.gen()
Expand Down Expand Up @@ -3702,7 +3702,7 @@ def automorphism_group(self, **kwds):
raise NotImplementedError("rational function of degree 1 not implemented")
f = self.dehomogenize(1)
R = PolynomialRing(f.base_ring(),'x')
if is_FractionFieldElement(f[0]):
if isinstance(f[0], FractionFieldElement):
F = (f[0].numerator().univariate_polynomial(R))/f[0].denominator().univariate_polynomial(R)
else:
F = f[0].univariate_polynomial(R)
Expand Down Expand Up @@ -4880,7 +4880,7 @@ def periodic_points(self, n, minimal=True, formal=False, R=None, algorithm='vari
if isinstance(R, FractionField_1poly_field) or is_FunctionField(R):
raise NotImplementedError('periodic points not implemented for fraction function fields; '
'clear denominators and use the polynomial ring instead')
if is_FractionField(R):
if isinstance(R, FractionField_generic):
if is_MPolynomialRing(R.ring()):
raise NotImplementedError('periodic points not implemented for fraction function fields; '
'clear denominators and use the polynomial ring instead')
Expand Down Expand Up @@ -5784,7 +5784,7 @@ def sigma_invariants(self, n, formal=False, embedding=None, type='point',
X = X.change_ring(F)
else:
F = base_ring
if is_FractionField(base_ring):
if isinstance(base_ring, FractionField_generic):
if is_MPolynomialRing(base_ring.ring()) or is_PolynomialRing(base_ring.ring()):
f.normalize_coordinates()
f_ring = f.change_ring(base_ring.ring())
Expand Down Expand Up @@ -5886,7 +5886,7 @@ def sigma_invariants(self, n, formal=False, embedding=None, type='point',
return sigmas

base_ring = dom.base_ring()
if is_FractionField(base_ring):
if isinstance(base_ring, FractionField_generic):
base_ring = base_ring.ring()
if (is_PolynomialRing(base_ring) or is_MPolynomialRing(base_ring)):
base_ring = base_ring.base_ring()
Expand Down
6 changes: 3 additions & 3 deletions src/sage/dynamics/complex_dynamics/mandel_julia.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
from sage.schemes.projective.projective_space import ProjectiveSpace
from sage.misc.prandom import randint
from sage.calculus.var import var
from sage.rings.fraction_field import is_FractionField
from sage.rings.fraction_field import FractionField_generic
from sage.categories.function_fields import FunctionFields

lazy_import('sage.dynamics.arithmetic_dynamics.generic_ds', 'DynamicalSystem')
Expand Down Expand Up @@ -243,14 +243,14 @@ def mandelbrot_plot(f=None, **kwds):
P = f.parent()

if P.base_ring() is CC or P.base_ring() is CDF:
if is_FractionField(P):
if isinstance(P, FractionField_generic):
raise NotImplementedError("coefficients must be polynomials in the parameter")
gen_list = list(P.gens())
parameter = gen_list.pop(gen_list.index(parameter))
variable = gen_list.pop()

elif P.base_ring().base_ring() is CC or P.base_ring().base_ring() is CDF:
if is_FractionField(P.base_ring()):
if isinstance(P.base_ring(), FractionField_generic):
raise NotImplementedError("coefficients must be polynomials in the parameter")
phi = P.flattening_morphism()
f = phi(f)
Expand Down
6 changes: 3 additions & 3 deletions src/sage/dynamics/complex_dynamics/mandel_julia_helper.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ from sage.ext.fast_callable import fast_callable
from sage.calculus.all import symbolic_expression
from sage.symbolic.ring import SR
from sage.calculus.var import var
from sage.rings.fraction_field import is_FractionField
from sage.rings.fraction_field import FractionField_generic
from sage.categories.function_fields import FunctionFields
from cypari2.handle_error import PariError
from math import sqrt
Expand Down Expand Up @@ -709,14 +709,14 @@ cpdef polynomial_mandelbrot(f, parameter=None, double x_center=0,
P = f.parent()

if P.base_ring() is CC:
if is_FractionField(P):
if isinstance(P, FractionField_generic):
raise NotImplementedError("coefficients must be polynomials in the parameter")
gen_list = list(P.gens())
parameter = gen_list.pop(gen_list.index(parameter))
variable = gen_list.pop()

elif P.base_ring().base_ring() is CC:
if is_FractionField(P.base_ring()):
if isinstance(P.base_ring(), FractionField_generic):
raise NotImplementedError("coefficients must be polynomials in the parameter")
phi = P.flattening_morphism()
f = phi(f)
Expand Down
8 changes: 4 additions & 4 deletions src/sage/functions/transcendental.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@

lazy_import('sage.combinat.combinat', 'bernoulli_polynomial')
lazy_import('sage.rings.cc', 'CC')
lazy_import('sage.rings.complex_mpfr', ['ComplexField', 'is_ComplexNumber'])
lazy_import('sage.rings.complex_mpfr', ['ComplexField', 'ComplexNumber'])
lazy_import('sage.rings.polynomial.polynomial_real_mpfr_dense', 'PolynomialRealDense')
lazy_import('sage.rings.real_double', 'RDF')
lazy_import('sage.rings.real_mpfr', ['RR', 'RealField', 'is_RealNumber'])
lazy_import('sage.rings.real_mpfr', ['RR', 'RealField', 'RealNumber'])

lazy_import('sage.libs.mpmath.utils', 'call', as_='_mpmath_utils_call')
lazy_import('mpmath', 'zeta', as_='_mpmath_zeta')
Expand Down Expand Up @@ -452,7 +452,7 @@ def zeta_symmetric(s):
- I copied the definition of xi from
http://web.viu.ca/pughg/RiemannZeta/RiemannZetaLong.html
"""
if not (is_ComplexNumber(s) or is_RealNumber(s)):
if not (isinstance(s, ComplexNumber) or isinstance(s, RealNumber)):
s = ComplexField()(s)

R = s.parent()
Expand Down Expand Up @@ -544,7 +544,7 @@ def _eval_(self, x):
sage: dickman_rho(0) # needs sage.symbolic
1.00000000000000
"""
if not is_RealNumber(x):
if not isinstance(x, RealNumber):
try:
x = RR(x)
except (TypeError, ValueError):
Expand Down
4 changes: 2 additions & 2 deletions src/sage/groups/affine_gps/affine_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -173,8 +173,8 @@ def __classcall__(cls, *args, **kwds):
ring = V.base_ring()
if len(args) == 2:
degree, ring = args
from sage.rings.integer import is_Integer
if is_Integer(ring):
from sage.rings.integer import Integer
if isinstance(ring, Integer):
from sage.rings.finite_rings.finite_field_constructor import FiniteField
var = kwds.get('var', 'a')
ring = FiniteField(ring, var)
Expand Down
4 changes: 2 additions & 2 deletions src/sage/groups/matrix_gps/matrix_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@

from sage.categories.groups import Groups
from sage.categories.rings import Rings
from sage.rings.integer import is_Integer
from sage.rings.integer import Integer
from sage.matrix.matrix_space import MatrixSpace
from sage.misc.latex import latex
from sage.structure.richcmp import (richcmp_not_equal, rich_to_bool,
Expand Down Expand Up @@ -455,7 +455,7 @@ def __init__(self, degree, base_ring, category=None):
True
"""
assert base_ring in Rings
assert is_Integer(degree)
assert isinstance(degree, Integer)

self._deg = degree
if self._deg <= 0:
Expand Down
4 changes: 2 additions & 2 deletions src/sage/matrix/matrix0.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ from sage.categories.commutative_rings import CommutativeRings
from sage.categories.rings import Rings

import sage.rings.abc
from sage.rings.integer_ring import is_IntegerRing
from sage.rings.integer_ring import IntegerRing_class

import sage.modules.free_module

Expand Down Expand Up @@ -5975,7 +5975,7 @@ cdef class Matrix(sage.structure.element.Matrix):
return (~self.lift_centered()).change_ring(R)
except (TypeError, ZeroDivisionError):
raise ZeroDivisionError("input matrix must be nonsingular")
elif algorithm is None and is_IntegerRing(R):
elif algorithm is None and isinstance(R, IntegerRing_class):
try:
return (~self).change_ring(R)
except (TypeError, ZeroDivisionError):
Expand Down
14 changes: 7 additions & 7 deletions src/sage/matrix/matrix2.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,8 @@ from sage.structure.element import Vector
from sage.structure.element cimport have_same_parent
from sage.misc.verbose import verbose
from sage.rings.number_field.number_field_base import NumberField
from sage.rings.integer_ring import ZZ, is_IntegerRing
from sage.rings.rational_field import QQ, is_RationalField
from sage.rings.integer_ring import ZZ, IntegerRing_class
from sage.rings.rational_field import QQ, RationalField
import sage.rings.abc
from sage.arith.numerical_approx cimport digits_to_bits

Expand Down Expand Up @@ -4675,11 +4675,11 @@ cdef class Matrix(Matrix1):
algorithm = 'default'
elif algorithm not in ['default', 'generic', 'flint', 'pari', 'padic', 'pluq']:
raise ValueError("matrix kernel algorithm '%s' not recognized" % algorithm)
elif algorithm == 'padic' and not (is_IntegerRing(R) or is_RationalField(R)):
elif algorithm == 'padic' and not (isinstance(R, IntegerRing_class) or isinstance(R, RationalField)):
raise ValueError("'padic' matrix kernel algorithm only available over the rationals and the integers, not over %s" % R)
elif algorithm == 'flint' and not (is_IntegerRing(R) or is_RationalField(R)):
elif algorithm == 'flint' and not (isinstance(R, IntegerRing_class) or isinstance(R, RationalField)):
raise ValueError("'flint' matrix kernel algorithm only available over the rationals and the integers, not over %s" % R)
elif algorithm == 'pari' and not (is_IntegerRing(R) or (isinstance(R, NumberField) and not is_RationalField(R))):
elif algorithm == 'pari' and not (isinstance(R, IntegerRing_class) or (isinstance(R, NumberField) and not isinstance(R, RationalField))):
raise ValueError("'pari' matrix kernel algorithm only available over non-trivial number fields and the integers, not over %s" % R)
elif algorithm == 'generic' and R not in _Fields:
raise ValueError("'generic' matrix kernel algorithm only available over a field, not over %s" % R)
Expand All @@ -4694,7 +4694,7 @@ cdef class Matrix(Matrix1):
raise ValueError("matrix kernel basis format '%s' not recognized" % basis)
elif basis == 'pivot' and R not in _Fields:
raise ValueError('pivot basis only available over a field, not over %s' % R)
elif basis == 'LLL' and not is_IntegerRing(R):
elif basis == 'LLL' and not isinstance(R, IntegerRing_class):
raise ValueError('LLL-reduced basis only available over the integers, not over %s' % R)
if basis == 'default':
basis = 'echelon' if R in _Fields else 'computed'
Expand All @@ -4703,7 +4703,7 @@ cdef class Matrix(Matrix1):
proof = kwds.pop('proof', None)
if proof not in [None, True, False]:
raise ValueError("'proof' must be one of True, False or None, not %s" % proof)
if not (proof is None or is_IntegerRing(R)):
if not (proof is None or isinstance(R, IntegerRing_class)):
raise ValueError("'proof' flag only valid for matrices over the integers")

# We could sanitize/process remaining (un-popped) keywords here and
Expand Down
4 changes: 2 additions & 2 deletions src/sage/matrix/matrix_rational_dense.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ from sage.matrix.args cimport SparseEntry, MatrixArgs_init
from sage.matrix.matrix_integer_dense cimport Matrix_integer_dense, _lift_crt
from sage.structure.element cimport Element, Vector
from sage.rings.integer cimport Integer
from sage.rings.integer_ring import ZZ, is_IntegerRing
from sage.rings.integer_ring import ZZ, IntegerRing_class
import sage.rings.abc
from sage.rings.rational_field import QQ

Expand Down Expand Up @@ -1465,7 +1465,7 @@ cdef class Matrix_rational_dense(Matrix_dense):
if self._is_immutable:
return self
return self.__copy__()
if is_IntegerRing(R):
if isinstance(R, IntegerRing_class):
A, d = self._clear_denom()
if not d.is_one():
raise TypeError("matrix has denominators so can't change to ZZ")
Expand Down
Loading

0 comments on commit 98a2b16

Please sign in to comment.