passagemath-schemes 10.6.40__cp314-cp314-macosx_13_0_arm64.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 (314) hide show
  1. passagemath_schemes/.dylibs/libflint.22.0.dylib +0 -0
  2. passagemath_schemes/.dylibs/libgmp.10.dylib +0 -0
  3. passagemath_schemes/.dylibs/libgmpxx.4.dylib +0 -0
  4. passagemath_schemes/.dylibs/libmpfr.6.dylib +0 -0
  5. passagemath_schemes/__init__.py +3 -0
  6. passagemath_schemes-10.6.40.dist-info/METADATA +204 -0
  7. passagemath_schemes-10.6.40.dist-info/METADATA.bak +205 -0
  8. passagemath_schemes-10.6.40.dist-info/RECORD +314 -0
  9. passagemath_schemes-10.6.40.dist-info/WHEEL +6 -0
  10. passagemath_schemes-10.6.40.dist-info/top_level.txt +3 -0
  11. sage/all__sagemath_schemes.py +23 -0
  12. sage/databases/all__sagemath_schemes.py +7 -0
  13. sage/databases/cremona.py +1723 -0
  14. sage/dynamics/all__sagemath_schemes.py +2 -0
  15. sage/dynamics/arithmetic_dynamics/affine_ds.py +1083 -0
  16. sage/dynamics/arithmetic_dynamics/all.py +14 -0
  17. sage/dynamics/arithmetic_dynamics/berkovich_ds.py +1101 -0
  18. sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py +1543 -0
  19. sage/dynamics/arithmetic_dynamics/endPN_automorphism_group.py +2426 -0
  20. sage/dynamics/arithmetic_dynamics/endPN_minimal_model.py +1169 -0
  21. sage/dynamics/arithmetic_dynamics/generic_ds.py +663 -0
  22. sage/dynamics/arithmetic_dynamics/product_projective_ds.py +339 -0
  23. sage/dynamics/arithmetic_dynamics/projective_ds.py +9558 -0
  24. sage/dynamics/arithmetic_dynamics/projective_ds_helper.cpython-314-darwin.so +0 -0
  25. sage/dynamics/arithmetic_dynamics/projective_ds_helper.pyx +301 -0
  26. sage/dynamics/arithmetic_dynamics/wehlerK3.py +2576 -0
  27. sage/lfunctions/all.py +18 -0
  28. sage/lfunctions/dokchitser.py +745 -0
  29. sage/lfunctions/pari.py +818 -0
  30. sage/lfunctions/zero_sums.cpython-314-darwin.so +0 -0
  31. sage/lfunctions/zero_sums.pyx +1847 -0
  32. sage/modular/abvar/abvar.py +5135 -0
  33. sage/modular/abvar/abvar_ambient_jacobian.py +413 -0
  34. sage/modular/abvar/abvar_newform.py +244 -0
  35. sage/modular/abvar/all.py +8 -0
  36. sage/modular/abvar/constructor.py +186 -0
  37. sage/modular/abvar/cuspidal_subgroup.py +371 -0
  38. sage/modular/abvar/finite_subgroup.py +896 -0
  39. sage/modular/abvar/homology.py +720 -0
  40. sage/modular/abvar/homspace.py +998 -0
  41. sage/modular/abvar/lseries.py +415 -0
  42. sage/modular/abvar/morphism.py +935 -0
  43. sage/modular/abvar/torsion_point.py +274 -0
  44. sage/modular/abvar/torsion_subgroup.py +740 -0
  45. sage/modular/all.py +43 -0
  46. sage/modular/arithgroup/all.py +20 -0
  47. sage/modular/arithgroup/arithgroup_element.cpython-314-darwin.so +0 -0
  48. sage/modular/arithgroup/arithgroup_element.pyx +474 -0
  49. sage/modular/arithgroup/arithgroup_generic.py +1402 -0
  50. sage/modular/arithgroup/arithgroup_perm.py +2692 -0
  51. sage/modular/arithgroup/congroup.cpython-314-darwin.so +0 -0
  52. sage/modular/arithgroup/congroup.pyx +334 -0
  53. sage/modular/arithgroup/congroup_gamma.py +363 -0
  54. sage/modular/arithgroup/congroup_gamma0.py +692 -0
  55. sage/modular/arithgroup/congroup_gamma1.py +653 -0
  56. sage/modular/arithgroup/congroup_gammaH.py +1469 -0
  57. sage/modular/arithgroup/congroup_generic.py +628 -0
  58. sage/modular/arithgroup/congroup_sl2z.py +267 -0
  59. sage/modular/arithgroup/farey_symbol.cpython-314-darwin.so +0 -0
  60. sage/modular/arithgroup/farey_symbol.pyx +1066 -0
  61. sage/modular/arithgroup/tests.py +418 -0
  62. sage/modular/btquotients/all.py +4 -0
  63. sage/modular/btquotients/btquotient.py +3753 -0
  64. sage/modular/btquotients/pautomorphicform.py +2570 -0
  65. sage/modular/buzzard.py +100 -0
  66. sage/modular/congroup.py +29 -0
  67. sage/modular/congroup_element.py +13 -0
  68. sage/modular/cusps.py +1109 -0
  69. sage/modular/cusps_nf.py +1270 -0
  70. sage/modular/dims.py +569 -0
  71. sage/modular/dirichlet.py +3310 -0
  72. sage/modular/drinfeld_modform/all.py +2 -0
  73. sage/modular/drinfeld_modform/element.py +446 -0
  74. sage/modular/drinfeld_modform/ring.py +773 -0
  75. sage/modular/drinfeld_modform/tutorial.py +236 -0
  76. sage/modular/etaproducts.py +1065 -0
  77. sage/modular/hecke/algebra.py +746 -0
  78. sage/modular/hecke/all.py +20 -0
  79. sage/modular/hecke/ambient_module.py +1019 -0
  80. sage/modular/hecke/degenmap.py +119 -0
  81. sage/modular/hecke/element.py +325 -0
  82. sage/modular/hecke/hecke_operator.py +780 -0
  83. sage/modular/hecke/homspace.py +206 -0
  84. sage/modular/hecke/module.py +1767 -0
  85. sage/modular/hecke/morphism.py +174 -0
  86. sage/modular/hecke/submodule.py +989 -0
  87. sage/modular/hypergeometric_misc.cpython-314-darwin.so +0 -0
  88. sage/modular/hypergeometric_misc.pxd +4 -0
  89. sage/modular/hypergeometric_misc.pyx +166 -0
  90. sage/modular/hypergeometric_motive.py +2017 -0
  91. sage/modular/local_comp/all.py +2 -0
  92. sage/modular/local_comp/liftings.py +292 -0
  93. sage/modular/local_comp/local_comp.py +1071 -0
  94. sage/modular/local_comp/smoothchar.py +1825 -0
  95. sage/modular/local_comp/type_space.py +748 -0
  96. sage/modular/modform/all.py +30 -0
  97. sage/modular/modform/ambient.py +815 -0
  98. sage/modular/modform/ambient_R.py +177 -0
  99. sage/modular/modform/ambient_eps.py +306 -0
  100. sage/modular/modform/ambient_g0.py +124 -0
  101. sage/modular/modform/ambient_g1.py +204 -0
  102. sage/modular/modform/constructor.py +545 -0
  103. sage/modular/modform/cuspidal_submodule.py +708 -0
  104. sage/modular/modform/defaults.py +14 -0
  105. sage/modular/modform/eis_series.py +505 -0
  106. sage/modular/modform/eisenstein_submodule.py +663 -0
  107. sage/modular/modform/element.py +4131 -0
  108. sage/modular/modform/find_generators.py +59 -0
  109. sage/modular/modform/half_integral.py +154 -0
  110. sage/modular/modform/hecke_operator_on_qexp.py +247 -0
  111. sage/modular/modform/j_invariant.py +47 -0
  112. sage/modular/modform/l_series_gross_zagier.py +133 -0
  113. sage/modular/modform/l_series_gross_zagier_coeffs.cpython-314-darwin.so +0 -0
  114. sage/modular/modform/l_series_gross_zagier_coeffs.pyx +177 -0
  115. sage/modular/modform/notes.py +45 -0
  116. sage/modular/modform/numerical.py +514 -0
  117. sage/modular/modform/periods.py +14 -0
  118. sage/modular/modform/ring.py +1257 -0
  119. sage/modular/modform/space.py +1860 -0
  120. sage/modular/modform/submodule.py +118 -0
  121. sage/modular/modform/tests.py +64 -0
  122. sage/modular/modform/theta.py +110 -0
  123. sage/modular/modform/vm_basis.py +381 -0
  124. sage/modular/modform/weight1.py +220 -0
  125. sage/modular/modform_hecketriangle/abstract_ring.py +1932 -0
  126. sage/modular/modform_hecketriangle/abstract_space.py +2528 -0
  127. sage/modular/modform_hecketriangle/all.py +30 -0
  128. sage/modular/modform_hecketriangle/analytic_type.py +590 -0
  129. sage/modular/modform_hecketriangle/constructor.py +416 -0
  130. sage/modular/modform_hecketriangle/element.py +351 -0
  131. sage/modular/modform_hecketriangle/functors.py +752 -0
  132. sage/modular/modform_hecketriangle/graded_ring.py +541 -0
  133. sage/modular/modform_hecketriangle/graded_ring_element.py +2225 -0
  134. sage/modular/modform_hecketriangle/hecke_triangle_group_element.py +3352 -0
  135. sage/modular/modform_hecketriangle/hecke_triangle_groups.py +1432 -0
  136. sage/modular/modform_hecketriangle/readme.py +1214 -0
  137. sage/modular/modform_hecketriangle/series_constructor.py +580 -0
  138. sage/modular/modform_hecketriangle/space.py +1037 -0
  139. sage/modular/modform_hecketriangle/subspace.py +423 -0
  140. sage/modular/modsym/all.py +17 -0
  141. sage/modular/modsym/ambient.py +3846 -0
  142. sage/modular/modsym/boundary.py +1420 -0
  143. sage/modular/modsym/element.py +336 -0
  144. sage/modular/modsym/g1list.py +178 -0
  145. sage/modular/modsym/ghlist.py +182 -0
  146. sage/modular/modsym/hecke_operator.py +73 -0
  147. sage/modular/modsym/manin_symbol.cpython-314-darwin.so +0 -0
  148. sage/modular/modsym/manin_symbol.pxd +5 -0
  149. sage/modular/modsym/manin_symbol.pyx +497 -0
  150. sage/modular/modsym/manin_symbol_list.py +1295 -0
  151. sage/modular/modsym/modsym.py +400 -0
  152. sage/modular/modsym/modular_symbols.py +384 -0
  153. sage/modular/modsym/p1list.cpython-314-darwin.so +0 -0
  154. sage/modular/modsym/p1list.pxd +29 -0
  155. sage/modular/modsym/p1list.pyx +1372 -0
  156. sage/modular/modsym/p1list_nf.py +1241 -0
  157. sage/modular/modsym/relation_matrix.py +591 -0
  158. sage/modular/modsym/relation_matrix_pyx.cpython-314-darwin.so +0 -0
  159. sage/modular/modsym/relation_matrix_pyx.pyx +108 -0
  160. sage/modular/modsym/space.py +2468 -0
  161. sage/modular/modsym/subspace.py +455 -0
  162. sage/modular/modsym/tests.py +375 -0
  163. sage/modular/multiple_zeta.py +2632 -0
  164. sage/modular/multiple_zeta_F_algebra.py +786 -0
  165. sage/modular/overconvergent/all.py +6 -0
  166. sage/modular/overconvergent/genus0.py +1878 -0
  167. sage/modular/overconvergent/hecke_series.py +1187 -0
  168. sage/modular/overconvergent/weightspace.py +778 -0
  169. sage/modular/pollack_stevens/all.py +4 -0
  170. sage/modular/pollack_stevens/distributions.py +874 -0
  171. sage/modular/pollack_stevens/fund_domain.py +1572 -0
  172. sage/modular/pollack_stevens/manin_map.py +859 -0
  173. sage/modular/pollack_stevens/modsym.py +1593 -0
  174. sage/modular/pollack_stevens/padic_lseries.py +417 -0
  175. sage/modular/pollack_stevens/sigma0.py +534 -0
  176. sage/modular/pollack_stevens/space.py +1076 -0
  177. sage/modular/quasimodform/all.py +3 -0
  178. sage/modular/quasimodform/element.py +845 -0
  179. sage/modular/quasimodform/ring.py +828 -0
  180. sage/modular/quatalg/all.py +3 -0
  181. sage/modular/quatalg/brandt.py +1642 -0
  182. sage/modular/ssmod/all.py +8 -0
  183. sage/modular/ssmod/ssmod.py +827 -0
  184. sage/rings/all__sagemath_schemes.py +1 -0
  185. sage/rings/polynomial/all__sagemath_schemes.py +1 -0
  186. sage/rings/polynomial/binary_form_reduce.py +585 -0
  187. sage/schemes/all.py +41 -0
  188. sage/schemes/berkovich/all.py +6 -0
  189. sage/schemes/berkovich/berkovich_cp_element.py +2582 -0
  190. sage/schemes/berkovich/berkovich_space.py +748 -0
  191. sage/schemes/curves/affine_curve.py +2928 -0
  192. sage/schemes/curves/all.py +33 -0
  193. sage/schemes/curves/closed_point.py +434 -0
  194. sage/schemes/curves/constructor.py +381 -0
  195. sage/schemes/curves/curve.py +542 -0
  196. sage/schemes/curves/plane_curve_arrangement.py +1283 -0
  197. sage/schemes/curves/point.py +463 -0
  198. sage/schemes/curves/projective_curve.py +3026 -0
  199. sage/schemes/curves/zariski_vankampen.py +1932 -0
  200. sage/schemes/cyclic_covers/all.py +2 -0
  201. sage/schemes/cyclic_covers/charpoly_frobenius.py +320 -0
  202. sage/schemes/cyclic_covers/constructor.py +137 -0
  203. sage/schemes/cyclic_covers/cycliccover_finite_field.py +1309 -0
  204. sage/schemes/cyclic_covers/cycliccover_generic.py +310 -0
  205. sage/schemes/elliptic_curves/BSD.py +1036 -0
  206. sage/schemes/elliptic_curves/Qcurves.py +592 -0
  207. sage/schemes/elliptic_curves/addition_formulas_ring.py +94 -0
  208. sage/schemes/elliptic_curves/all.py +49 -0
  209. sage/schemes/elliptic_curves/cardinality.py +609 -0
  210. sage/schemes/elliptic_curves/cm.py +1102 -0
  211. sage/schemes/elliptic_curves/constructor.py +1552 -0
  212. sage/schemes/elliptic_curves/ec_database.py +175 -0
  213. sage/schemes/elliptic_curves/ell_curve_isogeny.py +3972 -0
  214. sage/schemes/elliptic_curves/ell_egros.py +459 -0
  215. sage/schemes/elliptic_curves/ell_field.py +2836 -0
  216. sage/schemes/elliptic_curves/ell_finite_field.py +3359 -0
  217. sage/schemes/elliptic_curves/ell_generic.py +3760 -0
  218. sage/schemes/elliptic_curves/ell_local_data.py +1207 -0
  219. sage/schemes/elliptic_curves/ell_modular_symbols.py +775 -0
  220. sage/schemes/elliptic_curves/ell_number_field.py +4220 -0
  221. sage/schemes/elliptic_curves/ell_padic_field.py +107 -0
  222. sage/schemes/elliptic_curves/ell_point.py +4787 -0
  223. sage/schemes/elliptic_curves/ell_rational_field.py +7368 -0
  224. sage/schemes/elliptic_curves/ell_tate_curve.py +671 -0
  225. sage/schemes/elliptic_curves/ell_torsion.py +436 -0
  226. sage/schemes/elliptic_curves/ell_wp.py +352 -0
  227. sage/schemes/elliptic_curves/formal_group.py +760 -0
  228. sage/schemes/elliptic_curves/gal_reps.py +1459 -0
  229. sage/schemes/elliptic_curves/gal_reps_number_field.py +1669 -0
  230. sage/schemes/elliptic_curves/gp_simon.py +152 -0
  231. sage/schemes/elliptic_curves/heegner.py +7335 -0
  232. sage/schemes/elliptic_curves/height.py +2109 -0
  233. sage/schemes/elliptic_curves/hom.py +1406 -0
  234. sage/schemes/elliptic_curves/hom_composite.py +934 -0
  235. sage/schemes/elliptic_curves/hom_frobenius.py +522 -0
  236. sage/schemes/elliptic_curves/hom_scalar.py +531 -0
  237. sage/schemes/elliptic_curves/hom_sum.py +682 -0
  238. sage/schemes/elliptic_curves/hom_velusqrt.py +1290 -0
  239. sage/schemes/elliptic_curves/homset.py +271 -0
  240. sage/schemes/elliptic_curves/isogeny_class.py +1521 -0
  241. sage/schemes/elliptic_curves/isogeny_small_degree.py +2797 -0
  242. sage/schemes/elliptic_curves/jacobian.py +237 -0
  243. sage/schemes/elliptic_curves/kodaira_symbol.py +344 -0
  244. sage/schemes/elliptic_curves/kraus.py +1014 -0
  245. sage/schemes/elliptic_curves/lseries_ell.py +943 -0
  246. sage/schemes/elliptic_curves/mod5family.py +105 -0
  247. sage/schemes/elliptic_curves/mod_poly.py +197 -0
  248. sage/schemes/elliptic_curves/mod_sym_num.cpython-314-darwin.so +0 -0
  249. sage/schemes/elliptic_curves/mod_sym_num.pyx +3796 -0
  250. sage/schemes/elliptic_curves/modular_parametrization.py +305 -0
  251. sage/schemes/elliptic_curves/padic_lseries.py +1793 -0
  252. sage/schemes/elliptic_curves/padics.py +1816 -0
  253. sage/schemes/elliptic_curves/period_lattice.py +2234 -0
  254. sage/schemes/elliptic_curves/period_lattice_region.cpython-314-darwin.so +0 -0
  255. sage/schemes/elliptic_curves/period_lattice_region.pyx +722 -0
  256. sage/schemes/elliptic_curves/saturation.py +715 -0
  257. sage/schemes/elliptic_curves/sha_tate.py +1158 -0
  258. sage/schemes/elliptic_curves/weierstrass_morphism.py +1117 -0
  259. sage/schemes/elliptic_curves/weierstrass_transform.py +200 -0
  260. sage/schemes/hyperelliptic_curves/all.py +6 -0
  261. sage/schemes/hyperelliptic_curves/constructor.py +291 -0
  262. sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py +1914 -0
  263. sage/schemes/hyperelliptic_curves/hyperelliptic_g2.py +192 -0
  264. sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +954 -0
  265. sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py +1332 -0
  266. sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py +84 -0
  267. sage/schemes/hyperelliptic_curves/invariants.py +410 -0
  268. sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +315 -0
  269. sage/schemes/hyperelliptic_curves/jacobian_g2.py +32 -0
  270. sage/schemes/hyperelliptic_curves/jacobian_generic.py +419 -0
  271. sage/schemes/hyperelliptic_curves/jacobian_homset.py +186 -0
  272. sage/schemes/hyperelliptic_curves/jacobian_morphism.py +875 -0
  273. sage/schemes/hyperelliptic_curves/kummer_surface.py +99 -0
  274. sage/schemes/hyperelliptic_curves/mestre.py +302 -0
  275. sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +3871 -0
  276. sage/schemes/jacobians/abstract_jacobian.py +277 -0
  277. sage/schemes/jacobians/all.py +2 -0
  278. sage/schemes/overview.py +161 -0
  279. sage/schemes/plane_conics/all.py +22 -0
  280. sage/schemes/plane_conics/con_field.py +1296 -0
  281. sage/schemes/plane_conics/con_finite_field.py +158 -0
  282. sage/schemes/plane_conics/con_number_field.py +456 -0
  283. sage/schemes/plane_conics/con_rational_field.py +406 -0
  284. sage/schemes/plane_conics/con_rational_function_field.py +580 -0
  285. sage/schemes/plane_conics/constructor.py +249 -0
  286. sage/schemes/plane_quartics/all.py +2 -0
  287. sage/schemes/plane_quartics/quartic_constructor.py +71 -0
  288. sage/schemes/plane_quartics/quartic_generic.py +73 -0
  289. sage/schemes/riemann_surfaces/all.py +1 -0
  290. sage/schemes/riemann_surfaces/riemann_surface.py +4117 -0
  291. sage_wheels/share/cremona/cremona_mini.db +0 -0
  292. sage_wheels/share/ellcurves/rank0 +30427 -0
  293. sage_wheels/share/ellcurves/rank1 +31871 -0
  294. sage_wheels/share/ellcurves/rank10 +6 -0
  295. sage_wheels/share/ellcurves/rank11 +6 -0
  296. sage_wheels/share/ellcurves/rank12 +1 -0
  297. sage_wheels/share/ellcurves/rank14 +1 -0
  298. sage_wheels/share/ellcurves/rank15 +1 -0
  299. sage_wheels/share/ellcurves/rank17 +1 -0
  300. sage_wheels/share/ellcurves/rank19 +1 -0
  301. sage_wheels/share/ellcurves/rank2 +2388 -0
  302. sage_wheels/share/ellcurves/rank20 +1 -0
  303. sage_wheels/share/ellcurves/rank21 +1 -0
  304. sage_wheels/share/ellcurves/rank22 +1 -0
  305. sage_wheels/share/ellcurves/rank23 +1 -0
  306. sage_wheels/share/ellcurves/rank24 +1 -0
  307. sage_wheels/share/ellcurves/rank28 +1 -0
  308. sage_wheels/share/ellcurves/rank3 +836 -0
  309. sage_wheels/share/ellcurves/rank4 +10 -0
  310. sage_wheels/share/ellcurves/rank5 +5 -0
  311. sage_wheels/share/ellcurves/rank6 +5 -0
  312. sage_wheels/share/ellcurves/rank7 +5 -0
  313. sage_wheels/share/ellcurves/rank8 +6 -0
  314. sage_wheels/share/ellcurves/rank9 +7 -0
@@ -0,0 +1,177 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs sage.libs.pari
3
+ """
4
+ Modular forms over a non-minimal base ring
5
+ """
6
+
7
+ #########################################################################
8
+ # Copyright (C) 2006 William Stein <wstein@gmail.com>
9
+ #
10
+ # Distributed under the terms of the GNU General Public License (GPL)
11
+ #
12
+ # http://www.gnu.org/licenses/
13
+ #########################################################################
14
+
15
+ from . import ambient
16
+ from .cuspidal_submodule import CuspidalSubmodule_R
17
+ from sage.rings.integer_ring import ZZ
18
+ from sage.misc.cachefunc import cached_method
19
+
20
+
21
+ class ModularFormsAmbient_R(ambient.ModularFormsAmbient):
22
+ def __init__(self, M, base_ring):
23
+ """
24
+ Ambient space of modular forms over a ring other than QQ.
25
+
26
+ EXAMPLES::
27
+
28
+ sage: M = ModularForms(23, 2, base_ring=GF(7)) # indirect doctest
29
+ sage: M
30
+ Modular Forms space of dimension 3 for Congruence Subgroup Gamma0(23)
31
+ of weight 2 over Finite Field of size 7
32
+ sage: M == loads(dumps(M))
33
+ True
34
+ """
35
+ self.__M = M
36
+ if M.character() is not None:
37
+ self.__R_character = M.character().change_ring(base_ring)
38
+ else:
39
+ self.__R_character = None
40
+ ambient.ModularFormsAmbient.__init__(self, M.group(), M.weight(), base_ring, M.character(), M._eis_only)
41
+
42
+ @cached_method(key=lambda self,sign: ZZ(sign)) # convert sign to an Integer before looking this up in the cache
43
+ def modular_symbols(self, sign=0):
44
+ r"""
45
+ Return the space of modular symbols attached to this space, with the given sign (default 0).
46
+
47
+ TESTS::
48
+
49
+ sage: # needs sage.rings.number_field
50
+ sage: K.<i> = QuadraticField(-1)
51
+ sage: chi = DirichletGroup(5, base_ring=K).0
52
+ sage: x = polygen(ZZ, 'x')
53
+ sage: L.<c> = K.extension(x^2 - 402*i)
54
+ sage: M = ModularForms(chi, 7, base_ring=L)
55
+ sage: symbs = M.modular_symbols()
56
+ sage: symbs.character() == chi
57
+ True
58
+ sage: symbs.base_ring() == L
59
+ True
60
+ """
61
+ sign = ZZ(sign)
62
+ return self.__M.modular_symbols(sign).change_ring(self.base_ring())
63
+
64
+ def _repr_(self):
65
+ """
66
+ String representation for ``self``.
67
+
68
+ EXAMPLES::
69
+
70
+ sage: M = ModularForms(23,2,base_ring=GF(7)) # indirect doctest
71
+ sage: M._repr_()
72
+ 'Modular Forms space of dimension 3 for Congruence Subgroup Gamma0(23) of weight 2 over Finite Field of size 7'
73
+
74
+ sage: # needs sage.rings.number_field
75
+ sage: chi = DirichletGroup(109).0 ** 36
76
+ sage: ModularForms(chi, 2, base_ring = chi.base_ring())
77
+ Modular Forms space of dimension 9, character [zeta3] and weight 2 over Cyclotomic Field of order 108 and degree 36
78
+ """
79
+ s = str(self.__M)
80
+ i = s.find('over')
81
+ if i != -1:
82
+ s = s[:i]
83
+ return s + 'over %s' % self.base_ring()
84
+
85
+ def _compute_q_expansion_basis(self, prec=None):
86
+ """
87
+ Compute `q`-expansions for a basis of ``self`` to precision ``prec``.
88
+
89
+ EXAMPLES::
90
+
91
+ sage: M = ModularForms(23,2,base_ring=GF(7))
92
+ sage: M._compute_q_expansion_basis(10)
93
+ [q + 6*q^3 + 6*q^4 + 5*q^6 + 2*q^7 + 6*q^8 + 2*q^9 + O(q^10),
94
+ q^2 + 5*q^3 + 6*q^4 + 2*q^5 + q^6 + 2*q^7 + 5*q^8 + O(q^10),
95
+ 1 + 5*q^3 + 5*q^4 + 5*q^6 + 3*q^8 + 5*q^9 + O(q^10)]
96
+
97
+ TESTS:
98
+
99
+ This checks that :issue:`13445` is fixed::
100
+
101
+ sage: M = ModularForms(Gamma0(11), base_ring=GF(11))
102
+ sage: S = M.cuspidal_subspace()
103
+ sage: 0 in [f.valuation() for f in S.basis()]
104
+ False
105
+ sage: from sage.modular.dims import dimension_cusp_forms
106
+ sage: len(S.basis()) == dimension_cusp_forms(Gamma0(11), 2)
107
+ True
108
+ """
109
+ if prec is None:
110
+ prec = self.prec()
111
+ R = self._q_expansion_ring()
112
+ c = self.base_ring().characteristic()
113
+ if c == 0:
114
+ B = self.__M.q_expansion_basis(prec)
115
+ return [R(f) for f in B]
116
+ elif c.is_prime_power():
117
+ K = self.base_ring()
118
+ p = K.characteristic().prime_factors()[0]
119
+ from sage.rings.finite_rings.finite_field_constructor import GF
120
+ Kp = GF(p)
121
+ newB = [f.change_ring(K) for f in list(self.__M.cuspidal_subspace().q_integral_basis(prec))]
122
+ A = Kp**prec
123
+ gens = [f.padded_list(prec) for f in newB]
124
+ V = A.span(gens)
125
+ B = [f.change_ring(K) for f in self.__M.q_integral_basis(prec)]
126
+ for f in B:
127
+ fc = f.padded_list(prec)
128
+ gens.append(fc)
129
+ if not A.span(gens) == V:
130
+ newB.append(f)
131
+ V = A.span(gens)
132
+ if len(newB) != self.dimension():
133
+ raise RuntimeError("The dimension of the space is %s but the basis we computed has %s elements" % (self.dimension(), len(newB)))
134
+ lst = [R(f) for f in newB]
135
+ return [f/f[f.valuation()] for f in lst]
136
+ else:
137
+ # this returns a basis of q-expansions, without guaranteeing that
138
+ # the first vectors form a basis of the cuspidal subspace
139
+ # TODO: bring this in line with the other cases
140
+ # simply using the above code fails because free modules over
141
+ # general rings do not have a .span() method
142
+ B = self.__M.q_integral_basis(prec)
143
+ return [R(f) for f in B]
144
+
145
+ def cuspidal_submodule(self):
146
+ r"""
147
+ Return the cuspidal subspace of this space.
148
+
149
+ EXAMPLES::
150
+
151
+ sage: # needs sage.rings.number_field
152
+ sage: C = CuspForms(7, 4, base_ring=CyclotomicField(5)) # indirect doctest
153
+ sage: type(C)
154
+ <class 'sage.modular.modform.cuspidal_submodule.CuspidalSubmodule_R_with_category'>
155
+ """
156
+ return CuspidalSubmodule_R(self)
157
+
158
+ def change_ring(self, R):
159
+ r"""
160
+ Return this modular forms space with the base ring changed to the ring R.
161
+
162
+ EXAMPLES::
163
+
164
+ sage: # needs sage.rings.number_field
165
+ sage: chi = DirichletGroup(109, CyclotomicField(3)).0
166
+ sage: M9 = ModularForms(chi, 2, base_ring = CyclotomicField(9))
167
+ sage: M9.change_ring(CyclotomicField(15))
168
+ Modular Forms space of dimension 10, character [zeta3 + 1] and weight 2
169
+ over Cyclotomic Field of order 15 and degree 8
170
+ sage: M9.change_ring(QQ)
171
+ Traceback (most recent call last):
172
+ ...
173
+ ValueError: Space cannot be defined over Rational Field
174
+ """
175
+ if not R.has_coerce_map_from(self.__M.base_ring()):
176
+ raise ValueError("Space cannot be defined over %s" % R)
177
+ return ModularFormsAmbient_R(self.__M, R)
@@ -0,0 +1,306 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs sage.libs.pari sage.rings.number_field
3
+ r"""
4
+ Modular forms with character
5
+
6
+ EXAMPLES::
7
+
8
+ sage: eps = DirichletGroup(13).0
9
+ sage: M = ModularForms(eps^2, 2); M
10
+ Modular Forms space of dimension 3, character [zeta6] and weight 2 over
11
+ Cyclotomic Field of order 6 and degree 2
12
+
13
+ sage: S = M.cuspidal_submodule(); S
14
+ Cuspidal subspace of dimension 1 of Modular Forms space of dimension 3,
15
+ character [zeta6] and weight 2 over Cyclotomic Field of order 6 and degree 2
16
+ sage: S.modular_symbols()
17
+ Modular Symbols subspace of dimension 2 of
18
+ Modular Symbols space of dimension 4 and level 13, weight 2, character [zeta6],
19
+ sign 0, over Cyclotomic Field of order 6 and degree 2
20
+
21
+ We create a spaces associated to Dirichlet characters of modulus 225::
22
+
23
+ sage: e = DirichletGroup(225).0
24
+ sage: e.order()
25
+ 6
26
+ sage: e.base_ring()
27
+ Cyclotomic Field of order 60 and degree 16
28
+ sage: M = ModularForms(e,3)
29
+
30
+ Notice that the base ring is "minimized"::
31
+
32
+ sage: M
33
+ Modular Forms space of dimension 66, character [zeta6, 1] and weight 3
34
+ over Cyclotomic Field of order 6 and degree 2
35
+
36
+ If we don't want the base ring to change, we can explicitly specify it::
37
+
38
+ sage: ModularForms(e, 3, e.base_ring())
39
+ Modular Forms space of dimension 66, character [zeta6, 1] and weight 3
40
+ over Cyclotomic Field of order 60 and degree 16
41
+
42
+ Next we create a space associated to a Dirichlet character of order 20::
43
+
44
+ sage: e = DirichletGroup(225).1
45
+ sage: e.order()
46
+ 20
47
+ sage: e.base_ring()
48
+ Cyclotomic Field of order 60 and degree 16
49
+ sage: M = ModularForms(e,17); M
50
+ Modular Forms space of dimension 484, character [1, zeta20] and
51
+ weight 17 over Cyclotomic Field of order 20 and degree 8
52
+
53
+ We compute the Eisenstein subspace, which is fast even though
54
+ the dimension of the space is large (since an explicit basis
55
+ of `q`-expansions has not been computed yet).
56
+
57
+ ::
58
+
59
+ sage: M.eisenstein_submodule()
60
+ Eisenstein subspace of dimension 8 of Modular Forms space of
61
+ dimension 484, character [1, zeta20] and weight 17 over
62
+ Cyclotomic Field of order 20 and degree 8
63
+
64
+ sage: M.cuspidal_submodule()
65
+ Cuspidal subspace of dimension 476 of Modular Forms space of dimension 484,
66
+ character [1, zeta20] and weight 17 over Cyclotomic Field of order 20 and degree 8
67
+
68
+ TESTS::
69
+
70
+ sage: m = ModularForms(DirichletGroup(20).1,5)
71
+ sage: m == loads(dumps(m))
72
+ True
73
+ sage: type(m)
74
+ <class 'sage.modular.modform.ambient_eps.ModularFormsAmbient_eps_with_category'>
75
+ """
76
+
77
+ #########################################################################
78
+ # Copyright (C) 2006 William Stein <wstein@gmail.com>
79
+ #
80
+ # Distributed under the terms of the GNU General Public License (GPL)
81
+ #
82
+ # http://www.gnu.org/licenses/
83
+ #########################################################################
84
+
85
+ from sage.rings.integer import Integer
86
+
87
+ import sage.modular.arithgroup.all as arithgroup
88
+ import sage.modular.dirichlet as dirichlet
89
+ import sage.modular.modsym.modsym as modsym
90
+ from sage.misc.cachefunc import cached_method
91
+
92
+ from .ambient import ModularFormsAmbient
93
+
94
+ from . import ambient_R
95
+ from . import cuspidal_submodule
96
+ from . import eisenstein_submodule
97
+
98
+
99
+ class ModularFormsAmbient_eps(ModularFormsAmbient):
100
+ """
101
+ A space of modular forms with character.
102
+ """
103
+ def __init__(self, character, weight=2, base_ring=None, eis_only=False):
104
+ """
105
+ Create an ambient modular forms space with character.
106
+
107
+ .. NOTE::
108
+
109
+ The base ring must be of characteristic 0. The ambient_R
110
+ Python module is used for computing in characteristic p,
111
+ which we view as the reduction of characteristic 0.
112
+
113
+ INPUT:
114
+
115
+ - ``weight`` -- integer
116
+
117
+ - ``character`` -- dirichlet.DirichletCharacter
118
+
119
+ - ``base_ring`` -- base field
120
+
121
+ EXAMPLES::
122
+
123
+ sage: m = ModularForms(DirichletGroup(11).0,3); m
124
+ Modular Forms space of dimension 3, character [zeta10] and weight 3 over
125
+ Cyclotomic Field of order 10 and degree 4
126
+ sage: type(m)
127
+ <class 'sage.modular.modform.ambient_eps.ModularFormsAmbient_eps_with_category'>
128
+ """
129
+ if not isinstance(character, dirichlet.DirichletCharacter):
130
+ raise TypeError("character (=%s) must be a Dirichlet character" % character)
131
+ if base_ring is None:
132
+ base_ring = character.base_ring()
133
+ if character.base_ring() != base_ring:
134
+ character = character.change_ring(base_ring)
135
+ if base_ring.characteristic() != 0:
136
+ raise ValueError("the base ring must have characteristic 0.")
137
+ group = arithgroup.Gamma1(character.modulus())
138
+ base_ring = character.base_ring()
139
+ ModularFormsAmbient.__init__(self, group, weight, base_ring, character, eis_only)
140
+
141
+ def _repr_(self):
142
+ """
143
+ String representation of this space with character.
144
+
145
+ EXAMPLES::
146
+
147
+ sage: m = ModularForms(DirichletGroup(8).1,2)
148
+ sage: m._repr_()
149
+ 'Modular Forms space of dimension 2, character [1, -1] and weight 2 over Rational Field'
150
+
151
+ sage: m = ModularForms(DirichletGroup(31, QQ).0, 1, eis_only=True)
152
+ sage: m._repr_()
153
+ 'Modular Forms space of character [-1] and weight 1 over Rational Field'
154
+
155
+ You can rename the space with the rename command.
156
+
157
+ ::
158
+
159
+ sage: m.rename('Modforms of level 8')
160
+ sage: m
161
+ Modforms of level 8
162
+ """
163
+ if self._eis_only:
164
+ return "Modular Forms space of character %s and weight %s over %s" % (
165
+ self.character()._repr_short_(), self.weight(), self.base_ring())
166
+ else:
167
+ return "Modular Forms space of dimension %s, character %s and weight %s over %s" % (
168
+ self.dimension(), self.character()._repr_short_(), self.weight(), self.base_ring())
169
+
170
+ @cached_method
171
+ def cuspidal_submodule(self):
172
+ """
173
+ Return the cuspidal submodule of this ambient space of modular forms.
174
+
175
+ EXAMPLES::
176
+
177
+ sage: eps = DirichletGroup(4).0
178
+ sage: M = ModularForms(eps, 5); M
179
+ Modular Forms space of dimension 3, character [-1] and weight 5
180
+ over Rational Field
181
+ sage: M.cuspidal_submodule()
182
+ Cuspidal subspace of dimension 1 of Modular Forms space of dimension 3,
183
+ character [-1] and weight 5 over Rational Field
184
+ """
185
+ if self.weight() > 1:
186
+ return cuspidal_submodule.CuspidalSubmodule_eps(self)
187
+ else:
188
+ return cuspidal_submodule.CuspidalSubmodule_wt1_eps(self)
189
+
190
+ def change_ring(self, base_ring):
191
+ """
192
+ Return space with same defining parameters as this ambient
193
+ space of modular symbols, but defined over a different base
194
+ ring.
195
+
196
+ EXAMPLES::
197
+
198
+ sage: m = ModularForms(DirichletGroup(13).0^2,2); m
199
+ Modular Forms space of dimension 3, character [zeta6] and weight 2 over
200
+ Cyclotomic Field of order 6 and degree 2
201
+ sage: m.change_ring(CyclotomicField(12))
202
+ Modular Forms space of dimension 3, character [zeta6] and weight 2 over
203
+ Cyclotomic Field of order 12 and degree 4
204
+
205
+ It must be possible to change the ring of the underlying Dirichlet character::
206
+
207
+ sage: m.change_ring(QQ)
208
+ Traceback (most recent call last):
209
+ ...
210
+ TypeError: Unable to coerce zeta6 to a rational
211
+ """
212
+ if self.base_ring() == base_ring:
213
+ return self
214
+ return ambient_R.ModularFormsAmbient_R(self, base_ring=base_ring)
215
+
216
+ @cached_method(key=lambda self, sign: Integer(sign)) # convert sign to an Integer before looking this up in the cache
217
+ def modular_symbols(self, sign=0):
218
+ """
219
+ Return corresponding space of modular symbols with given sign.
220
+
221
+ EXAMPLES::
222
+
223
+ sage: eps = DirichletGroup(13).0
224
+ sage: M = ModularForms(eps^2, 2)
225
+ sage: M.modular_symbols()
226
+ Modular Symbols space of dimension 4 and level 13, weight 2,
227
+ character [zeta6], sign 0, over Cyclotomic Field of order 6 and degree 2
228
+ sage: M.modular_symbols(1)
229
+ Modular Symbols space of dimension 3 and level 13, weight 2,
230
+ character [zeta6], sign 1, over Cyclotomic Field of order 6 and degree 2
231
+ sage: M.modular_symbols(-1)
232
+ Modular Symbols space of dimension 1 and level 13, weight 2,
233
+ character [zeta6], sign -1, over Cyclotomic Field of order 6 and degree 2
234
+ sage: M.modular_symbols(2)
235
+ Traceback (most recent call last):
236
+ ...
237
+ ValueError: sign must be -1, 0, or 1
238
+ """
239
+ sign = Integer(sign)
240
+ return modsym.ModularSymbols(self.character(),
241
+ weight=self.weight(),
242
+ sign=sign,
243
+ base_ring=self.base_ring())
244
+
245
+ @cached_method
246
+ def eisenstein_submodule(self):
247
+ """
248
+ Return the submodule of this ambient module with character that is
249
+ spanned by Eisenstein series. This is the Hecke stable complement
250
+ of the cuspidal submodule.
251
+
252
+ EXAMPLES::
253
+
254
+ sage: m = ModularForms(DirichletGroup(13).0^2,2); m
255
+ Modular Forms space of dimension 3, character [zeta6] and weight 2 over
256
+ Cyclotomic Field of order 6 and degree 2
257
+ sage: m.eisenstein_submodule()
258
+ Eisenstein subspace of dimension 2 of Modular Forms space of dimension 3,
259
+ character [zeta6] and weight 2 over Cyclotomic Field of order 6 and degree 2
260
+ """
261
+ return eisenstein_submodule.EisensteinSubmodule_eps(self)
262
+
263
+ def hecke_module_of_level(self, N):
264
+ r"""
265
+ Return the Hecke module of level N corresponding to ``self``, which is the
266
+ domain or codomain of a degeneracy map from ``self``. Here N must be either
267
+ a divisor or a multiple of the level of ``self``, and a multiple of the
268
+ conductor of the character of ``self``.
269
+
270
+ EXAMPLES::
271
+
272
+ sage: M = ModularForms(DirichletGroup(15).0, 3); M.character().conductor()
273
+ 3
274
+ sage: M.hecke_module_of_level(3)
275
+ Modular Forms space of dimension 2, character [-1] and weight 3
276
+ over Rational Field
277
+ sage: M.hecke_module_of_level(5)
278
+ Traceback (most recent call last):
279
+ ...
280
+ ValueError: conductor(=3) must divide M(=5)
281
+ sage: M.hecke_module_of_level(30)
282
+ Modular Forms space of dimension 16, character [-1, 1] and weight 3
283
+ over Rational Field
284
+ """
285
+ from . import constructor
286
+ if N % self.level() == 0:
287
+ return constructor.ModularForms(self.character().extend(N), self.weight(), self.base_ring(), prec=self.prec())
288
+ elif self.level() % N == 0:
289
+ return constructor.ModularForms(self.character().restrict(N), self.weight(), self.base_ring(), prec=self.prec())
290
+ else:
291
+ raise ValueError("N (=%s) must be a divisor or a multiple of the level of self (=%s)" % (N, self.level()))
292
+
293
+ def _pari_init_(self):
294
+ """
295
+ Conversion to Pari.
296
+
297
+ EXAMPLES::
298
+
299
+ sage: m = ModularForms(DirichletGroup(17).0^2, 2)
300
+ sage: pari.mfdim(m)
301
+ 3
302
+ sage: pari.mfparams(m)
303
+ [17, 2, Mod(9, 17), 4, t^4 + 1]
304
+ """
305
+ from sage.libs.pari import pari
306
+ return pari.mfinit([self.level(), self.weight(), self.character()], 4)
@@ -0,0 +1,124 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs sage.libs.pari
3
+ r"""
4
+ Modular forms for `\Gamma_0(N)` over `\QQ`
5
+
6
+ TESTS::
7
+
8
+ sage: m = ModularForms(Gamma0(389),6)
9
+ sage: loads(dumps(m)) == m
10
+ True
11
+ """
12
+
13
+ #########################################################################
14
+ # Copyright (C) 2006 William Stein <wstein@gmail.com>
15
+ #
16
+ # Distributed under the terms of the GNU General Public License (GPL)
17
+ #
18
+ # http://www.gnu.org/licenses/
19
+ #########################################################################
20
+
21
+ from sage.rings.rational_field import Q as QQ
22
+
23
+ import sage.modular.arithgroup.all as arithgroup
24
+
25
+ from . import ambient
26
+ from . import cuspidal_submodule
27
+ from . import eisenstein_submodule
28
+
29
+ from sage.misc.cachefunc import cached_method
30
+
31
+
32
+ class ModularFormsAmbient_g0_Q(ambient.ModularFormsAmbient):
33
+ r"""
34
+ A space of modular forms for `\Gamma_0(N)` over `\QQ`.
35
+ """
36
+ def __init__(self, level, weight):
37
+ r"""
38
+ Create a space of modular symbols for `\Gamma_0(N)` of given
39
+ weight defined over `\QQ`.
40
+
41
+ EXAMPLES::
42
+
43
+ sage: m = ModularForms(Gamma0(11),4); m
44
+ Modular Forms space of dimension 4 for Congruence Subgroup Gamma0(11)
45
+ of weight 4 over Rational Field
46
+ sage: type(m)
47
+ <class 'sage.modular.modform.ambient_g0.ModularFormsAmbient_g0_Q_with_category'>
48
+ """
49
+ ambient.ModularFormsAmbient.__init__(self, arithgroup.Gamma0(level), weight, QQ)
50
+
51
+ def _pari_init_(self):
52
+ """
53
+ Conversion to Pari.
54
+
55
+ EXAMPLES::
56
+
57
+ sage: m = ModularForms(Gamma0(11),4)
58
+ sage: pari.mfdim(m)
59
+ 4
60
+ sage: pari.mfparams(m)
61
+ [11, 4, 1, 4, t - 1]
62
+ """
63
+ from sage.libs.pari import pari
64
+ return pari.mfinit([self.level(), self.weight()], 4)
65
+
66
+ ####################################################################
67
+ # Computation of Special Submodules
68
+ ####################################################################
69
+ @cached_method
70
+ def cuspidal_submodule(self):
71
+ r"""
72
+ Return the cuspidal submodule of this space of modular forms for
73
+ `\Gamma_0(N)`.
74
+
75
+ EXAMPLES::
76
+
77
+ sage: m = ModularForms(Gamma0(33),4)
78
+ sage: s = m.cuspidal_submodule(); s
79
+ Cuspidal subspace of dimension 10 of Modular Forms space of dimension 14
80
+ for Congruence Subgroup Gamma0(33) of weight 4 over Rational Field
81
+ sage: type(s)
82
+ <class 'sage.modular.modform.cuspidal_submodule.CuspidalSubmodule_g0_Q_with_category'>
83
+ """
84
+ if self.level() == 1:
85
+ return cuspidal_submodule.CuspidalSubmodule_level1_Q(self)
86
+ else:
87
+ return cuspidal_submodule.CuspidalSubmodule_g0_Q(self)
88
+
89
+ @cached_method
90
+ def eisenstein_submodule(self):
91
+ r"""
92
+ Return the Eisenstein submodule of this space of modular forms for
93
+ `\Gamma_0(N)`.
94
+
95
+ EXAMPLES::
96
+
97
+ sage: m = ModularForms(Gamma0(389),6)
98
+ sage: m.eisenstein_submodule()
99
+ Eisenstein subspace of dimension 2 of Modular Forms space of dimension 163
100
+ for Congruence Subgroup Gamma0(389) of weight 6 over Rational Field
101
+ """
102
+ return eisenstein_submodule.EisensteinSubmodule_g0_Q(self)
103
+
104
+ def _compute_atkin_lehner_matrix(self, d):
105
+ r"""
106
+ Compute the matrix of the Atkin-Lehner operator W_d acting on self,
107
+ where d is a divisor of the level. This is only implemented in the
108
+ (trivial) level 1 case.
109
+
110
+ EXAMPLES::
111
+
112
+ sage: ModularForms(1, 30).atkin_lehner_operator()
113
+ Hecke module morphism Atkin-Lehner operator W_1 defined by the matrix
114
+ [1 0 0]
115
+ [0 1 0]
116
+ [0 0 1]
117
+ Domain: Modular Forms space of dimension 3 for Modular Group SL(2,Z) ...
118
+ Codomain: Modular Forms space of dimension 3 for Modular Group SL(2,Z) ...
119
+ """
120
+ if self.level() == 1:
121
+ from sage.matrix.matrix_space import MatrixSpace
122
+ return MatrixSpace(self.base_ring(), self.rank())(1)
123
+ else:
124
+ raise NotImplementedError