passagemath-schemes 10.6.40__cp314-cp314-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.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.40.dist-info/METADATA +204 -0
  7. passagemath_schemes-10.6.40.dist-info/METADATA.bak +205 -0
  8. passagemath_schemes-10.6.40.dist-info/RECORD +314 -0
  9. passagemath_schemes-10.6.40.dist-info/WHEEL +6 -0
  10. passagemath_schemes-10.6.40.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-314-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-314-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-314-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-314-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-314-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-314-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-314-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-314-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-314-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-314-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-314-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-314-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,310 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ """
3
+ Cyclic covers curves over a general ring
4
+
5
+ EXAMPLES::
6
+
7
+ sage: ZZx.<x> = ZZ[]
8
+ sage: C = CyclicCover(5, x^5 + x + 1); C
9
+ Cyclic Cover of P^1 over Integer Ring defined by y^5 = x^5 + x + 1
10
+ sage: C.genus()
11
+ 6
12
+ sage: D = C.projective_closure(); D
13
+ Projective Plane Curve over Integer Ring defined by x0^5 + x0^4*x1 + x1^5 - x2^5
14
+ sage: D.change_ring(QQ).genus()
15
+ 6
16
+ sage: C.change_ring(GF(5))
17
+ Traceback (most recent call last):
18
+ ...
19
+ ValueError: As the characteristic divides the order of the cover, this model is not smooth.
20
+
21
+ sage: GF7x.<x> = GF(7)[]
22
+ sage: C = CyclicCover(3, x^9 + x + 1)
23
+ sage: C
24
+ Cyclic Cover of P^1 over Finite Field of size 7 defined by y^3 = x^9 + x + 1
25
+ sage: C.genus()
26
+ 7
27
+ sage: C.projective_closure()
28
+ Traceback (most recent call last):
29
+ ...
30
+ NotImplementedError: Weighted Projective Space is not implemented
31
+ """
32
+
33
+ # *****************************************************************************
34
+ # Copyright (C) 2018 Edgar Costa <edgarc@mit.edu>
35
+ # Distributed under the terms of the GNU General Public License (GPL)
36
+ # https://www.gnu.org/licenses/
37
+ # *****************************************************************************
38
+
39
+ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
40
+ from sage.structure.category_object import normalize_names
41
+ from sage.arith.misc import GCD
42
+ from sage.schemes.curves.affine_curve import AffinePlaneCurve
43
+
44
+
45
+ class CyclicCover_generic(AffinePlaneCurve):
46
+ def __init__(self, AA, r, f, names=None):
47
+ """
48
+ Cyclic covers over a general ring.
49
+
50
+ INPUT:
51
+
52
+ - ``A`` -- ambient affine space
53
+
54
+ - ``r`` -- degree of the cover
55
+
56
+ - ``f`` -- univariate polynomial
57
+
58
+ - ``names`` -- (default: ``["x","y"]``); names for the
59
+ coordinate functions
60
+
61
+ TESTS::
62
+
63
+ sage: ZZx.<x> = ZZ[]
64
+ sage: C = CyclicCover(5, x^5 + x + 1); C
65
+ Cyclic Cover of P^1 over Integer Ring defined by y^5 = x^5 + x + 1
66
+ sage: C.genus()
67
+ 6
68
+ sage: D = C.projective_closure(); D
69
+ Projective Plane Curve over Integer Ring defined by x0^5 + x0^4*x1 + x1^5 - x2^5
70
+ sage: D.change_ring(QQ).genus()
71
+ 6
72
+ sage: C.change_ring(GF(5))
73
+ Traceback (most recent call last):
74
+ ...
75
+ ValueError: As the characteristic divides the order of the cover,
76
+ this model is not smooth.
77
+
78
+
79
+ sage: GF7x.<x> = GF(7)[]
80
+ sage: C = CyclicCover(3, x^9 + x + 1)
81
+ sage: C
82
+ Cyclic Cover of P^1 over Finite Field of size 7 defined by y^3 = x^9 + x + 1
83
+ sage: C.genus()
84
+ 7
85
+ sage: C.projective_closure()
86
+ Traceback (most recent call last):
87
+ ...
88
+ NotImplementedError: Weighted Projective Space is not implemented
89
+ """
90
+ x, y = AA.gens()
91
+ self._r = r
92
+ self._d = f.degree()
93
+ self._delta = GCD(self._r, self._d)
94
+ self._genus = ((self._d - 1) * (self._r - 1) - (self._delta - 1)) // 2
95
+ self._f = f
96
+
97
+ F = y**r - f(x)
98
+ AffinePlaneCurve.__init__(self, AA, F)
99
+ if names is None:
100
+ names = ("x", "y")
101
+ else:
102
+ names = normalize_names(2, names)
103
+ self._names = names
104
+
105
+ def change_ring(self, R):
106
+ """
107
+ Return this CyclicCover over a new base ring R.
108
+
109
+ EXAMPLES::
110
+
111
+ sage: ZZx.<x> = ZZ[]
112
+ sage: C = CyclicCover(5, x^5 + x + 1)
113
+ sage: C.change_ring(GF(5))
114
+ Traceback (most recent call last):
115
+ ...
116
+ ValueError: As the characteristic divides the order of the cover,
117
+ this model is not smooth.
118
+ sage: C.change_ring(GF(3))
119
+ Traceback (most recent call last):
120
+ ...
121
+ ValueError: Not a smooth Cyclic Cover of P^1: singularity in the
122
+ provided affine patch.
123
+ sage: C.change_ring(GF(17))
124
+ Cyclic Cover of P^1 over Finite Field of size 17 defined by y^5 = x^5 + x + 1
125
+ """
126
+ from .constructor import CyclicCover
127
+
128
+ return CyclicCover(self._r, self._f.change_ring(R), self._names)
129
+
130
+ base_extend = change_ring
131
+
132
+ def _repr_(self):
133
+ """
134
+ String representation of cyclic covers.
135
+
136
+ EXAMPLES::
137
+
138
+ sage: R.<x> = QQ[]
139
+ sage: CyclicCover(2, x^5 + x + 1)
140
+ Cyclic Cover of P^1 over Rational Field defined by y^2 = x^5 + x + 1
141
+ sage: CyclicCover(3, x^5 + x + 1)
142
+ Cyclic Cover of P^1 over Rational Field defined by y^3 = x^5 + x + 1
143
+ sage: CyclicCover(5, x^5 + x + 1)
144
+ Cyclic Cover of P^1 over Rational Field defined by y^5 = x^5 + x + 1
145
+ sage: CyclicCover(15, x^9 + x + 1)
146
+ Cyclic Cover of P^1 over Rational Field defined by y^15 = x^9 + x + 1
147
+ """
148
+ R = self.base_ring()
149
+ x, y = self.ambient_space().gens()
150
+ r = self._r
151
+ f = self._f
152
+ return "Cyclic Cover of P^1 over %s defined by %s = %s" % (R, y**r, f(x))
153
+
154
+ def __eq__(self, other):
155
+ """
156
+ Test of equality.
157
+
158
+ EXAMPLES::
159
+
160
+ sage: ZZx.<x> = ZZ[]
161
+ sage: C0 = CyclicCover(5, x^5 + x + 1)
162
+ sage: C1 = C0.change_ring(QQ)
163
+ sage: C1 == C0
164
+ False
165
+ sage: C2 = CyclicCover(3, x^5 + x + 1)
166
+ sage: C2 == C0
167
+ False
168
+ sage: C3 = CyclicCover(5, x^6 + x + 1)
169
+ sage: C3 == C0
170
+ False
171
+ sage: C0 == CyclicCover(5, x^5 + x + 1)
172
+ True
173
+ """
174
+ if not isinstance(other, CyclicCover_generic):
175
+ return False
176
+
177
+ return (
178
+ (self.base_ring() == other.base_ring())
179
+ and (self._r == other._r)
180
+ and (self._f == other._f)
181
+ )
182
+
183
+ def __ne__(self, other):
184
+ """
185
+ Test of not equality.
186
+
187
+ EXAMPLES::
188
+
189
+ sage: ZZx.<x> = ZZ[]
190
+ sage: C0 = CyclicCover(5, x^5 + x + 1)
191
+ sage: C1 = C0.change_ring(QQ)
192
+ sage: C1 != C0
193
+ True
194
+ sage: C2 = CyclicCover(3, x^5 + x + 1)
195
+ sage: C2 != C0
196
+ True
197
+ sage: C3 = CyclicCover(5, x^6 + x + 1)
198
+ sage: C3 != C0
199
+ True
200
+ sage: C0 != CyclicCover(5, x^5 + x + 1)
201
+ False
202
+ """
203
+ return not self == other
204
+
205
+ def order(self):
206
+ """
207
+ The order of the cover.
208
+
209
+ EXAMPLES::
210
+
211
+ sage: ZZx.<x> = ZZ[]
212
+ sage: CyclicCover(5, x^5 + x + 1).order()
213
+ 5
214
+ sage: CyclicCover(3, x^5 + x + 1).order()
215
+ 3
216
+ """
217
+ return self._r
218
+
219
+ def genus(self):
220
+ """
221
+ The geometric genus of the curve.
222
+
223
+ EXAMPLES::
224
+
225
+ sage: ZZx.<x> = ZZ[]
226
+ sage: CyclicCover(5, x^5 + x + 1).genus()
227
+ 6
228
+ sage: CyclicCover(3, x^5 + x + 1).genus()
229
+ 4
230
+ """
231
+ return self._genus
232
+
233
+ def projective_closure(self, **kwds):
234
+ """
235
+ Return the projective closure of this affine curve.
236
+
237
+ EXAMPLES::
238
+
239
+ sage: GF7x.<x> = GF(7)[]
240
+ sage: CyclicCover(3, x^9 + x + 1).projective_closure()
241
+ Traceback (most recent call last):
242
+ ...
243
+ NotImplementedError: Weighted Projective Space is not implemented
244
+
245
+ sage: ZZx.<x> = ZZ[]
246
+ sage: CyclicCover(5, x^5 + x + 1).projective_closure()
247
+ Projective Plane Curve over Integer Ring defined by x0^5 + x0^4*x1 + x1^5 - x2^5
248
+ """
249
+ # test d = 3 and 4
250
+ if self._d == self._r:
251
+ return AffinePlaneCurve.projective_closure(self, **kwds)
252
+ else:
253
+ raise NotImplementedError("Weighted Projective Space is not implemented")
254
+
255
+ def cover_polynomial(self, K=None, var='x'):
256
+ """
257
+ Return the polynomial defining the cyclic cover.
258
+
259
+ EXAMPLES::
260
+
261
+ sage: ZZx.<x> = ZZ[]; CyclicCover(5, x^5 + x + 1).cover_polynomial()
262
+ x^5 + x + 1
263
+ """
264
+
265
+ if K is None:
266
+ return self._f
267
+ else:
268
+ P = PolynomialRing(K, var)
269
+ return P(self._f)
270
+
271
+ def is_singular(self):
272
+ r"""
273
+ Return if this curve is singular or not.
274
+
275
+ This just checks that the characteristic of the ring does not divide the
276
+ order of the cover and that the defining polynomial of the cover is
277
+ square free.
278
+
279
+ EXAMPLES::
280
+
281
+ sage: R.<x> = QQ[]
282
+ sage: CyclicCover(3, x^5 + x + 1).is_singular()
283
+ False
284
+ sage: CyclicCover(3, (x^5 + x + 1)^2, check_smooth=False).is_singular()
285
+ True
286
+ """
287
+ P = self._f.parent()
288
+ r = self._r
289
+ if P(r) == 0:
290
+ return True
291
+ else:
292
+ return not self._f.is_squarefree()
293
+
294
+ def is_smooth(self):
295
+ r"""
296
+ Return if this curve is smooth or not.
297
+
298
+ This just checks that the characteristic of the ring does not divide the
299
+ order of the cover and that the defining polynomial of the cover is
300
+ square free.
301
+
302
+ EXAMPLES::
303
+
304
+ sage: R.<x> = QQ[]
305
+ sage: CyclicCover(3, x^5 + x + 1).is_smooth()
306
+ True
307
+ sage: CyclicCover(3, (x^5 + x + 1)^2, check_smooth=False).is_smooth()
308
+ False
309
+ """
310
+ return not self.is_singular()