diff --git a/src/sage/categories/schemes.py b/src/sage/categories/schemes.py index b8f117c0da1..68187fa2257 100644 --- a/src/sage/categories/schemes.py +++ b/src/sage/categories/schemes.py @@ -24,6 +24,11 @@ from sage.categories.fields import Fields from sage.categories.homsets import HomsetsCategory from sage.misc.abstract_method import abstract_method +from sage.misc.lazy_import import lazy_import + +lazy_import('sage.categories.map', 'Map') +lazy_import('sage.schemes.generic.morphism', 'SchemeMorphism') +lazy_import('sage.schemes.generic.scheme', 'Scheme') class Schemes(Category): @@ -139,15 +144,10 @@ def _call_(self, x): From: Integer Ring To: Rational Field """ - from sage.schemes.generic.scheme import Scheme - if isinstance(x, Scheme): - return x - from sage.schemes.generic.morphism import is_SchemeMorphism - if is_SchemeMorphism(x): + if isinstance(x, (SchemeMorphism, Scheme)): return x from sage.categories.commutative_rings import CommutativeRings from sage.schemes.generic.spec import Spec - from sage.categories.map import Map if x in CommutativeRings(): return Spec(x) elif isinstance(x, Map) and x.category_for().is_subcategory(Rings()): diff --git a/src/sage/schemes/affine/affine_point.py b/src/sage/schemes/affine/affine_point.py index 385e4259926..eb13ba7c2cd 100755 --- a/src/sage/schemes/affine/affine_point.py +++ b/src/sage/schemes/affine/affine_point.py @@ -22,8 +22,9 @@ # **************************************************************************** from sage.categories.number_fields import NumberFields +from sage.misc.lazy_import import lazy_import from sage.rings.integer_ring import ZZ -from sage.schemes.generic.morphism import SchemeMorphism_point, SchemeMorphism, is_SchemeMorphism +from sage.schemes.generic.morphism import SchemeMorphism_point, SchemeMorphism from sage.structure.sequence import Sequence _NumberFields = NumberFields() @@ -69,7 +70,7 @@ def __init__(self, X, v, check=True): SchemeMorphism.__init__(self, X) if check: from sage.categories.commutative_rings import CommutativeRings - if is_SchemeMorphism(v): + if isinstance(v, SchemeMorphism): v = list(v) else: try: diff --git a/src/sage/schemes/elliptic_curves/ell_point.py b/src/sage/schemes/elliptic_curves/ell_point.py index 9cc2c1234a3..1c0ee6353da 100755 --- a/src/sage/schemes/elliptic_curves/ell_point.py +++ b/src/sage/schemes/elliptic_curves/ell_point.py @@ -130,7 +130,6 @@ from sage.rings.real_mpfr import RealField, RR from sage.schemes.curves.projective_curve import Hasse_bounds from sage.schemes.elliptic_curves.constructor import EllipticCurve -from sage.schemes.generic.morphism import is_SchemeMorphism from sage.schemes.projective.projective_point import (SchemeMorphism_point_projective_ring, SchemeMorphism_point_abelian_variety_field) from sage.structure.coerce_actions import IntegerMulAction @@ -139,6 +138,7 @@ from sage.structure.sequence import Sequence lazy_import('sage.rings.padics.factory', 'Qp') +lazy_import('sage.schemes.generic.morphism', 'SchemeMorphism') try: from sage.libs.pari.all import pari, PariError @@ -175,7 +175,8 @@ def curve(self): sage: K. = NumberField(x^2 - 3,'a') # needs sage.rings.number_field sage: P = E.base_extend(K)(1, a) # needs sage.rings.number_field sage: P.scheme() # needs sage.rings.number_field - Elliptic Curve defined by y^2 = x^3 + x + 1 over Number Field in a with defining polynomial x^2 - 3 + Elliptic Curve defined by y^2 = x^3 + x + 1 over + Number Field in a with defining polynomial x^2 - 3 """ return self.scheme() @@ -290,7 +291,7 @@ def __init__(self, curve, v, check=True): """ point_homset = curve.point_homset() R = point_homset.value_ring() - if is_SchemeMorphism(v) or isinstance(v, EllipticCurvePoint_field): + if isinstance(v, SchemeMorphism): v = list(v) elif v == 0: v = (R.zero(), R.one(), R.zero()) diff --git a/src/sage/schemes/generic/divisor.py b/src/sage/schemes/generic/divisor.py index 2f1990484e9..441efbf36e7 100755 --- a/src/sage/schemes/generic/divisor.py +++ b/src/sage/schemes/generic/divisor.py @@ -42,14 +42,15 @@ #******************************************************************************* from sage.misc.latex import latex +from sage.misc.lazy_import import lazy_import from sage.misc.repr import repr_lincomb from sage.misc.search import search from sage.rings.integer_ring import ZZ -from sage.structure.formal_sum import FormalSum - -from .morphism import is_SchemeMorphism from sage.schemes.affine.affine_space import AffineSpace_generic from sage.schemes.projective.projective_space import ProjectiveSpace_ring +from sage.structure.formal_sum import FormalSum + +lazy_import('sage.schemes.generic.morphism', 'SchemeMorphism') def CurvePointToIdeal(C,P): @@ -356,7 +357,7 @@ def __init__(self, v, parent=None, check=True, reduce=True): else: n = ZZ(1) I = t - if is_SchemeMorphism(I): + if isinstance(I, SchemeMorphism): I = CurvePointToIdeal(C,I) else: know_points = False diff --git a/src/sage/schemes/generic/glue.py b/src/sage/schemes/generic/glue.py index 122801561e6..72171a57cb5 100755 --- a/src/sage/schemes/generic/glue.py +++ b/src/sage/schemes/generic/glue.py @@ -8,10 +8,13 @@ # http://www.gnu.org/licenses/ #******************************************************************************* -from . import morphism -from . import scheme +from sage.misc.lazy_import import lazy_import +from sage.schemes.generic.scheme import Scheme -class GluedScheme(scheme.Scheme): +lazy_import('sage.schemes.generic.morphism', 'SchemeMorphism') + + +class GluedScheme(Scheme): r""" INPUT: @@ -44,9 +47,9 @@ class GluedScheme(scheme.Scheme): """ def __init__(self, f, g, check=True): if check: - if not morphism.is_SchemeMorphism(f): + if not isinstance(f, SchemeMorphism): raise TypeError("f (=%s) must be a scheme morphism" % f) - if not morphism.is_SchemeMorphism(g): + if not isinstance(g, SchemeMorphism): raise TypeError("g (=%s) must be a scheme morphism" % g) if f.domain() != g.domain(): raise ValueError("f (=%s) and g (=%s) must have the same domain" % (f,g)) diff --git a/src/sage/schemes/generic/morphism.py b/src/sage/schemes/generic/morphism.py index cc5475bf38a..56bfb8da197 100755 --- a/src/sage/schemes/generic/morphism.py +++ b/src/sage/schemes/generic/morphism.py @@ -74,20 +74,20 @@ # https://www.gnu.org/licenses/ # **************************************************************************** - import operator -from sage.structure.element import Element, parent, coercion_model + from sage.arith.power import generic_power -from sage.structure.richcmp import richcmp -from sage.structure.sequence import Sequence from sage.categories.homset import Homset, Hom, End -from sage.rings.fraction_field_element import FractionFieldElement -from sage.rings.fraction_field import FractionField_generic from sage.categories.map import FormalCompositeMap, Map +from sage.categories.morphism import SetMorphism from sage.misc.constant_function import ConstantFunction from sage.misc.lazy_attribute import lazy_attribute -from sage.categories.morphism import SetMorphism +from sage.rings.fraction_field import FractionField_generic +from sage.rings.fraction_field_element import FractionFieldElement from sage.schemes.generic.algebraic_scheme import AlgebraicScheme_subscheme +from sage.structure.element import Element, parent, coercion_model +from sage.structure.richcmp import richcmp +from sage.structure.sequence import Sequence def is_SchemeMorphism(f): @@ -111,13 +111,17 @@ def is_SchemeMorphism(f): Defn: Defined on coordinates by sending (x, y) to (y, x^2 + y) sage: from sage.schemes.generic.morphism import is_SchemeMorphism sage: is_SchemeMorphism(f) + doctest:warning... + DeprecationWarning: The function is_SchemeMorphism is deprecated; + use 'isinstance(..., SchemeMorphism)' instead. + See https://github.com/sagemath/sage/issues/38296 for details. True """ - try: - from sage.schemes.elliptic_curves.ell_point import EllipticCurvePoint_field - except ImportError: - EllipticCurvePoint_field = () - return isinstance(f, (SchemeMorphism, EllipticCurvePoint_field)) + from sage.misc.superseded import deprecation + deprecation(38296, + "The function is_SchemeMorphism is deprecated; " + "use 'isinstance(..., SchemeMorphism)' instead.") + return isinstance(f, SchemeMorphism) class SchemeMorphism(Element): diff --git a/src/sage/schemes/generic/point.py b/src/sage/schemes/generic/point.py index 43857cc5b3e..4bd18c39a5d 100755 --- a/src/sage/schemes/generic/point.py +++ b/src/sage/schemes/generic/point.py @@ -73,6 +73,10 @@ def _repr_(self): ######################################################## def is_SchemeTopologicalPoint(x): + from sage.misc.superseded import deprecation + deprecation(38296, + "The function is_SchemeTopologicalPoint is deprecated; " + "use 'isinstance(..., SchemeTopologicalPoint)' instead.") return isinstance(x, SchemeTopologicalPoint) class SchemeTopologicalPoint(SchemePoint): diff --git a/src/sage/schemes/generic/scheme.py b/src/sage/schemes/generic/scheme.py index 4d2468893a6..5cae30dae3a 100755 --- a/src/sage/schemes/generic/scheme.py +++ b/src/sage/schemes/generic/scheme.py @@ -19,15 +19,16 @@ # https://www.gnu.org/licenses/ # **************************************************************************** -from sage.structure.parent import Parent +from sage.categories.commutative_rings import CommutativeRings from sage.misc.cachefunc import cached_method from sage.misc.lazy_import import lazy_import -from sage.rings.integer_ring import ZZ -from sage.categories.commutative_rings import CommutativeRings from sage.rings.ideal import Ideal_generic -from sage.structure.unique_representation import UniqueRepresentation +from sage.rings.integer_ring import ZZ from sage.schemes.generic.point import SchemeTopologicalPoint_prime_ideal +from sage.structure.parent import Parent +from sage.structure.unique_representation import UniqueRepresentation +lazy_import('sage.schemes.generic.morphism', 'SchemeMorphism') lazy_import('sage.schemes.elliptic_curves.ell_generic', 'EllipticCurve_generic', as_='EllipticCurve') @@ -104,7 +105,6 @@ def __init__(self, X=None, category=None): sage: X = Spec(RmodI) sage: TestSuite(X).run() # needs sage.libs.singular """ - from sage.schemes.generic.morphism import is_SchemeMorphism from sage.categories.map import Map from sage.categories.rings import Rings @@ -112,7 +112,7 @@ def __init__(self, X=None, category=None): self._base_ring = ZZ elif isinstance(X, Scheme): self._base_scheme = X - elif is_SchemeMorphism(X): + elif isinstance(X, SchemeMorphism): self._base_morphism = X elif X in CommutativeRings(): self._base_ring = X diff --git a/src/sage/schemes/hyperelliptic_curves/jacobian_homset.py b/src/sage/schemes/hyperelliptic_curves/jacobian_homset.py index 2a192248180..29c98369259 100644 --- a/src/sage/schemes/hyperelliptic_curves/jacobian_homset.py +++ b/src/sage/schemes/hyperelliptic_curves/jacobian_homset.py @@ -42,14 +42,15 @@ # https://www.gnu.org/licenses/ # **************************************************************************** -from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing -from sage.rings.integer_ring import ZZ +from sage.misc.lazy_import import lazy_import from sage.rings.integer import Integer +from sage.rings.integer_ring import ZZ from sage.rings.polynomial.polynomial_element import Polynomial - +from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.schemes.generic.homset import SchemeHomset_points -from sage.schemes.generic.morphism import is_SchemeMorphism -from .jacobian_morphism import JacobianMorphism_divisor_class_field +from sage.schemes.hyperelliptic_curves.jacobian_morphism import JacobianMorphism_divisor_class_field + +lazy_import('sage.schemes.generic.morphism', 'SchemeMorphism') class JacobianHomset_divisor_classes(SchemeHomset_points): @@ -139,12 +140,12 @@ def __call__(self, P): return JacobianMorphism_divisor_class_field(self, (P1, P2)) if isinstance(P1, Polynomial) and isinstance(P2, Polynomial): return JacobianMorphism_divisor_class_field(self, tuple(P)) - if is_SchemeMorphism(P1) and is_SchemeMorphism(P2): + if isinstance(P1, SchemeMorphism) and isinstance(P2, SchemeMorphism): return self(P1) - self(P2) raise TypeError("argument P (= %s) must have length 2" % P) elif isinstance(P, JacobianMorphism_divisor_class_field) and self == P.parent(): return P - elif is_SchemeMorphism(P): + elif isinstance(P, SchemeMorphism): x0 = P[0] y0 = P[1] R, x = PolynomialRing(self.value_ring(), 'x').objgen() diff --git a/src/sage/schemes/projective/projective_point.py b/src/sage/schemes/projective/projective_point.py index c154b8e7d49..e0227a42ce7 100755 --- a/src/sage/schemes/projective/projective_point.py +++ b/src/sage/schemes/projective/projective_point.py @@ -41,14 +41,12 @@ from sage.rings.rational_field import QQ from sage.rings.ring import CommutativeRing from sage.schemes.generic.morphism import (SchemeMorphism, - is_SchemeMorphism, SchemeMorphism_point) from sage.structure.element import AdditiveGroupElement from sage.structure.richcmp import richcmp, op_EQ, op_NE from sage.structure.sequence import Sequence lazy_import('sage.rings.qqbar', 'number_field_elements_from_algebraics') -lazy_import('sage.schemes.elliptic_curves.ell_point', 'EllipticCurvePoint_field') _NumberFields = NumberFields() @@ -165,7 +163,7 @@ def __init__(self, X, v, check=True): if check: d = X.codomain().ambient_space().ngens() - if is_SchemeMorphism(v) or isinstance(v, EllipticCurvePoint_field): + if isinstance(v, SchemeMorphism): v = list(v) else: try: @@ -1131,7 +1129,7 @@ def __init__(self, X, v, check=True): if check: d = X.codomain().ambient_space().ngens() - if is_SchemeMorphism(v) or isinstance(v, EllipticCurvePoint_field): + if isinstance(v, SchemeMorphism): v = list(v) else: try: diff --git a/src/sage/schemes/toric/morphism.py b/src/sage/schemes/toric/morphism.py index c73282cabe0..f226aa61790 100755 --- a/src/sage/schemes/toric/morphism.py +++ b/src/sage/schemes/toric/morphism.py @@ -362,9 +362,7 @@ # the toric varieties level from Morphism. See # https://groups.google.com/d/msg/sage-devel/qF4yU6Vdmao/wQlNrneSmWAJ from sage.categories.morphism import Morphism - from sage.structure.richcmp import richcmp_not_equal, richcmp - from sage.structure.sequence import Sequence from sage.rings.integer_ring import ZZ from sage.arith.misc import GCD as gcd @@ -376,7 +374,6 @@ from sage.schemes.generic.scheme import Scheme from sage.schemes.generic.morphism import ( - is_SchemeMorphism, SchemeMorphism, SchemeMorphism_point, SchemeMorphism_polynomial ) @@ -431,7 +428,7 @@ def __init__(self, X, coordinates, check=True): if check: # Verify that there are the right number of coords # Why is it not done in the parent? - if is_SchemeMorphism(coordinates): + if isinstance(coordinates, SchemeMorphism): coordinates = list(coordinates) if not isinstance(coordinates, (list, tuple)): raise TypeError("coordinates must be a scheme point, list, "