passagemath-schemes 10.5.44__cp313-cp313-musllinux_1_2_aarch64.whl → 10.6.42__cp313-cp313-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.
- passagemath_schemes/__init__.py +3 -0
- {passagemath_schemes-10.5.44.dist-info → passagemath_schemes-10.6.42.dist-info}/METADATA +41 -41
- {passagemath_schemes-10.5.44.dist-info → passagemath_schemes-10.6.42.dist-info}/METADATA.bak +42 -42
- {passagemath_schemes-10.5.44.dist-info → passagemath_schemes-10.6.42.dist-info}/RECORD +158 -139
- passagemath_schemes-10.6.42.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 +7 -7
- sage/dynamics/arithmetic_dynamics/projective_ds_helper.cpython-313-aarch64-linux-musl.so +0 -0
- sage/dynamics/arithmetic_dynamics/wehlerK3.py +18 -18
- sage/lfunctions/zero_sums.cpython-313-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-313-aarch64-linux-musl.so +0 -0
- sage/modular/arithgroup/arithgroup_perm.py +16 -16
- sage/modular/arithgroup/congroup.cpython-313-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-313-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-313-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-313-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/ambient.py +13 -20
- sage/modular/modsym/boundary.py +2 -2
- sage/modular/modsym/manin_symbol.cpython-313-aarch64-linux-musl.so +0 -0
- sage/modular/modsym/manin_symbol_list.py +3 -7
- sage/modular/modsym/relation_matrix_pyx.cpython-313-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-313-aarch64-linux-musl.so +0 -0
- sage/schemes/elliptic_curves/padic_lseries.py +25 -13
- sage/schemes/elliptic_curves/padics.py +71 -63
- sage/schemes/elliptic_curves/period_lattice.py +78 -27
- sage/schemes/elliptic_curves/period_lattice_region.cpython-313-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.44.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-313-aarch64-linux-musl.so +0 -0
- sage/modular/modsym/p1list.pxd +0 -29
- sage/modular/modsym/p1list.pyx +0 -1372
- {passagemath_schemes-10.5.44.dist-info → passagemath_schemes-10.6.42.dist-info}/WHEEL +0 -0
|
@@ -37,11 +37,11 @@ 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
45
|
|
|
46
46
|
from . import padic_lseries as plseries
|
|
47
47
|
|
|
@@ -169,7 +169,7 @@ def padic_lseries(self, p, normalize=None, implementation='eclib',
|
|
|
169
169
|
|
|
170
170
|
Next consider the curve 37b::
|
|
171
171
|
|
|
172
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
172
|
+
sage: # needs database_cremona_mini_ellcurve sage.graphs
|
|
173
173
|
sage: e = EllipticCurve('37b')
|
|
174
174
|
sage: L = e.padic_lseries(3)
|
|
175
175
|
sage: P = L.series(5)
|
|
@@ -184,23 +184,26 @@ def padic_lseries(self, p, normalize=None, implementation='eclib',
|
|
|
184
184
|
|
|
185
185
|
We can use Sage modular symbols instead to compute the `L`-series::
|
|
186
186
|
|
|
187
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
187
|
+
sage: # needs database_cremona_mini_ellcurve sage.graphs
|
|
188
188
|
sage: e = EllipticCurve('11a')
|
|
189
189
|
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
|
|
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
|
|
192
|
+
+ (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
|
|
193
|
+
+ (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
|
|
194
|
+
+ (2 + 2*3 + 2*3^2 + O(3^3))*T^8 + (2 + O(3^2))*T^9 + O(T^10)
|
|
192
195
|
|
|
193
196
|
Also the numerical modular symbols can be used.
|
|
194
197
|
This may allow for much larger conductor in some instances::
|
|
195
198
|
|
|
196
199
|
sage: E = EllipticCurve([101,103])
|
|
197
200
|
sage: L = E.padic_lseries(5, implementation='num')
|
|
198
|
-
sage: L.series(2)
|
|
201
|
+
sage: L.series(2) # needs sage.graphs
|
|
199
202
|
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
203
|
|
|
201
204
|
Finally, we can use the overconvergent method of Pollack-Stevens.::
|
|
202
205
|
|
|
203
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
206
|
+
sage: # needs database_cremona_mini_ellcurve sage.graphs
|
|
204
207
|
sage: e = EllipticCurve('11a')
|
|
205
208
|
sage: L = e.padic_lseries(3, implementation='pollackstevens', precision=6)
|
|
206
209
|
sage: L.series(5)
|
|
@@ -278,48 +281,48 @@ def padic_regulator(self, p, prec=20, height=None, check_hypotheses=True):
|
|
|
278
281
|
|
|
279
282
|
EXAMPLES::
|
|
280
283
|
|
|
281
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
284
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
282
285
|
sage: E = EllipticCurve("37a")
|
|
283
286
|
sage: E.padic_regulator(5, 10)
|
|
284
287
|
5 + 5^2 + 5^3 + 3*5^6 + 4*5^7 + 5^9 + O(5^10)
|
|
285
288
|
|
|
286
289
|
An anomalous case::
|
|
287
290
|
|
|
288
|
-
sage: E.padic_regulator(53, 10) # needs database_cremona_mini_ellcurve
|
|
291
|
+
sage: E.padic_regulator(53, 10) # needs database_cremona_mini_ellcurve sage.symbolic
|
|
289
292
|
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
293
|
|
|
291
294
|
An anomalous case where the precision drops some::
|
|
292
295
|
|
|
293
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
296
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
294
297
|
sage: E = EllipticCurve("5077a")
|
|
295
298
|
sage: E.padic_regulator(5, 10)
|
|
296
299
|
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
300
|
|
|
298
301
|
Check that answers agree over a range of precisions::
|
|
299
302
|
|
|
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):
|
|
303
|
+
sage: # long time, needs database_cremona_mini_ellcurve sage.symbolic
|
|
304
|
+
sage: max_prec = 30 # make sure we get past p^2
|
|
305
|
+
sage: full = E.padic_regulator(5, max_prec)
|
|
306
|
+
sage: for prec in range(1, max_prec):
|
|
304
307
|
....: assert E.padic_regulator(5, prec) == full
|
|
305
308
|
|
|
306
309
|
A case where the generator belongs to the formal group already
|
|
307
310
|
(:issue:`3632`)::
|
|
308
311
|
|
|
309
312
|
sage: E = EllipticCurve([37,0])
|
|
310
|
-
sage: E.padic_regulator(5,10)
|
|
313
|
+
sage: E.padic_regulator(5,10) # needs sage.symbolic
|
|
311
314
|
2*5^2 + 2*5^3 + 5^4 + 5^5 + 4*5^6 + 3*5^8 + 4*5^9 + O(5^10)
|
|
312
315
|
|
|
313
316
|
The result is not dependent on the model for the curve::
|
|
314
317
|
|
|
315
318
|
sage: E = EllipticCurve([0,0,0,0,2^12*17])
|
|
316
319
|
sage: Em = E.minimal_model()
|
|
317
|
-
sage: E.padic_regulator(7) == Em.padic_regulator(7)
|
|
320
|
+
sage: E.padic_regulator(7) == Em.padic_regulator(7) # needs sage.symbolic
|
|
318
321
|
True
|
|
319
322
|
|
|
320
323
|
Allow a python int as input::
|
|
321
324
|
|
|
322
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
325
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
323
326
|
sage: E = EllipticCurve('37a')
|
|
324
327
|
sage: E.padic_regulator(int(5))
|
|
325
328
|
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 +387,14 @@ def padic_height_pairing_matrix(self, p, prec=20, height=None, check_hypotheses=
|
|
|
384
387
|
|
|
385
388
|
EXAMPLES::
|
|
386
389
|
|
|
387
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
390
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
388
391
|
sage: E = EllipticCurve("37a")
|
|
389
392
|
sage: E.padic_height_pairing_matrix(5, 10)
|
|
390
393
|
[5 + 5^2 + 5^3 + 3*5^6 + 4*5^7 + 5^9 + O(5^10)]
|
|
391
394
|
|
|
392
395
|
A rank two example::
|
|
393
396
|
|
|
394
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
397
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
395
398
|
sage: e = EllipticCurve('389a')
|
|
396
399
|
sage: e._set_gens([e(-1, 1), e(1,0)]) # avoid platform dependent gens
|
|
397
400
|
sage: e.padic_height_pairing_matrix(5,10)
|
|
@@ -400,7 +403,7 @@ def padic_height_pairing_matrix(self, p, prec=20, height=None, check_hypotheses=
|
|
|
400
403
|
|
|
401
404
|
An anomalous rank 3 example::
|
|
402
405
|
|
|
403
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
406
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
404
407
|
sage: e = EllipticCurve("5077a")
|
|
405
408
|
sage: e._set_gens([e(-1,3), e(2,0), e(4,6)])
|
|
406
409
|
sage: e.padic_height_pairing_matrix(5,4)
|
|
@@ -724,7 +727,7 @@ def padic_height(self, p, prec=20, sigma=None, check_hypotheses=True):
|
|
|
724
727
|
|
|
725
728
|
EXAMPLES::
|
|
726
729
|
|
|
727
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
730
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
728
731
|
sage: E = EllipticCurve("37a")
|
|
729
732
|
sage: P = E.gens()[0]
|
|
730
733
|
sage: h = E.padic_height(5, 10)
|
|
@@ -733,23 +736,23 @@ def padic_height(self, p, prec=20, sigma=None, check_hypotheses=True):
|
|
|
733
736
|
|
|
734
737
|
An anomalous case::
|
|
735
738
|
|
|
736
|
-
sage: h = E.padic_height(53, 10) # needs database_cremona_mini_ellcurve
|
|
737
|
-
sage: h(P) # needs database_cremona_mini_ellcurve
|
|
739
|
+
sage: h = E.padic_height(53, 10) # needs database_cremona_mini_ellcurve sage.symbolic
|
|
740
|
+
sage: h(P) # needs database_cremona_mini_ellcurve sage.symbolic
|
|
738
741
|
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
742
|
|
|
740
743
|
Boundary case::
|
|
741
744
|
|
|
742
|
-
sage: E.padic_height(5, 3)(P) # needs database_cremona_mini_ellcurve
|
|
745
|
+
sage: E.padic_height(5, 3)(P) # needs database_cremona_mini_ellcurve sage.symbolic
|
|
743
746
|
5 + 5^2 + O(5^3)
|
|
744
747
|
|
|
745
748
|
A case that works the division polynomial code a little harder::
|
|
746
749
|
|
|
747
|
-
sage: E.padic_height(5, 10)(5*P) # needs database_cremona_mini_ellcurve
|
|
750
|
+
sage: E.padic_height(5, 10)(5*P) # needs database_cremona_mini_ellcurve sage.symbolic
|
|
748
751
|
5^3 + 5^4 + 5^5 + 3*5^8 + 4*5^9 + O(5^10)
|
|
749
752
|
|
|
750
753
|
Check that answers agree over a range of precisions::
|
|
751
754
|
|
|
752
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
755
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
753
756
|
sage: max_prec = 30 # make sure we get past p^2 # long time
|
|
754
757
|
sage: full = E.padic_height(5, max_prec)(P) # long time
|
|
755
758
|
sage: for prec in range(1, max_prec): # long time
|
|
@@ -757,7 +760,7 @@ def padic_height(self, p, prec=20, sigma=None, check_hypotheses=True):
|
|
|
757
760
|
|
|
758
761
|
A supersingular prime for a curve::
|
|
759
762
|
|
|
760
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
763
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
761
764
|
sage: E = EllipticCurve('37a')
|
|
762
765
|
sage: E.is_supersingular(3)
|
|
763
766
|
True
|
|
@@ -771,7 +774,7 @@ def padic_height(self, p, prec=20, sigma=None, check_hypotheses=True):
|
|
|
771
774
|
|
|
772
775
|
A torsion point in both the good and supersingular cases::
|
|
773
776
|
|
|
774
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
777
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
775
778
|
sage: E = EllipticCurve('11a')
|
|
776
779
|
sage: P = E.torsion_subgroup().gen(0).element(); P
|
|
777
780
|
(5 : 5 : 1)
|
|
@@ -784,6 +787,7 @@ def padic_height(self, p, prec=20, sigma=None, check_hypotheses=True):
|
|
|
784
787
|
|
|
785
788
|
The result is not dependent on the model for the curve::
|
|
786
789
|
|
|
790
|
+
sage: # needs sage.symbolic
|
|
787
791
|
sage: E = EllipticCurve([0,0,0,0,2^12*17])
|
|
788
792
|
sage: Em = E.minimal_model()
|
|
789
793
|
sage: P = E.gens()[0]
|
|
@@ -797,7 +801,7 @@ def padic_height(self, p, prec=20, sigma=None, check_hypotheses=True):
|
|
|
797
801
|
|
|
798
802
|
Check that issue :issue:`20798` is solved::
|
|
799
803
|
|
|
800
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
804
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
801
805
|
sage: E = EllipticCurve("91b")
|
|
802
806
|
sage: h = E.padic_height(7,10)
|
|
803
807
|
sage: P = E.gen(0)
|
|
@@ -924,7 +928,7 @@ def padic_height_via_multiply(self, p, prec=20, E2=None, check_hypotheses=True):
|
|
|
924
928
|
|
|
925
929
|
EXAMPLES::
|
|
926
930
|
|
|
927
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
931
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
928
932
|
sage: E = EllipticCurve("37a")
|
|
929
933
|
sage: P = E.gens()[0]
|
|
930
934
|
sage: h = E.padic_height_via_multiply(5, 10)
|
|
@@ -933,13 +937,13 @@ def padic_height_via_multiply(self, p, prec=20, E2=None, check_hypotheses=True):
|
|
|
933
937
|
|
|
934
938
|
An anomalous case::
|
|
935
939
|
|
|
936
|
-
sage: h = E.padic_height_via_multiply(53, 10) # needs database_cremona_mini_ellcurve
|
|
937
|
-
sage: h(P) # needs database_cremona_mini_ellcurve
|
|
940
|
+
sage: h = E.padic_height_via_multiply(53, 10) # needs database_cremona_mini_ellcurve sage.symbolic
|
|
941
|
+
sage: h(P) # needs database_cremona_mini_ellcurve sage.symbolic
|
|
938
942
|
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
943
|
|
|
940
944
|
Supply the value of E2 manually::
|
|
941
945
|
|
|
942
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
946
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
943
947
|
sage: E2 = E.padic_E2(5, 8)
|
|
944
948
|
sage: E2
|
|
945
949
|
2 + 4*5 + 2*5^3 + 5^4 + 3*5^5 + 2*5^6 + O(5^8)
|
|
@@ -949,12 +953,12 @@ def padic_height_via_multiply(self, p, prec=20, E2=None, check_hypotheses=True):
|
|
|
949
953
|
|
|
950
954
|
Boundary case::
|
|
951
955
|
|
|
952
|
-
sage: E.padic_height_via_multiply(5, 3)(P) # needs database_cremona_mini_ellcurve
|
|
956
|
+
sage: E.padic_height_via_multiply(5, 3)(P) # needs database_cremona_mini_ellcurve sage.symbolic
|
|
953
957
|
5 + 5^2 + O(5^3)
|
|
954
958
|
|
|
955
959
|
Check that answers agree over a range of precisions::
|
|
956
960
|
|
|
957
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
961
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
958
962
|
sage: max_prec = 30 # make sure we get past p^2 # long time
|
|
959
963
|
sage: full = E.padic_height(5, max_prec)(P) # long time
|
|
960
964
|
sage: for prec in range(2, max_prec): # long time
|
|
@@ -1089,23 +1093,24 @@ def padic_sigma(self, p, N=20, E2=None, check=False, check_hypotheses=True):
|
|
|
1089
1093
|
|
|
1090
1094
|
EXAMPLES::
|
|
1091
1095
|
|
|
1092
|
-
sage: EllipticCurve([-1, 1/4]).padic_sigma(5, 10)
|
|
1096
|
+
sage: EllipticCurve([-1, 1/4]).padic_sigma(5, 10) # needs sage.symbolic
|
|
1093
1097
|
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
1098
|
|
|
1095
1099
|
Run it with a consistency check::
|
|
1096
1100
|
|
|
1097
|
-
sage: EllipticCurve("37a").padic_sigma(5, 10, check=True)
|
|
1101
|
+
sage: EllipticCurve("37a").padic_sigma(5, 10, check=True) # needs sage.symbolic
|
|
1098
1102
|
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
1103
|
|
|
1100
1104
|
Boundary cases::
|
|
1101
1105
|
|
|
1102
|
-
sage: EllipticCurve([1, 1, 1, 1, 1]).padic_sigma(5, 1)
|
|
1106
|
+
sage: EllipticCurve([1, 1, 1, 1, 1]).padic_sigma(5, 1) # needs sage.symbolic
|
|
1103
1107
|
(1 + O(5))*t + O(t^2)
|
|
1104
|
-
sage: EllipticCurve([1, 1, 1, 1, 1]).padic_sigma(5, 2)
|
|
1108
|
+
sage: EllipticCurve([1, 1, 1, 1, 1]).padic_sigma(5, 2) # needs sage.symbolic
|
|
1105
1109
|
(1 + O(5^2))*t + (3 + O(5))*t^2 + O(t^3)
|
|
1106
1110
|
|
|
1107
1111
|
Supply your very own value of E2::
|
|
1108
1112
|
|
|
1113
|
+
sage: # needs sage.symbolic
|
|
1109
1114
|
sage: X = EllipticCurve("37a")
|
|
1110
1115
|
sage: my_E2 = X.padic_E2(5, 8)
|
|
1111
1116
|
sage: my_E2 = my_E2 + 5**5 # oops!!!
|
|
@@ -1116,6 +1121,7 @@ def padic_sigma(self, p, N=20, E2=None, check=False, check_hypotheses=True):
|
|
|
1116
1121
|
|
|
1117
1122
|
::
|
|
1118
1123
|
|
|
1124
|
+
sage: # needs sage.symbolic
|
|
1119
1125
|
sage: f = EllipticCurve([-1, 3]).padic_sigma(5, 10)
|
|
1120
1126
|
sage: g = EllipticCurve([-1*(2**4), 3*(2**6)]).padic_sigma(5, 10)
|
|
1121
1127
|
sage: t = f.parent().gen()
|
|
@@ -1128,7 +1134,7 @@ def padic_sigma(self, p, N=20, E2=None, check=False, check_hypotheses=True):
|
|
|
1128
1134
|
|
|
1129
1135
|
Test that it returns consistent results over a range of precision::
|
|
1130
1136
|
|
|
1131
|
-
sage: # long time
|
|
1137
|
+
sage: # long time, needs sage.symbolic
|
|
1132
1138
|
sage: max_N = 30 # get up to at least p^2
|
|
1133
1139
|
sage: E = EllipticCurve([1, 1, 1, 1, 1])
|
|
1134
1140
|
sage: p = 5
|
|
@@ -1295,13 +1301,13 @@ def padic_sigma_truncated(self, p, N=20, lamb=0, E2=None, check_hypotheses=True)
|
|
|
1295
1301
|
EXAMPLES::
|
|
1296
1302
|
|
|
1297
1303
|
sage: E = EllipticCurve([-1, 1/4])
|
|
1298
|
-
sage: E.padic_sigma_truncated(5, 10)
|
|
1304
|
+
sage: E.padic_sigma_truncated(5, 10) # needs sage.symbolic
|
|
1299
1305
|
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
1306
|
|
|
1301
1307
|
Note the precision of the `t^3` coefficient depends only on
|
|
1302
1308
|
`N`, not on lamb::
|
|
1303
1309
|
|
|
1304
|
-
sage: E.padic_sigma_truncated(5, 10, lamb=2)
|
|
1310
|
+
sage: E.padic_sigma_truncated(5, 10, lamb=2) # needs sage.symbolic
|
|
1305
1311
|
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
1312
|
|
|
1307
1313
|
Compare against plain padic_sigma() function over a dense range of
|
|
@@ -1309,9 +1315,10 @@ def padic_sigma_truncated(self, p, N=20, lamb=0, E2=None, check_hypotheses=True)
|
|
|
1309
1315
|
|
|
1310
1316
|
::
|
|
1311
1317
|
|
|
1312
|
-
sage:
|
|
1313
|
-
sage:
|
|
1314
|
-
sage:
|
|
1318
|
+
sage: # long time, needs sage.symbolic
|
|
1319
|
+
sage: E = EllipticCurve([1, 2, 3, 4, 7])
|
|
1320
|
+
sage: E2 = E.padic_E2(5, 50)
|
|
1321
|
+
sage: for N in range(2, 10):
|
|
1315
1322
|
....: for lamb in range(10):
|
|
1316
1323
|
....: correct = E.padic_sigma(5, N + 3*lamb, E2=E2)
|
|
1317
1324
|
....: compare = E.padic_sigma_truncated(5, N=N, lamb=lamb, E2=E2)
|
|
@@ -1462,17 +1469,18 @@ def padic_E2(self, p, prec=20, check=False, check_hypotheses=True, algorithm='au
|
|
|
1462
1469
|
EXAMPLES: Here is the example discussed in the paper "Computation
|
|
1463
1470
|
of p-adic Heights and Log Convergence" (Mazur, Stein, Tate) [MST2006]_::
|
|
1464
1471
|
|
|
1465
|
-
sage: EllipticCurve([-1, 1/4]).padic_E2(5)
|
|
1472
|
+
sage: EllipticCurve([-1, 1/4]).padic_E2(5) # needs sage.symbolic
|
|
1466
1473
|
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
1474
|
|
|
1468
1475
|
Let's try to higher precision (this is the same answer the MAGMA
|
|
1469
1476
|
implementation gives)::
|
|
1470
1477
|
|
|
1471
|
-
sage: EllipticCurve([-1, 1/4]).padic_E2(5, 100)
|
|
1478
|
+
sage: EllipticCurve([-1, 1/4]).padic_E2(5, 100) # needs sage.symbolic
|
|
1472
1479
|
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
1480
|
|
|
1474
1481
|
Check it works at low precision too::
|
|
1475
1482
|
|
|
1483
|
+
sage: # needs sage.symbolic
|
|
1476
1484
|
sage: EllipticCurve([-1, 1/4]).padic_E2(5, 1)
|
|
1477
1485
|
2 + O(5)
|
|
1478
1486
|
sage: EllipticCurve([-1, 1/4]).padic_E2(5, 2)
|
|
@@ -1487,7 +1495,7 @@ def padic_E2(self, p, prec=20, check=False, check_hypotheses=True, algorithm='au
|
|
|
1487
1495
|
|
|
1488
1496
|
::
|
|
1489
1497
|
|
|
1490
|
-
sage: EllipticCurve([1, 1, 1, 1, 1]).padic_E2(5, 1)
|
|
1498
|
+
sage: EllipticCurve([1, 1, 1, 1, 1]).padic_E2(5, 1) # needs sage.symbolic
|
|
1491
1499
|
O(5)
|
|
1492
1500
|
|
|
1493
1501
|
Check it works for different models of the same curve (37a), even
|
|
@@ -1498,7 +1506,7 @@ def padic_E2(self, p, prec=20, check=False, check_hypotheses=True, algorithm='au
|
|
|
1498
1506
|
sage: X1 = EllipticCurve([-1, 1/4])
|
|
1499
1507
|
sage: X1.j_invariant(), X1.discriminant()
|
|
1500
1508
|
(110592/37, 37)
|
|
1501
|
-
sage: X1.padic_E2(5, 10)
|
|
1509
|
+
sage: X1.padic_E2(5, 10) # needs sage.symbolic
|
|
1502
1510
|
2 + 4*5 + 2*5^3 + 5^4 + 3*5^5 + 2*5^6 + 5^8 + 3*5^9 + O(5^10)
|
|
1503
1511
|
|
|
1504
1512
|
::
|
|
@@ -1506,7 +1514,7 @@ def padic_E2(self, p, prec=20, check=False, check_hypotheses=True, algorithm='au
|
|
|
1506
1514
|
sage: X2 = EllipticCurve([0, 0, 1, -1, 0])
|
|
1507
1515
|
sage: X2.j_invariant(), X2.discriminant()
|
|
1508
1516
|
(110592/37, 37)
|
|
1509
|
-
sage: X2.padic_E2(5, 10)
|
|
1517
|
+
sage: X2.padic_E2(5, 10) # needs sage.symbolic
|
|
1510
1518
|
2 + 4*5 + 2*5^3 + 5^4 + 3*5^5 + 2*5^6 + 5^8 + 3*5^9 + O(5^10)
|
|
1511
1519
|
|
|
1512
1520
|
::
|
|
@@ -1514,7 +1522,7 @@ def padic_E2(self, p, prec=20, check=False, check_hypotheses=True, algorithm='au
|
|
|
1514
1522
|
sage: X3 = EllipticCurve([-1*(2**4), 1/4*(2**6)])
|
|
1515
1523
|
sage: X3.j_invariant(), X3.discriminant() / 2**12
|
|
1516
1524
|
(110592/37, 37)
|
|
1517
|
-
sage: 2**(-2) * X3.padic_E2(5, 10)
|
|
1525
|
+
sage: 2**(-2) * X3.padic_E2(5, 10) # needs sage.symbolic
|
|
1518
1526
|
2 + 4*5 + 2*5^3 + 5^4 + 3*5^5 + 2*5^6 + 5^8 + 3*5^9 + O(5^10)
|
|
1519
1527
|
|
|
1520
1528
|
::
|
|
@@ -1522,7 +1530,7 @@ def padic_E2(self, p, prec=20, check=False, check_hypotheses=True, algorithm='au
|
|
|
1522
1530
|
sage: X4 = EllipticCurve([-1*(7**4), 1/4*(7**6)])
|
|
1523
1531
|
sage: X4.j_invariant(), X4.discriminant() / 7**12
|
|
1524
1532
|
(110592/37, 37)
|
|
1525
|
-
sage: 7**(-2) * X4.padic_E2(5, 10)
|
|
1533
|
+
sage: 7**(-2) * X4.padic_E2(5, 10) # needs sage.symbolic
|
|
1526
1534
|
2 + 4*5 + 2*5^3 + 5^4 + 3*5^5 + 2*5^6 + 5^8 + 3*5^9 + O(5^10)
|
|
1527
1535
|
|
|
1528
1536
|
::
|
|
@@ -1530,7 +1538,7 @@ def padic_E2(self, p, prec=20, check=False, check_hypotheses=True, algorithm='au
|
|
|
1530
1538
|
sage: X5 = EllipticCurve([-1*(5**4), 1/4*(5**6)])
|
|
1531
1539
|
sage: X5.j_invariant(), X5.discriminant() / 5**12
|
|
1532
1540
|
(110592/37, 37)
|
|
1533
|
-
sage: 5**(-2) * X5.padic_E2(5, 10)
|
|
1541
|
+
sage: 5**(-2) * X5.padic_E2(5, 10) # needs sage.symbolic
|
|
1534
1542
|
2 + 4*5 + 2*5^3 + 5^4 + 3*5^5 + 2*5^6 + 5^8 + 3*5^9 + O(5^10)
|
|
1535
1543
|
|
|
1536
1544
|
::
|
|
@@ -1538,11 +1546,12 @@ def padic_E2(self, p, prec=20, check=False, check_hypotheses=True, algorithm='au
|
|
|
1538
1546
|
sage: X6 = EllipticCurve([-1/(5**4), 1/4/(5**6)])
|
|
1539
1547
|
sage: X6.j_invariant(), X6.discriminant() * 5**12
|
|
1540
1548
|
(110592/37, 37)
|
|
1541
|
-
sage: 5**2 * X6.padic_E2(5, 10)
|
|
1549
|
+
sage: 5**2 * X6.padic_E2(5, 10) # needs sage.symbolic
|
|
1542
1550
|
2 + 4*5 + 2*5^3 + 5^4 + 3*5^5 + 2*5^6 + 5^8 + 3*5^9 + O(5^10)
|
|
1543
1551
|
|
|
1544
1552
|
Test check=True vs check=False::
|
|
1545
1553
|
|
|
1554
|
+
sage: # needs sage.symbolic
|
|
1546
1555
|
sage: EllipticCurve([-1, 1/4]).padic_E2(5, 1, check=False)
|
|
1547
1556
|
2 + O(5)
|
|
1548
1557
|
sage: EllipticCurve([-1, 1/4]).padic_E2(5, 1, check=True)
|
|
@@ -1554,7 +1563,7 @@ def padic_E2(self, p, prec=20, check=False, check_hypotheses=True, algorithm='au
|
|
|
1554
1563
|
|
|
1555
1564
|
Here's one using the `p^{1/2}` algorithm::
|
|
1556
1565
|
|
|
1557
|
-
sage: EllipticCurve([-1, 1/4]).padic_E2(3001, 3, algorithm='sqrtp')
|
|
1566
|
+
sage: EllipticCurve([-1, 1/4]).padic_E2(3001, 3, algorithm='sqrtp') # needs sage.symbolic
|
|
1558
1567
|
1907 + 2819*3001 + 1124*3001^2 + O(3001^3)
|
|
1559
1568
|
"""
|
|
1560
1569
|
if self.conductor() % p == 0:
|
|
@@ -1624,7 +1633,7 @@ def matrix_of_frobenius(self, p, prec=20, check=False, check_hypotheses=True, al
|
|
|
1624
1633
|
|
|
1625
1634
|
EXAMPLES::
|
|
1626
1635
|
|
|
1627
|
-
sage: # needs database_cremona_mini_ellcurve
|
|
1636
|
+
sage: # needs database_cremona_mini_ellcurve sage.symbolic
|
|
1628
1637
|
sage: E = EllipticCurve('37a1')
|
|
1629
1638
|
sage: E.matrix_of_frobenius(7)
|
|
1630
1639
|
[ 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,25 +1703,24 @@ def matrix_of_frobenius(self, p, prec=20, check=False, check_hypotheses=True, al
|
|
|
1694
1703
|
# Need to increase precision a little to compensate for precision
|
|
1695
1704
|
# losses during the computation. (See monsky_washnitzer.py
|
|
1696
1705
|
# for more details.)
|
|
1697
|
-
|
|
1706
|
+
adj_prec = adjusted_prec(p, prec)
|
|
1698
1707
|
|
|
1699
1708
|
if check:
|
|
1700
1709
|
trace = None
|
|
1701
1710
|
else:
|
|
1702
1711
|
trace = self.ap(p)
|
|
1703
1712
|
|
|
1704
|
-
base_ring = Integers(p**
|
|
1713
|
+
base_ring = Integers(p**adj_prec)
|
|
1705
1714
|
|
|
1706
1715
|
R, x = PolynomialRing(base_ring, 'x').objgen()
|
|
1707
1716
|
Q = x**3 + base_ring(X.a4()) * x + base_ring(X.a6())
|
|
1708
|
-
frob_p =
|
|
1709
|
-
Q, p, adjusted_prec, trace)
|
|
1717
|
+
frob_p = matrix_of_frobenius(Q, p, adj_prec, trace)
|
|
1710
1718
|
|
|
1711
1719
|
else: # algorithm == "sqrtp"
|
|
1712
1720
|
p_to_prec = p**prec
|
|
1713
1721
|
R = PolynomialRing(Integers(), "x")
|
|
1714
1722
|
Q = R([X.a6() % p_to_prec, X.a4() % p_to_prec, 0, 1])
|
|
1715
|
-
frob_p =
|
|
1723
|
+
frob_p = hypellfrob(p, prec, Q)
|
|
1716
1724
|
|
|
1717
1725
|
# let's force a trace-check since this algorithm is fairly new
|
|
1718
1726
|
# and we don't want to get caught with our pants down...
|