passagemath-schemes 10.6.38__cp314-cp314t-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.
Potentially problematic release.
This version of passagemath-schemes might be problematic. Click here for more details.
- passagemath_schemes/.dylibs/libflint.21.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.38.dist-info/METADATA +204 -0
- passagemath_schemes-10.6.38.dist-info/METADATA.bak +205 -0
- passagemath_schemes-10.6.38.dist-info/RECORD +314 -0
- passagemath_schemes-10.6.38.dist-info/WHEEL +6 -0
- passagemath_schemes-10.6.38.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-314t-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-314t-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-314t-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-314t-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-314t-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-314t-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-314t-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-314t-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.cpython-314t-darwin.so +0 -0
- sage/modular/modsym/p1list.pxd +29 -0
- sage/modular/modsym/p1list.pyx +1372 -0
- sage/modular/modsym/p1list_nf.py +1241 -0
- sage/modular/modsym/relation_matrix.py +591 -0
- sage/modular/modsym/relation_matrix_pyx.cpython-314t-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-314t-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-314t-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,84 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
"""
|
|
3
|
+
Hyperelliptic curves over the rationals
|
|
4
|
+
"""
|
|
5
|
+
#*****************************************************************************
|
|
6
|
+
# Copyright (C) 2006 David Kohel <kohel@maths.usyd.edu>
|
|
7
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
8
|
+
# http://www.gnu.org/licenses/
|
|
9
|
+
#*****************************************************************************
|
|
10
|
+
|
|
11
|
+
import sage.rings.abc
|
|
12
|
+
|
|
13
|
+
from sage.misc.lazy_import import lazy_import
|
|
14
|
+
from sage.schemes.curves.projective_curve import ProjectivePlaneCurve_field
|
|
15
|
+
|
|
16
|
+
lazy_import('sage.rings.padics.factory', 'Qp', as_='pAdicField')
|
|
17
|
+
|
|
18
|
+
from . import hyperelliptic_generic
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class HyperellipticCurve_rational_field(hyperelliptic_generic.HyperellipticCurve_generic,
|
|
22
|
+
ProjectivePlaneCurve_field):
|
|
23
|
+
|
|
24
|
+
def matrix_of_frobenius(self, p, prec=20):
|
|
25
|
+
"""
|
|
26
|
+
Compute the matrix of Frobenius on Monsky-Washnitzer cohomology using
|
|
27
|
+
the `p`-adic field with precision ``prec``.
|
|
28
|
+
|
|
29
|
+
This function is essentially a wrapper function of
|
|
30
|
+
:meth:`sage.schemes.hyperelliptic_curves.monsky_washnitzer.matrix_of_frobenius_hyperelliptic`.
|
|
31
|
+
|
|
32
|
+
INPUT:
|
|
33
|
+
|
|
34
|
+
- ``p`` -- prime integer or pAdic ring / field; if ``p`` is an integer,
|
|
35
|
+
constructs a ``pAdicField`` with ``p`` to compute the matrix of
|
|
36
|
+
Frobenius, otherwise uses the supplied pAdic ring or field
|
|
37
|
+
|
|
38
|
+
- ``prec`` -- (optional) if ``p`` is an prime integer, the `p`-adic
|
|
39
|
+
precision of the coefficient ring constructed
|
|
40
|
+
|
|
41
|
+
EXAMPLES::
|
|
42
|
+
|
|
43
|
+
sage: K = pAdicField(5, prec=3)
|
|
44
|
+
sage: R.<x> = QQ['x']
|
|
45
|
+
sage: H = HyperellipticCurve(x^5 - 2*x + 3)
|
|
46
|
+
sage: H.matrix_of_frobenius(K)
|
|
47
|
+
[ 4*5 + O(5^3) 5 + 2*5^2 + O(5^3) 2 + 3*5 + 2*5^2 + O(5^3) 2 + 5 + 5^2 + O(5^3)]
|
|
48
|
+
[ 3*5 + 5^2 + O(5^3) 3*5 + O(5^3) 4*5 + O(5^3) 2 + 5^2 + O(5^3)]
|
|
49
|
+
[ 4*5 + 4*5^2 + O(5^3) 3*5 + 2*5^2 + O(5^3) 5 + 3*5^2 + O(5^3) 2*5 + 2*5^2 + O(5^3)]
|
|
50
|
+
[ 5^2 + O(5^3) 5 + 4*5^2 + O(5^3) 4*5 + 3*5^2 + O(5^3) 2*5 + O(5^3)]
|
|
51
|
+
|
|
52
|
+
You can also pass directly a prime `p` with to construct a pAdic field with precision
|
|
53
|
+
``prec``::
|
|
54
|
+
|
|
55
|
+
sage: H.matrix_of_frobenius(3, prec=2)
|
|
56
|
+
[ O(3^2) 3 + O(3^2) O(3^2) O(3^2)]
|
|
57
|
+
[ 3 + O(3^2) O(3^2) O(3^2) 2 + 3 + O(3^2)]
|
|
58
|
+
[ 2*3 + O(3^2) O(3^2) O(3^2) 3^-1 + O(3)]
|
|
59
|
+
[ O(3^2) O(3^2) 3 + O(3^2) O(3^2)]
|
|
60
|
+
"""
|
|
61
|
+
import sage.schemes.hyperelliptic_curves.monsky_washnitzer as monsky_washnitzer
|
|
62
|
+
if isinstance(p, (sage.rings.abc.pAdicField, sage.rings.abc.pAdicRing)):
|
|
63
|
+
K = p
|
|
64
|
+
else:
|
|
65
|
+
K = pAdicField(p, prec)
|
|
66
|
+
frob_p, _ = monsky_washnitzer.matrix_of_frobenius_hyperelliptic(self.change_ring(K))
|
|
67
|
+
return frob_p
|
|
68
|
+
|
|
69
|
+
def lseries(self, prec=53):
|
|
70
|
+
"""
|
|
71
|
+
Return the `L`-series of this hyperelliptic curve of genus 2.
|
|
72
|
+
|
|
73
|
+
EXAMPLES::
|
|
74
|
+
|
|
75
|
+
sage: x = polygen(QQ, 'x')
|
|
76
|
+
sage: C = HyperellipticCurve(x^2+x, x^3+x^2+1)
|
|
77
|
+
sage: C.lseries()
|
|
78
|
+
PARI L-function associated to Hyperelliptic Curve
|
|
79
|
+
over Rational Field defined by y^2 + (x^3 + x^2 + 1)*y = x^2 + x
|
|
80
|
+
"""
|
|
81
|
+
from sage.lfunctions.pari import LFunction, lfun_genus2
|
|
82
|
+
L = LFunction(lfun_genus2(self), prec=prec)
|
|
83
|
+
L.rename('PARI L-function associated to %s' % self)
|
|
84
|
+
return L
|
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
r"""
|
|
3
|
+
Compute invariants of quintics and sextics via 'Ueberschiebung'
|
|
4
|
+
|
|
5
|
+
.. TODO::
|
|
6
|
+
|
|
7
|
+
* Implement invariants in small positive characteristic.
|
|
8
|
+
|
|
9
|
+
* Cardona-Quer and additional invariants for classifying automorphism groups.
|
|
10
|
+
|
|
11
|
+
AUTHOR:
|
|
12
|
+
|
|
13
|
+
- Nick Alexander
|
|
14
|
+
"""
|
|
15
|
+
from sage.rings.integer_ring import ZZ
|
|
16
|
+
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def diffxy(f, x, xtimes, y, ytimes):
|
|
20
|
+
r"""
|
|
21
|
+
Differentiate a polynomial ``f``, ``xtimes`` with respect to ``x``, and
|
|
22
|
+
``ytimes`` with respect to ``y``.
|
|
23
|
+
|
|
24
|
+
EXAMPLES::
|
|
25
|
+
|
|
26
|
+
sage: from sage.schemes.hyperelliptic_curves.invariants import diffxy
|
|
27
|
+
sage: R.<u, v> = QQ[]
|
|
28
|
+
sage: diffxy(u^2*v^3, u, 0, v, 0)
|
|
29
|
+
u^2*v^3
|
|
30
|
+
sage: diffxy(u^2*v^3, u, 2, v, 1)
|
|
31
|
+
6*v^2
|
|
32
|
+
sage: diffxy(u^2*v^3, u, 2, v, 2)
|
|
33
|
+
12*v
|
|
34
|
+
sage: diffxy(u^2*v^3 + u^4*v^4, u, 2, v, 2)
|
|
35
|
+
144*u^2*v^2 + 12*v
|
|
36
|
+
"""
|
|
37
|
+
h = f
|
|
38
|
+
for i in range(xtimes):
|
|
39
|
+
h = h.derivative(x)
|
|
40
|
+
for j in range(ytimes):
|
|
41
|
+
h = h.derivative(y)
|
|
42
|
+
return h
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def differential_operator(f, g, k):
|
|
46
|
+
r"""
|
|
47
|
+
Return the differential operator `(f g)_k` symbolically in the polynomial ring in ``dfdx, dfdy, dgdx, dgdy``.
|
|
48
|
+
|
|
49
|
+
This is defined by Mestre on p 315 [Mes1991]_:
|
|
50
|
+
|
|
51
|
+
.. MATH::
|
|
52
|
+
|
|
53
|
+
(f g)_k = \frac{(m - k)! (n - k)!}{m! n!} \left(
|
|
54
|
+
\frac{\partial f}{\partial x} \frac{\partial g}{\partial y} -
|
|
55
|
+
\frac{\partial f}{\partial y} \frac{\partial g}{\partial x} \right)^k .
|
|
56
|
+
|
|
57
|
+
EXAMPLES::
|
|
58
|
+
|
|
59
|
+
sage: from sage.schemes.hyperelliptic_curves.invariants import differential_operator
|
|
60
|
+
sage: R.<x, y> = QQ[]
|
|
61
|
+
sage: differential_operator(x, y, 0)
|
|
62
|
+
1
|
|
63
|
+
sage: differential_operator(x, y, 1)
|
|
64
|
+
-dfdy*dgdx + dfdx*dgdy
|
|
65
|
+
sage: differential_operator(x*y, x*y, 2)
|
|
66
|
+
1/4*dfdy^2*dgdx^2 - 1/2*dfdx*dfdy*dgdx*dgdy + 1/4*dfdx^2*dgdy^2
|
|
67
|
+
sage: differential_operator(x^2*y, x*y^2, 2)
|
|
68
|
+
1/36*dfdy^2*dgdx^2 - 1/18*dfdx*dfdy*dgdx*dgdy + 1/36*dfdx^2*dgdy^2
|
|
69
|
+
sage: differential_operator(x^2*y, x*y^2, 4)
|
|
70
|
+
1/576*dfdy^4*dgdx^4 - 1/144*dfdx*dfdy^3*dgdx^3*dgdy + 1/96*dfdx^2*dfdy^2*dgdx^2*dgdy^2
|
|
71
|
+
- 1/144*dfdx^3*dfdy*dgdx*dgdy^3 + 1/576*dfdx^4*dgdy^4
|
|
72
|
+
"""
|
|
73
|
+
(x, y) = f.parent().gens()
|
|
74
|
+
n = max(ZZ(f.degree()), ZZ(k))
|
|
75
|
+
m = max(ZZ(g.degree()), ZZ(k))
|
|
76
|
+
R, (fx, fy, gx, gy) = PolynomialRing(f.base_ring(), 4, 'dfdx,dfdy,dgdx,dgdy').objgens()
|
|
77
|
+
const = (m - k).factorial() * (n - k).factorial() / (m.factorial() * n.factorial())
|
|
78
|
+
U = f.base_ring()(const) * (fx*gy - fy*gx)**k
|
|
79
|
+
return U
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def diffsymb(U, f, g):
|
|
83
|
+
r"""
|
|
84
|
+
Given a differential operator ``U`` in ``dfdx, dfdy, dgdx, dgdy``,
|
|
85
|
+
represented symbolically by ``U``, apply it to ``f, g``.
|
|
86
|
+
|
|
87
|
+
EXAMPLES::
|
|
88
|
+
|
|
89
|
+
sage: from sage.schemes.hyperelliptic_curves.invariants import diffsymb
|
|
90
|
+
sage: R.<x, y> = QQ[]
|
|
91
|
+
sage: S.<dfdx, dfdy, dgdx, dgdy> = QQ[]
|
|
92
|
+
sage: [ diffsymb(dd, x^2, y*0 + 1) for dd in S.gens() ]
|
|
93
|
+
[2*x, 0, 0, 0]
|
|
94
|
+
sage: [ diffsymb(dd, x*0 + 1, y^2) for dd in S.gens() ]
|
|
95
|
+
[0, 0, 0, 2*y]
|
|
96
|
+
sage: [ diffsymb(dd, x^2, y^2) for dd in S.gens() ]
|
|
97
|
+
[2*x*y^2, 0, 0, 2*x^2*y]
|
|
98
|
+
|
|
99
|
+
sage: diffsymb(dfdx + dfdy*dgdy, y*x^2, y^3)
|
|
100
|
+
2*x*y^4 + 3*x^2*y^2
|
|
101
|
+
"""
|
|
102
|
+
(x, y) = f.parent().gens()
|
|
103
|
+
R, (fx, fy, gx, gy) = PolynomialRing(f.base_ring(), 4, 'dfdx,dfdy,dgdx,dgdy').objgens()
|
|
104
|
+
res = 0
|
|
105
|
+
for coeff, mon in list(U):
|
|
106
|
+
mon = R(mon)
|
|
107
|
+
a = diffxy(f, x, mon.degree(fx), y, mon.degree(fy))
|
|
108
|
+
b = diffxy(g, x, mon.degree(gx), y, mon.degree(gy))
|
|
109
|
+
temp = coeff * a * b
|
|
110
|
+
res = res + temp
|
|
111
|
+
return res
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def Ueberschiebung(f, g, k):
|
|
115
|
+
r"""
|
|
116
|
+
Return the differential operator `(f g)_k`.
|
|
117
|
+
|
|
118
|
+
This is defined by Mestre on page 315 [Mes1991]_:
|
|
119
|
+
|
|
120
|
+
.. MATH::
|
|
121
|
+
|
|
122
|
+
(f g)_k = \frac{(m - k)! (n - k)!}{m! n!} \left(
|
|
123
|
+
\frac{\partial f}{\partial x} \frac{\partial g}{\partial y} -
|
|
124
|
+
\frac{\partial f}{\partial y} \frac{\partial g}{\partial x} \right)^k .
|
|
125
|
+
|
|
126
|
+
EXAMPLES::
|
|
127
|
+
|
|
128
|
+
sage: from sage.schemes.hyperelliptic_curves.invariants import Ueberschiebung as ub
|
|
129
|
+
sage: R.<x, y> = QQ[]
|
|
130
|
+
sage: ub(x, y, 0)
|
|
131
|
+
x*y
|
|
132
|
+
sage: ub(x^5 + 1, x^5 + 1, 1)
|
|
133
|
+
0
|
|
134
|
+
sage: ub(x^5 + 5*x + 1, x^5 + 5*x + 1, 0)
|
|
135
|
+
x^10 + 10*x^6 + 2*x^5 + 25*x^2 + 10*x + 1
|
|
136
|
+
"""
|
|
137
|
+
U = differential_operator(f, g, k)
|
|
138
|
+
# U is the (f g)_k = ... of Mestre, p315, symbolically
|
|
139
|
+
return diffsymb(U, f, g)
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def ubs(f):
|
|
143
|
+
r"""
|
|
144
|
+
Given a sextic form `f`, return a dictionary of the invariants of Mestre, p 317 [Mes1991]_.
|
|
145
|
+
|
|
146
|
+
`f` may be homogeneous in two variables or inhomogeneous in one.
|
|
147
|
+
|
|
148
|
+
EXAMPLES::
|
|
149
|
+
|
|
150
|
+
sage: from sage.schemes.hyperelliptic_curves.invariants import ubs
|
|
151
|
+
sage: x = QQ['x'].0
|
|
152
|
+
sage: ubs(x^6 + 1)
|
|
153
|
+
{'A': 2,
|
|
154
|
+
'B': 2/3,
|
|
155
|
+
'C': -2/9,
|
|
156
|
+
'D': 0,
|
|
157
|
+
'Delta': -2/3*x^2*h^2,
|
|
158
|
+
'f': x^6 + h^6,
|
|
159
|
+
'i': 2*x^2*h^2,
|
|
160
|
+
'y1': 0,
|
|
161
|
+
'y2': 0,
|
|
162
|
+
'y3': 0}
|
|
163
|
+
|
|
164
|
+
sage: R.<u, v> = QQ[]
|
|
165
|
+
sage: ubs(u^6 + v^6)
|
|
166
|
+
{'A': 2,
|
|
167
|
+
'B': 2/3,
|
|
168
|
+
'C': -2/9,
|
|
169
|
+
'D': 0,
|
|
170
|
+
'Delta': -2/3*u^2*v^2,
|
|
171
|
+
'f': u^6 + v^6,
|
|
172
|
+
'i': 2*u^2*v^2,
|
|
173
|
+
'y1': 0,
|
|
174
|
+
'y2': 0,
|
|
175
|
+
'y3': 0}
|
|
176
|
+
|
|
177
|
+
sage: R.<t> = GF(31)[]
|
|
178
|
+
sage: ubs(t^6 + 2*t^5 + t^2 + 3*t + 1)
|
|
179
|
+
{'A': 0,
|
|
180
|
+
'B': -12,
|
|
181
|
+
'C': -15,
|
|
182
|
+
'D': -15,
|
|
183
|
+
'Delta': -10*t^4 + 12*t^3*h + 7*t^2*h^2 - 5*t*h^3 + 2*h^4,
|
|
184
|
+
'f': t^6 + 2*t^5*h + t^2*h^4 + 3*t*h^5 + h^6,
|
|
185
|
+
'i': -4*t^4 + 10*t^3*h + 2*t^2*h^2 - 9*t*h^3 - 7*h^4,
|
|
186
|
+
'y1': 4*t^2 - 10*t*h - 13*h^2,
|
|
187
|
+
'y2': 6*t^2 - 4*t*h + 2*h^2,
|
|
188
|
+
'y3': 4*t^2 - 4*t*h - 9*h^2}
|
|
189
|
+
"""
|
|
190
|
+
ub = Ueberschiebung
|
|
191
|
+
if f.parent().ngens() == 1:
|
|
192
|
+
f = PolynomialRing(f.parent().base_ring(), 1, f.parent().variable_name())(f)
|
|
193
|
+
x1, x2 = f.homogenize().parent().gens()
|
|
194
|
+
f = sum([ f[i]*x1**i*x2**(6-i) for i in range(7) ])
|
|
195
|
+
U = {}
|
|
196
|
+
U['f'] = f
|
|
197
|
+
U['i'] = ub(f, f, 4)
|
|
198
|
+
U['Delta'] = ub(U['i'], U['i'], 2)
|
|
199
|
+
U['y1'] = ub(f, U['i'], 4)
|
|
200
|
+
U['y2'] = ub(U['i'], U['y1'], 2)
|
|
201
|
+
U['y3'] = ub(U['i'], U['y2'], 2)
|
|
202
|
+
U['A'] = ub(f, f, 6)
|
|
203
|
+
U['B'] = ub(U['i'], U['i'], 4)
|
|
204
|
+
U['C'] = ub(U['i'], U['Delta'], 4)
|
|
205
|
+
U['D'] = ub(U['y3'], U['y1'], 2)
|
|
206
|
+
return U
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
def clebsch_to_igusa(A, B, C, D):
|
|
210
|
+
r"""
|
|
211
|
+
Convert Clebsch invariants `A, B, C, D` to Igusa invariants `I_2, I_4, I_6, I_{10}`.
|
|
212
|
+
|
|
213
|
+
EXAMPLES::
|
|
214
|
+
|
|
215
|
+
sage: from sage.schemes.hyperelliptic_curves.invariants import clebsch_to_igusa, igusa_to_clebsch
|
|
216
|
+
sage: clebsch_to_igusa(2, 3, 4, 5)
|
|
217
|
+
(-240, 17370, 231120, -103098906)
|
|
218
|
+
sage: igusa_to_clebsch(*clebsch_to_igusa(2, 3, 4, 5))
|
|
219
|
+
(2, 3, 4, 5)
|
|
220
|
+
|
|
221
|
+
sage: Cs = tuple(map(GF(31), (2, 3, 4, 5))); Cs
|
|
222
|
+
(2, 3, 4, 5)
|
|
223
|
+
sage: clebsch_to_igusa(*Cs)
|
|
224
|
+
(8, 10, 15, 26)
|
|
225
|
+
sage: igusa_to_clebsch(*clebsch_to_igusa(*Cs))
|
|
226
|
+
(2, 3, 4, 5)
|
|
227
|
+
"""
|
|
228
|
+
I2 = -120*A
|
|
229
|
+
I4 = -720*A**2 + 6750*B
|
|
230
|
+
I6 = 8640*A**3 - 108000*A*B + 202500*C
|
|
231
|
+
I10 = -62208*A**5 + 972000*A**3*B + 1620000*A**2*C - 3037500*A*B**2 - 6075000*B*C - 4556250*D
|
|
232
|
+
return (I2, I4, I6, I10)
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
def igusa_to_clebsch(I2, I4, I6, I10):
|
|
236
|
+
r"""
|
|
237
|
+
Convert Igusa invariants `I_2, I_4, I_6, I_{10}` to Clebsch invariants `A, B, C, D`.
|
|
238
|
+
|
|
239
|
+
EXAMPLES::
|
|
240
|
+
|
|
241
|
+
sage: from sage.schemes.hyperelliptic_curves.invariants import clebsch_to_igusa, igusa_to_clebsch
|
|
242
|
+
sage: igusa_to_clebsch(-2400, 173700, 23112000, -10309890600)
|
|
243
|
+
(20, 342/5, 2512/5, 43381012/1125)
|
|
244
|
+
sage: clebsch_to_igusa(*igusa_to_clebsch(-2400, 173700, 23112000, -10309890600))
|
|
245
|
+
(-2400, 173700, 23112000, -10309890600)
|
|
246
|
+
|
|
247
|
+
sage: Is = tuple(map(GF(31), (-2400, 173700, 23112000, -10309890600))); Is
|
|
248
|
+
(18, 7, 12, 27)
|
|
249
|
+
sage: igusa_to_clebsch(*Is)
|
|
250
|
+
(20, 25, 25, 12)
|
|
251
|
+
sage: clebsch_to_igusa(*igusa_to_clebsch(*Is))
|
|
252
|
+
(18, 7, 12, 27)
|
|
253
|
+
"""
|
|
254
|
+
A = -(+ I2) / 120
|
|
255
|
+
B = -(- I2**2 - 20*I4)/135000
|
|
256
|
+
C = -(+ I2**3 + 80*I2*I4 - 600*I6)/121500000
|
|
257
|
+
D = -(+ 9*I2**5 + 700*I2**3*I4 - 3600*I2**2*I6 - 12400*I2*I4**2 + 48000*I4*I6 + 10800000*I10) / 49207500000000
|
|
258
|
+
return (A, B, C, D)
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
def clebsch_invariants(f):
|
|
262
|
+
r"""
|
|
263
|
+
Given a sextic form `f`, return the Clebsch invariants `(A, B, C, D)` of
|
|
264
|
+
Mestre, p 317, [Mes1991]_.
|
|
265
|
+
|
|
266
|
+
`f` may be homogeneous in two variables or inhomogeneous in one.
|
|
267
|
+
|
|
268
|
+
EXAMPLES::
|
|
269
|
+
|
|
270
|
+
sage: from sage.schemes.hyperelliptic_curves.invariants import clebsch_invariants
|
|
271
|
+
sage: R.<x, y> = QQ[]
|
|
272
|
+
sage: clebsch_invariants(x^6 + y^6)
|
|
273
|
+
(2, 2/3, -2/9, 0)
|
|
274
|
+
sage: R.<x> = QQ[]
|
|
275
|
+
sage: clebsch_invariants(x^6 + x^5 + x^4 + x^2 + 2)
|
|
276
|
+
(62/15, 15434/5625, -236951/140625, 229930748/791015625)
|
|
277
|
+
|
|
278
|
+
sage: magma(x^6 + 1).ClebschInvariants() # optional - magma
|
|
279
|
+
[ 2, 2/3, -2/9, 0 ]
|
|
280
|
+
sage: magma(x^6 + x^5 + x^4 + x^2 + 2).ClebschInvariants() # optional - magma
|
|
281
|
+
[ 62/15, 15434/5625, -236951/140625, 229930748/791015625 ]
|
|
282
|
+
"""
|
|
283
|
+
R = f.parent().base_ring()
|
|
284
|
+
if R.characteristic() in [2, 3, 5]:
|
|
285
|
+
raise NotImplementedError("Invariants of binary sextics/genus 2 hyperelliptic "
|
|
286
|
+
"curves not implemented in characteristics 2, 3, and 5")
|
|
287
|
+
|
|
288
|
+
U = ubs(f)
|
|
289
|
+
L = U['A'], U['B'], U['C'], U['D']
|
|
290
|
+
assert all(t.is_constant() for t in L)
|
|
291
|
+
return tuple([ t.constant_coefficient() for t in L ])
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
def igusa_clebsch_invariants(f):
|
|
295
|
+
r"""
|
|
296
|
+
Given a sextic form `f`, return the Igusa-Clebsch invariants `I_2, I_4,
|
|
297
|
+
I_6, I_{10}` of Igusa and Clebsch [IJ1960]_.
|
|
298
|
+
|
|
299
|
+
`f` may be homogeneous in two variables or inhomogeneous in one.
|
|
300
|
+
|
|
301
|
+
EXAMPLES::
|
|
302
|
+
|
|
303
|
+
sage: from sage.schemes.hyperelliptic_curves.invariants import igusa_clebsch_invariants
|
|
304
|
+
sage: R.<x, y> = QQ[]
|
|
305
|
+
sage: igusa_clebsch_invariants(x^6 + y^6)
|
|
306
|
+
(-240, 1620, -119880, -46656)
|
|
307
|
+
sage: R.<x> = QQ[]
|
|
308
|
+
sage: igusa_clebsch_invariants(x^6 + x^5 + x^4 + x^2 + 2)
|
|
309
|
+
(-496, 6220, -955932, -1111784)
|
|
310
|
+
|
|
311
|
+
sage: magma(x^6 + 1).IgusaClebschInvariants() # optional - magma
|
|
312
|
+
[ -240, 1620, -119880, -46656 ]
|
|
313
|
+
sage: magma(x^6 + x^5 + x^4 + x^2 + 2).IgusaClebschInvariants() # optional - magma
|
|
314
|
+
[ -496, 6220, -955932, -1111784 ]
|
|
315
|
+
|
|
316
|
+
TESTS:
|
|
317
|
+
|
|
318
|
+
Let's check a symbolic example::
|
|
319
|
+
|
|
320
|
+
sage: R.<a, b, c, d, e> = QQ[]
|
|
321
|
+
sage: S.<x> = R[]
|
|
322
|
+
sage: igusa_clebsch_invariants(x^5 + a*x^4 + b*x^3 + c*x^2 + d*x + e)[0]
|
|
323
|
+
6*b^2 - 16*a*c + 40*d
|
|
324
|
+
|
|
325
|
+
sage: from sage.schemes.hyperelliptic_curves.invariants import absolute_igusa_invariants_wamelen
|
|
326
|
+
sage: absolute_igusa_invariants_wamelen(GF(5)['x'](x^6 - 2*x))
|
|
327
|
+
Traceback (most recent call last):
|
|
328
|
+
...
|
|
329
|
+
NotImplementedError: Invariants of binary sextics/genus 2 hyperelliptic curves
|
|
330
|
+
not implemented in characteristics 2, 3, and 5
|
|
331
|
+
"""
|
|
332
|
+
return clebsch_to_igusa(*clebsch_invariants(f))
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
def absolute_igusa_invariants_wamelen(f):
|
|
336
|
+
r"""
|
|
337
|
+
Given a sextic form `f`, return the three absolute Igusa invariants used by van Wamelen [Wam1999]_.
|
|
338
|
+
|
|
339
|
+
`f` may be homogeneous in two variables or inhomogeneous in one.
|
|
340
|
+
|
|
341
|
+
REFERENCES:
|
|
342
|
+
|
|
343
|
+
- [Wam1999]_
|
|
344
|
+
|
|
345
|
+
EXAMPLES::
|
|
346
|
+
|
|
347
|
+
sage: from sage.schemes.hyperelliptic_curves.invariants import absolute_igusa_invariants_wamelen
|
|
348
|
+
sage: R.<x> = QQ[]
|
|
349
|
+
sage: absolute_igusa_invariants_wamelen(x^5 - 1)
|
|
350
|
+
(0, 0, 0)
|
|
351
|
+
|
|
352
|
+
The following example can be checked against van Wamelen's paper::
|
|
353
|
+
|
|
354
|
+
sage: h = -x^5 + 3*x^4 + 2*x^3 - 6*x^2 - 3*x + 1
|
|
355
|
+
sage: i1, i2, i3 = absolute_igusa_invariants_wamelen(h)
|
|
356
|
+
sage: list(map(factor, (i1, i2, i3)))
|
|
357
|
+
[2^7 * 3^15, 2^5 * 3^11 * 5, 2^4 * 3^9 * 31]
|
|
358
|
+
|
|
359
|
+
TESTS::
|
|
360
|
+
|
|
361
|
+
sage: absolute_igusa_invariants_wamelen(GF(3)['x'](x^5 - 2*x))
|
|
362
|
+
Traceback (most recent call last):
|
|
363
|
+
...
|
|
364
|
+
NotImplementedError: Invariants of binary sextics/genus 2 hyperelliptic curves
|
|
365
|
+
not implemented in characteristics 2, 3, and 5
|
|
366
|
+
"""
|
|
367
|
+
I2, I4, I6, I10 = igusa_clebsch_invariants(f)
|
|
368
|
+
i1 = I2**5/I10
|
|
369
|
+
i2 = I2**3*I4/I10
|
|
370
|
+
i3 = I2**2*I6/I10
|
|
371
|
+
return (i1, i2, i3)
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
def absolute_igusa_invariants_kohel(f):
|
|
375
|
+
r"""
|
|
376
|
+
Given a sextic form `f`, return the three absolute Igusa invariants used by Kohel [KohECHIDNA]_.
|
|
377
|
+
|
|
378
|
+
`f` may be homogeneous in two variables or inhomogeneous in one.
|
|
379
|
+
|
|
380
|
+
EXAMPLES::
|
|
381
|
+
|
|
382
|
+
sage: from sage.schemes.hyperelliptic_curves.invariants import absolute_igusa_invariants_kohel
|
|
383
|
+
sage: R.<x> = QQ[]
|
|
384
|
+
sage: absolute_igusa_invariants_kohel(x^5 - 1)
|
|
385
|
+
(0, 0, 0)
|
|
386
|
+
sage: absolute_igusa_invariants_kohel(x^5 - x)
|
|
387
|
+
(100, -20000, -2000)
|
|
388
|
+
|
|
389
|
+
The following example can be checked against Kohel's database [KohECHIDNA]_ ::
|
|
390
|
+
|
|
391
|
+
sage: h = -x^5 + 3*x^4 + 2*x^3 - 6*x^2 - 3*x + 1
|
|
392
|
+
sage: i1, i2, i3 = absolute_igusa_invariants_kohel(h)
|
|
393
|
+
sage: list(map(factor, (i1, i2, i3)))
|
|
394
|
+
[2^2 * 3^5 * 5 * 31, 2^5 * 3^11 * 5, 2^4 * 3^9 * 31]
|
|
395
|
+
sage: list(map(factor, (150660, 28343520, 9762768)))
|
|
396
|
+
[2^2 * 3^5 * 5 * 31, 2^5 * 3^11 * 5, 2^4 * 3^9 * 31]
|
|
397
|
+
|
|
398
|
+
TESTS::
|
|
399
|
+
|
|
400
|
+
sage: absolute_igusa_invariants_kohel(GF(2)['x'](x^5 - x))
|
|
401
|
+
Traceback (most recent call last):
|
|
402
|
+
...
|
|
403
|
+
NotImplementedError: Invariants of binary sextics/genus 2 hyperelliptic curves
|
|
404
|
+
not implemented in characteristics 2, 3, and 5
|
|
405
|
+
"""
|
|
406
|
+
I2, I4, I6, I10 = igusa_clebsch_invariants(f)
|
|
407
|
+
i1 = I4*I6/I10
|
|
408
|
+
i2 = I2**3*I4/I10
|
|
409
|
+
i3 = I2**2*I6/I10
|
|
410
|
+
return (i1, i2, i3)
|