From 7c32b0e57ac59c43e626d94c7e9dd5de857de34d Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Fri, 22 Oct 2021 14:50:44 -0700 Subject: [PATCH 01/19] src/sage/ext/fast_callable.pyx: Use sage.rings.abc --- src/sage/ext/fast_callable.pyx | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/sage/ext/fast_callable.pyx b/src/sage/ext/fast_callable.pyx index d54d501226c..9a40b7a25e3 100644 --- a/src/sage/ext/fast_callable.pyx +++ b/src/sage/ext/fast_callable.pyx @@ -302,9 +302,7 @@ AUTHOR: import operator from copy import copy -from sage.rings.real_mpfr cimport RealField_class, RealNumber -from sage.rings.complex_mpfr import ComplexField_class -from sage.rings.all import RDF, CDF +import sage.rings.abc from sage.rings.integer import Integer from sage.rings.integer_ring import ZZ from sage.structure.element cimport parent @@ -469,7 +467,7 @@ def fast_callable(x, domain=None, vars=None, etb = ExpressionTreeBuilder(vars=vars, domain=domain) et = x._fast_callable_(etb) - if isinstance(domain, RealField_class): + if isinstance(domain, sage.rings.abc.RealField): import sage.ext.interpreters.wrapper_rr builder = sage.ext.interpreters.wrapper_rr.Wrapper_rr @@ -477,20 +475,20 @@ def fast_callable(x, domain=None, vars=None, len(vars), domain) - elif isinstance(domain, ComplexField_class): + elif isinstance(domain, sage.rings.abc.ComplexField): import sage.ext.interpreters.wrapper_cc builder = sage.ext.interpreters.wrapper_cc.Wrapper_cc str = InstructionStream(sage.ext.interpreters.wrapper_cc.metadata, len(vars), domain) - elif domain == RDF or domain is float: + elif isinstance(domain, sage.rings.abc.RealDoubleField) or domain is float: import sage.ext.interpreters.wrapper_rdf builder = sage.ext.interpreters.wrapper_rdf.Wrapper_rdf str = InstructionStream(sage.ext.interpreters.wrapper_rdf.metadata, len(vars), domain) - elif domain == CDF: + elif isinstance(domain, sage.rings.abc.ComplexDoubleField): import sage.ext.interpreters.wrapper_cdf builder = sage.ext.interpreters.wrapper_cdf.Wrapper_cdf str = InstructionStream(sage.ext.interpreters.wrapper_cdf.metadata, From a3dd5ce69784843b61757633e5631eda913201e0 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Fri, 22 Oct 2021 14:54:46 -0700 Subject: [PATCH 02/19] src/sage/geometry/voronoi_diagram.py: Use sage.rings.abc --- src/sage/geometry/voronoi_diagram.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/sage/geometry/voronoi_diagram.py b/src/sage/geometry/voronoi_diagram.py index 1859a5e0c1a..a60720bf3be 100644 --- a/src/sage/geometry/voronoi_diagram.py +++ b/src/sage/geometry/voronoi_diagram.py @@ -17,8 +17,7 @@ from sage.geometry.polyhedron.constructor import Polyhedron from sage.rings.qqbar import AA from sage.rings.rational_field import QQ -from sage.rings.real_double import RDF -from sage.rings.real_mpfr import RealField_class +import sage.rings.abc from sage.geometry.triangulation.point_configuration import PointConfiguration from sage.modules.free_module_element import vector from sage.plot.all import line, point, rainbow, plot @@ -103,9 +102,10 @@ def __init__(self, points): self._n = self._points.n_points() if not self._n or self._points.base_ring().is_subring(QQ): self._base_ring = QQ - elif self._points.base_ring() in [RDF, AA]: + elif isinstance(self._points.base_ring(), sage.rings.abc.RealDoubleField) or self._points.base_ring() == AA: self._base_ring = self._points.base_ring() - elif isinstance(self._points.base_ring(), RealField_class): + elif isinstance(self._points.base_ring(), sage.rings.abc.RealField): + from sage.rings.real_double import RDF self._base_ring = RDF self._points = PointConfiguration([[RDF(cor) for cor in poi] for poi in self._points]) From 5fe33f8a83d2e6f025e4735dfc53880e021b127d Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Fri, 22 Oct 2021 14:57:59 -0700 Subject: [PATCH 03/19] src/sage/groups/misc_gps/argument_groups.py: Use sage.rings.abc --- src/sage/groups/lie_gps/nilpotent_lie_group.py | 4 ++-- src/sage/groups/misc_gps/argument_groups.py | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/sage/groups/lie_gps/nilpotent_lie_group.py b/src/sage/groups/lie_gps/nilpotent_lie_group.py index 1138454eb80..bc41359b510 100644 --- a/src/sage/groups/lie_gps/nilpotent_lie_group.py +++ b/src/sage/groups/lie_gps/nilpotent_lie_group.py @@ -26,7 +26,7 @@ from sage.misc.cachefunc import cached_method from sage.misc.repr import repr_lincomb from sage.modules.free_module_element import vector -from sage.rings.real_mpfr import RealField_class +import sage.rings.abc from sage.structure.element import MultiplicativeGroupElement from sage.symbolic.ring import SR, var @@ -229,7 +229,7 @@ def __init__(self, L, name, **kwds): R = L.base_ring() category = kwds.pop('category', None) category = LieGroups(R).or_subcategory(category) - if isinstance(R, RealField_class): + if isinstance(R, sage.rings.abc.RealField): structure = RealDifferentialStructure() else: structure = DifferentialStructure() diff --git a/src/sage/groups/misc_gps/argument_groups.py b/src/sage/groups/misc_gps/argument_groups.py index 1cf801fad85..1c81c361294 100644 --- a/src/sage/groups/misc_gps/argument_groups.py +++ b/src/sage/groups/misc_gps/argument_groups.py @@ -46,7 +46,7 @@ from sage.structure.parent import Parent from sage.structure.richcmp import richcmp_by_eq_and_lt from sage.structure.unique_representation import UniqueRepresentation - +import sage.rings.abc class AbstractArgument(MultiplicativeGroupElement): r""" @@ -1870,13 +1870,13 @@ def create_key_and_extra_args(self, if domain is not None: if domain in (ZZ, QQ, AA) \ - or isinstance(domain, (RealField_class, - RealIntervalField_class, - RealBallField)): + or isinstance(domain, (sage.rings.abc.RealField, + sage.rings.abc.RealIntervalField, + sage.rings.abc.RealBallField)): return (SignGroup, ()), kwds - elif isinstance(domain, (ComplexField_class, - ComplexIntervalField_class, - ComplexBallField)): + elif isinstance(domain, (sage.rings.abc.ComplexField, + sage.rings.abc.ComplexIntervalField, + sage.rings.abc.ComplexBallField)): return (UnitCircleGroup, (domain._real_field(),)), kwds else: return (ArgumentByElementGroup, (domain,)), kwds From d7a472b4a605d87fa819b7c7c973e9a9fcad0bff Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Fri, 22 Oct 2021 15:00:15 -0700 Subject: [PATCH 04/19] src/sage/manifolds: Use sage.rings.abc --- src/sage/manifolds/manifold.py | 12 ++++++------ src/sage/manifolds/vector_bundle.py | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/sage/manifolds/manifold.py b/src/sage/manifolds/manifold.py index 1b62341fc84..70250784db8 100644 --- a/src/sage/manifolds/manifold.py +++ b/src/sage/manifolds/manifold.py @@ -328,9 +328,9 @@ from sage.categories.fields import Fields from sage.categories.manifolds import Manifolds from sage.categories.homset import Hom +import sage.rings.abc from sage.rings.all import CC -from sage.rings.real_mpfr import RR, RealField_class -from sage.rings.complex_mpfr import ComplexField_class +from sage.rings.real_mpfr import RR from sage.misc.prandom import getrandbits from sage.misc.cachefunc import cached_method from sage.rings.integer import Integer @@ -545,9 +545,9 @@ def __init__(self, n, name, field, structure, base_manifold=None, if field not in Fields(): raise TypeError("the argument 'field' must be a field") self._field = field - if isinstance(field, RealField_class): + if isinstance(field, sage.rings.abc.RealField): self._field_type = 'real' - elif isinstance(field, ComplexField_class): + elif isinstance(field, sage.rings.abc.ComplexField): self._field_type = 'complex' else: self._field_type = 'neither_real_nor_complex' @@ -2957,7 +2957,7 @@ def Manifold(dim, name, latex_name=None, field='real', structure='smooth', unique_tag = lambda: getrandbits(128)*_manifold_id if structure in ['topological', 'top']: - if field == 'real' or isinstance(field, RealField_class): + if field == 'real' or isinstance(field, sage.rings.abc.RealField): structure = RealTopologicalStructure() else: structure = TopologicalStructure() @@ -2985,7 +2985,7 @@ def Manifold(dim, name, latex_name=None, field='real', structure='smooth', "not compatible with a smooth structure") else: diff_degree = infinity - if field == 'real' or isinstance(field, RealField_class): + if field == 'real' or isinstance(field, sage.rings.abc.RealField): structure = RealDifferentialStructure() else: structure = DifferentialStructure() diff --git a/src/sage/manifolds/vector_bundle.py b/src/sage/manifolds/vector_bundle.py index 42a77c9f87e..49c0b72f1bd 100644 --- a/src/sage/manifolds/vector_bundle.py +++ b/src/sage/manifolds/vector_bundle.py @@ -37,9 +37,9 @@ from sage.structure.category_object import CategoryObject from sage.categories.vector_bundles import VectorBundles from sage.structure.unique_representation import UniqueRepresentation +import sage.rings.abc from sage.rings.all import CC -from sage.rings.real_mpfr import RR, RealField_class -from sage.rings.complex_mpfr import ComplexField_class +from sage.rings.real_mpfr import RR from sage.rings.integer import Integer from sage.manifolds.vector_bundle_fiber import VectorBundleFiber @@ -218,9 +218,9 @@ def __init__(self, rank, name, base_space, field='real', self._field_type = field else: self._field = field - if isinstance(field, RealField_class): + if isinstance(field, sage.rings.abc.RealField): self._field_type = 'real' - elif isinstance(field, ComplexField_class): + elif isinstance(field, sage.rings.abc.ComplexField): self._field_type = 'complex' else: self._field_type = 'neither_real_nor_complex' From 373b2330802f07737a3a0bdb0b7e641485961670 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Fri, 22 Oct 2021 16:59:30 -0700 Subject: [PATCH 05/19] src/sage/matrix/misc.pyx: Use sage.rings.abc --- src/sage/matrix/misc.pyx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sage/matrix/misc.pyx b/src/sage/matrix/misc.pyx index c7fc1c70161..220f8866b0e 100644 --- a/src/sage/matrix/misc.pyx +++ b/src/sage/matrix/misc.pyx @@ -40,7 +40,7 @@ from sage.rings.rational_field import QQ from sage.rings.integer cimport Integer from sage.arith.all import previous_prime, CRT_basis -from sage.rings.real_mpfr cimport RealField_class +cimport sage.rings.abc from sage.rings.real_mpfr cimport RealNumber @@ -510,7 +510,7 @@ def hadamard_row_bound_mpfr(Matrix A): ... OverflowError: cannot convert float infinity to integer """ - if not isinstance(A.base_ring(), RealField_class): + if not isinstance(A.base_ring(), sage.rings.abc.RealField): raise TypeError("A must have base field an mpfr real field.") cdef RealNumber a, b From ec8f8af2b085568c3469bfbf2bbe2ec48c568655 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Fri, 22 Oct 2021 17:01:44 -0700 Subject: [PATCH 06/19] src/sage/quadratic_forms/quadratic_form__split_local_covering.py: Use sage.rings.abc --- .../quadratic_forms/quadratic_form__split_local_covering.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/sage/quadratic_forms/quadratic_form__split_local_covering.py b/src/sage/quadratic_forms/quadratic_form__split_local_covering.py index afd1ee350c3..84164d4fa9f 100644 --- a/src/sage/quadratic_forms/quadratic_form__split_local_covering.py +++ b/src/sage/quadratic_forms/quadratic_form__split_local_covering.py @@ -11,7 +11,8 @@ from sage.quadratic_forms.extras import extend_to_primitive from sage.quadratic_forms.quadratic_form import QuadraticForm__constructor, is_QuadraticForm -from sage.rings.real_mpfr import RealField_class, RealField +import sage.rings.abc +from sage.rings.real_mpfr import RealField from sage.rings.real_double import RDF from sage.matrix.matrix_space import MatrixSpace from sage.matrix.constructor import matrix @@ -84,7 +85,7 @@ def cholesky_decomposition(self, bit_prec = 53): """ ## Check that the precision passed is allowed. - if isinstance(self.base_ring(), RealField_class) and (self.base_ring().prec() < bit_prec): + if isinstance(self.base_ring(), sage.rings.abc.RealField) and (self.base_ring().prec() < bit_prec): raise RuntimeError("Oops! The precision requested is greater than that of the given quadratic form!") ## 1. Initialization From c039cecccde4d6ddf18569ce4b7fca9e2d958fb1 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Fri, 22 Oct 2021 17:06:21 -0700 Subject: [PATCH 07/19] src/sage/rings/asymptotic/growth_group.py: Use sage.rings.abc --- src/sage/rings/asymptotic/growth_group.py | 42 ++++++++--------------- 1 file changed, 15 insertions(+), 27 deletions(-) diff --git a/src/sage/rings/asymptotic/growth_group.py b/src/sage/rings/asymptotic/growth_group.py index 5a0c9265d34..d088e838f67 100644 --- a/src/sage/rings/asymptotic/growth_group.py +++ b/src/sage/rings/asymptotic/growth_group.py @@ -240,6 +240,7 @@ from sage.structure.unique_representation import (CachedRepresentation, UniqueRepresentation) from sage.structure.richcmp import richcmp_by_eq_and_lt +import sage.rings.abc from .misc import WithLocals @@ -3622,13 +3623,12 @@ def _convert_(self, data): from sage.symbolic.ring import SR return self._convert_(SR(data)) - 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_generic import operator - if isinstance(P, SymbolicRing): + if isinstance(P, sage.rings.abc.SymbolicRing): if data.operator() == operator.pow: base, exponent = data.operands() if str(base) == var: @@ -4419,10 +4419,9 @@ def __init__(self, base, *args, **kwds): sage: forget() """ from warnings import warn - from sage.symbolic.ring import SymbolicRing super(ExponentialGrowthGroup, self).__init__(base, *args, **kwds) - if isinstance(base, SymbolicRing) and not self._an_element_base_() > 0: + if isinstance(base, sage.rings.abc.SymbolicRing) and not self._an_element_base_() > 0: warn("When using the Exponential {}, make " "assumptions on the used symbolic elements.\n" "In particular, use something like " @@ -4552,9 +4551,8 @@ def _convert_(self, data): import operator from sage.functions.log import Function_exp from sage.symbolic.operators import mul_vararg - from sage.symbolic.ring import SymbolicRing - if isinstance(P, SymbolicRing): + if isinstance(P, sage.rings.abc.SymbolicRing): op = data.operator() if op == operator.pow: base, exponent = data.operands() @@ -4654,20 +4652,13 @@ def _split_raw_element_(base): (-x, -1) sage: forget() """ - from sage.rings.complex_arb import ComplexBallField - from sage.rings.complex_mpfr import ComplexField_class - from sage.rings.complex_interval_field import ComplexIntervalField_class from sage.rings.integer_ring import ZZ from sage.rings.rational_field import QQ - from sage.rings.real_arb import RealBallField - from sage.rings.real_mpfr import RealField_class - from sage.rings.real_mpfi import RealIntervalField_class from sage.rings.qqbar import AA from sage.structure.element import parent - from sage.symbolic.ring import SymbolicRing P = base.parent() - if isinstance(P, SymbolicRing): + if isinstance(P, sage.rings.abc.SymbolicRing): try: base = base.pyobject() except TypeError: @@ -4675,17 +4666,17 @@ def _split_raw_element_(base): else: P = base.parent() - if P in (ZZ, QQ, AA) or isinstance(P, (SymbolicRing, - RealField_class, - RealIntervalField_class, - RealBallField)): + if P in (ZZ, QQ, AA) or isinstance(P, (sage.rings.abc.SymbolicRing, + sage.rings.abc.RealField, + sage.rings.abc.RealIntervalField, + sage.rings.abc.RealBallField)): if base > 0: return base, None if base < 0: return -base, -1 - elif isinstance(P, (ComplexField_class, - ComplexIntervalField_class, - ComplexBallField)): + elif isinstance(P, (sage.rings.abc.ComplexField, + sage.rings.abc.ComplexIntervalField, + sage.rings.abc.ComplexBallField)): size = abs(base) direction = base / size return size, direction @@ -4847,9 +4838,6 @@ def factory(cls, from sage.categories.cartesian_product import cartesian_product from sage.groups.misc_gps.argument_groups import AbstractArgumentGroup from sage.groups.misc_gps.argument_groups import ArgumentGroup - from sage.rings.complex_arb import ComplexBallField - from sage.rings.complex_mpfr import ComplexField_class - from sage.rings.complex_interval_field import ComplexIntervalField_class from sage.rings.number_field.number_field import NumberField_cyclotomic from sage.rings.qqbar import QQbar, AA @@ -4861,9 +4849,9 @@ def factory(cls, UU = cls._non_growth_group_class_( ArgumentGroup(domain=base), var) groups = (EE, UU) - elif isinstance(base, (ComplexField_class, - ComplexIntervalField_class, - ComplexBallField)): + elif isinstance(base, (sage.rings.abc.ComplexField, + sage.rings.abc.ComplexIntervalField, + sage.rings.abc.ComplexBallField)): EE = cls(base._real_field(), var, **kwds) UU = cls._non_growth_group_class_( ArgumentGroup(exponents=base._real_field()), var) From 034bac71306bc89e6160e71bb5910194e73b6f5a Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Fri, 22 Oct 2021 17:11:07 -0700 Subject: [PATCH 08/19] src/sage/rings/complex_double.pyx: Use sage.rings.abc --- src/sage/rings/complex_double.pyx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/sage/rings/complex_double.pyx b/src/sage/rings/complex_double.pyx index 9038f2dd14f..691eade3ea4 100644 --- a/src/sage/rings/complex_double.pyx +++ b/src/sage/rings/complex_double.pyx @@ -82,6 +82,7 @@ cdef extern from "": double complex csqrt(double complex) double cabs(double complex) +import sage.rings.abc cimport sage.rings.ring cimport sage.rings.integer @@ -436,11 +437,10 @@ cdef class ComplexDoubleField_class(sage.rings.abc.ComplexDoubleField): return FloatToCDF(S) from .rational_field import QQ from .real_lazy import RLF - from .real_mpfr import RR, RealField_class - from .complex_mpfr import ComplexField_class + from .real_mpfr import RR if S is ZZ or S is QQ or S is RDF or S is RLF: return FloatToCDF(S) - if isinstance(S, RealField_class): + if isinstance(S, sage.rings.abc.RealField): if S.prec() >= 53: return FloatToCDF(S) else: @@ -455,7 +455,7 @@ cdef class ComplexDoubleField_class(sage.rings.abc.ComplexDoubleField): return None elif RR.has_coerce_map_from(S): return FloatToCDF(RR) * RR._internal_coerce_map_from(S) - elif isinstance(S, ComplexField_class) and S.prec() >= 53: + elif isinstance(S, sage.rings.abc.ComplexField) and S.prec() >= 53: return complex_mpfr.CCtoCDF(S, self) elif CC.has_coerce_map_from(S): return complex_mpfr.CCtoCDF(CC, self) * CC._internal_coerce_map_from(S) From f3dd7cc0eaae1719d9be830fec93075baa7962fc Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Fri, 22 Oct 2021 17:14:26 -0700 Subject: [PATCH 09/19] src/sage/rings/polynomial/multi_polynomial_ideal.py: Use sage.rings.abc --- src/sage/rings/polynomial/multi_polynomial_ideal.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/sage/rings/polynomial/multi_polynomial_ideal.py b/src/sage/rings/polynomial/multi_polynomial_ideal.py index 560dcc8c25d..d12c0ff5331 100644 --- a/src/sage/rings/polynomial/multi_polynomial_ideal.py +++ b/src/sage/rings/polynomial/multi_polynomial_ideal.py @@ -2573,8 +2573,7 @@ def _variety(T, V, v=None): if d == -1: return [] - import sage.rings.complex_mpfr as CCmod - if isinstance(self.base_ring(), CCmod.ComplexField_class): + if isinstance(self.base_ring(), sage.rings.abc.ComplexField): verbose("Warning: computations in the complex field are inexact; variety may be computed partially or incorrectly.", level=0) P = self.ring() if ring is not None: From 6dce213c91101dda546db134bff73a3282c4385b Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Fri, 22 Oct 2021 17:16:38 -0700 Subject: [PATCH 10/19] src/sage/schemes/projective/projective_morphism.py: Use sage.rings.abc --- src/sage/schemes/projective/projective_morphism.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/sage/schemes/projective/projective_morphism.py b/src/sage/schemes/projective/projective_morphism.py index 1aa7ea7f841..62f505b099f 100644 --- a/src/sage/schemes/projective/projective_morphism.py +++ b/src/sage/schemes/projective/projective_morphism.py @@ -74,6 +74,7 @@ from sage.calculus.functions import jacobian +import sage.rings.abc from sage.rings.all import Integer from sage.rings.algebraic_closure_finite_field import AlgebraicClosureFiniteField_generic from sage.rings.complex_mpfr import ComplexField_class @@ -1605,7 +1606,8 @@ def rational_preimages(self, Q, k=1): raise TypeError("must be an endomorphism of projective space") if not Q in self.codomain(): raise TypeError("point must be in codomain of self") - if isinstance(BR.base_ring(),(ComplexField_class, RealField_class,RealIntervalField_class, ComplexIntervalField_class)): + if isinstance(BR.base_ring(), (sage.rings.abc.ComplexField, sage.rings.abc.RealField, + sage.rings.abc.RealIntervalField, sage.rings.abc.ComplexIntervalField)): raise NotImplementedError("not implemented over precision fields") PS = self.domain().ambient_space() N = PS.dimension_relative() From 7e8f0bb9aaa88d5d73b20e671e262c9320f1f5a6 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Fri, 22 Oct 2021 17:18:00 -0700 Subject: [PATCH 11/19] src/sage/rings/real_double.pyx: Use sage.rings.abc --- src/sage/rings/real_double.pyx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sage/rings/real_double.pyx b/src/sage/rings/real_double.pyx index 405153db6b9..9fc00418b7d 100644 --- a/src/sage/rings/real_double.pyx +++ b/src/sage/rings/real_double.pyx @@ -360,8 +360,7 @@ cdef class RealDoubleField_class(sage.rings.abc.RealDoubleField): if S is ZZ or S is QQ or S is RLF: return ToRDF(S) - from .real_mpfr import RR, RealField_class - if isinstance(S, RealField_class): + if isinstance(S, sage.rings.abc.RealField): if S.prec() >= 53: return ToRDF(S) else: @@ -373,6 +372,7 @@ cdef class RealDoubleField_class(sage.rings.abc.RealDoubleField): else: return None + from .real_mpfr import RR connecting = RR._internal_coerce_map_from(S) if connecting is not None: return ToRDF(RR) * connecting From fbf6666479e7a54761459288af9b5d1772158934 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Fri, 22 Oct 2021 17:30:13 -0700 Subject: [PATCH 12/19] src/sage/rings/continued_fraction.py: Use sage.rings.abc --- src/sage/rings/continued_fraction.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/sage/rings/continued_fraction.py b/src/sage/rings/continued_fraction.py index cf5f8b1f9eb..ebe687da65f 100644 --- a/src/sage/rings/continued_fraction.py +++ b/src/sage/rings/continued_fraction.py @@ -2451,12 +2451,11 @@ def continued_fraction_list(x, type="std", partial_convergents=False, cf = None - from sage.rings.real_arb import RealBallField - from sage.rings.real_mpfi import RealIntervalField, RealIntervalField_class from sage.rings.real_mpfr import RealLiteral if isinstance(x, RealLiteral): + from sage.rings.real_mpfi import RealIntervalField x = RealIntervalField(x.prec())(x) - if isinstance(x.parent(), (RealIntervalField_class, RealBallField)): + if isinstance(x.parent(), (sage.rings.abc.RealIntervalField, sage.rings.abc.RealBallField)): cf = continued_fraction(rat_interval_cf_list( x.lower().exact_rational(), x.upper().exact_rational())) @@ -2658,8 +2657,8 @@ def continued_fraction(x, value=None): except AttributeError: pass - from .real_mpfi import RealIntervalField if is_real is False: + from .real_mpfi import RealIntervalField # we cannot rely on the answer of .is_real() for elements of the # symbolic ring. The thing below is a dirty temporary hack. RIF = RealIntervalField(53) From 9f17894b3cbb88ba2372f6192aca277b3c9d0706 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Fri, 22 Oct 2021 17:30:38 -0700 Subject: [PATCH 13/19] src/sage/matrix/matrix_space.py: Use sage.rings.abc --- src/sage/matrix/matrix_space.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/sage/matrix/matrix_space.py b/src/sage/matrix/matrix_space.py index 99e57196f3f..2b90c3cba19 100644 --- a/src/sage/matrix/matrix_space.py +++ b/src/sage/matrix/matrix_space.py @@ -252,8 +252,7 @@ def get_matrix_class(R, nrows, ncols, sparse, implementation): from . import matrix_symbolic_dense return matrix_symbolic_dense.Matrix_symbolic_dense - from sage.rings.complex_arb import ComplexBallField - if isinstance(R, ComplexBallField): + if isinstance(R, sage.rings.abc.ComplexBallField): from . import matrix_complex_ball_dense return matrix_complex_ball_dense.Matrix_complex_ball_dense From 2dd97ba6475ca39128fbba35be268f7598a70d41 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Fri, 22 Oct 2021 17:31:13 -0700 Subject: [PATCH 14/19] src/sage/rings/asymptotic/asymptotic_ring.py: Use sage.rings.abc --- src/sage/rings/asymptotic/asymptotic_ring.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sage/rings/asymptotic/asymptotic_ring.py b/src/sage/rings/asymptotic/asymptotic_ring.py index f7e3d0c235e..86bc4740a73 100644 --- a/src/sage/rings/asymptotic/asymptotic_ring.py +++ b/src/sage/rings/asymptotic/asymptotic_ring.py @@ -418,6 +418,7 @@ from sage.structure.element import CommutativeAlgebraElement from sage.structure.unique_representation import UniqueRepresentation from sage.misc.defaults import series_precision +import sage.rings.abc from sage.rings.all import RIF from .misc import WithLocals @@ -2964,8 +2965,7 @@ def plot_comparison(self, variable, function, values, rescaled=True, points = self.compare_with_values(variable, function, values, rescaled=rescaled, ring=ring) - from sage.rings.real_mpfi import RealIntervalField_class - if isinstance(ring, RealIntervalField_class): + if isinstance(ring, sage.rings.abc.RealIntervalField): if not all(p[1].relative_diameter() <= relative_tolerance for p in points): raise ValueError('Numerical noise is too high, the ' 'comparison is inaccurate') From 41b7860659543b8de40d90d97b3f1794218ccd05 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Fri, 22 Oct 2021 17:33:06 -0700 Subject: [PATCH 15/19] src/sage/rings/convert/mpfi.pyx: Use sage.rings.abc --- src/sage/rings/convert/mpfi.pyx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sage/rings/convert/mpfi.pyx b/src/sage/rings/convert/mpfi.pyx index a7d1561ec09..67ccbefdb7e 100644 --- a/src/sage/rings/convert/mpfi.pyx +++ b/src/sage/rings/convert/mpfi.pyx @@ -20,10 +20,10 @@ from sage.libs.mpfi cimport * from sage.arith.long cimport integer_check_long from sage.cpython.string cimport bytes_to_str from sage.structure.element cimport Element, parent +import sage.rings.abc from ..integer cimport Integer from ..rational cimport Rational from ..real_mpfi cimport RealIntervalFieldElement, RealIntervalField_class -from ..complex_interval_field import ComplexIntervalField_class from ..real_mpfr cimport RealNumber from ..real_double cimport RealDoubleElement from ..complex_mpfr cimport ComplexNumber @@ -188,7 +188,7 @@ cdef int mpfi_set_sage(mpfi_ptr re, mpfi_ptr im, x, field, int base) except -1: except AttributeError: pass else: - if not isinstance(field, ComplexIntervalField_class): + if not isinstance(field, sage.rings.abc.ComplexIntervalField): field = field.complex_field() e = m(field) mpfi_swap(re, e.__re) From 5d2e72c12c240ada6dc0658702d3d28a6e9296a0 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Fri, 22 Oct 2021 17:34:50 -0700 Subject: [PATCH 16/19] src/sage/rings/infinity.py: Use sage.rings.abc --- src/sage/rings/infinity.py | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/sage/rings/infinity.py b/src/sage/rings/infinity.py index dfa0b9b6423..6bbacbe31e9 100644 --- a/src/sage/rings/infinity.py +++ b/src/sage/rings/infinity.py @@ -220,6 +220,7 @@ from sage.structure.element import RingElement, InfinityElement from sage.structure.richcmp import rich_to_bool, richcmp from sage.misc.fast_methods import Singleton +import sage.rings.abc import sage.rings.integer import sage.rings.rational @@ -1261,15 +1262,8 @@ def _coerce_map_from_(self, R): from sage.structure.coerce import parent_is_real_numerical if parent_is_real_numerical(R): return True - from sage.rings.real_mpfi import RealIntervalField_class - if isinstance(R, RealIntervalField_class): + if isinstance(R, (sage.rings.abc.RealIntervalField, sage.rings.abc.RealBallField)): return True - try: - from sage.rings.real_arb import RealBallField - if isinstance(R, RealBallField): - return True - except ImportError: - pass return False def _pushout_(self, other): From a66552906a62ad9e4836092da2cf7be65f6d7eac Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Fri, 22 Oct 2021 17:37:41 -0700 Subject: [PATCH 17/19] src/sage/rings/polynomial/polynomial_ring.py: Use sage.rings.abc --- src/sage/rings/polynomial/polynomial_ring.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sage/rings/polynomial/polynomial_ring.py b/src/sage/rings/polynomial/polynomial_ring.py index 82ff837a2b5..8616e5626ea 100644 --- a/src/sage/rings/polynomial/polynomial_ring.py +++ b/src/sage/rings/polynomial/polynomial_ring.py @@ -1997,7 +1997,7 @@ def __init__(self, base_ring, name="x", sparse=False, element_class=None, catego element_class = Polynomial_relative_number_field_dense elif isinstance(base_ring, sage.rings.abc.RealField): element_class = PolynomialRealDense - elif isinstance(base_ring, sage.rings.complex_arb.ComplexBallField): + elif isinstance(base_ring, sage.rings.abc.ComplexBallField): from sage.rings.polynomial.polynomial_complex_arb import Polynomial_complex_arb element_class = Polynomial_complex_arb else: From c8b9aaf25d92aad524586d19e1af3ac51c15f680 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Fri, 22 Oct 2021 17:44:28 -0700 Subject: [PATCH 18/19] src/sage/ext/fast_callable.pyx: Fix up imports --- src/sage/ext/fast_callable.pyx | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/sage/ext/fast_callable.pyx b/src/sage/ext/fast_callable.pyx index 9a40b7a25e3..9e3f206ead8 100644 --- a/src/sage/ext/fast_callable.pyx +++ b/src/sage/ext/fast_callable.pyx @@ -468,40 +468,33 @@ def fast_callable(x, domain=None, vars=None, et = x._fast_callable_(etb) if isinstance(domain, sage.rings.abc.RealField): - import sage.ext.interpreters.wrapper_rr - builder = sage.ext.interpreters.wrapper_rr.Wrapper_rr - + from sage.ext.interpreters.wrapper_rr import Wrapper_rr as builder str = InstructionStream(sage.ext.interpreters.wrapper_rr.metadata, len(vars), domain) elif isinstance(domain, sage.rings.abc.ComplexField): - import sage.ext.interpreters.wrapper_cc - builder = sage.ext.interpreters.wrapper_cc.Wrapper_cc + from sage.ext.interpreters.wrapper_cc import Wrapper_cc as builder str = InstructionStream(sage.ext.interpreters.wrapper_cc.metadata, len(vars), domain) elif isinstance(domain, sage.rings.abc.RealDoubleField) or domain is float: - import sage.ext.interpreters.wrapper_rdf - builder = sage.ext.interpreters.wrapper_rdf.Wrapper_rdf + from sage.ext.interpreters.wrapper_rdf import Wrapper_rdf as builder str = InstructionStream(sage.ext.interpreters.wrapper_rdf.metadata, len(vars), domain) elif isinstance(domain, sage.rings.abc.ComplexDoubleField): - import sage.ext.interpreters.wrapper_cdf - builder = sage.ext.interpreters.wrapper_cdf.Wrapper_cdf + from sage.ext.interpreters.wrapper_cdf import Wrapper_cdf as builder str = InstructionStream(sage.ext.interpreters.wrapper_cdf.metadata, len(vars), domain) elif domain is None: - import sage.ext.interpreters.wrapper_py - builder = sage.ext.interpreters.wrapper_py.Wrapper_py + from sage.ext.interpreters.wrapper_py import Wrapper_py as builder str = InstructionStream(sage.ext.interpreters.wrapper_py.metadata, len(vars)) else: - import sage.ext.interpreters.wrapper_el - builder = sage.ext.interpreters.wrapper_el.Wrapper_el + from sage.ext.interpreters.wrapper_el import Wrapper_el as builder str = InstructionStream(sage.ext.interpreters.wrapper_el.metadata, len(vars), domain) From 8c38baf7f95b27b95a29feaf291c0e526d7a1378 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Fri, 22 Oct 2021 17:54:57 -0700 Subject: [PATCH 19/19] src/sage/rings/continued_fraction.py: Add missing import --- src/sage/rings/continued_fraction.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/sage/rings/continued_fraction.py b/src/sage/rings/continued_fraction.py index ebe687da65f..94e5ecf25e0 100644 --- a/src/sage/rings/continued_fraction.py +++ b/src/sage/rings/continued_fraction.py @@ -207,6 +207,7 @@ from sage.structure.sage_object import SageObject from sage.structure.richcmp import richcmp_method, rich_to_bool +import sage.rings.abc from .integer import Integer from .integer_ring import ZZ from .infinity import Infinity