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,271 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ r"""
3
+ Homsets and endomorphism rings of elliptic curves
4
+
5
+ The set of homomorphisms between two elliptic curves (:class:`EllipticCurveHom`)
6
+ forms an abelian group under addition. Moreover, if the two curves are the same,
7
+ it even forms a (not always commutative) ring under composition.
8
+
9
+ This module encapsulates the set of homomorphisms between two given elliptic
10
+ curves as a Sage object.
11
+
12
+ .. NOTE::
13
+
14
+ Currently only little nontrivial functionality is available, but this will
15
+ hopefully change in the future.
16
+
17
+ EXAMPLES:
18
+
19
+ The only useful thing this class does at the moment is coercing integers into
20
+ the endomorphism ring as scalar multiplications::
21
+
22
+ sage: E = EllipticCurve([1,2,3,4,5])
23
+ sage: f = End(E)(7); f
24
+ Scalar-multiplication endomorphism [7] of Elliptic Curve defined by y^2 + x*y + 3*y = x^3 + 2*x^2 + 4*x + 5 over Rational Field
25
+ sage: f == E.scalar_multiplication(7)
26
+ True
27
+
28
+ ::
29
+
30
+ sage: E = EllipticCurve(GF(431^2), [0,1])
31
+ sage: E.automorphisms()[0] == 1
32
+ True
33
+ sage: E.automorphisms()[1] == -1
34
+ True
35
+ sage: omega = E.automorphisms()[2]
36
+ sage: omega == 1
37
+ False
38
+ sage: omega^3 == 1
39
+ True
40
+ sage: (1 + omega + omega^2) == 0
41
+ True
42
+ sage: (2*omega + 1)^2 == -3 # needs sage.symbolic
43
+ True
44
+
45
+ AUTHORS:
46
+
47
+ - Lorenz Panny (2023)
48
+ """
49
+
50
+ # ****************************************************************************
51
+ # Copyright (C) 2023 Lorenz Panny
52
+ #
53
+ # This program is free software: you can redistribute it and/or modify
54
+ # it under the terms of the GNU General Public License as published by
55
+ # the Free Software Foundation, either version 2 of the License, or
56
+ # (at your option) any later version.
57
+ # https://www.gnu.org/licenses/
58
+ # ****************************************************************************
59
+
60
+ from sage.rings.integer_ring import ZZ
61
+ from sage.categories.morphism import Morphism
62
+ from sage.schemes.generic.homset import SchemeHomset_generic
63
+ from sage.schemes.elliptic_curves.ell_generic import EllipticCurve_generic
64
+
65
+
66
+ class EllipticCurveHomset(SchemeHomset_generic):
67
+ r"""
68
+ This class represents the set of all homomorphisms between two fixed
69
+ elliptic curves.
70
+
71
+ EXAMPLES::
72
+
73
+ sage: E = EllipticCurve(GF(419^2), [1,0])
74
+ sage: E.frobenius_isogeny() in End(E)
75
+ True
76
+ sage: phi = E.isogenies_prime_degree(7)[0]
77
+ sage: phi in End(E)
78
+ False
79
+ sage: phi in Hom(E, phi.codomain())
80
+ True
81
+
82
+ Note that domain and codomain are *not* taken up to isomorphism::
83
+
84
+ sage: iso = E.isomorphism_to(EllipticCurve(GF(419^2), [2,0]))
85
+ sage: iso in End(E)
86
+ False
87
+ """
88
+ def __init__(self, E1, E2, category=None):
89
+ r"""
90
+ Construct the homset for a given pair of elliptic curves
91
+ defined over the same base ring.
92
+
93
+ TESTS::
94
+
95
+ sage: E = EllipticCurve(GF(101), [1,1])
96
+ sage: H = End(E)
97
+ sage: TestSuite(H).run(skip='_test_elements') # needs sage.symbolic
98
+
99
+ ::
100
+
101
+ sage: E1 = EllipticCurve(GF(101), [1,1])
102
+ sage: E2 = EllipticCurve(GF(101), [4,9])
103
+ sage: H = Hom(E1, E2)
104
+ sage: TestSuite(H).run(skip='_test_elements')
105
+
106
+ ::
107
+
108
+ sage: E1 = EllipticCurve(j=42)
109
+ sage: E2 = EllipticCurve(j=43)
110
+ sage: Hom(E1, E2)
111
+ Additive group of elliptic-curve morphisms
112
+ From: Elliptic Curve defined by y^2 = x^3 + 5901*x + 1105454 over Rational Field
113
+ To: Elliptic Curve defined by y^2 + x*y = x^3 + x^2 + 1510*x - 140675 over Rational Field
114
+ sage: Hom(E1, E2) in CommutativeAdditiveGroups()
115
+ True
116
+ sage: Hom(E1, E2) in Rings()
117
+ False
118
+ sage: End(E1) in CommutativeRings() # not implemented; see note in code below
119
+ True
120
+
121
+ ::
122
+
123
+ sage: E0 = EllipticCurve(GF(419), [1,0])
124
+ sage: EE0 = E0.change_ring(GF(419^2))
125
+ sage: End(E0) in CommutativeRings() # not implemented; see note in code below
126
+ True
127
+ sage: End(EE0) in CommutativeRings()
128
+ False
129
+ sage: End(EE0) in Rings()
130
+ True
131
+ sage: E1 = EllipticCurve(GF(419), [1,1])
132
+ sage: EE1 = E1.change_ring(GF(419^2))
133
+ sage: Hom(E0, E1) in CommutativeAdditiveGroups()
134
+ True
135
+ sage: Hom(EE0, EE1) in CommutativeAdditiveGroups()
136
+ True
137
+ sage: Hom(E0, E1) in Rings()
138
+ False
139
+ sage: Hom(EE0, EE1) in Rings()
140
+ False
141
+ """
142
+ if not isinstance(E1, EllipticCurve_generic):
143
+ raise ValueError('domain must be an elliptic curve')
144
+ if not isinstance(E2, EllipticCurve_generic):
145
+ raise ValueError('codomain must be an elliptic curve')
146
+ base = E1.base_ring()
147
+ if base != E2.base_ring():
148
+ raise ValueError('domain and codomain must have the same base ring')
149
+
150
+ super().__init__(E1, E2, category=category, base=base)
151
+
152
+ #TODO: We should also add CommutativeRings to the category
153
+ # of self whenever this holds true; see the method
154
+ # EllipticCurve_field.endomorphism_ring_is_commutative().
155
+ # Is there a way to perform this check lazily?
156
+
157
+ def _coerce_map_from_(self, other):
158
+ r"""
159
+ Check if this homset has a coercion map from another
160
+ parent ``other``.
161
+
162
+ The only currently supported case is when this homset has
163
+ equal domain and codomain: In this case elements from `\ZZ`
164
+ are embedded as scalar multiplications.
165
+
166
+ EXAMPLES::
167
+
168
+ sage: E1 = EllipticCurve(j=42)
169
+ sage: E2 = EllipticCurve(j=43)
170
+ sage: Hom(E1, E1)._coerce_map_from_(ZZ)
171
+ True
172
+ sage: Hom(E1, E2)._coerce_map_from_(ZZ)
173
+ False
174
+ """
175
+ return self.is_endomorphism_set() and other is ZZ
176
+
177
+ def _element_constructor_(self, data):
178
+ r"""
179
+ Construct an element of this homset from the given ``data``.
180
+
181
+ The only currently supported case is when this homset has
182
+ equal domain and codomain: In this case elements from `\ZZ`
183
+ are embedded as scalar multiplications.
184
+
185
+ EXAMPLES::
186
+
187
+ sage: E1 = EllipticCurve(j=42)
188
+ sage: E2 = EllipticCurve(j=43)
189
+ sage: Hom(E1, E1)(5)
190
+ Scalar-multiplication endomorphism [5] of Elliptic Curve defined by y^2 = x^3 + 5901*x + 1105454 over Rational Field
191
+ sage: Hom(E1, E2)(5)
192
+ Traceback (most recent call last):
193
+ ...
194
+ ValueError: domain and codomain must be equal
195
+ """
196
+ m = ZZ(data)
197
+ if not self.is_endomorphism_set():
198
+ if m:
199
+ raise ValueError('domain and codomain must be equal')
200
+ from sage.schemes.elliptic_curves.hom_sum import EllipticCurveHom_sum
201
+ return EllipticCurveHom_sum([], domain=self.domain(), codomain=self.codomain())
202
+ from sage.schemes.elliptic_curves.hom_scalar import EllipticCurveHom_scalar
203
+ return EllipticCurveHom_scalar(self.domain(), m)
204
+
205
+ def _repr_(self):
206
+ r"""
207
+ Output a description of this homset, with special formatting
208
+ for endomorphism rings.
209
+
210
+ EXAMPLES::
211
+
212
+ sage: E1 = EllipticCurve([1,1])
213
+ sage: E2 = EllipticCurve([2,2])
214
+ sage: End(E1)
215
+ Ring of elliptic-curve endomorphisms
216
+ From: Elliptic Curve defined by y^2 = x^3 + x + 1 over Rational Field
217
+ To: Elliptic Curve defined by y^2 = x^3 + x + 1 over Rational Field
218
+ sage: Hom(E1, E1)
219
+ Ring of elliptic-curve endomorphisms
220
+ From: Elliptic Curve defined by y^2 = x^3 + x + 1 over Rational Field
221
+ To: Elliptic Curve defined by y^2 = x^3 + x + 1 over Rational Field
222
+ sage: Hom(E1, E2)
223
+ Additive group of elliptic-curve morphisms
224
+ From: Elliptic Curve defined by y^2 = x^3 + x + 1 over Rational Field
225
+ To: Elliptic Curve defined by y^2 = x^3 + 2*x + 2 over Rational Field
226
+ """
227
+ if self.is_endomorphism_set():
228
+ s = 'Ring of elliptic-curve endomorphisms'
229
+ else:
230
+ s = 'Additive group of elliptic-curve morphisms'
231
+ s += f'\n From: {self.domain()}'
232
+ s += f'\n To: {self.codomain()}'
233
+ return s
234
+
235
+ def identity(self):
236
+ r"""
237
+ Return the identity morphism in this elliptic-curve homset
238
+ as an :class:`EllipticCurveHom` object.
239
+
240
+ EXAMPLES::
241
+
242
+ sage: E = EllipticCurve(j=42)
243
+ sage: End(E).identity()
244
+ Elliptic-curve endomorphism of Elliptic Curve defined by y^2 = x^3 + 5901*x + 1105454 over Rational Field
245
+ Via: (u,r,s,t) = (1, 0, 0, 0)
246
+ sage: End(E).identity() == E.scalar_multiplication(1)
247
+ True
248
+ """
249
+ if not self.is_endomorphism_set():
250
+ raise ValueError('domain and codomain must be equal')
251
+ return self.domain().identity_morphism()
252
+
253
+ def is_commutative(self):
254
+ r"""
255
+ Assuming this homset is an endomorphism ring, check whether
256
+ it is a commutative ring.
257
+
258
+ ALGORITHM: :meth:`EllipticCurve_field.endomorphism_ring_is_commutative`
259
+
260
+ EXAMPLES::
261
+
262
+ sage: End(EllipticCurve(j=123)).is_commutative()
263
+ True
264
+ sage: End(EllipticCurve(GF(11), [1,0])).is_commutative()
265
+ True
266
+ sage: End(EllipticCurve(GF(11^2), [1,0])).is_commutative()
267
+ False
268
+ """
269
+ if not self.is_endomorphism_set():
270
+ raise ValueError('commutativity does not make sense for homsets between different objects')
271
+ return self.domain().endomorphism_ring_is_commutative()