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,720 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs sage.libs.flint sage.libs.pari
3
+ r"""
4
+ Homology of modular abelian varieties
5
+
6
+ Sage can compute with homology groups associated to modular abelian
7
+ varieties with coefficients in any commutative ring. Supported
8
+ operations include computing matrices and characteristic
9
+ polynomials of Hecke operators, rank, and rational decomposition as
10
+ a direct sum of factors (obtained by cutting out kernels of Hecke
11
+ operators).
12
+
13
+ AUTHORS:
14
+
15
+ - William Stein (2007-03)
16
+
17
+ EXAMPLES::
18
+
19
+ sage: J = J0(43)
20
+ sage: H = J.integral_homology()
21
+ sage: H
22
+ Integral Homology of Abelian variety J0(43) of dimension 3
23
+ sage: H.hecke_matrix(19)
24
+ [ 0 0 -2 0 2 0]
25
+ [ 2 -4 -2 0 2 0]
26
+ [ 0 0 -2 -2 0 0]
27
+ [ 2 0 -2 -4 2 -2]
28
+ [ 0 2 0 -2 -2 0]
29
+ [ 0 2 0 -2 0 0]
30
+ sage: H.base_ring()
31
+ Integer Ring
32
+ sage: d = H.decomposition(); d
33
+ [Submodule of rank 2 of Integral Homology of Abelian variety J0(43) of dimension 3,
34
+ Submodule of rank 4 of Integral Homology of Abelian variety J0(43) of dimension 3]
35
+ sage: a = d[0]
36
+ sage: a.hecke_matrix(5)
37
+ [-4 0]
38
+ [ 0 -4]
39
+ sage: a.T(7)
40
+ Hecke operator T_7 on
41
+ Submodule of rank 2 of Integral Homology of Abelian variety J0(43) of dimension 3
42
+ """
43
+
44
+ # ****************************************************************************
45
+ # Copyright (C) 2007 William Stein <wstein@gmail.com>
46
+ #
47
+ # This program is free software: you can redistribute it and/or modify
48
+ # it under the terms of the GNU General Public License as published by
49
+ # the Free Software Foundation, either version 2 of the License, or
50
+ # (at your option) any later version.
51
+ # https://www.gnu.org/licenses/
52
+ # ****************************************************************************
53
+
54
+ from sage.categories.commutative_rings import CommutativeRings
55
+ from sage.modular.hecke.module import HeckeModule_free_module
56
+ from sage.rings.integer import Integer
57
+ from sage.rings.integer_ring import ZZ
58
+ from sage.rings.rational_field import QQ
59
+ from sage.structure.richcmp import richcmp_method, richcmp, richcmp_not_equal
60
+
61
+ # TODO: we will probably also need homology that is *not* a Hecke module.
62
+
63
+
64
+ @richcmp_method
65
+ class Homology(HeckeModule_free_module):
66
+ """
67
+ A homology group of an abelian variety, equipped with a Hecke
68
+ action.
69
+ """
70
+ def hecke_polynomial(self, n, var='x'):
71
+ r"""
72
+ Return the `n`-th Hecke polynomial in the given variable.
73
+
74
+ INPUT:
75
+
76
+ - ``n`` -- positive integer
77
+
78
+ - ``var`` -- string (default: ``'x'``); the variable name
79
+
80
+ OUTPUT: a polynomial over `\ZZ` in the given variable
81
+
82
+ EXAMPLES::
83
+
84
+ sage: H = J0(43).integral_homology(); H
85
+ Integral Homology of Abelian variety J0(43) of dimension 3
86
+ sage: f = H.hecke_polynomial(3); f
87
+ x^6 + 4*x^5 - 16*x^3 - 12*x^2 + 16*x + 16
88
+ sage: parent(f)
89
+ Univariate Polynomial Ring in x over Integer Ring
90
+ sage: H.hecke_polynomial(3,'w')
91
+ w^6 + 4*w^5 - 16*w^3 - 12*w^2 + 16*w + 16
92
+ """
93
+ return self.hecke_matrix(n).charpoly(var)
94
+
95
+
96
+ class Homology_abvar(Homology):
97
+ """
98
+ The homology of a modular abelian variety.
99
+ """
100
+ def __init__(self, abvar, base):
101
+ """
102
+ This is an abstract base class, so it is called implicitly in the
103
+ following examples.
104
+
105
+ EXAMPLES::
106
+
107
+ sage: H = J0(43).integral_homology()
108
+ sage: type(H)
109
+ <class 'sage.modular.abvar.homology.IntegralHomology_with_category'>
110
+
111
+ TESTS::
112
+
113
+ sage: H = J0(43).integral_homology()
114
+ sage: loads(dumps(H)) == H
115
+ True
116
+ """
117
+ if base not in CommutativeRings():
118
+ raise TypeError("base ring must be a commutative ring")
119
+ HeckeModule_free_module.__init__(
120
+ self, base, abvar.level(), weight=2)
121
+ self.__abvar = abvar
122
+
123
+ def __richcmp__(self, other, op):
124
+ r"""
125
+ Compare ``self`` to ``other``.
126
+
127
+ EXAMPLES::
128
+
129
+ sage: J0(37).integral_homology() == J0(41).integral_homology()
130
+ False
131
+ sage: J0(37).integral_homology() == J0(37).rational_homology()
132
+ False
133
+ sage: J0(37).integral_homology() == loads(dumps(J0(37).integral_homology()))
134
+ True
135
+ """
136
+ if not isinstance(other, Homology_abvar):
137
+ return NotImplemented
138
+ else:
139
+ return richcmp((self.abelian_variety(), self.base_ring()),
140
+ (other.abelian_variety(), other.base_ring()), op)
141
+
142
+ def _repr_(self):
143
+ """
144
+ Return string representation of ``self``. This must be defined in the
145
+ derived class.
146
+
147
+ EXAMPLES::
148
+
149
+ sage: H = J0(43).integral_homology()
150
+ sage: from sage.modular.abvar.homology import Homology_abvar
151
+ sage: Homology_abvar._repr_(H)
152
+ Traceback (most recent call last):
153
+ ...
154
+ NotImplementedError: please override this in the derived class
155
+ """
156
+ raise NotImplementedError("please override this in the derived class")
157
+
158
+ def gens(self):
159
+ """
160
+ Return generators of ``self``.
161
+
162
+ This is not yet implemented!
163
+
164
+ EXAMPLES::
165
+
166
+ sage: H = J0(37).homology()
167
+ sage: H.gens() # this will change
168
+ Traceback (most recent call last):
169
+ ...
170
+ NotImplementedError: homology classes not yet implemented
171
+ """
172
+ raise NotImplementedError("homology classes not yet implemented")
173
+
174
+ def gen(self, n):
175
+ """
176
+ Return `n`-th generator of ``self``.
177
+
178
+ This is not yet implemented!
179
+
180
+ EXAMPLES::
181
+
182
+ sage: H = J0(37).homology()
183
+ sage: H.gen(0) # this will change
184
+ Traceback (most recent call last):
185
+ ...
186
+ NotImplementedError: homology classes not yet implemented
187
+ """
188
+ raise NotImplementedError("homology classes not yet implemented")
189
+
190
+ def abelian_variety(self):
191
+ """
192
+ Return the abelian variety that this is the homology of.
193
+
194
+ EXAMPLES::
195
+
196
+ sage: H = J0(48).homology()
197
+ sage: H.abelian_variety()
198
+ Abelian variety J0(48) of dimension 3
199
+ """
200
+ return self.__abvar
201
+
202
+ def ambient_hecke_module(self):
203
+ """
204
+ Return the ambient Hecke module that this homology is contained
205
+ in.
206
+
207
+ EXAMPLES::
208
+
209
+ sage: H = J0(48).homology(); H
210
+ Integral Homology of Abelian variety J0(48) of dimension 3
211
+ sage: H.ambient_hecke_module()
212
+ Integral Homology of Abelian variety J0(48) of dimension 3
213
+ """
214
+ return self
215
+
216
+ def free_module(self):
217
+ """
218
+ Return the underlying free module of this homology group.
219
+
220
+ EXAMPLES::
221
+
222
+ sage: H = J0(48).homology()
223
+ sage: H.free_module()
224
+ Ambient free module of rank 6 over the principal ideal domain Integer Ring
225
+ """
226
+ try:
227
+ return self.__free_module
228
+ except AttributeError:
229
+ M = self.base_ring()**self.rank()
230
+ self.__free_module = M
231
+ return M
232
+
233
+ def hecke_bound(self):
234
+ r"""
235
+ Return bound on the number of Hecke operators needed to generate
236
+ the Hecke algebra as a `\ZZ`-module acting on this
237
+ space.
238
+
239
+ EXAMPLES::
240
+
241
+ sage: J0(48).homology().hecke_bound()
242
+ 16
243
+ sage: J1(15).homology().hecke_bound()
244
+ 32
245
+ """
246
+ return self.__abvar.modular_symbols(sign=1).hecke_bound()
247
+
248
+ def hecke_matrix(self, n):
249
+ """
250
+ Return the matrix of the `n`-th Hecke operator acting on this
251
+ homology group.
252
+
253
+ INPUT:
254
+
255
+ - ``n`` -- positive integer
256
+
257
+ OUTPUT: a matrix over the coefficient ring of this homology group
258
+
259
+ EXAMPLES::
260
+
261
+ sage: H = J0(23).integral_homology()
262
+ sage: H.hecke_matrix(3)
263
+ [-1 -2 2 0]
264
+ [ 0 -3 2 -2]
265
+ [ 2 -4 3 -2]
266
+ [ 2 -2 0 1]
267
+
268
+ The matrix is over the coefficient ring::
269
+
270
+ sage: J = J0(23)
271
+ sage: J.homology(QQ[I]).hecke_matrix(3).parent()
272
+ Full MatrixSpace of 4 by 4 dense matrices over
273
+ Number Field in I with defining polynomial x^2 + 1 with I = 1*I
274
+ """
275
+ raise NotImplementedError
276
+
277
+ def rank(self):
278
+ """
279
+ Return the rank as a module or vector space of this homology
280
+ group.
281
+
282
+ EXAMPLES::
283
+
284
+ sage: H = J0(5077).homology(); H
285
+ Integral Homology of Abelian variety J0(5077) of dimension 422
286
+ sage: H.rank()
287
+ 844
288
+ """
289
+ return self.__abvar.dimension() * 2
290
+
291
+ def submodule(self, U, check=True):
292
+ r"""
293
+ Return the submodule of this homology group given by `U`,
294
+ which should be a submodule of the free module associated to this
295
+ homology group.
296
+
297
+ INPUT:
298
+
299
+ - ``U`` -- submodule of ambient free module (or
300
+ something that defines one)
301
+
302
+ - ``check`` -- currently ignored
303
+
304
+
305
+ .. NOTE::
306
+
307
+ We do *not* check that U is invariant under all Hecke
308
+ operators.
309
+
310
+ EXAMPLES::
311
+
312
+ sage: H = J0(23).homology(); H
313
+ Integral Homology of Abelian variety J0(23) of dimension 2
314
+ sage: F = H.free_module()
315
+ sage: U = F.span([[1,2,3,4]])
316
+ sage: M = H.submodule(U); M
317
+ Submodule of rank 1 of Integral Homology of Abelian variety J0(23) of dimension 2
318
+
319
+ Note that the submodule command doesn't actually check that the
320
+ object defined is a homology group or is invariant under the Hecke
321
+ operators. For example, the fairly random `M` that we just
322
+ defined is not invariant under the Hecke operators, so it is not a
323
+ Hecke submodule - it is only a `\ZZ`-submodule.
324
+
325
+ ::
326
+
327
+ sage: M.hecke_matrix(3)
328
+ Traceback (most recent call last):
329
+ ...
330
+ ArithmeticError: subspace is not invariant under matrix
331
+ """
332
+ return Homology_submodule(self, U)
333
+
334
+
335
+ class IntegralHomology(Homology_abvar):
336
+ r"""
337
+ The integral homology `H_1(A,\ZZ)` of a modular
338
+ abelian variety.
339
+ """
340
+ def __init__(self, abvar):
341
+ """
342
+ Create the integral homology of a modular abelian variety.
343
+
344
+ INPUT:
345
+
346
+ - ``abvar`` -- a modular abelian variety
347
+
348
+ EXAMPLES::
349
+
350
+ sage: H = J0(23).integral_homology(); H
351
+ Integral Homology of Abelian variety J0(23) of dimension 2
352
+ sage: type(H)
353
+ <class 'sage.modular.abvar.homology.IntegralHomology_with_category'>
354
+
355
+ TESTS::
356
+
357
+ sage: loads(dumps(H)) == H
358
+ True
359
+ """
360
+ Homology_abvar.__init__(self, abvar, ZZ)
361
+
362
+ def _repr_(self):
363
+ """
364
+ String representation of the integral homology.
365
+
366
+ EXAMPLES::
367
+
368
+ sage: J0(23).integral_homology()._repr_()
369
+ 'Integral Homology of Abelian variety J0(23) of dimension 2'
370
+ """
371
+ return "Integral Homology of %s" % self.abelian_variety()
372
+
373
+ def hecke_matrix(self, n):
374
+ """
375
+ Return the matrix of the `n`-th Hecke operator acting on this
376
+ homology group.
377
+
378
+ EXAMPLES::
379
+
380
+ sage: J0(48).integral_homology().hecke_bound()
381
+ 16
382
+ sage: t = J1(13).integral_homology().hecke_matrix(3); t
383
+ [-2 2 2 -2]
384
+ [-2 0 2 0]
385
+ [ 0 0 0 -2]
386
+ [ 0 0 2 -2]
387
+ sage: t.base_ring()
388
+ Integer Ring
389
+ """
390
+ n = Integer(n)
391
+ return self.abelian_variety()._integral_hecke_matrix(n)
392
+
393
+ def hecke_polynomial(self, n, var='x'):
394
+ """
395
+ Return the `n`-th Hecke polynomial on this integral homology group.
396
+
397
+ EXAMPLES::
398
+
399
+ sage: f = J0(43).integral_homology().hecke_polynomial(2)
400
+ sage: f.base_ring()
401
+ Integer Ring
402
+ sage: factor(f)
403
+ (x + 2)^2 * (x^2 - 2)^2
404
+ """
405
+ n = Integer(n)
406
+ M = self.abelian_variety().modular_symbols(sign=1)
407
+ return (M.hecke_polynomial(n, var)**2).change_ring(ZZ)
408
+
409
+
410
+ class RationalHomology(Homology_abvar):
411
+ r"""
412
+ The rational homology `H_1(A,\QQ)` of a modular
413
+ abelian variety.
414
+ """
415
+ def __init__(self, abvar):
416
+ """
417
+ Create the rational homology of a modular abelian variety.
418
+
419
+ INPUT:
420
+
421
+ - ``abvar`` -- a modular abelian variety
422
+
423
+ EXAMPLES::
424
+
425
+ sage: H = J0(23).rational_homology(); H
426
+ Rational Homology of Abelian variety J0(23) of dimension 2
427
+
428
+ TESTS::
429
+
430
+ sage: loads(dumps(H)) == H
431
+ True
432
+ """
433
+ Homology_abvar.__init__(self, abvar, QQ)
434
+
435
+ def _repr_(self):
436
+ """
437
+ Return string representation of the rational homology.
438
+
439
+ EXAMPLES::
440
+
441
+ sage: J0(23).rational_homology()._repr_()
442
+ 'Rational Homology of Abelian variety J0(23) of dimension 2'
443
+ """
444
+ return "Rational Homology of %s" % self.abelian_variety()
445
+
446
+ def hecke_matrix(self, n):
447
+ """
448
+ Return the matrix of the `n`-th Hecke operator acting on this
449
+ homology group.
450
+
451
+ EXAMPLES::
452
+
453
+ sage: t = J1(13).homology(QQ).hecke_matrix(3); t
454
+ [-2 2 2 -2]
455
+ [-2 0 2 0]
456
+ [ 0 0 0 -2]
457
+ [ 0 0 2 -2]
458
+ sage: t.base_ring()
459
+ Rational Field
460
+ sage: t = J1(13).homology(GF(3)).hecke_matrix(3); t
461
+ [1 2 2 1]
462
+ [1 0 2 0]
463
+ [0 0 0 1]
464
+ [0 0 2 1]
465
+ sage: t.base_ring()
466
+ Finite Field of size 3
467
+ """
468
+ n = Integer(n)
469
+ return self.abelian_variety()._rational_hecke_matrix(n)
470
+
471
+ def hecke_polynomial(self, n, var='x'):
472
+ """
473
+ Return the `n`-th Hecke polynomial on this rational homology group.
474
+
475
+ EXAMPLES::
476
+
477
+ sage: f = J0(43).rational_homology().hecke_polynomial(2)
478
+ sage: f.base_ring()
479
+ Rational Field
480
+ sage: factor(f)
481
+ (x + 2) * (x^2 - 2)
482
+ """
483
+ f = self.hecke_operator(n).matrix().characteristic_polynomial(var)
484
+ _, poly = f.is_square(True)
485
+ return poly
486
+
487
+
488
+ class Homology_over_base(Homology_abvar):
489
+ r"""
490
+ The homology over a modular abelian variety over an arbitrary base
491
+ commutative ring (not `\ZZ` or `\QQ`).
492
+ """
493
+ def __init__(self, abvar, base_ring):
494
+ r"""
495
+ Called when creating homology with coefficients not
496
+ `\ZZ` or `\QQ`.
497
+
498
+ INPUT:
499
+
500
+ - ``abvar`` -- a modular abelian variety
501
+
502
+ - ``base_ring`` -- a commutative ring
503
+
504
+ EXAMPLES::
505
+
506
+ sage: H = J0(23).homology(GF(5)); H
507
+ Homology with coefficients in Finite Field of size 5 of Abelian variety J0(23) of dimension 2
508
+ sage: type(H)
509
+ <class 'sage.modular.abvar.homology.Homology_over_base_with_category'>
510
+
511
+ TESTS::
512
+
513
+ sage: loads(dumps(H)) == H
514
+ True
515
+ """
516
+ Homology_abvar.__init__(self, abvar, base_ring)
517
+
518
+ def _repr_(self):
519
+ """
520
+ Return string representation of ``self``.
521
+
522
+ EXAMPLES::
523
+
524
+ sage: H = J0(23).homology(GF(5))
525
+ sage: H._repr_()
526
+ 'Homology with coefficients in Finite Field of size 5 of Abelian variety J0(23) of dimension 2'
527
+ """
528
+ return "Homology with coefficients in %s of %s" % (self.base_ring(), self.abelian_variety())
529
+
530
+ def hecke_matrix(self, n):
531
+ """
532
+ Return the matrix of the `n`-th Hecke operator acting on this
533
+ homology group.
534
+
535
+ EXAMPLES::
536
+
537
+ sage: t = J1(13).homology(GF(3)).hecke_matrix(3); t
538
+ [1 2 2 1]
539
+ [1 0 2 0]
540
+ [0 0 0 1]
541
+ [0 0 2 1]
542
+ sage: t.base_ring()
543
+ Finite Field of size 3
544
+ """
545
+ n = Integer(n)
546
+ return self.abelian_variety()._integral_hecke_matrix(n).change_ring(self.base_ring())
547
+
548
+
549
+ class Homology_submodule(Homology):
550
+ """
551
+ A submodule of the homology of a modular abelian variety.
552
+ """
553
+ def __init__(self, ambient, submodule):
554
+ """
555
+ Create a submodule of the homology of a modular abelian variety.
556
+
557
+ INPUT:
558
+
559
+ - ``ambient`` -- the homology of some modular abelian
560
+ variety with ring coefficients
561
+
562
+ - ``submodule`` -- a submodule of the free module
563
+ underlying ambient
564
+
565
+ EXAMPLES::
566
+
567
+ sage: H = J0(37).homology()
568
+ sage: H.submodule([[1,0,0,0]])
569
+ Submodule of rank 1 of Integral Homology of Abelian variety J0(37) of dimension 2
570
+
571
+ TESTS::
572
+
573
+ sage: loads(dumps(H)) == H
574
+ True
575
+ """
576
+ if not isinstance(ambient, Homology_abvar):
577
+ raise TypeError("ambient must be the homology of a modular abelian variety")
578
+ self.__ambient = ambient
579
+ submodule = ambient.free_module().submodule(submodule)
580
+ self.__submodule = submodule
581
+ HeckeModule_free_module.__init__(
582
+ self, ambient.base_ring(), ambient.level(), weight=2)
583
+
584
+ def _repr_(self):
585
+ """
586
+ String representation of this submodule of homology.
587
+
588
+ EXAMPLES::
589
+
590
+ sage: H = J0(37).homology()
591
+ sage: G = H.submodule([[1, 2, 3, 4]])
592
+ sage: G._repr_()
593
+ 'Submodule of rank 1 of Integral Homology of Abelian variety J0(37) of dimension 2'
594
+ """
595
+ return "Submodule of rank %s of %s" % (self.rank(), self.__ambient)
596
+
597
+ def __richcmp__(self, other, op):
598
+ r"""
599
+ Compare ``self`` to ``other``.
600
+
601
+ EXAMPLES::
602
+
603
+ sage: J0(37).homology().decomposition() # indirect doctest
604
+ [Submodule of rank 2 of Integral Homology of Abelian variety J0(37) of dimension 2,
605
+ Submodule of rank 2 of Integral Homology of Abelian variety J0(37) of dimension 2]
606
+ """
607
+ if not isinstance(other, Homology_submodule):
608
+ return NotImplemented
609
+ lx = self.__ambient
610
+ rx = other.__ambient
611
+ if lx != rx:
612
+ return richcmp_not_equal(lx, rx, op)
613
+ return richcmp(self.__submodule, other.__submodule, op)
614
+
615
+ def ambient_hecke_module(self):
616
+ """
617
+ Return the ambient Hecke module that this homology is contained
618
+ in.
619
+
620
+ EXAMPLES::
621
+
622
+ sage: H = J0(48).homology(); H
623
+ Integral Homology of Abelian variety J0(48) of dimension 3
624
+ sage: d = H.decomposition(); d
625
+ [Submodule of rank 2 of Integral Homology of Abelian variety J0(48) of dimension 3,
626
+ Submodule of rank 4 of Integral Homology of Abelian variety J0(48) of dimension 3]
627
+ sage: d[0].ambient_hecke_module()
628
+ Integral Homology of Abelian variety J0(48) of dimension 3
629
+ """
630
+ return self.__ambient
631
+
632
+ def free_module(self):
633
+ """
634
+ Return the underlying free module of the homology group.
635
+
636
+ EXAMPLES::
637
+
638
+ sage: H = J0(48).homology()
639
+ sage: K = H.decomposition()[1]; K
640
+ Submodule of rank 4 of Integral Homology of Abelian variety J0(48) of dimension 3
641
+ sage: K.free_module()
642
+ Free module of degree 6 and rank 4 over Integer Ring
643
+ Echelon basis matrix:
644
+ [ 1 0 0 0 0 0]
645
+ [ 0 1 0 0 1 -1]
646
+ [ 0 0 1 0 -1 1]
647
+ [ 0 0 0 1 0 -1]
648
+ """
649
+ return self.__submodule
650
+
651
+ def hecke_bound(self):
652
+ """
653
+ Return a bound on the number of Hecke operators needed to generate
654
+ the Hecke algebra acting on this homology group.
655
+
656
+ EXAMPLES::
657
+
658
+ sage: d = J0(43).homology().decomposition(2); d
659
+ [Submodule of rank 2 of Integral Homology of Abelian variety J0(43) of dimension 3,
660
+ Submodule of rank 4 of Integral Homology of Abelian variety J0(43) of dimension 3]
661
+
662
+ Because the first factor has dimension 2 it corresponds to an
663
+ elliptic curve, so we have a Hecke bound of 1.
664
+
665
+ ::
666
+
667
+ sage: d[0].hecke_bound()
668
+ 1
669
+ sage: d[1].hecke_bound()
670
+ 8
671
+ """
672
+ if self.rank() <= 2:
673
+ return ZZ(1)
674
+ else:
675
+ return self.__ambient.hecke_bound()
676
+
677
+ def hecke_matrix(self, n):
678
+ """
679
+ Return the matrix of the `n`-th Hecke operator acting on this
680
+ homology group.
681
+
682
+ EXAMPLES::
683
+
684
+ sage: d = J0(125).homology(GF(17)).decomposition(2); d
685
+ [Submodule of rank 4 of Homology with coefficients in Finite Field of size 17 of Abelian variety J0(125) of dimension 8,
686
+ Submodule of rank 4 of Homology with coefficients in Finite Field of size 17 of Abelian variety J0(125) of dimension 8,
687
+ Submodule of rank 8 of Homology with coefficients in Finite Field of size 17 of Abelian variety J0(125) of dimension 8]
688
+ sage: t = d[0].hecke_matrix(17); t
689
+ [16 15 15 0]
690
+ [ 0 5 0 2]
691
+ [ 2 0 5 15]
692
+ [ 0 15 0 16]
693
+ sage: t.base_ring()
694
+ Finite Field of size 17
695
+ sage: t.fcp()
696
+ (x^2 + 13*x + 16)^2
697
+ """
698
+ n = Integer(n)
699
+ try:
700
+ return self.__hecke_matrix[n]
701
+ except AttributeError:
702
+ self.__hecke_matrix = {}
703
+ except KeyError:
704
+ pass
705
+ t = self.__ambient.hecke_matrix(n)
706
+ s = t.restrict(self.__submodule)
707
+ self.__hecke_matrix[n] = s
708
+ return s
709
+
710
+ def rank(self):
711
+ """
712
+ Return the rank of this homology group.
713
+
714
+ EXAMPLES::
715
+
716
+ sage: d = J0(43).homology().decomposition(2)
717
+ sage: [H.rank() for H in d]
718
+ [2, 4]
719
+ """
720
+ return self.__submodule.rank()