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,352 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
r"""
|
|
3
|
+
Weierstrass `\wp`-function for elliptic curves
|
|
4
|
+
|
|
5
|
+
The Weierstrass `\wp` function associated to an elliptic curve over a
|
|
6
|
+
field `k` is a Laurent series of the form
|
|
7
|
+
|
|
8
|
+
.. MATH::
|
|
9
|
+
|
|
10
|
+
\wp(z) = \frac{1}{z^2} + c_2 \cdot z^2 + c_4 \cdot z^4 + \cdots.
|
|
11
|
+
|
|
12
|
+
If the field is contained in `\mathbb{C}`, then this is the series
|
|
13
|
+
expansion of the map from `\mathbb{C}` to `E(\mathbb{C})` whose kernel
|
|
14
|
+
is the period lattice of `E`.
|
|
15
|
+
|
|
16
|
+
Over other fields, like finite fields, this still makes sense as a
|
|
17
|
+
formal power series with coefficients in `k` - at least its first `p-2`
|
|
18
|
+
coefficients where `p` is the characteristic of `k`. It can be defined
|
|
19
|
+
via the formal group as `x+c` in the variable `z=\log_E(t)` for a
|
|
20
|
+
constant `c` such that the constant term `c_0` in `\wp(z)` is zero.
|
|
21
|
+
|
|
22
|
+
EXAMPLES::
|
|
23
|
+
|
|
24
|
+
sage: E = EllipticCurve([0,1])
|
|
25
|
+
sage: E.weierstrass_p()
|
|
26
|
+
z^-2 - 1/7*z^4 + 1/637*z^10 - 1/84721*z^16 + O(z^20)
|
|
27
|
+
|
|
28
|
+
REFERENCES:
|
|
29
|
+
|
|
30
|
+
- [BMSS2006]_
|
|
31
|
+
|
|
32
|
+
AUTHORS:
|
|
33
|
+
|
|
34
|
+
- Dan Shumov 04/09: original implementation
|
|
35
|
+
|
|
36
|
+
- Chris Wuthrich 11/09: major restructuring
|
|
37
|
+
|
|
38
|
+
- Jeroen Demeyer (2014-03-06): code clean up, fix characteristic bound
|
|
39
|
+
for quadratic algorithm (see :issue:`15855`)
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
#*****************************************************************************
|
|
43
|
+
# Copyright (C) 2009 William Stein <wstein@gmail.com>
|
|
44
|
+
#
|
|
45
|
+
# This program is free software: you can redistribute it and/or modify
|
|
46
|
+
# it under the terms of the GNU General Public License as published by
|
|
47
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
48
|
+
# (at your option) any later version.
|
|
49
|
+
# http://www.gnu.org/licenses/
|
|
50
|
+
#*****************************************************************************
|
|
51
|
+
|
|
52
|
+
from sage.rings.laurent_series_ring import LaurentSeriesRing
|
|
53
|
+
from sage.rings.power_series_ring import PowerSeriesRing
|
|
54
|
+
|
|
55
|
+
# Note: Part of the documentation is replicated in ell_field.py for
|
|
56
|
+
# users' convenience. Make sure to keep the two copies synchronized.
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def weierstrass_p(E, prec=20, algorithm=None):
|
|
60
|
+
r"""
|
|
61
|
+
Compute the Weierstrass `\wp`-function on an elliptic curve.
|
|
62
|
+
|
|
63
|
+
INPUT:
|
|
64
|
+
|
|
65
|
+
- ``E`` -- an elliptic curve
|
|
66
|
+
|
|
67
|
+
- ``prec`` -- precision
|
|
68
|
+
|
|
69
|
+
- ``algorithm`` -- string or ``None`` (default: ``None``);
|
|
70
|
+
a choice of algorithm among ``'pari'``, ``'fast'``, ``'quadratic'``,
|
|
71
|
+
or ``None`` to let this function determine the best algorithm to use
|
|
72
|
+
|
|
73
|
+
OUTPUT:
|
|
74
|
+
|
|
75
|
+
a Laurent series in one variable `z` with coefficients in the base
|
|
76
|
+
field `k` of `E`.
|
|
77
|
+
|
|
78
|
+
EXAMPLES::
|
|
79
|
+
|
|
80
|
+
sage: E = EllipticCurve('11a1')
|
|
81
|
+
sage: E.weierstrass_p(prec=10)
|
|
82
|
+
z^-2 + 31/15*z^2 + 2501/756*z^4 + 961/675*z^6 + 77531/41580*z^8 + O(z^10)
|
|
83
|
+
sage: E.weierstrass_p(prec=8)
|
|
84
|
+
z^-2 + 31/15*z^2 + 2501/756*z^4 + 961/675*z^6 + O(z^8)
|
|
85
|
+
sage: Esh = E.short_weierstrass_model()
|
|
86
|
+
sage: Esh.weierstrass_p(prec=8)
|
|
87
|
+
z^-2 + 13392/5*z^2 + 1080432/7*z^4 + 59781888/25*z^6 + O(z^8)
|
|
88
|
+
|
|
89
|
+
sage: E.weierstrass_p(prec=8, algorithm='pari')
|
|
90
|
+
z^-2 + 31/15*z^2 + 2501/756*z^4 + 961/675*z^6 + O(z^8)
|
|
91
|
+
sage: E.weierstrass_p(prec=8, algorithm='quadratic')
|
|
92
|
+
z^-2 + 31/15*z^2 + 2501/756*z^4 + 961/675*z^6 + O(z^8)
|
|
93
|
+
|
|
94
|
+
sage: k = GF(11)
|
|
95
|
+
sage: E = EllipticCurve(k, [1,1])
|
|
96
|
+
sage: E.weierstrass_p(prec=6, algorithm='fast')
|
|
97
|
+
z^-2 + 2*z^2 + 3*z^4 + O(z^6)
|
|
98
|
+
sage: E.weierstrass_p(prec=7, algorithm='fast')
|
|
99
|
+
Traceback (most recent call last):
|
|
100
|
+
...
|
|
101
|
+
ValueError: for computing the Weierstrass p-function via the fast algorithm,
|
|
102
|
+
the characteristic (11) of the underlying field must be greater than prec + 4 = 11
|
|
103
|
+
sage: E.weierstrass_p(prec=8)
|
|
104
|
+
z^-2 + 2*z^2 + 3*z^4 + 5*z^6 + O(z^8)
|
|
105
|
+
sage: E.weierstrass_p(prec=8, algorithm='quadratic')
|
|
106
|
+
z^-2 + 2*z^2 + 3*z^4 + 5*z^6 + O(z^8)
|
|
107
|
+
sage: E.weierstrass_p(prec=8, algorithm='pari')
|
|
108
|
+
z^-2 + 2*z^2 + 3*z^4 + 5*z^6 + O(z^8)
|
|
109
|
+
sage: E.weierstrass_p(prec=9)
|
|
110
|
+
Traceback (most recent call last):
|
|
111
|
+
...
|
|
112
|
+
NotImplementedError: currently no algorithms for computing the Weierstrass
|
|
113
|
+
p-function for that characteristic / precision pair is implemented.
|
|
114
|
+
Lower the precision below char(k) - 2
|
|
115
|
+
sage: E.weierstrass_p(prec=9, algorithm='quadratic')
|
|
116
|
+
Traceback (most recent call last):
|
|
117
|
+
...
|
|
118
|
+
ValueError: for computing the Weierstrass p-function via the quadratic
|
|
119
|
+
algorithm, the characteristic (11) of the underlying field must be greater
|
|
120
|
+
than prec + 2 = 11
|
|
121
|
+
sage: E.weierstrass_p(prec=9, algorithm='pari')
|
|
122
|
+
Traceback (most recent call last):
|
|
123
|
+
...
|
|
124
|
+
ValueError: for computing the Weierstrass p-function via pari, the
|
|
125
|
+
characteristic (11) of the underlying field must be greater than prec + 2 = 11
|
|
126
|
+
|
|
127
|
+
TESTS::
|
|
128
|
+
|
|
129
|
+
sage: E.weierstrass_p(prec=4, algorithm='foo')
|
|
130
|
+
Traceback (most recent call last):
|
|
131
|
+
...
|
|
132
|
+
ValueError: unknown algorithm for computing the Weierstrass p-function
|
|
133
|
+
"""
|
|
134
|
+
k = E.base_ring()
|
|
135
|
+
p = k.characteristic()
|
|
136
|
+
|
|
137
|
+
# if the algorithm is not set, try to determine algorithm from input
|
|
138
|
+
if algorithm is None:
|
|
139
|
+
if 0 < p <= prec + 2:
|
|
140
|
+
raise NotImplementedError("currently no algorithms for computing the Weierstrass p-function for that characteristic / precision pair is implemented. Lower the precision below char(k) - 2")
|
|
141
|
+
algorithm = "pari"
|
|
142
|
+
|
|
143
|
+
if algorithm == "pari":
|
|
144
|
+
if 0 < p <= prec + 2:
|
|
145
|
+
raise ValueError("for computing the Weierstrass p-function via pari, the characteristic (%s) of the underlying field must be greater than prec + 2 = %s" % (p,prec+2))
|
|
146
|
+
return compute_wp_pari(E, prec)
|
|
147
|
+
|
|
148
|
+
# quadratic and fast algorithms require short Weierstrass model
|
|
149
|
+
Esh = E.short_weierstrass_model()
|
|
150
|
+
|
|
151
|
+
A = Esh.a4()
|
|
152
|
+
B = Esh.a6()
|
|
153
|
+
|
|
154
|
+
if algorithm == "quadratic":
|
|
155
|
+
if 0 < p <= prec + 2:
|
|
156
|
+
raise ValueError("for computing the Weierstrass p-function via the quadratic algorithm, the characteristic (%s) of the underlying field must be greater than prec + 2 = %s" % (p,prec+2))
|
|
157
|
+
wp = compute_wp_quadratic(k, A, B, prec)
|
|
158
|
+
elif algorithm == "fast":
|
|
159
|
+
if 0 < p <= prec + 4:
|
|
160
|
+
raise ValueError("for computing the Weierstrass p-function via the fast algorithm, the characteristic (%s) of the underlying field must be greater than prec + 4 = %s" % (p,prec+4))
|
|
161
|
+
wp = compute_wp_fast(k, A, B, prec)
|
|
162
|
+
else:
|
|
163
|
+
raise ValueError("unknown algorithm for computing the Weierstrass p-function")
|
|
164
|
+
|
|
165
|
+
R = wp.parent()
|
|
166
|
+
z = R.gen()
|
|
167
|
+
u = E.isomorphism_to(Esh).u
|
|
168
|
+
return wp(z*u) * u**2
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
def compute_wp_pari(E, prec):
|
|
172
|
+
r"""
|
|
173
|
+
Compute the Weierstrass `\wp`-function with the ``ellwp`` function
|
|
174
|
+
from PARI.
|
|
175
|
+
|
|
176
|
+
EXAMPLES::
|
|
177
|
+
|
|
178
|
+
sage: E = EllipticCurve([0,1])
|
|
179
|
+
sage: from sage.schemes.elliptic_curves.ell_wp import compute_wp_pari
|
|
180
|
+
sage: compute_wp_pari(E, prec=20)
|
|
181
|
+
z^-2 - 1/7*z^4 + 1/637*z^10 - 1/84721*z^16 + O(z^20)
|
|
182
|
+
sage: compute_wp_pari(E, prec=30)
|
|
183
|
+
z^-2 - 1/7*z^4 + 1/637*z^10 - 1/84721*z^16
|
|
184
|
+
+ 3/38548055*z^22 - 4/8364927935*z^28 + O(z^30)
|
|
185
|
+
"""
|
|
186
|
+
ep = E.__pari__()
|
|
187
|
+
wpp = ep.ellwp(n=prec)
|
|
188
|
+
k = E.base_ring()
|
|
189
|
+
R = LaurentSeriesRing(k,'z')
|
|
190
|
+
z = R.gen()
|
|
191
|
+
wp = z**(-2)
|
|
192
|
+
for i in range(prec):
|
|
193
|
+
wp += k(wpp[i]) * z**i
|
|
194
|
+
wp = wp.add_bigoh(prec)
|
|
195
|
+
return wp
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def compute_wp_quadratic(k, A, B, prec):
|
|
199
|
+
r"""
|
|
200
|
+
Compute the truncated Weierstrass function of an elliptic curve
|
|
201
|
+
defined by short Weierstrass model: `y^2 = x^3 + Ax + B`. Uses an
|
|
202
|
+
algorithm that is of complexity `O(prec^2)`.
|
|
203
|
+
|
|
204
|
+
Let p be the characteristic of the underlying field. Then we must
|
|
205
|
+
have either p = 0, or p > prec + 2.
|
|
206
|
+
|
|
207
|
+
INPUT:
|
|
208
|
+
|
|
209
|
+
- ``k`` -- the field of definition of the curve
|
|
210
|
+
- ``A`` -- and
|
|
211
|
+
- ``B`` -- the coefficients of the elliptic curve
|
|
212
|
+
- ``prec`` -- the precision to which we compute the series
|
|
213
|
+
|
|
214
|
+
OUTPUT:
|
|
215
|
+
|
|
216
|
+
A Laurent series approximating the Weierstrass `\wp`-function to precision ``prec``.
|
|
217
|
+
|
|
218
|
+
ALGORITHM:
|
|
219
|
+
|
|
220
|
+
This function uses the algorithm described in section 3.2 of [BMSS2006]_.
|
|
221
|
+
|
|
222
|
+
EXAMPLES::
|
|
223
|
+
|
|
224
|
+
sage: E = EllipticCurve([7,0])
|
|
225
|
+
sage: E.weierstrass_p(prec=10, algorithm='quadratic')
|
|
226
|
+
z^-2 - 7/5*z^2 + 49/75*z^6 + O(z^10)
|
|
227
|
+
|
|
228
|
+
sage: E = EllipticCurve(GF(103), [1,2])
|
|
229
|
+
sage: E.weierstrass_p(algorithm='quadratic')
|
|
230
|
+
z^-2 + 41*z^2 + 88*z^4 + 11*z^6 + 57*z^8 + 55*z^10 + 73*z^12
|
|
231
|
+
+ 11*z^14 + 17*z^16 + 50*z^18 + O(z^20)
|
|
232
|
+
|
|
233
|
+
sage: from sage.schemes.elliptic_curves.ell_wp import compute_wp_quadratic
|
|
234
|
+
sage: compute_wp_quadratic(E.base_ring(), E.a4(), E.a6(), prec=10)
|
|
235
|
+
z^-2 + 41*z^2 + 88*z^4 + 11*z^6 + 57*z^8 + O(z^10)
|
|
236
|
+
"""
|
|
237
|
+
m = (prec + 1)//2
|
|
238
|
+
c = [0 for j in range(m)]
|
|
239
|
+
c[0] = -A/5
|
|
240
|
+
c[1] = -B/7
|
|
241
|
+
|
|
242
|
+
# first Z represent z^2
|
|
243
|
+
R = LaurentSeriesRing(k,'z')
|
|
244
|
+
Z = R.gen()
|
|
245
|
+
pe = Z**-1 + c[0]*Z + c[1]*Z**2
|
|
246
|
+
|
|
247
|
+
for i in range(3, m):
|
|
248
|
+
t = 0
|
|
249
|
+
for j in range(1, i - 1):
|
|
250
|
+
t += c[j-1]*c[i-2-j]
|
|
251
|
+
ci = (3*t)/((i-2)*(2*i+3))
|
|
252
|
+
pe += ci * Z**i
|
|
253
|
+
c[i-1] = ci
|
|
254
|
+
|
|
255
|
+
return pe(Z**2).add_bigoh(prec)
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
def compute_wp_fast(k, A, B, m):
|
|
259
|
+
r"""
|
|
260
|
+
Compute the Weierstrass function of an elliptic curve defined by short Weierstrass model:
|
|
261
|
+
`y^2 = x^3 + Ax + B`. It does this with as fast as polynomial of degree `m` can be multiplied
|
|
262
|
+
together in the base ring, i.e. `O(M(n))` in the notation of [BMSS2006]_.
|
|
263
|
+
|
|
264
|
+
Let `p` be the characteristic of the underlying field: Then we must have either `p=0`, or `p > m + 3`.
|
|
265
|
+
|
|
266
|
+
INPUT:
|
|
267
|
+
|
|
268
|
+
- ``k`` -- the base field of the curve
|
|
269
|
+
- ``A`` -- and
|
|
270
|
+
- ``B`` -- as the coefficients of the short Weierstrass model `y^2 = x^3 +Ax +B`, and
|
|
271
|
+
- ``m`` -- the precision to which the function is computed to
|
|
272
|
+
|
|
273
|
+
OUTPUT: the Weierstrass `\wp` function as a Laurent series to precision `m`
|
|
274
|
+
|
|
275
|
+
ALGORITHM:
|
|
276
|
+
|
|
277
|
+
This function uses the algorithm described in section 3.3 of
|
|
278
|
+
[BMSS2006]_.
|
|
279
|
+
|
|
280
|
+
EXAMPLES::
|
|
281
|
+
|
|
282
|
+
sage: from sage.schemes.elliptic_curves.ell_wp import compute_wp_fast
|
|
283
|
+
sage: compute_wp_fast(QQ, 1, 8, 7)
|
|
284
|
+
z^-2 - 1/5*z^2 - 8/7*z^4 + 1/75*z^6 + O(z^7)
|
|
285
|
+
|
|
286
|
+
sage: k = GF(37)
|
|
287
|
+
sage: compute_wp_fast(k, k(1), k(8), 5)
|
|
288
|
+
z^-2 + 22*z^2 + 20*z^4 + O(z^5)
|
|
289
|
+
"""
|
|
290
|
+
R = PowerSeriesRing(k,'z',default_prec=m+5)
|
|
291
|
+
z = R.gen()
|
|
292
|
+
s = 2
|
|
293
|
+
f1 = z.add_bigoh(m+3)
|
|
294
|
+
n = 2*m + 4
|
|
295
|
+
|
|
296
|
+
# solve the nonlinear differential equation
|
|
297
|
+
while (s < n):
|
|
298
|
+
f1pr = f1.derivative()
|
|
299
|
+
next_s = 2*s - 1
|
|
300
|
+
|
|
301
|
+
a = 2*f1pr
|
|
302
|
+
b = -(6*B*(f1**5) + 4*A*(f1**3))
|
|
303
|
+
c = B*(f1**6) + A*f1**4 + 1 - (f1pr**2)
|
|
304
|
+
|
|
305
|
+
# we should really be computing only mod z^next_s here.
|
|
306
|
+
# but we loose only a factor 2
|
|
307
|
+
f2 = solve_linear_differential_system(a, b, c, 0)
|
|
308
|
+
# sometimes we get to 0 quicker than s reaches n
|
|
309
|
+
if f2 == 0:
|
|
310
|
+
break
|
|
311
|
+
f1 = f1 + f2
|
|
312
|
+
s = next_s
|
|
313
|
+
|
|
314
|
+
R = f1
|
|
315
|
+
Q = R**2
|
|
316
|
+
pe = 1/Q
|
|
317
|
+
|
|
318
|
+
return pe
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
def solve_linear_differential_system(a, b, c, alpha):
|
|
322
|
+
r"""
|
|
323
|
+
Solve a system of linear differential equations: `af' + bf = c` and `f'(0) = \alpha`
|
|
324
|
+
where `a`, `b`, and `c` are power series in one variable and `\alpha` is a constant in the coefficient ring.
|
|
325
|
+
|
|
326
|
+
ALGORITHM:
|
|
327
|
+
|
|
328
|
+
due to Brent and Kung '78.
|
|
329
|
+
|
|
330
|
+
EXAMPLES::
|
|
331
|
+
|
|
332
|
+
sage: from sage.schemes.elliptic_curves.ell_wp import solve_linear_differential_system
|
|
333
|
+
sage: k = GF(17)
|
|
334
|
+
sage: R.<x> = PowerSeriesRing(k)
|
|
335
|
+
sage: a = 1 + x + O(x^7); b = x + O(x^7); c = 1 + x^3 + O(x^7); alpha = k(3)
|
|
336
|
+
sage: f = solve_linear_differential_system(a, b, c, alpha)
|
|
337
|
+
sage: f
|
|
338
|
+
3 + x + 15*x^2 + x^3 + 10*x^5 + 3*x^6 + 13*x^7 + O(x^8)
|
|
339
|
+
sage: a*f.derivative() + b*f - c
|
|
340
|
+
O(x^7)
|
|
341
|
+
sage: f(0) == alpha
|
|
342
|
+
True
|
|
343
|
+
"""
|
|
344
|
+
a_recip = 1 / a
|
|
345
|
+
B = b * a_recip
|
|
346
|
+
C = c * a_recip
|
|
347
|
+
int_B = B.integral()
|
|
348
|
+
J = int_B.exp()
|
|
349
|
+
J_recip = 1 / J
|
|
350
|
+
CJ = C * J
|
|
351
|
+
int_CJ = CJ.integral()
|
|
352
|
+
return J_recip * (alpha + int_CJ)
|