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.
Files changed (164) hide show
  1. passagemath_schemes/__init__.py +3 -0
  2. {passagemath_schemes-10.5.44.dist-info → passagemath_schemes-10.6.42.dist-info}/METADATA +41 -41
  3. {passagemath_schemes-10.5.44.dist-info → passagemath_schemes-10.6.42.dist-info}/METADATA.bak +42 -42
  4. {passagemath_schemes-10.5.44.dist-info → passagemath_schemes-10.6.42.dist-info}/RECORD +158 -139
  5. passagemath_schemes-10.6.42.dist-info/top_level.txt +3 -0
  6. passagemath_schemes.libs/{libflint-7dd7ad94.so.19.0.0 → libflint-edf7fb90.so.22.0.0} +0 -0
  7. passagemath_schemes.libs/{libgcc_s-69c45f16.so.1 → libgcc_s-2d945d6c.so.1} +0 -0
  8. passagemath_schemes.libs/{libgmp-8e78bd9b.so.10.5.0 → libgmp-28992bcb.so.10.5.0} +0 -0
  9. passagemath_schemes.libs/{libgmpxx-e6de26f1.so.4.7.0 → libgmpxx-fecb01a9.so.4.7.0} +0 -0
  10. passagemath_schemes.libs/{libmpfr-5ff10580.so.6.2.1 → libmpfr-1fc8ea36.so.6.2.2} +0 -0
  11. passagemath_schemes.libs/{libstdc++-1f1a71be.so.6.0.33 → libstdc++-85f2cd6d.so.6.0.33} +0 -0
  12. sage/all__sagemath_schemes.py +3 -2
  13. sage/databases/all__sagemath_schemes.py +0 -10
  14. sage/dynamics/arithmetic_dynamics/berkovich_ds.py +4 -4
  15. sage/dynamics/arithmetic_dynamics/generic_ds.py +3 -3
  16. sage/dynamics/arithmetic_dynamics/projective_ds.py +7 -7
  17. sage/dynamics/arithmetic_dynamics/projective_ds_helper.cpython-313-aarch64-linux-musl.so +0 -0
  18. sage/dynamics/arithmetic_dynamics/wehlerK3.py +18 -18
  19. sage/lfunctions/zero_sums.cpython-313-aarch64-linux-musl.so +0 -0
  20. sage/modular/abvar/abvar.py +12 -11
  21. sage/modular/abvar/constructor.py +3 -3
  22. sage/modular/abvar/cuspidal_subgroup.py +5 -6
  23. sage/modular/abvar/finite_subgroup.py +20 -18
  24. sage/modular/abvar/homology.py +1 -2
  25. sage/modular/abvar/homspace.py +1 -1
  26. sage/modular/abvar/lseries.py +3 -3
  27. sage/modular/abvar/morphism.py +1 -1
  28. sage/modular/abvar/torsion_point.py +1 -1
  29. sage/modular/abvar/torsion_subgroup.py +1 -1
  30. sage/modular/arithgroup/arithgroup_element.cpython-313-aarch64-linux-musl.so +0 -0
  31. sage/modular/arithgroup/arithgroup_perm.py +16 -16
  32. sage/modular/arithgroup/congroup.cpython-313-aarch64-linux-musl.so +0 -0
  33. sage/modular/arithgroup/congroup_gamma0.py +2 -2
  34. sage/modular/arithgroup/congroup_gamma1.py +4 -4
  35. sage/modular/arithgroup/congroup_gammaH.py +2 -2
  36. sage/modular/arithgroup/congroup_generic.py +2 -3
  37. sage/modular/arithgroup/congroup_sl2z.py +3 -3
  38. sage/modular/arithgroup/farey_symbol.cpython-313-aarch64-linux-musl.so +0 -0
  39. sage/modular/arithgroup/farey_symbol.pyx +1 -2
  40. sage/modular/btquotients/btquotient.py +4 -5
  41. sage/modular/btquotients/pautomorphicform.py +2 -2
  42. sage/modular/cusps.py +6 -4
  43. sage/modular/cusps_nf.py +7 -8
  44. sage/modular/dirichlet.py +34 -43
  45. sage/modular/drinfeld_modform/element.py +4 -4
  46. sage/modular/drinfeld_modform/ring.py +12 -12
  47. sage/modular/drinfeld_modform/tutorial.py +1 -1
  48. sage/modular/hecke/algebra.py +7 -5
  49. sage/modular/hecke/ambient_module.py +2 -2
  50. sage/modular/hecke/element.py +7 -2
  51. sage/modular/hecke/module.py +9 -9
  52. sage/modular/hecke/submodule.py +6 -8
  53. sage/modular/hypergeometric_misc.cpython-313-aarch64-linux-musl.so +0 -0
  54. sage/modular/hypergeometric_misc.pyx +3 -2
  55. sage/modular/hypergeometric_motive.py +2 -2
  56. sage/modular/local_comp/local_comp.py +19 -11
  57. sage/modular/local_comp/type_space.py +10 -8
  58. sage/modular/modform/ambient.py +4 -3
  59. sage/modular/modform/cuspidal_submodule.py +2 -2
  60. sage/modular/modform/element.py +72 -72
  61. sage/modular/modform/half_integral.py +1 -1
  62. sage/modular/modform/l_series_gross_zagier.py +3 -0
  63. sage/modular/modform/l_series_gross_zagier_coeffs.cpython-313-aarch64-linux-musl.so +0 -0
  64. sage/modular/modform/l_series_gross_zagier_coeffs.pyx +5 -2
  65. sage/modular/modform/ring.py +10 -12
  66. sage/modular/modform/space.py +18 -21
  67. sage/modular/modform/weight1.py +1 -2
  68. sage/modular/modform_hecketriangle/abstract_ring.py +7 -14
  69. sage/modular/modform_hecketriangle/abstract_space.py +63 -66
  70. sage/modular/modform_hecketriangle/graded_ring_element.py +11 -12
  71. sage/modular/modform_hecketriangle/hecke_triangle_group_element.py +82 -84
  72. sage/modular/modform_hecketriangle/hecke_triangle_groups.py +2 -2
  73. sage/modular/modform_hecketriangle/readme.py +9 -11
  74. sage/modular/modform_hecketriangle/series_constructor.py +10 -18
  75. sage/modular/modform_hecketriangle/space.py +29 -30
  76. sage/modular/modform_hecketriangle/subspace.py +9 -7
  77. sage/modular/modsym/ambient.py +13 -20
  78. sage/modular/modsym/boundary.py +2 -2
  79. sage/modular/modsym/manin_symbol.cpython-313-aarch64-linux-musl.so +0 -0
  80. sage/modular/modsym/manin_symbol_list.py +3 -7
  81. sage/modular/modsym/relation_matrix_pyx.cpython-313-aarch64-linux-musl.so +0 -0
  82. sage/modular/modsym/space.py +10 -22
  83. sage/modular/modsym/subspace.py +5 -7
  84. sage/modular/multiple_zeta.py +11 -13
  85. sage/modular/multiple_zeta_F_algebra.py +4 -6
  86. sage/modular/overconvergent/genus0.py +5 -4
  87. sage/modular/overconvergent/hecke_series.py +2 -2
  88. sage/modular/pollack_stevens/distributions.py +2 -2
  89. sage/modular/pollack_stevens/fund_domain.py +26 -29
  90. sage/modular/pollack_stevens/manin_map.py +15 -10
  91. sage/modular/pollack_stevens/modsym.py +18 -18
  92. sage/modular/quasimodform/element.py +10 -10
  93. sage/modular/quasimodform/ring.py +22 -22
  94. sage/modular/ssmod/ssmod.py +5 -12
  95. sage/rings/polynomial/binary_form_reduce.py +1 -1
  96. sage/schemes/curves/affine_curve.py +4 -4
  97. sage/schemes/curves/plane_curve_arrangement.py +28 -24
  98. sage/schemes/elliptic_curves/BSD.py +1 -1
  99. sage/schemes/elliptic_curves/addition_formulas_ring.py +4 -0
  100. sage/schemes/elliptic_curves/cm.py +1 -1
  101. sage/schemes/elliptic_curves/constructor.py +3 -3
  102. sage/schemes/elliptic_curves/ell_egros.py +1 -1
  103. sage/schemes/elliptic_curves/ell_field.py +57 -46
  104. sage/schemes/elliptic_curves/ell_finite_field.py +138 -26
  105. sage/schemes/elliptic_curves/ell_local_data.py +9 -9
  106. sage/schemes/elliptic_curves/ell_number_field.py +25 -24
  107. sage/schemes/elliptic_curves/ell_point.py +21 -22
  108. sage/schemes/elliptic_curves/ell_rational_field.py +38 -28
  109. sage/schemes/elliptic_curves/formal_group.py +1 -1
  110. sage/schemes/elliptic_curves/heegner.py +11 -8
  111. sage/schemes/elliptic_curves/height.py +26 -23
  112. sage/schemes/elliptic_curves/hom.py +2 -1
  113. sage/schemes/elliptic_curves/hom_composite.py +11 -11
  114. sage/schemes/elliptic_curves/hom_frobenius.py +8 -8
  115. sage/schemes/elliptic_curves/hom_sum.py +7 -1
  116. sage/schemes/elliptic_curves/hom_velusqrt.py +13 -7
  117. sage/schemes/elliptic_curves/homset.py +2 -2
  118. sage/schemes/elliptic_curves/isogeny_small_degree.py +1 -1
  119. sage/schemes/elliptic_curves/mod_poly.py +12 -5
  120. sage/schemes/elliptic_curves/mod_sym_num.cpython-313-aarch64-linux-musl.so +0 -0
  121. sage/schemes/elliptic_curves/padic_lseries.py +25 -13
  122. sage/schemes/elliptic_curves/padics.py +71 -63
  123. sage/schemes/elliptic_curves/period_lattice.py +78 -27
  124. sage/schemes/elliptic_curves/period_lattice_region.cpython-313-aarch64-linux-musl.so +0 -0
  125. sage/schemes/elliptic_curves/sha_tate.py +1 -1
  126. sage/schemes/elliptic_curves/weierstrass_morphism.py +2 -2
  127. sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +1 -1
  128. sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +1 -1
  129. sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +10 -20
  130. sage/schemes/jacobians/abstract_jacobian.py +1 -1
  131. sage/schemes/plane_conics/con_field.py +42 -42
  132. sage/schemes/plane_conics/con_rational_field.py +1 -1
  133. sage/schemes/riemann_surfaces/riemann_surface.py +8 -8
  134. sage_wheels/share/cremona/cremona_mini.db +0 -0
  135. sage_wheels/share/ellcurves/rank0 +30427 -0
  136. sage_wheels/share/ellcurves/rank1 +31871 -0
  137. sage_wheels/share/ellcurves/rank10 +6 -0
  138. sage_wheels/share/ellcurves/rank11 +6 -0
  139. sage_wheels/share/ellcurves/rank12 +1 -0
  140. sage_wheels/share/ellcurves/rank14 +1 -0
  141. sage_wheels/share/ellcurves/rank15 +1 -0
  142. sage_wheels/share/ellcurves/rank17 +1 -0
  143. sage_wheels/share/ellcurves/rank19 +1 -0
  144. sage_wheels/share/ellcurves/rank2 +2388 -0
  145. sage_wheels/share/ellcurves/rank20 +1 -0
  146. sage_wheels/share/ellcurves/rank21 +1 -0
  147. sage_wheels/share/ellcurves/rank22 +1 -0
  148. sage_wheels/share/ellcurves/rank23 +1 -0
  149. sage_wheels/share/ellcurves/rank24 +1 -0
  150. sage_wheels/share/ellcurves/rank28 +1 -0
  151. sage_wheels/share/ellcurves/rank3 +836 -0
  152. sage_wheels/share/ellcurves/rank4 +10 -0
  153. sage_wheels/share/ellcurves/rank5 +5 -0
  154. sage_wheels/share/ellcurves/rank6 +5 -0
  155. sage_wheels/share/ellcurves/rank7 +5 -0
  156. sage_wheels/share/ellcurves/rank8 +6 -0
  157. sage_wheels/share/ellcurves/rank9 +7 -0
  158. passagemath_schemes-10.5.44.dist-info/top_level.txt +0 -2
  159. sage/databases/db_modular_polynomials.py +0 -250
  160. sage/databases/stein_watkins.py +0 -363
  161. sage/modular/modsym/p1list.cpython-313-aarch64-linux-musl.so +0 -0
  162. sage/modular/modsym/p1list.pxd +0 -29
  163. sage/modular/modsym/p1list.pyx +0 -1372
  164. {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
- J_inv_ZZ = ZZ.one() / (new_f + O(q**(temp_f.degree()+1)))
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 the behavior at -1)
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
- elif (ZZ(2).divides(n)):
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
- else:
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
- E4_ZZ = ((-q*self.J_inv_ZZ().derivative())**2/(self.J_inv_ZZ()*(self.J_inv_ZZ()-1))).power_series()
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
- E6_ZZ = ((-q*self.J_inv_ZZ().derivative())**3/(self.J_inv_ZZ()**2*(self.J_inv_ZZ()-1))).power_series()
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
- E2_ZZ = (q*self.f_inf_ZZ().derivative())/self.f_inf_ZZ()
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 list of basis elements.
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
- [1 - 37/(200*d)*q + O(q^2),
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
- [1 - 24*q + O(q^2), 1 - 8*q + O(q^2)]
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 list of basis elements.
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
- [q - 17535/(262144*d^2)*q^3 + O(q^4),
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
- [q - 16*q^2 - 156*q^3 - 256*q^4 + O(q^5), q - 60*q^3 - 256*q^4 + O(q^5)]
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 list of basis elements.
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
- [1 + 360360*q^4 + O(q^5),
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
- [1 + 240*q^2 + 2160*q^4 + O(q^5), q - 8*q^2 + 28*q^3 - 64*q^4 + O(q^5)]
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 [self.F_basis(m) for m in range(self.dimension())]
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 list of basis elements.
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
- [q + 296888795/(10319560704*d^3)*q^4 + O(q^5),
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 [self.F_basis(m, order_1=ZZ.one())
826
- for m in range(1, self.dimension() + 1)]
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 list of basis elements.
985
- Since this is the zero module an empty list is returned.
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
- [1 + 720*q + 179280*q^2 + 16954560*q^3 + 396974160*q^4 + O(q^5), 1 - 1007*q + 220728*q^2 + 16519356*q^3 + 399516304*q^4 + O(q^5)]
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
- [q + 78*q^2 + 2781*q^3 + 59812*q^4 + O(q^5), 1 + 360360*q^4 + O(q^5)]
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
- [q + 24*q^2 + O(q^3), q - 24*q^2 + O(q^3), q - 8*q^2 + O(q^3)]
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 = [self._element_constructor_(v) for v in basis]
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
- [q + 78*q^2 + 2781*q^3 + 59812*q^4 + O(q^5), 1 + 360360*q^4 + O(q^5)]
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
@@ -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
- phi = hom(A, "Heilbronn operator(%s,%s)" % (H, t))
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
- def is_eisenstein(self):
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
- try:
1819
- return self.__is_eisenstein
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
- A = MS(rows)
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
- A = MS(rows)
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 None
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 None
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 None
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
- A = MS(rows)
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 None
3680
+ return
3688
3681
 
3689
3682
  def boundary_space(self):
3690
3683
  r"""
@@ -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.
@@ -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
- import copy
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
 
@@ -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
- B = [R([f[i][j] for i in range(prec)], prec)
1264
- for j in range(self.rank())]
1265
- return B
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 = [c for c in M.cusps() if not c.is_infinity()]
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
- C = (A.ambient_module() + A) / A.ambient_module()
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):
@@ -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
- def is_eisenstein(self):
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
- try:
369
- return self.__is_eisenstien
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
  """