passagemath-schemes 10.6.47__cp312-cp312-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.
Files changed (311) 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.47.dist-info/METADATA +204 -0
  7. passagemath_schemes-10.6.47.dist-info/METADATA.bak +205 -0
  8. passagemath_schemes-10.6.47.dist-info/RECORD +311 -0
  9. passagemath_schemes-10.6.47.dist-info/WHEEL +6 -0
  10. passagemath_schemes-10.6.47.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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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_nf.py +1241 -0
  154. sage/modular/modsym/relation_matrix.py +591 -0
  155. sage/modular/modsym/relation_matrix_pyx.cpython-312-darwin.so +0 -0
  156. sage/modular/modsym/relation_matrix_pyx.pyx +108 -0
  157. sage/modular/modsym/space.py +2468 -0
  158. sage/modular/modsym/subspace.py +455 -0
  159. sage/modular/modsym/tests.py +375 -0
  160. sage/modular/multiple_zeta.py +2632 -0
  161. sage/modular/multiple_zeta_F_algebra.py +786 -0
  162. sage/modular/overconvergent/all.py +6 -0
  163. sage/modular/overconvergent/genus0.py +1878 -0
  164. sage/modular/overconvergent/hecke_series.py +1187 -0
  165. sage/modular/overconvergent/weightspace.py +778 -0
  166. sage/modular/pollack_stevens/all.py +4 -0
  167. sage/modular/pollack_stevens/distributions.py +874 -0
  168. sage/modular/pollack_stevens/fund_domain.py +1572 -0
  169. sage/modular/pollack_stevens/manin_map.py +859 -0
  170. sage/modular/pollack_stevens/modsym.py +1593 -0
  171. sage/modular/pollack_stevens/padic_lseries.py +417 -0
  172. sage/modular/pollack_stevens/sigma0.py +534 -0
  173. sage/modular/pollack_stevens/space.py +1076 -0
  174. sage/modular/quasimodform/all.py +3 -0
  175. sage/modular/quasimodform/element.py +845 -0
  176. sage/modular/quasimodform/ring.py +828 -0
  177. sage/modular/quatalg/all.py +3 -0
  178. sage/modular/quatalg/brandt.py +1642 -0
  179. sage/modular/ssmod/all.py +8 -0
  180. sage/modular/ssmod/ssmod.py +827 -0
  181. sage/rings/all__sagemath_schemes.py +1 -0
  182. sage/rings/polynomial/all__sagemath_schemes.py +1 -0
  183. sage/rings/polynomial/binary_form_reduce.py +585 -0
  184. sage/schemes/all.py +41 -0
  185. sage/schemes/berkovich/all.py +6 -0
  186. sage/schemes/berkovich/berkovich_cp_element.py +2582 -0
  187. sage/schemes/berkovich/berkovich_space.py +748 -0
  188. sage/schemes/curves/affine_curve.py +2928 -0
  189. sage/schemes/curves/all.py +33 -0
  190. sage/schemes/curves/closed_point.py +434 -0
  191. sage/schemes/curves/constructor.py +381 -0
  192. sage/schemes/curves/curve.py +542 -0
  193. sage/schemes/curves/plane_curve_arrangement.py +1283 -0
  194. sage/schemes/curves/point.py +463 -0
  195. sage/schemes/curves/projective_curve.py +3026 -0
  196. sage/schemes/curves/zariski_vankampen.py +1932 -0
  197. sage/schemes/cyclic_covers/all.py +2 -0
  198. sage/schemes/cyclic_covers/charpoly_frobenius.py +320 -0
  199. sage/schemes/cyclic_covers/constructor.py +137 -0
  200. sage/schemes/cyclic_covers/cycliccover_finite_field.py +1309 -0
  201. sage/schemes/cyclic_covers/cycliccover_generic.py +310 -0
  202. sage/schemes/elliptic_curves/BSD.py +1036 -0
  203. sage/schemes/elliptic_curves/Qcurves.py +592 -0
  204. sage/schemes/elliptic_curves/addition_formulas_ring.py +94 -0
  205. sage/schemes/elliptic_curves/all.py +49 -0
  206. sage/schemes/elliptic_curves/cardinality.py +609 -0
  207. sage/schemes/elliptic_curves/cm.py +1102 -0
  208. sage/schemes/elliptic_curves/constructor.py +1552 -0
  209. sage/schemes/elliptic_curves/ec_database.py +175 -0
  210. sage/schemes/elliptic_curves/ell_curve_isogeny.py +3972 -0
  211. sage/schemes/elliptic_curves/ell_egros.py +459 -0
  212. sage/schemes/elliptic_curves/ell_field.py +2836 -0
  213. sage/schemes/elliptic_curves/ell_finite_field.py +3359 -0
  214. sage/schemes/elliptic_curves/ell_generic.py +3760 -0
  215. sage/schemes/elliptic_curves/ell_local_data.py +1207 -0
  216. sage/schemes/elliptic_curves/ell_modular_symbols.py +775 -0
  217. sage/schemes/elliptic_curves/ell_number_field.py +4220 -0
  218. sage/schemes/elliptic_curves/ell_padic_field.py +107 -0
  219. sage/schemes/elliptic_curves/ell_point.py +4787 -0
  220. sage/schemes/elliptic_curves/ell_rational_field.py +7368 -0
  221. sage/schemes/elliptic_curves/ell_tate_curve.py +671 -0
  222. sage/schemes/elliptic_curves/ell_torsion.py +436 -0
  223. sage/schemes/elliptic_curves/ell_wp.py +352 -0
  224. sage/schemes/elliptic_curves/formal_group.py +760 -0
  225. sage/schemes/elliptic_curves/gal_reps.py +1459 -0
  226. sage/schemes/elliptic_curves/gal_reps_number_field.py +1669 -0
  227. sage/schemes/elliptic_curves/gp_simon.py +152 -0
  228. sage/schemes/elliptic_curves/heegner.py +7335 -0
  229. sage/schemes/elliptic_curves/height.py +2109 -0
  230. sage/schemes/elliptic_curves/hom.py +1406 -0
  231. sage/schemes/elliptic_curves/hom_composite.py +934 -0
  232. sage/schemes/elliptic_curves/hom_frobenius.py +522 -0
  233. sage/schemes/elliptic_curves/hom_scalar.py +531 -0
  234. sage/schemes/elliptic_curves/hom_sum.py +682 -0
  235. sage/schemes/elliptic_curves/hom_velusqrt.py +1290 -0
  236. sage/schemes/elliptic_curves/homset.py +271 -0
  237. sage/schemes/elliptic_curves/isogeny_class.py +1521 -0
  238. sage/schemes/elliptic_curves/isogeny_small_degree.py +2797 -0
  239. sage/schemes/elliptic_curves/jacobian.py +237 -0
  240. sage/schemes/elliptic_curves/kodaira_symbol.py +344 -0
  241. sage/schemes/elliptic_curves/kraus.py +1014 -0
  242. sage/schemes/elliptic_curves/lseries_ell.py +943 -0
  243. sage/schemes/elliptic_curves/mod5family.py +105 -0
  244. sage/schemes/elliptic_curves/mod_poly.py +197 -0
  245. sage/schemes/elliptic_curves/mod_sym_num.cpython-312-darwin.so +0 -0
  246. sage/schemes/elliptic_curves/mod_sym_num.pyx +3796 -0
  247. sage/schemes/elliptic_curves/modular_parametrization.py +305 -0
  248. sage/schemes/elliptic_curves/padic_lseries.py +1793 -0
  249. sage/schemes/elliptic_curves/padics.py +1816 -0
  250. sage/schemes/elliptic_curves/period_lattice.py +2234 -0
  251. sage/schemes/elliptic_curves/period_lattice_region.cpython-312-darwin.so +0 -0
  252. sage/schemes/elliptic_curves/period_lattice_region.pyx +722 -0
  253. sage/schemes/elliptic_curves/saturation.py +715 -0
  254. sage/schemes/elliptic_curves/sha_tate.py +1158 -0
  255. sage/schemes/elliptic_curves/weierstrass_morphism.py +1117 -0
  256. sage/schemes/elliptic_curves/weierstrass_transform.py +200 -0
  257. sage/schemes/hyperelliptic_curves/all.py +6 -0
  258. sage/schemes/hyperelliptic_curves/constructor.py +291 -0
  259. sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py +1914 -0
  260. sage/schemes/hyperelliptic_curves/hyperelliptic_g2.py +192 -0
  261. sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +954 -0
  262. sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py +1332 -0
  263. sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py +84 -0
  264. sage/schemes/hyperelliptic_curves/invariants.py +410 -0
  265. sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +315 -0
  266. sage/schemes/hyperelliptic_curves/jacobian_g2.py +32 -0
  267. sage/schemes/hyperelliptic_curves/jacobian_generic.py +419 -0
  268. sage/schemes/hyperelliptic_curves/jacobian_homset.py +186 -0
  269. sage/schemes/hyperelliptic_curves/jacobian_morphism.py +875 -0
  270. sage/schemes/hyperelliptic_curves/kummer_surface.py +99 -0
  271. sage/schemes/hyperelliptic_curves/mestre.py +302 -0
  272. sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +3871 -0
  273. sage/schemes/jacobians/abstract_jacobian.py +277 -0
  274. sage/schemes/jacobians/all.py +2 -0
  275. sage/schemes/overview.py +161 -0
  276. sage/schemes/plane_conics/all.py +22 -0
  277. sage/schemes/plane_conics/con_field.py +1296 -0
  278. sage/schemes/plane_conics/con_finite_field.py +158 -0
  279. sage/schemes/plane_conics/con_number_field.py +456 -0
  280. sage/schemes/plane_conics/con_rational_field.py +406 -0
  281. sage/schemes/plane_conics/con_rational_function_field.py +580 -0
  282. sage/schemes/plane_conics/constructor.py +249 -0
  283. sage/schemes/plane_quartics/all.py +2 -0
  284. sage/schemes/plane_quartics/quartic_constructor.py +71 -0
  285. sage/schemes/plane_quartics/quartic_generic.py +73 -0
  286. sage/schemes/riemann_surfaces/all.py +1 -0
  287. sage/schemes/riemann_surfaces/riemann_surface.py +4117 -0
  288. sage_wheels/share/cremona/cremona_mini.db +0 -0
  289. sage_wheels/share/ellcurves/rank0 +30427 -0
  290. sage_wheels/share/ellcurves/rank1 +31871 -0
  291. sage_wheels/share/ellcurves/rank10 +6 -0
  292. sage_wheels/share/ellcurves/rank11 +6 -0
  293. sage_wheels/share/ellcurves/rank12 +1 -0
  294. sage_wheels/share/ellcurves/rank14 +1 -0
  295. sage_wheels/share/ellcurves/rank15 +1 -0
  296. sage_wheels/share/ellcurves/rank17 +1 -0
  297. sage_wheels/share/ellcurves/rank19 +1 -0
  298. sage_wheels/share/ellcurves/rank2 +2388 -0
  299. sage_wheels/share/ellcurves/rank20 +1 -0
  300. sage_wheels/share/ellcurves/rank21 +1 -0
  301. sage_wheels/share/ellcurves/rank22 +1 -0
  302. sage_wheels/share/ellcurves/rank23 +1 -0
  303. sage_wheels/share/ellcurves/rank24 +1 -0
  304. sage_wheels/share/ellcurves/rank28 +1 -0
  305. sage_wheels/share/ellcurves/rank3 +836 -0
  306. sage_wheels/share/ellcurves/rank4 +10 -0
  307. sage_wheels/share/ellcurves/rank5 +5 -0
  308. sage_wheels/share/ellcurves/rank6 +5 -0
  309. sage_wheels/share/ellcurves/rank7 +5 -0
  310. sage_wheels/share/ellcurves/rank8 +6 -0
  311. sage_wheels/share/ellcurves/rank9 +7 -0
@@ -0,0 +1,455 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs sage.libs.flint
3
+ """
4
+ Subspace of ambient spaces of modular symbols
5
+ """
6
+ # ****************************************************************************
7
+ # Sage: Open Source Mathematical Software
8
+ #
9
+ # Copyright (C) 2005 William Stein <wstein@gmail.com>
10
+ #
11
+ # Distributed under the terms of the GNU General Public License (GPL)
12
+ #
13
+ # This code is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
+ # General Public License for more details.
17
+ #
18
+ # The full text of the GPL is available at:
19
+ #
20
+ # https://www.gnu.org/licenses/
21
+ # ****************************************************************************
22
+
23
+ import sage.modular.hecke.all as hecke
24
+ import sage.structure.factorization
25
+ import sage.modular.modsym.space
26
+ from sage.misc.cachefunc import cached_method
27
+
28
+
29
+ class ModularSymbolsSubspace(sage.modular.modsym.space.ModularSymbolsSpace, hecke.HeckeSubmodule):
30
+ """
31
+ Subspace of ambient space of modular symbols
32
+ """
33
+ ################################
34
+ # Special Methods
35
+ ################################
36
+ def __init__(self, ambient_hecke_module, submodule,
37
+ dual_free_module=None, check=False):
38
+ """
39
+ INPUT:
40
+
41
+ - ``ambient_hecke_module`` -- the ambient space of
42
+ modular symbols in which we're constructing a submodule
43
+
44
+ - ``submodule`` -- the underlying free module of the
45
+ submodule
46
+
47
+ - ``dual_free_module`` -- underlying free module of
48
+ the dual of the submodule (optional)
49
+
50
+ - ``check`` -- boolean (default: ``False``); whether to check that
51
+ the submodule is invariant under all Hecke operators `T_p`
52
+
53
+ EXAMPLES::
54
+
55
+ sage: M = ModularSymbols(15,4) ; S = M.cuspidal_submodule() # indirect doctest
56
+ sage: S
57
+ Modular Symbols subspace of dimension 8 of Modular Symbols space of dimension 12
58
+ for Gamma_0(15) of weight 4 with sign 0 over Rational Field
59
+ sage: S == loads(dumps(S))
60
+ True
61
+ sage: M = ModularSymbols(1,24)
62
+ sage: A = M.ambient_hecke_module()
63
+ sage: B = A.submodule([ x.element() for x in M.cuspidal_submodule().gens() ])
64
+ sage: S = sage.modular.modsym.subspace.ModularSymbolsSubspace(A, B.free_module())
65
+ sage: S
66
+ Modular Symbols subspace of dimension 4 of Modular Symbols space of dimension 5
67
+ for Gamma_0(1) of weight 24 with sign 0 over Rational Field
68
+ sage: S == loads(dumps(S))
69
+ True
70
+ """
71
+ self.__ambient_hecke_module = ambient_hecke_module
72
+ A = ambient_hecke_module
73
+ sage.modular.modsym.space.ModularSymbolsSpace.__init__(self, A.group(),
74
+ A.weight(),
75
+ A.character(), A.sign(), A.base_ring())
76
+ hecke.HeckeSubmodule.__init__(self, A, submodule, dual_free_module=dual_free_module, check=check)
77
+
78
+ def _repr_(self):
79
+ """
80
+ Return the string representation of ``self``.
81
+
82
+ EXAMPLES::
83
+
84
+ sage: ModularSymbols(24,4).cuspidal_subspace()._repr_()
85
+ 'Modular Symbols subspace of dimension 16 of Modular Symbols space of dimension 24 for Gamma_0(24) of weight 4 with sign 0 over Rational Field'
86
+ """
87
+ return "Modular Symbols subspace of dimension %s of %s" % (
88
+ self.rank(), self.ambient_module())
89
+
90
+ ################################
91
+ # Public functions
92
+ ################################
93
+ def boundary_map(self):
94
+ """
95
+ The boundary map to the corresponding space of boundary modular
96
+ symbols. (This is the restriction of the map on the ambient
97
+ space.)
98
+
99
+ EXAMPLES::
100
+
101
+ sage: M = ModularSymbols(1, 24, sign=1) ; M
102
+ Modular Symbols space of dimension 3 for Gamma_0(1) of weight 24
103
+ with sign 1 over Rational Field
104
+ sage: M.basis()
105
+ ([X^18*Y^4,(0,0)], [X^20*Y^2,(0,0)], [X^22,(0,0)])
106
+ sage: M.cuspidal_submodule().basis()
107
+ ([X^18*Y^4,(0,0)], [X^20*Y^2,(0,0)])
108
+ sage: M.eisenstein_submodule().basis()
109
+ ([X^18*Y^4,(0,0)] + 166747/324330*[X^20*Y^2,(0,0)] + 236364091/6742820700*[X^22,(0,0)],)
110
+ sage: M.boundary_map()
111
+ Hecke module morphism boundary map defined by the matrix
112
+ [ 0]
113
+ [ 0]
114
+ [-1]
115
+ Domain: Modular Symbols space of dimension 3 for Gamma_0(1) of weight ...
116
+ Codomain: Space of Boundary Modular Symbols for Modular Group SL(2,Z) ...
117
+ sage: M.cuspidal_subspace().boundary_map()
118
+ Hecke module morphism defined by the matrix
119
+ [0]
120
+ [0]
121
+ Domain: Modular Symbols subspace of dimension 2 of Modular Symbols space ...
122
+ Codomain: Space of Boundary Modular Symbols for Modular Group SL(2,Z) ...
123
+ sage: M.eisenstein_submodule().boundary_map()
124
+ Hecke module morphism defined by the matrix
125
+ [-236364091/6742820700]
126
+ Domain: Modular Symbols subspace of dimension 1 of Modular Symbols space ...
127
+ Codomain: Space of Boundary Modular Symbols for Modular Group SL(2,Z) ...
128
+ """
129
+ try:
130
+ return self.__boundary_map
131
+ except AttributeError:
132
+ # restrict from ambient space
133
+ b = self.ambient_hecke_module().boundary_map()
134
+ self.__boundary_map = b.restrict_domain(self)
135
+ return self.__boundary_map
136
+
137
+ def cuspidal_submodule(self):
138
+ """
139
+ Return the cuspidal subspace of this subspace of modular symbols.
140
+
141
+ EXAMPLES::
142
+
143
+ sage: S = ModularSymbols(42,4).cuspidal_submodule() ; S
144
+ Modular Symbols subspace of dimension 40 of Modular Symbols space of dimension 48
145
+ for Gamma_0(42) of weight 4 with sign 0 over Rational Field
146
+ sage: S.is_cuspidal()
147
+ True
148
+ sage: S.cuspidal_submodule()
149
+ Modular Symbols subspace of dimension 40 of Modular Symbols space of dimension 48
150
+ for Gamma_0(42) of weight 4 with sign 0 over Rational Field
151
+
152
+ The cuspidal submodule of the cuspidal submodule is just itself::
153
+
154
+ sage: S.cuspidal_submodule() is S
155
+ True
156
+ sage: S.cuspidal_submodule() == S
157
+ True
158
+
159
+ An example where we abuse the _set_is_cuspidal function::
160
+
161
+ sage: M = ModularSymbols(389)
162
+ sage: S = M.eisenstein_submodule()
163
+ sage: S._set_is_cuspidal(True)
164
+ sage: S.cuspidal_submodule()
165
+ Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 65
166
+ for Gamma_0(389) of weight 2 with sign 0 over Rational Field
167
+ """
168
+ try:
169
+ return self.__cuspidal_submodule
170
+ except AttributeError:
171
+ try:
172
+ if self.__is_cuspidal:
173
+ return self
174
+ except AttributeError:
175
+ pass
176
+ S = self.ambient_hecke_module().cuspidal_submodule()
177
+ self.__cuspidal_submodule = S.intersection(self)
178
+ return self.__cuspidal_submodule
179
+
180
+ def dual_star_involution_matrix(self):
181
+ """
182
+ Return the matrix of the dual star involution.
183
+
184
+ This involution is induced by
185
+ complex conjugation on the linear dual of modular symbols.
186
+
187
+ EXAMPLES::
188
+
189
+ sage: S = ModularSymbols(6,4) ; S.dual_star_involution_matrix()
190
+ [ 1 0 0 0 0 0]
191
+ [ 0 1 0 0 0 0]
192
+ [ 0 -2 1 2 0 0]
193
+ [ 0 2 0 -1 0 0]
194
+ [ 0 -2 0 2 1 0]
195
+ [ 0 2 0 -2 0 1]
196
+ sage: S.star_involution().matrix().transpose() == S.dual_star_involution_matrix()
197
+ True
198
+ """
199
+ try:
200
+ return self.__dual_star_involution
201
+ except AttributeError:
202
+ pass
203
+ S = self.ambient_hecke_module().dual_star_involution_matrix()
204
+ A = S.restrict(self.dual_free_module())
205
+ self.__dual_star_involution = A
206
+ return self.__dual_star_involution
207
+
208
+ def eisenstein_subspace(self):
209
+ """
210
+ Return the Eisenstein subspace of this space of modular symbols.
211
+
212
+ EXAMPLES::
213
+
214
+ sage: ModularSymbols(24,4).eisenstein_subspace()
215
+ Modular Symbols subspace of dimension 8 of Modular Symbols space of dimension 24
216
+ for Gamma_0(24) of weight 4 with sign 0 over Rational Field
217
+ sage: ModularSymbols(20,2).cuspidal_subspace().eisenstein_subspace()
218
+ Modular Symbols subspace of dimension 0 of Modular Symbols space of dimension 7
219
+ for Gamma_0(20) of weight 2 with sign 0 over Rational Field
220
+ """
221
+ try:
222
+ return self.__eisenstein_subspace
223
+ except AttributeError:
224
+ S = self.ambient_hecke_module().eisenstein_subspace()
225
+ self.__eisenstein_subspace = S.intersection(self)
226
+ return self.__eisenstein_subspace
227
+
228
+ def factorization(self):
229
+ """
230
+ Return a list of pairs `(S,e)` where `S` is simple
231
+ spaces of modular symbols and ``self`` is isomorphic to the direct sum
232
+ of the `S^e` as a module over the *anemic* Hecke algebra
233
+ adjoin the star involution.
234
+
235
+ The cuspidal `S` are all simple, but the Eisenstein factors
236
+ need not be simple.
237
+
238
+ The factors are sorted by dimension - don't depend on much more for
239
+ now.
240
+
241
+ ASSUMPTION: ``self`` is a module over the anemic Hecke algebra.
242
+
243
+ EXAMPLES: Note that if the sign is 1 then the cuspidal factors
244
+ occur twice, one with each star eigenvalue.
245
+
246
+ ::
247
+
248
+ sage: M = ModularSymbols(11)
249
+ sage: D = M.factorization(); D
250
+ (Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 3
251
+ for Gamma_0(11) of weight 2 with sign 0 over Rational Field) *
252
+ (Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 3
253
+ for Gamma_0(11) of weight 2 with sign 0 over Rational Field) *
254
+ (Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 3
255
+ for Gamma_0(11) of weight 2 with sign 0 over Rational Field)
256
+ sage: [A.T(2).matrix() for A, _ in D]
257
+ [[-2], [3], [-2]]
258
+ sage: [A.star_eigenvalues() for A, _ in D]
259
+ [[-1], [1], [1]]
260
+
261
+ In this example there is one old factor squared.
262
+
263
+ ::
264
+
265
+ sage: M = ModularSymbols(22,sign=1)
266
+ sage: S = M.cuspidal_submodule()
267
+ sage: S.factorization()
268
+ (Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 2
269
+ for Gamma_0(11) of weight 2 with sign 1 over Rational Field)^2
270
+
271
+ ::
272
+
273
+ sage: M = ModularSymbols(Gamma0(22), 2, sign=1)
274
+ sage: M1 = M.decomposition()[1]
275
+ sage: M1.factorization()
276
+ Modular Symbols subspace of dimension 3 of Modular Symbols space of dimension 5
277
+ for Gamma_0(22) of weight 2 with sign 1 over Rational Field
278
+ """
279
+ try:
280
+ return self._factorization
281
+ except AttributeError:
282
+ pass
283
+ try:
284
+ if self._is_simple:
285
+ return [(self, 1)]
286
+ except AttributeError:
287
+ pass
288
+ if self.is_new() and self.is_cuspidal():
289
+ D = []
290
+ N = self.decomposition()
291
+ if self.sign() == 0:
292
+ for A in N:
293
+ if A.is_cuspidal():
294
+ V = A.plus_submodule()
295
+ V._is_simple = True
296
+ D.append((V, 1))
297
+ V = A.minus_submodule()
298
+ V._is_simple = True
299
+ D.append((V, 1))
300
+ else:
301
+ A._is_simple = True
302
+ D.append((A, 1))
303
+ else:
304
+ for A in N:
305
+ A._is_simple = True
306
+ D.append((A, 1))
307
+ else:
308
+ # Compute factorization of the ambient space, then compute multiplicity
309
+ # of each factor in this space.
310
+ D = []
311
+ for S in self.ambient_hecke_module().simple_factors():
312
+ n = self.multiplicity(S, check_simple=False)
313
+ if n > 0:
314
+ D.append((S, n))
315
+ # endif
316
+
317
+ # check that dimensions add up
318
+ r = self.dimension()
319
+ s = sum([A.rank() * mult for A, mult in D])
320
+ if r != s:
321
+ raise NotImplementedError("modular symbols factorization not fully implemented yet "
322
+ "-- self has dimension %s, but sum of dimensions of factors is %s" % (r, s))
323
+ self._factorization = sage.structure.factorization.Factorization(D, cr=True)
324
+ return self._factorization
325
+
326
+ def is_cuspidal(self) -> bool:
327
+ """
328
+ Return ``True`` if ``self`` is cuspidal.
329
+
330
+ EXAMPLES::
331
+
332
+ sage: ModularSymbols(42,4).cuspidal_submodule().is_cuspidal()
333
+ True
334
+ sage: ModularSymbols(12,6).eisenstein_submodule().is_cuspidal()
335
+ False
336
+ """
337
+ try:
338
+ return self.__is_cuspidal
339
+ except AttributeError:
340
+ C = self.ambient_hecke_module().cuspidal_submodule()
341
+ self.__is_cuspidal = self.is_submodule(C)
342
+ return self.__is_cuspidal
343
+
344
+ def _set_is_cuspidal(self, t):
345
+ """
346
+ Used internally to declare that a given submodule is cuspidal.
347
+
348
+ EXAMPLES: We abuse this command::
349
+
350
+ sage: M = ModularSymbols(389)
351
+ sage: S = M.eisenstein_submodule()
352
+ sage: S._set_is_cuspidal(True)
353
+ sage: S.is_cuspidal()
354
+ True
355
+ """
356
+ self.__is_cuspidal = t
357
+
358
+ @cached_method
359
+ def is_eisenstein(self) -> bool:
360
+ """
361
+ Return ``True`` if ``self`` is an Eisenstein subspace.
362
+
363
+ EXAMPLES::
364
+
365
+ sage: ModularSymbols(22,6).cuspidal_submodule().is_eisenstein()
366
+ False
367
+ sage: ModularSymbols(22,6).eisenstein_submodule().is_eisenstein()
368
+ True
369
+ """
370
+ C = self.ambient_hecke_module().eisenstein_subspace()
371
+ return self.is_submodule(C)
372
+
373
+ def _compute_sign_subspace(self, sign, compute_dual=True):
374
+ """
375
+ Return the subspace of ``self`` that is fixed under the star
376
+ involution.
377
+
378
+ INPUT:
379
+
380
+ - ``sign`` -- integer (either -1 or +1)
381
+
382
+ - ``compute_dual`` -- boolean (default: ``True``); also
383
+ compute dual subspace. This is useful for many algorithms.
384
+
385
+ OUTPUT: subspace of modular symbols
386
+
387
+ EXAMPLES::
388
+
389
+ sage: S = ModularSymbols(100,2).cuspidal_submodule() ; S
390
+ Modular Symbols subspace of dimension 14 of Modular Symbols space of dimension 31 for Gamma_0(100) of weight 2 with sign 0 over Rational Field
391
+ sage: S._compute_sign_subspace(1)
392
+ Modular Symbols subspace of dimension 7 of Modular Symbols space of dimension 31 for Gamma_0(100) of weight 2 with sign 0 over Rational Field
393
+ sage: S._compute_sign_subspace(-1)
394
+ Modular Symbols subspace of dimension 7 of Modular Symbols space of dimension 31 for Gamma_0(100) of weight 2 with sign 0 over Rational Field
395
+ sage: S._compute_sign_subspace(-1).sign()
396
+ -1
397
+ """
398
+ S = self.star_involution().matrix() - sign
399
+ V = S.kernel()
400
+ if compute_dual:
401
+ Sdual = self.dual_star_involution_matrix() - sign
402
+ Vdual = Sdual.kernel()
403
+ else:
404
+ Vdual = None
405
+ res = self.submodule_from_nonembedded_module(V, Vdual)
406
+ res._set_sign(sign)
407
+ return res
408
+
409
+ def star_involution(self):
410
+ """
411
+ Return the star involution on self, which is induced by complex
412
+ conjugation on modular symbols.
413
+
414
+ EXAMPLES::
415
+
416
+ sage: M = ModularSymbols(1,24)
417
+ sage: M.star_involution()
418
+ Hecke module morphism Star involution on Modular Symbols space of dimension 5
419
+ for Gamma_0(1) of weight 24 with sign 0 over Rational Field defined by the matrix
420
+ [ 1 0 0 0 0]
421
+ [ 0 -1 0 0 0]
422
+ [ 0 0 1 0 0]
423
+ [ 0 0 0 -1 0]
424
+ [ 0 0 0 0 1]
425
+ Domain: Modular Symbols space of dimension 5 for Gamma_0(1) of weight ...
426
+ Codomain: Modular Symbols space of dimension 5 for Gamma_0(1) of weight ...
427
+ sage: M.cuspidal_subspace().star_involution()
428
+ Hecke module morphism defined by the matrix
429
+ [ 1 0 0 0]
430
+ [ 0 -1 0 0]
431
+ [ 0 0 1 0]
432
+ [ 0 0 0 -1]
433
+ Domain: Modular Symbols subspace of dimension 4 of Modular Symbols space ...
434
+ Codomain: Modular Symbols subspace of dimension 4 of Modular Symbols space ...
435
+ sage: M.plus_submodule().star_involution()
436
+ Hecke module morphism defined by the matrix
437
+ [1 0 0]
438
+ [0 1 0]
439
+ [0 0 1]
440
+ Domain: Modular Symbols subspace of dimension 3 of Modular Symbols space ...
441
+ Codomain: Modular Symbols subspace of dimension 3 of Modular Symbols space ...
442
+ sage: M.minus_submodule().star_involution()
443
+ Hecke module morphism defined by the matrix
444
+ [-1 0]
445
+ [ 0 -1]
446
+ Domain: Modular Symbols subspace of dimension 2 of Modular Symbols space ...
447
+ Codomain: Modular Symbols subspace of dimension 2 of Modular Symbols space ...
448
+ """
449
+ try:
450
+ return self.__star_involution
451
+ except AttributeError:
452
+ pass
453
+ S = self.ambient_hecke_module().star_involution()
454
+ self.__star_involution = S.restrict(self)
455
+ return self.__star_involution