passagemath-schemes 10.6.38__cp314-cp314t-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.21.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.38.dist-info/METADATA +204 -0
  7. passagemath_schemes-10.6.38.dist-info/METADATA.bak +205 -0
  8. passagemath_schemes-10.6.38.dist-info/RECORD +314 -0
  9. passagemath_schemes-10.6.38.dist-info/WHEEL +6 -0
  10. passagemath_schemes-10.6.38.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-314t-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-314t-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-314t-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-314t-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-314t-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-314t-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-314t-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-314t-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-314t-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-314t-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-314t-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-314t-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,400 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs sage.libs.flint sage.libs.pari
3
+ r"""
4
+ Creation of modular symbols spaces
5
+
6
+ EXAMPLES: We create a space and output its category.
7
+
8
+ ::
9
+
10
+ sage: C = HeckeModules(RationalField()); C
11
+ Category of Hecke modules over Rational Field
12
+ sage: M = ModularSymbols(11)
13
+ sage: M.category()
14
+ Category of Hecke modules over Rational Field
15
+ sage: M in C
16
+ True
17
+
18
+ We create a space compute the charpoly, then compute the same but
19
+ over a bigger field. In each case we also decompose the space using
20
+ `T_2`.
21
+
22
+ ::
23
+
24
+ sage: M = ModularSymbols(23,2, base_ring=QQ)
25
+ sage: M.T(2).charpoly('x').factor()
26
+ (x - 3) * (x^2 + x - 1)^2
27
+ sage: M.decomposition(2)
28
+ [Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 5 for Gamma_0(23) of weight 2 with sign 0 over Rational Field,
29
+ Modular Symbols subspace of dimension 4 of Modular Symbols space of dimension 5 for Gamma_0(23) of weight 2 with sign 0 over Rational Field]
30
+
31
+ ::
32
+
33
+ sage: # needs sage.rings.number_field
34
+ sage: M = ModularSymbols(23,2, base_ring=QuadraticField(5, 'sqrt5'))
35
+ sage: M.T(2).charpoly('x').factor()
36
+ (x - 3) * (x - 1/2*sqrt5 + 1/2)^2 * (x + 1/2*sqrt5 + 1/2)^2
37
+ sage: M.decomposition(2)
38
+ [Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 5 for Gamma_0(23) of weight 2 with sign 0 over Number Field in sqrt5 with defining polynomial x^2 - 5 with sqrt5 = 2.236067977499790?,
39
+ Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 5 for Gamma_0(23) of weight 2 with sign 0 over Number Field in sqrt5 with defining polynomial x^2 - 5 with sqrt5 = 2.236067977499790?,
40
+ Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 5 for Gamma_0(23) of weight 2 with sign 0 over Number Field in sqrt5 with defining polynomial x^2 - 5 with sqrt5 = 2.236067977499790?]
41
+
42
+ We compute some Hecke operators and do a consistency check::
43
+
44
+ sage: m = ModularSymbols(39, 2)
45
+ sage: t2 = m.T(2); t5 = m.T(5)
46
+ sage: t2*t5 - t5*t2 == 0
47
+ True
48
+
49
+ This tests the bug reported in :issue:`1220`::
50
+
51
+ sage: G = GammaH(36, [13, 19])
52
+ sage: G.modular_symbols()
53
+ Modular Symbols space of dimension 13 for Congruence Subgroup Gamma_H(36)
54
+ with H generated by [13, 19] of weight 2 with sign 0 over Rational Field
55
+ sage: G.modular_symbols().cuspidal_subspace()
56
+ Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 13 for
57
+ Congruence Subgroup Gamma_H(36) with H generated by [13, 19] of weight 2 with sign 0
58
+ over Rational Field
59
+
60
+ This test catches a tricky corner case for spaces with character::
61
+
62
+ sage: ModularSymbols(DirichletGroup(20).1**3, weight=3, sign=1).cuspidal_subspace()
63
+ Modular Symbols subspace of dimension 3 of Modular Symbols space of dimension 6
64
+ and level 20, weight 3, character [1, -zeta4], sign 1,
65
+ over Cyclotomic Field of order 4 and degree 2
66
+
67
+ This tests the bugs reported in :issue:`20932`::
68
+
69
+ sage: chi = kronecker_character(3*34603)
70
+ sage: ModularSymbols(chi, 2, sign=1, base_ring=GF(3)) # not tested # long time (600 seconds)
71
+ Modular Symbols space of dimension 11535 and level 103809, weight 2,
72
+ character [2, 2], sign 1, over Finite Field of size 3
73
+ sage: chi = kronecker_character(3*61379)
74
+ sage: ModularSymbols(chi, 2, sign=1, base_ring=GF(3)) # not tested # long time (1800 seconds)
75
+ Modular Symbols space of dimension 20460 and level 184137, weight 2,
76
+ character [2, 2], sign 1, over Finite Field of size 3
77
+ """
78
+
79
+ # ****************************************************************************
80
+ # Sage: Open Source Mathematical Software
81
+ #
82
+ # Copyright (C) 2005 William Stein <wstein@gmail.com>
83
+ #
84
+ # Distributed under the terms of the GNU General Public License (GPL)
85
+ #
86
+ # This code is distributed in the hope that it will be useful,
87
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
88
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
89
+ # General Public License for more details.
90
+ #
91
+ # The full text of the GPL is available at:
92
+ #
93
+ # https://www.gnu.org/licenses/
94
+ # ****************************************************************************
95
+
96
+ import weakref
97
+
98
+ from sage.categories.commutative_rings import CommutativeRings
99
+ from sage.categories.fields import Fields
100
+ import sage.modular.arithgroup.all as arithgroup
101
+ import sage.modular.dirichlet as dirichlet
102
+ from sage.rings.integer import Integer
103
+ from sage.rings.rational_field import RationalField
104
+
105
+
106
+ def canonical_parameters(group, weight, sign, base_ring):
107
+ """
108
+ Return the canonically normalized parameters associated to a choice
109
+ of group, weight, sign, and base_ring. That is, normalize each of
110
+ these to be of the correct type, perform all appropriate type
111
+ checking, etc.
112
+
113
+ EXAMPLES::
114
+
115
+ sage: p1 = sage.modular.modsym.modsym.canonical_parameters(5,int(2),1,QQ) ; p1
116
+ (Congruence Subgroup Gamma0(5), 2, 1, Rational Field)
117
+ sage: p2 = sage.modular.modsym.modsym.canonical_parameters(Gamma0(5),2,1,QQ) ; p2
118
+ (Congruence Subgroup Gamma0(5), 2, 1, Rational Field)
119
+ sage: p1 == p2
120
+ True
121
+ sage: type(p1[1])
122
+ <class 'sage.rings.integer.Integer'>
123
+ """
124
+ sign = Integer(sign)
125
+ if sign not in [-1, 0, 1]:
126
+ raise ValueError("sign must be -1, 0, or 1")
127
+
128
+ weight = Integer(weight)
129
+ if weight <= 1:
130
+ raise ValueError("the weight must be at least 2")
131
+
132
+ if isinstance(group, (int, Integer)):
133
+ group = arithgroup.Gamma0(group)
134
+ elif isinstance(group, dirichlet.DirichletCharacter):
135
+ if group.is_trivial():
136
+ group = arithgroup.Gamma0(group.modulus())
137
+ else:
138
+ eps = group.minimize_base_ring()
139
+ group = (eps, eps.parent())
140
+ if base_ring is None:
141
+ base_ring = eps.base_ring()
142
+
143
+ if base_ring is None:
144
+ base_ring = RationalField()
145
+
146
+ elif base_ring not in CommutativeRings():
147
+ raise TypeError(f"base_ring (={base_ring}) must be a commutative ring")
148
+
149
+ elif base_ring not in Fields():
150
+ raise TypeError(f"(currently) base_ring (={base_ring}) must be a field")
151
+
152
+ return group, weight, sign, base_ring
153
+
154
+
155
+ _cache = {}
156
+
157
+
158
+ def ModularSymbols_clear_cache():
159
+ """
160
+ Clear the global cache of modular symbols spaces.
161
+
162
+ EXAMPLES::
163
+
164
+ sage: sage.modular.modsym.modsym.ModularSymbols_clear_cache()
165
+ sage: sorted(sage.modular.modsym.modsym._cache)
166
+ []
167
+ sage: M = ModularSymbols(6,2)
168
+ sage: sorted(sage.modular.modsym.modsym._cache)
169
+ [(Congruence Subgroup Gamma0(6), 2, 0, Rational Field)]
170
+ sage: sage.modular.modsym.modsym.ModularSymbols_clear_cache()
171
+ sage: sorted(sage.modular.modsym.modsym._cache)
172
+ []
173
+
174
+ TESTS:
175
+
176
+ Make sure :issue:`10548` is fixed::
177
+
178
+ sage: import gc
179
+ sage: m = ModularSymbols(Gamma1(29))
180
+ sage: m = []
181
+ sage: ModularSymbols_clear_cache()
182
+ sage: gc.collect() # random
183
+ 3422
184
+ sage: a = [x for x in gc.get_objects()
185
+ ....: if isinstance(x,sage.modular.modsym.ambient.ModularSymbolsAmbient_wtk_g1)]
186
+ sage: a
187
+ []
188
+ """
189
+ global _cache
190
+ _cache = {}
191
+
192
+
193
+ def ModularSymbols(group=1,
194
+ weight=2,
195
+ sign=0,
196
+ base_ring=None,
197
+ use_cache=True,
198
+ custom_init=None):
199
+ r"""
200
+ Create an ambient space of modular symbols.
201
+
202
+ INPUT:
203
+
204
+ - ``group`` -- a congruence subgroup or a Dirichlet character eps
205
+ - ``weight`` -- integer; the weight, which must be >= 2
206
+ - ``sign`` -- integer; the sign of the involution on modular symbols
207
+ induced by complex conjugation. The default is 0, which means
208
+ "no sign", i.e., take the whole space.
209
+ - ``base_ring`` -- the base ring. Defaults to `\QQ` if no character
210
+ is given, or to the minimal extension of `\QQ` containing the
211
+ values of the character.
212
+ - ``custom_init`` -- a function that is called with ``self`` as input
213
+ before any computations are done using self; this could be used
214
+ to set a custom modular symbols presentation. If ``self`` is
215
+ already in the cache and use_cache=True, then this function is
216
+ not called.
217
+
218
+ EXAMPLES: First we create some spaces with trivial character::
219
+
220
+ sage: ModularSymbols(Gamma0(11),2).dimension()
221
+ 3
222
+ sage: ModularSymbols(Gamma0(1),12).dimension()
223
+ 3
224
+
225
+ If we give an integer N for the congruence subgroup, it defaults to
226
+ `\Gamma_0(N)`::
227
+
228
+ sage: ModularSymbols(1,12,-1).dimension()
229
+ 1
230
+ sage: ModularSymbols(11,4, sign=1)
231
+ Modular Symbols space of dimension 4 for Gamma_0(11) of weight 4
232
+ with sign 1 over Rational Field
233
+
234
+ We create some spaces for `\Gamma_1(N)`.
235
+
236
+ ::
237
+
238
+ sage: ModularSymbols(Gamma1(13),2)
239
+ Modular Symbols space of dimension 15 for Gamma_1(13) of weight 2
240
+ with sign 0 over Rational Field
241
+ sage: ModularSymbols(Gamma1(13),2, sign=1).dimension()
242
+ 13
243
+ sage: ModularSymbols(Gamma1(13),2, sign=-1).dimension()
244
+ 2
245
+ sage: [ModularSymbols(Gamma1(7),k).dimension() for k in [2,3,4,5]]
246
+ [5, 8, 12, 16]
247
+ sage: ModularSymbols(Gamma1(5),11).dimension()
248
+ 20
249
+
250
+ We create a space for `\Gamma_H(N)`::
251
+
252
+ sage: G = GammaH(15,[4,13])
253
+ sage: M = ModularSymbols(G,2)
254
+ sage: M.decomposition()
255
+ [Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 5 for Congruence Subgroup Gamma_H(15) with H generated by [4, 7] of weight 2 with sign 0 over Rational Field,
256
+ Modular Symbols subspace of dimension 3 of Modular Symbols space of dimension 5 for Congruence Subgroup Gamma_H(15) with H generated by [4, 7] of weight 2 with sign 0 over Rational Field]
257
+
258
+ We create a space with character::
259
+
260
+ sage: e = (DirichletGroup(13).0)^2
261
+ sage: e.order()
262
+ 6
263
+ sage: M = ModularSymbols(e, 2); M
264
+ Modular Symbols space of dimension 4 and level 13, weight 2, character [zeta6],
265
+ sign 0, over Cyclotomic Field of order 6 and degree 2
266
+ sage: f = M.T(2).charpoly('x'); f
267
+ x^4 + (-zeta6 - 1)*x^3 - 8*zeta6*x^2 + (10*zeta6 - 5)*x + 21*zeta6 - 21
268
+ sage: f.factor()
269
+ (x - zeta6 - 2) * (x - 2*zeta6 - 1) * (x + zeta6 + 1)^2
270
+
271
+ We create a space with character over a larger base ring than the values of the character::
272
+
273
+ sage: # needs sage.rings.number_field
274
+ sage: ModularSymbols(e, 2, base_ring=CyclotomicField(24))
275
+ Modular Symbols space of dimension 4 and level 13, weight 2, character [zeta24^4],
276
+ sign 0, over Cyclotomic Field of order 24 and degree 8
277
+
278
+ More examples of spaces with character::
279
+
280
+ sage: e = DirichletGroup(5, RationalField()).gen(); e
281
+ Dirichlet character modulo 5 of conductor 5 mapping 2 |--> -1
282
+
283
+ sage: m = ModularSymbols(e, 2); m
284
+ Modular Symbols space of dimension 2 and level 5, weight 2, character [-1],
285
+ sign 0, over Rational Field
286
+
287
+ ::
288
+
289
+ sage: m.T(2).charpoly('x')
290
+ x^2 - 1
291
+ sage: m = ModularSymbols(e, 6); m.dimension()
292
+ 6
293
+ sage: m.T(2).charpoly('x')
294
+ x^6 - 873*x^4 - 82632*x^2 - 1860496
295
+
296
+ We create a space of modular symbols with nontrivial character in
297
+ characteristic 2.
298
+
299
+ ::
300
+
301
+ sage: # needs sage.rings.finite_rings
302
+ sage: G = DirichletGroup(13, GF(4,'a')); G
303
+ Group of Dirichlet characters modulo 13
304
+ with values in Finite Field in a of size 2^2
305
+ sage: e = G.list()[2]; e
306
+ Dirichlet character modulo 13 of conductor 13 mapping 2 |--> a + 1
307
+ sage: M = ModularSymbols(e,4); M
308
+ Modular Symbols space of dimension 8 and level 13, weight 4,
309
+ character [a + 1], sign 0, over Finite Field in a of size 2^2
310
+ sage: M.basis()
311
+ ([X*Y,(1,0)], [X*Y,(1,5)], [X*Y,(1,10)], [X*Y,(1,11)],
312
+ [X^2,(0,1)], [X^2,(1,10)], [X^2,(1,11)], [X^2,(1,12)])
313
+ sage: M.T(2).matrix()
314
+ [ 0 0 0 0 0 0 1 1]
315
+ [ 0 0 0 0 0 0 0 0]
316
+ [ 0 0 0 0 0 a + 1 1 a]
317
+ [ 0 0 0 0 0 1 a + 1 a]
318
+ [ 0 0 0 0 a + 1 0 1 1]
319
+ [ 0 0 0 0 0 a 1 a]
320
+ [ 0 0 0 0 0 0 a + 1 a]
321
+ [ 0 0 0 0 0 0 1 0]
322
+
323
+ We illustrate the custom_init function, which can be used to make
324
+ arbitrary changes to the modular symbols object before its
325
+ presentation is computed::
326
+
327
+ sage: ModularSymbols_clear_cache()
328
+ sage: def custom_init(M):
329
+ ....: M.customize='hi'
330
+ sage: M = ModularSymbols(1,12, custom_init=custom_init)
331
+ sage: M.customize
332
+ 'hi'
333
+
334
+ We illustrate the relation between custom_init and use_cache::
335
+
336
+ sage: def custom_init(M):
337
+ ....: M.customize='hi2'
338
+ sage: M = ModularSymbols(1,12, custom_init=custom_init)
339
+ sage: M.customize
340
+ 'hi'
341
+ sage: M = ModularSymbols(1,12, custom_init=custom_init, use_cache=False)
342
+ sage: M.customize
343
+ 'hi2'
344
+
345
+ TESTS:
346
+
347
+ We test use_cache::
348
+
349
+ sage: ModularSymbols_clear_cache()
350
+ sage: M = ModularSymbols(11,use_cache=False)
351
+ sage: sage.modular.modsym.modsym._cache
352
+ {}
353
+ sage: M = ModularSymbols(11,use_cache=True)
354
+ sage: sage.modular.modsym.modsym._cache
355
+ {(Congruence Subgroup Gamma0(11), 2, 0, Rational Field): <weakref at ...; to '...ModularSymbolsAmbient_wt2_g0_with_category' at ...>}
356
+ sage: M is ModularSymbols(11,use_cache=True)
357
+ True
358
+ sage: M is ModularSymbols(11,use_cache=False)
359
+ False
360
+ """
361
+ from . import ambient
362
+ key = canonical_parameters(group, weight, sign, base_ring)
363
+
364
+ if use_cache and key in _cache:
365
+ M = _cache[key]()
366
+ if M is not None:
367
+ return M
368
+
369
+ group, weight, sign, base_ring = key
370
+
371
+ M = None
372
+ if isinstance(group, arithgroup.Gamma0_class):
373
+ if weight == 2:
374
+ M = ambient.ModularSymbolsAmbient_wt2_g0(
375
+ group.level(), sign, base_ring, custom_init=custom_init)
376
+ else:
377
+ M = ambient.ModularSymbolsAmbient_wtk_g0(
378
+ group.level(), weight, sign, base_ring, custom_init=custom_init)
379
+
380
+ elif isinstance(group, arithgroup.Gamma1_class):
381
+
382
+ M = ambient.ModularSymbolsAmbient_wtk_g1(group.level(),
383
+ weight, sign, base_ring, custom_init=custom_init)
384
+
385
+ elif isinstance(group, arithgroup.GammaH_class):
386
+
387
+ M = ambient.ModularSymbolsAmbient_wtk_gamma_h(group,
388
+ weight, sign, base_ring, custom_init=custom_init)
389
+
390
+ elif isinstance(group, tuple):
391
+ eps = group[0]
392
+ M = ambient.ModularSymbolsAmbient_wtk_eps(eps,
393
+ weight, sign, base_ring, custom_init=custom_init)
394
+
395
+ if M is None:
396
+ raise NotImplementedError("computation of requested space of modular symbols not defined or implemented")
397
+
398
+ if use_cache:
399
+ _cache[key] = weakref.ref(M)
400
+ return M