passagemath-schemes 10.6.38__cp314-cp314t-macosx_13_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of passagemath-schemes might be problematic. Click here for more details.

Files changed (314) hide show
  1. passagemath_schemes/.dylibs/libflint.21.0.dylib +0 -0
  2. passagemath_schemes/.dylibs/libgmp.10.dylib +0 -0
  3. passagemath_schemes/.dylibs/libgmpxx.4.dylib +0 -0
  4. passagemath_schemes/.dylibs/libmpfr.6.dylib +0 -0
  5. passagemath_schemes/__init__.py +3 -0
  6. passagemath_schemes-10.6.38.dist-info/METADATA +204 -0
  7. passagemath_schemes-10.6.38.dist-info/METADATA.bak +205 -0
  8. passagemath_schemes-10.6.38.dist-info/RECORD +314 -0
  9. passagemath_schemes-10.6.38.dist-info/WHEEL +6 -0
  10. passagemath_schemes-10.6.38.dist-info/top_level.txt +3 -0
  11. sage/all__sagemath_schemes.py +23 -0
  12. sage/databases/all__sagemath_schemes.py +7 -0
  13. sage/databases/cremona.py +1723 -0
  14. sage/dynamics/all__sagemath_schemes.py +2 -0
  15. sage/dynamics/arithmetic_dynamics/affine_ds.py +1083 -0
  16. sage/dynamics/arithmetic_dynamics/all.py +14 -0
  17. sage/dynamics/arithmetic_dynamics/berkovich_ds.py +1101 -0
  18. sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py +1543 -0
  19. sage/dynamics/arithmetic_dynamics/endPN_automorphism_group.py +2426 -0
  20. sage/dynamics/arithmetic_dynamics/endPN_minimal_model.py +1169 -0
  21. sage/dynamics/arithmetic_dynamics/generic_ds.py +663 -0
  22. sage/dynamics/arithmetic_dynamics/product_projective_ds.py +339 -0
  23. sage/dynamics/arithmetic_dynamics/projective_ds.py +9558 -0
  24. sage/dynamics/arithmetic_dynamics/projective_ds_helper.cpython-314t-darwin.so +0 -0
  25. sage/dynamics/arithmetic_dynamics/projective_ds_helper.pyx +301 -0
  26. sage/dynamics/arithmetic_dynamics/wehlerK3.py +2576 -0
  27. sage/lfunctions/all.py +18 -0
  28. sage/lfunctions/dokchitser.py +745 -0
  29. sage/lfunctions/pari.py +818 -0
  30. sage/lfunctions/zero_sums.cpython-314t-darwin.so +0 -0
  31. sage/lfunctions/zero_sums.pyx +1847 -0
  32. sage/modular/abvar/abvar.py +5135 -0
  33. sage/modular/abvar/abvar_ambient_jacobian.py +413 -0
  34. sage/modular/abvar/abvar_newform.py +244 -0
  35. sage/modular/abvar/all.py +8 -0
  36. sage/modular/abvar/constructor.py +186 -0
  37. sage/modular/abvar/cuspidal_subgroup.py +371 -0
  38. sage/modular/abvar/finite_subgroup.py +896 -0
  39. sage/modular/abvar/homology.py +720 -0
  40. sage/modular/abvar/homspace.py +998 -0
  41. sage/modular/abvar/lseries.py +415 -0
  42. sage/modular/abvar/morphism.py +935 -0
  43. sage/modular/abvar/torsion_point.py +274 -0
  44. sage/modular/abvar/torsion_subgroup.py +740 -0
  45. sage/modular/all.py +43 -0
  46. sage/modular/arithgroup/all.py +20 -0
  47. sage/modular/arithgroup/arithgroup_element.cpython-314t-darwin.so +0 -0
  48. sage/modular/arithgroup/arithgroup_element.pyx +474 -0
  49. sage/modular/arithgroup/arithgroup_generic.py +1402 -0
  50. sage/modular/arithgroup/arithgroup_perm.py +2692 -0
  51. sage/modular/arithgroup/congroup.cpython-314t-darwin.so +0 -0
  52. sage/modular/arithgroup/congroup.pyx +334 -0
  53. sage/modular/arithgroup/congroup_gamma.py +363 -0
  54. sage/modular/arithgroup/congroup_gamma0.py +692 -0
  55. sage/modular/arithgroup/congroup_gamma1.py +653 -0
  56. sage/modular/arithgroup/congroup_gammaH.py +1469 -0
  57. sage/modular/arithgroup/congroup_generic.py +628 -0
  58. sage/modular/arithgroup/congroup_sl2z.py +267 -0
  59. sage/modular/arithgroup/farey_symbol.cpython-314t-darwin.so +0 -0
  60. sage/modular/arithgroup/farey_symbol.pyx +1066 -0
  61. sage/modular/arithgroup/tests.py +418 -0
  62. sage/modular/btquotients/all.py +4 -0
  63. sage/modular/btquotients/btquotient.py +3753 -0
  64. sage/modular/btquotients/pautomorphicform.py +2570 -0
  65. sage/modular/buzzard.py +100 -0
  66. sage/modular/congroup.py +29 -0
  67. sage/modular/congroup_element.py +13 -0
  68. sage/modular/cusps.py +1109 -0
  69. sage/modular/cusps_nf.py +1270 -0
  70. sage/modular/dims.py +569 -0
  71. sage/modular/dirichlet.py +3310 -0
  72. sage/modular/drinfeld_modform/all.py +2 -0
  73. sage/modular/drinfeld_modform/element.py +446 -0
  74. sage/modular/drinfeld_modform/ring.py +773 -0
  75. sage/modular/drinfeld_modform/tutorial.py +236 -0
  76. sage/modular/etaproducts.py +1065 -0
  77. sage/modular/hecke/algebra.py +746 -0
  78. sage/modular/hecke/all.py +20 -0
  79. sage/modular/hecke/ambient_module.py +1019 -0
  80. sage/modular/hecke/degenmap.py +119 -0
  81. sage/modular/hecke/element.py +325 -0
  82. sage/modular/hecke/hecke_operator.py +780 -0
  83. sage/modular/hecke/homspace.py +206 -0
  84. sage/modular/hecke/module.py +1767 -0
  85. sage/modular/hecke/morphism.py +174 -0
  86. sage/modular/hecke/submodule.py +989 -0
  87. sage/modular/hypergeometric_misc.cpython-314t-darwin.so +0 -0
  88. sage/modular/hypergeometric_misc.pxd +4 -0
  89. sage/modular/hypergeometric_misc.pyx +166 -0
  90. sage/modular/hypergeometric_motive.py +2017 -0
  91. sage/modular/local_comp/all.py +2 -0
  92. sage/modular/local_comp/liftings.py +292 -0
  93. sage/modular/local_comp/local_comp.py +1071 -0
  94. sage/modular/local_comp/smoothchar.py +1825 -0
  95. sage/modular/local_comp/type_space.py +748 -0
  96. sage/modular/modform/all.py +30 -0
  97. sage/modular/modform/ambient.py +815 -0
  98. sage/modular/modform/ambient_R.py +177 -0
  99. sage/modular/modform/ambient_eps.py +306 -0
  100. sage/modular/modform/ambient_g0.py +124 -0
  101. sage/modular/modform/ambient_g1.py +204 -0
  102. sage/modular/modform/constructor.py +545 -0
  103. sage/modular/modform/cuspidal_submodule.py +708 -0
  104. sage/modular/modform/defaults.py +14 -0
  105. sage/modular/modform/eis_series.py +505 -0
  106. sage/modular/modform/eisenstein_submodule.py +663 -0
  107. sage/modular/modform/element.py +4131 -0
  108. sage/modular/modform/find_generators.py +59 -0
  109. sage/modular/modform/half_integral.py +154 -0
  110. sage/modular/modform/hecke_operator_on_qexp.py +247 -0
  111. sage/modular/modform/j_invariant.py +47 -0
  112. sage/modular/modform/l_series_gross_zagier.py +133 -0
  113. sage/modular/modform/l_series_gross_zagier_coeffs.cpython-314t-darwin.so +0 -0
  114. sage/modular/modform/l_series_gross_zagier_coeffs.pyx +177 -0
  115. sage/modular/modform/notes.py +45 -0
  116. sage/modular/modform/numerical.py +514 -0
  117. sage/modular/modform/periods.py +14 -0
  118. sage/modular/modform/ring.py +1257 -0
  119. sage/modular/modform/space.py +1860 -0
  120. sage/modular/modform/submodule.py +118 -0
  121. sage/modular/modform/tests.py +64 -0
  122. sage/modular/modform/theta.py +110 -0
  123. sage/modular/modform/vm_basis.py +381 -0
  124. sage/modular/modform/weight1.py +220 -0
  125. sage/modular/modform_hecketriangle/abstract_ring.py +1932 -0
  126. sage/modular/modform_hecketriangle/abstract_space.py +2528 -0
  127. sage/modular/modform_hecketriangle/all.py +30 -0
  128. sage/modular/modform_hecketriangle/analytic_type.py +590 -0
  129. sage/modular/modform_hecketriangle/constructor.py +416 -0
  130. sage/modular/modform_hecketriangle/element.py +351 -0
  131. sage/modular/modform_hecketriangle/functors.py +752 -0
  132. sage/modular/modform_hecketriangle/graded_ring.py +541 -0
  133. sage/modular/modform_hecketriangle/graded_ring_element.py +2225 -0
  134. sage/modular/modform_hecketriangle/hecke_triangle_group_element.py +3352 -0
  135. sage/modular/modform_hecketriangle/hecke_triangle_groups.py +1432 -0
  136. sage/modular/modform_hecketriangle/readme.py +1214 -0
  137. sage/modular/modform_hecketriangle/series_constructor.py +580 -0
  138. sage/modular/modform_hecketriangle/space.py +1037 -0
  139. sage/modular/modform_hecketriangle/subspace.py +423 -0
  140. sage/modular/modsym/all.py +17 -0
  141. sage/modular/modsym/ambient.py +3846 -0
  142. sage/modular/modsym/boundary.py +1420 -0
  143. sage/modular/modsym/element.py +336 -0
  144. sage/modular/modsym/g1list.py +178 -0
  145. sage/modular/modsym/ghlist.py +182 -0
  146. sage/modular/modsym/hecke_operator.py +73 -0
  147. sage/modular/modsym/manin_symbol.cpython-314t-darwin.so +0 -0
  148. sage/modular/modsym/manin_symbol.pxd +5 -0
  149. sage/modular/modsym/manin_symbol.pyx +497 -0
  150. sage/modular/modsym/manin_symbol_list.py +1295 -0
  151. sage/modular/modsym/modsym.py +400 -0
  152. sage/modular/modsym/modular_symbols.py +384 -0
  153. sage/modular/modsym/p1list.cpython-314t-darwin.so +0 -0
  154. sage/modular/modsym/p1list.pxd +29 -0
  155. sage/modular/modsym/p1list.pyx +1372 -0
  156. sage/modular/modsym/p1list_nf.py +1241 -0
  157. sage/modular/modsym/relation_matrix.py +591 -0
  158. sage/modular/modsym/relation_matrix_pyx.cpython-314t-darwin.so +0 -0
  159. sage/modular/modsym/relation_matrix_pyx.pyx +108 -0
  160. sage/modular/modsym/space.py +2468 -0
  161. sage/modular/modsym/subspace.py +455 -0
  162. sage/modular/modsym/tests.py +375 -0
  163. sage/modular/multiple_zeta.py +2632 -0
  164. sage/modular/multiple_zeta_F_algebra.py +786 -0
  165. sage/modular/overconvergent/all.py +6 -0
  166. sage/modular/overconvergent/genus0.py +1878 -0
  167. sage/modular/overconvergent/hecke_series.py +1187 -0
  168. sage/modular/overconvergent/weightspace.py +778 -0
  169. sage/modular/pollack_stevens/all.py +4 -0
  170. sage/modular/pollack_stevens/distributions.py +874 -0
  171. sage/modular/pollack_stevens/fund_domain.py +1572 -0
  172. sage/modular/pollack_stevens/manin_map.py +859 -0
  173. sage/modular/pollack_stevens/modsym.py +1593 -0
  174. sage/modular/pollack_stevens/padic_lseries.py +417 -0
  175. sage/modular/pollack_stevens/sigma0.py +534 -0
  176. sage/modular/pollack_stevens/space.py +1076 -0
  177. sage/modular/quasimodform/all.py +3 -0
  178. sage/modular/quasimodform/element.py +845 -0
  179. sage/modular/quasimodform/ring.py +828 -0
  180. sage/modular/quatalg/all.py +3 -0
  181. sage/modular/quatalg/brandt.py +1642 -0
  182. sage/modular/ssmod/all.py +8 -0
  183. sage/modular/ssmod/ssmod.py +827 -0
  184. sage/rings/all__sagemath_schemes.py +1 -0
  185. sage/rings/polynomial/all__sagemath_schemes.py +1 -0
  186. sage/rings/polynomial/binary_form_reduce.py +585 -0
  187. sage/schemes/all.py +41 -0
  188. sage/schemes/berkovich/all.py +6 -0
  189. sage/schemes/berkovich/berkovich_cp_element.py +2582 -0
  190. sage/schemes/berkovich/berkovich_space.py +748 -0
  191. sage/schemes/curves/affine_curve.py +2928 -0
  192. sage/schemes/curves/all.py +33 -0
  193. sage/schemes/curves/closed_point.py +434 -0
  194. sage/schemes/curves/constructor.py +381 -0
  195. sage/schemes/curves/curve.py +542 -0
  196. sage/schemes/curves/plane_curve_arrangement.py +1283 -0
  197. sage/schemes/curves/point.py +463 -0
  198. sage/schemes/curves/projective_curve.py +3026 -0
  199. sage/schemes/curves/zariski_vankampen.py +1932 -0
  200. sage/schemes/cyclic_covers/all.py +2 -0
  201. sage/schemes/cyclic_covers/charpoly_frobenius.py +320 -0
  202. sage/schemes/cyclic_covers/constructor.py +137 -0
  203. sage/schemes/cyclic_covers/cycliccover_finite_field.py +1309 -0
  204. sage/schemes/cyclic_covers/cycliccover_generic.py +310 -0
  205. sage/schemes/elliptic_curves/BSD.py +1036 -0
  206. sage/schemes/elliptic_curves/Qcurves.py +592 -0
  207. sage/schemes/elliptic_curves/addition_formulas_ring.py +94 -0
  208. sage/schemes/elliptic_curves/all.py +49 -0
  209. sage/schemes/elliptic_curves/cardinality.py +609 -0
  210. sage/schemes/elliptic_curves/cm.py +1102 -0
  211. sage/schemes/elliptic_curves/constructor.py +1552 -0
  212. sage/schemes/elliptic_curves/ec_database.py +175 -0
  213. sage/schemes/elliptic_curves/ell_curve_isogeny.py +3972 -0
  214. sage/schemes/elliptic_curves/ell_egros.py +459 -0
  215. sage/schemes/elliptic_curves/ell_field.py +2836 -0
  216. sage/schemes/elliptic_curves/ell_finite_field.py +3359 -0
  217. sage/schemes/elliptic_curves/ell_generic.py +3760 -0
  218. sage/schemes/elliptic_curves/ell_local_data.py +1207 -0
  219. sage/schemes/elliptic_curves/ell_modular_symbols.py +775 -0
  220. sage/schemes/elliptic_curves/ell_number_field.py +4220 -0
  221. sage/schemes/elliptic_curves/ell_padic_field.py +107 -0
  222. sage/schemes/elliptic_curves/ell_point.py +4787 -0
  223. sage/schemes/elliptic_curves/ell_rational_field.py +7368 -0
  224. sage/schemes/elliptic_curves/ell_tate_curve.py +671 -0
  225. sage/schemes/elliptic_curves/ell_torsion.py +436 -0
  226. sage/schemes/elliptic_curves/ell_wp.py +352 -0
  227. sage/schemes/elliptic_curves/formal_group.py +760 -0
  228. sage/schemes/elliptic_curves/gal_reps.py +1459 -0
  229. sage/schemes/elliptic_curves/gal_reps_number_field.py +1669 -0
  230. sage/schemes/elliptic_curves/gp_simon.py +152 -0
  231. sage/schemes/elliptic_curves/heegner.py +7335 -0
  232. sage/schemes/elliptic_curves/height.py +2109 -0
  233. sage/schemes/elliptic_curves/hom.py +1406 -0
  234. sage/schemes/elliptic_curves/hom_composite.py +934 -0
  235. sage/schemes/elliptic_curves/hom_frobenius.py +522 -0
  236. sage/schemes/elliptic_curves/hom_scalar.py +531 -0
  237. sage/schemes/elliptic_curves/hom_sum.py +682 -0
  238. sage/schemes/elliptic_curves/hom_velusqrt.py +1290 -0
  239. sage/schemes/elliptic_curves/homset.py +271 -0
  240. sage/schemes/elliptic_curves/isogeny_class.py +1521 -0
  241. sage/schemes/elliptic_curves/isogeny_small_degree.py +2797 -0
  242. sage/schemes/elliptic_curves/jacobian.py +237 -0
  243. sage/schemes/elliptic_curves/kodaira_symbol.py +344 -0
  244. sage/schemes/elliptic_curves/kraus.py +1014 -0
  245. sage/schemes/elliptic_curves/lseries_ell.py +943 -0
  246. sage/schemes/elliptic_curves/mod5family.py +105 -0
  247. sage/schemes/elliptic_curves/mod_poly.py +197 -0
  248. sage/schemes/elliptic_curves/mod_sym_num.cpython-314t-darwin.so +0 -0
  249. sage/schemes/elliptic_curves/mod_sym_num.pyx +3796 -0
  250. sage/schemes/elliptic_curves/modular_parametrization.py +305 -0
  251. sage/schemes/elliptic_curves/padic_lseries.py +1793 -0
  252. sage/schemes/elliptic_curves/padics.py +1816 -0
  253. sage/schemes/elliptic_curves/period_lattice.py +2234 -0
  254. sage/schemes/elliptic_curves/period_lattice_region.cpython-314t-darwin.so +0 -0
  255. sage/schemes/elliptic_curves/period_lattice_region.pyx +722 -0
  256. sage/schemes/elliptic_curves/saturation.py +715 -0
  257. sage/schemes/elliptic_curves/sha_tate.py +1158 -0
  258. sage/schemes/elliptic_curves/weierstrass_morphism.py +1117 -0
  259. sage/schemes/elliptic_curves/weierstrass_transform.py +200 -0
  260. sage/schemes/hyperelliptic_curves/all.py +6 -0
  261. sage/schemes/hyperelliptic_curves/constructor.py +291 -0
  262. sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py +1914 -0
  263. sage/schemes/hyperelliptic_curves/hyperelliptic_g2.py +192 -0
  264. sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +954 -0
  265. sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py +1332 -0
  266. sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py +84 -0
  267. sage/schemes/hyperelliptic_curves/invariants.py +410 -0
  268. sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +315 -0
  269. sage/schemes/hyperelliptic_curves/jacobian_g2.py +32 -0
  270. sage/schemes/hyperelliptic_curves/jacobian_generic.py +419 -0
  271. sage/schemes/hyperelliptic_curves/jacobian_homset.py +186 -0
  272. sage/schemes/hyperelliptic_curves/jacobian_morphism.py +875 -0
  273. sage/schemes/hyperelliptic_curves/kummer_surface.py +99 -0
  274. sage/schemes/hyperelliptic_curves/mestre.py +302 -0
  275. sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +3871 -0
  276. sage/schemes/jacobians/abstract_jacobian.py +277 -0
  277. sage/schemes/jacobians/all.py +2 -0
  278. sage/schemes/overview.py +161 -0
  279. sage/schemes/plane_conics/all.py +22 -0
  280. sage/schemes/plane_conics/con_field.py +1296 -0
  281. sage/schemes/plane_conics/con_finite_field.py +158 -0
  282. sage/schemes/plane_conics/con_number_field.py +456 -0
  283. sage/schemes/plane_conics/con_rational_field.py +406 -0
  284. sage/schemes/plane_conics/con_rational_function_field.py +580 -0
  285. sage/schemes/plane_conics/constructor.py +249 -0
  286. sage/schemes/plane_quartics/all.py +2 -0
  287. sage/schemes/plane_quartics/quartic_constructor.py +71 -0
  288. sage/schemes/plane_quartics/quartic_generic.py +73 -0
  289. sage/schemes/riemann_surfaces/all.py +1 -0
  290. sage/schemes/riemann_surfaces/riemann_surface.py +4117 -0
  291. sage_wheels/share/cremona/cremona_mini.db +0 -0
  292. sage_wheels/share/ellcurves/rank0 +30427 -0
  293. sage_wheels/share/ellcurves/rank1 +31871 -0
  294. sage_wheels/share/ellcurves/rank10 +6 -0
  295. sage_wheels/share/ellcurves/rank11 +6 -0
  296. sage_wheels/share/ellcurves/rank12 +1 -0
  297. sage_wheels/share/ellcurves/rank14 +1 -0
  298. sage_wheels/share/ellcurves/rank15 +1 -0
  299. sage_wheels/share/ellcurves/rank17 +1 -0
  300. sage_wheels/share/ellcurves/rank19 +1 -0
  301. sage_wheels/share/ellcurves/rank2 +2388 -0
  302. sage_wheels/share/ellcurves/rank20 +1 -0
  303. sage_wheels/share/ellcurves/rank21 +1 -0
  304. sage_wheels/share/ellcurves/rank22 +1 -0
  305. sage_wheels/share/ellcurves/rank23 +1 -0
  306. sage_wheels/share/ellcurves/rank24 +1 -0
  307. sage_wheels/share/ellcurves/rank28 +1 -0
  308. sage_wheels/share/ellcurves/rank3 +836 -0
  309. sage_wheels/share/ellcurves/rank4 +10 -0
  310. sage_wheels/share/ellcurves/rank5 +5 -0
  311. sage_wheels/share/ellcurves/rank6 +5 -0
  312. sage_wheels/share/ellcurves/rank7 +5 -0
  313. sage_wheels/share/ellcurves/rank8 +6 -0
  314. sage_wheels/share/ellcurves/rank9 +7 -0
@@ -0,0 +1,315 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ r"""
3
+ Some functions regarding geometric endomorphism rings of Jacobians of
4
+ hyperelliptic curves.
5
+
6
+ There are currently two main functions in this module, associated to the
7
+ Jacobian `J` of a genus 2 curve over the rational numbers `\QQ`:
8
+
9
+ - ``get_is_geom_field``
10
+ - ``is_geom_trivial_when_field``
11
+
12
+ ``get_is_geom_field`` determines whether the geometric endomorphism
13
+ algebra \textup{End}_{\overline{\QQ}}(J) \otimes \QQ` is a field.
14
+
15
+ ``is_geom_trivial_when_field`` determines whether the geometric endomorphism ring
16
+ `\textup{End}_{\overline{\QQ}}(J)` is equal to the integer ring `\ZZ`, assuming
17
+ the geometric endomorphism algebra is a field. If this is the case, one says
18
+ that `J` is ``generic``.
19
+
20
+ These functions are used in `jacobian_generic.py` in the following two
21
+ analogous methods associated to the Jacobian `J` of a genus 2 curve over the
22
+ rational numbers `\QQ`:
23
+
24
+ - ``geometric_endomorphism_algebra_is_field(J)``
25
+ - ``geometric_endomorphism_ring_is_ZZ(J)``
26
+
27
+ Both of these are important attributes of the Jacobian J.
28
+
29
+ The algorithms in the functions in this module are implementations of
30
+ Algorithms 4.10 and 4.15 from Lombardo's paper [Lom2019]_.
31
+
32
+ The following examples have been verified with the corresponding LMFDB entries.
33
+
34
+ EXAMPLES:
35
+
36
+ Here is an example of a generic Jacobian; the LMFDB label of the curve is
37
+ 249.a.249.1::
38
+
39
+ sage: R.<x> = QQ[]
40
+ sage: f = x^6 + 2*x^3 + 4*x^2 + 4*x + 1
41
+ sage: C = HyperellipticCurve(f)
42
+ sage: A = C.jacobian()
43
+ sage: A.geometric_endomorphism_ring_is_ZZ()
44
+ True
45
+
46
+ Here is an example of a Jacobian whose endomorphism algebra is a field but not
47
+ the rational number field; the LMFDB label of the curve is 529.a.529.1::
48
+
49
+ sage: f = x^6 - 4*x^5 + 2*x^4 + 2*x^3 + x^2 + 2*x + 1
50
+ sage: C = HyperellipticCurve(f)
51
+ sage: A = C.jacobian()
52
+ sage: A.geometric_endomorphism_algebra_is_field()
53
+ True
54
+ sage: A.geometric_endomorphism_ring_is_ZZ()
55
+ False
56
+
57
+ Here is an example of a Jacobian whose endomorphism algebra is not a field;
58
+ the LMFDB label of the curve is 169.a.169.1::
59
+
60
+ sage: f = x^6 + 4*x^5 + 6*x^4 + 2*x^3 + x^2 + 2*x + 1
61
+ sage: C = HyperellipticCurve(f)
62
+ sage: A = C.jacobian()
63
+ sage: A.geometric_endomorphism_algebra_is_field() # needs sage.groups
64
+ False
65
+
66
+ .. WARNING::
67
+
68
+ There is a very small chance that the algorithms return ``False`` for the
69
+ two methods described above when in fact one or both of them are ``True``.
70
+ In this case, as explained in the discussion immediately preceding
71
+ Algorithm 4.15 of [Lom2019]_, this can be established by increasing the
72
+ optional `B` parameter of the two methods. Mathematically, the algorithms
73
+ give the correct answer only in the limit as `B \to \infty`, although in
74
+ practice `B = 200` was sufficient to correctly verify every single entry
75
+ in the LMFDB.
76
+
77
+ AUTHORS:
78
+
79
+ - Barinder S. Banwait and Davide Lombardo (2021-06-09): initial version
80
+ """
81
+
82
+ # ****************************************************************************
83
+ # Copyright (C) 2021 Barinder S. Banwait and Davide Lombardo
84
+ #
85
+ # This program is free software: you can redistribute it and/or modify
86
+ # it under the terms of the GNU General Public License as published by
87
+ # the Free Software Foundation, either version 2 of the License, or
88
+ # (at your option) any later version.
89
+ # https://www.gnu.org/licenses/
90
+ # ****************************************************************************
91
+
92
+ from sage.rings.rational_field import QQ
93
+ from sage.rings.integer_ring import ZZ
94
+ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
95
+ from sage.rings.finite_rings.finite_field_constructor import FiniteField
96
+ from sage.misc.lazy_import import lazy_import
97
+ from sage.rings.fast_arith import prime_range
98
+ from sage.arith.misc import GCD as gcd
99
+
100
+ lazy_import('sage.interfaces.genus2reduction', ['genus2reduction', 'Genus2reduction'])
101
+ lazy_import('sage.rings.number_field.number_field', 'NumberField')
102
+
103
+
104
+ def satisfies_coefficient_condition(g, p):
105
+ """
106
+ This is the coefficient condition in the definition of Omega_K'
107
+ on page 912 of the published version of paper.
108
+
109
+ EXAMPLES::
110
+
111
+ sage: from sage.schemes.hyperelliptic_curves.jacobian_endomorphism_utils import satisfies_coefficient_condition
112
+ sage: R.<x> = ZZ[]
113
+ sage: f = x^4 + x^3 + 17*x^2 + 5*x
114
+ sage: satisfies_coefficient_condition(f,17)
115
+ False
116
+ sage: f = x^4 + x^3 + 17*x^2 + 23*x + 23^2
117
+ sage: satisfies_coefficient_condition(f,23)
118
+ True
119
+ """
120
+
121
+ if g[0] != p**2:
122
+ return False
123
+ if g[3]*p != g[1]:
124
+ return False
125
+ if g[2] % p == 0:
126
+ return False
127
+ return True
128
+
129
+
130
+ def get_is_geom_field(f, C, bad_primes, B=200):
131
+ r"""
132
+ Determine whether the geometric endomorphism algebra is a field.
133
+
134
+ This is Algorithm 4.10 in [Lom2019]_. The computation done here
135
+ may allow one to immediately conclude that the geometric endomorphism
136
+ ring is trivial (i.e. the integer ring); this information is output
137
+ in a second boolean to avoid unnecessary subsequent computation.
138
+
139
+ An additional optimisation comes from Part (2) of Theorem 4.8 in
140
+ [Lom2019]_, from which we can conclude that the endomorphism ring
141
+ is geometrically trivial, and from Proposition 4.7 in loc. cit. from
142
+ which we can rule out potential QM.
143
+
144
+ INPUT:
145
+
146
+ - ``f`` -- a polynomial defining the hyperelliptic curve
147
+
148
+ - ``C`` -- the hyperelliptic curve
149
+
150
+ - ``bad_primes`` -- the list of odd primes of bad reduction
151
+
152
+ - ``B`` -- (default: 200) the bound which appears in the statement of
153
+ the algorithm from [Lom2019]_
154
+
155
+ OUTPUT:
156
+
157
+ Pair of booleans (bool1, bool2). `bool1` indicates if the
158
+ geometric endomorphism algebra is a field; `bool2` indicates if the
159
+ geometric endomorphism algebra is the field of rational numbers.
160
+
161
+ WARNING:
162
+
163
+ There is a very small chance that this algorithm return ``False`` when in
164
+ fact it is ``True``. In this case, as explained in the discussion
165
+ immediately preceding Algorithm 4.15 of [Lom2019]_, this can be established
166
+ by increasing the optional `B` parameter. Mathematically, this algorithm
167
+ gives the correct answer only in the limit as `B \to \infty`, although in
168
+ practice `B = 200` was sufficient to correctly verify every single entry
169
+ in the LMFDB. However, strictly speaking, a ``False`` returned by this
170
+ function is not provably ``False``.
171
+
172
+ EXAMPLES:
173
+
174
+ This is LMFDB curve 940693.a.960693.1::
175
+
176
+ sage: from sage.schemes.hyperelliptic_curves.jacobian_endomorphism_utils import get_is_geom_field
177
+ sage: R.<x> = QQ[]
178
+ sage: f = 4*x^6 - 12*x^5 + 20*x^3 - 8*x^2 - 4*x + 1
179
+ sage: C = HyperellipticCurve(f)
180
+ sage: get_is_geom_field(f,C,[13,269]) # needs sage.groups
181
+ (False, False)
182
+
183
+ This is LMFDB curve 3125.a.3125.1::
184
+
185
+ sage: f = 4*x^5 + 1
186
+ sage: C = HyperellipticCurve(f)
187
+ sage: get_is_geom_field(f,C,[5]) # needs sage.groups
188
+ (True, False)
189
+
190
+ This is LMFDB curve 277.a.277.2::
191
+
192
+ sage: f = 4*x^6 - 36*x^4 + 56*x^3 - 76*x^2 + 44*x - 23
193
+ sage: C = HyperellipticCurve(f)
194
+ sage: get_is_geom_field(f,C,[277]) # needs sage.groups
195
+ (True, True)
196
+ """
197
+
198
+ if C.has_odd_degree_model():
199
+ C_odd = C.odd_degree_model()
200
+ f_odd, h_odd = C_odd.hyperelliptic_polynomials()
201
+ # if f was odd to begin with, then f_odd = f
202
+ assert f_odd.degree() == 5
203
+
204
+ if (4*f_odd + h_odd**2).degree() == 5:
205
+ f_new = 4*f_odd + h_odd**2
206
+ if f_new.is_irreducible():
207
+ # i.e. the Jacobian is geometrically simple
208
+ f_disc_odd_prime_exponents = [v for _,v in f_new.discriminant().prime_to_S_part([ZZ(2)]).factor()]
209
+ if 1 in f_disc_odd_prime_exponents:
210
+ return (True, True) # Theorem 4.8 (2)
211
+ # At this point we are in the situation of Algorithm 4.10
212
+ # Step 1, so either the geometric endomorphism algebra is a
213
+ # field or it is a quaternion algebra. This latter case implies
214
+ # that the Jacobian is the square of an elliptic curve modulo
215
+ # a prime p where f is also irreducible (which exist by
216
+ # Chebotarev density). This contradicts Prop 4.7, hence we can
217
+ # conclude as follows.
218
+ return (True, False)
219
+
220
+ if f.is_irreducible():
221
+ assert f.degree() == 6 # else we should already have exited by now
222
+ G = f.galois_group()
223
+ if G.order() in [360, 720]:
224
+ return (True, True) # Algorithm 4.10 Step 2
225
+
226
+ R = PolynomialRing(ZZ,2,"xv")
227
+ x,v = R.gens()
228
+ T = PolynomialRing(QQ,'v')
229
+ g = v - x**12
230
+
231
+ for p in prime_range(3,B):
232
+ if p not in bad_primes:
233
+ fp = C.change_ring(FiniteField(p)).frobenius_polynomial()
234
+
235
+ # This defines the polynomial f_v**[12] from the paper
236
+ fp12 = T(R(fp).resultant(g))
237
+
238
+ if fp12.is_irreducible():
239
+ # i.e. the Jacobian is geometrically simple
240
+ f_disc_odd_prime_exponents = [v for _,v in f.discriminant().prime_to_S_part([ZZ(2)]).factor()]
241
+ if 1 in f_disc_odd_prime_exponents:
242
+ return (True, True) # Theorem 4.8 (2)
243
+ return (True, False) # Algorithm 4.10 Step 3 plus Prop 4.7 as above
244
+ return (False, False)
245
+
246
+
247
+ def is_geom_trivial_when_field(C, bad_primes, B=200):
248
+ r"""
249
+ Determine if the geometric endomorphism ring is trivial assuming the
250
+ geometric endomorphism algebra is a field.
251
+
252
+ This is Algorithm 4.15 in [Lom2019]_.
253
+
254
+ INPUT:
255
+
256
+ - ``C`` -- the hyperelliptic curve
257
+
258
+ - ``bad_primes`` -- the list of odd primes of bad reduction
259
+
260
+ - ``B`` -- (default: 200) the bound which appears in the statement of
261
+ the algorithm from [Lom2019]_
262
+
263
+ OUTPUT:
264
+
265
+ Boolean indicating whether or not the geometric endomorphism
266
+ algebra is the field of rational numbers.
267
+
268
+ WARNING:
269
+
270
+ There is a very small chance that this algorithm returns ``False`` when in
271
+ fact it is ``True``. In this case, as explained in the discussion
272
+ immediately preceding Algorithm 4.15 of [Lom2019]_, this can be established
273
+ by increasing the optional `B` parameter. Mathematically, this algorithm
274
+ gives the correct answer only in the limit as `B \to \infty`, although in
275
+ practice `B = 200` was sufficient to correctly verify every single entry
276
+ in the LMFDB. However, strictly speaking, a ``False`` returned by this
277
+ function is not provably ``False``.
278
+
279
+ EXAMPLES:
280
+
281
+ This is LMFDB curve 461.a.461.2::
282
+
283
+ sage: from sage.schemes.hyperelliptic_curves.jacobian_endomorphism_utils import is_geom_trivial_when_field
284
+ sage: R.<x> = QQ[]
285
+ sage: f = 4*x^5 - 4*x^4 - 156*x^3 + 40*x^2 + 1088*x - 1223
286
+ sage: C = HyperellipticCurve(f)
287
+ sage: is_geom_trivial_when_field(C,[461])
288
+ True
289
+
290
+ This is LMFDB curve 4489.a.4489.1::
291
+
292
+ sage: f = x^6 + 4*x^5 + 2*x^4 + 2*x^3 + x^2 - 2*x + 1
293
+ sage: C = HyperellipticCurve(f)
294
+ sage: is_geom_trivial_when_field(C,[67])
295
+ False
296
+ """
297
+
298
+ running_gcd = 0
299
+ R = PolynomialRing(ZZ,2,"xv")
300
+ x,v = R.gens()
301
+ T = PolynomialRing(QQ,'v')
302
+ g = v - x**4
303
+
304
+ for p in prime_range(3,B):
305
+ if p not in bad_primes:
306
+ Cp = C.change_ring(FiniteField(p))
307
+ fp = Cp.frobenius_polynomial()
308
+ if satisfies_coefficient_condition(fp, p):
309
+ # This defines the polynomial f_v**[4] from the paper
310
+ fp4 = T(R(fp).resultant(g))
311
+ if fp4.is_irreducible():
312
+ running_gcd = gcd(running_gcd, NumberField(fp,'a').discriminant())
313
+ if running_gcd <= 24:
314
+ return True
315
+ return False
@@ -0,0 +1,32 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ """
3
+ Jacobian of a hyperelliptic curve of genus 2
4
+ """
5
+
6
+ #*****************************************************************************
7
+ # Copyright (C) 2006 David Kohel <kohel@maths.usyd.edu>
8
+ # Distributed under the terms of the GNU General Public License (GPL)
9
+ # http://www.gnu.org/licenses/
10
+ #*****************************************************************************
11
+
12
+ from . import jacobian_generic
13
+ from . import kummer_surface
14
+
15
+ # The generic genus 2 curve in Weierstrass form:
16
+ #
17
+ # y^2 + (c0*x^3 + c2*x^2 + c4*x + c6)*y =
18
+ # a0*x^6 + a2*x^5 + a4*x^4 + a6*x^3 + a8*x^2 + a10*x + a12.
19
+ #
20
+ # Transforms to:
21
+ #
22
+ # y^2 = (4*a0 + c0^2)*x^6 + (4*a2 + 2*c0*c2)*x^5
23
+ # + (4*a4 + 2*c0*c4 + c2^2)*x^4 + (4*a6 + 2*c0*c6 + 2*c2*c4)*x^3
24
+ # + (4*a8 + 2*c2*c6 + c4^2)*x^2 + (4*a10 + 2*c4*c6)*x + 4*a12 + c6^2
25
+
26
+
27
+ class HyperellipticJacobian_g2(jacobian_generic.HyperellipticJacobian_generic):
28
+ def kummer_surface(self):
29
+ try:
30
+ return self._kummer_surface
31
+ except AttributeError:
32
+ return kummer_surface.KummerSurface(self)