passagemath-schemes 10.8.1a4__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.
Files changed (312) 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.8.1a4.dist-info/METADATA +203 -0
  7. passagemath_schemes-10.8.1a4.dist-info/METADATA.bak +204 -0
  8. passagemath_schemes-10.8.1a4.dist-info/RECORD +312 -0
  9. passagemath_schemes-10.8.1a4.dist-info/WHEEL +6 -0
  10. passagemath_schemes-10.8.1a4.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 +9556 -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 +2578 -0
  27. sage/lfunctions/all.py +18 -0
  28. sage/lfunctions/dokchitser.py +727 -0
  29. sage/lfunctions/pari.py +971 -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 +5132 -0
  33. sage/modular/abvar/abvar_ambient_jacobian.py +414 -0
  34. sage/modular/abvar/abvar_newform.py +246 -0
  35. sage/modular/abvar/all.py +8 -0
  36. sage/modular/abvar/constructor.py +187 -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 +721 -0
  40. sage/modular/abvar/homspace.py +989 -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 +741 -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 +1406 -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 +361 -0
  54. sage/modular/arithgroup/congroup_gamma0.py +692 -0
  55. sage/modular/arithgroup/congroup_gamma1.py +659 -0
  56. sage/modular/arithgroup/congroup_gammaH.py +1491 -0
  57. sage/modular/arithgroup/congroup_generic.py +630 -0
  58. sage/modular/arithgroup/congroup_sl2z.py +266 -0
  59. sage/modular/arithgroup/farey_symbol.cpython-314t-darwin.so +0 -0
  60. sage/modular/arithgroup/farey_symbol.pyx +1067 -0
  61. sage/modular/arithgroup/tests.py +425 -0
  62. sage/modular/btquotients/all.py +4 -0
  63. sage/modular/btquotients/btquotient.py +3736 -0
  64. sage/modular/btquotients/pautomorphicform.py +2564 -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 +1107 -0
  69. sage/modular/cusps_nf.py +1270 -0
  70. sage/modular/dims.py +571 -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 +1076 -0
  77. sage/modular/hecke/algebra.py +725 -0
  78. sage/modular/hecke/all.py +19 -0
  79. sage/modular/hecke/ambient_module.py +994 -0
  80. sage/modular/hecke/degenmap.py +119 -0
  81. sage/modular/hecke/element.py +302 -0
  82. sage/modular/hecke/hecke_operator.py +736 -0
  83. sage/modular/hecke/homspace.py +185 -0
  84. sage/modular/hecke/module.py +1744 -0
  85. sage/modular/hecke/morphism.py +139 -0
  86. sage/modular/hecke/submodule.py +970 -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 +2020 -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 +1070 -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 +817 -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 +120 -0
  101. sage/modular/modform/ambient_g1.py +199 -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 +487 -0
  106. sage/modular/modform/eisenstein_submodule.py +663 -0
  107. sage/modular/modform/element.py +4105 -0
  108. sage/modular/modform/half_integral.py +154 -0
  109. sage/modular/modform/hecke_operator_on_qexp.py +247 -0
  110. sage/modular/modform/j_invariant.py +47 -0
  111. sage/modular/modform/l_series_gross_zagier.py +127 -0
  112. sage/modular/modform/l_series_gross_zagier_coeffs.cpython-314t-darwin.so +0 -0
  113. sage/modular/modform/l_series_gross_zagier_coeffs.pyx +177 -0
  114. sage/modular/modform/notes.py +45 -0
  115. sage/modular/modform/numerical.py +514 -0
  116. sage/modular/modform/periods.py +14 -0
  117. sage/modular/modform/ring.py +1257 -0
  118. sage/modular/modform/space.py +1859 -0
  119. sage/modular/modform/submodule.py +118 -0
  120. sage/modular/modform/tests.py +64 -0
  121. sage/modular/modform/theta.py +110 -0
  122. sage/modular/modform/vm_basis.py +380 -0
  123. sage/modular/modform/weight1.py +221 -0
  124. sage/modular/modform_hecketriangle/abstract_ring.py +1932 -0
  125. sage/modular/modform_hecketriangle/abstract_space.py +2527 -0
  126. sage/modular/modform_hecketriangle/all.py +30 -0
  127. sage/modular/modform_hecketriangle/analytic_type.py +590 -0
  128. sage/modular/modform_hecketriangle/constructor.py +416 -0
  129. sage/modular/modform_hecketriangle/element.py +351 -0
  130. sage/modular/modform_hecketriangle/functors.py +752 -0
  131. sage/modular/modform_hecketriangle/graded_ring.py +541 -0
  132. sage/modular/modform_hecketriangle/graded_ring_element.py +2225 -0
  133. sage/modular/modform_hecketriangle/hecke_triangle_group_element.py +3349 -0
  134. sage/modular/modform_hecketriangle/hecke_triangle_groups.py +1426 -0
  135. sage/modular/modform_hecketriangle/readme.py +1214 -0
  136. sage/modular/modform_hecketriangle/series_constructor.py +580 -0
  137. sage/modular/modform_hecketriangle/space.py +1037 -0
  138. sage/modular/modform_hecketriangle/subspace.py +423 -0
  139. sage/modular/modsym/all.py +17 -0
  140. sage/modular/modsym/ambient.py +3844 -0
  141. sage/modular/modsym/boundary.py +1420 -0
  142. sage/modular/modsym/element.py +336 -0
  143. sage/modular/modsym/g1list.py +178 -0
  144. sage/modular/modsym/ghlist.py +182 -0
  145. sage/modular/modsym/hecke_operator.py +73 -0
  146. sage/modular/modsym/manin_symbol.cpython-314t-darwin.so +0 -0
  147. sage/modular/modsym/manin_symbol.pxd +5 -0
  148. sage/modular/modsym/manin_symbol.pyx +497 -0
  149. sage/modular/modsym/manin_symbol_list.py +1291 -0
  150. sage/modular/modsym/modsym.py +400 -0
  151. sage/modular/modsym/modular_symbols.py +384 -0
  152. sage/modular/modsym/p1list_nf.py +1241 -0
  153. sage/modular/modsym/relation_matrix.py +591 -0
  154. sage/modular/modsym/relation_matrix_pyx.cpython-314t-darwin.so +0 -0
  155. sage/modular/modsym/relation_matrix_pyx.pyx +108 -0
  156. sage/modular/modsym/space.py +2468 -0
  157. sage/modular/modsym/subspace.py +455 -0
  158. sage/modular/modsym/tests.py +376 -0
  159. sage/modular/multiple_zeta.py +2635 -0
  160. sage/modular/multiple_zeta_F_algebra.py +789 -0
  161. sage/modular/overconvergent/all.py +6 -0
  162. sage/modular/overconvergent/genus0.py +1879 -0
  163. sage/modular/overconvergent/hecke_series.py +1187 -0
  164. sage/modular/overconvergent/weightspace.py +776 -0
  165. sage/modular/pollack_stevens/all.py +4 -0
  166. sage/modular/pollack_stevens/distributions.py +874 -0
  167. sage/modular/pollack_stevens/fund_domain.py +1572 -0
  168. sage/modular/pollack_stevens/manin_map.py +856 -0
  169. sage/modular/pollack_stevens/modsym.py +1590 -0
  170. sage/modular/pollack_stevens/padic_lseries.py +417 -0
  171. sage/modular/pollack_stevens/sigma0.py +534 -0
  172. sage/modular/pollack_stevens/space.py +1078 -0
  173. sage/modular/quasimodform/all.py +3 -0
  174. sage/modular/quasimodform/element.py +846 -0
  175. sage/modular/quasimodform/ring.py +826 -0
  176. sage/modular/quatalg/all.py +3 -0
  177. sage/modular/quatalg/brandt.py +1642 -0
  178. sage/modular/ssmod/all.py +8 -0
  179. sage/modular/ssmod/ssmod.py +827 -0
  180. sage/rings/all__sagemath_schemes.py +1 -0
  181. sage/rings/polynomial/all__sagemath_schemes.py +1 -0
  182. sage/rings/polynomial/binary_form_reduce.py +585 -0
  183. sage/schemes/all.py +41 -0
  184. sage/schemes/berkovich/all.py +6 -0
  185. sage/schemes/berkovich/berkovich_cp_element.py +2582 -0
  186. sage/schemes/berkovich/berkovich_space.py +700 -0
  187. sage/schemes/curves/affine_curve.py +2924 -0
  188. sage/schemes/curves/all.py +33 -0
  189. sage/schemes/curves/closed_point.py +434 -0
  190. sage/schemes/curves/constructor.py +397 -0
  191. sage/schemes/curves/curve.py +542 -0
  192. sage/schemes/curves/plane_curve_arrangement.py +1283 -0
  193. sage/schemes/curves/point.py +463 -0
  194. sage/schemes/curves/projective_curve.py +3203 -0
  195. sage/schemes/curves/weighted_projective_curve.py +106 -0
  196. sage/schemes/curves/zariski_vankampen.py +1931 -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 +991 -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 +1103 -0
  208. sage/schemes/elliptic_curves/constructor.py +1530 -0
  209. sage/schemes/elliptic_curves/ec_database.py +175 -0
  210. sage/schemes/elliptic_curves/ell_curve_isogeny.py +3971 -0
  211. sage/schemes/elliptic_curves/ell_egros.py +457 -0
  212. sage/schemes/elliptic_curves/ell_field.py +2837 -0
  213. sage/schemes/elliptic_curves/ell_finite_field.py +3249 -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 +4944 -0
  220. sage/schemes/elliptic_curves/ell_rational_field.py +7184 -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 +1663 -0
  227. sage/schemes/elliptic_curves/gp_simon.py +152 -0
  228. sage/schemes/elliptic_curves/heegner.py +7328 -0
  229. sage/schemes/elliptic_curves/height.py +2108 -0
  230. sage/schemes/elliptic_curves/hom.py +1788 -0
  231. sage/schemes/elliptic_curves/hom_composite.py +1084 -0
  232. sage/schemes/elliptic_curves/hom_fractional.py +544 -0
  233. sage/schemes/elliptic_curves/hom_frobenius.py +522 -0
  234. sage/schemes/elliptic_curves/hom_scalar.py +531 -0
  235. sage/schemes/elliptic_curves/hom_sum.py +681 -0
  236. sage/schemes/elliptic_curves/hom_velusqrt.py +1290 -0
  237. sage/schemes/elliptic_curves/homset.py +271 -0
  238. sage/schemes/elliptic_curves/isogeny_class.py +1523 -0
  239. sage/schemes/elliptic_curves/isogeny_small_degree.py +2797 -0
  240. sage/schemes/elliptic_curves/jacobian.py +247 -0
  241. sage/schemes/elliptic_curves/kodaira_symbol.py +344 -0
  242. sage/schemes/elliptic_curves/kraus.py +1014 -0
  243. sage/schemes/elliptic_curves/lseries_ell.py +915 -0
  244. sage/schemes/elliptic_curves/mod5family.py +105 -0
  245. sage/schemes/elliptic_curves/mod_poly.py +197 -0
  246. sage/schemes/elliptic_curves/mod_sym_num.cpython-314t-darwin.so +0 -0
  247. sage/schemes/elliptic_curves/mod_sym_num.pyx +3796 -0
  248. sage/schemes/elliptic_curves/modular_parametrization.py +305 -0
  249. sage/schemes/elliptic_curves/padic_lseries.py +1793 -0
  250. sage/schemes/elliptic_curves/padics.py +1816 -0
  251. sage/schemes/elliptic_curves/period_lattice.py +2234 -0
  252. sage/schemes/elliptic_curves/period_lattice_region.cpython-314t-darwin.so +0 -0
  253. sage/schemes/elliptic_curves/period_lattice_region.pyx +722 -0
  254. sage/schemes/elliptic_curves/saturation.py +716 -0
  255. sage/schemes/elliptic_curves/sha_tate.py +1158 -0
  256. sage/schemes/elliptic_curves/weierstrass_morphism.py +1117 -0
  257. sage/schemes/elliptic_curves/weierstrass_transform.py +200 -0
  258. sage/schemes/hyperelliptic_curves/all.py +6 -0
  259. sage/schemes/hyperelliptic_curves/constructor.py +369 -0
  260. sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py +1948 -0
  261. sage/schemes/hyperelliptic_curves/hyperelliptic_g2.py +192 -0
  262. sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +936 -0
  263. sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py +1332 -0
  264. sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py +84 -0
  265. sage/schemes/hyperelliptic_curves/invariants.py +410 -0
  266. sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +312 -0
  267. sage/schemes/hyperelliptic_curves/jacobian_g2.py +32 -0
  268. sage/schemes/hyperelliptic_curves/jacobian_generic.py +437 -0
  269. sage/schemes/hyperelliptic_curves/jacobian_homset.py +186 -0
  270. sage/schemes/hyperelliptic_curves/jacobian_morphism.py +878 -0
  271. sage/schemes/hyperelliptic_curves/kummer_surface.py +99 -0
  272. sage/schemes/hyperelliptic_curves/mestre.py +302 -0
  273. sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +3863 -0
  274. sage/schemes/jacobians/abstract_jacobian.py +277 -0
  275. sage/schemes/jacobians/all.py +2 -0
  276. sage/schemes/overview.py +161 -0
  277. sage/schemes/plane_conics/all.py +22 -0
  278. sage/schemes/plane_conics/con_field.py +1296 -0
  279. sage/schemes/plane_conics/con_finite_field.py +158 -0
  280. sage/schemes/plane_conics/con_number_field.py +456 -0
  281. sage/schemes/plane_conics/con_rational_field.py +406 -0
  282. sage/schemes/plane_conics/con_rational_function_field.py +581 -0
  283. sage/schemes/plane_conics/constructor.py +249 -0
  284. sage/schemes/plane_quartics/all.py +2 -0
  285. sage/schemes/plane_quartics/quartic_constructor.py +71 -0
  286. sage/schemes/plane_quartics/quartic_generic.py +53 -0
  287. sage/schemes/riemann_surfaces/all.py +1 -0
  288. sage/schemes/riemann_surfaces/riemann_surface.py +4177 -0
  289. sage_wheels/share/cremona/cremona_mini.db +0 -0
  290. sage_wheels/share/ellcurves/rank0 +30427 -0
  291. sage_wheels/share/ellcurves/rank1 +31871 -0
  292. sage_wheels/share/ellcurves/rank10 +6 -0
  293. sage_wheels/share/ellcurves/rank11 +6 -0
  294. sage_wheels/share/ellcurves/rank12 +1 -0
  295. sage_wheels/share/ellcurves/rank14 +1 -0
  296. sage_wheels/share/ellcurves/rank15 +1 -0
  297. sage_wheels/share/ellcurves/rank17 +1 -0
  298. sage_wheels/share/ellcurves/rank19 +1 -0
  299. sage_wheels/share/ellcurves/rank2 +2388 -0
  300. sage_wheels/share/ellcurves/rank20 +1 -0
  301. sage_wheels/share/ellcurves/rank21 +1 -0
  302. sage_wheels/share/ellcurves/rank22 +1 -0
  303. sage_wheels/share/ellcurves/rank23 +1 -0
  304. sage_wheels/share/ellcurves/rank24 +1 -0
  305. sage_wheels/share/ellcurves/rank28 +1 -0
  306. sage_wheels/share/ellcurves/rank3 +836 -0
  307. sage_wheels/share/ellcurves/rank4 +10 -0
  308. sage_wheels/share/ellcurves/rank5 +5 -0
  309. sage_wheels/share/ellcurves/rank6 +5 -0
  310. sage_wheels/share/ellcurves/rank7 +5 -0
  311. sage_wheels/share/ellcurves/rank8 +6 -0
  312. sage_wheels/share/ellcurves/rank9 +7 -0
@@ -0,0 +1,187 @@
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.congroup_gamma0 import Gamma0_constructor as Gamma0
20
+ from sage.modular.arithgroup.congroup_generic import CongruenceSubgroupBase
21
+ from sage.modular.modsym.space import ModularSymbolsSpace
22
+ from .abvar_newform import ModularAbelianVariety_newform
23
+ import sage.modular.modform.element
24
+ from sage.modular.abvar import abvar
25
+
26
+ _cache = {}
27
+
28
+
29
+ def _get(key):
30
+ """
31
+ Return the cached abelian variety with given key. This is used
32
+ internally by the abelian varieties constructor.
33
+
34
+ INPUT:
35
+
36
+ - ``key`` -- hashable
37
+
38
+ EXAMPLES::
39
+
40
+ sage: sage.modular.abvar.constructor._saved('a', J0(37))
41
+ Abelian variety J0(37) of dimension 2
42
+ sage: sage.modular.abvar.constructor._get('a')
43
+ Abelian variety J0(37) of dimension 2
44
+ sage: sage.modular.abvar.constructor._get('b')
45
+ Traceback (most recent call last):
46
+ ...
47
+ ValueError: element not in cache
48
+ """
49
+ if key in _cache:
50
+ z = _cache[key]()
51
+ if z is not None:
52
+ return z
53
+ raise ValueError("element not in cache")
54
+
55
+
56
+ def _saved(key, J):
57
+ """
58
+ Return the cached abelian variety with given key. This is used
59
+ internally by the abelian varieties constructor.
60
+
61
+ INPUT:
62
+
63
+ - ``key`` -- hashable
64
+
65
+ - ``J`` -- modular abelian variety
66
+
67
+ OUTPUT: ``J`` -- returns the modabvar, to make code that uses
68
+ this simpler
69
+
70
+ EXAMPLES::
71
+
72
+ sage: sage.modular.abvar.constructor._saved('37', J0(37))
73
+ Abelian variety J0(37) of dimension 2
74
+ """
75
+ _cache[key] = weakref.ref(J)
76
+ return J
77
+
78
+
79
+ def J0(N):
80
+ """
81
+ Return the Jacobian `J_0(N)` of the modular curve
82
+ `X_0(N)`.
83
+
84
+ EXAMPLES::
85
+
86
+ sage: J0(389)
87
+ Abelian variety J0(389) of dimension 32
88
+
89
+ The result is cached::
90
+
91
+ sage: J0(33) is J0(33)
92
+ True
93
+ """
94
+ key = 'J0(%s)' % N
95
+ try:
96
+ return _get(key)
97
+ except ValueError:
98
+ from sage.modular.arithgroup.congroup_gamma0 import Gamma0_constructor as Gamma0
99
+ J = Gamma0(N).modular_abelian_variety()
100
+ return _saved(key, J)
101
+
102
+
103
+ def J1(N):
104
+ """
105
+ Return the Jacobian `J_1(N)` of the modular curve
106
+ `X_1(N)`.
107
+
108
+ EXAMPLES::
109
+
110
+ sage: J1(389)
111
+ Abelian variety J1(389) of dimension 6112
112
+ """
113
+ key = 'J1(%s)' % N
114
+ try:
115
+ return _get(key)
116
+ except ValueError:
117
+ from sage.modular.arithgroup.congroup_gamma1 import Gamma1_constructor as Gamma1
118
+ return _saved(key, Gamma1(N).modular_abelian_variety())
119
+
120
+
121
+ def JH(N, H):
122
+ """
123
+ Return the Jacobian `J_H(N)` of the modular curve
124
+ `X_H(N)`.
125
+
126
+ EXAMPLES::
127
+
128
+ sage: JH(389,[16])
129
+ Abelian variety JH(389,[16]) of dimension 64
130
+ """
131
+ key = 'JH(%s,%s)' % (N, H)
132
+ try:
133
+ return _get(key)
134
+ except ValueError:
135
+ from sage.modular.arithgroup.congroup_gammaH import GammaH_constructor as GammaH
136
+ return _saved(key, GammaH(N, H).modular_abelian_variety())
137
+
138
+
139
+ def AbelianVariety(X):
140
+ """
141
+ Create the abelian variety corresponding to the given defining
142
+ data.
143
+
144
+ INPUT:
145
+
146
+ - ``X`` -- integer, string, newform, modsym space,
147
+ congruence subgroup or tuple of congruence subgroups
148
+
149
+ OUTPUT: a modular abelian variety
150
+
151
+ EXAMPLES::
152
+
153
+ sage: AbelianVariety(Gamma0(37))
154
+ Abelian variety J0(37) of dimension 2
155
+ sage: AbelianVariety('37a')
156
+ Newform abelian subvariety 37a of dimension 1 of J0(37)
157
+ sage: AbelianVariety(Newform('37a'))
158
+ Newform abelian subvariety 37a of dimension 1 of J0(37)
159
+ sage: AbelianVariety(ModularSymbols(37).cuspidal_submodule())
160
+ Abelian variety J0(37) of dimension 2
161
+ sage: AbelianVariety((Gamma0(37), Gamma0(11)))
162
+ Abelian variety J0(37) x J0(11) of dimension 3
163
+ sage: AbelianVariety(37)
164
+ Abelian variety J0(37) of dimension 2
165
+ sage: AbelianVariety([1,2,3])
166
+ Traceback (most recent call last):
167
+ ...
168
+ TypeError: X must be an integer, string, newform, modsym space, congruence subgroup or tuple of congruence subgroups
169
+ """
170
+ if isinstance(X, (int, Integer)):
171
+ X = Gamma0(X)
172
+ if isinstance(X, CongruenceSubgroupBase):
173
+ X = X.modular_symbols().cuspidal_submodule()
174
+ elif isinstance(X, str):
175
+ from sage.modular.modform.constructor import Newform
176
+ f = Newform(X, names='a')
177
+ return ModularAbelianVariety_newform(f, internal_name=True)
178
+ elif isinstance(X, sage.modular.modform.element.Newform):
179
+ return ModularAbelianVariety_newform(X)
180
+
181
+ if isinstance(X, ModularSymbolsSpace):
182
+ return abvar.ModularAbelianVariety_modsym(X)
183
+
184
+ if isinstance(X, (tuple, list)) and all(isinstance(G, CongruenceSubgroupBase) for G in X):
185
+ return abvar.ModularAbelianVariety(X)
186
+
187
+ 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.congroup_gamma0 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)