From 7548d20aa4cebdf98c0f9feaa66960c3ba8b9caf Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Sat, 22 Jun 2024 13:03:34 -0700 Subject: [PATCH 01/11] sage.schemes: Modularization fixes (imports) --- src/sage/schemes/affine/affine_homset.py | 6 ++-- src/sage/schemes/affine/affine_morphism.py | 5 +-- src/sage/schemes/affine/affine_point.py | 2 +- src/sage/schemes/affine/affine_subscheme.py | 7 ++-- .../schemes/berkovich/berkovich_cp_element.py | 18 +++++----- src/sage/schemes/berkovich/berkovich_space.py | 15 ++++++-- src/sage/schemes/curves/affine_curve.py | 21 +++++------ src/sage/schemes/curves/projective_curve.py | 25 ++++++------- src/sage/schemes/curves/zariski_vankampen.py | 7 ++-- .../cyclic_covers/charpoly_frobenius.py | 3 +- .../cyclic_covers/cycliccover_finite_field.py | 21 +++++------ src/sage/schemes/elliptic_curves/BSD.py | 8 +++-- src/sage/schemes/elliptic_curves/cm.py | 3 +- .../elliptic_curves/ell_curve_isogeny.py | 5 ++- .../schemes/elliptic_curves/ell_generic.py | 2 +- src/sage/schemes/elliptic_curves/ell_point.py | 10 +++--- .../elliptic_curves/ell_rational_field.py | 7 ++-- .../schemes/elliptic_curves/ell_tate_curve.py | 17 ++++----- .../elliptic_curves/gal_reps_number_field.py | 4 ++- src/sage/schemes/elliptic_curves/heegner.py | 28 +++++++-------- src/sage/schemes/elliptic_curves/height.py | 9 ++--- .../schemes/elliptic_curves/lseries_ell.py | 5 +-- .../schemes/elliptic_curves/padic_lseries.py | 8 +++-- src/sage/schemes/elliptic_curves/padics.py | 25 ++++++------- .../schemes/elliptic_curves/period_lattice.py | 15 ++++---- src/sage/schemes/elliptic_curves/sha_tate.py | 10 ++++-- src/sage/schemes/generic/algebraic_scheme.py | 17 ++++----- src/sage/schemes/generic/divisor_group.py | 4 ++- src/sage/schemes/generic/morphism.py | 5 ++- src/sage/schemes/generic/scheme.py | 3 ++ .../hyperelliptic_curves/constructor.py | 3 +- .../hyperelliptic_finite_field.py | 6 ++-- .../hyperelliptic_generic.py | 3 +- .../hyperelliptic_padic_field.py | 24 ++++++------- .../hyperelliptic_rational_field.py | 5 +-- .../jacobian_endomorphism_utils.py | 3 +- .../hyperelliptic_curves/monsky_washnitzer.py | 8 +++-- .../plane_conics/con_rational_field.py | 22 ++++++------ .../schemes/projective/proj_bdd_height.py | 21 +++++------ .../schemes/projective/projective_homset.py | 17 ++++----- .../schemes/projective/projective_morphism.py | 27 +++++++------- .../schemes/projective/projective_point.py | 34 +++++++++--------- .../projective/projective_rational_point.py | 12 ++++--- .../schemes/projective/projective_space.py | 35 +++++++++---------- .../projective/projective_subscheme.py | 22 ++++++------ .../riemann_surfaces/riemann_surface.py | 3 +- src/sage/schemes/toric/divisor.py | 4 ++- src/sage/schemes/toric/toric_subscheme.py | 3 +- src/sage/schemes/toric/variety.py | 5 ++- 49 files changed, 314 insertions(+), 258 deletions(-) diff --git a/src/sage/schemes/affine/affine_homset.py b/src/sage/schemes/affine/affine_homset.py index f90bcfffec1..9fcf0543da5 100644 --- a/src/sage/schemes/affine/affine_homset.py +++ b/src/sage/schemes/affine/affine_homset.py @@ -36,8 +36,6 @@ from sage.misc.verbose import verbose from sage.rings.integer_ring import ZZ -from sage.rings.real_mpfr import RR -from sage.rings.cc import CC from sage.rings.rational_field import RationalField from sage.categories.fields import Fields from sage.categories.number_fields import NumberFields @@ -268,6 +266,7 @@ def points(self, **kwds): if hasattr(X.base_ring(), 'precision'): numerical = True verbose("Warning: computations in the numerical fields are inexact;points may be computed partially or incorrectly.", level=0) + from sage.rings.real_mpfr import RR zero_tol = RR(kwds.pop('zero_tolerance', 10**(-10))) if zero_tol <= 0: raise ValueError("tolerance must be positive") @@ -438,7 +437,7 @@ def numerical_points(self, F=None, **kwds): """ from sage.schemes.affine.affine_space import AffineSpace_generic if F is None: - F = CC + from sage.rings.cc import CC as F if F not in Fields() or not hasattr(F, 'precision'): raise TypeError('F must be a numerical field') X = self.codomain() @@ -455,6 +454,7 @@ def numerical_points(self, F=None, **kwds): return [] # if X zero-dimensional + from sage.rings.real_mpfr import RR zero_tol = RR(kwds.pop('zero_tolerance', 10**(-10))) if zero_tol <= 0: raise ValueError("tolerance must be positive") diff --git a/src/sage/schemes/affine/affine_morphism.py b/src/sage/schemes/affine/affine_morphism.py index d99e2843410..4d0aebd69c7 100644 --- a/src/sage/schemes/affine/affine_morphism.py +++ b/src/sage/schemes/affine/affine_morphism.py @@ -49,8 +49,6 @@ import sage.rings.abc -from sage.calculus.functions import jacobian - from sage.categories.homset import Hom, End from sage.categories.fields import Fields @@ -896,6 +894,9 @@ def jacobian(self): return self.__jacobian except AttributeError: pass + + from sage.calculus.functions import jacobian + self.__jacobian = jacobian(list(self), self.domain().ambient_space().gens()) return self.__jacobian diff --git a/src/sage/schemes/affine/affine_point.py b/src/sage/schemes/affine/affine_point.py index bf6dc2258bc..4824c30d7a2 100644 --- a/src/sage/schemes/affine/affine_point.py +++ b/src/sage/schemes/affine/affine_point.py @@ -202,7 +202,7 @@ def global_height(self, prec=None): else: R = RealField(prec) H = max([self[i].abs() for i in range(self.codomain().ambient_space().dimension_relative())]) - return R(max(H,1)).log() + return R(max(H, 1)).log() if self.domain().base_ring() in _NumberFields or isinstance(self.domain().base_ring(), sage.rings.abc.Order): return max([self[i].global_height(prec) for i in range(self.codomain().ambient_space().dimension_relative())]) else: diff --git a/src/sage/schemes/affine/affine_subscheme.py b/src/sage/schemes/affine/affine_subscheme.py index 6ac0e7508d9..b3831e54d79 100644 --- a/src/sage/schemes/affine/affine_subscheme.py +++ b/src/sage/schemes/affine/affine_subscheme.py @@ -20,8 +20,6 @@ # **************************************************************************** from sage.categories.fields import Fields -from sage.interfaces.singular import singular -from sage.modules.free_module_element import vector from sage.schemes.generic.algebraic_scheme import AlgebraicScheme_subscheme from .affine_morphism import SchemeMorphism_polynomial_affine_subscheme_field @@ -418,6 +416,7 @@ def intersection_multiplicity(self, X, P): Iloc = R.ideal([f(chng_coords) for f in I.gens()]) Jloc = R.ideal([f(chng_coords) for f in J.gens()]) # compute the intersection multiplicity with Serre's Tor formula using Singular + from sage.interfaces.singular import singular singular.lib("homolog.lib") i = 0 s = 0 @@ -492,6 +491,8 @@ def multiplicity(self, P): except TypeError: raise TypeError("(=%s) is not a point on (=%s)" % (P, self)) + from sage.interfaces.singular import singular + # Apply a linear change of coordinates to self so that P is sent to the origin # and then compute the multiplicity of the local ring of the translated subscheme # corresponding to the point (0,...,0) @@ -578,6 +579,8 @@ def tangent_space(self, p): sage: _.dimension() 1 """ + from sage.modules.free_module_element import vector + A = self.ambient_space() R = A.coordinate_ring() gens = R.gens() diff --git a/src/sage/schemes/berkovich/berkovich_cp_element.py b/src/sage/schemes/berkovich/berkovich_cp_element.py index a9299e4e732..72111b32ab3 100644 --- a/src/sage/schemes/berkovich/berkovich_cp_element.py +++ b/src/sage/schemes/berkovich/berkovich_cp_element.py @@ -33,17 +33,19 @@ # https://www.gnu.org/licenses/ # ***************************************************************************** -from sage.structure.element import Element -from sage.structure.element import Expression import sage.rings.abc + +from sage.misc.lazy_import import lazy_import +from sage.rings.infinity import Infinity +from sage.rings.integer_ring import ZZ +from sage.rings.rational_field import QQ from sage.rings.real_mpfr import RR, RealNumber -from sage.rings.padics.padic_generic_element import pAdicGenericElement -from sage.rings.padics.padic_base_generic import pAdicBaseGeneric -from sage.schemes.projective.projective_space import ProjectiveSpace from sage.schemes.projective.projective_point import SchemeMorphism_point_projective_field -from sage.rings.rational_field import QQ -from sage.rings.integer_ring import ZZ -from sage.rings.infinity import Infinity +from sage.schemes.projective.projective_space import ProjectiveSpace +from sage.structure.element import Element, Expression + +lazy_import('sage.rings.padics.padic_generic_element', 'pAdicGenericElement') +lazy_import('sage.rings.padics.padic_base_generic', 'pAdicBaseGeneric') class Berkovich_Element(Element): diff --git a/src/sage/schemes/berkovich/berkovich_space.py b/src/sage/schemes/berkovich/berkovich_space.py index 0692379530f..d566ccfa0dd 100644 --- a/src/sage/schemes/berkovich/berkovich_space.py +++ b/src/sage/schemes/berkovich/berkovich_space.py @@ -39,10 +39,21 @@ from sage.structure.unique_representation import UniqueRepresentation from sage.categories.number_fields import NumberFields import sage.rings.abc + +from sage.categories.number_fields import NumberFields +from sage.categories.topological_spaces import TopologicalSpaces +from sage.misc.lazy_import import lazy_import from sage.rings.integer_ring import ZZ from sage.rings.rational_field import QQ -from sage.rings.number_field.number_field_ideal import NumberFieldFractionalIdeal -from sage.categories.topological_spaces import TopologicalSpaces +from sage.schemes.affine.affine_space import is_AffineSpace +from sage.schemes.berkovich.berkovich_cp_element import (Berkovich_Element_Cp_Affine, + Berkovich_Element_Cp_Projective) +from sage.schemes.projective.projective_space import is_ProjectiveSpace, ProjectiveSpace +from sage.structure.parent import Parent +from sage.structure.unique_representation import UniqueRepresentation + +lazy_import('sage.rings.number_field.number_field_ideal', 'NumberFieldFractionalIdeal') + def is_Berkovich(space) -> bool: diff --git a/src/sage/schemes/curves/affine_curve.py b/src/sage/schemes/curves/affine_curve.py index dbdb2dfa4cd..c8467094001 100644 --- a/src/sage/schemes/curves/affine_curve.py +++ b/src/sage/schemes/curves/affine_curve.py @@ -124,26 +124,21 @@ # https://www.gnu.org/licenses/ # **************************************************************************** -import sage.rings.abc +from builtins import sum as add -from sage.misc.lazy_attribute import lazy_attribute -from sage.misc.cachefunc import cached_method +import sage.rings.abc from sage.arith.misc import binomial -from sage.interfaces.singular import singular -from builtins import sum as add - from sage.categories.fields import Fields from sage.categories.finite_fields import FiniteFields from sage.categories.homset import Hom, End, hom from sage.categories.number_fields import NumberFields - from sage.matrix.constructor import matrix - +from sage.misc.cachefunc import cached_method +from sage.misc.lazy_attribute import lazy_attribute from sage.misc.lazy_import import lazy_import - +from sage.rings.infinity import infinity from sage.rings.polynomial.multi_polynomial_element import degree_lowest_rational_function -from sage.rings.number_field.number_field import NumberField from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.rings.rational_field import RationalField from sage.rings.infinity import infinity @@ -152,6 +147,10 @@ from sage.schemes.affine.affine_subscheme import (AlgebraicScheme_subscheme_affine, AlgebraicScheme_subscheme_affine_field) +lazy_import('sage.interfaces.singular', 'singular') +lazy_import('sage.rings.number_field.number_field', 'NumberField') +lazy_import('sage.rings.qqbar', 'number_field_elements_from_algebraics') + from .curve import Curve_generic from .point import (AffineCurvePoint_field, @@ -164,8 +163,6 @@ from .closed_point import IntegralAffineCurveClosedPoint -lazy_import('sage.rings.qqbar', 'number_field_elements_from_algebraics') - class AffineCurve(Curve_generic, AlgebraicScheme_subscheme_affine): """ diff --git a/src/sage/schemes/curves/projective_curve.py b/src/sage/schemes/curves/projective_curve.py index 6045cc3ea70..09a86d2ae20 100644 --- a/src/sage/schemes/curves/projective_curve.py +++ b/src/sage/schemes/curves/projective_curve.py @@ -136,32 +136,30 @@ # https://www.gnu.org/licenses/ # **************************************************************************** -from sage.misc.lazy_attribute import lazy_attribute -from sage.misc.cachefunc import cached_method +from builtins import sum as add from sage.categories.fields import Fields from sage.categories.homset import hom, Hom, End from sage.categories.number_fields import NumberFields - -from sage.interfaces.singular import singular from sage.matrix.constructor import matrix -from builtins import sum as add +from sage.misc.cachefunc import cached_method +from sage.misc.lazy_attribute import lazy_attribute +from sage.misc.lazy_import import lazy_import +from sage.misc.persist import register_unpickle_override from sage.misc.sage_eval import sage_eval - -from sage.rings.polynomial.multi_polynomial_element import degree_lowest_rational_function +from sage.rings.integer import Integer from sage.rings.integer_ring import IntegerRing -from sage.rings.number_field.number_field import NumberField +from sage.rings.polynomial.multi_polynomial_element import degree_lowest_rational_function from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing -from sage.rings.qqbar import (number_field_elements_from_algebraics, - QQbar) from sage.rings.rational_field import RationalField -from sage.rings.integer import Integer - from sage.schemes.projective.projective_space import ProjectiveSpace, ProjectiveSpace_ring - from sage.schemes.projective.projective_subscheme import (AlgebraicScheme_subscheme_projective, AlgebraicScheme_subscheme_projective_field) +lazy_import('sage.interfaces.singular', 'singular') +lazy_import('sage.rings.number_field.number_field', 'NumberField') +lazy_import('sage.rings.qqbar', ['number_field_elements_from_algebraics', 'QQbar']) + from .curve import Curve_generic from .point import (ProjectiveCurvePoint_field, @@ -173,7 +171,6 @@ IntegralProjectivePlaneCurvePoint_finite_field) from .closed_point import IntegralProjectiveCurveClosedPoint -from sage.misc.persist import register_unpickle_override class ProjectiveCurve(Curve_generic, AlgebraicScheme_subscheme_projective): diff --git a/src/sage/schemes/curves/zariski_vankampen.py b/src/sage/schemes/curves/zariski_vankampen.py index 7dec97439db..5e035c3811c 100644 --- a/src/sage/schemes/curves/zariski_vankampen.py +++ b/src/sage/schemes/curves/zariski_vankampen.py @@ -42,6 +42,7 @@ # https://www.gnu.org/licenses/ # **************************************************************************** import itertools + from copy import copy from itertools import combinations @@ -53,10 +54,10 @@ from sage.groups.finitely_presented import wrap_FpGroup from sage.groups.free_group import FreeGroup from sage.groups.perm_gps.permgroup_named import SymmetricGroup -from sage.libs.braiding import leftnormalform, rightnormalform from sage.matrix.constructor import matrix from sage.misc.cachefunc import cached_function from sage.misc.flatten import flatten +from sage.misc.lazy_import import lazy_import from sage.misc.misc_c import prod from sage.parallel.decorate import parallel from sage.rings.complex_interval_field import ComplexIntervalField @@ -67,7 +68,9 @@ from sage.rings.qqbar import QQbar from sage.rings.rational_field import QQ from sage.rings.real_mpfr import RealField -from .constructor import Curve +from sage.schemes.curves.constructor import Curve + +lazy_import('sage.libs.braiding', ['leftnormalform', 'rightnormalform']) roots_interval_cache = {} diff --git a/src/sage/schemes/cyclic_covers/charpoly_frobenius.py b/src/sage/schemes/cyclic_covers/charpoly_frobenius.py index e28289e1d84..b7cf928853c 100644 --- a/src/sage/schemes/cyclic_covers/charpoly_frobenius.py +++ b/src/sage/schemes/cyclic_covers/charpoly_frobenius.py @@ -8,7 +8,8 @@ # https://www.gnu.org/licenses/ # ***************************************************************************** from sage.rings.integer_ring import ZZ -from sage.functions.log import log +from sage.misc.lazy_import import lazy_import +lazy_import("sage.functions.log", "log") def charpoly_frobenius(frob_matrix, charpoly_prec, p, weight, a=1, known_factor=[1]): diff --git a/src/sage/schemes/cyclic_covers/cycliccover_finite_field.py b/src/sage/schemes/cyclic_covers/cycliccover_finite_field.py index 6ad36e761d7..8515d7a849b 100644 --- a/src/sage/schemes/cyclic_covers/cycliccover_finite_field.py +++ b/src/sage/schemes/cyclic_covers/cycliccover_finite_field.py @@ -66,19 +66,20 @@ # https://www.gnu.org/licenses/ # ***************************************************************************** - from sage.arith.misc import euler_phi -from sage.functions.other import ceil, binomial, floor -from sage.functions.log import log -from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing -from sage.rings.power_series_ring import PowerSeriesRing -from sage.rings.padics.factory import Zp, Zq, Qq -from sage.rings.integer_ring import ZZ -from sage.rings.finite_rings.integer_mod_ring import IntegerModRing from sage.matrix.constructor import matrix, zero_matrix -from sage.modules.free_module_element import vector -from sage.schemes.hyperelliptic_curves.hypellfrob import interval_products from sage.misc.cachefunc import cached_method +from sage.misc.lazy_import import lazy_import +from sage.modules.free_module_element import vector +from sage.rings.finite_rings.integer_mod_ring import IntegerModRing +from sage.rings.integer_ring import ZZ +from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing +from sage.rings.power_series_ring import PowerSeriesRing + +lazy_import("sage.functions.log", "log") +lazy_import("sage.functions.other", ["ceil", "binomial", "floor"]) +lazy_import('sage.rings.padics.factory', ['Zp', 'Zq', 'Qq']) +lazy_import('sage.schemes.hyperelliptic_curves.hypellfrob', 'interval_products') from .charpoly_frobenius import charpoly_frobenius from . import cycliccover_generic diff --git a/src/sage/schemes/elliptic_curves/BSD.py b/src/sage/schemes/elliptic_curves/BSD.py index 755f8be2f50..7b808d8d461 100644 --- a/src/sage/schemes/elliptic_curves/BSD.py +++ b/src/sage/schemes/elliptic_curves/BSD.py @@ -1,11 +1,13 @@ "Birch and Swinnerton-Dyer formulas" from sage.arith.misc import prime_divisors +from sage.misc.lazy_import import lazy_import +from sage.rings.infinity import Infinity from sage.rings.integer_ring import ZZ from sage.rings.rational_field import QQ -from sage.rings.infinity import Infinity -from sage.rings.number_field.number_field import QuadraticField -from sage.functions.other import ceil + +lazy_import("sage.functions.other", "ceil") +lazy_import("sage.rings.number_field.number_field", "QuadraticField") class BSD_data: diff --git a/src/sage/schemes/elliptic_curves/cm.py b/src/sage/schemes/elliptic_curves/cm.py index d63589020c4..9580a90038c 100644 --- a/src/sage/schemes/elliptic_curves/cm.py +++ b/src/sage/schemes/elliptic_curves/cm.py @@ -34,12 +34,10 @@ # https://www.gnu.org/licenses/ # **************************************************************************** -from sage.interfaces.magma import magma from sage.rings.integer import Integer from sage.rings.rational_field import QQ from sage.rings.integer_ring import ZZ from sage.rings.integer_ring import IntegerRing -from sage.rings.number_field.number_field import is_fundamental_discriminant from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.misc.cachefunc import cached_function @@ -121,6 +119,7 @@ def hilbert_class_polynomial(D, algorithm=None): return sage.libs.arb.arith.hilbert_class_polynomial(D) if algorithm == "magma": + from sage.interfaces.magma import magma magma.eval("R := PolynomialRing(IntegerRing())") f = str(magma.eval("HilbertClassPolynomial(%s)" % D)) return IntegerRing()['x'](f) diff --git a/src/sage/schemes/elliptic_curves/ell_curve_isogeny.py b/src/sage/schemes/elliptic_curves/ell_curve_isogeny.py index 496731a6c7d..2d7291aea10 100644 --- a/src/sage/schemes/elliptic_curves/ell_curve_isogeny.py +++ b/src/sage/schemes/elliptic_curves/ell_curve_isogeny.py @@ -192,6 +192,7 @@ def isogeny_codomain_from_kernel(E, kernel): EXAMPLES:: + sage: # needs sage.rings.finite_rings sage: from sage.schemes.elliptic_curves.ell_curve_isogeny import isogeny_codomain_from_kernel sage: E = EllipticCurve(GF(7), [1,0,1,0,1]) sage: R. = GF(7)[] @@ -402,6 +403,7 @@ def compute_codomain_kohel(E, kernel): EXAMPLES:: + sage: # needs sage.rings.finite_rings sage: from sage.schemes.elliptic_curves.ell_curve_isogeny import compute_codomain_kohel sage: E = EllipticCurve(GF(19), [1,2,3,4,5]) sage: phi = EllipticCurveIsogeny(E, [9,1]) @@ -2903,7 +2905,7 @@ def scaling_factor(self): Check for :issue:`36638`:: - sage: phi.scaling_factor().parent() # needs sage.rings.finite_rings + sage: phi.scaling_factor().parent() # needs sage.rings.finite_rings Finite Field in z2 of size 257^2 ALGORITHM: The "inner" isogeny is normalized by construction, @@ -3718,6 +3720,7 @@ def compute_intermediate_curves(E1, E2): EXAMPLES:: + sage: # needs sage.rings.finite_rings sage: from sage.schemes.elliptic_curves.ell_curve_isogeny import compute_intermediate_curves sage: E = EllipticCurve(GF(83), [1,0,1,1,0]) sage: R. = GF(83)[]; f = x + 24 diff --git a/src/sage/schemes/elliptic_curves/ell_generic.py b/src/sage/schemes/elliptic_curves/ell_generic.py index 16347cc6a6f..64db2ddc04c 100644 --- a/src/sage/schemes/elliptic_curves/ell_generic.py +++ b/src/sage/schemes/elliptic_curves/ell_generic.py @@ -272,7 +272,7 @@ def _latex_(self): """ Internal function. Return a latex string for this elliptic curve. - Users will normally use latex() instead. + Users will normally use :func:`latex` instead. EXAMPLES:: diff --git a/src/sage/schemes/elliptic_curves/ell_point.py b/src/sage/schemes/elliptic_curves/ell_point.py index 63d50cc0b0d..2d3037733fc 100644 --- a/src/sage/schemes/elliptic_curves/ell_point.py +++ b/src/sage/schemes/elliptic_curves/ell_point.py @@ -117,20 +117,18 @@ import math -from sage.rings.padics.factory import Qp -from sage.rings.padics.precision_error import PrecisionError - +import sage.groups.generic as generic import sage.rings.abc +from sage.misc.lazy_import import lazy_import from sage.rings.infinity import Infinity as oo from sage.rings.integer import Integer from sage.rings.integer_ring import ZZ +from sage.rings.padics.precision_error import PrecisionError from sage.rings.rational_field import QQ from sage.rings.finite_rings.integer_mod import Mod from sage.rings.real_mpfr import RealField from sage.rings.real_mpfr import RR -import sage.groups.generic as generic - from sage.structure.element import AdditiveGroupElement from sage.structure.sequence import Sequence from sage.structure.richcmp import richcmp @@ -144,6 +142,8 @@ from .constructor import EllipticCurve +lazy_import('sage.rings.padics.factory', 'Qp') + try: from sage.libs.pari.all import pari, PariError from cypari2.pari_instance import prec_words_to_bits diff --git a/src/sage/schemes/elliptic_curves/ell_rational_field.py b/src/sage/schemes/elliptic_curves/ell_rational_field.py index 1dba8a94ba1..96a009b7b2c 100644 --- a/src/sage/schemes/elliptic_curves/ell_rational_field.py +++ b/src/sage/schemes/elliptic_curves/ell_rational_field.py @@ -89,16 +89,16 @@ from sage.structure.element import Element from sage.misc.misc_c import prod as mul from sage.misc.misc_c import prod -from sage.misc.lazy_import import lazy_import from sage.misc.verbose import verbose as verbose_verbose -from sage.functions.log import log +from sage.misc.lazy_import import lazy_import +lazy_import("sage.functions.log", "log") from sage.matrix.matrix_space import MatrixSpace lazy_import('sage.libs.pari.all', 'pari') lazy_import("sage.functions.gamma", "gamma_inc") from math import sqrt -from sage.interfaces.gp import gp +lazy_import('sage.interfaces.gp', 'gp') from sage.misc.cachefunc import cached_method from copy import copy @@ -106,7 +106,6 @@ C = ComplexField() R = RealField() Z = IntegerRing() -IR = RealIntervalField(20) _MAX_HEIGHT = 21 diff --git a/src/sage/schemes/elliptic_curves/ell_tate_curve.py b/src/sage/schemes/elliptic_curves/ell_tate_curve.py index 70697a4b036..4dac4b08aed 100644 --- a/src/sage/schemes/elliptic_curves/ell_tate_curve.py +++ b/src/sage/schemes/elliptic_curves/ell_tate_curve.py @@ -39,17 +39,18 @@ # # https://www.gnu.org/licenses/ ###################################################################### -from sage.rings.integer_ring import ZZ -from sage.rings.padics.factory import Qp -from sage.structure.sage_object import SageObject -from sage.structure.richcmp import richcmp, richcmp_method from sage.arith.functions import lcm as LCM +from sage.matrix.constructor import matrix +from sage.misc.functional import denominator, log +from sage.misc.lazy_import import lazy_import +from sage.misc.misc_c import prod from sage.modular.modform.constructor import EisensteinForms, CuspForms +from sage.rings.integer_ring import ZZ from sage.schemes.elliptic_curves.constructor import EllipticCurve -from sage.functions.log import log -from sage.misc.functional import denominator -from sage.misc.misc_c import prod -from sage.matrix.constructor import matrix +from sage.structure.richcmp import richcmp, richcmp_method +from sage.structure.sage_object import SageObject + +lazy_import('sage.rings.padics.factory', 'Qp') @richcmp_method diff --git a/src/sage/schemes/elliptic_curves/gal_reps_number_field.py b/src/sage/schemes/elliptic_curves/gal_reps_number_field.py index e049b72fa76..50c62f04664 100644 --- a/src/sage/schemes/elliptic_curves/gal_reps_number_field.py +++ b/src/sage/schemes/elliptic_curves/gal_reps_number_field.py @@ -47,16 +47,18 @@ from sage.arith.misc import legendre_symbol, primes from sage.misc.functional import cyclotomic_polynomial +from sage.misc.lazy_import import lazy_import from sage.modules.free_module import VectorSpace from sage.rings.finite_rings.finite_field_constructor import GF from sage.rings.infinity import Infinity from sage.rings.integer import Integer from sage.rings.integer_ring import ZZ -from sage.rings.number_field.number_field import NumberField from sage.rings.rational_field import QQ from sage.sets.set import Set from sage.structure.sage_object import SageObject +lazy_import('sage.rings.number_field.number_field', 'NumberField') + class GaloisRepresentation(SageObject): r""" diff --git a/src/sage/schemes/elliptic_curves/heegner.py b/src/sage/schemes/elliptic_curves/heegner.py index 1c4d0505af0..c5cbceb7f74 100644 --- a/src/sage/schemes/elliptic_curves/heegner.py +++ b/src/sage/schemes/elliptic_curves/heegner.py @@ -98,15 +98,6 @@ from itertools import product import sage.rings.abc -import sage.rings.number_field.number_field_element -import sage.rings.number_field.number_field as number_field -from sage.rings.number_field.number_field import NumberField -from sage.rings.number_field.number_field import QuadraticField -from sage.rings.real_mpfr import RealField -from sage.rings.complex_mpfr import ComplexField -from sage.rings.real_mpfi import RealIntervalField -from sage.rings.infinity import Infinity as infinity -from sage.rings.fast_arith import prime_range from sage.arith.functions import lcm from sage.arith.misc import (binomial, factorial, prime_divisors, @@ -115,21 +106,28 @@ from sage.matrix.matrix_space import MatrixSpace from sage.misc.cachefunc import cached_method from sage.misc.misc_c import prod +from sage.misc.lazy_import import lazy_import from sage.misc.verbose import verbose from sage.modular.modsym.p1list import P1List -from sage.rings.complex_double import CDF +from sage.quadratic_forms.binary_qf import BinaryQF, BinaryQF_reduced_representatives from sage.rings.factorint import factor_trial_division +from sage.rings.fast_arith import prime_range from sage.rings.finite_rings.finite_field_constructor import FiniteField as GF from sage.rings.finite_rings.integer_mod_ring import IntegerModRing as Integers +from sage.rings.infinity import Infinity as infinity from sage.rings.integer_ring import ZZ -from sage.rings.rational_field import QQ -from sage.quadratic_forms.binary_qf import BinaryQF -from sage.quadratic_forms.binary_qf import BinaryQF_reduced_representatives from sage.rings.number_field.number_field_element_base import NumberFieldElement_base +from sage.rings.rational_field import QQ from sage.structure.sage_object import SageObject from sage.structure.richcmp import (richcmp_method, richcmp, richcmp_not_equal, rich_to_bool) +lazy_import('sage.rings.complex_double', 'CDF') +lazy_import('sage.rings.complex_mpfr', 'ComplexField') +lazy_import('sage.rings.number_field.number_field', ['NumberField', 'QuadraticField']) +lazy_import('sage.rings.real_mpfi', 'RealIntervalField') +lazy_import('sage.rings.real_mpfr', 'RealField') + ############################################################################### # # The exported functions, which are in most cases enough to get the @@ -527,7 +525,7 @@ def quadratic_field(self): """ D = self.__D var = 'sqrt_minus_%s' % (-D) - return number_field.QuadraticField(D,var) + return QuadraticField(D,var) @cached_method def galois_group(self, base=QQ): @@ -2232,7 +2230,7 @@ def quadratic_field(self): """ D = self.__D var = 'sqrt_minus_%s' % (-D) - return number_field.QuadraticField(D,var) + return QuadraticField(D,var) def kolyvagin_conductors(self, r=None, n=10, E=None, m=None): r""" diff --git a/src/sage/schemes/elliptic_curves/height.py b/src/sage/schemes/elliptic_curves/height.py index c382ad1eefe..82a213cd9b7 100644 --- a/src/sage/schemes/elliptic_curves/height.py +++ b/src/sage/schemes/elliptic_curves/height.py @@ -34,19 +34,20 @@ from sage.rings.integer_ring import ZZ from sage.rings.rational_field import QQ from sage.rings.infinity import infinity -from sage.rings.cif import CIF from sage.rings.cc import CC from sage.rings.complex_double import CDF from sage.rings.real_double import RDF -from sage.rings.real_mpfi import RIF from sage.rings.real_mpfr import RR from sage.misc.cachefunc import cached_method from sage.arith.functions import lcm from sage.arith.misc import factorial from sage.ext.fast_callable import fast_callable -from sage.functions.log import log, exp -from sage.symbolic.ring import SR +from sage.misc.lazy_import import lazy_import +lazy_import("sage.functions.log", ["log", "exp"]) +lazy_import("sage.rings.cif", "CIF") +lazy_import("sage.rings.real_mpfi", "RIF") +lazy_import("sage.symbolic.ring", "SR") class UnionOfIntervals: diff --git a/src/sage/schemes/elliptic_curves/lseries_ell.py b/src/sage/schemes/elliptic_curves/lseries_ell.py index 73fb8a63659..6a73953ff62 100644 --- a/src/sage/schemes/elliptic_curves/lseries_ell.py +++ b/src/sage/schemes/elliptic_curves/lseries_ell.py @@ -24,7 +24,6 @@ from sage.rings.real_mpfr import RealField from sage.rings.rational_field import RationalField from math import sqrt, log, ceil -import sage.functions.exp_integral as exp_integral from sage.misc.verbose import verbose from sage.misc.cachefunc import cached_method @@ -716,10 +715,12 @@ def deriv_at1(self, k=None, prec=None): # positive, so L'(E,1) = 0. return (R.zero(), Rerror.zero()) + from sage.functions.exp_integral import exponential_integral_1 + an = self.__E.anlist(k) # list of Sage Integers pi = R.pi() sqrtN = R(self.__E.conductor()).sqrt() - v = exp_integral.exponential_integral_1(2*pi/sqrtN, k) + v = exponential_integral_1(2*pi/sqrtN, k) # Compute series sum and accumulate floating point errors L = R.zero() diff --git a/src/sage/schemes/elliptic_curves/padic_lseries.py b/src/sage/schemes/elliptic_curves/padic_lseries.py index 73cfb5aded6..d29be405854 100644 --- a/src/sage/schemes/elliptic_curves/padic_lseries.py +++ b/src/sage/schemes/elliptic_curves/padic_lseries.py @@ -69,10 +69,9 @@ prime_divisors, kronecker as kronecker_symbol, valuation) -from sage.functions.log import log -from sage.functions.other import floor from sage.misc.cachefunc import cached_method from sage.misc.functional import denominator +from sage.misc.lazy_import import lazy_import from sage.misc.verbose import get_verbose, verbose from sage.modules.free_module_element import vector from sage.rings.finite_rings.integer_mod_ring import IntegerModRing as Integers @@ -80,13 +79,16 @@ from sage.rings.integer import Integer from sage.rings.integer_ring import ZZ from sage.rings.laurent_series_ring import LaurentSeriesRing -from sage.rings.padics.factory import Qp from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.rings.power_series_ring import PowerSeriesRing from sage.rings.rational_field import QQ from sage.structure.richcmp import richcmp_method, richcmp from sage.structure.sage_object import SageObject +lazy_import("sage.functions.log", "log") +lazy_import("sage.functions.other", "floor") +lazy_import('sage.rings.padics.factory', 'Qp') + @richcmp_method class pAdicLseries(SageObject): diff --git a/src/sage/schemes/elliptic_curves/padics.py b/src/sage/schemes/elliptic_curves/padics.py index fe3a2cbe0cb..a5e9a4e4a65 100644 --- a/src/sage/schemes/elliptic_curves/padics.py +++ b/src/sage/schemes/elliptic_curves/padics.py @@ -25,22 +25,23 @@ from sage.arith.functions import lcm as LCM from sage.arith.misc import valuation -from sage.matrix.constructor import matrix -from sage.misc.misc import newton_method_sizes -from sage.rings.finite_rings.finite_field_constructor import FiniteField as GF -from sage.rings.padics.factory import Qp as pAdicField -from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing -import sage.schemes.hyperelliptic_curves.hypellfrob -import sage.schemes.hyperelliptic_curves.monsky_washnitzer - +from sage.matrix.constructor import Matrix as matrix from sage.misc.cachefunc import cached_method +from sage.misc.lazy_import import lazy_import +from sage.misc.misc import newton_method_sizes from sage.rings.big_oh import O +from sage.rings.finite_rings.finite_field_constructor import FiniteField as GF from sage.rings.finite_rings.integer_mod_ring import IntegerModRing as Integers from sage.rings.integer import Integer from sage.rings.laurent_series_ring import LaurentSeriesRing -from sage.rings.padics.factory import Qp, Zp +from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.rings.power_series_ring import PowerSeriesRing from sage.rings.rational_field import RationalField +import sage.schemes.hyperelliptic_curves.hypellfrob +import sage.schemes.hyperelliptic_curves.monsky_washnitzer + +lazy_import('sage.rings.padics.factory', ['Qp', 'Zp']) + from . import padic_lseries as plseries @@ -1188,7 +1189,7 @@ def padic_sigma(self, p, N=20, E2=None, check=False, check_hypotheses=True): # [Note: there are actually more digits available, but it's a bit # tricky to figure out exactly how many, and we only need p^(N-k+1) # for p-adic height purposes anyway] - K = pAdicField(p, N + 1) + K = Qp(p, N + 1) sigma = sigma.padded_list(N+1) @@ -1372,7 +1373,7 @@ def padic_sigma_truncated(self, p, N=20, lamb=0, E2=None, check_hypotheses=True) # Convert the answer to power series over p-adics; drop the precision # of the t^j coefficient to p^{N - 2 + (3 - j)(lamb + 1)}). - K = pAdicField(p, N - 2 + 3*(lamb+1)) + K = Qp(p, N - 2 + 3*(lamb+1)) sigma = sigma.padded_list(trunc+1) @@ -1555,7 +1556,7 @@ def padic_E2(self, p, prec=20, check=False, check_hypotheses=True, algorithm="au frob_p_n = frob_p**prec # todo: think about the sign of this. Is it correct? - output_ring = pAdicField(p, prec) + output_ring = Qp(p, prec) E2_of_X = output_ring( (-12 * frob_p_n[0,1] / frob_p_n[1,1]).lift() ) \ + O(p**prec) diff --git a/src/sage/schemes/elliptic_curves/period_lattice.py b/src/sage/schemes/elliptic_curves/period_lattice.py index aa4662a85ac..ae0b456890d 100644 --- a/src/sage/schemes/elliptic_curves/period_lattice.py +++ b/src/sage/schemes/elliptic_curves/period_lattice.py @@ -108,21 +108,20 @@ import sage.rings.abc -from sage.libs.pari.all import pari from sage.misc.cachefunc import cached_method +from sage.misc.lazy_import import lazy_import from sage.modules.free_module import FreeModule_generic_pid -from sage.rings.complex_mpfr import ComplexField -from sage.rings.complex_mpfr import ComplexNumber +from sage.rings.complex_mpfr import ComplexField, ComplexNumber from sage.rings.infinity import Infinity from sage.rings.integer_ring import ZZ -from sage.rings.number_field.number_field import refine_embedding -from sage.rings.qqbar import AA, QQbar from sage.rings.rational_field import QQ -from sage.rings.real_mpfr import RealField -from sage.rings.real_mpfr import RealNumber as RealNumber +from sage.rings.real_mpfr import RealField, RealNumber from sage.schemes.elliptic_curves.constructor import EllipticCurve from sage.structure.richcmp import richcmp_method, richcmp, richcmp_not_equal +lazy_import('sage.libs.pari.all', 'pari') +lazy_import('sage.rings.number_field.number_field', 'refine_embedding') + class PeriodLattice(FreeModule_generic_pid): """ @@ -215,6 +214,8 @@ def __init__(self, E, embedding=None): sage: L == loads(dumps(L)) True """ + from sage.rings.qqbar import AA, QQbar + # First we cache the elliptic curve with this period lattice: self.E = E diff --git a/src/sage/schemes/elliptic_curves/sha_tate.py b/src/sage/schemes/elliptic_curves/sha_tate.py index 6c8cf3c986f..90003faf1c7 100644 --- a/src/sage/schemes/elliptic_curves/sha_tate.py +++ b/src/sage/schemes/elliptic_curves/sha_tate.py @@ -77,19 +77,23 @@ # the License, or (at your option) any later version. # https://www.gnu.org/licenses/ # **************************************************************************** + from math import sqrt -from sage.functions.log import log +import sage.arith.all as arith + +from sage.misc.lazy_import import lazy_import from sage.misc.verbose import verbose from sage.modules.free_module_element import vector from sage.rings.integer import Integer from sage.rings.integer_ring import ZZ -from sage.rings.padics.factory import Qp from sage.rings.rational_field import Q from sage.rings.real_mpfi import RIF from sage.rings.real_mpfr import RealField from sage.structure.sage_object import SageObject -import sage.arith.all as arith + +lazy_import("sage.functions.log", "log") +lazy_import("sage.rings.padics.factory", "Qp") factor = arith.factor valuation = arith.valuation diff --git a/src/sage/schemes/generic/algebraic_scheme.py b/src/sage/schemes/generic/algebraic_scheme.py index 8cc0e544917..9d4fbbb2c28 100644 --- a/src/sage/schemes/generic/algebraic_scheme.py +++ b/src/sage/schemes/generic/algebraic_scheme.py @@ -1787,7 +1787,7 @@ def rational_points(self, **kwds): over the rationals:: sage: E = EllipticCurve('37a') # needs sage.schemes - sage: E.rational_points(bound=8) # needs sage.schemes + sage: E.rational_points(bound=8) # needs sage.libs.singular sage.schemes [(-1 : -1 : 1), (-1 : 0 : 1), (0 : -1 : 1), (0 : 0 : 1), (0 : 1 : 0), (1/4 : -5/8 : 1), (1/4 : -3/8 : 1), (1 : -1 : 1), (1 : 0 : 1), (2 : -3 : 1), (2 : 2 : 1)] @@ -1796,8 +1796,9 @@ def rational_points(self, **kwds): enumerated. :: sage: Etilde = E.base_extend(GF(3)) # needs sage.schemes - sage: Etilde.rational_points() # needs sage.schemes - [(0 : 1 : 0), (0 : 0 : 1), (0 : 2 : 1), (1 : 0 : 1), (1 : 2 : 1), (2 : 0 : 1), (2 : 2 : 1)] + sage: Etilde.rational_points() # needs sage.libs.singular sage.schemes + [(0 : 1 : 0), (0 : 0 : 1), (0 : 2 : 1), (1 : 0 : 1), + (1 : 2 : 1), (2 : 0 : 1), (2 : 2 : 1)] The class of hyperelliptic curves does not (yet) support desingularization of the places at infinity into two points:: @@ -1805,27 +1806,27 @@ def rational_points(self, **kwds): sage: FF = FiniteField(7) sage: P. = PolynomialRing(FiniteField(7)) sage: C = HyperellipticCurve(x^8 + x + 1) # needs sage.schemes - sage: C.rational_points() # needs sage.schemes + sage: C.rational_points() # needs sage.libs.singular sage.schemes [(0 : 1 : 0), (0 : 1 : 1), (0 : 6 : 1), (2 : 0 : 1), (4 : 0 : 1), (6 : 1 : 1), (6 : 6 : 1)] :: - sage: # needs sage.rings.number_field + sage: # needs sage.rings.number_field sage.rings.real_mpfr sage: K. = QuadraticField(-3) sage: P. = ProjectiveSpace(K, 2) sage: X = P.subscheme([x^2 - v^2*x*z, y*x - v*z^2]) - sage: X.rational_points(F=CC) + sage: X.rational_points(F=CC) # needs sage.libs.singular [(-3.00000000000000 : -0.577350269189626*I : 1.00000000000000), (0.000000000000000 : 1.00000000000000 : 0.000000000000000)] :: - sage: # needs sage.rings.number_field + sage: # needs sage.rings.number_field sage.rings.real_mpfr sage: K. = QuadraticField(3) sage: A. = AffineSpace(K, 2) sage: X = A.subscheme([x^2 - v^2*y, y*x - v]) - sage: X.rational_points(F=RR) + sage: X.rational_points(F=RR) # needs sage.libs.singular [(1.73205080756888, 1.00000000000000)] .. TODO:: diff --git a/src/sage/schemes/generic/divisor_group.py b/src/sage/schemes/generic/divisor_group.py index d6a19f49d60..05c0f06f7d9 100644 --- a/src/sage/schemes/generic/divisor_group.py +++ b/src/sage/schemes/generic/divisor_group.py @@ -15,12 +15,15 @@ # http://www.gnu.org/licenses/ #******************************************************************************* +from sage.misc.lazy_import import lazy_import from sage.schemes.generic.divisor import Divisor_generic, Divisor_curve from sage.structure.formal_sum import FormalSums from sage.structure.unique_representation import UniqueRepresentation from sage.rings.integer_ring import ZZ from sage.rings.rational_field import QQ +lazy_import('sage.schemes.curves.curve', 'Curve_generic') + def DivisorGroup(scheme, base_ring=None): r""" @@ -49,7 +52,6 @@ def DivisorGroup(scheme, base_ring=None): if base_ring is None: base_ring = ZZ - from sage.schemes.curves.curve import Curve_generic if isinstance(scheme, Curve_generic): DG = DivisorGroup_curve(scheme, base_ring) else: diff --git a/src/sage/schemes/generic/morphism.py b/src/sage/schemes/generic/morphism.py index 8034d0b9b5a..6e491c50c9e 100644 --- a/src/sage/schemes/generic/morphism.py +++ b/src/sage/schemes/generic/morphism.py @@ -113,7 +113,10 @@ def is_SchemeMorphism(f): sage: is_SchemeMorphism(f) True """ - from sage.schemes.elliptic_curves.ell_point import EllipticCurvePoint_field + try: + from sage.schemes.elliptic_curves.ell_point import EllipticCurvePoint_field + except ImportError: + EllipticCurvePoint_field = () return isinstance(f, (SchemeMorphism, EllipticCurvePoint_field)) diff --git a/src/sage/schemes/generic/scheme.py b/src/sage/schemes/generic/scheme.py index 715c9d2a687..c697a305f26 100644 --- a/src/sage/schemes/generic/scheme.py +++ b/src/sage/schemes/generic/scheme.py @@ -21,12 +21,15 @@ from sage.structure.parent import Parent 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 is_Ideal from sage.structure.unique_representation import UniqueRepresentation from sage.schemes.generic.point import SchemeTopologicalPoint_prime_ideal +lazy_import('sage.schemes.elliptic_curves.ell_generic', 'EllipticCurve_generic', as_='EllipticCurve') + def is_Scheme(x): """ diff --git a/src/sage/schemes/hyperelliptic_curves/constructor.py b/src/sage/schemes/hyperelliptic_curves/constructor.py index 46d01cfd2cb..adb7d7cb6f5 100644 --- a/src/sage/schemes/hyperelliptic_curves/constructor.py +++ b/src/sage/schemes/hyperelliptic_curves/constructor.py @@ -14,8 +14,6 @@ # https://www.gnu.org/licenses/ # **************************************************************************** -from sage.schemes.projective.projective_space import ProjectiveSpace - from .hyperelliptic_generic import HyperellipticCurve_generic from .hyperelliptic_finite_field import HyperellipticCurve_finite_field from .hyperelliptic_rational_field import HyperellipticCurve_rational_field @@ -27,6 +25,7 @@ from sage.rings.finite_rings.finite_field_base import FiniteField from sage.rings.polynomial.polynomial_element import Polynomial from sage.rings.rational_field import RationalField +from sage.schemes.projective.projective_space import ProjectiveSpace from sage.structure.dynamic_class import dynamic_class diff --git a/src/sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py b/src/sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py index db37ec0c6d2..b9106a7082e 100644 --- a/src/sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py +++ b/src/sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py @@ -56,11 +56,13 @@ from sage.arith.misc import binomial from sage.rings.power_series_ring import PowerSeriesRing from . import hyperelliptic_generic -from sage.schemes.hyperelliptic_curves.hypellfrob import hypellfrob from sage.misc.cachefunc import cached_method from sage.matrix.constructor import identity_matrix, matrix from sage.misc.functional import rank -from sage.libs.pari.all import pari +from sage.misc.lazy_import import lazy_import + +lazy_import('sage.libs.pari.all', 'pari') +lazy_import('sage.schemes.hyperelliptic_curves.hypellfrob', 'hypellfrob') from sage.schemes.curves.projective_curve import ProjectivePlaneCurve_finite_field diff --git a/src/sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py b/src/sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py index 4834152b606..42709c1a033 100644 --- a/src/sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +++ b/src/sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py @@ -38,7 +38,8 @@ from sage.rings.power_series_ring import PowerSeriesRing from sage.rings.laurent_series_ring import LaurentSeriesRing from sage.rings.real_mpfr import RR -from sage.functions.all import log +from sage.misc.lazy_import import lazy_import +lazy_import("sage.functions.all", "log") from sage.structure.category_object import normalize_names import sage.schemes.curves.projective_curve as plane_curve diff --git a/src/sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py b/src/sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py index 018d60c22f8..10c471035a7 100644 --- a/src/sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py +++ b/src/sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py @@ -12,23 +12,23 @@ # https://www.gnu.org/licenses/ # **************************************************************************** - -from sage.rings.power_series_ring import PowerSeriesRing -from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing +from sage.matrix.constructor import matrix +from sage.misc.lazy_import import lazy_import +from sage.modules.free_module import VectorSpace +from sage.modules.free_module_element import vector +from sage.rings.finite_rings.finite_field_constructor import FiniteField as GF +from sage.rings.infinity import Infinity from sage.rings.integer_ring import ZZ +from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing +from sage.rings.power_series_ring import PowerSeriesRing from sage.rings.rational_field import QQ -from sage.rings.padics.factory import Qp as pAdicField -from sage.rings.finite_rings.finite_field_constructor import FiniteField as GF -from sage.rings.real_mpfr import RR from sage.rings.rational_field import RationalField -from sage.rings.infinity import Infinity -from sage.functions.log import log -from sage.modules.free_module import VectorSpace -from sage.matrix.constructor import matrix -from sage.modules.free_module_element import vector - +from sage.rings.real_mpfr import RR from sage.schemes.curves.projective_curve import ProjectivePlaneCurve_field +lazy_import("sage.functions.log", "log") +lazy_import("sage.rings.padics.factory", "Qp", as_="pAdicField") + from . import hyperelliptic_generic diff --git a/src/sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py b/src/sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py index 1e33f9b67fd..70cd588047f 100644 --- a/src/sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py +++ b/src/sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py @@ -9,10 +9,11 @@ import sage.rings.abc -from sage.rings.padics.factory import Qp as pAdicField - +from sage.misc.lazy_import import lazy_import from sage.schemes.curves.projective_curve import ProjectivePlaneCurve_field +lazy_import('sage.rings.padics.factory', 'Qp', as_='pAdicField') + from . import hyperelliptic_generic diff --git a/src/sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py b/src/sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py index f72f7bab6e7..339964d7d08 100644 --- a/src/sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +++ b/src/sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py @@ -92,11 +92,12 @@ from sage.rings.integer_ring import ZZ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.rings.finite_rings.finite_field_constructor import FiniteField -from sage.rings.number_field.number_field import NumberField from sage.misc.lazy_import import lazy_import from sage.rings.fast_arith import prime_range from sage.arith.misc import GCD as gcd + lazy_import('sage.interfaces.genus2reduction', ['genus2reduction', 'Genus2reduction']) +lazy_import('sage.rings.number_field.number_field', 'NumberField') def satisfies_coefficient_condition(g, p): diff --git a/src/sage/schemes/hyperelliptic_curves/monsky_washnitzer.py b/src/sage/schemes/hyperelliptic_curves/monsky_washnitzer.py index d9a9996d44e..0876bbcb740 100644 --- a/src/sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +++ b/src/sage/schemes/hyperelliptic_curves/monsky_washnitzer.py @@ -48,9 +48,9 @@ from sage.arith.misc import integer_ceil as ceil from sage.arith.misc import binomial from sage.categories.algebras import Algebras -from sage.functions.log import log from sage.matrix.constructor import matrix from sage.misc.cachefunc import cached_method +from sage.misc.lazy_import import lazy_import from sage.misc.misc import newton_method_sizes from sage.misc.profiler import Profiler from sage.misc.repr import repr_lincomb @@ -70,7 +70,6 @@ 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.padics.factory import Qp as pAdicField from sage.rings.polynomial.polynomial_element import Polynomial from sage.schemes.elliptic_curves.constructor import EllipticCurve from sage.schemes.elliptic_curves.ell_generic import EllipticCurve_generic @@ -81,6 +80,9 @@ from sage.structure.richcmp import richcmp from sage.structure.unique_representation import UniqueRepresentation +lazy_import('sage.functions.log', 'log') +lazy_import('sage.rings.padics.factory', 'Qp', as_='pAdicField') + class SpecialCubicQuotientRingElement(ModuleElement): """ @@ -3487,7 +3489,7 @@ def coleman_integral(self, P, Q): sage: E = EllipticCurve(K,[-31/3,-2501/108]) #11a sage: P = E(K(14/3), K(11/2)) sage: w = E.invariant_differential() - sage: w.coleman_integral(P,2*P) + sage: w.coleman_integral(P, 2*P) O(5^6) sage: Q = E([3,58332]) diff --git a/src/sage/schemes/plane_conics/con_rational_field.py b/src/sage/schemes/plane_conics/con_rational_field.py index 7be5d2ad242..f357a71edb6 100644 --- a/src/sage/schemes/plane_conics/con_rational_field.py +++ b/src/sage/schemes/plane_conics/con_rational_field.py @@ -23,25 +23,23 @@ # https://www.gnu.org/licenses/ # **************************************************************************** -from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing -from sage.rings.integer_ring import ZZ -from sage.rings.rational_field import QQ - import sage.rings.abc -from sage.structure.sequence import Sequence -from sage.schemes.projective.projective_space import ProjectiveSpace +from sage.arith.functions import lcm +from sage.arith.misc import hilbert_symbol from sage.matrix.constructor import Matrix +from sage.misc.lazy_import import lazy_import +from sage.rings.integer_ring import ZZ +from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing +from sage.rings.rational_field import QQ +from sage.schemes.projective.projective_space import ProjectiveSpace +from sage.structure.element import InfinityElement +from sage.structure.sequence import Sequence -from sage.quadratic_forms.qfsolve import qfsolve, qfparam +lazy_import('sage.quadratic_forms.qfsolve', ['qfsolve', 'qfparam']) from .con_number_field import ProjectiveConic_number_field -from sage.structure.element import InfinityElement - -from sage.arith.functions import lcm -from sage.arith.misc import hilbert_symbol - class ProjectiveConic_rational_field(ProjectiveConic_number_field): r""" diff --git a/src/sage/schemes/projective/proj_bdd_height.py b/src/sage/schemes/projective/proj_bdd_height.py index df3db88cda7..f1191fe78a0 100644 --- a/src/sage/schemes/projective/proj_bdd_height.py +++ b/src/sage/schemes/projective/proj_bdd_height.py @@ -20,18 +20,19 @@ from math import floor -from sage.schemes.projective.projective_space import ProjectiveSpace -from sage.rings.integer_ring import ZZ -from sage.rings.rational_field import QQ -from sage.rings.real_mpfr import RealField -from sage.rings.number_field.unit_group import UnitGroup -from sage.arith.misc import gcd from sage.arith.functions import lcm -from sage.matrix.constructor import matrix, column_matrix -from sage.libs.pari.all import pari -from sage.modules.free_module_element import vector +from sage.arith.misc import gcd +from sage.misc.lazy_import import lazy_import from sage.rings.integer import Integer -from sage.geometry.polyhedron.constructor import Polyhedron +from sage.rings.rational_field import QQ +from sage.schemes.projective.projective_space import ProjectiveSpace + +lazy_import('sage.geometry.polyhedron.constructor', 'Polyhedron') +lazy_import('sage.libs.pari.all', 'pari') +lazy_import('sage.matrix.constructor', ['matrix', 'column_matrix']) +lazy_import('sage.modules.free_module_element', 'vector') +lazy_import('sage.rings.number_field.unit_group', 'UnitGroup') +lazy_import('sage.rings.real_mpfr', 'RealField') def ZZ_points_of_bounded_height(PS, dim, bound): diff --git a/src/sage/schemes/projective/projective_homset.py b/src/sage/schemes/projective/projective_homset.py index bc1a781c00b..b1dca24495f 100644 --- a/src/sage/schemes/projective/projective_homset.py +++ b/src/sage/schemes/projective/projective_homset.py @@ -37,20 +37,21 @@ # http://www.gnu.org/licenses/ # ***************************************************************************** -from sage.rings.integer_ring import ZZ -from sage.rings.real_mpfr import RR -from sage.rings.cc import CC -from sage.schemes.generic.homset import SchemeHomset_points, SchemeHomset_generic - -from sage.misc.verbose import verbose +from copy import copy -from sage.rings.rational_field import RationalField from sage.categories.fields import Fields from sage.categories.number_fields import NumberFields +from sage.misc.lazy_import import lazy_import +from sage.misc.verbose import verbose from sage.rings.finite_rings.finite_field_base import FiniteField +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.schemes.generic.algebraic_scheme import AlgebraicScheme_subscheme -from copy import copy +from sage.schemes.generic.homset import SchemeHomset_points, SchemeHomset_generic + +lazy_import('sage.rings.cc', 'CC') +lazy_import('sage.rings.real_mpfr', 'RR') # ******************************************************************* diff --git a/src/sage/schemes/projective/projective_morphism.py b/src/sage/schemes/projective/projective_morphism.py index 339406cd9d6..b6c93310550 100644 --- a/src/sage/schemes/projective/projective_morphism.py +++ b/src/sage/schemes/projective/projective_morphism.py @@ -58,16 +58,16 @@ # **************************************************************************** import sys -from sage.arith.misc import GCD as gcd from sage.arith.functions import lcm -from sage.misc.misc_c import prod +from sage.arith.misc import GCD as gcd from sage.misc.cachefunc import cached_method +from sage.misc.misc_c import prod from sage.misc.lazy_attribute import lazy_attribute +from sage.misc.lazy_import import lazy_import import sage.rings.abc -from sage.rings.integer import Integer -from sage.rings.algebraic_closure_finite_field import AlgebraicClosureFiniteField_generic from sage.rings.finite_rings.finite_field_base import FiniteField from sage.rings.fraction_field import FractionField +from sage.rings.integer import Integer from sage.rings.integer_ring import ZZ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.rings.quotient_ring import QuotientRing_generic @@ -78,6 +78,16 @@ from sage.categories.homset import Hom, End from sage.categories.fields import Fields +lazy_import('sage.dynamics.arithmetic_dynamics.generic_ds', 'DynamicalSystem') +lazy_import('sage.dynamics.arithmetic_dynamics.projective_ds', + ['DynamicalSystem_projective', 'DynamicalSystem_projective_field', + 'DynamicalSystem_projective_finite_field']) +lazy_import('sage.rings.algebraic_closure_finite_field', 'AlgebraicClosureFiniteField_generic') +lazy_import('sage.rings.number_field.number_field_ideal', 'NumberFieldFractionalIdeal') +lazy_import('sage.rings.padics.padic_base_generic', 'pAdicGeneric') +lazy_import('sage.rings.padics.padic_valuation', 'pAdicValuation_base') + + _NumberFields = NumberFields() _FiniteFields = FiniteFields() _Fields = Fields() @@ -618,7 +628,6 @@ def _matrix_times_polymap_(self, mat, h): ((1/3*i)*x^2 + (1/2*i)*y^2 : i*y^2) """ from sage.modules.free_module_element import vector - from sage.dynamics.arithmetic_dynamics.generic_ds import DynamicalSystem if not mat.is_square(): raise ValueError("matrix must be square") @@ -664,7 +673,6 @@ def _polymap_times_matrix_(self, mat, h): (-1/3*x^2 - 1/2*y^2 : -y^2) """ from sage.modules.free_module_element import vector - from sage.dynamics.arithmetic_dynamics.generic_ds import DynamicalSystem if not mat.is_square(): raise ValueError("matrix must be square") if mat.nrows() != self.domain().ngens(): @@ -716,14 +724,10 @@ def as_dynamical_system(self): sage: g is f # needs sage.schemes True """ - from sage.dynamics.arithmetic_dynamics.generic_ds import DynamicalSystem if isinstance(self, DynamicalSystem): return self if not self.is_endomorphism(): raise TypeError("must be an endomorphism") - from sage.dynamics.arithmetic_dynamics.projective_ds import DynamicalSystem_projective - from sage.dynamics.arithmetic_dynamics.projective_ds import DynamicalSystem_projective_field - from sage.dynamics.arithmetic_dynamics.projective_ds import DynamicalSystem_projective_finite_field R = self.base_ring() if R not in _Fields: return DynamicalSystem_projective(list(self), self.domain()) @@ -948,7 +952,6 @@ def normalize_coordinates(self, **kwds): # defined by the ideal/valuation ideal = kwds.pop('ideal', None) if ideal is not None: - from sage.rings.number_field.number_field_ideal import NumberFieldFractionalIdeal if not (ideal in ZZ or isinstance(ideal, NumberFieldFractionalIdeal)): raise TypeError('ideal must be an ideal of a number field, not %s' % ideal) if isinstance(ideal, NumberFieldFractionalIdeal): @@ -980,7 +983,6 @@ def normalize_coordinates(self, **kwds): valuation = kwds.pop('valuation', None) if valuation is not None: - from sage.rings.padics.padic_valuation import pAdicValuation_base if not isinstance(valuation, pAdicValuation_base): raise TypeError('valuation must be a valuation on a number field, not %s' % valuation) if valuation.domain() != self.base_ring(): @@ -1048,7 +1050,6 @@ def normalize_coordinates(self, **kwds): self.scale_by(1 / GCD) # If R is not p-adic, we make the first coordinate positive - from sage.rings.padics.padic_base_generic import pAdicGeneric if not isinstance(R, pAdicGeneric): if self[0].lc() < 0: self.scale_by(-1) diff --git a/src/sage/schemes/projective/projective_point.py b/src/sage/schemes/projective/projective_point.py index 1efc16af934..62d51c18f68 100644 --- a/src/sage/schemes/projective/projective_point.py +++ b/src/sage/schemes/projective/projective_point.py @@ -26,26 +26,32 @@ # https://www.gnu.org/licenses/ # **************************************************************************** +from copy import copy + +from sage.arith.functions import lcm +from sage.arith.misc import gcd from sage.categories.integral_domains import IntegralDomains from sage.categories.number_fields import NumberFields -_NumberFields = NumberFields() -from sage.rings.integer_ring import ZZ +from sage.misc.lazy_import import lazy_import +from sage.misc.misc_c import prod +from sage.rings.abc import Order from sage.rings.fraction_field import FractionField -from sage.rings.number_field.order import Order as NumberFieldOrder -from sage.rings.qqbar import number_field_elements_from_algebraics +from sage.rings.integer_ring import ZZ from sage.rings.quotient_ring import QuotientRing_generic from sage.rings.rational_field import QQ -from sage.arith.misc import GCD as gcd -from sage.arith.functions import lcm -from sage.misc.misc_c import prod - -from copy import copy +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.sequence import Sequence 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() + # -------------------- @@ -161,8 +167,6 @@ def __init__(self, X, v, check=True): SchemeMorphism.__init__(self, X) if check: - from sage.schemes.elliptic_curves.ell_point import EllipticCurvePoint_field - from sage.rings.ring import CommutativeRing d = X.codomain().ambient_space().ngens() if is_SchemeMorphism(v) or isinstance(v, EllipticCurvePoint_field): v = list(v) @@ -749,7 +753,7 @@ def global_height(self, prec=None): if prec is None: prec = 53 K = self.codomain().base_ring() - if K in _NumberFields or isinstance(K, NumberFieldOrder) or K == ZZ: + if K in _NumberFields or K is ZZ or isinstance(K, Order): P = self else: try: @@ -758,7 +762,7 @@ def global_height(self, prec=None): raise TypeError("must be defined over an algebraic field") else: K = P.codomain().base_ring() - if isinstance(K, NumberFieldOrder): + if isinstance(K, Order): K = K.number_field() # first get rid of the denominators denom = lcm([xi.denominator() for xi in P]) @@ -1138,8 +1142,6 @@ def __init__(self, X, v, check=True): self._normalized = False if check: - from sage.schemes.elliptic_curves.ell_point import EllipticCurvePoint_field - from sage.rings.ring import CommutativeRing d = X.codomain().ambient_space().ngens() if is_SchemeMorphism(v) or isinstance(v, EllipticCurvePoint_field): v = list(v) diff --git a/src/sage/schemes/projective/projective_rational_point.py b/src/sage/schemes/projective/projective_rational_point.py index bc4b3fbdcd4..4e68426fb1f 100644 --- a/src/sage/schemes/projective/projective_rational_point.py +++ b/src/sage/schemes/projective/projective_rational_point.py @@ -54,19 +54,23 @@ # (at your option) any later version. # https://www.gnu.org/licenses/ # **************************************************************************** + from itertools import product from sage.arith.misc import gcd, next_prime, previous_prime, crt from sage.arith.srange import srange -from sage.rings.integer_ring import ZZ -from sage.rings.real_mpfr import RR -from sage.rings.finite_rings.finite_field_constructor import FiniteField as GF +from sage.misc.lazy_import import lazy_import from sage.misc.misc_c import prod from sage.misc.mrange import xmrange from sage.schemes.generic.scheme import Scheme from sage.parallel.ncpus import ncpus from sage.parallel.use_fork import p_iter_fork -from sage.matrix.constructor import matrix +from sage.rings.finite_rings.finite_field_constructor import FiniteField as GF +from sage.rings.integer_ring import ZZ +from sage.schemes.generic.scheme import is_Scheme + +lazy_import('sage.matrix.constructor', 'matrix') +lazy_import('sage.rings.real_mpfr', 'RR') def enum_projective_rational_field(X, B): diff --git a/src/sage/schemes/projective/projective_space.py b/src/sage/schemes/projective/projective_space.py index c05588f4698..c8e50b98cd1 100644 --- a/src/sage/schemes/projective/projective_space.py +++ b/src/sage/schemes/projective/projective_space.py @@ -80,6 +80,8 @@ # **************************************************************************** from itertools import product +import sage.rings.abc + from sage.arith.misc import gcd, binomial from sage.rings.finite_rings.finite_field_base import FiniteField @@ -90,7 +92,6 @@ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.rings.rational_field import QQ, RationalField from sage.rings.fraction_field import FractionField -from sage.rings.number_field.order import Order from sage.categories.fields import Fields from sage.categories.rings import Rings @@ -98,19 +99,15 @@ from sage.categories.homset import Hom from sage.categories.map import Map from sage.misc.latex import latex +from sage.misc.lazy_import import lazy_import from sage.misc.misc_c import prod from sage.misc.persist import register_unpickle_override from sage.structure.category_object import normalize_names from sage.structure.unique_representation import UniqueRepresentation from sage.combinat.integer_vector import IntegerVectors -from sage.combinat.integer_vector_weighted import WeightedIntegerVectors from sage.combinat.permutation import Permutation -from sage.combinat.tuple import Tuples -from sage.combinat.tuple import UnorderedTuples from sage.combinat.subset import Subsets -from sage.matrix.constructor import matrix -from sage.modules.free_module_element import prepare from sage.schemes.generic.ambient_space import AmbientSpace from sage.schemes.projective.projective_homset import (SchemeHomset_points_projective_ring, SchemeHomset_points_projective_field, @@ -122,6 +119,17 @@ SchemeMorphism_polynomial_projective_space_field, SchemeMorphism_polynomial_projective_space_finite_field) +lazy_import('sage.combinat.integer_vector_weighted', 'WeightedIntegerVectors') +lazy_import('sage.combinat.tuple', ['Tuples', 'UnorderedTuples']) +lazy_import('sage.dynamics.arithmetic_dynamics.projective_ds', 'DynamicalSystem_projective') +lazy_import('sage.matrix.constructor', 'matrix') +lazy_import('sage.modules.free_module_element', 'prepare') +lazy_import('sage.schemes.generic.algebraic_scheme', 'AlgebraicScheme_subscheme') +lazy_import('sage.schemes.product_projective.space', + ['ProductProjectiveSpaces', 'ProductProjectiveSpaces_ring']) +lazy_import('sage.schemes.projective.projective_subscheme', + ['AlgebraicScheme_subscheme_projective', 'AlgebraicScheme_subscheme_projective_field']) + # for better efficiency _Fields = Fields() @@ -511,7 +519,6 @@ def __pow__(self, m): mm = int(m) if mm != m: raise ValueError("m must be an integer") - from sage.schemes.product_projective.space import ProductProjectiveSpaces return ProductProjectiveSpaces([self.dimension_relative()] * mm, self.base_ring()) def __mul__(self, right): @@ -562,11 +569,7 @@ def __mul__(self, right): if self.base_ring() != right.base_ring(): raise ValueError('Must have the same base ring') - from sage.schemes.product_projective.space import ProductProjectiveSpaces_ring - from sage.schemes.product_projective.space import ProductProjectiveSpaces - from sage.schemes.generic.algebraic_scheme import AlgebraicScheme_subscheme - - if isinstance(right, (ProductProjectiveSpaces_ring)): + if isinstance(right, ProductProjectiveSpaces_ring): return ProductProjectiveSpaces([self] + right.components()) elif isinstance(right, ProjectiveSpace_ring): if self is right: @@ -990,8 +993,6 @@ def subscheme(self, X): "_test_elements_eq_symmetric", "_test_elements_eq_transitive",\ "_test_elements_neq"]) """ - from sage.schemes.projective.projective_subscheme import (AlgebraicScheme_subscheme_projective, - AlgebraicScheme_subscheme_projective_field) R = self.base_ring() if R.is_field() and R.is_exact(): return AlgebraicScheme_subscheme_projective_field(self, X) @@ -1175,7 +1176,7 @@ def points_of_bounded_height(self, **kwds): elif R in NumberFields(): # True for the rational field as well, so check RationalField first field_type = True - elif (R is ZZ) or (isinstance(R, Order) and R.is_integrally_closed()): # Ensure ring of integers / maximal order + elif R is ZZ or (isinstance(R, sage.rings.abc.Order) and R.is_integrally_closed()): # Ensure ring of integers / maximal order is_ring_of_ints = True else: raise NotImplementedError("self must be a projective space over a number field or a ring of integers") @@ -1364,7 +1365,6 @@ def Lattes_map(self, E, m): x, y = R.gens() phi = F[0].parent().hom([x], R) F = [phi(F[0]).homogenize(y), phi(F[1]).homogenize(y) * y] - from sage.dynamics.arithmetic_dynamics.projective_ds import DynamicalSystem_projective return DynamicalSystem_projective(F, domain=self) def cartesian_product(self, other): @@ -1389,7 +1389,6 @@ def cartesian_product(self, other): sage: PP.gens() (x0, x1, y0, y1, y2) """ - from sage.schemes.product_projective.space import ProductProjectiveSpaces return ProductProjectiveSpaces([self, other]) def chebyshev_polynomial(self, n, kind='first', monic=False): @@ -1556,7 +1555,6 @@ def veronese_embedding(self, d, CS=None, order='lex'): def point_transformation_matrix(self, points_source, points_target, normalize=True): r""" - Returns a unique element of PGL that transforms one set of points to another. Given a projective space of dimension n and a set of n+2 source points and a set of n+2 target @@ -1898,7 +1896,6 @@ def hyperplane_transformation_matrix(self, plane_1, plane_2): ... ValueError: plane_1 must be defined by a single degree 1 equation """ - from sage.schemes.projective.projective_subscheme import AlgebraicScheme_subscheme_projective if not isinstance(plane_1, AlgebraicScheme_subscheme_projective): raise TypeError('plane_1 must be a subscheme') if not isinstance(plane_2, AlgebraicScheme_subscheme_projective): diff --git a/src/sage/schemes/projective/projective_subscheme.py b/src/sage/schemes/projective/projective_subscheme.py index 6135a62b1cb..eff64907afc 100644 --- a/src/sage/schemes/projective/projective_subscheme.py +++ b/src/sage/schemes/projective/projective_subscheme.py @@ -22,19 +22,19 @@ # **************************************************************************** from sage.arith.misc import binomial - from sage.categories.fields import Fields from sage.categories.homset import Hom - -from sage.matrix.constructor import matrix - +from sage.misc.lazy_import import lazy_import 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.schemes.generic.algebraic_scheme import AlgebraicScheme_subscheme from sage.schemes.projective.projective_morphism import SchemeMorphism_polynomial_projective_subscheme_field +lazy_import('sage.dynamics.arithmetic_dynamics.generic_ds', 'DynamicalSystem') +lazy_import('sage.matrix.constructor', 'matrix') +lazy_import('sage.schemes.elliptic_curves.ell_generic', 'EllipticCurve_generic', as_='EllipticCurve') + class AlgebraicScheme_subscheme_projective(AlgebraicScheme_subscheme): r""" @@ -183,8 +183,8 @@ def dimension(self): Something less obvious:: sage: P3. = ProjectiveSpace(4, QQ) - sage: X = P3.subscheme([x^2, x^2*y^2 + z^2*t^2, z^2 - w^2, 10*x^2 + w^2 - z^2]) - sage: X + sage: X = P3.subscheme([x^2, x^2*y^2 + z^2*t^2, + ....: z^2 - w^2, 10*x^2 + w^2 - z^2]); X Closed subscheme of Projective Space of dimension 4 over Rational Field defined by: x^2, x^2*y^2 + z^2*t^2, @@ -509,7 +509,6 @@ def orbit(self, f, N) -> list: ... TypeError: orbit bounds must be non-negative """ - from sage.dynamics.arithmetic_dynamics.generic_ds import DynamicalSystem if not isinstance(f, DynamicalSystem): raise TypeError("map must be a dynamical system for iteration") if not isinstance(N, (list, tuple)): @@ -753,11 +752,12 @@ def _forward_image(self, f, check=True): ... TypeError: subscheme must be in ambient space of domain of map """ - dom = f.domain() - codom = f.codomain() if check: if not f.is_morphism(): raise TypeError("map must be a morphism") + dom = f.domain() + codom = f.codomain() + if check: if self.ambient_space() != dom: raise TypeError("subscheme must be in ambient space of domain of map") CR_dom = dom.coordinate_ring() @@ -1442,7 +1442,7 @@ def global_height(self, prec=None): sage: P. = ProjectiveSpace(QQ, 2) sage: X = P.subscheme([z^2 - 101*y^2 - 3*x*z]) - sage: X.global_height() # long time # needs sage.libs.singular + sage: X.global_height() # long time # needs sage.libs.singular 4.61512051684126 """ return self.Chow_form().global_height(prec) diff --git a/src/sage/schemes/riemann_surfaces/riemann_surface.py b/src/sage/schemes/riemann_surfaces/riemann_surface.py index b50cc038f47..28d761803b7 100644 --- a/src/sage/schemes/riemann_surfaces/riemann_surface.py +++ b/src/sage/schemes/riemann_surfaces/riemann_surface.py @@ -116,7 +116,6 @@ from sage.arith.functions import lcm from sage.arith.misc import GCD, algdep from sage.ext.fast_callable import fast_callable -from sage.functions.log import lambert_w from sage.graphs.graph import Graph from sage.groups.matrix_gps.finitely_generated import MatrixGroup from sage.groups.perm_gps.permgroup_named import SymmetricGroup @@ -3108,6 +3107,8 @@ def initialise(z, i): else: n_steps = 15 + from sage.functions.log import lambert_w + V = VectorSpace(self._CC, self.genus) h = one Nh = (-lambert_w(-1, -tau / 2) / la).log().ceil() diff --git a/src/sage/schemes/toric/divisor.py b/src/sage/schemes/toric/divisor.py index ff0373b3bef..8ce2a235d52 100644 --- a/src/sage/schemes/toric/divisor.py +++ b/src/sage/schemes/toric/divisor.py @@ -171,11 +171,11 @@ import sage.geometry.abc from sage.geometry.polyhedron.constructor import Polyhedron from sage.geometry.toric_lattice_element import ToricLatticeElement -from sage.topology.simplicial_complex import SimplicialComplex from sage.matrix.constructor import matrix from sage.misc.cachefunc import cached_method from sage.misc.flatten import flatten from sage.misc.latex import latex +from sage.misc.lazy_import import lazy_import from sage.misc.misc_c import prod from sage.modules.free_module_element import vector from sage.modules.free_module import (FreeModule_ambient_field, @@ -189,6 +189,8 @@ from sage.structure.unique_representation import UniqueRepresentation from sage.structure.element import Vector +lazy_import('sage.topology.simplicial_complex', 'SimplicialComplex') + def is_ToricDivisor(x): r""" diff --git a/src/sage/schemes/toric/toric_subscheme.py b/src/sage/schemes/toric/toric_subscheme.py index cddcc91f474..0abe5530f08 100644 --- a/src/sage/schemes/toric/toric_subscheme.py +++ b/src/sage/schemes/toric/toric_subscheme.py @@ -20,7 +20,8 @@ # https://www.gnu.org/licenses/ # **************************************************************************** -from sage.calculus.functions import jacobian +from sage.misc.lazy_import import lazy_import +lazy_import("sage.calculus.functions", "jacobian") from sage.rings.integer_ring import ZZ from sage.schemes.generic.algebraic_scheme import AlgebraicScheme_subscheme diff --git a/src/sage/schemes/toric/variety.py b/src/sage/schemes/toric/variety.py index c1ca8351263..ea9ce4477a8 100644 --- a/src/sage/schemes/toric/variety.py +++ b/src/sage/schemes/toric/variety.py @@ -236,6 +236,7 @@ Every cone defines a torus orbit closure, and hence a (co)homology class:: + sage: # needs sage.libs.singular sage: HH.gens() ([3*z4], [3*z4], [z4], [z4], [z4]) sage: list(map(HH, P4_11133.fan(1))) @@ -248,6 +249,7 @@ We can compute intersection numbers by integrating top-dimensional cohomology classes:: + sage: # needs sage.libs.singular sage: D = P4_11133.divisor(0) sage: HH(D) [3*z4] @@ -302,7 +304,8 @@ import sys -from sage.functions.all import factorial +from sage.misc.lazy_import import lazy_import +lazy_import("sage.functions.all", "factorial") import sage.geometry.abc from sage.geometry.cone import Cone from sage.geometry.fan import Fan From 526593e8b4b0b901269e240672276e23c5751536 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Sun, 2 Jun 2024 19:36:58 -0700 Subject: [PATCH 02/11] Codestyle fixes --- src/sage/schemes/berkovich/berkovich_space.py | 1 - src/sage/schemes/projective/projective_point.py | 2 -- 2 files changed, 3 deletions(-) diff --git a/src/sage/schemes/berkovich/berkovich_space.py b/src/sage/schemes/berkovich/berkovich_space.py index d566ccfa0dd..0d9af5518f2 100644 --- a/src/sage/schemes/berkovich/berkovich_space.py +++ b/src/sage/schemes/berkovich/berkovich_space.py @@ -55,7 +55,6 @@ lazy_import('sage.rings.number_field.number_field_ideal', 'NumberFieldFractionalIdeal') - def is_Berkovich(space) -> bool: """ Check if ``space`` is a Berkovich space. diff --git a/src/sage/schemes/projective/projective_point.py b/src/sage/schemes/projective/projective_point.py index 62d51c18f68..2e9dd6fca9f 100644 --- a/src/sage/schemes/projective/projective_point.py +++ b/src/sage/schemes/projective/projective_point.py @@ -52,8 +52,6 @@ _NumberFields = NumberFields() - - # -------------------- # Projective varieties # -------------------- From cc79bffe7d997487c623ee60034d1f5e95c199e9 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Sun, 2 Jun 2024 20:43:34 -0700 Subject: [PATCH 03/11] src/sage/schemes/elliptic_curves/ell_curve_isogeny.py: Fix # needs --- src/sage/schemes/elliptic_curves/ell_curve_isogeny.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/sage/schemes/elliptic_curves/ell_curve_isogeny.py b/src/sage/schemes/elliptic_curves/ell_curve_isogeny.py index 2d7291aea10..1345d7ba8ee 100644 --- a/src/sage/schemes/elliptic_curves/ell_curve_isogeny.py +++ b/src/sage/schemes/elliptic_curves/ell_curve_isogeny.py @@ -3720,8 +3720,9 @@ def compute_intermediate_curves(E1, E2): EXAMPLES:: - sage: # needs sage.rings.finite_rings sage: from sage.schemes.elliptic_curves.ell_curve_isogeny import compute_intermediate_curves + + sage: # needs sage.rings.finite_rings sage: E = EllipticCurve(GF(83), [1,0,1,1,0]) sage: R. = GF(83)[]; f = x + 24 sage: phi = EllipticCurveIsogeny(E, f) From c241e3624befc6f31054a48ea58348149dcdb6ec Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Sun, 2 Jun 2024 20:50:43 -0700 Subject: [PATCH 04/11] src/sage/schemes/berkovich/berkovich_space.py: Remove duplicate imports --- src/sage/schemes/berkovich/berkovich_space.py | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/sage/schemes/berkovich/berkovich_space.py b/src/sage/schemes/berkovich/berkovich_space.py index 0d9af5518f2..f64b7835f79 100644 --- a/src/sage/schemes/berkovich/berkovich_space.py +++ b/src/sage/schemes/berkovich/berkovich_space.py @@ -31,13 +31,6 @@ # https://www.gnu.org/licenses/ # **************************************************************************** -from sage.schemes.berkovich.berkovich_cp_element import (Berkovich_Element_Cp_Affine, - Berkovich_Element_Cp_Projective) -from sage.structure.parent import Parent -from sage.schemes.affine.affine_space import AffineSpace_generic -from sage.schemes.projective.projective_space import ProjectiveSpace_ring, ProjectiveSpace -from sage.structure.unique_representation import UniqueRepresentation -from sage.categories.number_fields import NumberFields import sage.rings.abc from sage.categories.number_fields import NumberFields @@ -45,10 +38,10 @@ from sage.misc.lazy_import import lazy_import from sage.rings.integer_ring import ZZ from sage.rings.rational_field import QQ -from sage.schemes.affine.affine_space import is_AffineSpace +from sage.schemes.affine.affine_space import AffineSpace_generic from sage.schemes.berkovich.berkovich_cp_element import (Berkovich_Element_Cp_Affine, Berkovich_Element_Cp_Projective) -from sage.schemes.projective.projective_space import is_ProjectiveSpace, ProjectiveSpace +from sage.schemes.projective.projective_space import ProjectiveSpace_ring, ProjectiveSpace from sage.structure.parent import Parent from sage.structure.unique_representation import UniqueRepresentation From 80baf6beb34c3fe97f3634923eec70fdd11b8972 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Sun, 2 Jun 2024 20:53:04 -0700 Subject: [PATCH 05/11] src/sage/schemes/curves/zariski_vankampen.py: Fix whitespace --- src/sage/schemes/curves/zariski_vankampen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sage/schemes/curves/zariski_vankampen.py b/src/sage/schemes/curves/zariski_vankampen.py index 5e035c3811c..b4c1cb7bfe9 100644 --- a/src/sage/schemes/curves/zariski_vankampen.py +++ b/src/sage/schemes/curves/zariski_vankampen.py @@ -44,8 +44,8 @@ import itertools from copy import copy - from itertools import combinations + from sage.combinat.permutation import Permutation from sage.functions.generalized import sign from sage.geometry.voronoi_diagram import VoronoiDiagram From 4d0965135620e51b59a2140a61d297fbbaf619cb Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Sun, 2 Jun 2024 21:05:06 -0700 Subject: [PATCH 06/11] src/sage/schemes/elliptic_curves: Sort imports --- src/sage/schemes/elliptic_curves/ell_point.py | 20 +++--- .../elliptic_curves/ell_rational_field.py | 71 +++++++++---------- .../schemes/elliptic_curves/lseries_ell.py | 11 +-- 3 files changed, 47 insertions(+), 55 deletions(-) diff --git a/src/sage/schemes/elliptic_curves/ell_point.py b/src/sage/schemes/elliptic_curves/ell_point.py index 2d3037733fc..568d76ffc94 100644 --- a/src/sage/schemes/elliptic_curves/ell_point.py +++ b/src/sage/schemes/elliptic_curves/ell_point.py @@ -121,26 +121,22 @@ import sage.rings.abc from sage.misc.lazy_import import lazy_import +from sage.rings.finite_rings.integer_mod import Mod from sage.rings.infinity import Infinity as oo from sage.rings.integer import Integer from sage.rings.integer_ring import ZZ from sage.rings.padics.precision_error import PrecisionError from sage.rings.rational_field import QQ -from sage.rings.finite_rings.integer_mod import Mod -from sage.rings.real_mpfr import RealField -from sage.rings.real_mpfr import RR -from sage.structure.element import AdditiveGroupElement -from sage.structure.sequence import Sequence -from sage.structure.richcmp import richcmp - -from sage.structure.coerce_actions import IntegerMulAction - +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.schemes.generic.morphism import is_SchemeMorphism - -from .constructor import EllipticCurve +from sage.structure.coerce_actions import IntegerMulAction +from sage.structure.element import AdditiveGroupElement +from sage.structure.richcmp import richcmp +from sage.structure.sequence import Sequence lazy_import('sage.rings.padics.factory', 'Qp') diff --git a/src/sage/schemes/elliptic_curves/ell_rational_field.py b/src/sage/schemes/elliptic_curves/ell_rational_field.py index 96a009b7b2c..441ba994e63 100644 --- a/src/sage/schemes/elliptic_curves/ell_rational_field.py +++ b/src/sage/schemes/elliptic_curves/ell_rational_field.py @@ -47,60 +47,55 @@ # # https://www.gnu.org/licenses/ ############################################################################## -from itertools import product - -from . import constructor -from . import BSD -from .ell_generic import EllipticCurve_generic -from . import ell_modular_symbols -from .ell_number_field import EllipticCurve_number_field -from . import ell_point -from . import ell_tate_curve -from . import ell_torsion -from . import heegner -from . import mod5family -from .modular_parametrization import ModularParameterization -from . import padics -from sage.modular.modsym.modsym import ModularSymbols -from sage.modular.pollack_stevens.space import ps_modsym_from_elliptic_curve +from copy import copy +from itertools import product +from math import sqrt +import sage.arith.all as arith +import sage.databases.cremona import sage.modular.modform.constructor import sage.modular.modform.element -import sage.databases.cremona -import sage.arith.all as arith -from sage.rings.finite_rings.finite_field_constructor import FiniteField as GF +from sage.matrix.matrix_space import MatrixSpace +from sage.misc.cachefunc import cached_method +from sage.misc.lazy_import import lazy_import +from sage.misc.misc_c import prod, prod as mul +from sage.misc.verbose import verbose as verbose_verbose +from sage.modular.modsym.modsym import ModularSymbols +from sage.modular.pollack_stevens.space import ps_modsym_from_elliptic_curve +from sage.rings.complex_mpfr import ComplexField from sage.rings.fast_arith import prime_range -from sage.rings.real_mpfr import RR -from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing -from sage.structure.element import RingElement -from sage.rings.power_series_ring import PowerSeriesRing +from sage.rings.finite_rings.finite_field_constructor import FiniteField as GF from sage.rings.infinity import Infinity as oo +from sage.rings.integer import Integer from sage.rings.integer_ring import ZZ, IntegerRing +from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing +from sage.rings.power_series_ring import PowerSeriesRing from sage.rings.rational_field import QQ -from sage.rings.integer import Integer -from sage.rings.real_mpfi import RealIntervalField -from sage.rings.real_mpfr import RealField -from sage.rings.complex_mpfr import ComplexField from sage.rings.rational_field import RationalField - +from sage.rings.real_mpfi import RealIntervalField +from sage.rings.real_mpfr import RealField, RR from sage.structure.coerce import py_scalar_to_element -from sage.structure.element import Element -from sage.misc.misc_c import prod as mul -from sage.misc.misc_c import prod -from sage.misc.verbose import verbose as verbose_verbose +from sage.structure.element import Element, RingElement -from sage.misc.lazy_import import lazy_import lazy_import("sage.functions.log", "log") - -from sage.matrix.matrix_space import MatrixSpace lazy_import('sage.libs.pari.all', 'pari') lazy_import("sage.functions.gamma", "gamma_inc") -from math import sqrt lazy_import('sage.interfaces.gp', 'gp') -from sage.misc.cachefunc import cached_method -from copy import copy + +from . import constructor +from . import BSD +from .ell_generic import EllipticCurve_generic +from . import ell_modular_symbols +from .ell_number_field import EllipticCurve_number_field +from . import ell_point +from . import ell_tate_curve +from . import ell_torsion +from . import heegner +from . import mod5family +from .modular_parametrization import ModularParameterization +from . import padics Q = RationalField() C = ComplexField() diff --git a/src/sage/schemes/elliptic_curves/lseries_ell.py b/src/sage/schemes/elliptic_curves/lseries_ell.py index 6a73953ff62..cd5cd43cbdf 100644 --- a/src/sage/schemes/elliptic_curves/lseries_ell.py +++ b/src/sage/schemes/elliptic_curves/lseries_ell.py @@ -20,12 +20,13 @@ # http://www.gnu.org/licenses/ #***************************************************************************** -from sage.structure.sage_object import SageObject -from sage.rings.real_mpfr import RealField -from sage.rings.rational_field import RationalField -from math import sqrt, log, ceil -from sage.misc.verbose import verbose +from math import ceil, log, sqrt + from sage.misc.cachefunc import cached_method +from sage.misc.verbose import verbose +from sage.rings.rational_field import RationalField +from sage.rings.real_mpfr import RealField +from sage.structure.sage_object import SageObject class Lseries_ell(SageObject): From 3e6acd5969a7e33ada8cce102bd877bf404102f4 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Sun, 2 Jun 2024 21:08:19 -0700 Subject: [PATCH 07/11] src/sage/schemes/elliptic_curves/ell_curve_isogeny.py: Remove unnecessary # needs --- src/sage/schemes/elliptic_curves/ell_curve_isogeny.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/sage/schemes/elliptic_curves/ell_curve_isogeny.py b/src/sage/schemes/elliptic_curves/ell_curve_isogeny.py index 1345d7ba8ee..b2a244998cd 100644 --- a/src/sage/schemes/elliptic_curves/ell_curve_isogeny.py +++ b/src/sage/schemes/elliptic_curves/ell_curve_isogeny.py @@ -192,7 +192,6 @@ def isogeny_codomain_from_kernel(E, kernel): EXAMPLES:: - sage: # needs sage.rings.finite_rings sage: from sage.schemes.elliptic_curves.ell_curve_isogeny import isogeny_codomain_from_kernel sage: E = EllipticCurve(GF(7), [1,0,1,0,1]) sage: R. = GF(7)[] @@ -403,7 +402,6 @@ def compute_codomain_kohel(E, kernel): EXAMPLES:: - sage: # needs sage.rings.finite_rings sage: from sage.schemes.elliptic_curves.ell_curve_isogeny import compute_codomain_kohel sage: E = EllipticCurve(GF(19), [1,2,3,4,5]) sage: phi = EllipticCurveIsogeny(E, [9,1]) @@ -3722,7 +3720,6 @@ def compute_intermediate_curves(E1, E2): sage: from sage.schemes.elliptic_curves.ell_curve_isogeny import compute_intermediate_curves - sage: # needs sage.rings.finite_rings sage: E = EllipticCurve(GF(83), [1,0,1,1,0]) sage: R. = GF(83)[]; f = x + 24 sage: phi = EllipticCurveIsogeny(E, f) From cfa6a7b8a8f2b01273b75adfb58cd29954f7268f Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Sat, 22 Jun 2024 13:05:15 -0700 Subject: [PATCH 08/11] src/sage/schemes: Sort imports --- src/sage/schemes/elliptic_curves/height.py | 17 +++++---- .../schemes/projective/projective_morphism.py | 14 ++++--- .../schemes/projective/projective_space.py | 37 +++++++++---------- 3 files changed, 34 insertions(+), 34 deletions(-) diff --git a/src/sage/schemes/elliptic_curves/height.py b/src/sage/schemes/elliptic_curves/height.py index 82a213cd9b7..9b5b6176b80 100644 --- a/src/sage/schemes/elliptic_curves/height.py +++ b/src/sage/schemes/elliptic_curves/height.py @@ -29,21 +29,22 @@ import numpy import math import bisect + from itertools import product -from sage.rings.integer_ring import ZZ -from sage.rings.rational_field import QQ -from sage.rings.infinity import infinity +from sage.arith.functions import lcm +from sage.arith.misc import factorial +from sage.ext.fast_callable import fast_callable +from sage.misc.cachefunc import cached_method +from sage.misc.lazy_import import lazy_import from sage.rings.cc import CC from sage.rings.complex_double import CDF +from sage.rings.infinity import infinity +from sage.rings.integer_ring import ZZ +from sage.rings.rational_field import QQ from sage.rings.real_double import RDF from sage.rings.real_mpfr import RR -from sage.misc.cachefunc import cached_method -from sage.arith.functions import lcm -from sage.arith.misc import factorial -from sage.ext.fast_callable import fast_callable -from sage.misc.lazy_import import lazy_import lazy_import("sage.functions.log", ["log", "exp"]) lazy_import("sage.rings.cif", "CIF") lazy_import("sage.rings.real_mpfi", "RIF") diff --git a/src/sage/schemes/projective/projective_morphism.py b/src/sage/schemes/projective/projective_morphism.py index b6c93310550..472d6227987 100644 --- a/src/sage/schemes/projective/projective_morphism.py +++ b/src/sage/schemes/projective/projective_morphism.py @@ -58,13 +58,19 @@ # **************************************************************************** import sys + +import sage.rings.abc + from sage.arith.functions import lcm from sage.arith.misc import GCD as gcd +from sage.categories.fields import Fields +from sage.categories.finite_fields import FiniteFields +from sage.categories.homset import Hom, End +from sage.categories.number_fields import NumberFields from sage.misc.cachefunc import cached_method -from sage.misc.misc_c import prod from sage.misc.lazy_attribute import lazy_attribute from sage.misc.lazy_import import lazy_import -import sage.rings.abc +from sage.misc.misc_c import prod from sage.rings.finite_rings.finite_field_base import FiniteField from sage.rings.fraction_field import FractionField from sage.rings.integer import Integer @@ -73,10 +79,6 @@ from sage.rings.quotient_ring import QuotientRing_generic from sage.rings.rational_field import QQ from sage.schemes.generic.morphism import SchemeMorphism_polynomial -from sage.categories.finite_fields import FiniteFields -from sage.categories.number_fields import NumberFields -from sage.categories.homset import Hom, End -from sage.categories.fields import Fields lazy_import('sage.dynamics.arithmetic_dynamics.generic_ds', 'DynamicalSystem') lazy_import('sage.dynamics.arithmetic_dynamics.projective_ds', diff --git a/src/sage/schemes/projective/projective_space.py b/src/sage/schemes/projective/projective_space.py index c8e50b98cd1..188bab9ba28 100644 --- a/src/sage/schemes/projective/projective_space.py +++ b/src/sage/schemes/projective/projective_space.py @@ -83,41 +83,38 @@ import sage.rings.abc from sage.arith.misc import gcd, binomial - -from sage.rings.finite_rings.finite_field_base import FiniteField -from sage.rings.integer import Integer -from sage.rings.integer_ring import ZZ -from sage.rings.polynomial.multi_polynomial_ring import is_MPolynomialRing -from sage.rings.polynomial.polynomial_ring import is_PolynomialRing -from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing -from sage.rings.rational_field import QQ, RationalField -from sage.rings.fraction_field import FractionField - from sage.categories.fields import Fields -from sage.categories.rings import Rings -from sage.categories.number_fields import NumberFields from sage.categories.homset import Hom from sage.categories.map import Map +from sage.categories.number_fields import NumberFields +from sage.categories.rings import Rings +from sage.combinat.integer_vector import IntegerVectors +from sage.combinat.permutation import Permutation +from sage.combinat.subset import Subsets from sage.misc.latex import latex from sage.misc.lazy_import import lazy_import from sage.misc.misc_c import prod from sage.misc.persist import register_unpickle_override - +from sage.rings.finite_rings.finite_field_base import FiniteField +from sage.rings.fraction_field import FractionField +from sage.rings.integer import Integer +from sage.rings.integer_ring import ZZ +from sage.rings.polynomial.multi_polynomial_ring import is_MPolynomialRing +from sage.rings.polynomial.polynomial_ring import is_PolynomialRing +from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing +from sage.rings.rational_field import QQ, RationalField +from sage.schemes.generic.ambient_space import AmbientSpace from sage.structure.category_object import normalize_names from sage.structure.unique_representation import UniqueRepresentation -from sage.combinat.integer_vector import IntegerVectors -from sage.combinat.permutation import Permutation -from sage.combinat.subset import Subsets -from sage.schemes.generic.ambient_space import AmbientSpace from sage.schemes.projective.projective_homset import (SchemeHomset_points_projective_ring, SchemeHomset_points_projective_field, SchemeHomset_polynomial_projective_space) -from sage.schemes.projective.projective_point import (SchemeMorphism_point_projective_ring, - SchemeMorphism_point_projective_field, - SchemeMorphism_point_projective_finite_field) from sage.schemes.projective.projective_morphism import (SchemeMorphism_polynomial_projective_space, SchemeMorphism_polynomial_projective_space_field, SchemeMorphism_polynomial_projective_space_finite_field) +from sage.schemes.projective.projective_point import (SchemeMorphism_point_projective_ring, + SchemeMorphism_point_projective_field, + SchemeMorphism_point_projective_finite_field) lazy_import('sage.combinat.integer_vector_weighted', 'WeightedIntegerVectors') lazy_import('sage.combinat.tuple', ['Tuples', 'UnorderedTuples']) From 635a14f1767dd129bea5802d1868b36e019832d5 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Mon, 3 Jun 2024 09:59:27 -0700 Subject: [PATCH 09/11] src/sage/schemes/elliptic_curves/ell_curve_isogeny.py: Revert add of blank line in doctest --- src/sage/schemes/elliptic_curves/ell_curve_isogeny.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/sage/schemes/elliptic_curves/ell_curve_isogeny.py b/src/sage/schemes/elliptic_curves/ell_curve_isogeny.py index b2a244998cd..bce46802b9c 100644 --- a/src/sage/schemes/elliptic_curves/ell_curve_isogeny.py +++ b/src/sage/schemes/elliptic_curves/ell_curve_isogeny.py @@ -3719,7 +3719,6 @@ def compute_intermediate_curves(E1, E2): EXAMPLES:: sage: from sage.schemes.elliptic_curves.ell_curve_isogeny import compute_intermediate_curves - sage: E = EllipticCurve(GF(83), [1,0,1,1,0]) sage: R. = GF(83)[]; f = x + 24 sage: phi = EllipticCurveIsogeny(E, f) From dc35e843e98a7547be2c18546f6363886c833bf2 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Mon, 3 Jun 2024 10:02:25 -0700 Subject: [PATCH 10/11] Sort imports, separate lazy_import --- .../hyperelliptic_generic.py | 12 +++++++----- src/sage/schemes/toric/toric_subscheme.py | 3 ++- src/sage/schemes/toric/variety.py | 19 +++++++++++-------- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py b/src/sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py index 42709c1a033..fcd904998dd 100644 --- a/src/sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +++ b/src/sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py @@ -33,16 +33,18 @@ # http://www.gnu.org/licenses/ #***************************************************************************** -from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing +import sage.schemes.curves.projective_curve as plane_curve + +from sage.misc.lazy_import import lazy_import from sage.rings.big_oh import O -from sage.rings.power_series_ring import PowerSeriesRing from sage.rings.laurent_series_ring import LaurentSeriesRing +from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing +from sage.rings.power_series_ring import PowerSeriesRing from sage.rings.real_mpfr import RR -from sage.misc.lazy_import import lazy_import -lazy_import("sage.functions.all", "log") from sage.structure.category_object import normalize_names -import sage.schemes.curves.projective_curve as plane_curve +lazy_import("sage.functions.all", "log") + def is_HyperellipticCurve(C): """ diff --git a/src/sage/schemes/toric/toric_subscheme.py b/src/sage/schemes/toric/toric_subscheme.py index 0abe5530f08..93f35acbc2e 100644 --- a/src/sage/schemes/toric/toric_subscheme.py +++ b/src/sage/schemes/toric/toric_subscheme.py @@ -21,10 +21,11 @@ # **************************************************************************** from sage.misc.lazy_import import lazy_import -lazy_import("sage.calculus.functions", "jacobian") from sage.rings.integer_ring import ZZ from sage.schemes.generic.algebraic_scheme import AlgebraicScheme_subscheme +lazy_import("sage.calculus.functions", "jacobian") + class AlgebraicScheme_subscheme_toric(AlgebraicScheme_subscheme): r""" diff --git a/src/sage/schemes/toric/variety.py b/src/sage/schemes/toric/variety.py index ea9ce4477a8..8cedd73e620 100644 --- a/src/sage/schemes/toric/variety.py +++ b/src/sage/schemes/toric/variety.py @@ -304,26 +304,29 @@ import sys -from sage.misc.lazy_import import lazy_import -lazy_import("sage.functions.all", "factorial") import sage.geometry.abc + +from sage.categories.fields import Fields from sage.geometry.cone import Cone from sage.geometry.fan import Fan +from sage.misc.cachefunc import cached_method from sage.misc.latex import latex +from sage.misc.lazy_import import lazy_import from sage.misc.misc_c import prod -from sage.misc.cachefunc import cached_method -from sage.structure.unique_representation import UniqueRepresentation from sage.modules.free_module_element import vector -from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.rings.integer_ring import ZZ -from sage.rings.rational_field import QQ -from sage.rings.quotient_ring_element import QuotientRingElement +from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.rings.quotient_ring import QuotientRing_generic +from sage.rings.quotient_ring_element import QuotientRingElement +from sage.rings.rational_field import QQ from sage.schemes.affine.affine_space import AffineSpace from sage.schemes.generic.ambient_space import AmbientSpace from sage.schemes.toric.homset import SchemeHomset_points_toric_field from sage.structure.category_object import certify_names -from sage.categories.fields import Fields +from sage.structure.unique_representation import UniqueRepresentation + +lazy_import("sage.functions.all", "factorial") + _Fields = Fields() From 13bc753f2e2f83ce8dcb934264bb7591edee7b6e Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Sat, 22 Jun 2024 15:46:39 -0700 Subject: [PATCH 11/11] src/sage/schemes/toric/variety.py: Fix # needs --- src/sage/schemes/toric/variety.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/sage/schemes/toric/variety.py b/src/sage/schemes/toric/variety.py index 8cedd73e620..b7c78bd8ab5 100644 --- a/src/sage/schemes/toric/variety.py +++ b/src/sage/schemes/toric/variety.py @@ -263,12 +263,14 @@ sage: AA = P4_11133.Chow_group(QQ) sage: list(map(AA, P4_11133.fan(1))) # long time (5s on sage.math, 2012) - [( 0 | 0 | 0 | 3 | 0 ), ( 0 | 0 | 0 | 3 | 0 ), ( 0 | 0 | 0 | 1 | 0 ), ( 0 | 0 | 0 | 1 | 0 ), ( 0 | 0 | 0 | 1 | 0 )] + [( 0 | 0 | 0 | 3 | 0 ), ( 0 | 0 | 0 | 3 | 0 ), + ( 0 | 0 | 0 | 1 | 0 ), ( 0 | 0 | 0 | 1 | 0 ), ( 0 | 0 | 0 | 1 | 0 )] sage: list(map(AA, P4_11133.fan(4))) # long time (5s on sage.math, 2012) - [( 1 | 0 | 0 | 0 | 0 ), ( 1 | 0 | 0 | 0 | 0 ), ( 1 | 0 | 0 | 0 | 0 ), ( 1 | 0 | 0 | 0 | 0 ), ( 1 | 0 | 0 | 0 | 0 )] - sage: AA(cone).intersection_with_divisor(D) # long time (4s on sage.math, 2013) + [( 1 | 0 | 0 | 0 | 0 ), ( 1 | 0 | 0 | 0 | 0 ), + ( 1 | 0 | 0 | 0 | 0 ), ( 1 | 0 | 0 | 0 | 0 ), ( 1 | 0 | 0 | 0 | 0 )] + sage: AA(cone).intersection_with_divisor(D) # long time (4s on sage.math, 2013) # needs sage.libs.singular ( 1 | 0 | 0 | 0 | 0 ) - sage: AA(cone).intersection_with_divisor(D).count_points() # long time + sage: AA(cone).intersection_with_divisor(D).count_points() # long time # needs sage.libs.singular 1 The real advantage of the Chow group is that