passagemath-schemes 10.5.48__cp312-cp312-musllinux_1_2_aarch64.whl → 10.6.47__cp312-cp312-musllinux_1_2_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of passagemath-schemes might be problematic. Click here for more details.

Files changed (165) hide show
  1. passagemath_schemes/__init__.py +3 -0
  2. {passagemath_schemes-10.5.48.dist-info → passagemath_schemes-10.6.47.dist-info}/METADATA +42 -42
  3. {passagemath_schemes-10.5.48.dist-info → passagemath_schemes-10.6.47.dist-info}/METADATA.bak +43 -43
  4. {passagemath_schemes-10.5.48.dist-info → passagemath_schemes-10.6.47.dist-info}/RECORD +159 -140
  5. passagemath_schemes-10.6.47.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 +6 -6
  17. sage/dynamics/arithmetic_dynamics/projective_ds_helper.cpython-312-aarch64-linux-musl.so +0 -0
  18. sage/dynamics/arithmetic_dynamics/wehlerK3.py +18 -18
  19. sage/lfunctions/zero_sums.cpython-312-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-312-aarch64-linux-musl.so +0 -0
  31. sage/modular/arithgroup/arithgroup_perm.py +16 -16
  32. sage/modular/arithgroup/congroup.cpython-312-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-312-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-312-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-312-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/all.py +2 -2
  78. sage/modular/modsym/ambient.py +13 -20
  79. sage/modular/modsym/boundary.py +2 -2
  80. sage/modular/modsym/manin_symbol.cpython-312-aarch64-linux-musl.so +0 -0
  81. sage/modular/modsym/manin_symbol_list.py +3 -7
  82. sage/modular/modsym/relation_matrix_pyx.cpython-312-aarch64-linux-musl.so +0 -0
  83. sage/modular/modsym/space.py +10 -22
  84. sage/modular/modsym/subspace.py +5 -7
  85. sage/modular/multiple_zeta.py +11 -13
  86. sage/modular/multiple_zeta_F_algebra.py +4 -6
  87. sage/modular/overconvergent/genus0.py +5 -4
  88. sage/modular/overconvergent/hecke_series.py +2 -2
  89. sage/modular/pollack_stevens/distributions.py +2 -2
  90. sage/modular/pollack_stevens/fund_domain.py +26 -29
  91. sage/modular/pollack_stevens/manin_map.py +15 -10
  92. sage/modular/pollack_stevens/modsym.py +18 -18
  93. sage/modular/quasimodform/element.py +10 -10
  94. sage/modular/quasimodform/ring.py +22 -22
  95. sage/modular/ssmod/ssmod.py +5 -12
  96. sage/rings/polynomial/binary_form_reduce.py +1 -1
  97. sage/schemes/curves/affine_curve.py +4 -4
  98. sage/schemes/curves/plane_curve_arrangement.py +28 -24
  99. sage/schemes/elliptic_curves/BSD.py +1 -1
  100. sage/schemes/elliptic_curves/addition_formulas_ring.py +4 -0
  101. sage/schemes/elliptic_curves/cm.py +1 -1
  102. sage/schemes/elliptic_curves/constructor.py +3 -3
  103. sage/schemes/elliptic_curves/ell_egros.py +1 -1
  104. sage/schemes/elliptic_curves/ell_field.py +57 -46
  105. sage/schemes/elliptic_curves/ell_finite_field.py +138 -26
  106. sage/schemes/elliptic_curves/ell_local_data.py +9 -9
  107. sage/schemes/elliptic_curves/ell_number_field.py +25 -24
  108. sage/schemes/elliptic_curves/ell_point.py +21 -22
  109. sage/schemes/elliptic_curves/ell_rational_field.py +38 -28
  110. sage/schemes/elliptic_curves/formal_group.py +1 -1
  111. sage/schemes/elliptic_curves/heegner.py +11 -8
  112. sage/schemes/elliptic_curves/height.py +26 -23
  113. sage/schemes/elliptic_curves/hom.py +2 -1
  114. sage/schemes/elliptic_curves/hom_composite.py +11 -11
  115. sage/schemes/elliptic_curves/hom_frobenius.py +8 -8
  116. sage/schemes/elliptic_curves/hom_sum.py +7 -1
  117. sage/schemes/elliptic_curves/hom_velusqrt.py +13 -7
  118. sage/schemes/elliptic_curves/homset.py +2 -2
  119. sage/schemes/elliptic_curves/isogeny_small_degree.py +1 -1
  120. sage/schemes/elliptic_curves/mod_poly.py +12 -5
  121. sage/schemes/elliptic_curves/mod_sym_num.cpython-312-aarch64-linux-musl.so +0 -0
  122. sage/schemes/elliptic_curves/padic_lseries.py +25 -13
  123. sage/schemes/elliptic_curves/padics.py +71 -62
  124. sage/schemes/elliptic_curves/period_lattice.py +78 -27
  125. sage/schemes/elliptic_curves/period_lattice_region.cpython-312-aarch64-linux-musl.so +0 -0
  126. sage/schemes/elliptic_curves/sha_tate.py +1 -1
  127. sage/schemes/elliptic_curves/weierstrass_morphism.py +2 -2
  128. sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +1 -1
  129. sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +1 -1
  130. sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +10 -20
  131. sage/schemes/jacobians/abstract_jacobian.py +1 -1
  132. sage/schemes/plane_conics/con_field.py +42 -42
  133. sage/schemes/plane_conics/con_rational_field.py +1 -1
  134. sage/schemes/riemann_surfaces/riemann_surface.py +8 -8
  135. sage_wheels/share/cremona/cremona_mini.db +0 -0
  136. sage_wheels/share/ellcurves/rank0 +30427 -0
  137. sage_wheels/share/ellcurves/rank1 +31871 -0
  138. sage_wheels/share/ellcurves/rank10 +6 -0
  139. sage_wheels/share/ellcurves/rank11 +6 -0
  140. sage_wheels/share/ellcurves/rank12 +1 -0
  141. sage_wheels/share/ellcurves/rank14 +1 -0
  142. sage_wheels/share/ellcurves/rank15 +1 -0
  143. sage_wheels/share/ellcurves/rank17 +1 -0
  144. sage_wheels/share/ellcurves/rank19 +1 -0
  145. sage_wheels/share/ellcurves/rank2 +2388 -0
  146. sage_wheels/share/ellcurves/rank20 +1 -0
  147. sage_wheels/share/ellcurves/rank21 +1 -0
  148. sage_wheels/share/ellcurves/rank22 +1 -0
  149. sage_wheels/share/ellcurves/rank23 +1 -0
  150. sage_wheels/share/ellcurves/rank24 +1 -0
  151. sage_wheels/share/ellcurves/rank28 +1 -0
  152. sage_wheels/share/ellcurves/rank3 +836 -0
  153. sage_wheels/share/ellcurves/rank4 +10 -0
  154. sage_wheels/share/ellcurves/rank5 +5 -0
  155. sage_wheels/share/ellcurves/rank6 +5 -0
  156. sage_wheels/share/ellcurves/rank7 +5 -0
  157. sage_wheels/share/ellcurves/rank8 +6 -0
  158. sage_wheels/share/ellcurves/rank9 +7 -0
  159. passagemath_schemes-10.5.48.dist-info/top_level.txt +0 -2
  160. sage/databases/db_modular_polynomials.py +0 -250
  161. sage/databases/stein_watkins.py +0 -363
  162. sage/modular/modsym/p1list.cpython-312-aarch64-linux-musl.so +0 -0
  163. sage/modular/modsym/p1list.pxd +0 -29
  164. sage/modular/modsym/p1list.pyx +0 -1372
  165. {passagemath_schemes-10.5.48.dist-info → passagemath_schemes-10.6.47.dist-info}/WHEEL +0 -0
@@ -838,7 +838,7 @@ class FormsRing_abstract(Parent):
838
838
  - (self._group.n()-2) / (4*self._group.n()) * (Z**2+X**(self._group.n()-2)) * dZ
839
839
 
840
840
  @cached_method
841
- def has_reduce_hom(self):
841
+ def has_reduce_hom(self) -> bool:
842
842
  r"""
843
843
  Return whether the method ``reduce`` should reduce
844
844
  homogeneous elements to the corresponding space of homogeneous elements.
@@ -862,10 +862,9 @@ class FormsRing_abstract(Parent):
862
862
  sage: ModularForms(k=6).graded_ring().has_reduce_hom()
863
863
  True
864
864
  """
865
-
866
865
  return self._red_hom
867
866
 
868
- def is_homogeneous(self):
867
+ def is_homogeneous(self) -> bool:
869
868
  r"""
870
869
  Return whether ``self`` is homogeneous component.
871
870
 
@@ -879,10 +878,9 @@ class FormsRing_abstract(Parent):
879
878
  sage: ModularForms(k=6).is_homogeneous()
880
879
  True
881
880
  """
882
-
883
881
  return self._weight is not None
884
882
 
885
- def is_modular(self):
883
+ def is_modular(self) -> bool:
886
884
  r"""
887
885
  Return whether ``self`` only contains modular elements.
888
886
 
@@ -900,10 +898,9 @@ class FormsRing_abstract(Parent):
900
898
  sage: CuspForms(n=7, k=12, base_ring=AA).is_modular()
901
899
  True
902
900
  """
903
-
904
901
  return not (self.AT("quasi") <= self._analytic_type)
905
902
 
906
- def is_weakly_holomorphic(self):
903
+ def is_weakly_holomorphic(self) -> bool:
907
904
  r"""
908
905
  Return whether ``self`` only contains weakly
909
906
  holomorphic modular elements.
@@ -922,10 +919,9 @@ class FormsRing_abstract(Parent):
922
919
  sage: CuspForms(n=7, k=12, base_ring=AA).is_weakly_holomorphic()
923
920
  True
924
921
  """
925
-
926
922
  return (self.AT("weak", "quasi") >= self._analytic_type)
927
923
 
928
- def is_holomorphic(self):
924
+ def is_holomorphic(self) -> bool:
929
925
  r"""
930
926
  Return whether ``self`` only contains holomorphic
931
927
  modular elements.
@@ -944,10 +940,9 @@ class FormsRing_abstract(Parent):
944
940
  sage: CuspForms(n=7, k=12, base_ring=AA).is_holomorphic()
945
941
  True
946
942
  """
947
-
948
943
  return (self.AT("holo", "quasi") >= self._analytic_type)
949
944
 
950
- def is_cuspidal(self):
945
+ def is_cuspidal(self) -> bool:
951
946
  r"""
952
947
  Return whether ``self`` only contains cuspidal elements.
953
948
 
@@ -965,10 +960,9 @@ class FormsRing_abstract(Parent):
965
960
  sage: QuasiCuspForms(k=12).is_cuspidal()
966
961
  True
967
962
  """
968
-
969
963
  return (self.AT("cusp", "quasi") >= self._analytic_type)
970
964
 
971
- def is_zerospace(self):
965
+ def is_zerospace(self) -> bool:
972
966
  r"""
973
967
  Return whether ``self`` is the (`0`-dimensional) zero space.
974
968
 
@@ -984,7 +978,6 @@ class FormsRing_abstract(Parent):
984
978
  sage: CuspForms(k=12).reduce_type([]).is_zerospace()
985
979
  True
986
980
  """
987
-
988
981
  return (self.AT(["quasi"]) >= self._analytic_type)
989
982
 
990
983
  def analytic_type(self):
@@ -363,7 +363,7 @@ class FormsSpace_abstract(FormsRing_abstract):
363
363
  """
364
364
  return self.extend_type("holo", ring=True)(1).reduce()
365
365
 
366
- def is_ambient(self):
366
+ def is_ambient(self) -> bool:
367
367
  r"""
368
368
  Return whether ``self`` is an ambient space.
369
369
 
@@ -1353,7 +1353,7 @@ class FormsSpace_abstract(FormsRing_abstract):
1353
1353
 
1354
1354
  return (min_exp, order_1)
1355
1355
 
1356
- def quasi_part_gens(self, r=None, min_exp=0, max_exp=infinity, order_1=ZZ.zero()):
1356
+ def quasi_part_gens(self, r=None, min_exp=0, max_exp=infinity, order_1=ZZ.zero()) -> tuple:
1357
1357
  r"""
1358
1358
  Return a basis in ``self`` of the subspace of (quasi) weakly
1359
1359
  holomorphic forms which satisfy the specified properties on
@@ -1392,17 +1392,20 @@ class FormsSpace_abstract(FormsRing_abstract):
1392
1392
  sage: QF = QuasiWeakModularForms(n=8, k=10/3, ep=-1)
1393
1393
  sage: QF.default_prec(1)
1394
1394
  sage: QF.quasi_part_gens(min_exp=-1)
1395
- [q^-1 + O(q), 1 + O(q), q^-1 - 9/(128*d) + O(q), 1 + O(q), q^-1 - 19/(64*d) + O(q), q^-1 + 1/(64*d) + O(q)]
1395
+ (q^-1 + O(q), 1 + O(q), q^-1 - 9/(128*d) + O(q),
1396
+ 1 + O(q), q^-1 - 19/(64*d) + O(q), q^-1 + 1/(64*d) + O(q))
1396
1397
 
1397
1398
  sage: QF.quasi_part_gens(min_exp=-1, max_exp=-1)
1398
- [q^-1 + O(q), q^-1 - 9/(128*d) + O(q), q^-1 - 19/(64*d) + O(q), q^-1 + 1/(64*d) + O(q)]
1399
+ (q^-1 + O(q), q^-1 - 9/(128*d) + O(q),
1400
+ q^-1 - 19/(64*d) + O(q), q^-1 + 1/(64*d) + O(q))
1399
1401
  sage: QF.quasi_part_gens(min_exp=-2, r=1)
1400
- [q^-2 - 9/(128*d)*q^-1 - 261/(131072*d^2) + O(q), q^-1 - 9/(128*d) + O(q), 1 + O(q)]
1402
+ (q^-2 - 9/(128*d)*q^-1 - 261/(131072*d^2) + O(q),
1403
+ q^-1 - 9/(128*d) + O(q), 1 + O(q))
1401
1404
 
1402
1405
  sage: from sage.modular.modform_hecketriangle.space import ModularForms
1403
1406
  sage: MF = ModularForms(k=36)
1404
1407
  sage: MF.quasi_part_gens(min_exp=2)
1405
- [q^2 + 194184*q^4 + O(q^5), q^3 - 72*q^4 + O(q^5)]
1408
+ (q^2 + 194184*q^4 + O(q^5), q^3 - 72*q^4 + O(q^5))
1406
1409
 
1407
1410
  sage: from sage.modular.modform_hecketriangle.space import QuasiModularForms
1408
1411
  sage: MF = QuasiModularForms(n=5, k=6, ep=-1)
@@ -1410,17 +1413,17 @@ class FormsSpace_abstract(FormsRing_abstract):
1410
1413
  sage: MF.dimension()
1411
1414
  3
1412
1415
  sage: MF.quasi_part_gens(r=0)
1413
- [1 - 37/(200*d)*q + O(q^2)]
1416
+ (1 - 37/(200*d)*q + O(q^2),)
1414
1417
  sage: MF.quasi_part_gens(r=0)[0] == MF.E6()
1415
1418
  True
1416
1419
  sage: MF.quasi_part_gens(r=1)
1417
- [1 + 33/(200*d)*q + O(q^2)]
1420
+ (1 + 33/(200*d)*q + O(q^2),)
1418
1421
  sage: MF.quasi_part_gens(r=1)[0] == MF.E2()*MF.E4()
1419
1422
  True
1420
1423
  sage: MF.quasi_part_gens(r=2)
1421
- []
1424
+ ()
1422
1425
  sage: MF.quasi_part_gens(r=3)
1423
- [1 - 27/(200*d)*q + O(q^2)]
1426
+ (1 - 27/(200*d)*q + O(q^2),)
1424
1427
  sage: MF.quasi_part_gens(r=3)[0] == MF.E2()^3
1425
1428
  True
1426
1429
 
@@ -1430,18 +1433,18 @@ class FormsSpace_abstract(FormsRing_abstract):
1430
1433
  sage: MF.dimension()
1431
1434
  8
1432
1435
  sage: MF.quasi_part_gens(r=0)
1433
- [q - 34743/(640000*d^2)*q^3 + O(q^4), q^2 - 69/(200*d)*q^3 + O(q^4)]
1436
+ (q - 34743/(640000*d^2)*q^3 + O(q^4), q^2 - 69/(200*d)*q^3 + O(q^4))
1434
1437
  sage: MF.quasi_part_gens(r=1)
1435
- [q - 9/(200*d)*q^2 + 37633/(640000*d^2)*q^3 + O(q^4),
1436
- q^2 + 1/(200*d)*q^3 + O(q^4)]
1438
+ (q - 9/(200*d)*q^2 + 37633/(640000*d^2)*q^3 + O(q^4),
1439
+ q^2 + 1/(200*d)*q^3 + O(q^4))
1437
1440
  sage: MF.quasi_part_gens(r=2)
1438
- [q - 1/(4*d)*q^2 - 24903/(640000*d^2)*q^3 + O(q^4)]
1441
+ (q - 1/(4*d)*q^2 - 24903/(640000*d^2)*q^3 + O(q^4),)
1439
1442
  sage: MF.quasi_part_gens(r=3)
1440
- [q + 1/(10*d)*q^2 - 7263/(640000*d^2)*q^3 + O(q^4)]
1443
+ (q + 1/(10*d)*q^2 - 7263/(640000*d^2)*q^3 + O(q^4),)
1441
1444
  sage: MF.quasi_part_gens(r=4)
1442
- [q - 11/(20*d)*q^2 + 53577/(640000*d^2)*q^3 + O(q^4)]
1445
+ (q - 11/(20*d)*q^2 + 53577/(640000*d^2)*q^3 + O(q^4),)
1443
1446
  sage: MF.quasi_part_gens(r=5)
1444
- [q - 1/(5*d)*q^2 + 4017/(640000*d^2)*q^3 + O(q^4)]
1447
+ (q - 1/(5*d)*q^2 + 4017/(640000*d^2)*q^3 + O(q^4),)
1445
1448
 
1446
1449
  sage: MF.quasi_part_gens(r=1)[0] == MF.E2() * CuspForms(n=5, k=16, ep=1).gen(0)
1447
1450
  True
@@ -1454,9 +1457,9 @@ class FormsSpace_abstract(FormsRing_abstract):
1454
1457
  sage: MF.quasi_part_gens(r=1, min_exp=-2) == MF.quasi_part_gens(r=1, min_exp=1)
1455
1458
  True
1456
1459
  sage: MF.quasi_part_gens(r=1)
1457
- [q - 8*q^2 - 8*q^3 + 5952*q^4 + O(q^5),
1460
+ (q - 8*q^2 - 8*q^3 + 5952*q^4 + O(q^5),
1458
1461
  q^2 - 8*q^3 + 208*q^4 + O(q^5),
1459
- q^3 - 16*q^4 + O(q^5)]
1462
+ q^3 - 16*q^4 + O(q^5))
1460
1463
 
1461
1464
  sage: MF = QuasiWeakModularForms(n=infinity, k=4, ep=1)
1462
1465
  sage: MF.quasi_part_gens(r=2, min_exp=2, order_1=-2)[0] == MF.E2()^2 * MF.E4()^(-2) * MF.f_inf()^2
@@ -1464,23 +1467,22 @@ class FormsSpace_abstract(FormsRing_abstract):
1464
1467
  sage: [v.order_at(-1) for v in MF.quasi_part_gens(r=0, min_exp=2, order_1=-2)]
1465
1468
  [-2, -2]
1466
1469
  """
1467
-
1468
- if (not self.is_weakly_holomorphic()):
1470
+ if not self.is_weakly_holomorphic():
1469
1471
  from warnings import warn
1470
1472
  warn("This function only determines generators of (quasi) weakly modular forms!")
1471
1473
 
1472
- (min_exp, order_1) = self._canonical_min_exp(min_exp, order_1)
1474
+ min_exp, order_1 = self._canonical_min_exp(min_exp, order_1)
1473
1475
 
1474
1476
  # For modular forms spaces the quasi parts are all zero except for r=0
1475
- if (self.is_modular()):
1477
+ if self.is_modular():
1476
1478
  r = ZZ(r)
1477
- if (r != 0):
1478
- return []
1479
+ if r:
1480
+ return ()
1479
1481
 
1480
1482
  # The lower bounds on the powers of f_inf and E4 determine
1481
1483
  # how large powers of E2 we can fit in...
1482
1484
  n = self.hecke_n()
1483
- if (n == infinity):
1485
+ if n == infinity:
1484
1486
  max_numerator_weight = self._weight - 4*min_exp - 4*order_1 + 4
1485
1487
  else:
1486
1488
  max_numerator_weight = self._weight - 4*n/(n-2)*min_exp + 4
@@ -1488,30 +1490,28 @@ class FormsSpace_abstract(FormsRing_abstract):
1488
1490
  # If r is not specified we gather all generators for all possible r's
1489
1491
  if r is None:
1490
1492
  gens = []
1491
- for rnew in range(QQ(max_numerator_weight/ZZ(2)).floor() + 1):
1492
- gens += self.quasi_part_gens(r=rnew, min_exp=min_exp, max_exp=max_exp, order_1=order_1)
1493
- return gens
1493
+ for rnew in range(QQ(max_numerator_weight / ZZ(2)).floor() + 1):
1494
+ gens.extend(self.quasi_part_gens(r=rnew, min_exp=min_exp, max_exp=max_exp, order_1=order_1))
1495
+ return tuple(gens)
1494
1496
 
1495
1497
  r = ZZ(r)
1496
1498
  if r < 0 or 2*r > max_numerator_weight:
1497
- return []
1499
+ return ()
1498
1500
 
1499
1501
  E2 = self.E2()
1500
- ambient_weak_space = self.graded_ring().reduce_type("weak", degree=(self._weight-QQ(2*r), self._ep*(-1)**r))
1502
+ ambient_weak_space = self.graded_ring().reduce_type("weak",
1503
+ degree=(self._weight-QQ(2*r), self._ep*(-1)**r))
1501
1504
  order_inf = ambient_weak_space._l1 - order_1
1502
1505
 
1503
- if (max_exp == infinity):
1506
+ if max_exp == infinity:
1504
1507
  max_exp = order_inf
1505
- elif (max_exp < min_exp):
1506
- return []
1508
+ elif max_exp < min_exp:
1509
+ return ()
1507
1510
  else:
1508
1511
  max_exp = min(ZZ(max_exp), order_inf)
1509
1512
 
1510
- gens = []
1511
- for m in range(min_exp, max_exp + 1):
1512
- gens += [ self(ambient_weak_space.F_basis(m, order_1=order_1)*E2**r) ]
1513
-
1514
- return gens
1513
+ return tuple(self(ambient_weak_space.F_basis(m, order_1=order_1) * E2**r)
1514
+ for m in range(min_exp, max_exp + 1))
1515
1515
 
1516
1516
  def quasi_part_dimension(self, r=None, min_exp=0, max_exp=infinity, order_1=ZZ.zero()):
1517
1517
  r"""
@@ -2097,7 +2097,7 @@ class FormsSpace_abstract(FormsRing_abstract):
2097
2097
  q^-1 + O(q^5)
2098
2098
 
2099
2099
  sage: MF = ModularForms(k=36)
2100
- sage: MF.q_basis() == MF.gens()
2100
+ sage: MF.q_basis() == list(MF.gens())
2101
2101
  True
2102
2102
 
2103
2103
  sage: QF = QuasiModularForms(k=6)
@@ -2150,26 +2150,25 @@ class FormsSpace_abstract(FormsRing_abstract):
2150
2150
  raise ValueError("Index out of range: m={} >= {}=dimension + min_exp".format(m, column_len + min_exp))
2151
2151
 
2152
2152
  return q_basis[m - min_exp]
2153
- else:
2154
- row_len = self.required_laurent_prec(min_exp=min_exp, order_1=order_1) - min_exp
2155
- if (m >= row_len + min_exp):
2156
- raise ValueError("Index out of range: m={} >= {}=required_precision + min_exp".format(m, row_len + min_exp))
2157
-
2158
- A = self._quasi_form_matrix(min_exp=min_exp, order_1=order_1)
2159
- b = vector(self.coeff_ring(), row_len)
2160
- b[m - min_exp] = 1
2161
- try:
2162
- coord_vector = A.solve_right(b)
2163
- except ValueError:
2164
- raise ValueError("Unfortunately the q_basis vector (m={}, min_exp={}) doesn't exist in this case (this is rare/interesting, please report)".format(m, min_exp))
2165
2153
 
2166
- max_exp = order_inf + 1
2167
- basis = self.quasi_part_gens(min_exp=min_exp, max_exp=max_exp, order_1=order_1)
2154
+ row_len = self.required_laurent_prec(min_exp=min_exp, order_1=order_1) - min_exp
2155
+ if (m >= row_len + min_exp):
2156
+ raise ValueError("Index out of range: m={} >= {}=required_precision + min_exp".format(m, row_len + min_exp))
2168
2157
 
2169
- column_len = A.dimensions()[1]
2170
- el = self(sum([coord_vector[l] * basis[l] for l in range(0, column_len)]))
2158
+ A = self._quasi_form_matrix(min_exp=min_exp, order_1=order_1)
2159
+ b = vector(self.coeff_ring(), row_len)
2160
+ b[m - min_exp] = 1
2161
+ try:
2162
+ coord_vector = A.solve_right(b)
2163
+ except ValueError:
2164
+ raise ValueError("Unfortunately the q_basis vector (m={}, min_exp={}) doesn't exist in this case (this is rare/interesting, please report)".format(m, min_exp))
2171
2165
 
2172
- return el
2166
+ max_exp = order_inf + 1
2167
+ basis = self.quasi_part_gens(min_exp=min_exp, max_exp=max_exp, order_1=order_1)
2168
+
2169
+ column_len = A.dimensions()[1]
2170
+ return self(sum([coord_vector[l] * basis[l]
2171
+ for l in range(column_len)]))
2173
2172
 
2174
2173
  def rationalize_series(self, laurent_series, coeff_bound=1e-10, denom_factor=ZZ(1)):
2175
2174
  r"""
@@ -2347,9 +2346,8 @@ class FormsSpace_abstract(FormsRing_abstract):
2347
2346
 
2348
2347
  return rational_coeff / d**m
2349
2348
 
2350
- laurent_series = sum([rationalize_coefficient(laurent_series[m], m) * q**m for m in range(first_exp, laurent_series.exponents()[-1] + 1)]).add_bigoh(series_prec)
2351
-
2352
- return laurent_series
2349
+ return sum([rationalize_coefficient(laurent_series[m], m) * q**m
2350
+ for m in range(first_exp, laurent_series.exponents()[-1] + 1)]).add_bigoh(series_prec)
2353
2351
 
2354
2352
  # DEFAULT METHODS (should be overwritten in concrete classes)
2355
2353
 
@@ -2491,11 +2489,11 @@ class FormsSpace_abstract(FormsRing_abstract):
2491
2489
 
2492
2490
  return self.module()(self.ambient_space().coordinate_vector(v))
2493
2491
 
2494
- def gens(self):
2492
+ def gens(self) -> tuple:
2495
2493
  r"""
2496
2494
  This method should be overloaded by subclasses.
2497
2495
 
2498
- Return a basis of ``self``.
2496
+ Return a basis of ``self`` as a tuple.
2499
2497
 
2500
2498
  Note that the coordinate vector of elements of ``self``
2501
2499
  are with respect to this basis.
@@ -2504,11 +2502,10 @@ class FormsSpace_abstract(FormsRing_abstract):
2504
2502
 
2505
2503
  sage: from sage.modular.modform_hecketriangle.space import ModularForms
2506
2504
  sage: ModularForms(k=12).gens() # defined in space.py
2507
- [1 + 196560*q^2 + 16773120*q^3 + 398034000*q^4 + O(q^5),
2508
- q - 24*q^2 + 252*q^3 - 1472*q^4 + O(q^5)]
2505
+ (1 + 196560*q^2 + 16773120*q^3 + 398034000*q^4 + O(q^5),
2506
+ q - 24*q^2 + 252*q^3 - 1472*q^4 + O(q^5))
2509
2507
  """
2510
-
2511
- raise NotImplementedError("No generators are implemented yet for {}!".format(self))
2508
+ raise NotImplementedError(f"No generators are implemented yet for {self}!")
2512
2509
 
2513
2510
  def gen(self, k=0):
2514
2511
  r"""
@@ -154,8 +154,6 @@ class FormsRingElement(CommutativeAlgebraElement, UniqueRepresentation,
154
154
  sage: MeromorphicModularFormsRing(n=3)(x) == MeromorphicModularFormsRing(n=4)(x)
155
155
  False
156
156
  sage: MeromorphicModularFormsRing()(-1/x) is MeromorphicModularFormsRing()(1/(-x))
157
- False
158
- sage: MeromorphicModularFormsRing()(-1/x) == MeromorphicModularFormsRing()(1/(-x))
159
157
  True
160
158
  sage: MeromorphicModularFormsRing(base_ring=CC)(-1/x) == MeromorphicModularFormsRing()(1/(-x))
161
159
  True
@@ -357,7 +355,7 @@ class FormsRingElement(CommutativeAlgebraElement, UniqueRepresentation,
357
355
  d = self.parent().get_d(fix_d=True)
358
356
  return self.parent()(self._rat.subs(d=d))
359
357
 
360
- def is_homogeneous(self):
358
+ def is_homogeneous(self) -> bool:
361
359
  r"""
362
360
  Return whether ``self`` is homogeneous.
363
361
 
@@ -375,7 +373,6 @@ class FormsRingElement(CommutativeAlgebraElement, UniqueRepresentation,
375
373
  sage: QuasiModularFormsRing(n=infinity)(x*(x-y^2)+y^4).is_homogeneous() # needs sage.symbolic
376
374
  True
377
375
  """
378
-
379
376
  return self._weight is not None
380
377
 
381
378
  def weight(self):
@@ -459,10 +456,11 @@ class FormsRingElement(CommutativeAlgebraElement, UniqueRepresentation,
459
456
  """
460
457
  return not (self.AT("quasi") <= self._analytic_type)
461
458
 
462
- def is_weakly_holomorphic(self):
459
+ def is_weakly_holomorphic(self) -> bool:
463
460
  r"""
464
- Return whether ``self`` is weakly holomorphic
465
- in the sense that: ``self`` has at most a power of ``f_inf``
461
+ Return whether ``self`` is weakly holomorphic.
462
+
463
+ This means that ``self`` has at most a power of ``f_inf``
466
464
  in its denominator.
467
465
 
468
466
  EXAMPLES::
@@ -485,7 +483,7 @@ class FormsRingElement(CommutativeAlgebraElement, UniqueRepresentation,
485
483
 
486
484
  return self.AT("weak", "quasi") >= self._analytic_type
487
485
 
488
- def is_holomorphic(self):
486
+ def is_holomorphic(self) -> bool:
489
487
  r"""
490
488
  Return whether ``self`` is holomorphic
491
489
  in the sense that the denominator of ``self``
@@ -510,10 +508,11 @@ class FormsRingElement(CommutativeAlgebraElement, UniqueRepresentation,
510
508
 
511
509
  return self.AT("holo", "quasi") >= self._analytic_type
512
510
 
513
- def is_cuspidal(self):
511
+ def is_cuspidal(self) -> bool:
514
512
  r"""
515
- Return whether ``self`` is cuspidal
516
- in the sense that ``self`` is holomorphic and ``f_inf``
513
+ Return whether ``self`` is cuspidal.
514
+
515
+ This means that ``self`` is holomorphic and ``f_inf``
517
516
  divides the numerator.
518
517
 
519
518
  EXAMPLES::
@@ -536,7 +535,7 @@ class FormsRingElement(CommutativeAlgebraElement, UniqueRepresentation,
536
535
  """
537
536
  return self.AT("cusp", "quasi") >= self._analytic_type
538
537
 
539
- def is_zero(self):
538
+ def is_zero(self) -> bool:
540
539
  r"""
541
540
  Return whether ``self`` is the zero function.
542
541