Skip to content

Commit 017f2ce

Browse files
author
Release Manager
committed
gh-38142: `sage.schemes`: Modularization fixes (imports) <!-- ^ Please provide a concise and informative title. --> <!-- ^ Don't put issue numbers in the title, do this in the PR description below. --> <!-- ^ For example, instead of "Fixes #12345" use "Introduce new method to calculate 1 + 2". --> <!-- v Describe your changes below in detail. --> <!-- v Why is this change required? What problem does it solve? --> <!-- v If this PR resolves an open issue, please link to it here. For example, "Fixes #12345". --> - Cherry-picked from #35095. ### 📝 Checklist <!-- Put an `x` in all the boxes that apply. --> - [x] The title is concise and informative. - [ ] The description explains in detail what this PR is about. - [x] I have linked a relevant issue or discussion. - [ ] I have created tests covering the changes. - [ ] I have updated the documentation and checked the documentation preview. ### ⌛ Dependencies <!-- List all open PRs that this PR logically depends on. For example, --> <!-- - #12345: short description why this is a dependency --> <!-- - #34567: ... --> URL: #38142 Reported by: Matthias Köppe Reviewer(s): Kwankyu Lee, Matthias Köppe
2 parents 424bcbc + 13bc753 commit 017f2ce

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+405
-362
lines changed

src/sage/schemes/affine/affine_homset.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@
3636

3737
from sage.misc.verbose import verbose
3838
from sage.rings.integer_ring import ZZ
39-
from sage.rings.real_mpfr import RR
40-
from sage.rings.cc import CC
4139
from sage.rings.rational_field import RationalField
4240
from sage.categories.fields import Fields
4341
from sage.categories.number_fields import NumberFields
@@ -268,6 +266,7 @@ def points(self, **kwds):
268266
if hasattr(X.base_ring(), 'precision'):
269267
numerical = True
270268
verbose("Warning: computations in the numerical fields are inexact;points may be computed partially or incorrectly.", level=0)
269+
from sage.rings.real_mpfr import RR
271270
zero_tol = RR(kwds.pop('zero_tolerance', 10**(-10)))
272271
if zero_tol <= 0:
273272
raise ValueError("tolerance must be positive")
@@ -438,7 +437,7 @@ def numerical_points(self, F=None, **kwds):
438437
"""
439438
from sage.schemes.affine.affine_space import AffineSpace_generic
440439
if F is None:
441-
F = CC
440+
from sage.rings.cc import CC as F
442441
if F not in Fields() or not hasattr(F, 'precision'):
443442
raise TypeError('F must be a numerical field')
444443
X = self.codomain()
@@ -455,6 +454,7 @@ def numerical_points(self, F=None, **kwds):
455454
return []
456455

457456
# if X zero-dimensional
457+
from sage.rings.real_mpfr import RR
458458
zero_tol = RR(kwds.pop('zero_tolerance', 10**(-10)))
459459
if zero_tol <= 0:
460460
raise ValueError("tolerance must be positive")

src/sage/schemes/affine/affine_morphism.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,6 @@
4949

5050
import sage.rings.abc
5151

52-
from sage.calculus.functions import jacobian
53-
5452
from sage.categories.homset import Hom, End
5553
from sage.categories.fields import Fields
5654

@@ -896,6 +894,9 @@ def jacobian(self):
896894
return self.__jacobian
897895
except AttributeError:
898896
pass
897+
898+
from sage.calculus.functions import jacobian
899+
899900
self.__jacobian = jacobian(list(self), self.domain().ambient_space().gens())
900901
return self.__jacobian
901902

src/sage/schemes/affine/affine_point.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ def global_height(self, prec=None):
202202
else:
203203
R = RealField(prec)
204204
H = max([self[i].abs() for i in range(self.codomain().ambient_space().dimension_relative())])
205-
return R(max(H,1)).log()
205+
return R(max(H, 1)).log()
206206
if self.domain().base_ring() in _NumberFields or isinstance(self.domain().base_ring(), sage.rings.abc.Order):
207207
return max([self[i].global_height(prec) for i in range(self.codomain().ambient_space().dimension_relative())])
208208
else:

src/sage/schemes/affine/affine_subscheme.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020
# ****************************************************************************
2121

2222
from sage.categories.fields import Fields
23-
from sage.interfaces.singular import singular
24-
from sage.modules.free_module_element import vector
2523
from sage.schemes.generic.algebraic_scheme import AlgebraicScheme_subscheme
2624

2725
from .affine_morphism import SchemeMorphism_polynomial_affine_subscheme_field
@@ -418,6 +416,7 @@ def intersection_multiplicity(self, X, P):
418416
Iloc = R.ideal([f(chng_coords) for f in I.gens()])
419417
Jloc = R.ideal([f(chng_coords) for f in J.gens()])
420418
# compute the intersection multiplicity with Serre's Tor formula using Singular
419+
from sage.interfaces.singular import singular
421420
singular.lib("homolog.lib")
422421
i = 0
423422
s = 0
@@ -492,6 +491,8 @@ def multiplicity(self, P):
492491
except TypeError:
493492
raise TypeError("(=%s) is not a point on (=%s)" % (P, self))
494493

494+
from sage.interfaces.singular import singular
495+
495496
# Apply a linear change of coordinates to self so that P is sent to the origin
496497
# and then compute the multiplicity of the local ring of the translated subscheme
497498
# corresponding to the point (0,...,0)
@@ -578,6 +579,8 @@ def tangent_space(self, p):
578579
sage: _.dimension()
579580
1
580581
"""
582+
from sage.modules.free_module_element import vector
583+
581584
A = self.ambient_space()
582585
R = A.coordinate_ring()
583586
gens = R.gens()

src/sage/schemes/berkovich/berkovich_cp_element.py

+10-8
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,19 @@
3333
# https://www.gnu.org/licenses/
3434
# *****************************************************************************
3535

36-
from sage.structure.element import Element
37-
from sage.structure.element import Expression
3836
import sage.rings.abc
37+
38+
from sage.misc.lazy_import import lazy_import
39+
from sage.rings.infinity import Infinity
40+
from sage.rings.integer_ring import ZZ
41+
from sage.rings.rational_field import QQ
3942
from sage.rings.real_mpfr import RR, RealNumber
40-
from sage.rings.padics.padic_generic_element import pAdicGenericElement
41-
from sage.rings.padics.padic_base_generic import pAdicBaseGeneric
42-
from sage.schemes.projective.projective_space import ProjectiveSpace
4343
from sage.schemes.projective.projective_point import SchemeMorphism_point_projective_field
44-
from sage.rings.rational_field import QQ
45-
from sage.rings.integer_ring import ZZ
46-
from sage.rings.infinity import Infinity
44+
from sage.schemes.projective.projective_space import ProjectiveSpace
45+
from sage.structure.element import Element, Expression
46+
47+
lazy_import('sage.rings.padics.padic_generic_element', 'pAdicGenericElement')
48+
lazy_import('sage.rings.padics.padic_base_generic', 'pAdicBaseGeneric')
4749

4850

4951
class Berkovich_Element(Element):

src/sage/schemes/berkovich/berkovich_space.py

+11-8
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,21 @@
3131
# https://www.gnu.org/licenses/
3232
# ****************************************************************************
3333

34+
import sage.rings.abc
35+
36+
from sage.categories.number_fields import NumberFields
37+
from sage.categories.topological_spaces import TopologicalSpaces
38+
from sage.misc.lazy_import import lazy_import
39+
from sage.rings.integer_ring import ZZ
40+
from sage.rings.rational_field import QQ
41+
from sage.schemes.affine.affine_space import AffineSpace_generic
3442
from sage.schemes.berkovich.berkovich_cp_element import (Berkovich_Element_Cp_Affine,
3543
Berkovich_Element_Cp_Projective)
36-
from sage.structure.parent import Parent
37-
from sage.schemes.affine.affine_space import AffineSpace_generic
3844
from sage.schemes.projective.projective_space import ProjectiveSpace_ring, ProjectiveSpace
45+
from sage.structure.parent import Parent
3946
from sage.structure.unique_representation import UniqueRepresentation
40-
from sage.categories.number_fields import NumberFields
41-
import sage.rings.abc
42-
from sage.rings.integer_ring import ZZ
43-
from sage.rings.rational_field import QQ
44-
from sage.rings.number_field.number_field_ideal import NumberFieldFractionalIdeal
45-
from sage.categories.topological_spaces import TopologicalSpaces
47+
48+
lazy_import('sage.rings.number_field.number_field_ideal', 'NumberFieldFractionalIdeal')
4649

4750

4851
def is_Berkovich(space) -> bool:

src/sage/schemes/curves/affine_curve.py

+9-12
Original file line numberDiff line numberDiff line change
@@ -124,26 +124,21 @@
124124
# https://www.gnu.org/licenses/
125125
# ****************************************************************************
126126

127-
import sage.rings.abc
127+
from builtins import sum as add
128128

129-
from sage.misc.lazy_attribute import lazy_attribute
130-
from sage.misc.cachefunc import cached_method
129+
import sage.rings.abc
131130

132131
from sage.arith.misc import binomial
133-
from sage.interfaces.singular import singular
134-
from builtins import sum as add
135-
136132
from sage.categories.fields import Fields
137133
from sage.categories.finite_fields import FiniteFields
138134
from sage.categories.homset import Hom, End, hom
139135
from sage.categories.number_fields import NumberFields
140-
141136
from sage.matrix.constructor import matrix
142-
137+
from sage.misc.cachefunc import cached_method
138+
from sage.misc.lazy_attribute import lazy_attribute
143139
from sage.misc.lazy_import import lazy_import
144-
140+
from sage.rings.infinity import infinity
145141
from sage.rings.polynomial.multi_polynomial_element import degree_lowest_rational_function
146-
from sage.rings.number_field.number_field import NumberField
147142
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
148143
from sage.rings.rational_field import RationalField
149144
from sage.rings.infinity import infinity
@@ -152,6 +147,10 @@
152147
from sage.schemes.affine.affine_subscheme import (AlgebraicScheme_subscheme_affine,
153148
AlgebraicScheme_subscheme_affine_field)
154149

150+
lazy_import('sage.interfaces.singular', 'singular')
151+
lazy_import('sage.rings.number_field.number_field', 'NumberField')
152+
lazy_import('sage.rings.qqbar', 'number_field_elements_from_algebraics')
153+
155154
from .curve import Curve_generic
156155

157156
from .point import (AffineCurvePoint_field,
@@ -164,8 +163,6 @@
164163

165164
from .closed_point import IntegralAffineCurveClosedPoint
166165

167-
lazy_import('sage.rings.qqbar', 'number_field_elements_from_algebraics')
168-
169166

170167
class AffineCurve(Curve_generic, AlgebraicScheme_subscheme_affine):
171168
"""

src/sage/schemes/curves/projective_curve.py

+11-14
Original file line numberDiff line numberDiff line change
@@ -136,32 +136,30 @@
136136
# https://www.gnu.org/licenses/
137137
# ****************************************************************************
138138

139-
from sage.misc.lazy_attribute import lazy_attribute
140-
from sage.misc.cachefunc import cached_method
139+
from builtins import sum as add
141140

142141
from sage.categories.fields import Fields
143142
from sage.categories.homset import hom, Hom, End
144143
from sage.categories.number_fields import NumberFields
145-
146-
from sage.interfaces.singular import singular
147144
from sage.matrix.constructor import matrix
148-
from builtins import sum as add
145+
from sage.misc.cachefunc import cached_method
146+
from sage.misc.lazy_attribute import lazy_attribute
147+
from sage.misc.lazy_import import lazy_import
148+
from sage.misc.persist import register_unpickle_override
149149
from sage.misc.sage_eval import sage_eval
150-
151-
from sage.rings.polynomial.multi_polynomial_element import degree_lowest_rational_function
150+
from sage.rings.integer import Integer
152151
from sage.rings.integer_ring import IntegerRing
153-
from sage.rings.number_field.number_field import NumberField
152+
from sage.rings.polynomial.multi_polynomial_element import degree_lowest_rational_function
154153
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
155-
from sage.rings.qqbar import (number_field_elements_from_algebraics,
156-
QQbar)
157154
from sage.rings.rational_field import RationalField
158-
from sage.rings.integer import Integer
159-
160155
from sage.schemes.projective.projective_space import ProjectiveSpace, ProjectiveSpace_ring
161-
162156
from sage.schemes.projective.projective_subscheme import (AlgebraicScheme_subscheme_projective,
163157
AlgebraicScheme_subscheme_projective_field)
164158

159+
lazy_import('sage.interfaces.singular', 'singular')
160+
lazy_import('sage.rings.number_field.number_field', 'NumberField')
161+
lazy_import('sage.rings.qqbar', ['number_field_elements_from_algebraics', 'QQbar'])
162+
165163
from .curve import Curve_generic
166164

167165
from .point import (ProjectiveCurvePoint_field,
@@ -173,7 +171,6 @@
173171
IntegralProjectivePlaneCurvePoint_finite_field)
174172

175173
from .closed_point import IntegralProjectiveCurveClosedPoint
176-
from sage.misc.persist import register_unpickle_override
177174

178175

179176
class ProjectiveCurve(Curve_generic, AlgebraicScheme_subscheme_projective):

src/sage/schemes/curves/zariski_vankampen.py

+6-3
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,10 @@
4242
# https://www.gnu.org/licenses/
4343
# ****************************************************************************
4444
import itertools
45-
from copy import copy
4645

46+
from copy import copy
4747
from itertools import combinations
48+
4849
from sage.combinat.permutation import Permutation
4950
from sage.functions.generalized import sign
5051
from sage.geometry.voronoi_diagram import VoronoiDiagram
@@ -53,10 +54,10 @@
5354
from sage.groups.finitely_presented import wrap_FpGroup
5455
from sage.groups.free_group import FreeGroup
5556
from sage.groups.perm_gps.permgroup_named import SymmetricGroup
56-
from sage.libs.braiding import leftnormalform, rightnormalform
5757
from sage.matrix.constructor import matrix
5858
from sage.misc.cachefunc import cached_function
5959
from sage.misc.flatten import flatten
60+
from sage.misc.lazy_import import lazy_import
6061
from sage.misc.misc_c import prod
6162
from sage.parallel.decorate import parallel
6263
from sage.rings.complex_interval_field import ComplexIntervalField
@@ -67,7 +68,9 @@
6768
from sage.rings.qqbar import QQbar
6869
from sage.rings.rational_field import QQ
6970
from sage.rings.real_mpfr import RealField
70-
from .constructor import Curve
71+
from sage.schemes.curves.constructor import Curve
72+
73+
lazy_import('sage.libs.braiding', ['leftnormalform', 'rightnormalform'])
7174

7275
roots_interval_cache = {}
7376

src/sage/schemes/cyclic_covers/charpoly_frobenius.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
# https://www.gnu.org/licenses/
99
# *****************************************************************************
1010
from sage.rings.integer_ring import ZZ
11-
from sage.functions.log import log
11+
from sage.misc.lazy_import import lazy_import
12+
lazy_import("sage.functions.log", "log")
1213

1314

1415
def charpoly_frobenius(frob_matrix, charpoly_prec, p, weight, a=1, known_factor=[1]):

src/sage/schemes/cyclic_covers/cycliccover_finite_field.py

+11-10
Original file line numberDiff line numberDiff line change
@@ -66,19 +66,20 @@
6666
# https://www.gnu.org/licenses/
6767
# *****************************************************************************
6868

69-
7069
from sage.arith.misc import euler_phi
71-
from sage.functions.other import ceil, binomial, floor
72-
from sage.functions.log import log
73-
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
74-
from sage.rings.power_series_ring import PowerSeriesRing
75-
from sage.rings.padics.factory import Zp, Zq, Qq
76-
from sage.rings.integer_ring import ZZ
77-
from sage.rings.finite_rings.integer_mod_ring import IntegerModRing
7870
from sage.matrix.constructor import matrix, zero_matrix
79-
from sage.modules.free_module_element import vector
80-
from sage.schemes.hyperelliptic_curves.hypellfrob import interval_products
8171
from sage.misc.cachefunc import cached_method
72+
from sage.misc.lazy_import import lazy_import
73+
from sage.modules.free_module_element import vector
74+
from sage.rings.finite_rings.integer_mod_ring import IntegerModRing
75+
from sage.rings.integer_ring import ZZ
76+
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
77+
from sage.rings.power_series_ring import PowerSeriesRing
78+
79+
lazy_import("sage.functions.log", "log")
80+
lazy_import("sage.functions.other", ["ceil", "binomial", "floor"])
81+
lazy_import('sage.rings.padics.factory', ['Zp', 'Zq', 'Qq'])
82+
lazy_import('sage.schemes.hyperelliptic_curves.hypellfrob', 'interval_products')
8283

8384
from .charpoly_frobenius import charpoly_frobenius
8485
from . import cycliccover_generic

src/sage/schemes/elliptic_curves/BSD.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
"Birch and Swinnerton-Dyer formulas"
22

33
from sage.arith.misc import prime_divisors
4+
from sage.misc.lazy_import import lazy_import
5+
from sage.rings.infinity import Infinity
46
from sage.rings.integer_ring import ZZ
57
from sage.rings.rational_field import QQ
6-
from sage.rings.infinity import Infinity
7-
from sage.rings.number_field.number_field import QuadraticField
8-
from sage.functions.other import ceil
8+
9+
lazy_import("sage.functions.other", "ceil")
10+
lazy_import("sage.rings.number_field.number_field", "QuadraticField")
911

1012

1113
class BSD_data:

src/sage/schemes/elliptic_curves/cm.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,10 @@
3434
# https://www.gnu.org/licenses/
3535
# ****************************************************************************
3636

37-
from sage.interfaces.magma import magma
3837
from sage.rings.integer import Integer
3938
from sage.rings.rational_field import QQ
4039
from sage.rings.integer_ring import ZZ
4140
from sage.rings.integer_ring import IntegerRing
42-
from sage.rings.number_field.number_field import is_fundamental_discriminant
4341
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
4442

4543
from sage.misc.cachefunc import cached_function
@@ -121,6 +119,7 @@ def hilbert_class_polynomial(D, algorithm=None):
121119
return sage.libs.arb.arith.hilbert_class_polynomial(D)
122120

123121
if algorithm == "magma":
122+
from sage.interfaces.magma import magma
124123
magma.eval("R<x> := PolynomialRing(IntegerRing())")
125124
f = str(magma.eval("HilbertClassPolynomial(%s)" % D))
126125
return IntegerRing()['x'](f)

src/sage/schemes/elliptic_curves/ell_curve_isogeny.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2903,7 +2903,7 @@ def scaling_factor(self):
29032903
29042904
Check for :issue:`36638`::
29052905
2906-
sage: phi.scaling_factor().parent() # needs sage.rings.finite_rings
2906+
sage: phi.scaling_factor().parent() # needs sage.rings.finite_rings
29072907
Finite Field in z2 of size 257^2
29082908
29092909
ALGORITHM: The "inner" isogeny is normalized by construction,

src/sage/schemes/elliptic_curves/ell_generic.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ def _latex_(self):
272272
"""
273273
Internal function. Return a latex string for this elliptic curve.
274274
275-
Users will normally use latex() instead.
275+
Users will normally use :func:`latex` instead.
276276
277277
EXAMPLES::
278278

0 commit comments

Comments
 (0)