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,186 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ """
3
+ Constructors for certain modular abelian varieties
4
+
5
+ AUTHORS:
6
+
7
+ - William Stein (2007-03)
8
+ """
9
+ # #########################################################################
10
+ # Copyright (C) 2007 William Stein <wstein@gmail.com> #
11
+ # Distributed under the terms of the GNU General Public License (GPL) #
12
+ # https://www.gnu.org/licenses/ #
13
+ # #########################################################################
14
+
15
+ import weakref
16
+
17
+ from sage.rings.integer import Integer
18
+
19
+ from sage.modular.arithgroup.all import CongruenceSubgroupBase, Gamma0
20
+ from sage.modular.modsym.space import ModularSymbolsSpace
21
+ from .abvar_newform import ModularAbelianVariety_newform
22
+ import sage.modular.modform.element
23
+ from sage.modular.abvar import abvar
24
+
25
+ _cache = {}
26
+
27
+
28
+ def _get(key):
29
+ """
30
+ Return the cached abelian variety with given key. This is used
31
+ internally by the abelian varieties constructor.
32
+
33
+ INPUT:
34
+
35
+ - ``key`` -- hashable
36
+
37
+ EXAMPLES::
38
+
39
+ sage: sage.modular.abvar.constructor._saved('a', J0(37))
40
+ Abelian variety J0(37) of dimension 2
41
+ sage: sage.modular.abvar.constructor._get('a')
42
+ Abelian variety J0(37) of dimension 2
43
+ sage: sage.modular.abvar.constructor._get('b')
44
+ Traceback (most recent call last):
45
+ ...
46
+ ValueError: element not in cache
47
+ """
48
+ if key in _cache:
49
+ z = _cache[key]()
50
+ if z is not None:
51
+ return z
52
+ raise ValueError("element not in cache")
53
+
54
+
55
+ def _saved(key, J):
56
+ """
57
+ Return the cached abelian variety with given key. This is used
58
+ internally by the abelian varieties constructor.
59
+
60
+ INPUT:
61
+
62
+ - ``key`` -- hashable
63
+
64
+ - ``J`` -- modular abelian variety
65
+
66
+ OUTPUT: ``J`` -- returns the modabvar, to make code that uses
67
+ this simpler
68
+
69
+ EXAMPLES::
70
+
71
+ sage: sage.modular.abvar.constructor._saved('37', J0(37))
72
+ Abelian variety J0(37) of dimension 2
73
+ """
74
+ _cache[key] = weakref.ref(J)
75
+ return J
76
+
77
+
78
+ def J0(N):
79
+ """
80
+ Return the Jacobian `J_0(N)` of the modular curve
81
+ `X_0(N)`.
82
+
83
+ EXAMPLES::
84
+
85
+ sage: J0(389)
86
+ Abelian variety J0(389) of dimension 32
87
+
88
+ The result is cached::
89
+
90
+ sage: J0(33) is J0(33)
91
+ True
92
+ """
93
+ key = 'J0(%s)' % N
94
+ try:
95
+ return _get(key)
96
+ except ValueError:
97
+ from sage.modular.arithgroup.all import Gamma0
98
+ J = Gamma0(N).modular_abelian_variety()
99
+ return _saved(key, J)
100
+
101
+
102
+ def J1(N):
103
+ """
104
+ Return the Jacobian `J_1(N)` of the modular curve
105
+ `X_1(N)`.
106
+
107
+ EXAMPLES::
108
+
109
+ sage: J1(389)
110
+ Abelian variety J1(389) of dimension 6112
111
+ """
112
+ key = 'J1(%s)' % N
113
+ try:
114
+ return _get(key)
115
+ except ValueError:
116
+ from sage.modular.arithgroup.all import Gamma1
117
+ return _saved(key, Gamma1(N).modular_abelian_variety())
118
+
119
+
120
+ def JH(N, H):
121
+ """
122
+ Return the Jacobian `J_H(N)` of the modular curve
123
+ `X_H(N)`.
124
+
125
+ EXAMPLES::
126
+
127
+ sage: JH(389,[16])
128
+ Abelian variety JH(389,[16]) of dimension 64
129
+ """
130
+ key = 'JH(%s,%s)' % (N,H)
131
+ try:
132
+ return _get(key)
133
+ except ValueError:
134
+ from sage.modular.arithgroup.all import GammaH
135
+ return _saved(key, GammaH(N, H).modular_abelian_variety())
136
+
137
+
138
+ def AbelianVariety(X):
139
+ """
140
+ Create the abelian variety corresponding to the given defining
141
+ data.
142
+
143
+ INPUT:
144
+
145
+ - ``X`` -- integer, string, newform, modsym space,
146
+ congruence subgroup or tuple of congruence subgroups
147
+
148
+ OUTPUT: a modular abelian variety
149
+
150
+ EXAMPLES::
151
+
152
+ sage: AbelianVariety(Gamma0(37))
153
+ Abelian variety J0(37) of dimension 2
154
+ sage: AbelianVariety('37a')
155
+ Newform abelian subvariety 37a of dimension 1 of J0(37)
156
+ sage: AbelianVariety(Newform('37a'))
157
+ Newform abelian subvariety 37a of dimension 1 of J0(37)
158
+ sage: AbelianVariety(ModularSymbols(37).cuspidal_submodule())
159
+ Abelian variety J0(37) of dimension 2
160
+ sage: AbelianVariety((Gamma0(37), Gamma0(11)))
161
+ Abelian variety J0(37) x J0(11) of dimension 3
162
+ sage: AbelianVariety(37)
163
+ Abelian variety J0(37) of dimension 2
164
+ sage: AbelianVariety([1,2,3])
165
+ Traceback (most recent call last):
166
+ ...
167
+ TypeError: X must be an integer, string, newform, modsym space, congruence subgroup or tuple of congruence subgroups
168
+ """
169
+ if isinstance(X, (int, Integer)):
170
+ X = Gamma0(X)
171
+ if isinstance(X, CongruenceSubgroupBase):
172
+ X = X.modular_symbols().cuspidal_submodule()
173
+ elif isinstance(X, str):
174
+ from sage.modular.modform.constructor import Newform
175
+ f = Newform(X, names='a')
176
+ return ModularAbelianVariety_newform(f, internal_name=True)
177
+ elif isinstance(X, sage.modular.modform.element.Newform):
178
+ return ModularAbelianVariety_newform(X)
179
+
180
+ if isinstance(X, ModularSymbolsSpace):
181
+ return abvar.ModularAbelianVariety_modsym(X)
182
+
183
+ if isinstance(X, (tuple,list)) and all(isinstance(G, CongruenceSubgroupBase) for G in X):
184
+ return abvar.ModularAbelianVariety(X)
185
+
186
+ raise TypeError("X must be an integer, string, newform, modsym space, congruence subgroup or tuple of congruence subgroups")
@@ -0,0 +1,371 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ """
3
+ Cuspidal subgroups of modular abelian varieties
4
+
5
+ AUTHORS:
6
+
7
+ - William Stein (2007-03, 2008-02)
8
+
9
+ EXAMPLES: We compute the cuspidal subgroup of `J_1(13)`::
10
+
11
+ sage: A = J1(13)
12
+ sage: C = A.cuspidal_subgroup(); C
13
+ Finite subgroup with invariants [19, 19] over QQ of Abelian variety J1(13) of dimension 2
14
+ sage: C.gens()
15
+ ([(1/19, 0, 9/19, 9/19)], [(0, 1/19, 0, 9/19)])
16
+ sage: C.order()
17
+ 361
18
+ sage: C.invariants()
19
+ [19, 19]
20
+
21
+ We compute the cuspidal subgroup of `J_0(54)`::
22
+
23
+ sage: A = J0(54)
24
+ sage: C = A.cuspidal_subgroup(); C
25
+ Finite subgroup with invariants [3, 3, 3, 3, 3, 9] over QQ of Abelian variety J0(54) of dimension 4
26
+ sage: C.gens()
27
+ ([(1/3, 0, 0, 0, 0, 1/3, 0, 2/3)], [(0, 1/3, 0, 0, 0, 2/3, 0, 1/3)], [(0, 0, 1/9, 1/9, 1/9, 1/9, 1/9, 2/9)], [(0, 0, 0, 1/3, 0, 1/3, 0, 0)], [(0, 0, 0, 0, 1/3, 1/3, 0, 1/3)], [(0, 0, 0, 0, 0, 0, 1/3, 2/3)])
28
+ sage: C.order()
29
+ 2187
30
+ sage: C.invariants()
31
+ [3, 3, 3, 3, 3, 9]
32
+
33
+ We compute the subgroup of the cuspidal subgroup generated by
34
+ rational cusps.
35
+
36
+ ::
37
+
38
+ sage: C = J0(54).rational_cusp_subgroup(); C
39
+ Finite subgroup with invariants [3, 3, 9] over QQ of Abelian variety J0(54) of dimension 4
40
+ sage: C.gens()
41
+ ([(1/3, 0, 0, 1/3, 2/3, 1/3, 0, 1/3)], [(0, 0, 1/9, 1/9, 7/9, 7/9, 1/9, 8/9)], [(0, 0, 0, 0, 0, 0, 1/3, 2/3)])
42
+ sage: C.order()
43
+ 81
44
+ sage: C.invariants()
45
+ [3, 3, 9]
46
+
47
+ This might not give us the exact rational torsion subgroup, since
48
+ it might be bigger than order `81`::
49
+
50
+ sage: J0(54).rational_torsion_subgroup().multiple_of_order()
51
+ 243
52
+
53
+ TESTS::
54
+
55
+ sage: C = J0(54).cuspidal_subgroup()
56
+ sage: loads(dumps(C)) == C
57
+ True
58
+ sage: D = J0(54).rational_cusp_subgroup()
59
+ sage: loads(dumps(D)) == D
60
+ True
61
+ """
62
+
63
+ # *****************************************************************************
64
+ # Copyright (C) 2007 William Stein <wstein@gmail.com>
65
+ #
66
+ # This program is free software: you can redistribute it and/or modify
67
+ # it under the terms of the GNU General Public License as published by
68
+ # the Free Software Foundation, either version 2 of the License, or
69
+ # (at your option) any later version.
70
+ # https://www.gnu.org/licenses/
71
+ # *****************************************************************************
72
+
73
+ from sage.matrix.constructor import matrix
74
+ from sage.modular.arithgroup.all import Gamma0_class
75
+ from sage.modular.cusps import Cusp
76
+ from sage.rings.infinity import infinity
77
+ from sage.rings.integer_ring import ZZ
78
+ from sage.rings.rational_field import QQ
79
+
80
+ from .finite_subgroup import FiniteSubgroup
81
+
82
+
83
+ class CuspidalSubgroup_generic(FiniteSubgroup):
84
+ def _compute_lattice(self, rational_only=False, rational_subgroup=False):
85
+ r"""
86
+ Return a list of vectors that define elements of the rational
87
+ homology that generate this finite subgroup.
88
+
89
+ INPUT:
90
+
91
+ - ``rational_only`` -- boolean (default: ``False``); if
92
+ ``True``, only use rational cusps
93
+
94
+ OUTPUT: list of vectors
95
+
96
+ EXAMPLES::
97
+
98
+ sage: J = J0(37)
99
+ sage: C = sage.modular.abvar.cuspidal_subgroup.CuspidalSubgroup(J)
100
+ sage: C._compute_lattice()
101
+ Free module of degree 4 and rank 4 over Integer Ring
102
+ Echelon basis matrix:
103
+ [ 1 0 0 0]
104
+ [ 0 1 0 0]
105
+ [ 0 0 1 0]
106
+ [ 0 0 0 1/3]
107
+ sage: J = J0(43)
108
+ sage: C = sage.modular.abvar.cuspidal_subgroup.CuspidalSubgroup(J)
109
+ sage: C._compute_lattice()
110
+ Free module of degree 6 and rank 6 over Integer Ring
111
+ Echelon basis matrix:
112
+ [ 1 0 0 0 0 0]
113
+ [ 0 1/7 0 6/7 0 5/7]
114
+ [ 0 0 1 0 0 0]
115
+ [ 0 0 0 1 0 0]
116
+ [ 0 0 0 0 1 0]
117
+ [ 0 0 0 0 0 1]
118
+ sage: J = J0(22)
119
+ sage: C = sage.modular.abvar.cuspidal_subgroup.CuspidalSubgroup(J)
120
+ sage: C._compute_lattice()
121
+ Free module of degree 4 and rank 4 over Integer Ring
122
+ Echelon basis matrix:
123
+ [1/5 1/5 4/5 0]
124
+ [ 0 1 0 0]
125
+ [ 0 0 1 0]
126
+ [ 0 0 0 1/5]
127
+ sage: J = J1(13)
128
+ sage: C = sage.modular.abvar.cuspidal_subgroup.CuspidalSubgroup(J)
129
+ sage: C._compute_lattice()
130
+ Free module of degree 4 and rank 4 over Integer Ring
131
+ Echelon basis matrix:
132
+ [1/19 0 9/19 9/19]
133
+ [ 0 1/19 0 9/19]
134
+ [ 0 0 1 0]
135
+ [ 0 0 0 1]
136
+
137
+ We compute with and without the optional
138
+ ``rational_only`` option.
139
+
140
+ ::
141
+
142
+ sage: J = J0(27); G = sage.modular.abvar.cuspidal_subgroup.CuspidalSubgroup(J)
143
+ sage: G._compute_lattice()
144
+ Free module of degree 2 and rank 2 over Integer Ring
145
+ Echelon basis matrix:
146
+ [1/3 0]
147
+ [ 0 1/3]
148
+ sage: G._compute_lattice(rational_only=True)
149
+ Free module of degree 2 and rank 2 over Integer Ring
150
+ Echelon basis matrix:
151
+ [1/3 0]
152
+ [ 0 1]
153
+ """
154
+ A = self.abelian_variety()
155
+ Cusp = A.modular_symbols()
156
+ Amb = Cusp.ambient_module()
157
+ Eis = Amb.eisenstein_submodule()
158
+
159
+ C = Amb.cusps()
160
+ N = Amb.level()
161
+
162
+ if rational_subgroup:
163
+ # QQ-rational subgroup of cuspidal subgroup
164
+ assert A.is_ambient()
165
+ Q = Cusp.abvarquo_rational_cuspidal_subgroup()
166
+ return Q.V()
167
+
168
+ if rational_only:
169
+ # subgroup generated by differences of rational cusps
170
+ if not isinstance(A.group(), Gamma0_class):
171
+ raise NotImplementedError('computation of rational cusps only implemented in Gamma0 case.')
172
+ if not N.is_squarefree():
173
+ data = [n for n in N.coprime_integers(N) if n >= 2]
174
+ C = [c for c in C if is_rational_cusp_gamma0(c, N, data)]
175
+
176
+ v = [Amb([infinity, alpha]).element() for alpha in C]
177
+ cusp_matrix = matrix(QQ, len(v), Amb.dimension(), v)
178
+
179
+ # TODO -- refactor something out here
180
+ # Now we project onto the cuspidal part.
181
+ B = Cusp.free_module().basis_matrix().stack(Eis.free_module().basis_matrix())
182
+ X = B.solve_left(cusp_matrix)
183
+ X = X.matrix_from_columns(range(Cusp.dimension()))
184
+ return X.row_module(ZZ) + A.lattice()
185
+
186
+
187
+ class CuspidalSubgroup(CuspidalSubgroup_generic):
188
+ """
189
+ EXAMPLES::
190
+
191
+ sage: a = J0(65)[2]
192
+ sage: t = a.cuspidal_subgroup()
193
+ sage: t.order()
194
+ 6
195
+ """
196
+ def _repr_(self):
197
+ """
198
+ String representation of the cuspidal subgroup.
199
+
200
+ EXAMPLES::
201
+
202
+ sage: G = J0(27).cuspidal_subgroup()
203
+ sage: G._repr_()
204
+ 'Finite subgroup with invariants [3, 3] over QQ of Abelian variety J0(27) of dimension 1'
205
+ """
206
+ return "Cuspidal subgroup %sover QQ of %s" % (self._invariants_repr(), self.abelian_variety())
207
+
208
+ def lattice(self):
209
+ """
210
+ Returned cached tuple of vectors that define elements of the
211
+ rational homology that generate this finite subgroup.
212
+
213
+ OUTPUT: tuple (cached)
214
+
215
+ EXAMPLES::
216
+
217
+ sage: J = J0(27)
218
+ sage: G = J.cuspidal_subgroup()
219
+ sage: G.lattice()
220
+ Free module of degree 2 and rank 2 over Integer Ring
221
+ Echelon basis matrix:
222
+ [1/3 0]
223
+ [ 0 1/3]
224
+
225
+ Test that the result is cached::
226
+
227
+ sage: G.lattice() is G.lattice()
228
+ True
229
+ """
230
+ try:
231
+ return self.__lattice
232
+ except AttributeError:
233
+ lattice = self._compute_lattice(rational_only=False)
234
+ self.__lattice = lattice
235
+ return lattice
236
+
237
+
238
+ class RationalCuspSubgroup(CuspidalSubgroup_generic):
239
+ """
240
+ EXAMPLES::
241
+
242
+ sage: a = J0(65)[2]
243
+ sage: t = a.rational_cusp_subgroup()
244
+ sage: t.order()
245
+ 6
246
+ """
247
+ def _repr_(self):
248
+ """
249
+ String representation of the cuspidal subgroup.
250
+
251
+ EXAMPLES::
252
+
253
+ sage: G = J0(27).rational_cusp_subgroup()
254
+ sage: G._repr_()
255
+ 'Finite subgroup with invariants [3] over QQ of Abelian variety J0(27) of dimension 1'
256
+ """
257
+ return "Subgroup generated by differences of rational cusps %sover QQ of %s" % (self._invariants_repr(), self.abelian_variety())
258
+
259
+ def lattice(self):
260
+ """
261
+ Return lattice that defines this group.
262
+
263
+ OUTPUT: lattice
264
+
265
+ EXAMPLES::
266
+
267
+ sage: G = J0(27).rational_cusp_subgroup()
268
+ sage: G.lattice()
269
+ Free module of degree 2 and rank 2 over Integer Ring
270
+ Echelon basis matrix:
271
+ [1/3 0]
272
+ [ 0 1]
273
+
274
+ Test that the result is cached.
275
+
276
+ ::
277
+
278
+ sage: G.lattice() is G.lattice()
279
+ True
280
+ """
281
+ try:
282
+ return self.__lattice
283
+ except AttributeError:
284
+ lattice = self._compute_lattice(rational_only=True)
285
+ self.__lattice = lattice
286
+ return lattice
287
+
288
+
289
+ class RationalCuspidalSubgroup(CuspidalSubgroup_generic):
290
+ """
291
+ EXAMPLES::
292
+
293
+ sage: a = J0(65)[2]
294
+ sage: t = a.rational_cuspidal_subgroup()
295
+ sage: t.order()
296
+ 6
297
+ """
298
+ def _repr_(self):
299
+ """
300
+ String representation of the cuspidal subgroup.
301
+
302
+ EXAMPLES::
303
+
304
+ sage: G = J0(27).rational_cuspidal_subgroup()
305
+ sage: G._repr_()
306
+ 'Finite subgroup with invariants [3] over QQ of Abelian variety J0(27) of dimension 1'
307
+ """
308
+ return "Rational cuspidal subgroup %sover QQ of %s" % (self._invariants_repr(), self.abelian_variety())
309
+
310
+ def lattice(self):
311
+ """
312
+ Return lattice that defines this group.
313
+
314
+ OUTPUT: lattice
315
+
316
+ EXAMPLES::
317
+
318
+ sage: G = J0(27).rational_cuspidal_subgroup()
319
+ sage: G.lattice()
320
+ Free module of degree 2 and rank 2 over Integer Ring
321
+ Echelon basis matrix:
322
+ [1/3 0]
323
+ [ 0 1]
324
+
325
+ Test that the result is cached.
326
+
327
+ ::
328
+
329
+ sage: G.lattice() is G.lattice()
330
+ True
331
+ """
332
+ try:
333
+ return self.__lattice
334
+ except AttributeError:
335
+ lattice = self._compute_lattice(rational_subgroup=True)
336
+ self.__lattice = lattice
337
+ return lattice
338
+
339
+
340
+ def is_rational_cusp_gamma0(c, N, data) -> bool:
341
+ """
342
+ Return ``True`` if the rational number c is a rational cusp of level N.
343
+
344
+ This uses remarks in Glenn Steven's Ph.D. thesis.
345
+
346
+ INPUT:
347
+
348
+ - ``c`` -- a cusp
349
+
350
+ - ``N`` -- positive integer
351
+
352
+ - ``data`` -- the list [n for n in range(2,N) if gcd(n,N) == 1], which is
353
+ passed in as a parameter purely for efficiency reasons.
354
+
355
+ EXAMPLES::
356
+
357
+ sage: from sage.modular.abvar.cuspidal_subgroup import is_rational_cusp_gamma0
358
+ sage: N = 27
359
+ sage: data = [n for n in range(2,N) if gcd(n,N) == 1]
360
+ sage: is_rational_cusp_gamma0(Cusp(1/3), N, data)
361
+ False
362
+ sage: is_rational_cusp_gamma0(Cusp(1), N, data)
363
+ True
364
+ sage: is_rational_cusp_gamma0(Cusp(oo), N, data)
365
+ True
366
+ sage: is_rational_cusp_gamma0(Cusp(2/9), N, data)
367
+ False
368
+ """
369
+ num = c.numerator()
370
+ den = c.denominator()
371
+ return all(c.is_gamma0_equiv(Cusp(num, d * den), N) for d in data)