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,413 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ """
3
+ Ambient Jacobian abelian variety
4
+
5
+ TESTS::
6
+
7
+ sage: loads(dumps(J0(37))) == J0(37)
8
+ True
9
+ sage: loads(dumps(J1(13))) == J1(13)
10
+ True
11
+ """
12
+
13
+ import weakref
14
+ from sage.structure.sequence import Sequence
15
+
16
+ from .abvar import (ModularAbelianVariety_modsym_abstract,
17
+ simple_factorization_of_modsym_space, modsym_lattices,
18
+ ModularAbelianVariety_modsym)
19
+ from sage.rings.rational_field import QQ
20
+
21
+ from sage.modular.modsym.modsym import ModularSymbols
22
+ from sage.modular.modform.constructor import Newforms
23
+ from sage.modular.arithgroup.all import Gamma0_class, Gamma1_class
24
+ from sage.modular.abvar import morphism
25
+
26
+
27
+ _cache = {}
28
+
29
+
30
+ def ModAbVar_ambient_jacobian(group):
31
+ """
32
+ Return the ambient Jacobian attached to a given congruence
33
+ subgroup.
34
+
35
+ The result is cached using a weakref. This function is called
36
+ internally by modular abelian variety constructors.
37
+
38
+ INPUT:
39
+
40
+ - ``group`` -- a congruence subgroup
41
+
42
+ OUTPUT: a modular abelian variety attached
43
+
44
+ EXAMPLES::
45
+
46
+ sage: import sage.modular.abvar.abvar_ambient_jacobian as abvar_ambient_jacobian
47
+ sage: A = abvar_ambient_jacobian.ModAbVar_ambient_jacobian(Gamma0(11))
48
+ sage: A
49
+ Abelian variety J0(11) of dimension 1
50
+ sage: B = abvar_ambient_jacobian.ModAbVar_ambient_jacobian(Gamma0(11))
51
+ sage: A is B
52
+ True
53
+
54
+ You can get access to and/or clear the cache as follows::
55
+
56
+ sage: abvar_ambient_jacobian._cache = {}
57
+ sage: B = abvar_ambient_jacobian.ModAbVar_ambient_jacobian(Gamma0(11))
58
+ sage: A is B
59
+ False
60
+ """
61
+ try:
62
+ X = _cache[group]()
63
+ if X is not None:
64
+ return X
65
+ except KeyError:
66
+ pass
67
+ X = ModAbVar_ambient_jacobian_class(group)
68
+ _cache[group] = weakref.ref(X)
69
+ return X
70
+
71
+
72
+ class ModAbVar_ambient_jacobian_class(ModularAbelianVariety_modsym_abstract):
73
+ """
74
+ An ambient Jacobian modular abelian variety attached to a
75
+ congruence subgroup.
76
+ """
77
+ def __init__(self, group):
78
+ """
79
+ Create an ambient Jacobian modular abelian variety.
80
+
81
+ EXAMPLES::
82
+
83
+ sage: A = J0(37); A
84
+ Abelian variety J0(37) of dimension 2
85
+ sage: type(A)
86
+ <class 'sage.modular.abvar.abvar_ambient_jacobian.ModAbVar_ambient_jacobian_class_with_category'>
87
+ sage: A.group()
88
+ Congruence Subgroup Gamma0(37)
89
+ """
90
+ ModularAbelianVariety_modsym_abstract.__init__(self, (group,), QQ)
91
+ self.__group = group
92
+ self._is_hecke_stable = True
93
+
94
+ def _modular_symbols(self):
95
+ """
96
+ Return the modular symbols space associated to this ambient
97
+ Jacobian.
98
+
99
+ OUTPUT: modular symbols space
100
+
101
+ EXAMPLES::
102
+
103
+ sage: M = J0(33)._modular_symbols(); M
104
+ Modular Symbols subspace of dimension 6 of Modular Symbols space of dimension 9 for Gamma_0(33) of weight 2 with sign 0 over Rational Field
105
+ sage: J0(33)._modular_symbols() is M
106
+ True
107
+ """
108
+ try:
109
+ return self.__modsym
110
+ except AttributeError:
111
+ self.__modsym = ModularSymbols(self.__group, weight=2).cuspidal_submodule()
112
+ return self.__modsym
113
+
114
+ def _repr_(self):
115
+ """
116
+ Return string representation of this Jacobian modular abelian
117
+ variety.
118
+
119
+ EXAMPLES::
120
+
121
+ sage: A = J0(11); A
122
+ Abelian variety J0(11) of dimension 1
123
+ sage: A._repr_()
124
+ 'Abelian variety J0(11) of dimension 1'
125
+ sage: A.rename('J_0(11)')
126
+ sage: A
127
+ J_0(11)
128
+
129
+ We now clear the cache to get rid of our renamed
130
+ `J_0(11)`.
131
+
132
+ ::
133
+
134
+ sage: import sage.modular.abvar.abvar_ambient_jacobian as abvar_ambient_jacobian
135
+ sage: abvar_ambient_jacobian._cache = {}
136
+ """
137
+ return 'Abelian variety %s of dimension %s%s' % (self._ambient_repr(),
138
+ self.dimension(),
139
+ '' if self.base_field() == QQ else ' over %s' % self.base_field())
140
+
141
+ def _latex_(self):
142
+ """
143
+ Return Latex representation of ``self``.
144
+
145
+ EXAMPLES::
146
+
147
+ sage: latex(J0(37))
148
+ J_0(37)
149
+ sage: J1(13)._latex_()
150
+ 'J_1(13)'
151
+ sage: latex(JH(389,[16]))
152
+ J_H(389,[16])
153
+ """
154
+ return self._ambient_latex_repr()
155
+
156
+ def ambient_variety(self):
157
+ """
158
+ Return the ambient modular abelian variety that contains ``self``.
159
+ Since ``self`` is a Jacobian modular abelian variety, this is just
160
+ ``self``.
161
+
162
+ OUTPUT: abelian variety
163
+
164
+ EXAMPLES::
165
+
166
+ sage: A = J0(17)
167
+ sage: A.ambient_variety()
168
+ Abelian variety J0(17) of dimension 1
169
+ sage: A is A.ambient_variety()
170
+ True
171
+ """
172
+ return self
173
+
174
+ def group(self):
175
+ """
176
+ Return the group that this Jacobian modular abelian variety is
177
+ attached to.
178
+
179
+ EXAMPLES::
180
+
181
+ sage: J1(37).group()
182
+ Congruence Subgroup Gamma1(37)
183
+ sage: J0(5077).group()
184
+ Congruence Subgroup Gamma0(5077)
185
+ sage: J = GammaH(11,[3]).modular_abelian_variety(); J
186
+ Abelian variety JH(11,[3]) of dimension 1
187
+ sage: J.group()
188
+ Congruence Subgroup Gamma_H(11) with H generated by [3]
189
+ """
190
+ return self.__group
191
+
192
+ def groups(self):
193
+ """
194
+ Return the tuple of congruence subgroups attached to this ambient
195
+ Jacobian. This is always a tuple of length 1.
196
+
197
+ OUTPUT: tuple
198
+
199
+ EXAMPLES::
200
+
201
+ sage: J0(37).groups()
202
+ (Congruence Subgroup Gamma0(37),)
203
+ """
204
+ return (self.__group,)
205
+
206
+ def _calculate_endomorphism_generators(self):
207
+ """
208
+ Calculate generators for the endomorphism ring of ``self``.
209
+
210
+ EXAMPLES::
211
+
212
+ sage: J0(11)._calculate_endomorphism_generators()
213
+ [Abelian variety endomorphism of Abelian variety J0(11) of dimension 1]
214
+ sage: ls = J0(46)._calculate_endomorphism_generators() ; ls
215
+ [Abelian variety endomorphism of Abelian variety J0(46) of dimension 5,
216
+ Abelian variety endomorphism of Abelian variety J0(46) of dimension 5,
217
+ Abelian variety endomorphism of Abelian variety J0(46) of dimension 5,
218
+ Abelian variety endomorphism of Abelian variety J0(46) of dimension 5,
219
+ Abelian variety endomorphism of Abelian variety J0(46) of dimension 5]
220
+ sage: len(ls) == J0(46).dimension()
221
+ True
222
+ """
223
+ D = self.decomposition()
224
+ phi = self._isogeny_to_product_of_simples()
225
+ psi = phi.complementary_isogeny()
226
+
227
+ m1 = phi.matrix()
228
+ m2 = psi.matrix()
229
+
230
+ H = self.Hom(self)
231
+ M = H.matrix_space()
232
+
233
+ ls = []
234
+ ind = 0
235
+ for d in D:
236
+ to_newform = d._isogeny_to_newform_abelian_variety()
237
+ n1 = to_newform.matrix()
238
+ n2 = to_newform.complementary_isogeny().matrix()
239
+ f_gens = to_newform.codomain()._calculate_endomorphism_generators()
240
+ small_space = to_newform.parent().matrix_space()
241
+ f_gens = [small_space(x.list()) for x in f_gens]
242
+ for m in f_gens:
243
+ mat = H.matrix_space()(0)
244
+ mat.set_block(ind, ind, n1 * m * n2)
245
+ ls.append((m1 * mat * m2).list())
246
+ ind += 2 * d.dimension()
247
+
248
+ return [H(morphism.Morphism(H, M(x))) for x in ls]
249
+
250
+ def degeneracy_map(self, level, t=1, check=True):
251
+ """
252
+ Return the `t`-th degeneracy map from ``self`` to ``J(level)``. Here
253
+ `t` must be a divisor of either ``level/self.level()`` or
254
+ ``self.level()/level``.
255
+
256
+ INPUT:
257
+
258
+ - ``level`` -- integer (multiple or divisor of level of
259
+ ``self``)
260
+
261
+ - ``t`` -- divisor of quotient of level of ``self`` and
262
+ level
263
+
264
+ - ``check`` -- boolean (default: ``True``); if ``True`` do some
265
+ checks on the input
266
+
267
+ OUTPUT: a morphism
268
+
269
+ EXAMPLES::
270
+
271
+ sage: J0(11).degeneracy_map(33)
272
+ Degeneracy map from Abelian variety J0(11) of dimension 1 to Abelian variety J0(33) of dimension 3 defined by [1]
273
+ sage: J0(11).degeneracy_map(33).matrix()
274
+ [ 0 -3 2 1 -2 0]
275
+ [ 1 -2 0 1 0 -1]
276
+ sage: J0(11).degeneracy_map(33,3).matrix()
277
+ [-1 0 0 0 1 -2]
278
+ [-1 -1 1 -1 1 0]
279
+ sage: J0(33).degeneracy_map(11,1).matrix()
280
+ [ 0 1]
281
+ [ 0 -1]
282
+ [ 1 -1]
283
+ [ 0 1]
284
+ [-1 1]
285
+ [ 0 0]
286
+ sage: J0(11).degeneracy_map(33,1).matrix() * J0(33).degeneracy_map(11,1).matrix()
287
+ [4 0]
288
+ [0 4]
289
+ """
290
+ if check:
291
+ if (level % self.level()) and (self.level() % level):
292
+ raise ValueError("level must be divisible by level of self")
293
+ if (max(level, self.level()) // min(self.level(), level)) % t:
294
+ raise ValueError("t must divide the quotient of the two levels")
295
+
296
+ Mself = self.modular_symbols()
297
+ Jdest = (type(Mself.group()))(level).modular_abelian_variety()
298
+ Mdest = Jdest.modular_symbols()
299
+
300
+ symbol_map = Mself.degeneracy_map(level, t).restrict_codomain(Mdest)
301
+ H = self.Hom(Jdest)
302
+
303
+ return H(morphism.DegeneracyMap(H, symbol_map.matrix(), [t]))
304
+
305
+ def dimension(self):
306
+ """
307
+ Return the dimension of this modular abelian variety.
308
+
309
+ EXAMPLES::
310
+
311
+ sage: J0(2007).dimension()
312
+ 221
313
+ sage: J1(13).dimension()
314
+ 2
315
+ sage: J1(997).dimension()
316
+ 40920
317
+ sage: J0(389).dimension()
318
+ 32
319
+ sage: JH(389,[4]).dimension()
320
+ 64
321
+ sage: J1(389).dimension()
322
+ 6112
323
+ """
324
+ try:
325
+ return self._dimension
326
+ except AttributeError:
327
+ d = self.group().genus()
328
+ self._dimension = d
329
+ return d
330
+
331
+ def decomposition(self, simple=True, bound=None):
332
+ """
333
+ Decompose this ambient Jacobian as a product of abelian
334
+ subvarieties, up to isogeny.
335
+
336
+ EXAMPLES::
337
+
338
+ sage: J0(33).decomposition(simple=False)
339
+ [Abelian subvariety of dimension 2 of J0(33),
340
+ Abelian subvariety of dimension 1 of J0(33)]
341
+ sage: J0(33).decomposition(simple=False)[1].is_simple()
342
+ True
343
+ sage: J0(33).decomposition(simple=False)[0].is_simple()
344
+ False
345
+ sage: J0(33).decomposition(simple=False)
346
+ [Abelian subvariety of dimension 2 of J0(33),
347
+ Simple abelian subvariety 33a(None,33) of dimension 1 of J0(33)]
348
+ sage: J0(33).decomposition(simple=True)
349
+ [Simple abelian subvariety 11a(1,33) of dimension 1 of J0(33),
350
+ Simple abelian subvariety 11a(3,33) of dimension 1 of J0(33),
351
+ Simple abelian subvariety 33a(1,33) of dimension 1 of J0(33)]
352
+ """
353
+ try:
354
+ return self.__decomposition[simple]
355
+ except KeyError:
356
+ pass
357
+ except AttributeError:
358
+ self.__decomposition = {}
359
+
360
+ M = self.modular_symbols().ambient_module()
361
+ level = M.level()
362
+ group = M.group()
363
+ factors = simple_factorization_of_modsym_space(M, simple=simple)
364
+ factors = modsym_lattices(M, factors)
365
+
366
+ D = []
367
+ is_simple = True if simple else None
368
+ for newform_level, isogeny_number, number, modsym, lattice in factors:
369
+ A = ModularAbelianVariety_modsym(modsym, lattice=lattice,
370
+ newform_level=(newform_level, group),
371
+ is_simple=is_simple,
372
+ isogeny_number=isogeny_number,
373
+ number=(number, level),
374
+ check=False)
375
+ D.append(A)
376
+
377
+ # This line below could be safely deleted. It basically creates a circular
378
+ # reference so that say J0(389)[0] + J0(389)[1] doesn't do two separate
379
+ # decompositions. Memory will be freed though, at least if you do
380
+ # import gc; gc.collect().
381
+ A._ambient = self
382
+
383
+ D.sort()
384
+ D = Sequence(D, immutable=True, cr=True, universe=self.category())
385
+ self.__decomposition[simple] = D
386
+ return D
387
+
388
+ def newform_decomposition(self, names=None):
389
+ """
390
+ Return the newforms of the simple subvarieties in the decomposition of
391
+ ``self`` as a product of simple subvarieties, up to isogeny.
392
+
393
+ OUTPUT: an array of newforms
394
+
395
+ EXAMPLES::
396
+
397
+ sage: J0(81).newform_decomposition('a')
398
+ [q - 2*q^4 + O(q^6), q - 2*q^4 + O(q^6), q + a0*q^2 + q^4 - a0*q^5 + O(q^6)]
399
+
400
+ sage: J1(19).newform_decomposition('a')
401
+ [q - 2*q^3 - 2*q^4 + 3*q^5 + O(q^6),
402
+ q + a1*q^2 + (-1/9*a1^5 - 1/3*a1^4 - 1/3*a1^3 + 1/3*a1^2 - a1 - 1)*q^3 + (4/9*a1^5 + 2*a1^4 + 14/3*a1^3 + 17/3*a1^2 + 6*a1 + 2)*q^4 + (-2/3*a1^5 - 11/3*a1^4 - 10*a1^3 - 14*a1^2 - 15*a1 - 9)*q^5 + O(q^6)]
403
+ """
404
+ if self.dimension() == 0:
405
+ return []
406
+ G = self.group()
407
+ if not isinstance(G, (Gamma0_class, Gamma1_class)):
408
+ return [S.newform(names=names) for S in self.decomposition()]
409
+ Gtype = G.parent()
410
+ N = G.level()
411
+ preans = [Newforms(Gtype(d), names=names) * len((N // d).divisors())
412
+ for d in N.divisors()]
413
+ return [newform for l in preans for newform in l]
@@ -0,0 +1,244 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs sage.libs.pari
3
+ """
4
+ Abelian varieties attached to newforms
5
+
6
+ TESTS::
7
+
8
+ sage: A = AbelianVariety('23a')
9
+ sage: loads(dumps(A)) == A
10
+ True
11
+ """
12
+ ###########################################################################
13
+ # Copyright (C) 2008 William Stein <wstein@gmail.com> #
14
+ # Distributed under the terms of the GNU General Public License (GPL) #
15
+ # https://www.gnu.org/licenses/ #
16
+ ###########################################################################
17
+ from sage.misc.lazy_import import lazy_import
18
+
19
+ from sage.rings.integer_ring import ZZ
20
+ from sage.rings.rational_field import QQ
21
+
22
+ from sage.modular.modform.element import Newform
23
+ from sage.modular.arithgroup.all import Gamma0_class, Gamma1_class, GammaH_class
24
+
25
+ from .abvar import ModularAbelianVariety_modsym_abstract
26
+ from sage.modular.abvar import homspace
27
+ lazy_import('sage.databases.cremona', 'cremona_letter_code')
28
+
29
+
30
+ class ModularAbelianVariety_newform(ModularAbelianVariety_modsym_abstract):
31
+ """
32
+ A modular abelian variety attached to a specific newform.
33
+ """
34
+ def __init__(self, f, internal_name=False):
35
+ """
36
+ Create the modular abelian variety `A_f` attached to the
37
+ newform `f`.
38
+
39
+ INPUT:
40
+
41
+ - ``f`` -- a newform
42
+
43
+ EXAMPLES::
44
+
45
+ sage: f = CuspForms(37).newforms('a')[0]
46
+ sage: f.abelian_variety()
47
+ Newform abelian subvariety 37a of dimension 1 of J0(37)
48
+
49
+ sage: AbelianVariety(Newforms(1, 12)[0])
50
+ Traceback (most recent call last):
51
+ ...
52
+ TypeError: f must have weight 2
53
+ """
54
+ if not isinstance(f, Newform):
55
+ raise TypeError("f must be a newform")
56
+ if f.weight() != 2:
57
+ raise TypeError("f must have weight 2")
58
+ self.__f = f
59
+ self._is_hecke_stable = True
60
+ K = f.qexp().base_ring()
61
+ if K == QQ:
62
+ variable_name = None
63
+ else:
64
+ variable_name = K.variable_name()
65
+ self.__named_newforms = {variable_name: self.__f}
66
+ if not internal_name:
67
+ self.__named_newforms[None] = self.__f
68
+ ModularAbelianVariety_modsym_abstract.__init__(self, (f.group(),), QQ,
69
+ is_simple=True, newform_level=(f.level(), f.group()),
70
+ isogeny_number=f.number(), number=0)
71
+
72
+ def _modular_symbols(self, sign=0):
73
+ """
74
+ EXAMPLES::
75
+
76
+ sage: f = CuspForms(52).newforms('a')[0]
77
+ sage: A = f.abelian_variety()
78
+ sage: A._modular_symbols()
79
+ Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 15 for Gamma_0(52) of weight 2 with sign 0 over Rational Field
80
+ sage: A._modular_symbols(1)
81
+ Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 10 for Gamma_0(52) of weight 2 with sign 1 over Rational Field
82
+ sage: A._modular_symbols(-1)
83
+ Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 5 for Gamma_0(52) of weight 2 with sign -1 over Rational Field
84
+ """
85
+ return self.__f.modular_symbols(sign=sign)
86
+
87
+ def newform(self, names=None):
88
+ r"""
89
+ Return the newform that this modular abelian variety is attached to.
90
+
91
+ EXAMPLES::
92
+
93
+ sage: f = Newform('37a')
94
+ sage: A = f.abelian_variety()
95
+ sage: A.newform()
96
+ q - 2*q^2 - 3*q^3 + 2*q^4 - 2*q^5 + O(q^6)
97
+ sage: A.newform() is f
98
+ True
99
+
100
+ If the a variable name has not been specified, we must specify one::
101
+
102
+ sage: A = AbelianVariety('67b')
103
+ sage: A.newform()
104
+ Traceback (most recent call last):
105
+ ...
106
+ TypeError: You must specify the name of the generator.
107
+ sage: A.newform('alpha')
108
+ q + alpha*q^2 + (-alpha - 3)*q^3 + (-3*alpha - 3)*q^4 - 3*q^5 + O(q^6)
109
+
110
+ If the eigenform is actually over `\QQ` then we don't have to specify
111
+ the name::
112
+
113
+ sage: A = AbelianVariety('67a')
114
+ sage: A.newform()
115
+ q + 2*q^2 - 2*q^3 + 2*q^4 + 2*q^5 + O(q^6)
116
+ """
117
+ try:
118
+ return self.__named_newforms[names]
119
+ except KeyError:
120
+ self.__named_newforms[names] = Newform(self.__f.parent().change_ring(QQ), self.__f.modular_symbols(1), names=names, check=False)
121
+ return self.__named_newforms[names]
122
+
123
+ def label(self) -> str:
124
+ """
125
+ Return canonical label that defines this newform modular
126
+ abelian variety.
127
+
128
+ OUTPUT: string
129
+
130
+ EXAMPLES::
131
+
132
+ sage: A = AbelianVariety('43b')
133
+ sage: A.label()
134
+ '43b'
135
+ """
136
+ G = self.__f.group()
137
+ if isinstance(G, Gamma0_class):
138
+ group = ''
139
+ elif isinstance(G, Gamma1_class):
140
+ group = 'G1'
141
+ elif isinstance(G, GammaH_class):
142
+ group = 'GH[' + ','.join(str(z) for z in G._generators_for_H()) + ']'
143
+ return '%s%s%s' % (self.level(), cremona_letter_code(self.factor_number()), group)
144
+
145
+ def factor_number(self):
146
+ """
147
+ Return factor number.
148
+
149
+ OUTPUT: int
150
+
151
+ EXAMPLES::
152
+
153
+ sage: A = AbelianVariety('43b')
154
+ sage: A.factor_number()
155
+ 1
156
+ """
157
+ try:
158
+ return self.__factor_number
159
+ except AttributeError:
160
+ self.__factor_number = self.__f.number()
161
+ return self.__factor_number
162
+
163
+ def _repr_(self) -> str:
164
+ """
165
+ String representation of this modular abelian variety.
166
+
167
+ EXAMPLES::
168
+
169
+ sage: AbelianVariety('37a')._repr_()
170
+ 'Newform abelian subvariety 37a of dimension 1 of J0(37)'
171
+ """
172
+ return "Newform abelian subvariety %s of dimension %s of %s" % (
173
+ self.newform_label(), self.dimension(), self._ambient_repr())
174
+
175
+ def endomorphism_ring(self):
176
+ """
177
+ Return the endomorphism ring of this newform abelian variety.
178
+
179
+ EXAMPLES::
180
+
181
+ sage: A = AbelianVariety('23a')
182
+ sage: E = A.endomorphism_ring(); E
183
+ Endomorphism ring of Newform abelian subvariety 23a of dimension 2 of J0(23)
184
+
185
+ We display the matrices of these two basis matrices::
186
+
187
+ sage: E.0.matrix()
188
+ [1 0 0 0]
189
+ [0 1 0 0]
190
+ [0 0 1 0]
191
+ [0 0 0 1]
192
+ sage: E.1.matrix()
193
+ [ 0 1 -1 0]
194
+ [ 0 1 -1 1]
195
+ [-1 2 -2 1]
196
+ [-1 1 0 -1]
197
+
198
+ The result is cached::
199
+
200
+ sage: E is A.endomorphism_ring()
201
+ True
202
+ """
203
+ try:
204
+ return self.__endomorphism_ring
205
+ except AttributeError:
206
+ pass
207
+
208
+ E = homspace.EndomorphismSubring(self)
209
+ self.__endomorphism_ring = E
210
+ return self.__endomorphism_ring
211
+
212
+ def _calculate_endomorphism_generators(self):
213
+ """
214
+ EXAMPLES::
215
+
216
+ sage: A = AbelianVariety('43b')
217
+ sage: B = A.endomorphism_ring(); B # indirect doctest
218
+ Endomorphism ring of Newform abelian subvariety 43b of dimension 2 of J0(43)
219
+ sage: [b.matrix() for b in B.gens()]
220
+ [
221
+ [1 0 0 0] [ 0 1 0 0]
222
+ [0 1 0 0] [ 1 -2 0 0]
223
+ [0 0 1 0] [ 1 0 -2 -1]
224
+ [0 0 0 1], [ 0 1 -1 0]
225
+ ]
226
+ """
227
+ M = self.modular_symbols()
228
+ bound = M.sturm_bound()
229
+
230
+ d = self.dimension()
231
+ T1list = self.hecke_operator(1).matrix().list()
232
+ EndVecZ = ZZ**(len(T1list))
233
+ V = EndVecZ.submodule([T1list])
234
+ n = 2
235
+
236
+ while V.dimension() < d:
237
+ W = EndVecZ.submodule([((self.hecke_operator(n).matrix())**i).list()
238
+ for i in range(1, d + 1)])
239
+ V = V + W
240
+ n += 1
241
+ if n > bound:
242
+ raise ArithmeticError("Error computing endomorphism generators")
243
+
244
+ return V.saturation().basis()
@@ -0,0 +1,8 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ ###########################################################################
3
+ # Copyright (C) 2007 William Stein <wstein@gmail.com> #
4
+ # Distributed under the terms of the GNU General Public License (GPL) #
5
+ # https://www.gnu.org/licenses/ #
6
+ ###########################################################################
7
+
8
+ from sage.modular.abvar.constructor import J0, J1, JH, AbelianVariety