passagemath-schemes 10.5.48__cp312-cp312-musllinux_1_2_aarch64.whl → 10.6.47__cp312-cp312-musllinux_1_2_aarch64.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/__init__.py +3 -0
- {passagemath_schemes-10.5.48.dist-info → passagemath_schemes-10.6.47.dist-info}/METADATA +42 -42
- {passagemath_schemes-10.5.48.dist-info → passagemath_schemes-10.6.47.dist-info}/METADATA.bak +43 -43
- {passagemath_schemes-10.5.48.dist-info → passagemath_schemes-10.6.47.dist-info}/RECORD +159 -140
- passagemath_schemes-10.6.47.dist-info/top_level.txt +3 -0
- passagemath_schemes.libs/{libflint-7dd7ad94.so.19.0.0 → libflint-edf7fb90.so.22.0.0} +0 -0
- passagemath_schemes.libs/{libgcc_s-69c45f16.so.1 → libgcc_s-2d945d6c.so.1} +0 -0
- passagemath_schemes.libs/{libgmp-8e78bd9b.so.10.5.0 → libgmp-28992bcb.so.10.5.0} +0 -0
- passagemath_schemes.libs/{libgmpxx-e6de26f1.so.4.7.0 → libgmpxx-fecb01a9.so.4.7.0} +0 -0
- passagemath_schemes.libs/{libmpfr-5ff10580.so.6.2.1 → libmpfr-1fc8ea36.so.6.2.2} +0 -0
- passagemath_schemes.libs/{libstdc++-1f1a71be.so.6.0.33 → libstdc++-85f2cd6d.so.6.0.33} +0 -0
- sage/all__sagemath_schemes.py +3 -2
- sage/databases/all__sagemath_schemes.py +0 -10
- sage/dynamics/arithmetic_dynamics/berkovich_ds.py +4 -4
- sage/dynamics/arithmetic_dynamics/generic_ds.py +3 -3
- sage/dynamics/arithmetic_dynamics/projective_ds.py +6 -6
- sage/dynamics/arithmetic_dynamics/projective_ds_helper.cpython-312-aarch64-linux-musl.so +0 -0
- sage/dynamics/arithmetic_dynamics/wehlerK3.py +18 -18
- sage/lfunctions/zero_sums.cpython-312-aarch64-linux-musl.so +0 -0
- sage/modular/abvar/abvar.py +12 -11
- sage/modular/abvar/constructor.py +3 -3
- sage/modular/abvar/cuspidal_subgroup.py +5 -6
- sage/modular/abvar/finite_subgroup.py +20 -18
- sage/modular/abvar/homology.py +1 -2
- sage/modular/abvar/homspace.py +1 -1
- sage/modular/abvar/lseries.py +3 -3
- sage/modular/abvar/morphism.py +1 -1
- sage/modular/abvar/torsion_point.py +1 -1
- sage/modular/abvar/torsion_subgroup.py +1 -1
- sage/modular/arithgroup/arithgroup_element.cpython-312-aarch64-linux-musl.so +0 -0
- sage/modular/arithgroup/arithgroup_perm.py +16 -16
- sage/modular/arithgroup/congroup.cpython-312-aarch64-linux-musl.so +0 -0
- sage/modular/arithgroup/congroup_gamma0.py +2 -2
- sage/modular/arithgroup/congroup_gamma1.py +4 -4
- sage/modular/arithgroup/congroup_gammaH.py +2 -2
- sage/modular/arithgroup/congroup_generic.py +2 -3
- sage/modular/arithgroup/congroup_sl2z.py +3 -3
- sage/modular/arithgroup/farey_symbol.cpython-312-aarch64-linux-musl.so +0 -0
- sage/modular/arithgroup/farey_symbol.pyx +1 -2
- sage/modular/btquotients/btquotient.py +4 -5
- sage/modular/btquotients/pautomorphicform.py +2 -2
- sage/modular/cusps.py +6 -4
- sage/modular/cusps_nf.py +7 -8
- sage/modular/dirichlet.py +34 -43
- sage/modular/drinfeld_modform/element.py +4 -4
- sage/modular/drinfeld_modform/ring.py +12 -12
- sage/modular/drinfeld_modform/tutorial.py +1 -1
- sage/modular/hecke/algebra.py +7 -5
- sage/modular/hecke/ambient_module.py +2 -2
- sage/modular/hecke/element.py +7 -2
- sage/modular/hecke/module.py +9 -9
- sage/modular/hecke/submodule.py +6 -8
- sage/modular/hypergeometric_misc.cpython-312-aarch64-linux-musl.so +0 -0
- sage/modular/hypergeometric_misc.pyx +3 -2
- sage/modular/hypergeometric_motive.py +2 -2
- sage/modular/local_comp/local_comp.py +19 -11
- sage/modular/local_comp/type_space.py +10 -8
- sage/modular/modform/ambient.py +4 -3
- sage/modular/modform/cuspidal_submodule.py +2 -2
- sage/modular/modform/element.py +72 -72
- sage/modular/modform/half_integral.py +1 -1
- sage/modular/modform/l_series_gross_zagier.py +3 -0
- sage/modular/modform/l_series_gross_zagier_coeffs.cpython-312-aarch64-linux-musl.so +0 -0
- sage/modular/modform/l_series_gross_zagier_coeffs.pyx +5 -2
- sage/modular/modform/ring.py +10 -12
- sage/modular/modform/space.py +18 -21
- sage/modular/modform/weight1.py +1 -2
- sage/modular/modform_hecketriangle/abstract_ring.py +7 -14
- sage/modular/modform_hecketriangle/abstract_space.py +63 -66
- sage/modular/modform_hecketriangle/graded_ring_element.py +11 -12
- sage/modular/modform_hecketriangle/hecke_triangle_group_element.py +82 -84
- sage/modular/modform_hecketriangle/hecke_triangle_groups.py +2 -2
- sage/modular/modform_hecketriangle/readme.py +9 -11
- sage/modular/modform_hecketriangle/series_constructor.py +10 -18
- sage/modular/modform_hecketriangle/space.py +29 -30
- sage/modular/modform_hecketriangle/subspace.py +9 -7
- sage/modular/modsym/all.py +2 -2
- sage/modular/modsym/ambient.py +13 -20
- sage/modular/modsym/boundary.py +2 -2
- sage/modular/modsym/manin_symbol.cpython-312-aarch64-linux-musl.so +0 -0
- sage/modular/modsym/manin_symbol_list.py +3 -7
- sage/modular/modsym/relation_matrix_pyx.cpython-312-aarch64-linux-musl.so +0 -0
- sage/modular/modsym/space.py +10 -22
- sage/modular/modsym/subspace.py +5 -7
- sage/modular/multiple_zeta.py +11 -13
- sage/modular/multiple_zeta_F_algebra.py +4 -6
- sage/modular/overconvergent/genus0.py +5 -4
- sage/modular/overconvergent/hecke_series.py +2 -2
- sage/modular/pollack_stevens/distributions.py +2 -2
- sage/modular/pollack_stevens/fund_domain.py +26 -29
- sage/modular/pollack_stevens/manin_map.py +15 -10
- sage/modular/pollack_stevens/modsym.py +18 -18
- sage/modular/quasimodform/element.py +10 -10
- sage/modular/quasimodform/ring.py +22 -22
- sage/modular/ssmod/ssmod.py +5 -12
- sage/rings/polynomial/binary_form_reduce.py +1 -1
- sage/schemes/curves/affine_curve.py +4 -4
- sage/schemes/curves/plane_curve_arrangement.py +28 -24
- sage/schemes/elliptic_curves/BSD.py +1 -1
- sage/schemes/elliptic_curves/addition_formulas_ring.py +4 -0
- sage/schemes/elliptic_curves/cm.py +1 -1
- sage/schemes/elliptic_curves/constructor.py +3 -3
- sage/schemes/elliptic_curves/ell_egros.py +1 -1
- sage/schemes/elliptic_curves/ell_field.py +57 -46
- sage/schemes/elliptic_curves/ell_finite_field.py +138 -26
- sage/schemes/elliptic_curves/ell_local_data.py +9 -9
- sage/schemes/elliptic_curves/ell_number_field.py +25 -24
- sage/schemes/elliptic_curves/ell_point.py +21 -22
- sage/schemes/elliptic_curves/ell_rational_field.py +38 -28
- sage/schemes/elliptic_curves/formal_group.py +1 -1
- sage/schemes/elliptic_curves/heegner.py +11 -8
- sage/schemes/elliptic_curves/height.py +26 -23
- sage/schemes/elliptic_curves/hom.py +2 -1
- sage/schemes/elliptic_curves/hom_composite.py +11 -11
- sage/schemes/elliptic_curves/hom_frobenius.py +8 -8
- sage/schemes/elliptic_curves/hom_sum.py +7 -1
- sage/schemes/elliptic_curves/hom_velusqrt.py +13 -7
- sage/schemes/elliptic_curves/homset.py +2 -2
- sage/schemes/elliptic_curves/isogeny_small_degree.py +1 -1
- sage/schemes/elliptic_curves/mod_poly.py +12 -5
- sage/schemes/elliptic_curves/mod_sym_num.cpython-312-aarch64-linux-musl.so +0 -0
- sage/schemes/elliptic_curves/padic_lseries.py +25 -13
- sage/schemes/elliptic_curves/padics.py +71 -62
- sage/schemes/elliptic_curves/period_lattice.py +78 -27
- sage/schemes/elliptic_curves/period_lattice_region.cpython-312-aarch64-linux-musl.so +0 -0
- sage/schemes/elliptic_curves/sha_tate.py +1 -1
- sage/schemes/elliptic_curves/weierstrass_morphism.py +2 -2
- sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +1 -1
- sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +1 -1
- sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +10 -20
- sage/schemes/jacobians/abstract_jacobian.py +1 -1
- sage/schemes/plane_conics/con_field.py +42 -42
- sage/schemes/plane_conics/con_rational_field.py +1 -1
- sage/schemes/riemann_surfaces/riemann_surface.py +8 -8
- 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
- passagemath_schemes-10.5.48.dist-info/top_level.txt +0 -2
- sage/databases/db_modular_polynomials.py +0 -250
- sage/databases/stein_watkins.py +0 -363
- sage/modular/modsym/p1list.cpython-312-aarch64-linux-musl.so +0 -0
- sage/modular/modsym/p1list.pxd +0 -29
- sage/modular/modsym/p1list.pyx +0 -1372
- {passagemath_schemes-10.5.48.dist-info → passagemath_schemes-10.6.47.dist-info}/WHEEL +0 -0
|
@@ -37,11 +37,12 @@ from sage.rings.laurent_series_ring import LaurentSeriesRing
|
|
|
37
37
|
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
|
|
38
38
|
from sage.rings.power_series_ring import PowerSeriesRing
|
|
39
39
|
from sage.rings.rational_field import RationalField
|
|
40
|
-
import sage.schemes.hyperelliptic_curves.hypellfrob
|
|
41
|
-
import sage.schemes.hyperelliptic_curves.monsky_washnitzer
|
|
42
40
|
|
|
43
41
|
lazy_import('sage.rings.padics.factory', ['Qp', 'Zp'])
|
|
44
|
-
|
|
42
|
+
lazy_import('sage.schemes.hyperelliptic_curves.hypellfrob', 'hypellfrob')
|
|
43
|
+
lazy_import('sage.schemes.hyperelliptic_curves.monsky_washnitzer',
|
|
44
|
+
['adjusted_prec', 'matrix_of_frobenius'],
|
|
45
|
+
as_=['mw_adjusted_prec', 'mw_matrix_of_frobenius'])
|
|
45
46
|
|
|
46
47
|
from . import padic_lseries as plseries
|
|
47
48
|
|
|
@@ -169,7 +170,7 @@ def padic_lseries(self, p, normalize=None, implementation='eclib',
|
|
|
169
170
|
|
|
170
171
|
Next consider the curve 37b::
|
|
171
172
|
|
|
172
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
173
|
+
sage: # needs database_cremona_mini_ellcurve sage.graphs
|
|
173
174
|
sage: e = EllipticCurve('37b')
|
|
174
175
|
sage: L = e.padic_lseries(3)
|
|
175
176
|
sage: P = L.series(5)
|
|
@@ -184,23 +185,26 @@ def padic_lseries(self, p, normalize=None, implementation='eclib',
|
|
|
184
185
|
|
|
185
186
|
We can use Sage modular symbols instead to compute the `L`-series::
|
|
186
187
|
|
|
187
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
188
|
+
sage: # needs database_cremona_mini_ellcurve sage.graphs
|
|
188
189
|
sage: e = EllipticCurve('11a')
|
|
189
190
|
sage: L = e.padic_lseries(3, implementation='sage')
|
|
190
|
-
sage: L.series(5,prec=10)
|
|
191
|
-
2 + 3 + 3^2 + 2*3^3 + 2*3^5 + 3^6 + O(3^7) + (1 + 3 + 2*3^2 + 3^3 + O(3^4))*T
|
|
191
|
+
sage: L.series(5, prec=10)
|
|
192
|
+
2 + 3 + 3^2 + 2*3^3 + 2*3^5 + 3^6 + O(3^7) + (1 + 3 + 2*3^2 + 3^3 + O(3^4))*T
|
|
193
|
+
+ (1 + 2*3 + O(3^4))*T^2 + (3 + 2*3^2 + O(3^3))*T^3 + (2*3 + 3^2 + O(3^3))*T^4
|
|
194
|
+
+ (2 + 2*3 + 2*3^2 + O(3^3))*T^5 + (1 + 3^2 + O(3^3))*T^6 + (2 + 3^2 + O(3^3))*T^7
|
|
195
|
+
+ (2 + 2*3 + 2*3^2 + O(3^3))*T^8 + (2 + O(3^2))*T^9 + O(T^10)
|
|
192
196
|
|
|
193
197
|
Also the numerical modular symbols can be used.
|
|
194
198
|
This may allow for much larger conductor in some instances::
|
|
195
199
|
|
|
196
200
|
sage: E = EllipticCurve([101,103])
|
|
197
201
|
sage: L = E.padic_lseries(5, implementation='num')
|
|
198
|
-
sage: L.series(2)
|
|
202
|
+
sage: L.series(2) # needs sage.graphs
|
|
199
203
|
O(5^4) + (3 + O(5))*T + (1 + O(5))*T^2 + (3 + O(5))*T^3 + O(5)*T^4 + O(T^5)
|
|
200
204
|
|
|
201
205
|
Finally, we can use the overconvergent method of Pollack-Stevens.::
|
|
202
206
|
|
|
203
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
207
|
+
sage: # needs database_cremona_mini_ellcurve sage.graphs
|
|
204
208
|
sage: e = EllipticCurve('11a')
|
|
205
209
|
sage: L = e.padic_lseries(3, implementation='pollackstevens', precision=6)
|
|
206
210
|
sage: L.series(5)
|
|
@@ -278,48 +282,48 @@ def padic_regulator(self, p, prec=20, height=None, check_hypotheses=True):
|
|
|
278
282
|
|
|
279
283
|
EXAMPLES::
|
|
280
284
|
|
|
281
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
285
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
282
286
|
sage: E = EllipticCurve("37a")
|
|
283
287
|
sage: E.padic_regulator(5, 10)
|
|
284
288
|
5 + 5^2 + 5^3 + 3*5^6 + 4*5^7 + 5^9 + O(5^10)
|
|
285
289
|
|
|
286
290
|
An anomalous case::
|
|
287
291
|
|
|
288
|
-
sage: E.padic_regulator(53, 10) # needs database_cremona_mini_ellcurve
|
|
292
|
+
sage: E.padic_regulator(53, 10) # needs database_cremona_mini_ellcurve sage.symbolic
|
|
289
293
|
26*53^-1 + 30 + 20*53 + 47*53^2 + 10*53^3 + 32*53^4 + 9*53^5 + 22*53^6 + 35*53^7 + 30*53^8 + O(53^9)
|
|
290
294
|
|
|
291
295
|
An anomalous case where the precision drops some::
|
|
292
296
|
|
|
293
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
297
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
294
298
|
sage: E = EllipticCurve("5077a")
|
|
295
299
|
sage: E.padic_regulator(5, 10)
|
|
296
300
|
5 + 5^2 + 4*5^3 + 2*5^4 + 2*5^5 + 2*5^6 + 4*5^7 + 2*5^8 + 5^9 + O(5^10)
|
|
297
301
|
|
|
298
302
|
Check that answers agree over a range of precisions::
|
|
299
303
|
|
|
300
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
301
|
-
sage: max_prec = 30 # make sure we get past p^2
|
|
302
|
-
sage: full = E.padic_regulator(5, max_prec)
|
|
303
|
-
sage: for prec in range(1, max_prec):
|
|
304
|
+
sage: # long time, needs database_cremona_mini_ellcurve sage.symbolic
|
|
305
|
+
sage: max_prec = 30 # make sure we get past p^2
|
|
306
|
+
sage: full = E.padic_regulator(5, max_prec)
|
|
307
|
+
sage: for prec in range(1, max_prec):
|
|
304
308
|
....: assert E.padic_regulator(5, prec) == full
|
|
305
309
|
|
|
306
310
|
A case where the generator belongs to the formal group already
|
|
307
311
|
(:issue:`3632`)::
|
|
308
312
|
|
|
309
313
|
sage: E = EllipticCurve([37,0])
|
|
310
|
-
sage: E.padic_regulator(5,10)
|
|
314
|
+
sage: E.padic_regulator(5,10) # needs sage.symbolic
|
|
311
315
|
2*5^2 + 2*5^3 + 5^4 + 5^5 + 4*5^6 + 3*5^8 + 4*5^9 + O(5^10)
|
|
312
316
|
|
|
313
317
|
The result is not dependent on the model for the curve::
|
|
314
318
|
|
|
315
319
|
sage: E = EllipticCurve([0,0,0,0,2^12*17])
|
|
316
320
|
sage: Em = E.minimal_model()
|
|
317
|
-
sage: E.padic_regulator(7) == Em.padic_regulator(7)
|
|
321
|
+
sage: E.padic_regulator(7) == Em.padic_regulator(7) # needs sage.symbolic
|
|
318
322
|
True
|
|
319
323
|
|
|
320
324
|
Allow a python int as input::
|
|
321
325
|
|
|
322
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
326
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
323
327
|
sage: E = EllipticCurve('37a')
|
|
324
328
|
sage: E.padic_regulator(int(5))
|
|
325
329
|
5 + 5^2 + 5^3 + 3*5^6 + 4*5^7 + 5^9 + 5^10 + 3*5^11 + 3*5^12 + 5^13 + 4*5^14 + 5^15 + 2*5^16 + 5^17 + 2*5^18 + 4*5^19 + O(5^20)
|
|
@@ -384,14 +388,14 @@ def padic_height_pairing_matrix(self, p, prec=20, height=None, check_hypotheses=
|
|
|
384
388
|
|
|
385
389
|
EXAMPLES::
|
|
386
390
|
|
|
387
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
391
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
388
392
|
sage: E = EllipticCurve("37a")
|
|
389
393
|
sage: E.padic_height_pairing_matrix(5, 10)
|
|
390
394
|
[5 + 5^2 + 5^3 + 3*5^6 + 4*5^7 + 5^9 + O(5^10)]
|
|
391
395
|
|
|
392
396
|
A rank two example::
|
|
393
397
|
|
|
394
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
398
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
395
399
|
sage: e = EllipticCurve('389a')
|
|
396
400
|
sage: e._set_gens([e(-1, 1), e(1,0)]) # avoid platform dependent gens
|
|
397
401
|
sage: e.padic_height_pairing_matrix(5,10)
|
|
@@ -400,7 +404,7 @@ def padic_height_pairing_matrix(self, p, prec=20, height=None, check_hypotheses=
|
|
|
400
404
|
|
|
401
405
|
An anomalous rank 3 example::
|
|
402
406
|
|
|
403
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
407
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
404
408
|
sage: e = EllipticCurve("5077a")
|
|
405
409
|
sage: e._set_gens([e(-1,3), e(2,0), e(4,6)])
|
|
406
410
|
sage: e.padic_height_pairing_matrix(5,4)
|
|
@@ -724,7 +728,7 @@ def padic_height(self, p, prec=20, sigma=None, check_hypotheses=True):
|
|
|
724
728
|
|
|
725
729
|
EXAMPLES::
|
|
726
730
|
|
|
727
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
731
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
728
732
|
sage: E = EllipticCurve("37a")
|
|
729
733
|
sage: P = E.gens()[0]
|
|
730
734
|
sage: h = E.padic_height(5, 10)
|
|
@@ -733,23 +737,23 @@ def padic_height(self, p, prec=20, sigma=None, check_hypotheses=True):
|
|
|
733
737
|
|
|
734
738
|
An anomalous case::
|
|
735
739
|
|
|
736
|
-
sage: h = E.padic_height(53, 10) # needs database_cremona_mini_ellcurve
|
|
737
|
-
sage: h(P) # needs database_cremona_mini_ellcurve
|
|
740
|
+
sage: h = E.padic_height(53, 10) # needs database_cremona_mini_ellcurve sage.symbolic
|
|
741
|
+
sage: h(P) # needs database_cremona_mini_ellcurve sage.symbolic
|
|
738
742
|
26*53^-1 + 30 + 20*53 + 47*53^2 + 10*53^3 + 32*53^4 + 9*53^5 + 22*53^6 + 35*53^7 + 30*53^8 + 17*53^9 + O(53^10)
|
|
739
743
|
|
|
740
744
|
Boundary case::
|
|
741
745
|
|
|
742
|
-
sage: E.padic_height(5, 3)(P) # needs database_cremona_mini_ellcurve
|
|
746
|
+
sage: E.padic_height(5, 3)(P) # needs database_cremona_mini_ellcurve sage.symbolic
|
|
743
747
|
5 + 5^2 + O(5^3)
|
|
744
748
|
|
|
745
749
|
A case that works the division polynomial code a little harder::
|
|
746
750
|
|
|
747
|
-
sage: E.padic_height(5, 10)(5*P) # needs database_cremona_mini_ellcurve
|
|
751
|
+
sage: E.padic_height(5, 10)(5*P) # needs database_cremona_mini_ellcurve sage.symbolic
|
|
748
752
|
5^3 + 5^4 + 5^5 + 3*5^8 + 4*5^9 + O(5^10)
|
|
749
753
|
|
|
750
754
|
Check that answers agree over a range of precisions::
|
|
751
755
|
|
|
752
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
756
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
753
757
|
sage: max_prec = 30 # make sure we get past p^2 # long time
|
|
754
758
|
sage: full = E.padic_height(5, max_prec)(P) # long time
|
|
755
759
|
sage: for prec in range(1, max_prec): # long time
|
|
@@ -757,7 +761,7 @@ def padic_height(self, p, prec=20, sigma=None, check_hypotheses=True):
|
|
|
757
761
|
|
|
758
762
|
A supersingular prime for a curve::
|
|
759
763
|
|
|
760
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
764
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
761
765
|
sage: E = EllipticCurve('37a')
|
|
762
766
|
sage: E.is_supersingular(3)
|
|
763
767
|
True
|
|
@@ -771,7 +775,7 @@ def padic_height(self, p, prec=20, sigma=None, check_hypotheses=True):
|
|
|
771
775
|
|
|
772
776
|
A torsion point in both the good and supersingular cases::
|
|
773
777
|
|
|
774
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
778
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
775
779
|
sage: E = EllipticCurve('11a')
|
|
776
780
|
sage: P = E.torsion_subgroup().gen(0).element(); P
|
|
777
781
|
(5 : 5 : 1)
|
|
@@ -784,6 +788,7 @@ def padic_height(self, p, prec=20, sigma=None, check_hypotheses=True):
|
|
|
784
788
|
|
|
785
789
|
The result is not dependent on the model for the curve::
|
|
786
790
|
|
|
791
|
+
sage: # needs sage.symbolic
|
|
787
792
|
sage: E = EllipticCurve([0,0,0,0,2^12*17])
|
|
788
793
|
sage: Em = E.minimal_model()
|
|
789
794
|
sage: P = E.gens()[0]
|
|
@@ -797,7 +802,7 @@ def padic_height(self, p, prec=20, sigma=None, check_hypotheses=True):
|
|
|
797
802
|
|
|
798
803
|
Check that issue :issue:`20798` is solved::
|
|
799
804
|
|
|
800
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
805
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
801
806
|
sage: E = EllipticCurve("91b")
|
|
802
807
|
sage: h = E.padic_height(7,10)
|
|
803
808
|
sage: P = E.gen(0)
|
|
@@ -924,7 +929,7 @@ def padic_height_via_multiply(self, p, prec=20, E2=None, check_hypotheses=True):
|
|
|
924
929
|
|
|
925
930
|
EXAMPLES::
|
|
926
931
|
|
|
927
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
932
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
928
933
|
sage: E = EllipticCurve("37a")
|
|
929
934
|
sage: P = E.gens()[0]
|
|
930
935
|
sage: h = E.padic_height_via_multiply(5, 10)
|
|
@@ -933,13 +938,13 @@ def padic_height_via_multiply(self, p, prec=20, E2=None, check_hypotheses=True):
|
|
|
933
938
|
|
|
934
939
|
An anomalous case::
|
|
935
940
|
|
|
936
|
-
sage: h = E.padic_height_via_multiply(53, 10) # needs database_cremona_mini_ellcurve
|
|
937
|
-
sage: h(P) # needs database_cremona_mini_ellcurve
|
|
941
|
+
sage: h = E.padic_height_via_multiply(53, 10) # needs database_cremona_mini_ellcurve sage.symbolic
|
|
942
|
+
sage: h(P) # needs database_cremona_mini_ellcurve sage.symbolic
|
|
938
943
|
26*53^-1 + 30 + 20*53 + 47*53^2 + 10*53^3 + 32*53^4 + 9*53^5 + 22*53^6 + 35*53^7 + 30*53^8 + 17*53^9 + O(53^10)
|
|
939
944
|
|
|
940
945
|
Supply the value of E2 manually::
|
|
941
946
|
|
|
942
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
947
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
943
948
|
sage: E2 = E.padic_E2(5, 8)
|
|
944
949
|
sage: E2
|
|
945
950
|
2 + 4*5 + 2*5^3 + 5^4 + 3*5^5 + 2*5^6 + O(5^8)
|
|
@@ -949,12 +954,12 @@ def padic_height_via_multiply(self, p, prec=20, E2=None, check_hypotheses=True):
|
|
|
949
954
|
|
|
950
955
|
Boundary case::
|
|
951
956
|
|
|
952
|
-
sage: E.padic_height_via_multiply(5, 3)(P) # needs database_cremona_mini_ellcurve
|
|
957
|
+
sage: E.padic_height_via_multiply(5, 3)(P) # needs database_cremona_mini_ellcurve sage.symbolic
|
|
953
958
|
5 + 5^2 + O(5^3)
|
|
954
959
|
|
|
955
960
|
Check that answers agree over a range of precisions::
|
|
956
961
|
|
|
957
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
962
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
958
963
|
sage: max_prec = 30 # make sure we get past p^2 # long time
|
|
959
964
|
sage: full = E.padic_height(5, max_prec)(P) # long time
|
|
960
965
|
sage: for prec in range(2, max_prec): # long time
|
|
@@ -1089,23 +1094,24 @@ def padic_sigma(self, p, N=20, E2=None, check=False, check_hypotheses=True):
|
|
|
1089
1094
|
|
|
1090
1095
|
EXAMPLES::
|
|
1091
1096
|
|
|
1092
|
-
sage: EllipticCurve([-1, 1/4]).padic_sigma(5, 10)
|
|
1097
|
+
sage: EllipticCurve([-1, 1/4]).padic_sigma(5, 10) # needs sage.symbolic
|
|
1093
1098
|
O(5^11) + (1 + O(5^10))*t + O(5^9)*t^2 + (3 + 2*5^2 + 3*5^3 + 3*5^6 + 4*5^7 + O(5^8))*t^3 + O(5^7)*t^4 + (2 + 4*5^2 + 4*5^3 + 5^4 + 5^5 + O(5^6))*t^5 + O(5^5)*t^6 + (2 + 2*5 + 5^2 + 4*5^3 + O(5^4))*t^7 + O(5^3)*t^8 + (1 + 2*5 + O(5^2))*t^9 + O(5)*t^10 + O(t^11)
|
|
1094
1099
|
|
|
1095
1100
|
Run it with a consistency check::
|
|
1096
1101
|
|
|
1097
|
-
sage: EllipticCurve("37a").padic_sigma(5, 10, check=True)
|
|
1102
|
+
sage: EllipticCurve("37a").padic_sigma(5, 10, check=True) # needs sage.symbolic
|
|
1098
1103
|
O(5^11) + (1 + O(5^10))*t + O(5^9)*t^2 + (3 + 2*5^2 + 3*5^3 + 3*5^6 + 4*5^7 + O(5^8))*t^3 + (3 + 2*5 + 2*5^2 + 2*5^3 + 2*5^4 + 2*5^5 + 2*5^6 + O(5^7))*t^4 + (2 + 4*5^2 + 4*5^3 + 5^4 + 5^5 + O(5^6))*t^5 + (2 + 3*5 + 5^4 + O(5^5))*t^6 + (4 + 3*5 + 2*5^2 + O(5^4))*t^7 + (2 + 3*5 + 2*5^2 + O(5^3))*t^8 + (4*5 + O(5^2))*t^9 + (1 + O(5))*t^10 + O(t^11)
|
|
1099
1104
|
|
|
1100
1105
|
Boundary cases::
|
|
1101
1106
|
|
|
1102
|
-
sage: EllipticCurve([1, 1, 1, 1, 1]).padic_sigma(5, 1)
|
|
1107
|
+
sage: EllipticCurve([1, 1, 1, 1, 1]).padic_sigma(5, 1) # needs sage.symbolic
|
|
1103
1108
|
(1 + O(5))*t + O(t^2)
|
|
1104
|
-
sage: EllipticCurve([1, 1, 1, 1, 1]).padic_sigma(5, 2)
|
|
1109
|
+
sage: EllipticCurve([1, 1, 1, 1, 1]).padic_sigma(5, 2) # needs sage.symbolic
|
|
1105
1110
|
(1 + O(5^2))*t + (3 + O(5))*t^2 + O(t^3)
|
|
1106
1111
|
|
|
1107
1112
|
Supply your very own value of E2::
|
|
1108
1113
|
|
|
1114
|
+
sage: # needs sage.symbolic
|
|
1109
1115
|
sage: X = EllipticCurve("37a")
|
|
1110
1116
|
sage: my_E2 = X.padic_E2(5, 8)
|
|
1111
1117
|
sage: my_E2 = my_E2 + 5**5 # oops!!!
|
|
@@ -1116,6 +1122,7 @@ def padic_sigma(self, p, N=20, E2=None, check=False, check_hypotheses=True):
|
|
|
1116
1122
|
|
|
1117
1123
|
::
|
|
1118
1124
|
|
|
1125
|
+
sage: # needs sage.symbolic
|
|
1119
1126
|
sage: f = EllipticCurve([-1, 3]).padic_sigma(5, 10)
|
|
1120
1127
|
sage: g = EllipticCurve([-1*(2**4), 3*(2**6)]).padic_sigma(5, 10)
|
|
1121
1128
|
sage: t = f.parent().gen()
|
|
@@ -1128,7 +1135,7 @@ def padic_sigma(self, p, N=20, E2=None, check=False, check_hypotheses=True):
|
|
|
1128
1135
|
|
|
1129
1136
|
Test that it returns consistent results over a range of precision::
|
|
1130
1137
|
|
|
1131
|
-
sage: # long time
|
|
1138
|
+
sage: # long time, needs sage.symbolic
|
|
1132
1139
|
sage: max_N = 30 # get up to at least p^2
|
|
1133
1140
|
sage: E = EllipticCurve([1, 1, 1, 1, 1])
|
|
1134
1141
|
sage: p = 5
|
|
@@ -1295,13 +1302,13 @@ def padic_sigma_truncated(self, p, N=20, lamb=0, E2=None, check_hypotheses=True)
|
|
|
1295
1302
|
EXAMPLES::
|
|
1296
1303
|
|
|
1297
1304
|
sage: E = EllipticCurve([-1, 1/4])
|
|
1298
|
-
sage: E.padic_sigma_truncated(5, 10)
|
|
1305
|
+
sage: E.padic_sigma_truncated(5, 10) # needs sage.symbolic
|
|
1299
1306
|
O(5^11) + (1 + O(5^10))*t + O(5^9)*t^2 + (3 + 2*5^2 + 3*5^3 + 3*5^6 + 4*5^7 + O(5^8))*t^3 + O(5^7)*t^4 + (2 + 4*5^2 + 4*5^3 + 5^4 + 5^5 + O(5^6))*t^5 + O(5^5)*t^6 + (2 + 2*5 + 5^2 + 4*5^3 + O(5^4))*t^7 + O(5^3)*t^8 + (1 + 2*5 + O(5^2))*t^9 + O(5)*t^10 + O(t^11)
|
|
1300
1307
|
|
|
1301
1308
|
Note the precision of the `t^3` coefficient depends only on
|
|
1302
1309
|
`N`, not on lamb::
|
|
1303
1310
|
|
|
1304
|
-
sage: E.padic_sigma_truncated(5, 10, lamb=2)
|
|
1311
|
+
sage: E.padic_sigma_truncated(5, 10, lamb=2) # needs sage.symbolic
|
|
1305
1312
|
O(5^17) + (1 + O(5^14))*t + O(5^11)*t^2 + (3 + 2*5^2 + 3*5^3 + 3*5^6 + 4*5^7 + O(5^8))*t^3 + O(5^5)*t^4 + (2 + O(5^2))*t^5 + O(t^6)
|
|
1306
1313
|
|
|
1307
1314
|
Compare against plain padic_sigma() function over a dense range of
|
|
@@ -1309,9 +1316,10 @@ def padic_sigma_truncated(self, p, N=20, lamb=0, E2=None, check_hypotheses=True)
|
|
|
1309
1316
|
|
|
1310
1317
|
::
|
|
1311
1318
|
|
|
1312
|
-
sage:
|
|
1313
|
-
sage:
|
|
1314
|
-
sage:
|
|
1319
|
+
sage: # long time, needs sage.symbolic
|
|
1320
|
+
sage: E = EllipticCurve([1, 2, 3, 4, 7])
|
|
1321
|
+
sage: E2 = E.padic_E2(5, 50)
|
|
1322
|
+
sage: for N in range(2, 10):
|
|
1315
1323
|
....: for lamb in range(10):
|
|
1316
1324
|
....: correct = E.padic_sigma(5, N + 3*lamb, E2=E2)
|
|
1317
1325
|
....: compare = E.padic_sigma_truncated(5, N=N, lamb=lamb, E2=E2)
|
|
@@ -1462,17 +1470,18 @@ def padic_E2(self, p, prec=20, check=False, check_hypotheses=True, algorithm='au
|
|
|
1462
1470
|
EXAMPLES: Here is the example discussed in the paper "Computation
|
|
1463
1471
|
of p-adic Heights and Log Convergence" (Mazur, Stein, Tate) [MST2006]_::
|
|
1464
1472
|
|
|
1465
|
-
sage: EllipticCurve([-1, 1/4]).padic_E2(5)
|
|
1473
|
+
sage: EllipticCurve([-1, 1/4]).padic_E2(5) # needs sage.symbolic
|
|
1466
1474
|
2 + 4*5 + 2*5^3 + 5^4 + 3*5^5 + 2*5^6 + 5^8 + 3*5^9 + 4*5^10 + 2*5^11 + 2*5^12 + 2*5^14 + 3*5^15 + 3*5^16 + 3*5^17 + 4*5^18 + 2*5^19 + O(5^20)
|
|
1467
1475
|
|
|
1468
1476
|
Let's try to higher precision (this is the same answer the MAGMA
|
|
1469
1477
|
implementation gives)::
|
|
1470
1478
|
|
|
1471
|
-
sage: EllipticCurve([-1, 1/4]).padic_E2(5, 100)
|
|
1479
|
+
sage: EllipticCurve([-1, 1/4]).padic_E2(5, 100) # needs sage.symbolic
|
|
1472
1480
|
2 + 4*5 + 2*5^3 + 5^4 + 3*5^5 + 2*5^6 + 5^8 + 3*5^9 + 4*5^10 + 2*5^11 + 2*5^12 + 2*5^14 + 3*5^15 + 3*5^16 + 3*5^17 + 4*5^18 + 2*5^19 + 4*5^20 + 5^21 + 4*5^22 + 2*5^23 + 3*5^24 + 3*5^26 + 2*5^27 + 3*5^28 + 2*5^30 + 5^31 + 4*5^33 + 3*5^34 + 4*5^35 + 5^36 + 4*5^37 + 4*5^38 + 3*5^39 + 4*5^41 + 2*5^42 + 3*5^43 + 2*5^44 + 2*5^48 + 3*5^49 + 4*5^50 + 2*5^51 + 5^52 + 4*5^53 + 4*5^54 + 3*5^55 + 2*5^56 + 3*5^57 + 4*5^58 + 4*5^59 + 5^60 + 3*5^61 + 5^62 + 4*5^63 + 5^65 + 3*5^66 + 2*5^67 + 5^69 + 2*5^70 + 3*5^71 + 3*5^72 + 5^74 + 5^75 + 5^76 + 3*5^77 + 4*5^78 + 4*5^79 + 2*5^80 + 3*5^81 + 5^82 + 5^83 + 4*5^84 + 3*5^85 + 2*5^86 + 3*5^87 + 5^88 + 2*5^89 + 4*5^90 + 4*5^92 + 3*5^93 + 4*5^94 + 3*5^95 + 2*5^96 + 4*5^97 + 4*5^98 + 2*5^99 + O(5^100)
|
|
1473
1481
|
|
|
1474
1482
|
Check it works at low precision too::
|
|
1475
1483
|
|
|
1484
|
+
sage: # needs sage.symbolic
|
|
1476
1485
|
sage: EllipticCurve([-1, 1/4]).padic_E2(5, 1)
|
|
1477
1486
|
2 + O(5)
|
|
1478
1487
|
sage: EllipticCurve([-1, 1/4]).padic_E2(5, 2)
|
|
@@ -1487,7 +1496,7 @@ def padic_E2(self, p, prec=20, check=False, check_hypotheses=True, algorithm='au
|
|
|
1487
1496
|
|
|
1488
1497
|
::
|
|
1489
1498
|
|
|
1490
|
-
sage: EllipticCurve([1, 1, 1, 1, 1]).padic_E2(5, 1)
|
|
1499
|
+
sage: EllipticCurve([1, 1, 1, 1, 1]).padic_E2(5, 1) # needs sage.symbolic
|
|
1491
1500
|
O(5)
|
|
1492
1501
|
|
|
1493
1502
|
Check it works for different models of the same curve (37a), even
|
|
@@ -1498,7 +1507,7 @@ def padic_E2(self, p, prec=20, check=False, check_hypotheses=True, algorithm='au
|
|
|
1498
1507
|
sage: X1 = EllipticCurve([-1, 1/4])
|
|
1499
1508
|
sage: X1.j_invariant(), X1.discriminant()
|
|
1500
1509
|
(110592/37, 37)
|
|
1501
|
-
sage: X1.padic_E2(5, 10)
|
|
1510
|
+
sage: X1.padic_E2(5, 10) # needs sage.symbolic
|
|
1502
1511
|
2 + 4*5 + 2*5^3 + 5^4 + 3*5^5 + 2*5^6 + 5^8 + 3*5^9 + O(5^10)
|
|
1503
1512
|
|
|
1504
1513
|
::
|
|
@@ -1506,7 +1515,7 @@ def padic_E2(self, p, prec=20, check=False, check_hypotheses=True, algorithm='au
|
|
|
1506
1515
|
sage: X2 = EllipticCurve([0, 0, 1, -1, 0])
|
|
1507
1516
|
sage: X2.j_invariant(), X2.discriminant()
|
|
1508
1517
|
(110592/37, 37)
|
|
1509
|
-
sage: X2.padic_E2(5, 10)
|
|
1518
|
+
sage: X2.padic_E2(5, 10) # needs sage.symbolic
|
|
1510
1519
|
2 + 4*5 + 2*5^3 + 5^4 + 3*5^5 + 2*5^6 + 5^8 + 3*5^9 + O(5^10)
|
|
1511
1520
|
|
|
1512
1521
|
::
|
|
@@ -1514,7 +1523,7 @@ def padic_E2(self, p, prec=20, check=False, check_hypotheses=True, algorithm='au
|
|
|
1514
1523
|
sage: X3 = EllipticCurve([-1*(2**4), 1/4*(2**6)])
|
|
1515
1524
|
sage: X3.j_invariant(), X3.discriminant() / 2**12
|
|
1516
1525
|
(110592/37, 37)
|
|
1517
|
-
sage: 2**(-2) * X3.padic_E2(5, 10)
|
|
1526
|
+
sage: 2**(-2) * X3.padic_E2(5, 10) # needs sage.symbolic
|
|
1518
1527
|
2 + 4*5 + 2*5^3 + 5^4 + 3*5^5 + 2*5^6 + 5^8 + 3*5^9 + O(5^10)
|
|
1519
1528
|
|
|
1520
1529
|
::
|
|
@@ -1522,7 +1531,7 @@ def padic_E2(self, p, prec=20, check=False, check_hypotheses=True, algorithm='au
|
|
|
1522
1531
|
sage: X4 = EllipticCurve([-1*(7**4), 1/4*(7**6)])
|
|
1523
1532
|
sage: X4.j_invariant(), X4.discriminant() / 7**12
|
|
1524
1533
|
(110592/37, 37)
|
|
1525
|
-
sage: 7**(-2) * X4.padic_E2(5, 10)
|
|
1534
|
+
sage: 7**(-2) * X4.padic_E2(5, 10) # needs sage.symbolic
|
|
1526
1535
|
2 + 4*5 + 2*5^3 + 5^4 + 3*5^5 + 2*5^6 + 5^8 + 3*5^9 + O(5^10)
|
|
1527
1536
|
|
|
1528
1537
|
::
|
|
@@ -1530,7 +1539,7 @@ def padic_E2(self, p, prec=20, check=False, check_hypotheses=True, algorithm='au
|
|
|
1530
1539
|
sage: X5 = EllipticCurve([-1*(5**4), 1/4*(5**6)])
|
|
1531
1540
|
sage: X5.j_invariant(), X5.discriminant() / 5**12
|
|
1532
1541
|
(110592/37, 37)
|
|
1533
|
-
sage: 5**(-2) * X5.padic_E2(5, 10)
|
|
1542
|
+
sage: 5**(-2) * X5.padic_E2(5, 10) # needs sage.symbolic
|
|
1534
1543
|
2 + 4*5 + 2*5^3 + 5^4 + 3*5^5 + 2*5^6 + 5^8 + 3*5^9 + O(5^10)
|
|
1535
1544
|
|
|
1536
1545
|
::
|
|
@@ -1538,11 +1547,12 @@ def padic_E2(self, p, prec=20, check=False, check_hypotheses=True, algorithm='au
|
|
|
1538
1547
|
sage: X6 = EllipticCurve([-1/(5**4), 1/4/(5**6)])
|
|
1539
1548
|
sage: X6.j_invariant(), X6.discriminant() * 5**12
|
|
1540
1549
|
(110592/37, 37)
|
|
1541
|
-
sage: 5**2 * X6.padic_E2(5, 10)
|
|
1550
|
+
sage: 5**2 * X6.padic_E2(5, 10) # needs sage.symbolic
|
|
1542
1551
|
2 + 4*5 + 2*5^3 + 5^4 + 3*5^5 + 2*5^6 + 5^8 + 3*5^9 + O(5^10)
|
|
1543
1552
|
|
|
1544
1553
|
Test check=True vs check=False::
|
|
1545
1554
|
|
|
1555
|
+
sage: # needs sage.symbolic
|
|
1546
1556
|
sage: EllipticCurve([-1, 1/4]).padic_E2(5, 1, check=False)
|
|
1547
1557
|
2 + O(5)
|
|
1548
1558
|
sage: EllipticCurve([-1, 1/4]).padic_E2(5, 1, check=True)
|
|
@@ -1554,7 +1564,7 @@ def padic_E2(self, p, prec=20, check=False, check_hypotheses=True, algorithm='au
|
|
|
1554
1564
|
|
|
1555
1565
|
Here's one using the `p^{1/2}` algorithm::
|
|
1556
1566
|
|
|
1557
|
-
sage: EllipticCurve([-1, 1/4]).padic_E2(3001, 3, algorithm='sqrtp')
|
|
1567
|
+
sage: EllipticCurve([-1, 1/4]).padic_E2(3001, 3, algorithm='sqrtp') # needs sage.symbolic
|
|
1558
1568
|
1907 + 2819*3001 + 1124*3001^2 + O(3001^3)
|
|
1559
1569
|
"""
|
|
1560
1570
|
if self.conductor() % p == 0:
|
|
@@ -1624,7 +1634,7 @@ def matrix_of_frobenius(self, p, prec=20, check=False, check_hypotheses=True, al
|
|
|
1624
1634
|
|
|
1625
1635
|
EXAMPLES::
|
|
1626
1636
|
|
|
1627
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
1637
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
1628
1638
|
sage: E = EllipticCurve('37a1')
|
|
1629
1639
|
sage: E.matrix_of_frobenius(7)
|
|
1630
1640
|
[ 2*7 + 4*7^2 + 5*7^4 + 6*7^5 + 6*7^6 + 7^8 + 4*7^9 + 3*7^10 + 2*7^11 + 5*7^12 + 4*7^14 + 7^16 + 2*7^17 + 3*7^18 + 4*7^19 + 3*7^20 + O(7^21) 2 + 3*7 + 6*7^2 + 7^3 + 3*7^4 + 5*7^5 + 3*7^7 + 7^8 + 3*7^9 + 6*7^13 + 7^14 + 7^16 + 5*7^17 + 4*7^18 + 7^19 + O(7^20)]
|
|
@@ -1694,7 +1704,7 @@ def matrix_of_frobenius(self, p, prec=20, check=False, check_hypotheses=True, al
|
|
|
1694
1704
|
# Need to increase precision a little to compensate for precision
|
|
1695
1705
|
# losses during the computation. (See monsky_washnitzer.py
|
|
1696
1706
|
# for more details.)
|
|
1697
|
-
adjusted_prec =
|
|
1707
|
+
adjusted_prec = mw_adjusted_prec(p, prec)
|
|
1698
1708
|
|
|
1699
1709
|
if check:
|
|
1700
1710
|
trace = None
|
|
@@ -1705,14 +1715,13 @@ def matrix_of_frobenius(self, p, prec=20, check=False, check_hypotheses=True, al
|
|
|
1705
1715
|
|
|
1706
1716
|
R, x = PolynomialRing(base_ring, 'x').objgen()
|
|
1707
1717
|
Q = x**3 + base_ring(X.a4()) * x + base_ring(X.a6())
|
|
1708
|
-
frob_p =
|
|
1709
|
-
Q, p, adjusted_prec, trace)
|
|
1718
|
+
frob_p = mw_matrix_of_frobenius(Q, p, adjusted_prec, trace)
|
|
1710
1719
|
|
|
1711
1720
|
else: # algorithm == "sqrtp"
|
|
1712
1721
|
p_to_prec = p**prec
|
|
1713
1722
|
R = PolynomialRing(Integers(), "x")
|
|
1714
1723
|
Q = R([X.a6() % p_to_prec, X.a4() % p_to_prec, 0, 1])
|
|
1715
|
-
frob_p =
|
|
1724
|
+
frob_p = hypellfrob(p, prec, Q)
|
|
1716
1725
|
|
|
1717
1726
|
# let's force a trace-check since this algorithm is fairly new
|
|
1718
1727
|
# and we don't want to get caught with our pants down...
|