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