passagemath-schemes 10.6.47__cp312-cp312-macosx_13_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- passagemath_schemes/.dylibs/libflint.22.0.dylib +0 -0
- passagemath_schemes/.dylibs/libgmp.10.dylib +0 -0
- passagemath_schemes/.dylibs/libgmpxx.4.dylib +0 -0
- passagemath_schemes/.dylibs/libmpfr.6.dylib +0 -0
- passagemath_schemes/__init__.py +3 -0
- passagemath_schemes-10.6.47.dist-info/METADATA +204 -0
- passagemath_schemes-10.6.47.dist-info/METADATA.bak +205 -0
- passagemath_schemes-10.6.47.dist-info/RECORD +311 -0
- passagemath_schemes-10.6.47.dist-info/WHEEL +6 -0
- passagemath_schemes-10.6.47.dist-info/top_level.txt +3 -0
- sage/all__sagemath_schemes.py +23 -0
- sage/databases/all__sagemath_schemes.py +7 -0
- sage/databases/cremona.py +1723 -0
- sage/dynamics/all__sagemath_schemes.py +2 -0
- sage/dynamics/arithmetic_dynamics/affine_ds.py +1083 -0
- sage/dynamics/arithmetic_dynamics/all.py +14 -0
- sage/dynamics/arithmetic_dynamics/berkovich_ds.py +1101 -0
- sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py +1543 -0
- sage/dynamics/arithmetic_dynamics/endPN_automorphism_group.py +2426 -0
- sage/dynamics/arithmetic_dynamics/endPN_minimal_model.py +1169 -0
- sage/dynamics/arithmetic_dynamics/generic_ds.py +663 -0
- sage/dynamics/arithmetic_dynamics/product_projective_ds.py +339 -0
- sage/dynamics/arithmetic_dynamics/projective_ds.py +9558 -0
- sage/dynamics/arithmetic_dynamics/projective_ds_helper.cpython-312-darwin.so +0 -0
- sage/dynamics/arithmetic_dynamics/projective_ds_helper.pyx +301 -0
- sage/dynamics/arithmetic_dynamics/wehlerK3.py +2576 -0
- sage/lfunctions/all.py +18 -0
- sage/lfunctions/dokchitser.py +745 -0
- sage/lfunctions/pari.py +818 -0
- sage/lfunctions/zero_sums.cpython-312-darwin.so +0 -0
- sage/lfunctions/zero_sums.pyx +1847 -0
- sage/modular/abvar/abvar.py +5135 -0
- sage/modular/abvar/abvar_ambient_jacobian.py +413 -0
- sage/modular/abvar/abvar_newform.py +244 -0
- sage/modular/abvar/all.py +8 -0
- sage/modular/abvar/constructor.py +186 -0
- sage/modular/abvar/cuspidal_subgroup.py +371 -0
- sage/modular/abvar/finite_subgroup.py +896 -0
- sage/modular/abvar/homology.py +720 -0
- sage/modular/abvar/homspace.py +998 -0
- sage/modular/abvar/lseries.py +415 -0
- sage/modular/abvar/morphism.py +935 -0
- sage/modular/abvar/torsion_point.py +274 -0
- sage/modular/abvar/torsion_subgroup.py +740 -0
- sage/modular/all.py +43 -0
- sage/modular/arithgroup/all.py +20 -0
- sage/modular/arithgroup/arithgroup_element.cpython-312-darwin.so +0 -0
- sage/modular/arithgroup/arithgroup_element.pyx +474 -0
- sage/modular/arithgroup/arithgroup_generic.py +1402 -0
- sage/modular/arithgroup/arithgroup_perm.py +2692 -0
- sage/modular/arithgroup/congroup.cpython-312-darwin.so +0 -0
- sage/modular/arithgroup/congroup.pyx +334 -0
- sage/modular/arithgroup/congroup_gamma.py +363 -0
- sage/modular/arithgroup/congroup_gamma0.py +692 -0
- sage/modular/arithgroup/congroup_gamma1.py +653 -0
- sage/modular/arithgroup/congroup_gammaH.py +1469 -0
- sage/modular/arithgroup/congroup_generic.py +628 -0
- sage/modular/arithgroup/congroup_sl2z.py +267 -0
- sage/modular/arithgroup/farey_symbol.cpython-312-darwin.so +0 -0
- sage/modular/arithgroup/farey_symbol.pyx +1066 -0
- sage/modular/arithgroup/tests.py +418 -0
- sage/modular/btquotients/all.py +4 -0
- sage/modular/btquotients/btquotient.py +3753 -0
- sage/modular/btquotients/pautomorphicform.py +2570 -0
- sage/modular/buzzard.py +100 -0
- sage/modular/congroup.py +29 -0
- sage/modular/congroup_element.py +13 -0
- sage/modular/cusps.py +1109 -0
- sage/modular/cusps_nf.py +1270 -0
- sage/modular/dims.py +569 -0
- sage/modular/dirichlet.py +3310 -0
- sage/modular/drinfeld_modform/all.py +2 -0
- sage/modular/drinfeld_modform/element.py +446 -0
- sage/modular/drinfeld_modform/ring.py +773 -0
- sage/modular/drinfeld_modform/tutorial.py +236 -0
- sage/modular/etaproducts.py +1065 -0
- sage/modular/hecke/algebra.py +746 -0
- sage/modular/hecke/all.py +20 -0
- sage/modular/hecke/ambient_module.py +1019 -0
- sage/modular/hecke/degenmap.py +119 -0
- sage/modular/hecke/element.py +325 -0
- sage/modular/hecke/hecke_operator.py +780 -0
- sage/modular/hecke/homspace.py +206 -0
- sage/modular/hecke/module.py +1767 -0
- sage/modular/hecke/morphism.py +174 -0
- sage/modular/hecke/submodule.py +989 -0
- sage/modular/hypergeometric_misc.cpython-312-darwin.so +0 -0
- sage/modular/hypergeometric_misc.pxd +4 -0
- sage/modular/hypergeometric_misc.pyx +166 -0
- sage/modular/hypergeometric_motive.py +2017 -0
- sage/modular/local_comp/all.py +2 -0
- sage/modular/local_comp/liftings.py +292 -0
- sage/modular/local_comp/local_comp.py +1071 -0
- sage/modular/local_comp/smoothchar.py +1825 -0
- sage/modular/local_comp/type_space.py +748 -0
- sage/modular/modform/all.py +30 -0
- sage/modular/modform/ambient.py +815 -0
- sage/modular/modform/ambient_R.py +177 -0
- sage/modular/modform/ambient_eps.py +306 -0
- sage/modular/modform/ambient_g0.py +124 -0
- sage/modular/modform/ambient_g1.py +204 -0
- sage/modular/modform/constructor.py +545 -0
- sage/modular/modform/cuspidal_submodule.py +708 -0
- sage/modular/modform/defaults.py +14 -0
- sage/modular/modform/eis_series.py +505 -0
- sage/modular/modform/eisenstein_submodule.py +663 -0
- sage/modular/modform/element.py +4131 -0
- sage/modular/modform/find_generators.py +59 -0
- sage/modular/modform/half_integral.py +154 -0
- sage/modular/modform/hecke_operator_on_qexp.py +247 -0
- sage/modular/modform/j_invariant.py +47 -0
- sage/modular/modform/l_series_gross_zagier.py +133 -0
- sage/modular/modform/l_series_gross_zagier_coeffs.cpython-312-darwin.so +0 -0
- sage/modular/modform/l_series_gross_zagier_coeffs.pyx +177 -0
- sage/modular/modform/notes.py +45 -0
- sage/modular/modform/numerical.py +514 -0
- sage/modular/modform/periods.py +14 -0
- sage/modular/modform/ring.py +1257 -0
- sage/modular/modform/space.py +1860 -0
- sage/modular/modform/submodule.py +118 -0
- sage/modular/modform/tests.py +64 -0
- sage/modular/modform/theta.py +110 -0
- sage/modular/modform/vm_basis.py +381 -0
- sage/modular/modform/weight1.py +220 -0
- sage/modular/modform_hecketriangle/abstract_ring.py +1932 -0
- sage/modular/modform_hecketriangle/abstract_space.py +2528 -0
- sage/modular/modform_hecketriangle/all.py +30 -0
- sage/modular/modform_hecketriangle/analytic_type.py +590 -0
- sage/modular/modform_hecketriangle/constructor.py +416 -0
- sage/modular/modform_hecketriangle/element.py +351 -0
- sage/modular/modform_hecketriangle/functors.py +752 -0
- sage/modular/modform_hecketriangle/graded_ring.py +541 -0
- sage/modular/modform_hecketriangle/graded_ring_element.py +2225 -0
- sage/modular/modform_hecketriangle/hecke_triangle_group_element.py +3352 -0
- sage/modular/modform_hecketriangle/hecke_triangle_groups.py +1432 -0
- sage/modular/modform_hecketriangle/readme.py +1214 -0
- sage/modular/modform_hecketriangle/series_constructor.py +580 -0
- sage/modular/modform_hecketriangle/space.py +1037 -0
- sage/modular/modform_hecketriangle/subspace.py +423 -0
- sage/modular/modsym/all.py +17 -0
- sage/modular/modsym/ambient.py +3846 -0
- sage/modular/modsym/boundary.py +1420 -0
- sage/modular/modsym/element.py +336 -0
- sage/modular/modsym/g1list.py +178 -0
- sage/modular/modsym/ghlist.py +182 -0
- sage/modular/modsym/hecke_operator.py +73 -0
- sage/modular/modsym/manin_symbol.cpython-312-darwin.so +0 -0
- sage/modular/modsym/manin_symbol.pxd +5 -0
- sage/modular/modsym/manin_symbol.pyx +497 -0
- sage/modular/modsym/manin_symbol_list.py +1295 -0
- sage/modular/modsym/modsym.py +400 -0
- sage/modular/modsym/modular_symbols.py +384 -0
- sage/modular/modsym/p1list_nf.py +1241 -0
- sage/modular/modsym/relation_matrix.py +591 -0
- sage/modular/modsym/relation_matrix_pyx.cpython-312-darwin.so +0 -0
- sage/modular/modsym/relation_matrix_pyx.pyx +108 -0
- sage/modular/modsym/space.py +2468 -0
- sage/modular/modsym/subspace.py +455 -0
- sage/modular/modsym/tests.py +375 -0
- sage/modular/multiple_zeta.py +2632 -0
- sage/modular/multiple_zeta_F_algebra.py +786 -0
- sage/modular/overconvergent/all.py +6 -0
- sage/modular/overconvergent/genus0.py +1878 -0
- sage/modular/overconvergent/hecke_series.py +1187 -0
- sage/modular/overconvergent/weightspace.py +778 -0
- sage/modular/pollack_stevens/all.py +4 -0
- sage/modular/pollack_stevens/distributions.py +874 -0
- sage/modular/pollack_stevens/fund_domain.py +1572 -0
- sage/modular/pollack_stevens/manin_map.py +859 -0
- sage/modular/pollack_stevens/modsym.py +1593 -0
- sage/modular/pollack_stevens/padic_lseries.py +417 -0
- sage/modular/pollack_stevens/sigma0.py +534 -0
- sage/modular/pollack_stevens/space.py +1076 -0
- sage/modular/quasimodform/all.py +3 -0
- sage/modular/quasimodform/element.py +845 -0
- sage/modular/quasimodform/ring.py +828 -0
- sage/modular/quatalg/all.py +3 -0
- sage/modular/quatalg/brandt.py +1642 -0
- sage/modular/ssmod/all.py +8 -0
- sage/modular/ssmod/ssmod.py +827 -0
- sage/rings/all__sagemath_schemes.py +1 -0
- sage/rings/polynomial/all__sagemath_schemes.py +1 -0
- sage/rings/polynomial/binary_form_reduce.py +585 -0
- sage/schemes/all.py +41 -0
- sage/schemes/berkovich/all.py +6 -0
- sage/schemes/berkovich/berkovich_cp_element.py +2582 -0
- sage/schemes/berkovich/berkovich_space.py +748 -0
- sage/schemes/curves/affine_curve.py +2928 -0
- sage/schemes/curves/all.py +33 -0
- sage/schemes/curves/closed_point.py +434 -0
- sage/schemes/curves/constructor.py +381 -0
- sage/schemes/curves/curve.py +542 -0
- sage/schemes/curves/plane_curve_arrangement.py +1283 -0
- sage/schemes/curves/point.py +463 -0
- sage/schemes/curves/projective_curve.py +3026 -0
- sage/schemes/curves/zariski_vankampen.py +1932 -0
- sage/schemes/cyclic_covers/all.py +2 -0
- sage/schemes/cyclic_covers/charpoly_frobenius.py +320 -0
- sage/schemes/cyclic_covers/constructor.py +137 -0
- sage/schemes/cyclic_covers/cycliccover_finite_field.py +1309 -0
- sage/schemes/cyclic_covers/cycliccover_generic.py +310 -0
- sage/schemes/elliptic_curves/BSD.py +1036 -0
- sage/schemes/elliptic_curves/Qcurves.py +592 -0
- sage/schemes/elliptic_curves/addition_formulas_ring.py +94 -0
- sage/schemes/elliptic_curves/all.py +49 -0
- sage/schemes/elliptic_curves/cardinality.py +609 -0
- sage/schemes/elliptic_curves/cm.py +1102 -0
- sage/schemes/elliptic_curves/constructor.py +1552 -0
- sage/schemes/elliptic_curves/ec_database.py +175 -0
- sage/schemes/elliptic_curves/ell_curve_isogeny.py +3972 -0
- sage/schemes/elliptic_curves/ell_egros.py +459 -0
- sage/schemes/elliptic_curves/ell_field.py +2836 -0
- sage/schemes/elliptic_curves/ell_finite_field.py +3359 -0
- sage/schemes/elliptic_curves/ell_generic.py +3760 -0
- sage/schemes/elliptic_curves/ell_local_data.py +1207 -0
- sage/schemes/elliptic_curves/ell_modular_symbols.py +775 -0
- sage/schemes/elliptic_curves/ell_number_field.py +4220 -0
- sage/schemes/elliptic_curves/ell_padic_field.py +107 -0
- sage/schemes/elliptic_curves/ell_point.py +4787 -0
- sage/schemes/elliptic_curves/ell_rational_field.py +7368 -0
- sage/schemes/elliptic_curves/ell_tate_curve.py +671 -0
- sage/schemes/elliptic_curves/ell_torsion.py +436 -0
- sage/schemes/elliptic_curves/ell_wp.py +352 -0
- sage/schemes/elliptic_curves/formal_group.py +760 -0
- sage/schemes/elliptic_curves/gal_reps.py +1459 -0
- sage/schemes/elliptic_curves/gal_reps_number_field.py +1669 -0
- sage/schemes/elliptic_curves/gp_simon.py +152 -0
- sage/schemes/elliptic_curves/heegner.py +7335 -0
- sage/schemes/elliptic_curves/height.py +2109 -0
- sage/schemes/elliptic_curves/hom.py +1406 -0
- sage/schemes/elliptic_curves/hom_composite.py +934 -0
- sage/schemes/elliptic_curves/hom_frobenius.py +522 -0
- sage/schemes/elliptic_curves/hom_scalar.py +531 -0
- sage/schemes/elliptic_curves/hom_sum.py +682 -0
- sage/schemes/elliptic_curves/hom_velusqrt.py +1290 -0
- sage/schemes/elliptic_curves/homset.py +271 -0
- sage/schemes/elliptic_curves/isogeny_class.py +1521 -0
- sage/schemes/elliptic_curves/isogeny_small_degree.py +2797 -0
- sage/schemes/elliptic_curves/jacobian.py +237 -0
- sage/schemes/elliptic_curves/kodaira_symbol.py +344 -0
- sage/schemes/elliptic_curves/kraus.py +1014 -0
- sage/schemes/elliptic_curves/lseries_ell.py +943 -0
- sage/schemes/elliptic_curves/mod5family.py +105 -0
- sage/schemes/elliptic_curves/mod_poly.py +197 -0
- sage/schemes/elliptic_curves/mod_sym_num.cpython-312-darwin.so +0 -0
- sage/schemes/elliptic_curves/mod_sym_num.pyx +3796 -0
- sage/schemes/elliptic_curves/modular_parametrization.py +305 -0
- sage/schemes/elliptic_curves/padic_lseries.py +1793 -0
- sage/schemes/elliptic_curves/padics.py +1816 -0
- sage/schemes/elliptic_curves/period_lattice.py +2234 -0
- sage/schemes/elliptic_curves/period_lattice_region.cpython-312-darwin.so +0 -0
- sage/schemes/elliptic_curves/period_lattice_region.pyx +722 -0
- sage/schemes/elliptic_curves/saturation.py +715 -0
- sage/schemes/elliptic_curves/sha_tate.py +1158 -0
- sage/schemes/elliptic_curves/weierstrass_morphism.py +1117 -0
- sage/schemes/elliptic_curves/weierstrass_transform.py +200 -0
- sage/schemes/hyperelliptic_curves/all.py +6 -0
- sage/schemes/hyperelliptic_curves/constructor.py +291 -0
- sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py +1914 -0
- sage/schemes/hyperelliptic_curves/hyperelliptic_g2.py +192 -0
- sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +954 -0
- sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py +1332 -0
- sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py +84 -0
- sage/schemes/hyperelliptic_curves/invariants.py +410 -0
- sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +315 -0
- sage/schemes/hyperelliptic_curves/jacobian_g2.py +32 -0
- sage/schemes/hyperelliptic_curves/jacobian_generic.py +419 -0
- sage/schemes/hyperelliptic_curves/jacobian_homset.py +186 -0
- sage/schemes/hyperelliptic_curves/jacobian_morphism.py +875 -0
- sage/schemes/hyperelliptic_curves/kummer_surface.py +99 -0
- sage/schemes/hyperelliptic_curves/mestre.py +302 -0
- sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +3871 -0
- sage/schemes/jacobians/abstract_jacobian.py +277 -0
- sage/schemes/jacobians/all.py +2 -0
- sage/schemes/overview.py +161 -0
- sage/schemes/plane_conics/all.py +22 -0
- sage/schemes/plane_conics/con_field.py +1296 -0
- sage/schemes/plane_conics/con_finite_field.py +158 -0
- sage/schemes/plane_conics/con_number_field.py +456 -0
- sage/schemes/plane_conics/con_rational_field.py +406 -0
- sage/schemes/plane_conics/con_rational_function_field.py +580 -0
- sage/schemes/plane_conics/constructor.py +249 -0
- sage/schemes/plane_quartics/all.py +2 -0
- sage/schemes/plane_quartics/quartic_constructor.py +71 -0
- sage/schemes/plane_quartics/quartic_generic.py +73 -0
- sage/schemes/riemann_surfaces/all.py +1 -0
- sage/schemes/riemann_surfaces/riemann_surface.py +4117 -0
- sage_wheels/share/cremona/cremona_mini.db +0 -0
- sage_wheels/share/ellcurves/rank0 +30427 -0
- sage_wheels/share/ellcurves/rank1 +31871 -0
- sage_wheels/share/ellcurves/rank10 +6 -0
- sage_wheels/share/ellcurves/rank11 +6 -0
- sage_wheels/share/ellcurves/rank12 +1 -0
- sage_wheels/share/ellcurves/rank14 +1 -0
- sage_wheels/share/ellcurves/rank15 +1 -0
- sage_wheels/share/ellcurves/rank17 +1 -0
- sage_wheels/share/ellcurves/rank19 +1 -0
- sage_wheels/share/ellcurves/rank2 +2388 -0
- sage_wheels/share/ellcurves/rank20 +1 -0
- sage_wheels/share/ellcurves/rank21 +1 -0
- sage_wheels/share/ellcurves/rank22 +1 -0
- sage_wheels/share/ellcurves/rank23 +1 -0
- sage_wheels/share/ellcurves/rank24 +1 -0
- sage_wheels/share/ellcurves/rank28 +1 -0
- sage_wheels/share/ellcurves/rank3 +836 -0
- sage_wheels/share/ellcurves/rank4 +10 -0
- sage_wheels/share/ellcurves/rank5 +5 -0
- sage_wheels/share/ellcurves/rank6 +5 -0
- sage_wheels/share/ellcurves/rank7 +5 -0
- sage_wheels/share/ellcurves/rank8 +6 -0
- sage_wheels/share/ellcurves/rank9 +7 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
"""
|
|
3
|
+
Kummer surfaces over a general ring
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
#*****************************************************************************
|
|
7
|
+
# Copyright (C) 2006 David Kohel <kohel@maths.usyd.edu>
|
|
8
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
9
|
+
# http://www.gnu.org/licenses/
|
|
10
|
+
#*****************************************************************************
|
|
11
|
+
|
|
12
|
+
from sage.schemes.projective.projective_space import ProjectiveSpace
|
|
13
|
+
from sage.schemes.projective.projective_subscheme\
|
|
14
|
+
import AlgebraicScheme_subscheme_projective
|
|
15
|
+
from sage.categories.homset import Hom
|
|
16
|
+
from sage.categories.schemes import Schemes
|
|
17
|
+
|
|
18
|
+
# The generic genus 2 curve in Weierstrass form:
|
|
19
|
+
#
|
|
20
|
+
# y^2 + (c9*x^3 + c6*x^2 + c3*x + c0)*y =
|
|
21
|
+
# a12*x^6 + a10*x^5 + a8*x^4 + a6*x^3 + a4*x^2 + a2*x + a0.
|
|
22
|
+
#
|
|
23
|
+
# Transforms to:
|
|
24
|
+
#
|
|
25
|
+
# y^2 = (c9^2 + 4*a12)*x^6 + (2*c6*c9 + 4*a10)*x^5
|
|
26
|
+
# + (2*c3*c9 + c6^2 + 4*a8)*x^4 + (2*c0*c9 + 2*c3*c6 + 4*a6)*x^3
|
|
27
|
+
# + (2*c0*c6 + c3^2 + 4*a4)*x^2 + (2*c0*c3 + 4*a2)*x + c0^2 + 4*a0
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class KummerSurface(AlgebraicScheme_subscheme_projective):
|
|
31
|
+
def __init__(self, J):
|
|
32
|
+
"""
|
|
33
|
+
EXAMPLES::
|
|
34
|
+
|
|
35
|
+
sage: R.<x> = QQ[]
|
|
36
|
+
sage: f = x^5 + x + 1
|
|
37
|
+
sage: X = HyperellipticCurve(f)
|
|
38
|
+
sage: J = Jacobian(X)
|
|
39
|
+
sage: K = KummerSurface(J); K
|
|
40
|
+
Closed subscheme of Projective Space of dimension 3 over Rational Field defined by:
|
|
41
|
+
X0^4 - 4*X0*X1^3 + 4*X0^2*X1*X2 - 4*X0*X1^2*X2 + 2*X0^2*X2^2 + X2^4 - 4*X0^3*X3 - 2*X0^2*X1*X3 - 2*X1*X2^2*X3 + X1^2*X3^2 - 4*X0*X2*X3^2
|
|
42
|
+
"""
|
|
43
|
+
R = J.base_ring()
|
|
44
|
+
PP = ProjectiveSpace(3, R, ["X0", "X1", "X2", "X3"])
|
|
45
|
+
X0, X1, X2, X3 = PP.gens()
|
|
46
|
+
C = J.curve()
|
|
47
|
+
f, h = C.hyperelliptic_polynomials()
|
|
48
|
+
a12 = f[0]
|
|
49
|
+
a10 = f[1]
|
|
50
|
+
a8 = f[2]
|
|
51
|
+
a6 = f[3]
|
|
52
|
+
a4 = f[4]
|
|
53
|
+
a2 = f[5]
|
|
54
|
+
a0 = f[6]
|
|
55
|
+
if h != 0:
|
|
56
|
+
c6 = h[0]
|
|
57
|
+
c4 = h[1]
|
|
58
|
+
c2 = h[2]
|
|
59
|
+
c0 = h[3]
|
|
60
|
+
a12, a10, a8, a6, a4, a2, a0 = \
|
|
61
|
+
(4*a12 + c6**2,
|
|
62
|
+
4*a10 + 2*c4*c6,
|
|
63
|
+
4*a8 + 2*c2*c6 + c4**2,
|
|
64
|
+
4*a6 + 2*c0*c6 + 2*c2*c4,
|
|
65
|
+
4*a4 + 2*c0*c4 + c2**2,
|
|
66
|
+
4*a2 + 2*c0*c2,
|
|
67
|
+
4*a0 + c0**2)
|
|
68
|
+
F = \
|
|
69
|
+
(-4*a8*a12 + a10**2)*X0**4 + \
|
|
70
|
+
-4*a6*a12*X0**3*X1 + \
|
|
71
|
+
-2*a6*a10*X0**3*X2 + \
|
|
72
|
+
-4*a12*X0**3*X3 + \
|
|
73
|
+
-4*a4*a12*X0**2*X1**2 + \
|
|
74
|
+
(4*a2*a12 - 4*a4*a10)*X0**2*X1*X2 + \
|
|
75
|
+
-2*a10*X0**2*X1*X3 + \
|
|
76
|
+
(-4*a0*a12 + 2*a2*a10 - 4*a4*a8 + a6**2)*X0**2*X2**2 + \
|
|
77
|
+
-4*a8*X0**2*X2*X3 + \
|
|
78
|
+
-4*a2*a12*X0*X1**3 + \
|
|
79
|
+
(8*a0*a12 - 4*a2*a10)*X0*X1**2*X2 + \
|
|
80
|
+
(4*a0*a10 - 4*a2*a8)*X0*X1*X2**2 + \
|
|
81
|
+
-2*a6*X0*X1*X2*X3 + \
|
|
82
|
+
-2*a2*a6*X0*X2**3 + \
|
|
83
|
+
-4*a4*X0*X2**2*X3 + \
|
|
84
|
+
-4*X0*X2*X3**2 + \
|
|
85
|
+
-4*a0*a12*X1**4 + \
|
|
86
|
+
-4*a0*a10*X1**3*X2 + \
|
|
87
|
+
-4*a0*a8*X1**2*X2**2 + \
|
|
88
|
+
X1**2*X3**2 + \
|
|
89
|
+
-4*a0*a6*X1*X2**3 + \
|
|
90
|
+
-2*a2*X1*X2**2*X3 + \
|
|
91
|
+
(-4*a0*a4 + a2**2)*X2**4 + \
|
|
92
|
+
-4*a0*X2**3*X3
|
|
93
|
+
AlgebraicScheme_subscheme_projective.__init__(self, PP, F)
|
|
94
|
+
X, Y, Z = C.ambient_space().gens()
|
|
95
|
+
if a0 == 0:
|
|
96
|
+
a0 = a2
|
|
97
|
+
phi = Hom(C, self)([X.parent().zero(), Z**2, X*Z, a0*X**2], Schemes())
|
|
98
|
+
C._kummer_morphism = phi
|
|
99
|
+
J._kummer_surface = self
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
r"""
|
|
3
|
+
Mestre's algorithm
|
|
4
|
+
|
|
5
|
+
This file contains functions that:
|
|
6
|
+
|
|
7
|
+
- create hyperelliptic curves from the Igusa-Clebsch invariants (over
|
|
8
|
+
`\QQ` and finite fields)
|
|
9
|
+
- create Mestre's conic from the Igusa-Clebsch invariants
|
|
10
|
+
|
|
11
|
+
AUTHORS:
|
|
12
|
+
|
|
13
|
+
- Florian Bouyer
|
|
14
|
+
- Marco Streng
|
|
15
|
+
"""
|
|
16
|
+
#*****************************************************************************
|
|
17
|
+
# Copyright (C) 2011, 2012, 2013
|
|
18
|
+
# Florian Bouyer <f.j.s.c.bouyer@gmail.com>
|
|
19
|
+
# Marco Streng <marco.streng@gmail.com>
|
|
20
|
+
#
|
|
21
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
22
|
+
# as published by the Free Software Foundation; either version 2 of
|
|
23
|
+
# the License, or (at your option) any later version.
|
|
24
|
+
# http://www.gnu.org/licenses/
|
|
25
|
+
#*****************************************************************************
|
|
26
|
+
|
|
27
|
+
from sage.matrix.constructor import Matrix
|
|
28
|
+
from sage.schemes.plane_conics.constructor import Conic
|
|
29
|
+
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
|
|
30
|
+
from sage.schemes.hyperelliptic_curves.constructor import HyperellipticCurve
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def HyperellipticCurve_from_invariants(i, reduced=True, precision=None,
|
|
34
|
+
algorithm='default'):
|
|
35
|
+
r"""
|
|
36
|
+
Return a hyperelliptic curve with the given Igusa-Clebsch invariants up to
|
|
37
|
+
scaling.
|
|
38
|
+
|
|
39
|
+
The output is a curve over the field in which the Igusa-Clebsch invariants
|
|
40
|
+
are given. The output curve is unique up to isomorphism over the algebraic
|
|
41
|
+
closure. If no such curve exists over the given field, then raise a
|
|
42
|
+
:exc:`ValueError`.
|
|
43
|
+
|
|
44
|
+
INPUT:
|
|
45
|
+
|
|
46
|
+
- ``i`` -- list or tuple of length 4 containing the four Igusa-Clebsch
|
|
47
|
+
invariants: I2,I4,I6,I10
|
|
48
|
+
- ``reduced`` -- boolean (default: ``True``); if ``True``, tries to reduce
|
|
49
|
+
the polynomial defining the hyperelliptic curve using the function
|
|
50
|
+
:func:`reduce_polynomial` (see the :func:`reduce_polynomial`
|
|
51
|
+
documentation for more details).
|
|
52
|
+
- ``precision`` -- integer (default: ``None``); which precision for real and
|
|
53
|
+
complex numbers should the reduction use. This only affects the
|
|
54
|
+
reduction, not the correctness. If ``None``, the algorithm uses the default
|
|
55
|
+
53 bit precision.
|
|
56
|
+
- ``algorithm`` -- ``'default'`` or ``'magma'``. If set to ``'magma'``, uses
|
|
57
|
+
Magma to parameterize Mestre's conic (needs Magma to be installed)
|
|
58
|
+
|
|
59
|
+
OUTPUT: a hyperelliptic curve object
|
|
60
|
+
|
|
61
|
+
EXAMPLES:
|
|
62
|
+
|
|
63
|
+
Examples over the rationals::
|
|
64
|
+
|
|
65
|
+
sage: HyperellipticCurve_from_invariants([3840,414720,491028480,2437709561856])
|
|
66
|
+
Traceback (most recent call last):
|
|
67
|
+
...
|
|
68
|
+
NotImplementedError: Reduction of hyperelliptic curves not yet implemented.
|
|
69
|
+
See issues #14755 and #14756.
|
|
70
|
+
|
|
71
|
+
sage: HyperellipticCurve_from_invariants([3840,414720,491028480,2437709561856], reduced=False)
|
|
72
|
+
Hyperelliptic Curve over Rational Field defined by
|
|
73
|
+
y^2 = -46656*x^6 + 46656*x^5 - 19440*x^4 + 4320*x^3 - 540*x^2 + 4410*x - 1
|
|
74
|
+
|
|
75
|
+
sage: HyperellipticCurve_from_invariants([21, 225/64, 22941/512, 1])
|
|
76
|
+
Traceback (most recent call last):
|
|
77
|
+
...
|
|
78
|
+
NotImplementedError: Reduction of hyperelliptic curves not yet implemented.
|
|
79
|
+
See issues #14755 and #14756.
|
|
80
|
+
|
|
81
|
+
An example over a finite field::
|
|
82
|
+
|
|
83
|
+
sage: H = HyperellipticCurve_from_invariants([GF(13)(1), 3, 7, 5]); H
|
|
84
|
+
Hyperelliptic Curve over Finite Field of size 13 defined by ...
|
|
85
|
+
sage: H.igusa_clebsch_invariants()
|
|
86
|
+
(4, 9, 6, 11)
|
|
87
|
+
|
|
88
|
+
An example over a number field::
|
|
89
|
+
|
|
90
|
+
sage: K = QuadraticField(353, 'a') # needs sage.rings.number_field
|
|
91
|
+
sage: H = HyperellipticCurve_from_invariants([21, 225/64, 22941/512, 1], # needs sage.rings.number_field
|
|
92
|
+
....: reduced=false)
|
|
93
|
+
sage: f = K['x'](H.hyperelliptic_polynomials()[0]) # needs sage.rings.number_field
|
|
94
|
+
|
|
95
|
+
If the Mestre Conic defined by the Igusa-Clebsch invariants has no rational
|
|
96
|
+
points, then there exists no hyperelliptic curve over the base field with
|
|
97
|
+
the given invariants.::
|
|
98
|
+
|
|
99
|
+
sage: HyperellipticCurve_from_invariants([1,2,3,4])
|
|
100
|
+
Traceback (most recent call last):
|
|
101
|
+
...
|
|
102
|
+
ValueError: No such curve exists over Rational Field as there are
|
|
103
|
+
no rational points on Projective Conic Curve over Rational Field defined by
|
|
104
|
+
-2572155000*u^2 - 317736000*u*v + 1250755459200*v^2 + 2501510918400*u*w
|
|
105
|
+
+ 39276887040*v*w + 2736219686912*w^2
|
|
106
|
+
|
|
107
|
+
Mestre's algorithm only works for generic curves of genus two, so another
|
|
108
|
+
algorithm is needed for those curves with extra automorphism. See also
|
|
109
|
+
:issue:`12199`::
|
|
110
|
+
|
|
111
|
+
sage: P.<x> = QQ[]
|
|
112
|
+
sage: C = HyperellipticCurve(x^6 + 1)
|
|
113
|
+
sage: i = C.igusa_clebsch_invariants()
|
|
114
|
+
sage: HyperellipticCurve_from_invariants(i)
|
|
115
|
+
Traceback (most recent call last):
|
|
116
|
+
...
|
|
117
|
+
TypeError: F (=0) must have degree 2
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
Igusa-Clebsch invariants also only work over fields of characteristic
|
|
121
|
+
different from 2, 3, and 5, so another algorithm will be needed for fields
|
|
122
|
+
of those characteristics. See also :issue:`12200`::
|
|
123
|
+
|
|
124
|
+
sage: P.<x> = GF(3)[]
|
|
125
|
+
sage: HyperellipticCurve(x^6 + x + 1).igusa_clebsch_invariants()
|
|
126
|
+
Traceback (most recent call last):
|
|
127
|
+
...
|
|
128
|
+
NotImplementedError: Invariants of binary sextics/genus 2 hyperelliptic curves
|
|
129
|
+
not implemented in characteristics 2, 3, and 5
|
|
130
|
+
sage: HyperellipticCurve_from_invariants([GF(5)(1), 1, 0, 1])
|
|
131
|
+
Traceback (most recent call last):
|
|
132
|
+
...
|
|
133
|
+
ZeroDivisionError: inverse of Mod(0, 5) does not exist
|
|
134
|
+
|
|
135
|
+
ALGORITHM:
|
|
136
|
+
|
|
137
|
+
This is Mestre's algorithm [Mes1991]_. Our implementation is based on the
|
|
138
|
+
formulae on page 957 of [LY2001]_, cross-referenced with [Wam1999b]_ to
|
|
139
|
+
correct typos.
|
|
140
|
+
|
|
141
|
+
First construct Mestre's conic using the :func:`Mestre_conic` function.
|
|
142
|
+
Parametrize the conic if possible.
|
|
143
|
+
Let `f_1, f_2, f_3` be the three coordinates of the parametrization of the
|
|
144
|
+
conic by the projective line, and change them into one variable by letting
|
|
145
|
+
`F_i = f_i(t, 1)`. Note that each `F_i` has degree at most 2.
|
|
146
|
+
|
|
147
|
+
Then construct a sextic polynomial
|
|
148
|
+
`f = \sum_{0<=i,j,k<=3}{c_{ijk}*F_i*F_j*F_k}`,
|
|
149
|
+
where `c_{ijk}` are defined as rational functions in the invariants
|
|
150
|
+
(see the source code for detailed formulae for `c_{ijk}`).
|
|
151
|
+
The output is the hyperelliptic curve `y^2 = f`.
|
|
152
|
+
"""
|
|
153
|
+
from sage.structure.sequence import Sequence
|
|
154
|
+
i = Sequence(i)
|
|
155
|
+
k = i.universe()
|
|
156
|
+
try:
|
|
157
|
+
k = k.fraction_field()
|
|
158
|
+
except (TypeError, AttributeError, NotImplementedError):
|
|
159
|
+
pass
|
|
160
|
+
|
|
161
|
+
MConic, x, y, z = Mestre_conic(i, xyz=True)
|
|
162
|
+
if k.is_finite():
|
|
163
|
+
reduced = False
|
|
164
|
+
|
|
165
|
+
t = k['t'].gen()
|
|
166
|
+
|
|
167
|
+
if algorithm == 'magma':
|
|
168
|
+
from sage.interfaces.magma import magma
|
|
169
|
+
if MConic.has_rational_point(algorithm='magma'):
|
|
170
|
+
parametrization = magma(MConic).Parametrization().DefiningPolynomials().sage()
|
|
171
|
+
F1, F2, F3 = (p(t, 1) for p in parametrization)
|
|
172
|
+
else:
|
|
173
|
+
raise ValueError(f"No such curve exists over {k} as there are no "
|
|
174
|
+
f"rational points on {MConic}")
|
|
175
|
+
else:
|
|
176
|
+
if MConic.has_rational_point():
|
|
177
|
+
parametrization = MConic.parametrization(morphism=False)[0]
|
|
178
|
+
F1, F2, F3 = (p(t, 1) for p in parametrization)
|
|
179
|
+
else:
|
|
180
|
+
raise ValueError(f"No such curve exists over {k} as there are no "
|
|
181
|
+
f"rational points on {MConic}")
|
|
182
|
+
|
|
183
|
+
# setting the cijk from Mestre's algorithm
|
|
184
|
+
c111 = 12*x*y - 2*y/3 - 4*z
|
|
185
|
+
c112 = -18*x**3 - 12*x*y - 36*y**2 - 2*z
|
|
186
|
+
c113 = -9*x**3 - 36*x**2*y - 4*x*y - 6*x*z - 18*y**2
|
|
187
|
+
c122 = c113
|
|
188
|
+
c123 = -54*x**4 - 36*x**2*y - 36*x*y**2 - 6*x*z - 4*y**2 - 24*y*z
|
|
189
|
+
c133 = -27*x**4/2 - 72*x**3*y - 6*x**2*y - 9*x**2*z - 39*x*y**2 - \
|
|
190
|
+
36*y**3 - 2*y*z
|
|
191
|
+
c222 = -27*x**4 - 18*x**2*y - 6*x*y**2 - 8*y**2/3 + 2*y*z
|
|
192
|
+
c223 = 9*x**3*y - 27*x**2*z + 6*x*y**2 + 18*y**3 - 8*y*z
|
|
193
|
+
c233 = -81*x**5/2 - 27*x**3*y - 9*x**2*y**2 - 4*x*y**2 + 3*x*y*z - 6*z**2
|
|
194
|
+
c333 = 27*x**4*y/2 - 27*x**3*z/2 + 9*x**2*y**2 + 3*x*y**3 - 6*x*y*z + \
|
|
195
|
+
4*y**3/3 - 10*y**2*z
|
|
196
|
+
|
|
197
|
+
# writing out the hyperelliptic curve polynomial
|
|
198
|
+
f = c111*F1**3 + c112*F1**2*F2 + c113*F1**2*F3 + c122*F1*F2**2 + \
|
|
199
|
+
c123*F1*F2*F3 + c133*F1*F3**2 + c222*F2**3 + c223*F2**2*F3 + \
|
|
200
|
+
c233*F2*F3**2 + c333*F3**3
|
|
201
|
+
|
|
202
|
+
try:
|
|
203
|
+
f = f * f.denominator() # clear the denominator
|
|
204
|
+
except (AttributeError, TypeError):
|
|
205
|
+
pass
|
|
206
|
+
|
|
207
|
+
if reduced:
|
|
208
|
+
raise NotImplementedError("Reduction of hyperelliptic curves not "
|
|
209
|
+
"yet implemented. "
|
|
210
|
+
"See issues #14755 and #14756.")
|
|
211
|
+
|
|
212
|
+
return HyperellipticCurve(f)
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
def Mestre_conic(i, xyz=False, names='u,v,w'):
|
|
216
|
+
r"""
|
|
217
|
+
Return the conic equation from Mestre's algorithm given the Igusa-Clebsch
|
|
218
|
+
invariants.
|
|
219
|
+
|
|
220
|
+
It has a rational point if and only if a hyperelliptic curve
|
|
221
|
+
corresponding to the invariants exists.
|
|
222
|
+
|
|
223
|
+
INPUT:
|
|
224
|
+
|
|
225
|
+
- ``i`` -- list or tuple of length 4 containing the four Igusa-Clebsch
|
|
226
|
+
invariants: I2, I4, I6, I10
|
|
227
|
+
- ``xyz`` -- boolean (default: ``False``); if ``True``, the algorithm also
|
|
228
|
+
returns three invariants `x`,`y`,`z` used in Mestre's algorithm
|
|
229
|
+
- ``names`` -- (default: ``'u,v,w'``) the variable names for the conic
|
|
230
|
+
|
|
231
|
+
OUTPUT: a Conic object
|
|
232
|
+
|
|
233
|
+
EXAMPLES:
|
|
234
|
+
|
|
235
|
+
A standard example::
|
|
236
|
+
|
|
237
|
+
sage: Mestre_conic([1,2,3,4])
|
|
238
|
+
Projective Conic Curve over Rational Field defined by
|
|
239
|
+
-2572155000*u^2 - 317736000*u*v + 1250755459200*v^2 + 2501510918400*u*w
|
|
240
|
+
+ 39276887040*v*w + 2736219686912*w^2
|
|
241
|
+
|
|
242
|
+
Note that the algorithm works over number fields as well::
|
|
243
|
+
|
|
244
|
+
sage: x = polygen(ZZ, 'x')
|
|
245
|
+
sage: k = NumberField(x^2 - 41, 'a') # needs sage.rings.number_field
|
|
246
|
+
sage: a = k.an_element() # needs sage.rings.number_field
|
|
247
|
+
sage: Mestre_conic([1, 2 + a, a, 4 + a]) # needs sage.rings.number_field
|
|
248
|
+
Projective Conic Curve over Number Field in a with defining polynomial x^2 - 41
|
|
249
|
+
defined by (-801900000*a + 343845000)*u^2 + (855360000*a + 15795864000)*u*v
|
|
250
|
+
+ (312292800000*a + 1284808579200)*v^2 + (624585600000*a + 2569617158400)*u*w
|
|
251
|
+
+ (15799910400*a + 234573143040)*v*w + (2034199306240*a + 16429854656512)*w^2
|
|
252
|
+
|
|
253
|
+
And over finite fields::
|
|
254
|
+
|
|
255
|
+
sage: Mestre_conic([GF(7)(10), GF(7)(1), GF(7)(2), GF(7)(3)])
|
|
256
|
+
Projective Conic Curve over Finite Field of size 7
|
|
257
|
+
defined by -2*u*v - v^2 - 2*u*w + 2*v*w - 3*w^2
|
|
258
|
+
|
|
259
|
+
An example with ``xyz``::
|
|
260
|
+
|
|
261
|
+
sage: Mestre_conic([5,6,7,8], xyz=True)
|
|
262
|
+
(Projective Conic Curve over Rational Field
|
|
263
|
+
defined by -415125000*u^2 + 608040000*u*v + 33065136000*v^2
|
|
264
|
+
+ 66130272000*u*w + 240829440*v*w + 10208835584*w^2,
|
|
265
|
+
232/1125, -1072/16875, 14695616/2109375)
|
|
266
|
+
|
|
267
|
+
ALGORITHM:
|
|
268
|
+
|
|
269
|
+
The formulas are taken from pages 956 - 957 of [LY2001]_ and based on pages
|
|
270
|
+
321 and 332 of [Mes1991]_.
|
|
271
|
+
|
|
272
|
+
See the code or [LY2001]_ for the detailed formulae defining x, y, z and L.
|
|
273
|
+
"""
|
|
274
|
+
from sage.structure.sequence import Sequence
|
|
275
|
+
k = Sequence(i).universe()
|
|
276
|
+
try:
|
|
277
|
+
k = k.fraction_field()
|
|
278
|
+
except (TypeError, AttributeError, NotImplementedError):
|
|
279
|
+
pass
|
|
280
|
+
|
|
281
|
+
I2, I4, I6, I10 = i
|
|
282
|
+
|
|
283
|
+
#Setting x,y,z as in Mestre's algorithm (Using Lauter and Yang's formulas)
|
|
284
|
+
x = 8*(1 + 20*I4/(I2**2))/225
|
|
285
|
+
y = 16*(1 + 80*I4/(I2**2) - 600*I6/(I2**3))/3375
|
|
286
|
+
z = -64*(-10800000*I10/(I2**5) - 9 - 700*I4/(I2**2) + 3600*I6/(I2**3) +
|
|
287
|
+
12400*I4**2/(I2**4) - 48000*I4*I6/(I2**5))/253125
|
|
288
|
+
|
|
289
|
+
L = Matrix([[x+6*y , 6*x**2+2*y , 2*z ],
|
|
290
|
+
[6*x**2+2*y, 2*z , 9*x**3 + 4*x*y + 6*y**2 ],
|
|
291
|
+
[2*z , 9*x**3+4*x*y+6*y**2, 6*x**2*y + 2*y**2 + 3*x*z]])
|
|
292
|
+
|
|
293
|
+
try:
|
|
294
|
+
L = L*L.denominator() # clears the denominator
|
|
295
|
+
except (AttributeError, TypeError):
|
|
296
|
+
pass
|
|
297
|
+
|
|
298
|
+
u, v, w = PolynomialRing(k, names).gens()
|
|
299
|
+
MConic = Conic(k, L, names)
|
|
300
|
+
if xyz:
|
|
301
|
+
return MConic, x, y, z
|
|
302
|
+
return MConic
|