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,305 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
r"""
|
|
3
|
+
Modular parametrization of elliptic curves over `\QQ`
|
|
4
|
+
|
|
5
|
+
By the work of Taylor--Wiles et al. it is known that there
|
|
6
|
+
is a surjective morphism
|
|
7
|
+
|
|
8
|
+
.. MATH::
|
|
9
|
+
|
|
10
|
+
\phi_E: X_0(N) \rightarrow E.
|
|
11
|
+
|
|
12
|
+
from the modular curve `X_0(N)`, where `N` is the conductor of `E`.
|
|
13
|
+
The map sends the cusp `\infty` to the origin of `E`.
|
|
14
|
+
|
|
15
|
+
EXAMPLES::
|
|
16
|
+
|
|
17
|
+
sage: phi = EllipticCurve('11a1').modular_parametrization()
|
|
18
|
+
sage: phi
|
|
19
|
+
Modular parameterization
|
|
20
|
+
from the upper half plane
|
|
21
|
+
to Elliptic Curve defined by y^2 + y = x^3 - x^2 - 10*x - 20 over Rational Field
|
|
22
|
+
sage: phi(0.5+CDF(I))
|
|
23
|
+
(285684.320516... + 7.0...e-11*I : 1.526964169...e8 + 5.6...e-8*I : 1.00000000000000)
|
|
24
|
+
sage: phi.power_series(prec = 7)
|
|
25
|
+
(q^-2 + 2*q^-1 + 4 + 5*q + 8*q^2 + q^3 + 7*q^4 + O(q^5),
|
|
26
|
+
-q^-3 - 3*q^-2 - 7*q^-1 - 13 - 17*q - 26*q^2 - 19*q^3 + O(q^4))
|
|
27
|
+
|
|
28
|
+
AUTHORS:
|
|
29
|
+
|
|
30
|
+
- Chris Wuthrich (02/10): moved from ell_rational_field.py.
|
|
31
|
+
"""
|
|
32
|
+
######################################################################
|
|
33
|
+
# Copyright (C) 2010 William Stein <wstein@gmail.com>
|
|
34
|
+
#
|
|
35
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
36
|
+
#
|
|
37
|
+
# This code is distributed in the hope that it will be useful,
|
|
38
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
39
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
40
|
+
# General Public License for more details.
|
|
41
|
+
#
|
|
42
|
+
# The full text of the GPL is available at:
|
|
43
|
+
#
|
|
44
|
+
# http://www.gnu.org/licenses/
|
|
45
|
+
######################################################################
|
|
46
|
+
|
|
47
|
+
from . import heegner
|
|
48
|
+
|
|
49
|
+
from sage.rings.laurent_series_ring import LaurentSeriesRing
|
|
50
|
+
from sage.rings.rational_field import RationalField
|
|
51
|
+
from sage.rings.complex_mpfr import ComplexField
|
|
52
|
+
from sage.rings.rational_field import QQ
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class ModularParameterization:
|
|
56
|
+
r"""
|
|
57
|
+
This class represents the modular parametrization of an elliptic curve
|
|
58
|
+
|
|
59
|
+
.. MATH::
|
|
60
|
+
|
|
61
|
+
\phi_E: X_0(N) \rightarrow E.
|
|
62
|
+
|
|
63
|
+
Evaluation is done by passing through the lattice representation of `E`.
|
|
64
|
+
|
|
65
|
+
EXAMPLES::
|
|
66
|
+
|
|
67
|
+
sage: phi = EllipticCurve('11a1').modular_parametrization()
|
|
68
|
+
sage: phi
|
|
69
|
+
Modular parameterization
|
|
70
|
+
from the upper half plane
|
|
71
|
+
to Elliptic Curve defined by y^2 + y = x^3 - x^2 - 10*x - 20
|
|
72
|
+
over Rational Field
|
|
73
|
+
"""
|
|
74
|
+
def __init__(self, E):
|
|
75
|
+
r"""
|
|
76
|
+
EXAMPLES::
|
|
77
|
+
|
|
78
|
+
sage: from sage.schemes.elliptic_curves.ell_rational_field import ModularParameterization
|
|
79
|
+
sage: phi = ModularParameterization(EllipticCurve('389a'))
|
|
80
|
+
sage: phi(CC.0/5)
|
|
81
|
+
(27.1965586309057 : -144.727322178982 : 1.00000000000000)
|
|
82
|
+
|
|
83
|
+
sage: phi == loads(dumps(phi))
|
|
84
|
+
True
|
|
85
|
+
"""
|
|
86
|
+
self._E = E
|
|
87
|
+
|
|
88
|
+
def curve(self):
|
|
89
|
+
"""
|
|
90
|
+
Return the curve associated to this modular parametrization.
|
|
91
|
+
|
|
92
|
+
EXAMPLES::
|
|
93
|
+
|
|
94
|
+
sage: E = EllipticCurve('15a')
|
|
95
|
+
sage: phi = E.modular_parametrization()
|
|
96
|
+
sage: phi.curve() is E
|
|
97
|
+
True
|
|
98
|
+
"""
|
|
99
|
+
return self._E
|
|
100
|
+
|
|
101
|
+
def __repr__(self):
|
|
102
|
+
"""
|
|
103
|
+
TESTS::
|
|
104
|
+
|
|
105
|
+
sage: E = EllipticCurve('37a')
|
|
106
|
+
sage: phi = E.modular_parametrization()
|
|
107
|
+
sage: phi
|
|
108
|
+
Modular parameterization from the upper half plane to Elliptic Curve defined by y^2 + y = x^3 - x over Rational Field
|
|
109
|
+
sage: phi.__repr__()
|
|
110
|
+
'Modular parameterization from the upper half plane to Elliptic Curve defined by y^2 + y = x^3 - x over Rational Field'
|
|
111
|
+
"""
|
|
112
|
+
return "Modular parameterization from the upper half plane to %s" % self._E
|
|
113
|
+
|
|
114
|
+
def __eq__(self, other):
|
|
115
|
+
r"""
|
|
116
|
+
Compare two modular parametrizations by simply comparing the elliptic curves.
|
|
117
|
+
|
|
118
|
+
EXAMPLES::
|
|
119
|
+
|
|
120
|
+
sage: E = EllipticCurve('37a1')
|
|
121
|
+
sage: phi = E.modular_parametrization()
|
|
122
|
+
sage: phi == phi
|
|
123
|
+
True
|
|
124
|
+
"""
|
|
125
|
+
if not isinstance(other, ModularParameterization):
|
|
126
|
+
return False
|
|
127
|
+
|
|
128
|
+
return self._E == other._E
|
|
129
|
+
|
|
130
|
+
def __ne__(self, other):
|
|
131
|
+
"""
|
|
132
|
+
Check whether ``self`` is not equal to ``other``.
|
|
133
|
+
|
|
134
|
+
EXAMPLES::
|
|
135
|
+
|
|
136
|
+
sage: E = EllipticCurve('37a1')
|
|
137
|
+
sage: phi = E.modular_parametrization()
|
|
138
|
+
sage: phi != phi
|
|
139
|
+
False
|
|
140
|
+
"""
|
|
141
|
+
return not (self == other)
|
|
142
|
+
|
|
143
|
+
def __call__(self, z, prec=None):
|
|
144
|
+
r"""
|
|
145
|
+
Evaluate ``self`` at a point `z \in X_0(N)` where `z` is given by a
|
|
146
|
+
representative in the upper half plane.
|
|
147
|
+
|
|
148
|
+
All computations are done with ``prec``
|
|
149
|
+
bits of precision. If ``prec`` is not given, use the precision of `z`.
|
|
150
|
+
|
|
151
|
+
EXAMPLES::
|
|
152
|
+
|
|
153
|
+
sage: E = EllipticCurve('37a')
|
|
154
|
+
sage: phi = E.modular_parametrization()
|
|
155
|
+
sage: phi((sqrt(7)*I - 17)/74, 53) # needs sage.symbolic
|
|
156
|
+
(...e-16 - ...e-16*I : ...e-16 + ...e-16*I : 1.00000000000000)
|
|
157
|
+
|
|
158
|
+
Verify that the mapping is invariant under the action of `\Gamma_0(N)`
|
|
159
|
+
on the upper half plane::
|
|
160
|
+
|
|
161
|
+
sage: E = EllipticCurve('11a')
|
|
162
|
+
sage: phi = E.modular_parametrization()
|
|
163
|
+
sage: tau = CC((1+1j)/5)
|
|
164
|
+
sage: phi(tau)
|
|
165
|
+
(-3.92181329652811 - 12.2578555525366*I : 44.9649874434872 + 14.3257120944681*I : 1.00000000000000)
|
|
166
|
+
sage: phi(tau+1)
|
|
167
|
+
(-3.92181329652810 - 12.2578555525366*I : 44.9649874434872 + 14.3257120944681*I : 1.00000000000000)
|
|
168
|
+
sage: phi((6*tau+1) / (11*tau+2))
|
|
169
|
+
(-3.9218132965285... - 12.2578555525369*I : 44.964987443489... + 14.325712094467...*I : 1.00000000000000)
|
|
170
|
+
|
|
171
|
+
We can also apply the modular parametrization to a Heegner point on `X_0(N)`::
|
|
172
|
+
|
|
173
|
+
sage: H = heegner_points(389,-7,5); H
|
|
174
|
+
All Heegner points of conductor 5 on X_0(389) associated to QQ[sqrt(-7)]
|
|
175
|
+
sage: x = H[0]; x
|
|
176
|
+
Heegner point 5/778*sqrt(-7) - 147/778 of discriminant -7 and conductor 5 on X_0(389)
|
|
177
|
+
sage: E = EllipticCurve('389a'); phi = E.modular_parametrization()
|
|
178
|
+
sage: phi(x)
|
|
179
|
+
Heegner point of discriminant -7 and conductor 5 on elliptic curve of conductor 389
|
|
180
|
+
sage: phi(x).quadratic_form()
|
|
181
|
+
389*x^2 + 147*x*y + 14*y^2
|
|
182
|
+
|
|
183
|
+
ALGORITHM:
|
|
184
|
+
|
|
185
|
+
Integrate the modular form attached to this elliptic curve from
|
|
186
|
+
`z` to `\infty` to get a point on the lattice representation of
|
|
187
|
+
`E`, then use the Weierstrass `\wp` function to map it to the
|
|
188
|
+
curve itself.
|
|
189
|
+
"""
|
|
190
|
+
from sage.misc.verbose import verbose
|
|
191
|
+
if isinstance(z, heegner.HeegnerPointOnX0N):
|
|
192
|
+
return z.map_to_curve(self.curve())
|
|
193
|
+
# Map to the CC of CC/PeriodLattice.
|
|
194
|
+
tm = verbose("Evaluating modular parameterization to precision %s bits" % prec)
|
|
195
|
+
w = self.map_to_complex_numbers(z, prec=prec)
|
|
196
|
+
# Map to E via Weierstrass P
|
|
197
|
+
z = self._E.elliptic_exponential(w)
|
|
198
|
+
verbose("Finished evaluating modular parameterization", tm)
|
|
199
|
+
return z
|
|
200
|
+
|
|
201
|
+
def map_to_complex_numbers(self, z, prec=None):
|
|
202
|
+
r"""
|
|
203
|
+
Evaluate ``self`` at a point `z \in X_0(N)` where `z` is given by
|
|
204
|
+
a representative in the upper half plane, returning a point in
|
|
205
|
+
the complex numbers.
|
|
206
|
+
|
|
207
|
+
All computations are done with ``prec`` bits
|
|
208
|
+
of precision. If ``prec`` is not given, use the precision of `z`.
|
|
209
|
+
Use self(z) to compute the image of z on the Weierstrass equation
|
|
210
|
+
of the curve.
|
|
211
|
+
|
|
212
|
+
EXAMPLES::
|
|
213
|
+
|
|
214
|
+
sage: # needs sage.symbolic
|
|
215
|
+
sage: E = EllipticCurve('37a'); phi = E.modular_parametrization()
|
|
216
|
+
sage: x = polygen(ZZ, 'x')
|
|
217
|
+
sage: tau = (sqrt(7)*I - 17)/74
|
|
218
|
+
sage: z = phi.map_to_complex_numbers(tau); z
|
|
219
|
+
0.929592715285395 - 1.22569469099340*I
|
|
220
|
+
sage: E.elliptic_exponential(z)
|
|
221
|
+
(...e-16 - ...e-16*I : ...e-16 + ...e-16*I : 1.00000000000000)
|
|
222
|
+
sage: phi(tau)
|
|
223
|
+
(...e-16 - ...e-16*I : ...e-16 + ...e-16*I : 1.00000000000000)
|
|
224
|
+
"""
|
|
225
|
+
if prec is None:
|
|
226
|
+
try:
|
|
227
|
+
prec = z.parent().prec()
|
|
228
|
+
except AttributeError:
|
|
229
|
+
prec = 53
|
|
230
|
+
CC = ComplexField(prec)
|
|
231
|
+
if z in QQ:
|
|
232
|
+
raise NotImplementedError
|
|
233
|
+
z = CC(z)
|
|
234
|
+
if z.imag() <= 0:
|
|
235
|
+
raise ValueError("Point must be in the upper half plane")
|
|
236
|
+
# TODO: for very small imaginary part, maybe try to transform under
|
|
237
|
+
# \Gamma_0(N) to a better representative?
|
|
238
|
+
q = (2 * CC.gen() * CC.pi() * z).exp()
|
|
239
|
+
# nterms'th term is less than 2**-(prec+10) (c.f. eclib code)
|
|
240
|
+
nterms = (-(prec + 10) / q.abs().log2()).ceil()
|
|
241
|
+
# Use Horner's rule to sum the integral of the form
|
|
242
|
+
enumerated_an = list(enumerate(self._E.anlist(nterms)))[1:]
|
|
243
|
+
lattice_point = 0
|
|
244
|
+
for n, an in reversed(enumerated_an):
|
|
245
|
+
lattice_point += an / n
|
|
246
|
+
lattice_point *= q
|
|
247
|
+
return lattice_point
|
|
248
|
+
|
|
249
|
+
def power_series(self, prec=20):
|
|
250
|
+
r"""
|
|
251
|
+
Return the power series of this modular parametrization.
|
|
252
|
+
|
|
253
|
+
The curve must be a minimal model. The prec parameter determines
|
|
254
|
+
the number of significant terms. This means that X will be given up
|
|
255
|
+
to O(q^(prec-2)) and Y will be given up to O(q^(prec-3)).
|
|
256
|
+
|
|
257
|
+
OUTPUT:
|
|
258
|
+
|
|
259
|
+
A list of two Laurent series [`X(x)`,`Y(x)`] of degrees `-2`, `-3`,
|
|
260
|
+
respectively, which satisfy the equation of the elliptic curve.
|
|
261
|
+
There are modular functions on `\Gamma_0(N)` where `N` is the
|
|
262
|
+
conductor.
|
|
263
|
+
|
|
264
|
+
The series should satisfy the differential equation
|
|
265
|
+
|
|
266
|
+
.. MATH::
|
|
267
|
+
|
|
268
|
+
\frac{\mathrm{d}X}{2Y + a_1 X + a_3} = \frac{f(q)\, \mathrm{d}q}{q}
|
|
269
|
+
|
|
270
|
+
where `f` is ``self.curve().q_expansion()``.
|
|
271
|
+
|
|
272
|
+
EXAMPLES::
|
|
273
|
+
|
|
274
|
+
sage: E = EllipticCurve('389a1')
|
|
275
|
+
sage: phi = E.modular_parametrization()
|
|
276
|
+
sage: X, Y = phi.power_series(prec=10)
|
|
277
|
+
sage: X
|
|
278
|
+
q^-2 + 2*q^-1 + 4 + 7*q + 13*q^2 + 18*q^3 + 31*q^4 + 49*q^5 + 74*q^6 + 111*q^7 + O(q^8)
|
|
279
|
+
sage: Y
|
|
280
|
+
-q^-3 - 3*q^-2 - 8*q^-1 - 17 - 33*q - 61*q^2 - 110*q^3 - 186*q^4 - 320*q^5 - 528*q^6 + O(q^7)
|
|
281
|
+
sage: X,Y = phi.power_series()
|
|
282
|
+
sage: X
|
|
283
|
+
q^-2 + 2*q^-1 + 4 + 7*q + 13*q^2 + 18*q^3 + 31*q^4 + 49*q^5 + 74*q^6 + 111*q^7 + 173*q^8 + 251*q^9 + 379*q^10 + 560*q^11 + 824*q^12 + 1199*q^13 + 1773*q^14 + 2548*q^15 + 3722*q^16 + 5374*q^17 + O(q^18)
|
|
284
|
+
sage: Y
|
|
285
|
+
-q^-3 - 3*q^-2 - 8*q^-1 - 17 - 33*q - 61*q^2 - 110*q^3 - 186*q^4 - 320*q^5 - 528*q^6 - 861*q^7 - 1383*q^8 - 2218*q^9 - 3472*q^10 - 5451*q^11 - 8447*q^12 - 13020*q^13 - 19923*q^14 - 30403*q^15 - 46003*q^16 + O(q^17)
|
|
286
|
+
|
|
287
|
+
The following should give 0, but only approximately::
|
|
288
|
+
|
|
289
|
+
sage: q = X.parent().gen()
|
|
290
|
+
sage: E.defining_polynomial()(X,Y,1) + O(q^11) == 0
|
|
291
|
+
True
|
|
292
|
+
|
|
293
|
+
Note that below we have to change variable from `x` to `q`::
|
|
294
|
+
|
|
295
|
+
sage: a1,_,a3,_,_ = E.a_invariants()
|
|
296
|
+
sage: f = E.q_expansion(17)
|
|
297
|
+
sage: q = f.parent().gen()
|
|
298
|
+
sage: f/q == (X.derivative()/(2*Y+a1*X+a3))
|
|
299
|
+
True
|
|
300
|
+
"""
|
|
301
|
+
R = LaurentSeriesRing(RationalField(), 'q')
|
|
302
|
+
if not self._E.is_minimal():
|
|
303
|
+
raise NotImplementedError("only implemented for minimal curves")
|
|
304
|
+
XY = self._E.pari_mincurve().elltaniyama(prec - 1)
|
|
305
|
+
return R(XY[0]), R(XY[1])
|