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,2 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ from sage.schemes.cyclic_covers.constructor import CyclicCover
@@ -0,0 +1,320 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs sage.rings.padics
3
+ r"""
4
+ Computation of the Frobenius polynomial using Newton's identities
5
+ """
6
+ # *****************************************************************************
7
+ # Copyright (C) 2018 Edgar Costa <edgarc@mit.edu>
8
+ # Distributed under the terms of the GNU General Public License (GPL)
9
+ # https://www.gnu.org/licenses/
10
+ # *****************************************************************************
11
+ from sage.rings.integer_ring import ZZ
12
+ from sage.misc.lazy_import import lazy_import
13
+ lazy_import("sage.functions.log", "log")
14
+
15
+
16
+ def charpoly_frobenius(frob_matrix, charpoly_prec, p, weight, a=1, known_factor=[1]):
17
+ """
18
+ Return the characteristic polynomial of the given Frobenius matrix.
19
+
20
+ INPUT:
21
+
22
+ - ``frob_matrix`` -- a matrix representing the Frobenius matrix up to some precision
23
+
24
+ - ``charpoly_prec`` -- a vector ai, such that, ``frob_matrix.change_ring(ZZ).charpoly()[i]``
25
+ will be correct mod `p^ai`, this can be easily deduced from the
26
+ Hodge numbers and knowing the q-adic precision of ``frob_matrix``
27
+
28
+ - ``p`` -- prime `p`
29
+
30
+ - ``weight`` -- weight of the motive
31
+
32
+ - ``a`` -- `p = q^a`
33
+
34
+ - ``known_factor`` -- the list of coefficients of the known factor
35
+
36
+ OUTPUT: list of integers corresponding to the characteristic polynomial
37
+ of the Frobenius action
38
+
39
+ EXAMPLES::
40
+
41
+ sage: from sage.schemes.cyclic_covers.charpoly_frobenius import charpoly_frobenius
42
+ sage: M = Matrix([[O(17), 8 + O(17)], [O(17), 15 + O(17)]])
43
+ sage: charpoly_frobenius(M, [2, 1, 1], 17, 1, 1)
44
+ [17, 2, 1]
45
+
46
+ sage: R = Zq(17**2, names=('a',))
47
+ sage: M = Matrix(R, [[8*17 + 16*17**2 + O(17**3), 8 + 11*17 + O(17**2)],
48
+ ....: [7*17**2 + O(17**3), 15 + 8*17 + O(17**2)]])
49
+ sage: charpoly_frobenius(M*M, [3, 2, 2], 17, 1, 2)
50
+ [289, 30, 1]
51
+
52
+ sage: M = Matrix([[8*31 + 8*31**2 + O(31**3), O(31**3), O(31**3), O(31**3)],
53
+ ....: [O(31**3), 23*31 + 22*31**2 + O(31**3), O(31**3), O(31**3)],
54
+ ....: [O(31**3), O(31**3), 27 + 7*31 + O(31**3), O(31**3)],
55
+ ....: [O(31**3), O(31**3), O(31**3), 4 + 23*31 + O(31**3)]])
56
+ sage: charpoly_frobenius(M, [4, 3, 2, 2, 2], 31, 1, 1)
57
+ [961, 0, 46, 0, 1]
58
+
59
+ sage: M = Matrix([(4*43^2 + O(43^3), 17*43 + 11*43^2 + O(43^3), O(43^3), O(43^3), 17 + 37*43 + O(43^3), O(43^3)),
60
+ ....: (30*43 + 23*43^2 + O(43^3), 5*43 + O(43^3), O(43^3), O(43^3), 3 + 38*43 + O(43^3), O(43^3)),
61
+ ....: (O(43^3), O(43^3), 9*43 + 32*43^2 + O(43^3), 13 + 25*43 + O(43^3), O(43^3), 17 + 18*43 + O(43^3)),
62
+ ....: (O(43^3), O(43^3), 22*43 + 25*43^2 + O(43^3), 11 + 24*43 + O(43^3), O(43^3), 36 + 5*43 + O(43^3)),
63
+ ....: (42*43 + 15*43^2 + O(43^3), 22*43 + 8*43^2 + O(43^3), O(43^3), O(43^3), 29 + 4*43 + O(43^3), O(43^3)),
64
+ ....: (O(43^3), O(43^3), 6*43 + 19*43^2 + O(43^3), 8 + 24*43 + O(43^3), O(43^3), 31 + 42*43 + O(43^3))])
65
+ sage: charpoly_frobenius(M, [5, 4, 3, 2, 2, 2, 2], 43, 1, 1)
66
+ [79507, 27735, 6579, 1258, 153, 15, 1]
67
+
68
+ sage: M = Matrix([(1 + O(4999), O(4999), 0, 0),
69
+ ....: (O(4999), 4860 + O(4999), 0, 0),
70
+ ....: (0, 0, O(4999), O(4999)),
71
+ ....: (0, 0, O(4999), 1 + O(4999))])
72
+ sage: charpoly_frobenius(M, [2, 1, 1], 4999, 1, 1, [1, -2, 1])
73
+ [4999, 139, 1]
74
+
75
+ TESTS::
76
+
77
+ sage: M = Matrix([[-149196156000219, 0, 0, 0, 0, 0, 0, 0],
78
+ ....: [0, 76324364094257, 0, 0, 0, 0, 0, 0],
79
+ ....: [0, 0, 76324364094257, 0, 0, 0, 0, 0],
80
+ ....: [0, 0, 0, -149196156000219, 0, 0, 0, 0],
81
+ ....: [0, 0, 0, 0, 281855171388275, 0, 0, 0],
82
+ ....: [0, 0, 0, 0, 0, -208983379482579, 0, 0],
83
+ ....: [0, 0, 0, 0, 0, 0, -208983379482579, 0],
84
+ ....: [0, 0, 0, 0, 0, 0, 0, 281855171388275]])
85
+ sage: charpoly_frobenius(M, [9, 8, 7, 6, 5, 5, 5, 5, 5], 1009, 1, 2)
86
+ [1074309286591662654798721,
87
+ 561382189105547134612,
88
+ -2982540407204025062,
89
+ -247015136050256,
90
+ 4390163797795,
91
+ -242628176,
92
+ -2877542,
93
+ 532,
94
+ 1]
95
+ sage: M = Matrix([[0, 0, 0, -338082603, 0, 0, 0, 0],
96
+ ....: [0, 0, -317436968, 0, 0, 0, 0, 0],
97
+ ....: [0, -120741807, 0, 0, 0, 0, 0, 0],
98
+ ....: [200618482, 0, 0, 0, 0, 0, 0, 0],
99
+ ....: [0, 0, 0, 0, 0, 0, 0, 123492519],
100
+ ....: [0, 0, 0, 0, 0, 0, 426826171, 0],
101
+ ....: [0, 0, 0, 0, 0, 157417117, 0, 0],
102
+ ....: [0, 0, 0, 0, 373415235, 0, 0, 0]])
103
+ sage: charpoly_frobenius(M, [7, 6, 5, 4, 3, 3, 3, 3, 3], 1009, 1, 1)
104
+ [1036488922561, 0, 270809546, 0, -1474149, 0, 266, 0, 1]
105
+
106
+ sage: M = Matrix({(0, 31): 1814236329200021268558465351501717,
107
+ ....: (1, 30): 3268331092352160631300311212049390,
108
+ ....: (2, 29): 1002349136486054751305109007707560,
109
+ ....: (3, 28): 1789497403160078628636360424523308,
110
+ ....: (4, 19): 919866278512654133838788268427125,
111
+ ....: (5, 18): 2918980842679879118243999587726673,
112
+ ....: (6, 17): 2062741569795231121341967954037400,
113
+ ....: (7, 16): 3562554496811633214919332352788305,
114
+ ....: (8, 7): 287823825201170974551150606916601,
115
+ ....: (9, 6): 2657175570144838727074228404244845,
116
+ ....: (10, 5): 3200631048273888400670606576807785,
117
+ ....: (11, 4): 707085630754978281870563133348521,
118
+ ....: (12, 39): 679572779843478608532167180287595,
119
+ ....: (13, 38): 510867456922807824071915371084390,
120
+ ....: (14, 37): 3300741705093235469798877501619286,
121
+ ....: (15, 36): 1374430202827161695034370373469332,
122
+ ....: (16, 27): 1897240889699239396313755822318254,
123
+ ....: (17, 26): 3171751877741319729745976757727266,
124
+ ....: (18, 25): 1151779650995750952707414056498421,
125
+ ....: (19, 24): 1309748952162524211332312241346156,
126
+ ....: (20, 15): 2914640274871541651939754878647777,
127
+ ....: (21, 14): 2524322227034087814555116576604052,
128
+ ....: (22, 13): 693999428630644346611319813759997,
129
+ ....: (23, 12): 2093267437436875555592094407087011,
130
+ ....: (24, 3): 101158112439244133585487537448909,
131
+ ....: (25, 2): 638873050956374173808321501215560,
132
+ ....: (26, 1): 3529335795023815426485172749287314,
133
+ ....: (27, 0): 618726320422582798159865537548600,
134
+ ....: (28, 35): 2510605595766272594980682702750921,
135
+ ....: (29, 34): 2978146199632282120435531158312695,
136
+ ....: (30, 33): 1724161588290366191539756998844438,
137
+ ....: (31, 32): 516507426627993787229114955328811,
138
+ ....: (32, 23): 1716672265998537901154333190869011,
139
+ ....: (33, 22): 3787144776814278856737374038432424,
140
+ ....: (34, 21): 3765560528316833596614887925578722,
141
+ ....: (35, 20): 1628311006615824767735977131865996,
142
+ ....: (36, 11): 3638935478569769465046956942756848,
143
+ ....: (37, 10): 1878821491042105813643148323053706,
144
+ ....: (38, 9): 1187568624951630613061547491748348,
145
+ ....: (39, 8): 2538351040819233009959661983810741}
146
+ ....: )
147
+ sage: charpoly_frobenius(M,
148
+ ....: [31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16,
149
+ ....: 15, 14, 13, 12] + [11]*21, 1129, 1, 1)
150
+ [11320844849639649951608809973589776933203136765026963553258401,
151
+ 0,
152
+ 0,
153
+ 0,
154
+ 0,
155
+ 0,
156
+ 0,
157
+ 0,
158
+ 0,
159
+ 0,
160
+ 24687045654725446027864774006541463602997309796,
161
+ 0,
162
+ 0,
163
+ 0,
164
+ 0,
165
+ 0,
166
+ 0,
167
+ 0,
168
+ 0,
169
+ 0,
170
+ 20187877911930897108199045855206,
171
+ 0,
172
+ 0,
173
+ 0,
174
+ 0,
175
+ 0,
176
+ 0,
177
+ 0,
178
+ 0,
179
+ 0,
180
+ 7337188909826596,
181
+ 0,
182
+ 0,
183
+ 0,
184
+ 0,
185
+ 0,
186
+ 0,
187
+ 0,
188
+ 0,
189
+ 0,
190
+ 1]
191
+
192
+ sage: F = Matrix(Qp(17),
193
+ ....: [(28442601332527957763, 729848492961404015, 70994086070709920),
194
+ ....: (24928804992606688137, 1345506389644311177, 147442915782003034),
195
+ ....: (7562462964206075698, 1262441299395996535, 92309755559576133)])
196
+ sage: F+= F.base_ring()(0).add_bigoh(6)*ones_matrix(*F.dimensions())
197
+ sage: charpoly_frobenius(F, [6, 5, 4, 4], 17, 2)
198
+ [-4913, -221, 13, 1]
199
+ """
200
+ assert known_factor[-1] == 1
201
+ try:
202
+ cp = frob_matrix.change_ring(ZZ).charpoly().list()
203
+ except ValueError:
204
+ # the given matrix was not integral
205
+ cp = frob_matrix.charpoly().change_ring(ZZ).list()
206
+ assert len(charpoly_prec) == len(cp) - (len(known_factor) - 1)
207
+ assert cp[-1] == 1
208
+
209
+ # reduce cp mod prec
210
+ degree = len(charpoly_prec) - 1
211
+ mod = [0] * (degree + 1)
212
+ for i in range(len(charpoly_prec)):
213
+ mod[-i] = p**charpoly_prec[-i]
214
+ cp[-i] = cp[-i] % mod[-i]
215
+
216
+ # figure out the sign
217
+ # i.e., if it is a reciprocal or an antireciprocal polynomial
218
+ if weight % 2:
219
+ # for odd weight the sign is always 1
220
+ # it's the charpoly of a USp matrix
221
+ # and charpoly of a symplectic matrix is reciprocal
222
+ sign = 1
223
+ else:
224
+ # For the moment I will not worry about this case
225
+ if known_factor != [1]:
226
+ raise NotImplementedError()
227
+ # we compare ith coefficient and (degree - i)th coefficient to deduce the sign
228
+ # note, if degree is even, the middle coefficient will not help us determine the sign
229
+ for i in range((degree + 1) // 2):
230
+ # Note: degree*weight is even
231
+ p_power = p**min(
232
+ charpoly_prec[i],
233
+ charpoly_prec[degree - i] + ((a * (degree - 2 * i) * weight) // 2),
234
+ )
235
+ if cp[i] % p_power != 0 and cp[degree - i] % p_power != 0:
236
+ other = cp[degree - i] * p**((a * (degree - 2 * i) * weight) // 2)
237
+ if (cp[i] + other) % p_power == 0:
238
+ sign = -1
239
+ else:
240
+ sign = 1
241
+ assert (-sign * cp[i] + other) % p_power == 0
242
+ break
243
+ # halfdegree is the number of coefficients that we will compute
244
+ # the rest will be deduced using the functional equation
245
+ # as up to scaling of the variable
246
+ # the polynomial is either reciprocal or antireciprocal polynomial
247
+ # note, this includes the middle coefficient if degree is even
248
+ halfdegree = degree // 2 + 1
249
+
250
+ cp[0] = sign * p**((a * degree * weight) // 2)
251
+ # Note: degree*weight is even
252
+
253
+ # calculate the i-th power sum of the roots and correct cp along the way
254
+ e = cp[-halfdegree:]
255
+ e.reverse()
256
+ for k in range(halfdegree):
257
+ if k % 2:
258
+ e[k] = -e[k] % mod[degree - k]
259
+ # e[k] = cp[degree - k] if (k%2 ==0) else -cp[degree - k]
260
+ if k > 0:
261
+ # verify if p^charpoly_prec[degree - k] > 2*degree/k * q^(w*k/2)
262
+ assert (
263
+ log(k, p) + charpoly_prec[degree - k]
264
+ > log(2 * degree, p) + a * 0.5 * weight * k
265
+ ), (
266
+ "log(k)/log(p) + charpoly_prec[degree - k] <= log(2*degree)/log(p) + a*0.5*weight*k, k = %d"
267
+ % k
268
+ )
269
+
270
+ fix_e = known_factor[:]
271
+ fix_e.reverse()
272
+ if len(fix_e) < halfdegree:
273
+ fix_e.extend([0] * (halfdegree - len(fix_e)))
274
+ for i in range(halfdegree):
275
+ if i % 2:
276
+ fix_e[i] *= -1
277
+
278
+ # e[k] = \sum x_{i_1} x_{i_2} ... x_{i_k} # where x_* are eigenvalues
279
+ # and i_1 < i_2 ... < i_k
280
+
281
+ # s[k] = \sum x_i ^k for k>0
282
+ s = [None] * (halfdegree)
283
+ res = [None] * len(charpoly_prec)
284
+ res[0] = sign * p**((a * degree * weight) // 2)
285
+ # Note: degree*weight is even
286
+
287
+ res[-1] = 1
288
+ e[1] -= fix_e[1]
289
+ e[1] = e[1] % mod[degree - 1]
290
+ for k in range(1, halfdegree):
291
+ # assume that s[i] and e[i] are correct for i < k
292
+ # e[k] correct modulo mod[degree - k]
293
+ # S = sum (-1)^i e[k-i] * s[i]
294
+ # s[k] = (-1)^(k-1) (k*e[k] + S) ==> (-1)^(k-1) s[k] - S = k*e[k]
295
+ S = sum((-1)**i * e[k - i] * s[i] for i in range(1, k))
296
+ s[k] = (-1)**(k - 1) * (S + k * e[k])
297
+ # hence s[k] is correct modulo k*mod[degree - k]
298
+ localmod = k * mod[degree - k]
299
+ # s[k] += (-1)**k * fix_power_sum[k]
300
+ s[k] = s[k] % localmod
301
+
302
+ # |x_i| = p^(w*0.5)
303
+ # => s[k] <= degree*p^(a*w*k*0.5)
304
+ # recall, 2*degree*p^(a*w*k*0.5) /k < mod[degree - k]
305
+ if s[k]**2 > degree**2 * p**(a * weight * k):
306
+ s[k] = -(-s[k] % localmod)
307
+
308
+ # now correct e[k] with:
309
+ # (-1)^(k-1) s[k] - S = k*e[k]
310
+ e[k] = (-S + (-1)**(k - 1) * s[k]) // k
311
+ assert (-S + (-1)**(k - 1) * s[k]) % k == 0
312
+ res[degree - k] = e[k] if not k % 2 else -e[k]
313
+ # Note: degree*weight is even
314
+
315
+ res[k] = sign * res[degree - k] * p**((a * (degree - 2 * k) * weight) // 2)
316
+ # fix e[k + 1]
317
+ if k + 1 < halfdegree:
318
+ e[k + 1] -= sum([fix_e[k + 1 - i] * e[i] for i in range(k + 1)])
319
+ e[k + 1] = e[k + 1] % mod[degree - (k + 1)]
320
+ return res
@@ -0,0 +1,137 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ """
3
+ Cyclic cover curve constructor
4
+ """
5
+
6
+ # *****************************************************************************
7
+ # Copyright (C) 2018 Edgar Costa <edgarcosta@math.dartmouth.edu>
8
+ # Distributed under the terms of the GNU General Public License (GPL)
9
+ # https://www.gnu.org/licenses/
10
+ # *****************************************************************************
11
+
12
+ from sage.rings.finite_rings.finite_field_base import FiniteField
13
+ from sage.rings.polynomial.polynomial_element import Polynomial
14
+ from sage.schemes.affine.affine_space import AffineSpace
15
+
16
+ from .cycliccover_generic import CyclicCover_generic
17
+ from .cycliccover_finite_field import CyclicCover_finite_field
18
+
19
+
20
+ def CyclicCover(r, f, names=None, check_smooth=True):
21
+ r"""
22
+ Return the cyclic cover of the projective line given by `y^r = f`, for
23
+ a univariate polynomial `f`.
24
+
25
+ INPUT:
26
+
27
+ - ``r`` -- the order of the cover
28
+
29
+ - ``f`` -- univariate polynomial if not given, then it defaults to 0
30
+
31
+ - ``names`` -- (default: ``["x","y"]``) names for the coordinate functions
32
+
33
+ - ``check_squarefree`` -- boolean (default: ``True``); test if
34
+ the input defines a unramified cover of the projective line
35
+
36
+ .. WARNING::
37
+
38
+ When setting ``check_smooth=False`` or using a base ring that is
39
+ not a field, the output curves are not to be trusted. For example, the
40
+ output of ``is_singular`` or ``is_smooth`` only tests smoothness over
41
+ the field of fractions.
42
+
43
+ .. NOTE::
44
+
45
+ The words "cyclic cover" are usually used for covers of degree
46
+ greater than two.
47
+ We usually refer to smooth double covers of the projective line as
48
+ "hyperelliptic curves" or "elliptic curves" if the genus is one.
49
+ We allow such cases in this implementation, but we highly recommend
50
+ to use the more specific constructors/classes HyperellipticCurve and
51
+ EllipticCurve for a wider range of tools.
52
+
53
+ EXAMPLES:
54
+
55
+ Basic examples::
56
+
57
+ sage: R.<x> = QQ[]
58
+ sage: CyclicCover(2, x^5 + x + 1)
59
+ Cyclic Cover of P^1 over Rational Field defined by y^2 = x^5 + x + 1
60
+ sage: CyclicCover(3, x^5 + x + 1)
61
+ Cyclic Cover of P^1 over Rational Field defined by y^3 = x^5 + x + 1
62
+ sage: CyclicCover(5, x^5 + x + 1)
63
+ Cyclic Cover of P^1 over Rational Field defined by y^5 = x^5 + x + 1
64
+ sage: CyclicCover(15, x^9 + x + 1)
65
+ Cyclic Cover of P^1 over Rational Field defined by y^15 = x^9 + x + 1
66
+
67
+ sage: k.<a> = GF(9); R.<x> = k[] # needs sage.rings.finite_rings
68
+ sage: CyclicCover(5, x^9 + x + 1) # needs sage.rings.finite_rings
69
+ Cyclic Cover of P^1 over Finite Field in a of size 3^2
70
+ defined by y^5 = x^9 + x + 1
71
+ sage: CyclicCover(15, x^9 + x + 1) # needs sage.rings.finite_rings
72
+ Traceback (most recent call last):
73
+ ...
74
+ ValueError: As the characteristic divides the order of the cover,
75
+ this model is not smooth.
76
+
77
+ We can change the names of the variables in the output::
78
+
79
+ sage: k.<a> = GF(9); R.<x> = k[] # needs sage.rings.finite_rings
80
+ sage: CyclicCover(5, x^9 + x + 1, names=["A","B"]) # needs sage.rings.finite_rings
81
+ Cyclic Cover of P^1 over Finite Field in a of size 3^2
82
+ defined by B^5 = A^9 + A + 1
83
+
84
+ Double roots::
85
+
86
+ sage: P.<x> = GF(7)[]
87
+ sage: CyclicCover(2, (x^3-x+2)^2*(x^6-1))
88
+ Traceback (most recent call last):
89
+ ...
90
+ ValueError: Not a smooth Cyclic Cover of P^1: singularity in the provided affine patch.
91
+
92
+ sage: CyclicCover(2, (x^3-x+2)^2*(x^6-1), check_smooth=False) # needs sage.rings.finite_rings
93
+ Cyclic Cover of P^1 over Finite Field of size 7
94
+ defined by y^2 = x^12 - 2*x^10 - 3*x^9 + x^8 + 3*x^7 + 3*x^6
95
+ + 2*x^4 + 3*x^3 - x^2 - 3*x + 3
96
+
97
+
98
+ Input with integer coefficients creates objects with the integers
99
+ as base ring, but only checks smoothness over `\QQ`, not over Spec(`\ZZ`).
100
+ In other words, it is checked that the discriminant is nonzero, but it is
101
+ not checked whether the discriminant is a unit in `\ZZ^*`::
102
+
103
+ sage: R.<x> = ZZ[]
104
+ sage: CyclicCover(5, (x^3-x+2)*(x^6-1))
105
+ Cyclic Cover of P^1 over Integer Ring defined by y^5 = x^9 - x^7 + 2*x^6 - x^3 + x - 2
106
+ """
107
+ if not isinstance(f, Polynomial):
108
+ raise TypeError("Arguments f (= %s) must be a polynomial" % (f,))
109
+ P = f.parent()
110
+ f = P(f)
111
+ if check_smooth:
112
+ if P(r) == 0:
113
+ raise ValueError(
114
+ "As the characteristic divides the order of the cover, "
115
+ "this model is not smooth."
116
+ )
117
+
118
+ try:
119
+ smooth = f.is_squarefree()
120
+ except NotImplementedError as err:
121
+ raise NotImplementedError(
122
+ str(err) + "Use " "check_smooth=False to skip this check."
123
+ )
124
+ if not smooth:
125
+ raise ValueError(
126
+ "Not a smooth Cyclic Cover of P^1: "
127
+ "singularity in the provided affine patch."
128
+ )
129
+ R = P.base_ring()
130
+ if names is None:
131
+ names = ["x", "y"]
132
+ A2 = AffineSpace(2, R, names=names)
133
+
134
+ if isinstance(R, FiniteField):
135
+ return CyclicCover_finite_field(A2, r, f, names=names)
136
+ else:
137
+ return CyclicCover_generic(A2, r, f, names=names)