passagemath-schemes 10.6.40__cp314-cp314-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.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.40.dist-info/METADATA +204 -0
- passagemath_schemes-10.6.40.dist-info/METADATA.bak +205 -0
- passagemath_schemes-10.6.40.dist-info/RECORD +314 -0
- passagemath_schemes-10.6.40.dist-info/WHEEL +6 -0
- passagemath_schemes-10.6.40.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-314-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-314-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-314-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-314-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-314-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-314-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-314-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-314-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-314-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-314-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-314-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-314-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,59 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.libs.flint
|
|
3
|
+
r"""
|
|
4
|
+
This module is now called ``ring.py`` (see :issue:`31559`). Do not import from here as
|
|
5
|
+
it will generate a deprecation warning.
|
|
6
|
+
|
|
7
|
+
TESTS::
|
|
8
|
+
|
|
9
|
+
sage: from sage.modular.modform.ring import find_generators
|
|
10
|
+
sage: find_generators(ModularFormsRing(1))
|
|
11
|
+
doctest:warning
|
|
12
|
+
...
|
|
13
|
+
DeprecationWarning: find_generators is deprecated. Please use sage.modular.modform.ring.generators instead.
|
|
14
|
+
See https://github.com/sagemath/sage/issues/31559 for details.
|
|
15
|
+
[(4,
|
|
16
|
+
1 + 240*q + 2160*q^2 + 6720*q^3 + 17520*q^4 + 30240*q^5 + 60480*q^6 + 82560*q^7 + 140400*q^8 + 181680*q^9 + O(q^10)),
|
|
17
|
+
(6,
|
|
18
|
+
1 - 504*q - 16632*q^2 - 122976*q^3 - 532728*q^4 - 1575504*q^5 - 4058208*q^6 - 8471232*q^7 - 17047800*q^8 - 29883672*q^9 + O(q^10))]
|
|
19
|
+
|
|
20
|
+
::
|
|
21
|
+
|
|
22
|
+
sage: from sage.modular.modform.find_generators import find_generators
|
|
23
|
+
sage: find_generators(ModularFormsRing(1))
|
|
24
|
+
doctest:warning
|
|
25
|
+
...
|
|
26
|
+
DeprecationWarning: Importing find_generators from here is deprecated; please use "from sage.modular.modform.ring import find_generators" instead.
|
|
27
|
+
See https://github.com/sagemath/sage/issues/31559 for details.
|
|
28
|
+
[(4,
|
|
29
|
+
1 + 240*q + 2160*q^2 + 6720*q^3 + 17520*q^4 + 30240*q^5 + 60480*q^6 + 82560*q^7 + 140400*q^8 + 181680*q^9 + O(q^10)),
|
|
30
|
+
(6,
|
|
31
|
+
1 - 504*q - 16632*q^2 - 122976*q^3 - 532728*q^4 - 1575504*q^5 - 4058208*q^6 - 8471232*q^7 - 17047800*q^8 - 29883672*q^9 + O(q^10))]
|
|
32
|
+
|
|
33
|
+
::
|
|
34
|
+
|
|
35
|
+
sage: from sage.modular.modform.ring import basis_for_modform_space
|
|
36
|
+
sage: basis_for_modform_space(ModularFormsRing(1), 4)
|
|
37
|
+
doctest:warning
|
|
38
|
+
...
|
|
39
|
+
DeprecationWarning: basis_for_modform_space is deprecated. Please use sage.modular.modform.ring.q_expansion_basis instead.
|
|
40
|
+
See https://github.com/sagemath/sage/issues/31559 for details.
|
|
41
|
+
[1 + 240*q + O(q^2)]
|
|
42
|
+
|
|
43
|
+
::
|
|
44
|
+
|
|
45
|
+
sage: from sage.modular.modform.find_generators import _span_of_forms_in_weight
|
|
46
|
+
sage: forms = [(4, 240*eisenstein_series_qexp(4,5)), (6,504*eisenstein_series_qexp(6,5))]
|
|
47
|
+
sage: _span_of_forms_in_weight(forms, 12, prec=5)
|
|
48
|
+
doctest:warning
|
|
49
|
+
...
|
|
50
|
+
DeprecationWarning: Importing _span_of_forms_in_weight from here is deprecated; please use "from sage.modular.modform.ring import _span_of_forms_in_weight" instead.
|
|
51
|
+
See https://github.com/sagemath/sage/issues/31559 for details.
|
|
52
|
+
Vector space of degree 5 and dimension 2 over Rational Field
|
|
53
|
+
Basis matrix:
|
|
54
|
+
[ 1 0 196560 16773120 398034000]
|
|
55
|
+
[ 0 1 -24 252 -1472]
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
from sage.misc.lazy_import import lazy_import
|
|
59
|
+
lazy_import('sage.modular.modform.ring', ('_span_of_forms_in_weight', 'find_generators', 'basis_for_modform_space', 'ModularFormsRing'), deprecation=31559)
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
r"""
|
|
3
|
+
Compute spaces of half-integral weight modular forms
|
|
4
|
+
|
|
5
|
+
Based on an algorithm in Basmaji's thesis.
|
|
6
|
+
|
|
7
|
+
AUTHORS:
|
|
8
|
+
|
|
9
|
+
- William Stein (2007-08)
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from sage.matrix.matrix_space import MatrixSpace
|
|
13
|
+
from sage.modular.dirichlet import DirichletGroup
|
|
14
|
+
|
|
15
|
+
from . import constructor
|
|
16
|
+
|
|
17
|
+
from .theta import theta2_qexp, theta_qexp
|
|
18
|
+
from copy import copy
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def half_integral_weight_modform_basis(chi, k, prec):
|
|
22
|
+
r"""
|
|
23
|
+
A basis for the space of weight `k/2` forms with character
|
|
24
|
+
`\chi`. The modulus of `\chi` must be divisible by
|
|
25
|
+
`16` and `k` must be odd and `>1`.
|
|
26
|
+
|
|
27
|
+
INPUT:
|
|
28
|
+
|
|
29
|
+
- ``chi`` -- a Dirichlet character with modulus divisible by 16
|
|
30
|
+
|
|
31
|
+
- ``k`` -- an odd integer > 1
|
|
32
|
+
|
|
33
|
+
- ``prec`` -- positive integer
|
|
34
|
+
|
|
35
|
+
OUTPUT: list of power series
|
|
36
|
+
|
|
37
|
+
.. warning::
|
|
38
|
+
|
|
39
|
+
1. This code is very slow because it requests computation of a
|
|
40
|
+
basis of modular forms for integral weight spaces, and that
|
|
41
|
+
computation is still very slow.
|
|
42
|
+
|
|
43
|
+
2. If you give an input prec that is too small, then the output
|
|
44
|
+
list of power series may be larger than the dimension of the
|
|
45
|
+
space of half-integral forms.
|
|
46
|
+
|
|
47
|
+
EXAMPLES:
|
|
48
|
+
|
|
49
|
+
We compute some half-integral weight forms of level 16\*7
|
|
50
|
+
|
|
51
|
+
::
|
|
52
|
+
|
|
53
|
+
sage: half_integral_weight_modform_basis(DirichletGroup(16*7).0^2,3,30)
|
|
54
|
+
[q - 2*q^2 - q^9 + 2*q^14 + 6*q^18 - 2*q^21 - 4*q^22 - q^25 + O(q^30),
|
|
55
|
+
q^2 - q^14 - 3*q^18 + 2*q^22 + O(q^30),
|
|
56
|
+
q^4 - q^8 - q^16 + q^28 + O(q^30),
|
|
57
|
+
q^7 - 2*q^15 + O(q^30)]
|
|
58
|
+
|
|
59
|
+
The following illustrates that choosing too low of a precision can
|
|
60
|
+
give an incorrect answer.
|
|
61
|
+
|
|
62
|
+
::
|
|
63
|
+
|
|
64
|
+
sage: half_integral_weight_modform_basis(DirichletGroup(16*7).0^2,3,20)
|
|
65
|
+
[q - 2*q^2 - q^9 + 2*q^14 + 6*q^18 + O(q^20),
|
|
66
|
+
q^2 - q^14 - 3*q^18 + O(q^20),
|
|
67
|
+
q^4 - 2*q^8 + 2*q^12 - 4*q^16 + O(q^20),
|
|
68
|
+
q^7 - 2*q^8 + 4*q^12 - 2*q^15 - 6*q^16 + O(q^20),
|
|
69
|
+
q^8 - 2*q^12 + 3*q^16 + O(q^20)]
|
|
70
|
+
|
|
71
|
+
We compute some spaces of low level and the first few possible
|
|
72
|
+
weights.
|
|
73
|
+
|
|
74
|
+
::
|
|
75
|
+
|
|
76
|
+
sage: half_integral_weight_modform_basis(DirichletGroup(16,QQ).1, 3, 10)
|
|
77
|
+
[]
|
|
78
|
+
sage: half_integral_weight_modform_basis(DirichletGroup(16,QQ).1, 5, 10)
|
|
79
|
+
[q - 2*q^3 - 2*q^5 + 4*q^7 - q^9 + O(q^10)]
|
|
80
|
+
sage: half_integral_weight_modform_basis(DirichletGroup(16,QQ).1, 7, 10)
|
|
81
|
+
[q - 2*q^2 + 4*q^3 + 4*q^4 - 10*q^5 - 16*q^7 + 19*q^9 + O(q^10),
|
|
82
|
+
q^2 - 2*q^3 - 2*q^4 + 4*q^5 + 4*q^7 - 8*q^9 + O(q^10),
|
|
83
|
+
q^3 - 2*q^5 - 2*q^7 + 4*q^9 + O(q^10)]
|
|
84
|
+
sage: half_integral_weight_modform_basis(DirichletGroup(16,QQ).1, 9, 10)
|
|
85
|
+
[q - 2*q^2 + 4*q^3 - 8*q^4 + 14*q^5 + 16*q^6 - 40*q^7 + 16*q^8 - 57*q^9 + O(q^10),
|
|
86
|
+
q^2 - 2*q^3 + 4*q^4 - 8*q^5 - 8*q^6 + 20*q^7 - 8*q^8 + 32*q^9 + O(q^10),
|
|
87
|
+
q^3 - 2*q^4 + 4*q^5 + 4*q^6 - 10*q^7 - 16*q^9 + O(q^10),
|
|
88
|
+
q^4 - 2*q^5 - 2*q^6 + 4*q^7 + 4*q^9 + O(q^10),
|
|
89
|
+
q^5 - 2*q^7 - 2*q^9 + O(q^10)]
|
|
90
|
+
|
|
91
|
+
This example once raised an error (see :issue:`5792`).
|
|
92
|
+
|
|
93
|
+
::
|
|
94
|
+
|
|
95
|
+
sage: half_integral_weight_modform_basis(trivial_character(16),9,10)
|
|
96
|
+
[q - 2*q^2 + 4*q^3 - 8*q^4 + 4*q^6 - 16*q^7 + 48*q^8 - 15*q^9 + O(q^10),
|
|
97
|
+
q^2 - 2*q^3 + 4*q^4 - 2*q^6 + 8*q^7 - 24*q^8 + O(q^10),
|
|
98
|
+
q^3 - 2*q^4 - 4*q^7 + 12*q^8 + O(q^10),
|
|
99
|
+
q^4 - 6*q^8 + O(q^10)]
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
ALGORITHM: Basmaji (page 55 of his Essen thesis, "Ein Algorithmus
|
|
103
|
+
zur Berechnung von Hecke-Operatoren und Anwendungen auf modulare
|
|
104
|
+
Kurven", https://web.archive.org/web/20160905111513/http://wstein.org/scans/papers/basmaji/thesis_of_basmaji.dvi).
|
|
105
|
+
|
|
106
|
+
Let `S = S_{k+1}(\epsilon)` be the space of cusp forms of
|
|
107
|
+
even integer weight `k+1` and character
|
|
108
|
+
`\varepsilon = \chi \psi^{(k+1)/2}`, where `\psi`
|
|
109
|
+
is the nontrivial mod-4 Dirichlet character. Let `U` be the
|
|
110
|
+
subspace of `S \times S` of elements `(a,b)` such
|
|
111
|
+
that `\Theta_2 a = \Theta_3 b`. Then `U` is
|
|
112
|
+
isomorphic to `S_{k/2}(\chi)` via the map
|
|
113
|
+
`(a,b) \mapsto a/\Theta_3`.
|
|
114
|
+
"""
|
|
115
|
+
if chi.modulus() % 16:
|
|
116
|
+
raise ValueError("the character must have modulus divisible by 16")
|
|
117
|
+
|
|
118
|
+
if not k % 2:
|
|
119
|
+
raise ValueError("k (=%s) must be odd" % k)
|
|
120
|
+
|
|
121
|
+
if k < 3:
|
|
122
|
+
raise ValueError("k (=%s) must be at least 3" % k)
|
|
123
|
+
|
|
124
|
+
chi = chi.minimize_base_ring()
|
|
125
|
+
psi = chi.parent()(DirichletGroup(4, chi.base_ring()).gen())
|
|
126
|
+
eps = chi*psi**((k+1) // 2)
|
|
127
|
+
eps = eps.minimize_base_ring()
|
|
128
|
+
M = constructor.ModularForms(eps, (k+1)//2)
|
|
129
|
+
C = M.cuspidal_subspace()
|
|
130
|
+
B = C.basis()
|
|
131
|
+
|
|
132
|
+
# This computation of S below -- of course --dominates the whole function.
|
|
133
|
+
S = [f.q_expansion(prec) for f in B]
|
|
134
|
+
|
|
135
|
+
T2 = theta2_qexp(prec)
|
|
136
|
+
T3 = theta_qexp(prec)
|
|
137
|
+
n = len(S)
|
|
138
|
+
MS = MatrixSpace(M.base_ring(), 2*n, prec)
|
|
139
|
+
A = copy(MS.zero_matrix())
|
|
140
|
+
|
|
141
|
+
for i in range(n):
|
|
142
|
+
T2f = T2*S[i]
|
|
143
|
+
T3f = T3*S[i]
|
|
144
|
+
for j in range(prec):
|
|
145
|
+
A[i, j] = T2f[j]
|
|
146
|
+
A[n+i, j] = -T3f[j]
|
|
147
|
+
|
|
148
|
+
B = A.kernel().basis()
|
|
149
|
+
a_vec = [sum([b[i]*S[i] for i in range(n)]) for b in B]
|
|
150
|
+
if len(a_vec) == 0:
|
|
151
|
+
return []
|
|
152
|
+
R = a_vec[0].parent()
|
|
153
|
+
t3 = R(T3)
|
|
154
|
+
return [R(a) / t3 for a in a_vec]
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
# sage.doctest: needs sage.libs.flint
|
|
3
|
+
"""
|
|
4
|
+
Hecke operators on `q`-expansions
|
|
5
|
+
"""
|
|
6
|
+
# ****************************************************************************
|
|
7
|
+
# Copyright (C) 2004-2006 William Stein <wstein@gmail.com>
|
|
8
|
+
#
|
|
9
|
+
# This program is free software: you can redistribute it and/or modify
|
|
10
|
+
# it under the terms of the GNU General Public License as published by
|
|
11
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
12
|
+
# (at your option) any later version.
|
|
13
|
+
# https://www.gnu.org/licenses/
|
|
14
|
+
# ****************************************************************************
|
|
15
|
+
|
|
16
|
+
from sage.arith.misc import divisors, gcd
|
|
17
|
+
from sage.matrix.constructor import matrix
|
|
18
|
+
from sage.matrix.matrix_space import MatrixSpace
|
|
19
|
+
from sage.misc.lazy_import import lazy_import
|
|
20
|
+
from sage.rings.infinity import Infinity
|
|
21
|
+
from sage.rings.integer import Integer
|
|
22
|
+
from sage.rings.integer_ring import ZZ
|
|
23
|
+
from sage.rings.power_series_ring_element import PowerSeries
|
|
24
|
+
|
|
25
|
+
lazy_import('sage.rings.number_field.number_field', 'CyclotomicField')
|
|
26
|
+
|
|
27
|
+
from sage.modular.dirichlet import DirichletGroup, DirichletCharacter
|
|
28
|
+
from .element import ModularFormElement
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def hecke_operator_on_qexp(f, n, k, eps=None,
|
|
32
|
+
prec=None, check=True, _return_list=False):
|
|
33
|
+
r"""
|
|
34
|
+
Given the `q`-expansion `f` of a modular form with character
|
|
35
|
+
`\varepsilon`, this function computes the image of `f` under the
|
|
36
|
+
Hecke operator `T_{n,k}` of weight `k`.
|
|
37
|
+
|
|
38
|
+
EXAMPLES::
|
|
39
|
+
|
|
40
|
+
sage: M = ModularForms(1,12)
|
|
41
|
+
sage: hecke_operator_on_qexp(M.basis()[0], 3, 12)
|
|
42
|
+
252*q - 6048*q^2 + 63504*q^3 - 370944*q^4 + O(q^5)
|
|
43
|
+
sage: hecke_operator_on_qexp(M.basis()[0], 1, 12, prec=7)
|
|
44
|
+
q - 24*q^2 + 252*q^3 - 1472*q^4 + 4830*q^5 - 6048*q^6 + O(q^7)
|
|
45
|
+
sage: hecke_operator_on_qexp(M.basis()[0], 1, 12)
|
|
46
|
+
q - 24*q^2 + 252*q^3 - 1472*q^4 + 4830*q^5 - 6048*q^6 - 16744*q^7 + 84480*q^8
|
|
47
|
+
- 113643*q^9 - 115920*q^10 + 534612*q^11 - 370944*q^12 - 577738*q^13 + O(q^14)
|
|
48
|
+
|
|
49
|
+
sage: M.prec(20)
|
|
50
|
+
20
|
|
51
|
+
sage: hecke_operator_on_qexp(M.basis()[0], 3, 12)
|
|
52
|
+
252*q - 6048*q^2 + 63504*q^3 - 370944*q^4 + 1217160*q^5 - 1524096*q^6 + O(q^7)
|
|
53
|
+
sage: hecke_operator_on_qexp(M.basis()[0], 1, 12)
|
|
54
|
+
q - 24*q^2 + 252*q^3 - 1472*q^4 + 4830*q^5 - 6048*q^6 - 16744*q^7 + 84480*q^8
|
|
55
|
+
- 113643*q^9 - 115920*q^10 + 534612*q^11 - 370944*q^12 - 577738*q^13
|
|
56
|
+
+ 401856*q^14 + 1217160*q^15 + 987136*q^16 - 6905934*q^17 + 2727432*q^18
|
|
57
|
+
+ 10661420*q^19 - 7109760*q^20 + O(q^21)
|
|
58
|
+
|
|
59
|
+
sage: (hecke_operator_on_qexp(M.basis()[0], 1, 12)*252).add_bigoh(7)
|
|
60
|
+
252*q - 6048*q^2 + 63504*q^3 - 370944*q^4 + 1217160*q^5 - 1524096*q^6 + O(q^7)
|
|
61
|
+
|
|
62
|
+
sage: hecke_operator_on_qexp(M.basis()[0], 6, 12)
|
|
63
|
+
-6048*q + 145152*q^2 - 1524096*q^3 + O(q^4)
|
|
64
|
+
|
|
65
|
+
An example on a formal power series::
|
|
66
|
+
|
|
67
|
+
sage: R.<q> = QQ[[]]
|
|
68
|
+
sage: f = q + q^2 + q^3 + q^7 + O(q^8)
|
|
69
|
+
sage: hecke_operator_on_qexp(f, 3, 12)
|
|
70
|
+
q + O(q^3)
|
|
71
|
+
sage: hecke_operator_on_qexp(delta_qexp(24), 3, 12).prec()
|
|
72
|
+
8
|
|
73
|
+
sage: hecke_operator_on_qexp(delta_qexp(25), 3, 12).prec()
|
|
74
|
+
9
|
|
75
|
+
|
|
76
|
+
An example of computing `T_{p,k}` in characteristic `p`::
|
|
77
|
+
|
|
78
|
+
sage: p = 199
|
|
79
|
+
sage: fp = delta_qexp(prec=p^2+1, K=GF(p))
|
|
80
|
+
sage: tfp = hecke_operator_on_qexp(fp, p, 12)
|
|
81
|
+
sage: tfp == fp[p] * fp
|
|
82
|
+
True
|
|
83
|
+
sage: tf = hecke_operator_on_qexp(delta_qexp(prec=p^2+1), p, 12).change_ring(GF(p))
|
|
84
|
+
sage: tfp == tf
|
|
85
|
+
True
|
|
86
|
+
"""
|
|
87
|
+
if eps is None:
|
|
88
|
+
# Need to have base_ring=ZZ to work over finite fields, since
|
|
89
|
+
# ZZ can coerce to GF(p), but QQ can't.
|
|
90
|
+
eps = DirichletGroup(1, base_ring=ZZ)[0]
|
|
91
|
+
if check:
|
|
92
|
+
if not isinstance(f, (PowerSeries, ModularFormElement)):
|
|
93
|
+
raise TypeError("f (=%s) must be a power series or modular form" % f)
|
|
94
|
+
if not isinstance(eps, DirichletCharacter):
|
|
95
|
+
raise TypeError("eps (=%s) must be a Dirichlet character" % eps)
|
|
96
|
+
k = Integer(k)
|
|
97
|
+
n = Integer(n)
|
|
98
|
+
v = []
|
|
99
|
+
|
|
100
|
+
if prec is None:
|
|
101
|
+
if isinstance(f, ModularFormElement):
|
|
102
|
+
# always want at least three coefficients, but not too many, unless
|
|
103
|
+
# requested
|
|
104
|
+
pr = max(f.prec(), f.parent().prec(), (n+1)*3)
|
|
105
|
+
pr = min(pr, 100*(n+1))
|
|
106
|
+
prec = pr // n + 1
|
|
107
|
+
else:
|
|
108
|
+
prec = (f.prec() / ZZ(n)).ceil()
|
|
109
|
+
if prec == Infinity:
|
|
110
|
+
prec = f.parent().default_prec() // n + 1
|
|
111
|
+
|
|
112
|
+
if f.prec() < prec:
|
|
113
|
+
f._compute_q_expansion(prec)
|
|
114
|
+
|
|
115
|
+
p = Integer(f.base_ring().characteristic())
|
|
116
|
+
if k != 1 and p.is_prime() and n.is_power_of(p):
|
|
117
|
+
# if computing T_{p^a} in characteristic p, use the simpler (and faster)
|
|
118
|
+
# formula
|
|
119
|
+
v = [f[m*n] for m in range(prec)]
|
|
120
|
+
else:
|
|
121
|
+
l = k - 1
|
|
122
|
+
for m in range(prec):
|
|
123
|
+
am = sum([eps(d) * d**l * f[m*n//(d*d)]
|
|
124
|
+
for d in divisors(gcd(n, m)) if (m*n) % (d*d) == 0])
|
|
125
|
+
v.append(am)
|
|
126
|
+
if _return_list:
|
|
127
|
+
return v
|
|
128
|
+
if isinstance(f, ModularFormElement):
|
|
129
|
+
R = f.parent()._q_expansion_ring()
|
|
130
|
+
else:
|
|
131
|
+
R = f.parent()
|
|
132
|
+
return R(v, prec)
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def _hecke_operator_on_basis(B, V, n, k, eps):
|
|
136
|
+
"""
|
|
137
|
+
Do the work for hecke_operator_on_basis once the input
|
|
138
|
+
is normalized.
|
|
139
|
+
|
|
140
|
+
EXAMPLES::
|
|
141
|
+
|
|
142
|
+
sage: hecke_operator_on_basis(ModularForms(1,16).q_expansion_basis(30), 3, 16) # indirect doctest
|
|
143
|
+
[ -3348 0]
|
|
144
|
+
[ 0 14348908]
|
|
145
|
+
|
|
146
|
+
The following used to cause a segfault due to accidentally
|
|
147
|
+
transposed second and third argument (:issue:`2107`)::
|
|
148
|
+
|
|
149
|
+
sage: B = victor_miller_basis(100,30)
|
|
150
|
+
sage: t2 = hecke_operator_on_basis(B, 100, 2)
|
|
151
|
+
Traceback (most recent call last):
|
|
152
|
+
...
|
|
153
|
+
ValueError: The given basis vectors must be linearly independent.
|
|
154
|
+
"""
|
|
155
|
+
prec = V.degree()
|
|
156
|
+
TB = [hecke_operator_on_qexp(f, n, k, eps, prec, check=False, _return_list=True)
|
|
157
|
+
for f in B]
|
|
158
|
+
TB = [V.coordinate_vector(w) for w in TB]
|
|
159
|
+
return matrix(V.base_ring(), len(B), len(B), TB, sparse=False)
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def hecke_operator_on_basis(B, n, k, eps=None, already_echelonized=False):
|
|
163
|
+
r"""
|
|
164
|
+
Given a basis `B` of `q`-expansions for a space of modular forms
|
|
165
|
+
with character `\varepsilon` to precision at least `\#B\cdot n+1`,
|
|
166
|
+
this function computes the matrix of `T_n` relative to `B`.
|
|
167
|
+
|
|
168
|
+
.. NOTE::
|
|
169
|
+
|
|
170
|
+
If the elements of B are not known to sufficient precision,
|
|
171
|
+
this function will report that the vectors are linearly
|
|
172
|
+
dependent (since they are to the specified precision).
|
|
173
|
+
|
|
174
|
+
INPUT:
|
|
175
|
+
|
|
176
|
+
- ``B`` -- list of `q`-expansions
|
|
177
|
+
|
|
178
|
+
- ``n`` -- integer >= 1
|
|
179
|
+
|
|
180
|
+
- ``k`` -- integer
|
|
181
|
+
|
|
182
|
+
- ``eps`` -- Dirichlet character
|
|
183
|
+
|
|
184
|
+
- ``already_echelonized`` -- boolean (default: ``False``); if ``True``, use
|
|
185
|
+
that the basis is already in Echelon form, which saves a lot of time
|
|
186
|
+
|
|
187
|
+
EXAMPLES::
|
|
188
|
+
|
|
189
|
+
sage: sage.modular.modform.constructor.ModularForms_clear_cache()
|
|
190
|
+
sage: ModularForms(1,12).q_expansion_basis()
|
|
191
|
+
[q - 24*q^2 + 252*q^3 - 1472*q^4 + 4830*q^5 + O(q^6),
|
|
192
|
+
1 + 65520/691*q + 134250480/691*q^2 + 11606736960/691*q^3 + 274945048560/691*q^4 + 3199218815520/691*q^5 + O(q^6)]
|
|
193
|
+
sage: hecke_operator_on_basis(ModularForms(1,12).q_expansion_basis(), 3, 12)
|
|
194
|
+
Traceback (most recent call last):
|
|
195
|
+
...
|
|
196
|
+
ValueError: The given basis vectors must be linearly independent.
|
|
197
|
+
|
|
198
|
+
sage: hecke_operator_on_basis(ModularForms(1,12).q_expansion_basis(30), 3, 12)
|
|
199
|
+
[ 252 0]
|
|
200
|
+
[ 0 177148]
|
|
201
|
+
|
|
202
|
+
TESTS:
|
|
203
|
+
|
|
204
|
+
This shows that the problem with finite fields reported at :issue:`8281` is solved::
|
|
205
|
+
|
|
206
|
+
sage: bas_mod5 = [f.change_ring(GF(5)) for f in victor_miller_basis(12, 20)]
|
|
207
|
+
sage: hecke_operator_on_basis(bas_mod5, 2, 12)
|
|
208
|
+
[4 0]
|
|
209
|
+
[0 1]
|
|
210
|
+
|
|
211
|
+
This shows that empty input is handled sensibly (:issue:`12202`)::
|
|
212
|
+
|
|
213
|
+
sage: # needs sage.rings.number_field
|
|
214
|
+
sage: x = hecke_operator_on_basis([], 3, 12); x
|
|
215
|
+
[]
|
|
216
|
+
sage: x.parent()
|
|
217
|
+
Full MatrixSpace of 0 by 0 dense matrices over Cyclotomic Field of order 1 and degree 1
|
|
218
|
+
sage: y = hecke_operator_on_basis([], 3, 12, eps=DirichletGroup(13).0^2); y
|
|
219
|
+
[]
|
|
220
|
+
sage: y.parent()
|
|
221
|
+
Full MatrixSpace of 0 by 0 dense matrices over Cyclotomic Field of order 12 and degree 4
|
|
222
|
+
"""
|
|
223
|
+
if not isinstance(B, (list, tuple)):
|
|
224
|
+
raise TypeError("B (=%s) must be a list or tuple" % B)
|
|
225
|
+
if len(B) == 0:
|
|
226
|
+
if eps is None:
|
|
227
|
+
R = CyclotomicField(1)
|
|
228
|
+
else:
|
|
229
|
+
R = eps.base_ring()
|
|
230
|
+
return MatrixSpace(R, 0)(0)
|
|
231
|
+
f = B[0]
|
|
232
|
+
R = f.base_ring()
|
|
233
|
+
if eps is None:
|
|
234
|
+
eps = DirichletGroup(1, R)[0]
|
|
235
|
+
all_powerseries = True
|
|
236
|
+
for x in B:
|
|
237
|
+
if not isinstance(x, PowerSeries):
|
|
238
|
+
all_powerseries = False
|
|
239
|
+
if not all_powerseries:
|
|
240
|
+
raise TypeError("each element of B must be a power series")
|
|
241
|
+
n = Integer(n)
|
|
242
|
+
k = Integer(k)
|
|
243
|
+
prec = (f.prec() - 1) // n
|
|
244
|
+
A = R**prec
|
|
245
|
+
V = A.span_of_basis([g.padded_list(prec) for g in B],
|
|
246
|
+
already_echelonized=already_echelonized)
|
|
247
|
+
return _hecke_operator_on_basis(B, V, n, k, eps)
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
# sage.doctest: needs sage.libs.flint
|
|
3
|
+
r"""
|
|
4
|
+
`q`-expansion of `j`-invariant
|
|
5
|
+
"""
|
|
6
|
+
from .eis_series import eisenstein_series_qexp
|
|
7
|
+
from .vm_basis import delta_qexp
|
|
8
|
+
from sage.rings.rational_field import QQ
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def j_invariant_qexp(prec=10, K=QQ):
|
|
12
|
+
r"""
|
|
13
|
+
Return the `q`-expansion of the `j`-invariant to
|
|
14
|
+
precision ``prec`` in the field `K`.
|
|
15
|
+
|
|
16
|
+
.. SEEALSO::
|
|
17
|
+
|
|
18
|
+
If you want to evaluate (numerically) the `j`-invariant at
|
|
19
|
+
certain points, see the special function :func:`elliptic_j`.
|
|
20
|
+
|
|
21
|
+
.. WARNING::
|
|
22
|
+
|
|
23
|
+
Stupid algorithm -- we divide by Delta, which is slow.
|
|
24
|
+
|
|
25
|
+
EXAMPLES::
|
|
26
|
+
|
|
27
|
+
sage: j_invariant_qexp(4)
|
|
28
|
+
q^-1 + 744 + 196884*q + 21493760*q^2 + 864299970*q^3 + O(q^4)
|
|
29
|
+
sage: j_invariant_qexp(2)
|
|
30
|
+
q^-1 + 744 + 196884*q + O(q^2)
|
|
31
|
+
sage: j_invariant_qexp(100, GF(2))
|
|
32
|
+
q^-1 + q^7 + q^15 + q^31 + q^47 + q^55 + q^71 + q^87 + O(q^100)
|
|
33
|
+
"""
|
|
34
|
+
if prec <= -1:
|
|
35
|
+
raise ValueError("the prec must be nonnegative.")
|
|
36
|
+
prec += 2
|
|
37
|
+
g6 = -504*eisenstein_series_qexp(6, prec, K=QQ)
|
|
38
|
+
Delta = delta_qexp(prec).change_ring(QQ)
|
|
39
|
+
j = (g6*g6) * (~Delta) + 1728
|
|
40
|
+
if K != QQ:
|
|
41
|
+
return j.change_ring(K)
|
|
42
|
+
else:
|
|
43
|
+
return j
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
# NOTE: this needs to be sped up. The pari code src/basemath/trans3.c is
|
|
47
|
+
# faster.
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
# sage.doctest: needs database_cremona_mini_ellcurve
|
|
3
|
+
r"""
|
|
4
|
+
Gross-Zagier L-series
|
|
5
|
+
"""
|
|
6
|
+
from sage.rings.integer import Integer
|
|
7
|
+
from sage.structure.sage_object import SageObject
|
|
8
|
+
from sage.lfunctions.dokchitser import Dokchitser
|
|
9
|
+
from .l_series_gross_zagier_coeffs import gross_zagier_L_series
|
|
10
|
+
from sage.modular.dirichlet import kronecker_character
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class GrossZagierLseries(SageObject):
|
|
14
|
+
|
|
15
|
+
def __init__(self, E, A, prec=53):
|
|
16
|
+
r"""
|
|
17
|
+
Class for the Gross-Zagier `L`-series.
|
|
18
|
+
|
|
19
|
+
This is attached to a pair `(E,A)` where `E` is an elliptic curve over
|
|
20
|
+
`\QQ` and `A` is an ideal class in an imaginary quadratic number field.
|
|
21
|
+
|
|
22
|
+
For the exact definition, in the more general setting of modular forms
|
|
23
|
+
instead of elliptic curves, see section IV of [GZ1986]_.
|
|
24
|
+
|
|
25
|
+
INPUT:
|
|
26
|
+
|
|
27
|
+
- ``E`` -- an elliptic curve over `\QQ`
|
|
28
|
+
|
|
29
|
+
- ``A`` -- an ideal class in an imaginary quadratic number field
|
|
30
|
+
|
|
31
|
+
- ``prec`` -- integer (default: 53); giving the required precision
|
|
32
|
+
|
|
33
|
+
EXAMPLES::
|
|
34
|
+
|
|
35
|
+
sage: e = EllipticCurve('37a')
|
|
36
|
+
sage: K.<a> = QuadraticField(-40)
|
|
37
|
+
sage: A = K.class_group().gen(0)
|
|
38
|
+
sage: from sage.modular.modform.l_series_gross_zagier import GrossZagierLseries
|
|
39
|
+
sage: G = GrossZagierLseries(e, A)
|
|
40
|
+
|
|
41
|
+
TESTS::
|
|
42
|
+
|
|
43
|
+
sage: K.<b> = QuadraticField(131)
|
|
44
|
+
sage: A = K.class_group().one()
|
|
45
|
+
sage: G = GrossZagierLseries(e, A)
|
|
46
|
+
Traceback (most recent call last):
|
|
47
|
+
...
|
|
48
|
+
ValueError: A is not an ideal class in an imaginary quadratic field
|
|
49
|
+
"""
|
|
50
|
+
self._E = E
|
|
51
|
+
self._N = N = E.conductor()
|
|
52
|
+
self._A = A
|
|
53
|
+
ideal = A.ideal()
|
|
54
|
+
K = A.gens()[0].parent()
|
|
55
|
+
D = K.disc()
|
|
56
|
+
if not (K.degree() == 2 and D < 0):
|
|
57
|
+
raise ValueError("A is not an ideal class in an"
|
|
58
|
+
" imaginary quadratic field")
|
|
59
|
+
Q = ideal.quadratic_form().reduced_form()
|
|
60
|
+
epsilon = - kronecker_character(D)(N)
|
|
61
|
+
self._dokchister = Dokchitser(N ** 2 * D ** 2,
|
|
62
|
+
[0, 0, 1, 1],
|
|
63
|
+
weight=2, eps=epsilon, prec=prec)
|
|
64
|
+
self._nterms = nterms = Integer(self._dokchister.num_coeffs())
|
|
65
|
+
if nterms > 1e6:
|
|
66
|
+
# just takes way to long
|
|
67
|
+
raise ValueError("Too many terms: {}".format(nterms))
|
|
68
|
+
zeta_ord = ideal.number_field().zeta_order()
|
|
69
|
+
an_list = gross_zagier_L_series(E.anlist(nterms + 1), Q, N, zeta_ord)
|
|
70
|
+
self._dokchister.gp().set('a', an_list[1:])
|
|
71
|
+
self._dokchister.init_coeffs('a[k]', 1)
|
|
72
|
+
|
|
73
|
+
def __call__(self, s, der=0):
|
|
74
|
+
r"""
|
|
75
|
+
Return the value at `s`.
|
|
76
|
+
|
|
77
|
+
INPUT:
|
|
78
|
+
|
|
79
|
+
- ``s`` -- complex number
|
|
80
|
+
|
|
81
|
+
- ``der`` -- order of derivative (default: 0)
|
|
82
|
+
|
|
83
|
+
EXAMPLES::
|
|
84
|
+
|
|
85
|
+
sage: e = EllipticCurve('37a')
|
|
86
|
+
sage: K.<a> = QuadraticField(-40)
|
|
87
|
+
sage: A = K.class_group().gen(0)
|
|
88
|
+
sage: from sage.modular.modform.l_series_gross_zagier import GrossZagierLseries
|
|
89
|
+
sage: G = GrossZagierLseries(e, A)
|
|
90
|
+
sage: G(3)
|
|
91
|
+
-0.272946890617590
|
|
92
|
+
sage: G(3, 1)
|
|
93
|
+
0.212442670030741
|
|
94
|
+
"""
|
|
95
|
+
return self._dokchister.derivative(s, der)
|
|
96
|
+
|
|
97
|
+
def taylor_series(self, s=1, series_prec=6, var='z'):
|
|
98
|
+
r"""
|
|
99
|
+
Return the Taylor series at `s`.
|
|
100
|
+
|
|
101
|
+
INPUT:
|
|
102
|
+
|
|
103
|
+
- ``s`` -- complex number (default: 1)
|
|
104
|
+
- ``series_prec`` -- number of terms (default: 6) in the Taylor series
|
|
105
|
+
- ``var`` -- variable (default: ``'z'``)
|
|
106
|
+
|
|
107
|
+
EXAMPLES::
|
|
108
|
+
|
|
109
|
+
sage: e = EllipticCurve('37a')
|
|
110
|
+
sage: K.<a> = QuadraticField(-40)
|
|
111
|
+
sage: A = K.class_group().gen(0)
|
|
112
|
+
sage: from sage.modular.modform.l_series_gross_zagier import GrossZagierLseries
|
|
113
|
+
sage: G = GrossZagierLseries(e, A)
|
|
114
|
+
sage: G.taylor_series(2,3)
|
|
115
|
+
-0.613002046122894 + 0.490374999263514*z - 0.122903033710382*z^2 + O(z^3)
|
|
116
|
+
"""
|
|
117
|
+
return self._dokchister.taylor_series(s, series_prec, var)
|
|
118
|
+
|
|
119
|
+
def _repr_(self):
|
|
120
|
+
"""
|
|
121
|
+
Return the string representation.
|
|
122
|
+
|
|
123
|
+
EXAMPLES::
|
|
124
|
+
|
|
125
|
+
sage: e = EllipticCurve('37a')
|
|
126
|
+
sage: K.<a> = QuadraticField(-40)
|
|
127
|
+
sage: A = K.class_group().gen(0)
|
|
128
|
+
sage: from sage.modular.modform.l_series_gross_zagier import GrossZagierLseries
|
|
129
|
+
sage: GrossZagierLseries(e, A)
|
|
130
|
+
Gross Zagier L-series attached to Elliptic Curve defined by y^2 + y = x^3 - x over Rational Field with ideal class Fractional ideal class (2, 1/2*a)
|
|
131
|
+
"""
|
|
132
|
+
msg = "Gross Zagier L-series attached to {} with ideal class {}"
|
|
133
|
+
return msg.format(self._E, self._A)
|
|
Binary file
|