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,119 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs sage.libs.flint
3
+ """
4
+ Degeneracy maps
5
+ """
6
+
7
+ # ****************************************************************************
8
+ # Sage: Open Source Mathematical Software
9
+ #
10
+ # Copyright (C) 2005 William Stein <wstein@gmail.com>
11
+ #
12
+ # Distributed under the terms of the GNU General Public License (GPL)
13
+ #
14
+ # This code is distributed in the hope that it will be useful,
15
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
+ # General Public License for more details.
18
+ #
19
+ # The full text of the GPL is available at:
20
+ #
21
+ # https://www.gnu.org/licenses/
22
+ # ****************************************************************************
23
+ from . import morphism
24
+
25
+
26
+ class DegeneracyMap(morphism.HeckeModuleMorphism_matrix):
27
+ """
28
+ A degeneracy map between Hecke modules of different levels.
29
+
30
+ EXAMPLES:
31
+
32
+ We construct a number of degeneracy maps::
33
+
34
+ sage: M = ModularSymbols(33)
35
+ sage: d = M.degeneracy_map(11)
36
+ sage: d
37
+ Hecke module morphism degeneracy map corresponding to f(q) |--> f(q)
38
+ defined by the matrix
39
+ [ 1 0 0]
40
+ [ 0 0 1]
41
+ [ 0 0 -1]
42
+ [ 0 1 -1]
43
+ [ 0 0 1]
44
+ [ 0 -1 1]
45
+ [-1 0 0]
46
+ [-1 0 0]
47
+ [-1 0 0]
48
+ Domain: Modular Symbols space of dimension 9 for Gamma_0(33) of weight ...
49
+ Codomain: Modular Symbols space of dimension 3 for Gamma_0(11) of weight ...
50
+ sage: d.t()
51
+ 1
52
+ sage: d = M.degeneracy_map(11,3)
53
+ sage: d.t()
54
+ 3
55
+
56
+ The parameter d must be a divisor of the quotient of the two levels::
57
+
58
+ sage: d = M.degeneracy_map(11,2)
59
+ Traceback (most recent call last):
60
+ ...
61
+ ValueError: the level of self (=33) must be a divisor or multiple
62
+ of level (=11) and t (=2) must be a divisor of the quotient
63
+
64
+ Degeneracy maps can also go from lower level to higher level::
65
+
66
+ sage: M.degeneracy_map(66,2)
67
+ Hecke module morphism degeneracy map corresponding to f(q) |--> f(q^2)
68
+ defined by the matrix
69
+ [ 2 0 0 0 0 0 1 0 0 0 1 -1 0 0 0 -1 1 0 0 0 0 0 0 0 -1]
70
+ [ 0 0 1 -1 0 -1 1 0 -1 2 0 0 0 -1 0 0 -1 1 2 -2 0 0 0 -1 1]
71
+ [ 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 -1 1 0 0 -1 1 0 0 0]
72
+ [ 0 0 0 0 0 0 0 0 0 2 -1 0 0 1 0 0 -1 1 0 0 1 0 -1 -1 1]
73
+ [ 0 -1 0 0 1 0 0 0 0 0 0 1 0 0 1 1 -1 0 0 -1 0 0 0 0 0]
74
+ [ 0 0 0 0 0 0 0 1 -1 0 0 2 -1 0 0 1 0 0 0 -1 0 -1 1 -1 1]
75
+ [ 0 0 0 0 1 -1 0 1 -1 0 0 0 0 0 -1 2 0 0 0 0 1 0 1 0 0]
76
+ [ 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0]
77
+ [ 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 1 1 0 0 0]
78
+ Domain: Modular Symbols space of dimension 9 for Gamma_0(33) of weight ...
79
+ Codomain: Modular Symbols space of dimension 25 for Gamma_0(66) of weight ...
80
+ """
81
+ def __init__(self, matrix, domain, codomain, t):
82
+ r"""
83
+ Initialise a degeneracy map.
84
+
85
+ EXAMPLES::
86
+
87
+ sage: D = ModularSymbols(Gamma0(100)).degeneracy_map(2,5); D
88
+ Hecke module morphism degeneracy map corresponding to f(q) |--> f(q^5) defined by the matrix
89
+ 31 x 1 dense matrix over Rational Field
90
+ Domain: Modular Symbols space of dimension 31 for Gamma_0(100) of weight ...
91
+ Codomain: Modular Symbols space of dimension 1 for Gamma_0(2) of weight ...
92
+ sage: D == loads(dumps(D))
93
+ True
94
+ """
95
+ self.__t = t
96
+ H = domain.Hom(codomain)
97
+ if t == 1:
98
+ pow = ""
99
+ else:
100
+ pow = "^%s" % t
101
+ name = "degeneracy map corresponding to f(q) |--> f(q%s)" % (pow)
102
+ morphism.HeckeModuleMorphism_matrix.__init__(self, H, matrix, name)
103
+
104
+ def t(self):
105
+ """
106
+ Return the divisor of the quotient of the two levels
107
+ associated to the degeneracy map.
108
+
109
+ EXAMPLES::
110
+
111
+ sage: M = ModularSymbols(33)
112
+ sage: d = M.degeneracy_map(11,3)
113
+ sage: d.t()
114
+ 3
115
+ sage: d = M.degeneracy_map(11,1)
116
+ sage: d.t()
117
+ 1
118
+ """
119
+ return self.__t
@@ -0,0 +1,325 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs sage.libs.flint sage.libs.pari
3
+ """
4
+ Elements of Hecke modules
5
+
6
+ AUTHORS:
7
+
8
+ - William Stein
9
+ """
10
+
11
+ # ****************************************************************************
12
+ # Sage: Open Source Mathematical Software
13
+ #
14
+ # Copyright (C) 2005 William Stein <wstein@gmail.com>
15
+ #
16
+ # Distributed under the terms of the GNU General Public License (GPL)
17
+ #
18
+ # This code is distributed in the hope that it will be useful,
19
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21
+ # General Public License for more details.
22
+ #
23
+ # The full text of the GPL is available at:
24
+ #
25
+ # https://www.gnu.org/licenses/
26
+ # ****************************************************************************
27
+
28
+ try:
29
+ from typing import Self # type: ignore (Python >= 3.11)
30
+ except ImportError:
31
+ from typing_extensions import Self # type: ignore (Python 3.10)
32
+
33
+ from sage.structure.element import ModuleElement
34
+ from sage.structure.richcmp import op_NE, richcmp
35
+
36
+
37
+ def is_HeckeModuleElement(x):
38
+ """
39
+ Return ``True`` if x is a Hecke module element, i.e., of type HeckeModuleElement.
40
+
41
+ EXAMPLES::
42
+
43
+ sage: sage.modular.hecke.all.is_HeckeModuleElement(0)
44
+ doctest:warning...
45
+ DeprecationWarning: the function is_HeckeModuleElement is deprecated;
46
+ use 'isinstance(..., HeckeModuleElement)' instead
47
+ See https://github.com/sagemath/sage/issues/37895 for details.
48
+ False
49
+ sage: sage.modular.hecke.all.is_HeckeModuleElement(BrandtModule(37)([1,2,3]))
50
+ True
51
+ """
52
+ from sage.misc.superseded import deprecation
53
+ deprecation(37895, "the function is_HeckeModuleElement is deprecated; use 'isinstance(..., HeckeModuleElement)' instead")
54
+ return isinstance(x, HeckeModuleElement)
55
+
56
+
57
+ class HeckeModuleElement(ModuleElement):
58
+ """
59
+ Element of a Hecke module.
60
+ """
61
+ def __init__(self, parent, x=None):
62
+ """
63
+ INPUT:
64
+
65
+ - ``parent`` -- a Hecke module
66
+
67
+ - ``x`` -- element of the free module associated to parent
68
+
69
+ EXAMPLES::
70
+
71
+ sage: v = sage.modular.hecke.all.HeckeModuleElement(BrandtModule(37), vector(QQ,[1,2,3])); v
72
+ (1, 2, 3)
73
+ sage: type(v)
74
+ <class 'sage.modular.hecke.element.HeckeModuleElement'>
75
+
76
+ TESTS::
77
+
78
+ sage: v = ModularSymbols(37).0
79
+ sage: loads(dumps(v))
80
+ (1,0)
81
+ sage: loads(dumps(v)) == v
82
+ True
83
+ """
84
+ ModuleElement.__init__(self, parent)
85
+ if x is not None:
86
+ self.__element = x
87
+
88
+ def _repr_(self):
89
+ """
90
+ Return string representation of this Hecke module element.
91
+ The default representation is just the representation of the
92
+ underlying vector.
93
+
94
+ EXAMPLES::
95
+
96
+ sage: BrandtModule(37)([0,1,-1])._repr_()
97
+ '(0, 1, -1)'
98
+ """
99
+ return self.element()._repr_()
100
+
101
+ def _compute_element(self):
102
+ """
103
+ Use internally to compute vector underlying this element.
104
+
105
+ EXAMPLES::
106
+
107
+ sage: f = CuspForms(11, 2).gen(0)
108
+ sage: f._compute_element()
109
+ Traceback (most recent call last):
110
+ ...
111
+ NotImplementedError: _compute_element *must* be defined...
112
+ """
113
+ # You have to define this in the derived class if you ever set
114
+ # x=None in __init__ for your element class.
115
+ # The main reason for this is it allows for lazy constructors who
116
+ # compute the representation of an element (e.g., a q-expansion) in
117
+ # terms of the basis only when needed.
118
+
119
+ # Not in use at present.
120
+ raise NotImplementedError("_compute_element *must* be defined in the derived class if element is set to None in constructor")
121
+
122
+ def element(self):
123
+ """
124
+ Return underlying vector space element that defines this Hecke module element.
125
+
126
+ EXAMPLES::
127
+
128
+ sage: z = BrandtModule(37)([0,1,-1]).element(); z
129
+ (0, 1, -1)
130
+ sage: type(z)
131
+ <class 'sage.modules.vector_rational_dense.Vector_rational_dense'>
132
+ """
133
+ try:
134
+ return self.__element
135
+ except AttributeError:
136
+ self.__element = self._compute_element()
137
+ return self.__element
138
+
139
+ def _vector_(self, R=None):
140
+ """
141
+ This makes it so vector(self) and vector(self, R) both work.
142
+
143
+ EXAMPLES::
144
+
145
+ sage: v = BrandtModule(37)([0,1,-1]); v
146
+ (0, 1, -1)
147
+ sage: type(v._vector_())
148
+ <class 'sage.modules.vector_rational_dense.Vector_rational_dense'>
149
+ sage: type(vector(v))
150
+ <class 'sage.modules.vector_rational_dense.Vector_rational_dense'>
151
+ sage: type(vector(v, GF(2)))
152
+ <class 'sage.modules.vector_mod2_dense.Vector_mod2_dense'>
153
+ """
154
+ if R is None:
155
+ return self.__element
156
+ return self.__element.change_ring(R)
157
+
158
+ def _richcmp_(self, other, op):
159
+ """
160
+ Rich comparison of ``self`` and ``other``.
161
+
162
+ EXAMPLES::
163
+
164
+ sage: M = ModularSymbols(11, 2)
165
+ sage: M.0 == M.1 # indirect doctest
166
+ False
167
+ sage: M.0 == (M.1 + M.0 - M.1)
168
+ True
169
+ sage: M.0 == ModularSymbols(13, 2).0
170
+ False
171
+
172
+ sage: x = BrandtModule(37)([0,1,-1])
173
+ sage: x != x
174
+ False
175
+ """
176
+ if not isinstance(other, HeckeModuleElement):
177
+ return op == op_NE
178
+ return richcmp(self.element(), other.element(), op)
179
+
180
+ def ambient_module(self):
181
+ """
182
+ Return the ambient Hecke module that contains this element.
183
+
184
+ EXAMPLES::
185
+
186
+ sage: BrandtModule(37)([0,1,-1]).ambient_module()
187
+ Brandt module of dimension 3 of level 37 of weight 2 over Rational Field
188
+ """
189
+ return self.parent().ambient_module()
190
+
191
+ def _lmul_(self, x):
192
+ """
193
+ EXAMPLES::
194
+
195
+ sage: BrandtModule(37)([0,1,-1])._lmul_(3)
196
+ (0, 3, -3)
197
+ """
198
+ return self.parent()(self.element() * x)
199
+
200
+ def _rmul_(self, x):
201
+ """
202
+ EXAMPLES::
203
+
204
+ sage: BrandtModule(37)([0,1,-1])._rmul_(3)
205
+ (0, 3, -3)
206
+ """
207
+ return self.parent()(x * self.element())
208
+
209
+ def _neg_(self):
210
+ """
211
+ EXAMPLES::
212
+
213
+ sage: BrandtModule(37)([0,1,-1])._neg_()
214
+ (0, -1, 1)
215
+ """
216
+ return self.parent()(-self.element())
217
+
218
+ def _pos_(self) -> Self:
219
+ """
220
+ EXAMPLES::
221
+
222
+ sage: BrandtModule(37)([0,1,-1])._pos_()
223
+ (0, 1, -1)
224
+ """
225
+ return self
226
+
227
+ def _sub_(self, right):
228
+ """
229
+ EXAMPLES::
230
+
231
+ sage: BrandtModule(37)([0,1,-1])._sub_(BrandtModule(37)([0,1,-5]))
232
+ (0, 0, 4)
233
+ """
234
+ return self.parent()(self.element() - right.element())
235
+
236
+ def is_cuspidal(self) -> bool:
237
+ r"""
238
+ Return ``True`` if this element is cuspidal.
239
+
240
+ EXAMPLES::
241
+
242
+ sage: M = ModularForms(2, 22); M.0.is_cuspidal()
243
+ True
244
+ sage: (M.0 + M.4).is_cuspidal()
245
+ False
246
+ sage: EllipticCurve('37a1').newform().is_cuspidal() # needs database_cremona_mini_ellcurve
247
+ True
248
+
249
+ It works for modular symbols too::
250
+
251
+ sage: M = ModularSymbols(19,2)
252
+ sage: M.0.is_cuspidal()
253
+ False
254
+ sage: M.1.is_cuspidal()
255
+ True
256
+
257
+ TESTS:
258
+
259
+ Verify that :issue:`21497` is fixed::
260
+
261
+ sage: M = ModularSymbols(Gamma0(3),weight=22,sign=1)
262
+ sage: N = next(S for S in M.decomposition(anemic=False) if S.hecke_matrix(3).trace()==-128844)
263
+ sage: [g.is_cuspidal() for g in N.gens()]
264
+ [True, True]
265
+ """
266
+ return self in self.parent().ambient().cuspidal_submodule()
267
+
268
+ def is_eisenstein(self) -> bool:
269
+ r"""
270
+ Return ``True`` if this element is Eisenstein.
271
+
272
+ This makes sense for both modular forms and modular symbols.
273
+
274
+ EXAMPLES::
275
+
276
+ sage: CuspForms(2,8).0.is_eisenstein()
277
+ False
278
+ sage: M = ModularForms(2,8);(M.0 + M.1).is_eisenstein()
279
+ False
280
+ sage: M.1.is_eisenstein()
281
+ True
282
+ sage: ModularSymbols(19,4).0.is_eisenstein()
283
+ False
284
+ sage: EllipticCurve('37a1').newform().element().is_eisenstein() # needs database_cremona_mini_ellcurve
285
+ False
286
+ """
287
+ return self in self.parent().ambient().eisenstein_submodule()
288
+
289
+ def is_new(self, p=None) -> bool:
290
+ r"""
291
+ Return ``True`` if this element is `p`-new.
292
+
293
+ If `p` is ``None``, return ``True`` if the element is new.
294
+
295
+ EXAMPLES::
296
+
297
+ sage: CuspForms(22, 2).0.is_new(2)
298
+ False
299
+ sage: CuspForms(22, 2).0.is_new(11)
300
+ True
301
+ sage: CuspForms(22, 2).0.is_new()
302
+ False
303
+ """
304
+ return self in self.parent().new_submodule(p)
305
+
306
+ def is_old(self, p=None) -> bool:
307
+ r"""
308
+ Return ``True`` if this element is `p`-old.
309
+
310
+ If `p` is ``None``, return ``True`` if the element is old.
311
+
312
+ EXAMPLES::
313
+
314
+ sage: CuspForms(22, 2).0.is_old(11)
315
+ False
316
+ sage: CuspForms(22, 2).0.is_old(2)
317
+ True
318
+ sage: CuspForms(22, 2).0.is_old()
319
+ True
320
+ sage: EisensteinForms(144, 2).1.is_old() # long time (3s on sage.math, 2011)
321
+ False
322
+ sage: EisensteinForms(144, 2).1.is_old(2) # not implemented
323
+ False
324
+ """
325
+ return self in self.parent().old_submodule(p)