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
|
@@ -231,11 +231,9 @@ class MFSeriesConstructor(SageObject, UniqueRepresentation):
|
|
|
231
231
|
# the current implementation of power series reversion is slow
|
|
232
232
|
# J_inv_ZZ = ZZ(1) / ((q*Phi.exp()).reverse())
|
|
233
233
|
|
|
234
|
-
temp_f = (q*Phi.exp()).polynomial()
|
|
235
|
-
new_f = temp_f.revert_series(temp_f.degree()+1)
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
return J_inv_ZZ
|
|
234
|
+
temp_f = (q * Phi.exp()).polynomial()
|
|
235
|
+
new_f = temp_f.revert_series(temp_f.degree() + 1)
|
|
236
|
+
return ZZ.one() / (new_f + O(q**(temp_f.degree() + 1)))
|
|
239
237
|
|
|
240
238
|
@cached_method
|
|
241
239
|
def f_rho_ZZ(self):
|
|
@@ -364,15 +362,15 @@ class MFSeriesConstructor(SageObject, UniqueRepresentation):
|
|
|
364
362
|
q^-1 - 1/8 - 59/1024*q + O(q^2)
|
|
365
363
|
"""
|
|
366
364
|
n = self.hecke_n()
|
|
367
|
-
# Note that G_inv is not a weakly holomorphic form (because of
|
|
365
|
+
# Note that G_inv is not a weakly holomorphic form (because of
|
|
366
|
+
# the behavior at -1)
|
|
368
367
|
if n == infinity:
|
|
369
368
|
q = self._series_ring.gen()
|
|
370
369
|
temp_expr = (self.J_inv_ZZ()/self.f_inf_ZZ()*q**2).power_series()
|
|
371
370
|
return 1/q*self.f_i_ZZ()*(temp_expr.log()/2).exp()
|
|
372
|
-
|
|
371
|
+
if (ZZ(2).divides(n)):
|
|
373
372
|
return self.f_i_ZZ()*(self.f_rho_ZZ()**(ZZ(n/ZZ(2))))/self.f_inf_ZZ()
|
|
374
|
-
|
|
375
|
-
raise ValueError("G_inv doesn't exist for n={}.".format(self.hecke_n()))
|
|
373
|
+
raise ValueError("G_inv doesn't exist for n={}.".format(self.hecke_n()))
|
|
376
374
|
|
|
377
375
|
@cached_method
|
|
378
376
|
def E4_ZZ(self):
|
|
@@ -398,10 +396,8 @@ class MFSeriesConstructor(SageObject, UniqueRepresentation):
|
|
|
398
396
|
sage: MFSeriesConstructor(group=infinity, prec=3).E4_ZZ()
|
|
399
397
|
1 + 1/4*q + 7/256*q^2 + O(q^3)
|
|
400
398
|
"""
|
|
401
|
-
|
|
402
399
|
q = self._series_ring.gen()
|
|
403
|
-
|
|
404
|
-
return E4_ZZ
|
|
400
|
+
return ((-q*self.J_inv_ZZ().derivative())**2 / (self.J_inv_ZZ()*(self.J_inv_ZZ()-1))).power_series()
|
|
405
401
|
|
|
406
402
|
@cached_method
|
|
407
403
|
def E6_ZZ(self):
|
|
@@ -427,10 +423,8 @@ class MFSeriesConstructor(SageObject, UniqueRepresentation):
|
|
|
427
423
|
sage: MFSeriesConstructor(group=infinity, prec=3).E6_ZZ()
|
|
428
424
|
1 - 1/8*q - 31/512*q^2 + O(q^3)
|
|
429
425
|
"""
|
|
430
|
-
|
|
431
426
|
q = self._series_ring.gen()
|
|
432
|
-
|
|
433
|
-
return E6_ZZ
|
|
427
|
+
return ((-q*self.J_inv_ZZ().derivative())**3 / (self.J_inv_ZZ()**2*(self.J_inv_ZZ()-1))).power_series()
|
|
434
428
|
|
|
435
429
|
@cached_method
|
|
436
430
|
def Delta_ZZ(self):
|
|
@@ -483,10 +477,8 @@ class MFSeriesConstructor(SageObject, UniqueRepresentation):
|
|
|
483
477
|
sage: MFSeriesConstructor(group=infinity, prec=3).E2_ZZ()
|
|
484
478
|
1 - 1/8*q - 1/512*q^2 + O(q^3)
|
|
485
479
|
"""
|
|
486
|
-
|
|
487
480
|
q = self._series_ring.gen()
|
|
488
|
-
|
|
489
|
-
return E2_ZZ
|
|
481
|
+
return (q * self.f_inf_ZZ().derivative()) / self.f_inf_ZZ()
|
|
490
482
|
|
|
491
483
|
@cached_method
|
|
492
484
|
def EisensteinSeries_ZZ(self, k):
|
|
@@ -220,9 +220,9 @@ class QuasiModularForms(FormsSpace_abstract, Module, UniqueRepresentation):
|
|
|
220
220
|
self._module = FreeModule(self.coeff_ring(), self.dimension())
|
|
221
221
|
|
|
222
222
|
@cached_method
|
|
223
|
-
def gens(self):
|
|
223
|
+
def gens(self) -> tuple:
|
|
224
224
|
r"""
|
|
225
|
-
Return a basis of ``self`` as a
|
|
225
|
+
Return a basis of ``self`` as a tuple of basis elements.
|
|
226
226
|
|
|
227
227
|
EXAMPLES::
|
|
228
228
|
|
|
@@ -230,16 +230,15 @@ class QuasiModularForms(FormsSpace_abstract, Module, UniqueRepresentation):
|
|
|
230
230
|
sage: MF = QuasiModularForms(n=5, k=6, ep=-1)
|
|
231
231
|
sage: MF.default_prec(2)
|
|
232
232
|
sage: MF.gens()
|
|
233
|
-
|
|
233
|
+
(1 - 37/(200*d)*q + O(q^2),
|
|
234
234
|
1 + 33/(200*d)*q + O(q^2),
|
|
235
|
-
1 - 27/(200*d)*q + O(q^2)
|
|
235
|
+
1 - 27/(200*d)*q + O(q^2))
|
|
236
236
|
|
|
237
237
|
sage: MF = QuasiModularForms(n=infinity, k=2, ep=-1)
|
|
238
238
|
sage: MF.default_prec(2)
|
|
239
239
|
sage: MF.gens()
|
|
240
|
-
|
|
240
|
+
(1 - 24*q + O(q^2), 1 - 8*q + O(q^2))
|
|
241
241
|
"""
|
|
242
|
-
|
|
243
242
|
return self.quasi_part_gens()
|
|
244
243
|
|
|
245
244
|
@cached_method
|
|
@@ -256,7 +255,6 @@ class QuasiModularForms(FormsSpace_abstract, Module, UniqueRepresentation):
|
|
|
256
255
|
sage: len(MF.gens()) == MF.dimension()
|
|
257
256
|
True
|
|
258
257
|
"""
|
|
259
|
-
|
|
260
258
|
return self.quasi_part_dimension()
|
|
261
259
|
|
|
262
260
|
@cached_method
|
|
@@ -385,9 +383,9 @@ class QuasiCuspForms(FormsSpace_abstract, Module, UniqueRepresentation):
|
|
|
385
383
|
self._module = FreeModule(self.coeff_ring(), self.dimension())
|
|
386
384
|
|
|
387
385
|
@cached_method
|
|
388
|
-
def gens(self):
|
|
386
|
+
def gens(self) -> tuple:
|
|
389
387
|
r"""
|
|
390
|
-
Return a basis of ``self`` as a
|
|
388
|
+
Return a basis of ``self`` as a tuple of basis elements.
|
|
391
389
|
|
|
392
390
|
EXAMPLES::
|
|
393
391
|
|
|
@@ -397,19 +395,18 @@ class QuasiCuspForms(FormsSpace_abstract, Module, UniqueRepresentation):
|
|
|
397
395
|
sage: MF.dimension()
|
|
398
396
|
7
|
|
399
397
|
sage: MF.gens()
|
|
400
|
-
|
|
398
|
+
(q - 17535/(262144*d^2)*q^3 + O(q^4),
|
|
401
399
|
q^2 - 47/(128*d)*q^3 + O(q^4),
|
|
402
400
|
q - 9/(128*d)*q^2 + 15633/(262144*d^2)*q^3 + O(q^4),
|
|
403
401
|
q^2 - 7/(128*d)*q^3 + O(q^4),
|
|
404
402
|
q - 23/(64*d)*q^2 - 3103/(262144*d^2)*q^3 + O(q^4),
|
|
405
403
|
q - 3/(64*d)*q^2 - 4863/(262144*d^2)*q^3 + O(q^4),
|
|
406
|
-
q - 27/(64*d)*q^2 + 17217/(262144*d^2)*q^3 + O(q^4)
|
|
404
|
+
q - 27/(64*d)*q^2 + 17217/(262144*d^2)*q^3 + O(q^4))
|
|
407
405
|
|
|
408
406
|
sage: MF = QuasiCuspForms(n=infinity, k=10, ep=-1)
|
|
409
407
|
sage: MF.gens()
|
|
410
|
-
|
|
408
|
+
(q - 16*q^2 - 156*q^3 - 256*q^4 + O(q^5), q - 60*q^3 - 256*q^4 + O(q^5))
|
|
411
409
|
"""
|
|
412
|
-
|
|
413
410
|
return self.quasi_part_gens()
|
|
414
411
|
|
|
415
412
|
@cached_method
|
|
@@ -661,9 +658,9 @@ class ModularForms(FormsSpace_abstract, Module, UniqueRepresentation):
|
|
|
661
658
|
self._module = FreeModule(self.coeff_ring(), self.dimension())
|
|
662
659
|
|
|
663
660
|
@cached_method
|
|
664
|
-
def gens(self):
|
|
661
|
+
def gens(self) -> tuple:
|
|
665
662
|
r"""
|
|
666
|
-
Return a basis of ``self`` as a
|
|
663
|
+
Return a basis of ``self`` as a tuple of basis elements.
|
|
667
664
|
|
|
668
665
|
EXAMPLES::
|
|
669
666
|
|
|
@@ -672,15 +669,16 @@ class ModularForms(FormsSpace_abstract, Module, UniqueRepresentation):
|
|
|
672
669
|
sage: MF.dimension()
|
|
673
670
|
4
|
|
674
671
|
sage: MF.gens()
|
|
675
|
-
|
|
672
|
+
(1 + 360360*q^4 + O(q^5),
|
|
676
673
|
q + 21742*q^4 + O(q^5),
|
|
677
674
|
q^2 + 702*q^4 + O(q^5),
|
|
678
|
-
q^3 - 6*q^4 + O(q^5)
|
|
675
|
+
q^3 - 6*q^4 + O(q^5))
|
|
679
676
|
|
|
680
677
|
sage: ModularForms(n=infinity, k=4).gens()
|
|
681
|
-
|
|
678
|
+
(1 + 240*q^2 + 2160*q^4 + O(q^5),
|
|
679
|
+
q - 8*q^2 + 28*q^3 - 64*q^4 + O(q^5))
|
|
682
680
|
"""
|
|
683
|
-
return
|
|
681
|
+
return tuple(self.F_basis(m) for m in range(self.dimension()))
|
|
684
682
|
|
|
685
683
|
@cached_method
|
|
686
684
|
def dimension(self):
|
|
@@ -801,9 +799,9 @@ class CuspForms(FormsSpace_abstract, Module, UniqueRepresentation):
|
|
|
801
799
|
self._module = FreeModule(self.coeff_ring(), self.dimension())
|
|
802
800
|
|
|
803
801
|
@cached_method
|
|
804
|
-
def gens(self):
|
|
802
|
+
def gens(self) -> tuple:
|
|
805
803
|
r"""
|
|
806
|
-
Return a basis of ``self`` as a
|
|
804
|
+
Return a basis of ``self`` as a tuple of basis elements.
|
|
807
805
|
|
|
808
806
|
EXAMPLES::
|
|
809
807
|
|
|
@@ -814,16 +812,16 @@ class CuspForms(FormsSpace_abstract, Module, UniqueRepresentation):
|
|
|
814
812
|
sage: MF.dimension()
|
|
815
813
|
3
|
|
816
814
|
sage: MF.gens()
|
|
817
|
-
|
|
815
|
+
(q + 296888795/(10319560704*d^3)*q^4 + O(q^5),
|
|
818
816
|
q^2 + 6629/(221184*d^2)*q^4 + O(q^5),
|
|
819
|
-
q^3 - 25/(96*d)*q^4 + O(q^5)
|
|
817
|
+
q^3 - 25/(96*d)*q^4 + O(q^5))
|
|
820
818
|
|
|
821
819
|
sage: MF = CuspForms(n=infinity, k=8, ep=1)
|
|
822
820
|
sage: MF.gen(0) == MF.E4()*MF.f_inf()
|
|
823
821
|
True
|
|
824
822
|
"""
|
|
825
|
-
return
|
|
826
|
-
|
|
823
|
+
return tuple(self.F_basis(m, order_1=ZZ.one())
|
|
824
|
+
for m in range(1, self.dimension() + 1))
|
|
827
825
|
|
|
828
826
|
@cached_method
|
|
829
827
|
def dimension(self):
|
|
@@ -979,18 +977,19 @@ class ZeroForm(FormsSpace_abstract, Module, UniqueRepresentation):
|
|
|
979
977
|
k=k, ep=ep)
|
|
980
978
|
|
|
981
979
|
@cached_method
|
|
982
|
-
def gens(self):
|
|
980
|
+
def gens(self) -> tuple:
|
|
983
981
|
r"""
|
|
984
|
-
Return a basis of ``self`` as a
|
|
985
|
-
|
|
982
|
+
Return a basis of ``self`` as a tuple of basis elements.
|
|
983
|
+
|
|
984
|
+
Since this is the zero module an empty tuple is returned.
|
|
986
985
|
|
|
987
986
|
EXAMPLES::
|
|
988
987
|
|
|
989
988
|
sage: from sage.modular.modform_hecketriangle.space import ZeroForm
|
|
990
989
|
sage: ZeroForm(6, CC, 3, -1).gens()
|
|
991
|
-
|
|
990
|
+
()
|
|
992
991
|
"""
|
|
993
|
-
return
|
|
992
|
+
return ()
|
|
994
993
|
|
|
995
994
|
@cached_method
|
|
996
995
|
def dimension(self):
|
|
@@ -74,7 +74,8 @@ def ModularFormsSubSpace(*args, **kwargs):
|
|
|
74
74
|
sage: subspace.ambient_space()
|
|
75
75
|
ModularForms(n=3, k=12, ep=1) over Integer Ring
|
|
76
76
|
sage: subspace.gens()
|
|
77
|
-
|
|
77
|
+
(1 + 720*q + 179280*q^2 + 16954560*q^3 + 396974160*q^4 + O(q^5),
|
|
78
|
+
1 - 1007*q + 220728*q^2 + 16519356*q^3 + 399516304*q^4 + O(q^5))
|
|
78
79
|
sage: ModularFormsSubSpace(MF.E4()^3-MF.E6()^2, reduce=True).ambient_space()
|
|
79
80
|
CuspForms(n=3, k=12, ep=1) over Integer Ring
|
|
80
81
|
sage: ModularFormsSubSpace(MF.E4()^3-MF.E6()^2, MF.J_inv()*MF.E4()^3, reduce=True)
|
|
@@ -187,7 +188,8 @@ class SubSpaceForms(FormsSpace_abstract, Module, UniqueRepresentation):
|
|
|
187
188
|
sage: subspace.basis()[0].parent() == MF
|
|
188
189
|
True
|
|
189
190
|
sage: subspace.gens()
|
|
190
|
-
|
|
191
|
+
(q + 78*q^2 + 2781*q^3 + 59812*q^4 + O(q^5),
|
|
192
|
+
1 + 360360*q^4 + O(q^5))
|
|
191
193
|
sage: subspace.gens()[0].parent() == subspace
|
|
192
194
|
True
|
|
193
195
|
sage: subspace.is_ambient()
|
|
@@ -201,7 +203,7 @@ class SubSpaceForms(FormsSpace_abstract, Module, UniqueRepresentation):
|
|
|
201
203
|
sage: subspace
|
|
202
204
|
Subspace of dimension 3 of QuasiCuspForms(n=+Infinity, k=12, ep=1) over Integer Ring
|
|
203
205
|
sage: subspace.gens()
|
|
204
|
-
|
|
206
|
+
(q + 24*q^2 + O(q^3), q - 24*q^2 + O(q^3), q - 8*q^2 + O(q^3))
|
|
205
207
|
"""
|
|
206
208
|
FormsSpace_abstract.__init__(self, group=ambient_space.group(), base_ring=ambient_space.base_ring(), k=ambient_space.weight(), ep=ambient_space.ep(), n=ambient_space.hecke_n())
|
|
207
209
|
Module.__init__(self, base=ambient_space.base_ring())
|
|
@@ -209,7 +211,7 @@ class SubSpaceForms(FormsSpace_abstract, Module, UniqueRepresentation):
|
|
|
209
211
|
self._ambient_space = ambient_space
|
|
210
212
|
self._basis = list(basis)
|
|
211
213
|
# self(v) instead would somehow mess up the coercion model
|
|
212
|
-
self._gens =
|
|
214
|
+
self._gens = tuple(self._element_constructor_(v) for v in basis)
|
|
213
215
|
self._module = ambient_space._module.submodule([ambient_space.coordinate_vector(v) for v in basis])
|
|
214
216
|
# TODO: get the analytic type from the basis
|
|
215
217
|
# self._analytic_type=self.AT(["quasi", "mero"])
|
|
@@ -307,7 +309,7 @@ class SubSpaceForms(FormsSpace_abstract, Module, UniqueRepresentation):
|
|
|
307
309
|
return self._basis
|
|
308
310
|
|
|
309
311
|
@cached_method
|
|
310
|
-
def gens(self):
|
|
312
|
+
def gens(self) -> tuple:
|
|
311
313
|
r"""
|
|
312
314
|
Return the basis of ``self``.
|
|
313
315
|
|
|
@@ -317,11 +319,11 @@ class SubSpaceForms(FormsSpace_abstract, Module, UniqueRepresentation):
|
|
|
317
319
|
sage: MF = ModularForms(n=6, k=20, ep=1)
|
|
318
320
|
sage: subspace = MF.subspace([(MF.Delta()*MF.E4()^2).as_ring_element(), MF.gen(0)])
|
|
319
321
|
sage: subspace.gens()
|
|
320
|
-
|
|
322
|
+
(q + 78*q^2 + 2781*q^3 + 59812*q^4 + O(q^5),
|
|
323
|
+
1 + 360360*q^4 + O(q^5))
|
|
321
324
|
sage: subspace.gens()[0].parent() == subspace
|
|
322
325
|
True
|
|
323
326
|
"""
|
|
324
|
-
|
|
325
327
|
return self._gens
|
|
326
328
|
|
|
327
329
|
@cached_method
|
sage/modular/modsym/ambient.py
CHANGED
|
@@ -1051,8 +1051,7 @@ class ModularSymbolsAmbient(ModularSymbolsSpace, AmbientHeckeModule):
|
|
|
1051
1051
|
hom = self.Hom(M)
|
|
1052
1052
|
if self.dimension() == 0 or M.dimension() == 0:
|
|
1053
1053
|
A = MS(0)
|
|
1054
|
-
|
|
1055
|
-
return phi
|
|
1054
|
+
return hom(A, "Heilbronn operator(%s,%s)" % (H, t))
|
|
1056
1055
|
|
|
1057
1056
|
rows = []
|
|
1058
1057
|
B = self.manin_basis()
|
|
@@ -1776,7 +1775,7 @@ class ModularSymbolsAmbient(ModularSymbolsSpace, AmbientHeckeModule):
|
|
|
1776
1775
|
|
|
1777
1776
|
factor = factorization
|
|
1778
1777
|
|
|
1779
|
-
def is_cuspidal(self):
|
|
1778
|
+
def is_cuspidal(self) -> bool:
|
|
1780
1779
|
r"""
|
|
1781
1780
|
Return ``True`` if this space is cuspidal, else ``False``.
|
|
1782
1781
|
|
|
@@ -1799,7 +1798,8 @@ class ModularSymbolsAmbient(ModularSymbolsSpace, AmbientHeckeModule):
|
|
|
1799
1798
|
self.__is_cuspidal = (S.dimension() == self.dimension())
|
|
1800
1799
|
return self.__is_cuspidal
|
|
1801
1800
|
|
|
1802
|
-
|
|
1801
|
+
@cached_method
|
|
1802
|
+
def is_eisenstein(self) -> bool:
|
|
1803
1803
|
r"""
|
|
1804
1804
|
Return ``True`` if this space is Eisenstein, else ``False``.
|
|
1805
1805
|
|
|
@@ -1815,12 +1815,8 @@ class ModularSymbolsAmbient(ModularSymbolsSpace, AmbientHeckeModule):
|
|
|
1815
1815
|
sage: S.is_eisenstein()
|
|
1816
1816
|
False
|
|
1817
1817
|
"""
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
except AttributeError:
|
|
1821
|
-
S = self.ambient_hecke_module().eisenstein_submodule()
|
|
1822
|
-
self.__is_eisenstein = self.dimension() == S.dimension()
|
|
1823
|
-
return self.__is_eisenstein
|
|
1818
|
+
S = self.ambient_hecke_module().eisenstein_submodule()
|
|
1819
|
+
return self.dimension() == S.dimension()
|
|
1824
1820
|
|
|
1825
1821
|
def manin_symbols_basis(self):
|
|
1826
1822
|
"""
|
|
@@ -2672,8 +2668,7 @@ class ModularSymbolsAmbient_wtk_g0(ModularSymbolsAmbient):
|
|
|
2672
2668
|
z += M((i, hg[1, 0], hg[1, 1]))
|
|
2673
2669
|
rows.append(z.element())
|
|
2674
2670
|
|
|
2675
|
-
|
|
2676
|
-
return A
|
|
2671
|
+
return MS(rows)
|
|
2677
2672
|
|
|
2678
2673
|
def _cuspidal_new_submodule_dimension_formula(self):
|
|
2679
2674
|
r"""
|
|
@@ -3262,8 +3257,7 @@ class ModularSymbolsAmbient_wtk_g1(ModularSymbolsAmbient):
|
|
|
3262
3257
|
z += M((i, hg[1, 0], hg[1, 1]))
|
|
3263
3258
|
rows.append(z.element())
|
|
3264
3259
|
|
|
3265
|
-
|
|
3266
|
-
return A
|
|
3260
|
+
return MS(rows)
|
|
3267
3261
|
|
|
3268
3262
|
def boundary_space(self):
|
|
3269
3263
|
r"""
|
|
@@ -3340,7 +3334,7 @@ class ModularSymbolsAmbient_wtk_gamma_h(ModularSymbolsAmbient):
|
|
|
3340
3334
|
9
|
|
3341
3335
|
sage: M._dimension_formula()
|
|
3342
3336
|
"""
|
|
3343
|
-
return
|
|
3337
|
+
return
|
|
3344
3338
|
|
|
3345
3339
|
def _repr_(self):
|
|
3346
3340
|
r"""
|
|
@@ -3364,7 +3358,7 @@ class ModularSymbolsAmbient_wtk_gamma_h(ModularSymbolsAmbient):
|
|
|
3364
3358
|
sage: ModularSymbols(GammaH(15,[4]),2)._cuspidal_submodule_dimension_formula() is None
|
|
3365
3359
|
True
|
|
3366
3360
|
"""
|
|
3367
|
-
return
|
|
3361
|
+
return
|
|
3368
3362
|
|
|
3369
3363
|
def _cuspidal_new_submodule_dimension_formula(self):
|
|
3370
3364
|
r"""
|
|
@@ -3375,7 +3369,7 @@ class ModularSymbolsAmbient_wtk_gamma_h(ModularSymbolsAmbient):
|
|
|
3375
3369
|
sage: ModularSymbols(GammaH(15,[4]),2)._cuspidal_new_submodule_dimension_formula() is None
|
|
3376
3370
|
True
|
|
3377
3371
|
"""
|
|
3378
|
-
return
|
|
3372
|
+
return
|
|
3379
3373
|
|
|
3380
3374
|
def _compute_hecke_matrix_prime_power(self, p, r):
|
|
3381
3375
|
r"""
|
|
@@ -3669,8 +3663,7 @@ class ModularSymbolsAmbient_wtk_eps(ModularSymbolsAmbient):
|
|
|
3669
3663
|
hg = h * g
|
|
3670
3664
|
z += eps(h[0, 0]) * M((i, hg[1, 0], hg[1, 1]))
|
|
3671
3665
|
rows.append(z.element())
|
|
3672
|
-
|
|
3673
|
-
return A
|
|
3666
|
+
return MS(rows)
|
|
3674
3667
|
|
|
3675
3668
|
def _dimension_formula(self):
|
|
3676
3669
|
r"""
|
|
@@ -3684,7 +3677,7 @@ class ModularSymbolsAmbient_wtk_eps(ModularSymbolsAmbient):
|
|
|
3684
3677
|
0
|
|
3685
3678
|
sage: M._dimension_formula()
|
|
3686
3679
|
"""
|
|
3687
|
-
return
|
|
3680
|
+
return
|
|
3688
3681
|
|
|
3689
3682
|
def boundary_space(self):
|
|
3690
3683
|
r"""
|
sage/modular/modsym/boundary.py
CHANGED
|
@@ -341,7 +341,7 @@ class BoundarySpace(hecke.HeckeModule_generic):
|
|
|
341
341
|
(other.group(), other.weight(), other.character()),
|
|
342
342
|
op)
|
|
343
343
|
|
|
344
|
-
def _known_cusps(self):
|
|
344
|
+
def _known_cusps(self) -> list:
|
|
345
345
|
"""
|
|
346
346
|
Return the list of non-vanishing cusps found so far.
|
|
347
347
|
|
|
@@ -356,7 +356,7 @@ class BoundarySpace(hecke.HeckeModule_generic):
|
|
|
356
356
|
"""
|
|
357
357
|
return list(self._known_gens)
|
|
358
358
|
|
|
359
|
-
def is_ambient(self):
|
|
359
|
+
def is_ambient(self) -> bool:
|
|
360
360
|
"""
|
|
361
361
|
Return ``True`` if ``self`` is a space of boundary symbols
|
|
362
362
|
associated to an ambient space of modular symbols.
|
|
Binary file
|
|
@@ -38,6 +38,7 @@ import sage.modular.modsym.ghlist as ghlist
|
|
|
38
38
|
from sage.rings.integer import Integer
|
|
39
39
|
from sage.structure.parent import Parent
|
|
40
40
|
from sage.misc.persist import register_unpickle_override
|
|
41
|
+
from sage.misc.cachefunc import cached_method
|
|
41
42
|
from sage.structure.richcmp import richcmp_method, richcmp
|
|
42
43
|
from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets
|
|
43
44
|
|
|
@@ -284,6 +285,7 @@ class ManinSymbolList(Parent):
|
|
|
284
285
|
except KeyError:
|
|
285
286
|
return -1
|
|
286
287
|
|
|
288
|
+
@cached_method
|
|
287
289
|
def manin_symbol_list(self):
|
|
288
290
|
"""
|
|
289
291
|
Return all the Manin symbols in ``self`` as a list.
|
|
@@ -313,13 +315,7 @@ class ManinSymbolList(Parent):
|
|
|
313
315
|
[X^2,(3,1)],
|
|
314
316
|
[X^2,(3,2)]]
|
|
315
317
|
"""
|
|
316
|
-
|
|
317
|
-
try:
|
|
318
|
-
return copy.copy(self.__manin_symbol_list)
|
|
319
|
-
except AttributeError:
|
|
320
|
-
self.__manin_symbol_list = [self.manin_symbol(i)
|
|
321
|
-
for i in range(len(self))]
|
|
322
|
-
return copy.copy(self.__manin_symbol_list)
|
|
318
|
+
return [self.manin_symbol(i) for i in range(len(self))]
|
|
323
319
|
|
|
324
320
|
list = manin_symbol_list
|
|
325
321
|
|
|
Binary file
|
sage/modular/modsym/space.py
CHANGED
|
@@ -407,7 +407,7 @@ class ModularSymbolsSpace(HeckeModule_free_module):
|
|
|
407
407
|
"""
|
|
408
408
|
return self.__group
|
|
409
409
|
|
|
410
|
-
def is_ambient(self):
|
|
410
|
+
def is_ambient(self) -> bool:
|
|
411
411
|
"""
|
|
412
412
|
Return ``True`` if ``self`` is an ambient space of modular symbols.
|
|
413
413
|
|
|
@@ -421,7 +421,7 @@ class ModularSymbolsSpace(HeckeModule_free_module):
|
|
|
421
421
|
from sage.modular.modsym.ambient import ModularSymbolsAmbient
|
|
422
422
|
return isinstance(self, ModularSymbolsAmbient)
|
|
423
423
|
|
|
424
|
-
def is_cuspidal(self):
|
|
424
|
+
def is_cuspidal(self) -> bool:
|
|
425
425
|
"""
|
|
426
426
|
Return ``True`` if ``self`` is a cuspidal space of modular symbols.
|
|
427
427
|
|
|
@@ -440,7 +440,7 @@ class ModularSymbolsSpace(HeckeModule_free_module):
|
|
|
440
440
|
"""
|
|
441
441
|
raise NotImplementedError("computation of cuspidal subspace not yet implemented for this class")
|
|
442
442
|
|
|
443
|
-
def is_simple(self):
|
|
443
|
+
def is_simple(self) -> bool:
|
|
444
444
|
r"""
|
|
445
445
|
Return whether this modular symbols space is simple as a module
|
|
446
446
|
over the anemic Hecke algebra adjoin \*.
|
|
@@ -1260,11 +1260,9 @@ class ModularSymbolsSpace(HeckeModule_free_module):
|
|
|
1260
1260
|
# should we perhaps check at this point if self is new?
|
|
1261
1261
|
f = self.q_eigenform(prec, names)
|
|
1262
1262
|
R = PowerSeriesRing(self.base_ring(), 'q')
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
else:
|
|
1267
|
-
raise NotImplementedError
|
|
1263
|
+
return [R([f[i][j] for i in range(prec)], prec)
|
|
1264
|
+
for j in range(self.rank())]
|
|
1265
|
+
raise NotImplementedError
|
|
1268
1266
|
|
|
1269
1267
|
#########################################################################
|
|
1270
1268
|
#
|
|
@@ -2127,6 +2125,7 @@ class ModularSymbolsSpace(HeckeModule_free_module):
|
|
|
2127
2125
|
# Cuspidal torsion groups
|
|
2128
2126
|
#########################################################
|
|
2129
2127
|
|
|
2128
|
+
@cached_method
|
|
2130
2129
|
def abvarquo_cuspidal_subgroup(self):
|
|
2131
2130
|
"""
|
|
2132
2131
|
Compute the rational subgroup of the cuspidal subgroup (as an
|
|
@@ -2151,10 +2150,6 @@ class ModularSymbolsSpace(HeckeModule_free_module):
|
|
|
2151
2150
|
sage: [A.abvarquo_cuspidal_subgroup().invariants() for A in D]
|
|
2152
2151
|
[(), (), ()]
|
|
2153
2152
|
"""
|
|
2154
|
-
try:
|
|
2155
|
-
return self.__abvarquo_cuspidal_subgroup
|
|
2156
|
-
except AttributeError:
|
|
2157
|
-
pass
|
|
2158
2153
|
if self.base_ring() != QQ:
|
|
2159
2154
|
raise ValueError("base ring must be QQ")
|
|
2160
2155
|
if self.weight() != 2:
|
|
@@ -2163,7 +2158,7 @@ class ModularSymbolsSpace(HeckeModule_free_module):
|
|
|
2163
2158
|
phi = self.integral_period_mapping()
|
|
2164
2159
|
|
|
2165
2160
|
# Make a list of all the finite cusps.
|
|
2166
|
-
P =
|
|
2161
|
+
P = (c for c in M.cusps() if not c.is_infinity())
|
|
2167
2162
|
|
|
2168
2163
|
# Compute the images of the cusp classes (c)-(oo) in the
|
|
2169
2164
|
# rational homology of the quotient modular abelian variety.
|
|
@@ -2174,11 +2169,9 @@ class ModularSymbolsSpace(HeckeModule_free_module):
|
|
|
2174
2169
|
|
|
2175
2170
|
# The cuspidal subgroup is then the quotient of that module +
|
|
2176
2171
|
# H_1(A) by H_1(A)
|
|
2177
|
-
|
|
2178
|
-
|
|
2179
|
-
self.__abvarquo_cuspidal_subgroup = C
|
|
2180
|
-
return C
|
|
2172
|
+
return (A.ambient_module() + A) / A.ambient_module()
|
|
2181
2173
|
|
|
2174
|
+
@cached_method
|
|
2182
2175
|
def abvarquo_rational_cuspidal_subgroup(self):
|
|
2183
2176
|
r"""
|
|
2184
2177
|
Compute the rational subgroup of the cuspidal subgroup (as an
|
|
@@ -2242,10 +2235,6 @@ class ModularSymbolsSpace(HeckeModule_free_module):
|
|
|
2242
2235
|
sage: [A.abelian_variety().rational_torsion_subgroup().multiple_of_order() for A in D]
|
|
2243
2236
|
[1, 5, 5]
|
|
2244
2237
|
"""
|
|
2245
|
-
try:
|
|
2246
|
-
return self.__abvarquo_rational_cuspidal_subgroup
|
|
2247
|
-
except AttributeError:
|
|
2248
|
-
pass
|
|
2249
2238
|
if self.base_ring() != QQ:
|
|
2250
2239
|
raise ValueError("base ring must be QQ")
|
|
2251
2240
|
if self.weight() != 2:
|
|
@@ -2297,7 +2286,6 @@ class ModularSymbolsSpace(HeckeModule_free_module):
|
|
|
2297
2286
|
if CQ.cardinality() == 1:
|
|
2298
2287
|
break # done -- no point in wasting more time shrinking CQ
|
|
2299
2288
|
|
|
2300
|
-
self.__abvarquo_rational_cuspidal_subgroup = CQ
|
|
2301
2289
|
return CQ
|
|
2302
2290
|
|
|
2303
2291
|
def _matrix_of_galois_action(self, t, P):
|
sage/modular/modsym/subspace.py
CHANGED
|
@@ -23,6 +23,7 @@ Subspace of ambient spaces of modular symbols
|
|
|
23
23
|
import sage.modular.hecke.all as hecke
|
|
24
24
|
import sage.structure.factorization
|
|
25
25
|
import sage.modular.modsym.space
|
|
26
|
+
from sage.misc.cachefunc import cached_method
|
|
26
27
|
|
|
27
28
|
|
|
28
29
|
class ModularSymbolsSubspace(sage.modular.modsym.space.ModularSymbolsSpace, hecke.HeckeSubmodule):
|
|
@@ -354,7 +355,8 @@ class ModularSymbolsSubspace(sage.modular.modsym.space.ModularSymbolsSpace, heck
|
|
|
354
355
|
"""
|
|
355
356
|
self.__is_cuspidal = t
|
|
356
357
|
|
|
357
|
-
|
|
358
|
+
@cached_method
|
|
359
|
+
def is_eisenstein(self) -> bool:
|
|
358
360
|
"""
|
|
359
361
|
Return ``True`` if ``self`` is an Eisenstein subspace.
|
|
360
362
|
|
|
@@ -365,12 +367,8 @@ class ModularSymbolsSubspace(sage.modular.modsym.space.ModularSymbolsSpace, heck
|
|
|
365
367
|
sage: ModularSymbols(22,6).eisenstein_submodule().is_eisenstein()
|
|
366
368
|
True
|
|
367
369
|
"""
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
except AttributeError:
|
|
371
|
-
C = self.ambient_hecke_module().eisenstein_subspace()
|
|
372
|
-
self.__is_eisenstein = self.is_submodule(C)
|
|
373
|
-
return self.__is_eisenstein
|
|
370
|
+
C = self.ambient_hecke_module().eisenstein_subspace()
|
|
371
|
+
return self.is_submodule(C)
|
|
374
372
|
|
|
375
373
|
def _compute_sign_subspace(self, sign, compute_dual=True):
|
|
376
374
|
"""
|