passagemath-categories 10.6.32__cp314-cp314t-musllinux_1_2_aarch64.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 (719) hide show
  1. passagemath_categories-10.6.32.dist-info/METADATA +156 -0
  2. passagemath_categories-10.6.32.dist-info/RECORD +719 -0
  3. passagemath_categories-10.6.32.dist-info/WHEEL +5 -0
  4. passagemath_categories-10.6.32.dist-info/top_level.txt +2 -0
  5. passagemath_categories.libs/libgcc_s-2d945d6c.so.1 +0 -0
  6. passagemath_categories.libs/libgmp-28992bcb.so.10.5.0 +0 -0
  7. passagemath_categories.libs/libstdc++-85f2cd6d.so.6.0.33 +0 -0
  8. sage/all__sagemath_categories.py +28 -0
  9. sage/arith/all.py +38 -0
  10. sage/arith/constants.pxd +27 -0
  11. sage/arith/functions.cpython-314t-aarch64-linux-musl.so +0 -0
  12. sage/arith/functions.pxd +4 -0
  13. sage/arith/functions.pyx +221 -0
  14. sage/arith/misc.py +6552 -0
  15. sage/arith/multi_modular.cpython-314t-aarch64-linux-musl.so +0 -0
  16. sage/arith/multi_modular.pxd +39 -0
  17. sage/arith/multi_modular.pyx +994 -0
  18. sage/arith/rational_reconstruction.cpython-314t-aarch64-linux-musl.so +0 -0
  19. sage/arith/rational_reconstruction.pxd +4 -0
  20. sage/arith/rational_reconstruction.pyx +115 -0
  21. sage/arith/srange.cpython-314t-aarch64-linux-musl.so +0 -0
  22. sage/arith/srange.pyx +571 -0
  23. sage/calculus/all__sagemath_categories.py +2 -0
  24. sage/calculus/functional.py +481 -0
  25. sage/calculus/functions.py +151 -0
  26. sage/categories/additive_groups.py +73 -0
  27. sage/categories/additive_magmas.py +1044 -0
  28. sage/categories/additive_monoids.py +114 -0
  29. sage/categories/additive_semigroups.py +184 -0
  30. sage/categories/affine_weyl_groups.py +238 -0
  31. sage/categories/algebra_ideals.py +95 -0
  32. sage/categories/algebra_modules.py +96 -0
  33. sage/categories/algebras.py +349 -0
  34. sage/categories/algebras_with_basis.py +377 -0
  35. sage/categories/all.py +160 -0
  36. sage/categories/aperiodic_semigroups.py +29 -0
  37. sage/categories/associative_algebras.py +47 -0
  38. sage/categories/bialgebras.py +101 -0
  39. sage/categories/bialgebras_with_basis.py +414 -0
  40. sage/categories/bimodules.py +206 -0
  41. sage/categories/chain_complexes.py +268 -0
  42. sage/categories/classical_crystals.py +480 -0
  43. sage/categories/coalgebras.py +405 -0
  44. sage/categories/coalgebras_with_basis.py +232 -0
  45. sage/categories/coercion_methods.cpython-314t-aarch64-linux-musl.so +0 -0
  46. sage/categories/coercion_methods.pyx +52 -0
  47. sage/categories/commutative_additive_groups.py +104 -0
  48. sage/categories/commutative_additive_monoids.py +45 -0
  49. sage/categories/commutative_additive_semigroups.py +48 -0
  50. sage/categories/commutative_algebra_ideals.py +87 -0
  51. sage/categories/commutative_algebras.py +94 -0
  52. sage/categories/commutative_ring_ideals.py +58 -0
  53. sage/categories/commutative_rings.py +736 -0
  54. sage/categories/complete_discrete_valuation.py +293 -0
  55. sage/categories/complex_reflection_groups.py +145 -0
  56. sage/categories/complex_reflection_or_generalized_coxeter_groups.py +1249 -0
  57. sage/categories/coxeter_group_algebras.py +186 -0
  58. sage/categories/coxeter_groups.py +3402 -0
  59. sage/categories/crystals.py +2628 -0
  60. sage/categories/cw_complexes.py +216 -0
  61. sage/categories/dedekind_domains.py +137 -0
  62. sage/categories/discrete_valuation.py +325 -0
  63. sage/categories/distributive_magmas_and_additive_magmas.py +100 -0
  64. sage/categories/division_rings.py +114 -0
  65. sage/categories/domains.py +95 -0
  66. sage/categories/drinfeld_modules.py +789 -0
  67. sage/categories/dual.py +42 -0
  68. sage/categories/enumerated_sets.py +1146 -0
  69. sage/categories/euclidean_domains.py +271 -0
  70. sage/categories/examples/algebras_with_basis.py +102 -0
  71. sage/categories/examples/all.py +1 -0
  72. sage/categories/examples/commutative_additive_monoids.py +130 -0
  73. sage/categories/examples/commutative_additive_semigroups.py +199 -0
  74. sage/categories/examples/coxeter_groups.py +8 -0
  75. sage/categories/examples/crystals.py +236 -0
  76. sage/categories/examples/cw_complexes.py +163 -0
  77. sage/categories/examples/facade_sets.py +187 -0
  78. sage/categories/examples/filtered_algebras_with_basis.py +204 -0
  79. sage/categories/examples/filtered_modules_with_basis.py +154 -0
  80. sage/categories/examples/finite_coxeter_groups.py +252 -0
  81. sage/categories/examples/finite_dimensional_algebras_with_basis.py +148 -0
  82. sage/categories/examples/finite_dimensional_lie_algebras_with_basis.py +495 -0
  83. sage/categories/examples/finite_enumerated_sets.py +208 -0
  84. sage/categories/examples/finite_monoids.py +150 -0
  85. sage/categories/examples/finite_semigroups.py +190 -0
  86. sage/categories/examples/finite_weyl_groups.py +191 -0
  87. sage/categories/examples/graded_connected_hopf_algebras_with_basis.py +152 -0
  88. sage/categories/examples/graded_modules_with_basis.py +168 -0
  89. sage/categories/examples/graphs.py +122 -0
  90. sage/categories/examples/hopf_algebras_with_basis.py +145 -0
  91. sage/categories/examples/infinite_enumerated_sets.py +190 -0
  92. sage/categories/examples/lie_algebras.py +352 -0
  93. sage/categories/examples/lie_algebras_with_basis.py +196 -0
  94. sage/categories/examples/magmas.py +162 -0
  95. sage/categories/examples/manifolds.py +94 -0
  96. sage/categories/examples/monoids.py +144 -0
  97. sage/categories/examples/posets.py +178 -0
  98. sage/categories/examples/semigroups.py +580 -0
  99. sage/categories/examples/semigroups_cython.cpython-314t-aarch64-linux-musl.so +0 -0
  100. sage/categories/examples/semigroups_cython.pyx +221 -0
  101. sage/categories/examples/semirings.py +249 -0
  102. sage/categories/examples/sets_cat.py +706 -0
  103. sage/categories/examples/sets_with_grading.py +101 -0
  104. sage/categories/examples/with_realizations.py +542 -0
  105. sage/categories/fields.py +991 -0
  106. sage/categories/filtered_algebras.py +63 -0
  107. sage/categories/filtered_algebras_with_basis.py +548 -0
  108. sage/categories/filtered_hopf_algebras_with_basis.py +138 -0
  109. sage/categories/filtered_modules.py +210 -0
  110. sage/categories/filtered_modules_with_basis.py +1209 -0
  111. sage/categories/finite_complex_reflection_groups.py +1506 -0
  112. sage/categories/finite_coxeter_groups.py +1138 -0
  113. sage/categories/finite_crystals.py +103 -0
  114. sage/categories/finite_dimensional_algebras_with_basis.py +1860 -0
  115. sage/categories/finite_dimensional_bialgebras_with_basis.py +33 -0
  116. sage/categories/finite_dimensional_coalgebras_with_basis.py +33 -0
  117. sage/categories/finite_dimensional_graded_lie_algebras_with_basis.py +231 -0
  118. sage/categories/finite_dimensional_hopf_algebras_with_basis.py +38 -0
  119. sage/categories/finite_dimensional_lie_algebras_with_basis.py +2774 -0
  120. sage/categories/finite_dimensional_modules_with_basis.py +1407 -0
  121. sage/categories/finite_dimensional_nilpotent_lie_algebras_with_basis.py +167 -0
  122. sage/categories/finite_dimensional_semisimple_algebras_with_basis.py +270 -0
  123. sage/categories/finite_enumerated_sets.py +769 -0
  124. sage/categories/finite_fields.py +252 -0
  125. sage/categories/finite_groups.py +256 -0
  126. sage/categories/finite_lattice_posets.py +242 -0
  127. sage/categories/finite_monoids.py +316 -0
  128. sage/categories/finite_permutation_groups.py +339 -0
  129. sage/categories/finite_posets.py +1994 -0
  130. sage/categories/finite_semigroups.py +136 -0
  131. sage/categories/finite_sets.py +93 -0
  132. sage/categories/finite_weyl_groups.py +39 -0
  133. sage/categories/finitely_generated_lambda_bracket_algebras.py +112 -0
  134. sage/categories/finitely_generated_lie_conformal_algebras.py +114 -0
  135. sage/categories/finitely_generated_magmas.py +57 -0
  136. sage/categories/finitely_generated_semigroups.py +214 -0
  137. sage/categories/function_fields.py +76 -0
  138. sage/categories/g_sets.py +77 -0
  139. sage/categories/gcd_domains.py +65 -0
  140. sage/categories/generalized_coxeter_groups.py +94 -0
  141. sage/categories/graded_algebras.py +85 -0
  142. sage/categories/graded_algebras_with_basis.py +258 -0
  143. sage/categories/graded_bialgebras.py +32 -0
  144. sage/categories/graded_bialgebras_with_basis.py +32 -0
  145. sage/categories/graded_coalgebras.py +65 -0
  146. sage/categories/graded_coalgebras_with_basis.py +51 -0
  147. sage/categories/graded_hopf_algebras.py +41 -0
  148. sage/categories/graded_hopf_algebras_with_basis.py +169 -0
  149. sage/categories/graded_lie_algebras.py +91 -0
  150. sage/categories/graded_lie_algebras_with_basis.py +44 -0
  151. sage/categories/graded_lie_conformal_algebras.py +74 -0
  152. sage/categories/graded_modules.py +133 -0
  153. sage/categories/graded_modules_with_basis.py +329 -0
  154. sage/categories/graphs.py +138 -0
  155. sage/categories/group_algebras.py +430 -0
  156. sage/categories/groupoid.py +94 -0
  157. sage/categories/groups.py +667 -0
  158. sage/categories/h_trivial_semigroups.py +64 -0
  159. sage/categories/hecke_modules.py +185 -0
  160. sage/categories/highest_weight_crystals.py +980 -0
  161. sage/categories/hopf_algebras.py +219 -0
  162. sage/categories/hopf_algebras_with_basis.py +309 -0
  163. sage/categories/infinite_enumerated_sets.py +115 -0
  164. sage/categories/integral_domains.py +203 -0
  165. sage/categories/j_trivial_semigroups.py +29 -0
  166. sage/categories/kac_moody_algebras.py +82 -0
  167. sage/categories/kahler_algebras.py +203 -0
  168. sage/categories/l_trivial_semigroups.py +63 -0
  169. sage/categories/lambda_bracket_algebras.py +280 -0
  170. sage/categories/lambda_bracket_algebras_with_basis.py +107 -0
  171. sage/categories/lattice_posets.py +89 -0
  172. sage/categories/left_modules.py +49 -0
  173. sage/categories/lie_algebras.py +1070 -0
  174. sage/categories/lie_algebras_with_basis.py +261 -0
  175. sage/categories/lie_conformal_algebras.py +350 -0
  176. sage/categories/lie_conformal_algebras_with_basis.py +147 -0
  177. sage/categories/lie_groups.py +73 -0
  178. sage/categories/loop_crystals.py +1290 -0
  179. sage/categories/magmas.py +1189 -0
  180. sage/categories/magmas_and_additive_magmas.py +149 -0
  181. sage/categories/magmatic_algebras.py +365 -0
  182. sage/categories/manifolds.py +352 -0
  183. sage/categories/matrix_algebras.py +40 -0
  184. sage/categories/metric_spaces.py +387 -0
  185. sage/categories/modular_abelian_varieties.py +78 -0
  186. sage/categories/modules.py +989 -0
  187. sage/categories/modules_with_basis.py +2794 -0
  188. sage/categories/monoid_algebras.py +38 -0
  189. sage/categories/monoids.py +739 -0
  190. sage/categories/noetherian_rings.py +87 -0
  191. sage/categories/number_fields.py +242 -0
  192. sage/categories/ore_modules.py +189 -0
  193. sage/categories/partially_ordered_monoids.py +49 -0
  194. sage/categories/permutation_groups.py +63 -0
  195. sage/categories/pointed_sets.py +42 -0
  196. sage/categories/polyhedra.py +74 -0
  197. sage/categories/poor_man_map.py +270 -0
  198. sage/categories/posets.py +722 -0
  199. sage/categories/principal_ideal_domains.py +270 -0
  200. sage/categories/quantum_group_representations.py +543 -0
  201. sage/categories/quotient_fields.py +728 -0
  202. sage/categories/r_trivial_semigroups.py +45 -0
  203. sage/categories/regular_crystals.py +898 -0
  204. sage/categories/regular_supercrystals.py +170 -0
  205. sage/categories/right_modules.py +49 -0
  206. sage/categories/ring_ideals.py +74 -0
  207. sage/categories/rings.py +1904 -0
  208. sage/categories/rngs.py +175 -0
  209. sage/categories/schemes.py +393 -0
  210. sage/categories/semigroups.py +1060 -0
  211. sage/categories/semirings.py +71 -0
  212. sage/categories/semisimple_algebras.py +114 -0
  213. sage/categories/sets_with_grading.py +235 -0
  214. sage/categories/shephard_groups.py +43 -0
  215. sage/categories/signed_tensor.py +120 -0
  216. sage/categories/simplicial_complexes.py +134 -0
  217. sage/categories/simplicial_sets.py +1206 -0
  218. sage/categories/super_algebras.py +149 -0
  219. sage/categories/super_algebras_with_basis.py +144 -0
  220. sage/categories/super_hopf_algebras_with_basis.py +126 -0
  221. sage/categories/super_lie_conformal_algebras.py +193 -0
  222. sage/categories/super_modules.py +229 -0
  223. sage/categories/super_modules_with_basis.py +193 -0
  224. sage/categories/supercommutative_algebras.py +99 -0
  225. sage/categories/supercrystals.py +406 -0
  226. sage/categories/tensor.py +110 -0
  227. sage/categories/topological_spaces.py +170 -0
  228. sage/categories/triangular_kac_moody_algebras.py +439 -0
  229. sage/categories/tutorial.py +58 -0
  230. sage/categories/unique_factorization_domains.py +318 -0
  231. sage/categories/unital_algebras.py +426 -0
  232. sage/categories/vector_bundles.py +159 -0
  233. sage/categories/vector_spaces.py +357 -0
  234. sage/categories/weyl_groups.py +853 -0
  235. sage/combinat/all__sagemath_categories.py +34 -0
  236. sage/combinat/backtrack.py +180 -0
  237. sage/combinat/combinat.py +2269 -0
  238. sage/combinat/combinat_cython.cpython-314t-aarch64-linux-musl.so +0 -0
  239. sage/combinat/combinat_cython.pxd +6 -0
  240. sage/combinat/combinat_cython.pyx +390 -0
  241. sage/combinat/combination.py +796 -0
  242. sage/combinat/combinatorial_map.py +416 -0
  243. sage/combinat/composition.py +2192 -0
  244. sage/combinat/dlx.py +510 -0
  245. sage/combinat/integer_lists/__init__.py +7 -0
  246. sage/combinat/integer_lists/base.cpython-314t-aarch64-linux-musl.so +0 -0
  247. sage/combinat/integer_lists/base.pxd +16 -0
  248. sage/combinat/integer_lists/base.pyx +713 -0
  249. sage/combinat/integer_lists/invlex.cpython-314t-aarch64-linux-musl.so +0 -0
  250. sage/combinat/integer_lists/invlex.pxd +4 -0
  251. sage/combinat/integer_lists/invlex.pyx +1650 -0
  252. sage/combinat/integer_lists/lists.py +328 -0
  253. sage/combinat/integer_lists/nn.py +48 -0
  254. sage/combinat/integer_vector.py +1818 -0
  255. sage/combinat/integer_vector_weighted.py +413 -0
  256. sage/combinat/matrices/all__sagemath_categories.py +5 -0
  257. sage/combinat/matrices/dancing_links.cpython-314t-aarch64-linux-musl.so +0 -0
  258. sage/combinat/matrices/dancing_links.pyx +1159 -0
  259. sage/combinat/matrices/dancing_links_c.h +380 -0
  260. sage/combinat/matrices/dlxcpp.py +136 -0
  261. sage/combinat/partition.py +10070 -0
  262. sage/combinat/partitions.cpython-314t-aarch64-linux-musl.so +0 -0
  263. sage/combinat/partitions.pyx +743 -0
  264. sage/combinat/permutation.py +10168 -0
  265. sage/combinat/permutation_cython.cpython-314t-aarch64-linux-musl.so +0 -0
  266. sage/combinat/permutation_cython.pxd +11 -0
  267. sage/combinat/permutation_cython.pyx +407 -0
  268. sage/combinat/q_analogues.py +1090 -0
  269. sage/combinat/ranker.py +268 -0
  270. sage/combinat/subset.py +1561 -0
  271. sage/combinat/subsets_hereditary.py +202 -0
  272. sage/combinat/subsets_pairwise.py +184 -0
  273. sage/combinat/tools.py +63 -0
  274. sage/combinat/tuple.py +348 -0
  275. sage/data_structures/all.py +2 -0
  276. sage/data_structures/all__sagemath_categories.py +2 -0
  277. sage/data_structures/binary_matrix.pxd +138 -0
  278. sage/data_structures/binary_search.cpython-314t-aarch64-linux-musl.so +0 -0
  279. sage/data_structures/binary_search.pxd +3 -0
  280. sage/data_structures/binary_search.pyx +66 -0
  281. sage/data_structures/bitset.cpython-314t-aarch64-linux-musl.so +0 -0
  282. sage/data_structures/bitset.pxd +40 -0
  283. sage/data_structures/bitset.pyx +2385 -0
  284. sage/data_structures/bitset_base.cpython-314t-aarch64-linux-musl.so +0 -0
  285. sage/data_structures/bitset_base.pxd +926 -0
  286. sage/data_structures/bitset_base.pyx +117 -0
  287. sage/data_structures/bitset_intrinsics.h +487 -0
  288. sage/data_structures/blas_dict.cpython-314t-aarch64-linux-musl.so +0 -0
  289. sage/data_structures/blas_dict.pxd +12 -0
  290. sage/data_structures/blas_dict.pyx +469 -0
  291. sage/data_structures/list_of_pairs.cpython-314t-aarch64-linux-musl.so +0 -0
  292. sage/data_structures/list_of_pairs.pxd +16 -0
  293. sage/data_structures/list_of_pairs.pyx +122 -0
  294. sage/data_structures/mutable_poset.py +3312 -0
  295. sage/data_structures/pairing_heap.cpython-314t-aarch64-linux-musl.so +0 -0
  296. sage/data_structures/pairing_heap.h +346 -0
  297. sage/data_structures/pairing_heap.pxd +88 -0
  298. sage/data_structures/pairing_heap.pyx +1464 -0
  299. sage/data_structures/sparse_bitset.pxd +62 -0
  300. sage/data_structures/stream.py +5070 -0
  301. sage/databases/all__sagemath_categories.py +7 -0
  302. sage/databases/sql_db.py +2236 -0
  303. sage/ext/all__sagemath_categories.py +3 -0
  304. sage/ext/fast_callable.cpython-314t-aarch64-linux-musl.so +0 -0
  305. sage/ext/fast_callable.pxd +4 -0
  306. sage/ext/fast_callable.pyx +2746 -0
  307. sage/ext/fast_eval.cpython-314t-aarch64-linux-musl.so +0 -0
  308. sage/ext/fast_eval.pxd +1 -0
  309. sage/ext/fast_eval.pyx +102 -0
  310. sage/ext/interpreters/__init__.py +1 -0
  311. sage/ext/interpreters/all__sagemath_categories.py +2 -0
  312. sage/ext/interpreters/wrapper_el.cpython-314t-aarch64-linux-musl.so +0 -0
  313. sage/ext/interpreters/wrapper_el.pxd +18 -0
  314. sage/ext/interpreters/wrapper_el.pyx +148 -0
  315. sage/ext/interpreters/wrapper_py.cpython-314t-aarch64-linux-musl.so +0 -0
  316. sage/ext/interpreters/wrapper_py.pxd +17 -0
  317. sage/ext/interpreters/wrapper_py.pyx +133 -0
  318. sage/functions/airy.py +937 -0
  319. sage/functions/all.py +97 -0
  320. sage/functions/bessel.py +2102 -0
  321. sage/functions/error.py +784 -0
  322. sage/functions/exp_integral.py +1529 -0
  323. sage/functions/gamma.py +1087 -0
  324. sage/functions/generalized.py +672 -0
  325. sage/functions/hyperbolic.py +747 -0
  326. sage/functions/hypergeometric.py +1156 -0
  327. sage/functions/jacobi.py +1705 -0
  328. sage/functions/log.py +1402 -0
  329. sage/functions/min_max.py +338 -0
  330. sage/functions/orthogonal_polys.py +3106 -0
  331. sage/functions/other.py +2303 -0
  332. sage/functions/piecewise.py +1505 -0
  333. sage/functions/prime_pi.cpython-314t-aarch64-linux-musl.so +0 -0
  334. sage/functions/prime_pi.pyx +262 -0
  335. sage/functions/special.py +1212 -0
  336. sage/functions/spike_function.py +278 -0
  337. sage/functions/transcendental.py +690 -0
  338. sage/functions/trig.py +1062 -0
  339. sage/functions/wigner.py +726 -0
  340. sage/geometry/abc.cpython-314t-aarch64-linux-musl.so +0 -0
  341. sage/geometry/abc.pyx +82 -0
  342. sage/geometry/all__sagemath_categories.py +1 -0
  343. sage/groups/all__sagemath_categories.py +11 -0
  344. sage/groups/generic.py +1733 -0
  345. sage/groups/groups_catalog.py +113 -0
  346. sage/groups/perm_gps/all__sagemath_categories.py +1 -0
  347. sage/groups/perm_gps/partn_ref/all.py +1 -0
  348. sage/groups/perm_gps/partn_ref/all__sagemath_categories.py +1 -0
  349. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.cpython-314t-aarch64-linux-musl.so +0 -0
  350. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pxd +52 -0
  351. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pyx +906 -0
  352. sage/groups/perm_gps/partn_ref/canonical_augmentation.cpython-314t-aarch64-linux-musl.so +0 -0
  353. sage/groups/perm_gps/partn_ref/canonical_augmentation.pxd +85 -0
  354. sage/groups/perm_gps/partn_ref/canonical_augmentation.pyx +534 -0
  355. sage/groups/perm_gps/partn_ref/data_structures.cpython-314t-aarch64-linux-musl.so +0 -0
  356. sage/groups/perm_gps/partn_ref/data_structures.pxd +576 -0
  357. sage/groups/perm_gps/partn_ref/data_structures.pyx +1792 -0
  358. sage/groups/perm_gps/partn_ref/double_coset.cpython-314t-aarch64-linux-musl.so +0 -0
  359. sage/groups/perm_gps/partn_ref/double_coset.pxd +45 -0
  360. sage/groups/perm_gps/partn_ref/double_coset.pyx +739 -0
  361. sage/groups/perm_gps/partn_ref/refinement_lists.cpython-314t-aarch64-linux-musl.so +0 -0
  362. sage/groups/perm_gps/partn_ref/refinement_lists.pxd +18 -0
  363. sage/groups/perm_gps/partn_ref/refinement_lists.pyx +82 -0
  364. sage/groups/perm_gps/partn_ref/refinement_python.cpython-314t-aarch64-linux-musl.so +0 -0
  365. sage/groups/perm_gps/partn_ref/refinement_python.pxd +16 -0
  366. sage/groups/perm_gps/partn_ref/refinement_python.pyx +564 -0
  367. sage/groups/perm_gps/partn_ref/refinement_sets.cpython-314t-aarch64-linux-musl.so +0 -0
  368. sage/groups/perm_gps/partn_ref/refinement_sets.pxd +60 -0
  369. sage/groups/perm_gps/partn_ref/refinement_sets.pyx +858 -0
  370. sage/interfaces/abc.py +140 -0
  371. sage/interfaces/all.py +58 -0
  372. sage/interfaces/all__sagemath_categories.py +1 -0
  373. sage/interfaces/expect.py +1643 -0
  374. sage/interfaces/interface.py +1682 -0
  375. sage/interfaces/process.cpython-314t-aarch64-linux-musl.so +0 -0
  376. sage/interfaces/process.pxd +5 -0
  377. sage/interfaces/process.pyx +288 -0
  378. sage/interfaces/quit.py +167 -0
  379. sage/interfaces/sage0.py +604 -0
  380. sage/interfaces/sagespawn.cpython-314t-aarch64-linux-musl.so +0 -0
  381. sage/interfaces/sagespawn.pyx +308 -0
  382. sage/interfaces/tab_completion.py +101 -0
  383. sage/misc/all__sagemath_categories.py +78 -0
  384. sage/misc/allocator.cpython-314t-aarch64-linux-musl.so +0 -0
  385. sage/misc/allocator.pxd +6 -0
  386. sage/misc/allocator.pyx +47 -0
  387. sage/misc/binary_tree.cpython-314t-aarch64-linux-musl.so +0 -0
  388. sage/misc/binary_tree.pxd +29 -0
  389. sage/misc/binary_tree.pyx +537 -0
  390. sage/misc/callable_dict.cpython-314t-aarch64-linux-musl.so +0 -0
  391. sage/misc/callable_dict.pyx +89 -0
  392. sage/misc/citation.cpython-314t-aarch64-linux-musl.so +0 -0
  393. sage/misc/citation.pyx +159 -0
  394. sage/misc/converting_dict.py +293 -0
  395. sage/misc/defaults.py +129 -0
  396. sage/misc/derivative.cpython-314t-aarch64-linux-musl.so +0 -0
  397. sage/misc/derivative.pyx +223 -0
  398. sage/misc/functional.py +2005 -0
  399. sage/misc/html.py +589 -0
  400. sage/misc/latex.py +2673 -0
  401. sage/misc/latex_macros.py +236 -0
  402. sage/misc/latex_standalone.py +1833 -0
  403. sage/misc/map_threaded.py +38 -0
  404. sage/misc/mathml.py +76 -0
  405. sage/misc/method_decorator.py +88 -0
  406. sage/misc/mrange.py +755 -0
  407. sage/misc/multireplace.py +41 -0
  408. sage/misc/object_multiplexer.py +92 -0
  409. sage/misc/parser.cpython-314t-aarch64-linux-musl.so +0 -0
  410. sage/misc/parser.pyx +1107 -0
  411. sage/misc/random_testing.py +264 -0
  412. sage/misc/rest_index_of_methods.py +377 -0
  413. sage/misc/search.cpython-314t-aarch64-linux-musl.so +0 -0
  414. sage/misc/search.pxd +2 -0
  415. sage/misc/search.pyx +68 -0
  416. sage/misc/stopgap.cpython-314t-aarch64-linux-musl.so +0 -0
  417. sage/misc/stopgap.pyx +95 -0
  418. sage/misc/table.py +853 -0
  419. sage/monoids/all__sagemath_categories.py +1 -0
  420. sage/monoids/indexed_free_monoid.py +1071 -0
  421. sage/monoids/monoid.py +82 -0
  422. sage/numerical/all__sagemath_categories.py +1 -0
  423. sage/numerical/backends/all__sagemath_categories.py +1 -0
  424. sage/numerical/backends/generic_backend.cpython-314t-aarch64-linux-musl.so +0 -0
  425. sage/numerical/backends/generic_backend.pxd +61 -0
  426. sage/numerical/backends/generic_backend.pyx +1893 -0
  427. sage/numerical/backends/generic_sdp_backend.cpython-314t-aarch64-linux-musl.so +0 -0
  428. sage/numerical/backends/generic_sdp_backend.pxd +38 -0
  429. sage/numerical/backends/generic_sdp_backend.pyx +755 -0
  430. sage/parallel/all.py +6 -0
  431. sage/parallel/decorate.py +575 -0
  432. sage/parallel/map_reduce.py +1997 -0
  433. sage/parallel/multiprocessing_sage.py +76 -0
  434. sage/parallel/ncpus.py +35 -0
  435. sage/parallel/parallelism.py +364 -0
  436. sage/parallel/reference.py +47 -0
  437. sage/parallel/use_fork.py +333 -0
  438. sage/rings/abc.cpython-314t-aarch64-linux-musl.so +0 -0
  439. sage/rings/abc.pxd +31 -0
  440. sage/rings/abc.pyx +526 -0
  441. sage/rings/algebraic_closure_finite_field.py +1154 -0
  442. sage/rings/all__sagemath_categories.py +91 -0
  443. sage/rings/big_oh.py +227 -0
  444. sage/rings/continued_fraction.py +2754 -0
  445. sage/rings/continued_fraction_gosper.py +220 -0
  446. sage/rings/factorint.cpython-314t-aarch64-linux-musl.so +0 -0
  447. sage/rings/factorint.pyx +295 -0
  448. sage/rings/fast_arith.cpython-314t-aarch64-linux-musl.so +0 -0
  449. sage/rings/fast_arith.pxd +21 -0
  450. sage/rings/fast_arith.pyx +535 -0
  451. sage/rings/finite_rings/all__sagemath_categories.py +9 -0
  452. sage/rings/finite_rings/conway_polynomials.py +542 -0
  453. sage/rings/finite_rings/element_base.cpython-314t-aarch64-linux-musl.so +0 -0
  454. sage/rings/finite_rings/element_base.pxd +12 -0
  455. sage/rings/finite_rings/element_base.pyx +1176 -0
  456. sage/rings/finite_rings/finite_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
  457. sage/rings/finite_rings/finite_field_base.pxd +7 -0
  458. sage/rings/finite_rings/finite_field_base.pyx +2171 -0
  459. sage/rings/finite_rings/finite_field_constructor.py +827 -0
  460. sage/rings/finite_rings/finite_field_prime_modn.py +372 -0
  461. sage/rings/finite_rings/galois_group.py +154 -0
  462. sage/rings/finite_rings/hom_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
  463. sage/rings/finite_rings/hom_finite_field.pxd +23 -0
  464. sage/rings/finite_rings/hom_finite_field.pyx +856 -0
  465. sage/rings/finite_rings/hom_prime_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
  466. sage/rings/finite_rings/hom_prime_finite_field.pxd +15 -0
  467. sage/rings/finite_rings/hom_prime_finite_field.pyx +164 -0
  468. sage/rings/finite_rings/homset.py +357 -0
  469. sage/rings/finite_rings/integer_mod.cpython-314t-aarch64-linux-musl.so +0 -0
  470. sage/rings/finite_rings/integer_mod.pxd +56 -0
  471. sage/rings/finite_rings/integer_mod.pyx +4586 -0
  472. sage/rings/finite_rings/integer_mod_limits.h +11 -0
  473. sage/rings/finite_rings/integer_mod_ring.py +2044 -0
  474. sage/rings/finite_rings/residue_field.cpython-314t-aarch64-linux-musl.so +0 -0
  475. sage/rings/finite_rings/residue_field.pxd +30 -0
  476. sage/rings/finite_rings/residue_field.pyx +1811 -0
  477. sage/rings/finite_rings/stdint.pxd +19 -0
  478. sage/rings/fraction_field.py +1452 -0
  479. sage/rings/fraction_field_element.cpython-314t-aarch64-linux-musl.so +0 -0
  480. sage/rings/fraction_field_element.pyx +1357 -0
  481. sage/rings/function_field/all.py +7 -0
  482. sage/rings/function_field/all__sagemath_categories.py +2 -0
  483. sage/rings/function_field/constructor.py +218 -0
  484. sage/rings/function_field/element.cpython-314t-aarch64-linux-musl.so +0 -0
  485. sage/rings/function_field/element.pxd +11 -0
  486. sage/rings/function_field/element.pyx +1008 -0
  487. sage/rings/function_field/element_rational.cpython-314t-aarch64-linux-musl.so +0 -0
  488. sage/rings/function_field/element_rational.pyx +513 -0
  489. sage/rings/function_field/extensions.py +230 -0
  490. sage/rings/function_field/function_field.py +1468 -0
  491. sage/rings/function_field/function_field_rational.py +1005 -0
  492. sage/rings/function_field/ideal.py +1155 -0
  493. sage/rings/function_field/ideal_rational.py +629 -0
  494. sage/rings/function_field/jacobian_base.py +826 -0
  495. sage/rings/function_field/jacobian_hess.py +1053 -0
  496. sage/rings/function_field/jacobian_khuri_makdisi.py +1027 -0
  497. sage/rings/function_field/maps.py +1039 -0
  498. sage/rings/function_field/order.py +281 -0
  499. sage/rings/function_field/order_basis.py +586 -0
  500. sage/rings/function_field/order_rational.py +576 -0
  501. sage/rings/function_field/place.py +426 -0
  502. sage/rings/function_field/place_rational.py +181 -0
  503. sage/rings/generic.py +320 -0
  504. sage/rings/homset.py +332 -0
  505. sage/rings/ideal.py +1885 -0
  506. sage/rings/ideal_monoid.py +215 -0
  507. sage/rings/infinity.py +1890 -0
  508. sage/rings/integer.cpython-314t-aarch64-linux-musl.so +0 -0
  509. sage/rings/integer.pxd +45 -0
  510. sage/rings/integer.pyx +7874 -0
  511. sage/rings/integer_ring.cpython-314t-aarch64-linux-musl.so +0 -0
  512. sage/rings/integer_ring.pxd +8 -0
  513. sage/rings/integer_ring.pyx +1693 -0
  514. sage/rings/laurent_series_ring.py +931 -0
  515. sage/rings/laurent_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
  516. sage/rings/laurent_series_ring_element.pxd +11 -0
  517. sage/rings/laurent_series_ring_element.pyx +1927 -0
  518. sage/rings/lazy_series.py +7815 -0
  519. sage/rings/lazy_series_ring.py +4356 -0
  520. sage/rings/localization.py +1043 -0
  521. sage/rings/morphism.cpython-314t-aarch64-linux-musl.so +0 -0
  522. sage/rings/morphism.pxd +39 -0
  523. sage/rings/morphism.pyx +3299 -0
  524. sage/rings/multi_power_series_ring.py +1145 -0
  525. sage/rings/multi_power_series_ring_element.py +2184 -0
  526. sage/rings/noncommutative_ideals.cpython-314t-aarch64-linux-musl.so +0 -0
  527. sage/rings/noncommutative_ideals.pyx +423 -0
  528. sage/rings/number_field/all__sagemath_categories.py +1 -0
  529. sage/rings/number_field/number_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
  530. sage/rings/number_field/number_field_base.pxd +8 -0
  531. sage/rings/number_field/number_field_base.pyx +507 -0
  532. sage/rings/number_field/number_field_element_base.cpython-314t-aarch64-linux-musl.so +0 -0
  533. sage/rings/number_field/number_field_element_base.pxd +6 -0
  534. sage/rings/number_field/number_field_element_base.pyx +36 -0
  535. sage/rings/number_field/number_field_ideal.py +3550 -0
  536. sage/rings/padics/all__sagemath_categories.py +4 -0
  537. sage/rings/padics/local_generic.py +1670 -0
  538. sage/rings/padics/local_generic_element.cpython-314t-aarch64-linux-musl.so +0 -0
  539. sage/rings/padics/local_generic_element.pxd +5 -0
  540. sage/rings/padics/local_generic_element.pyx +1017 -0
  541. sage/rings/padics/misc.py +256 -0
  542. sage/rings/padics/padic_generic.py +1911 -0
  543. sage/rings/padics/pow_computer.cpython-314t-aarch64-linux-musl.so +0 -0
  544. sage/rings/padics/pow_computer.pxd +38 -0
  545. sage/rings/padics/pow_computer.pyx +671 -0
  546. sage/rings/padics/precision_error.py +24 -0
  547. sage/rings/polynomial/all__sagemath_categories.py +25 -0
  548. sage/rings/polynomial/commutative_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
  549. sage/rings/polynomial/commutative_polynomial.pxd +6 -0
  550. sage/rings/polynomial/commutative_polynomial.pyx +24 -0
  551. sage/rings/polynomial/cyclotomic.cpython-314t-aarch64-linux-musl.so +0 -0
  552. sage/rings/polynomial/cyclotomic.pyx +404 -0
  553. sage/rings/polynomial/flatten.py +711 -0
  554. sage/rings/polynomial/ideal.py +102 -0
  555. sage/rings/polynomial/infinite_polynomial_element.py +1768 -0
  556. sage/rings/polynomial/infinite_polynomial_ring.py +1653 -0
  557. sage/rings/polynomial/laurent_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
  558. sage/rings/polynomial/laurent_polynomial.pxd +18 -0
  559. sage/rings/polynomial/laurent_polynomial.pyx +2190 -0
  560. sage/rings/polynomial/laurent_polynomial_ideal.py +590 -0
  561. sage/rings/polynomial/laurent_polynomial_ring.py +832 -0
  562. sage/rings/polynomial/laurent_polynomial_ring_base.py +708 -0
  563. sage/rings/polynomial/multi_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
  564. sage/rings/polynomial/multi_polynomial.pxd +12 -0
  565. sage/rings/polynomial/multi_polynomial.pyx +3082 -0
  566. sage/rings/polynomial/multi_polynomial_element.py +2570 -0
  567. sage/rings/polynomial/multi_polynomial_ideal.py +5771 -0
  568. sage/rings/polynomial/multi_polynomial_ring.py +947 -0
  569. sage/rings/polynomial/multi_polynomial_ring_base.cpython-314t-aarch64-linux-musl.so +0 -0
  570. sage/rings/polynomial/multi_polynomial_ring_base.pxd +15 -0
  571. sage/rings/polynomial/multi_polynomial_ring_base.pyx +1855 -0
  572. sage/rings/polynomial/multi_polynomial_sequence.py +2204 -0
  573. sage/rings/polynomial/polydict.cpython-314t-aarch64-linux-musl.so +0 -0
  574. sage/rings/polynomial/polydict.pxd +45 -0
  575. sage/rings/polynomial/polydict.pyx +2701 -0
  576. sage/rings/polynomial/polynomial_compiled.cpython-314t-aarch64-linux-musl.so +0 -0
  577. sage/rings/polynomial/polynomial_compiled.pxd +59 -0
  578. sage/rings/polynomial/polynomial_compiled.pyx +509 -0
  579. sage/rings/polynomial/polynomial_element.cpython-314t-aarch64-linux-musl.so +0 -0
  580. sage/rings/polynomial/polynomial_element.pxd +64 -0
  581. sage/rings/polynomial/polynomial_element.pyx +13255 -0
  582. sage/rings/polynomial/polynomial_element_generic.py +1637 -0
  583. sage/rings/polynomial/polynomial_fateman.py +97 -0
  584. sage/rings/polynomial/polynomial_quotient_ring.py +2465 -0
  585. sage/rings/polynomial/polynomial_quotient_ring_element.py +779 -0
  586. sage/rings/polynomial/polynomial_ring.py +3784 -0
  587. sage/rings/polynomial/polynomial_ring_constructor.py +1051 -0
  588. sage/rings/polynomial/polynomial_ring_homomorphism.cpython-314t-aarch64-linux-musl.so +0 -0
  589. sage/rings/polynomial/polynomial_ring_homomorphism.pxd +5 -0
  590. sage/rings/polynomial/polynomial_ring_homomorphism.pyx +121 -0
  591. sage/rings/polynomial/polynomial_singular_interface.py +549 -0
  592. sage/rings/polynomial/symmetric_ideal.py +989 -0
  593. sage/rings/polynomial/symmetric_reduction.cpython-314t-aarch64-linux-musl.so +0 -0
  594. sage/rings/polynomial/symmetric_reduction.pxd +8 -0
  595. sage/rings/polynomial/symmetric_reduction.pyx +669 -0
  596. sage/rings/polynomial/term_order.py +2279 -0
  597. sage/rings/polynomial/toy_buchberger.py +449 -0
  598. sage/rings/polynomial/toy_d_basis.py +387 -0
  599. sage/rings/polynomial/toy_variety.py +362 -0
  600. sage/rings/power_series_mpoly.cpython-314t-aarch64-linux-musl.so +0 -0
  601. sage/rings/power_series_mpoly.pxd +9 -0
  602. sage/rings/power_series_mpoly.pyx +161 -0
  603. sage/rings/power_series_poly.cpython-314t-aarch64-linux-musl.so +0 -0
  604. sage/rings/power_series_poly.pxd +10 -0
  605. sage/rings/power_series_poly.pyx +1317 -0
  606. sage/rings/power_series_ring.py +1441 -0
  607. sage/rings/power_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
  608. sage/rings/power_series_ring_element.pxd +12 -0
  609. sage/rings/power_series_ring_element.pyx +3028 -0
  610. sage/rings/puiseux_series_ring.py +487 -0
  611. sage/rings/puiseux_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
  612. sage/rings/puiseux_series_ring_element.pxd +7 -0
  613. sage/rings/puiseux_series_ring_element.pyx +1055 -0
  614. sage/rings/qqbar_decorators.py +167 -0
  615. sage/rings/quotient_ring.py +1598 -0
  616. sage/rings/quotient_ring_element.py +979 -0
  617. sage/rings/rational.cpython-314t-aarch64-linux-musl.so +0 -0
  618. sage/rings/rational.pxd +20 -0
  619. sage/rings/rational.pyx +4284 -0
  620. sage/rings/rational_field.py +1730 -0
  621. sage/rings/real_double.cpython-314t-aarch64-linux-musl.so +0 -0
  622. sage/rings/real_double.pxd +16 -0
  623. sage/rings/real_double.pyx +2218 -0
  624. sage/rings/real_lazy.cpython-314t-aarch64-linux-musl.so +0 -0
  625. sage/rings/real_lazy.pxd +30 -0
  626. sage/rings/real_lazy.pyx +1773 -0
  627. sage/rings/ring.cpython-314t-aarch64-linux-musl.so +0 -0
  628. sage/rings/ring.pxd +30 -0
  629. sage/rings/ring.pyx +850 -0
  630. sage/rings/semirings/all.py +3 -0
  631. sage/rings/semirings/non_negative_integer_semiring.py +107 -0
  632. sage/rings/semirings/tropical_mpolynomial.py +972 -0
  633. sage/rings/semirings/tropical_polynomial.py +997 -0
  634. sage/rings/semirings/tropical_semiring.cpython-314t-aarch64-linux-musl.so +0 -0
  635. sage/rings/semirings/tropical_semiring.pyx +676 -0
  636. sage/rings/semirings/tropical_variety.py +1701 -0
  637. sage/rings/sum_of_squares.cpython-314t-aarch64-linux-musl.so +0 -0
  638. sage/rings/sum_of_squares.pxd +3 -0
  639. sage/rings/sum_of_squares.pyx +336 -0
  640. sage/rings/tests.py +504 -0
  641. sage/schemes/affine/affine_homset.py +508 -0
  642. sage/schemes/affine/affine_morphism.py +1574 -0
  643. sage/schemes/affine/affine_point.py +460 -0
  644. sage/schemes/affine/affine_rational_point.py +308 -0
  645. sage/schemes/affine/affine_space.py +1264 -0
  646. sage/schemes/affine/affine_subscheme.py +592 -0
  647. sage/schemes/affine/all.py +25 -0
  648. sage/schemes/all__sagemath_categories.py +5 -0
  649. sage/schemes/generic/algebraic_scheme.py +2092 -0
  650. sage/schemes/generic/all.py +5 -0
  651. sage/schemes/generic/ambient_space.py +400 -0
  652. sage/schemes/generic/divisor.py +465 -0
  653. sage/schemes/generic/divisor_group.py +313 -0
  654. sage/schemes/generic/glue.py +84 -0
  655. sage/schemes/generic/homset.py +820 -0
  656. sage/schemes/generic/hypersurface.py +234 -0
  657. sage/schemes/generic/morphism.py +2107 -0
  658. sage/schemes/generic/point.py +237 -0
  659. sage/schemes/generic/scheme.py +1190 -0
  660. sage/schemes/generic/spec.py +199 -0
  661. sage/schemes/product_projective/all.py +6 -0
  662. sage/schemes/product_projective/homset.py +236 -0
  663. sage/schemes/product_projective/morphism.py +517 -0
  664. sage/schemes/product_projective/point.py +568 -0
  665. sage/schemes/product_projective/rational_point.py +550 -0
  666. sage/schemes/product_projective/space.py +1301 -0
  667. sage/schemes/product_projective/subscheme.py +466 -0
  668. sage/schemes/projective/all.py +24 -0
  669. sage/schemes/projective/proj_bdd_height.py +453 -0
  670. sage/schemes/projective/projective_homset.py +718 -0
  671. sage/schemes/projective/projective_morphism.py +2792 -0
  672. sage/schemes/projective/projective_point.py +1484 -0
  673. sage/schemes/projective/projective_rational_point.py +569 -0
  674. sage/schemes/projective/projective_space.py +2571 -0
  675. sage/schemes/projective/projective_subscheme.py +1574 -0
  676. sage/sets/all.py +17 -0
  677. sage/sets/cartesian_product.py +376 -0
  678. sage/sets/condition_set.py +525 -0
  679. sage/sets/disjoint_set.cpython-314t-aarch64-linux-musl.so +0 -0
  680. sage/sets/disjoint_set.pxd +36 -0
  681. sage/sets/disjoint_set.pyx +998 -0
  682. sage/sets/disjoint_union_enumerated_sets.py +625 -0
  683. sage/sets/family.cpython-314t-aarch64-linux-musl.so +0 -0
  684. sage/sets/family.pxd +12 -0
  685. sage/sets/family.pyx +1556 -0
  686. sage/sets/finite_enumerated_set.py +406 -0
  687. sage/sets/finite_set_map_cy.cpython-314t-aarch64-linux-musl.so +0 -0
  688. sage/sets/finite_set_map_cy.pxd +34 -0
  689. sage/sets/finite_set_map_cy.pyx +708 -0
  690. sage/sets/finite_set_maps.py +591 -0
  691. sage/sets/image_set.py +448 -0
  692. sage/sets/integer_range.py +829 -0
  693. sage/sets/non_negative_integers.py +241 -0
  694. sage/sets/positive_integers.py +93 -0
  695. sage/sets/primes.py +188 -0
  696. sage/sets/real_set.py +2760 -0
  697. sage/sets/recursively_enumerated_set.cpython-314t-aarch64-linux-musl.so +0 -0
  698. sage/sets/recursively_enumerated_set.pxd +31 -0
  699. sage/sets/recursively_enumerated_set.pyx +2082 -0
  700. sage/sets/set.py +2083 -0
  701. sage/sets/set_from_iterator.py +1021 -0
  702. sage/sets/totally_ordered_finite_set.py +329 -0
  703. sage/symbolic/all__sagemath_categories.py +1 -0
  704. sage/symbolic/function.cpython-314t-aarch64-linux-musl.so +0 -0
  705. sage/symbolic/function.pxd +29 -0
  706. sage/symbolic/function.pyx +1488 -0
  707. sage/symbolic/symbols.py +56 -0
  708. sage/tests/all__sagemath_categories.py +1 -0
  709. sage/tests/cython.cpython-314t-aarch64-linux-musl.so +0 -0
  710. sage/tests/cython.pyx +37 -0
  711. sage/tests/stl_vector.cpython-314t-aarch64-linux-musl.so +0 -0
  712. sage/tests/stl_vector.pyx +171 -0
  713. sage/typeset/all.py +6 -0
  714. sage/typeset/ascii_art.py +295 -0
  715. sage/typeset/character_art.py +789 -0
  716. sage/typeset/character_art_factory.py +572 -0
  717. sage/typeset/symbols.py +334 -0
  718. sage/typeset/unicode_art.py +183 -0
  719. sage/typeset/unicode_characters.py +101 -0
@@ -0,0 +1,718 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ r"""
3
+ Set of homomorphisms between two projective schemes
4
+
5
+ For schemes `X` and `Y`, this module implements the set of morphisms
6
+ `Hom(X,Y)`. This is done by :class:`SchemeHomset_generic`.
7
+
8
+ As a special case, the Hom-sets can also represent the points of a
9
+ scheme. Recall that the `K`-rational points of a scheme `X` over `k`
10
+ can be identified with the set of morphisms `Spec(K) \to X`. In Sage
11
+ the rational points are implemented by such scheme morphisms. This is
12
+ done by :class:`SchemeHomset_points` and its subclasses.
13
+
14
+ .. NOTE::
15
+
16
+ You should not create the Hom-sets manually. Instead, use the
17
+ :meth:`~sage.structure.parent.Hom` method that is inherited by all
18
+ schemes.
19
+
20
+ AUTHORS:
21
+
22
+ - William Stein (2006): initial version.
23
+
24
+ - Volker Braun (2011-08-11): significant improvement and refactoring.
25
+
26
+ - Ben Hutz (June 2012): added support for projective ring
27
+
28
+ - Ben Hutz (2018): add numerical point support
29
+ """
30
+
31
+ # *****************************************************************************
32
+ # Copyright (C) 2011 Volker Braun <vbraun.name@gmail.com>
33
+ # Copyright (C) 2006 William Stein <wstein@gmail.com>
34
+ #
35
+ # Distributed under the terms of the GNU General Public License (GPL)
36
+ # as published by the Free Software Foundation; either version 2 of
37
+ # the License, or (at your option) any later version.
38
+ # http://www.gnu.org/licenses/
39
+ # *****************************************************************************
40
+
41
+ from copy import copy
42
+
43
+ from sage.categories.fields import Fields
44
+ from sage.categories.number_fields import NumberFields
45
+ from sage.misc.lazy_import import lazy_import
46
+ from sage.misc.verbose import verbose
47
+ from sage.rings.finite_rings.finite_field_base import FiniteField
48
+ from sage.rings.integer_ring import ZZ
49
+ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
50
+ from sage.rings.rational_field import RationalField
51
+ from sage.schemes.generic.algebraic_scheme import AlgebraicScheme_subscheme
52
+ from sage.schemes.generic.homset import SchemeHomset_points, SchemeHomset_generic
53
+
54
+ lazy_import('sage.rings.cc', 'CC')
55
+ lazy_import('sage.rings.real_mpfr', 'RR')
56
+
57
+
58
+ # *******************************************************************
59
+ # Projective varieties
60
+ # *******************************************************************
61
+
62
+ class SchemeHomset_points_projective_field(SchemeHomset_points):
63
+ """
64
+ Set of rational points of a projective variety over a field.
65
+
66
+ INPUT:
67
+
68
+ See :class:`SchemeHomset_generic`.
69
+
70
+ EXAMPLES::
71
+
72
+ sage: from sage.schemes.projective.projective_homset import SchemeHomset_points_projective_field
73
+ sage: SchemeHomset_points_projective_field(Spec(QQ), ProjectiveSpace(QQ,2))
74
+ Set of rational points of Projective Space of dimension 2 over Rational Field
75
+ """
76
+ def points(self, **kwds):
77
+ """
78
+ Return some or all rational points of a projective scheme.
79
+
80
+ For dimension 0 subschemes points are determined through a groebner
81
+ basis calculation. For schemes or subschemes with dimension greater than 1
82
+ points are determined through enumeration up to the specified bound.
83
+
84
+ INPUT: keyword arguments:
85
+
86
+ - ``bound`` -- real number (default: 0); the bound for the coordinates
87
+ for subschemes with dimension at least 1
88
+
89
+ - ``precision`` -- integer (default: 53); the precision to use to
90
+ compute the elements of bounded height for number fields
91
+
92
+ - ``point_tolerance`` -- positive real number (default: `10^{-10}`);
93
+ for numerically inexact fields, two points are considered the same
94
+ if their coordinates are within tolerance
95
+
96
+ - ``zero_tolerance`` -- positive real number (default: `10^{-10}`);
97
+ for numerically inexact fields, points are on the subscheme if they
98
+ satisfy the equations to within tolerance
99
+
100
+ - ``tolerance`` -- a rational number in (0,1] used in Doyle-Krumm
101
+ algorithm-4 for enumeration over number fields
102
+
103
+ OUTPUT: list of rational points of a projective scheme
104
+
105
+ .. WARNING::
106
+
107
+ For numerically inexact fields such as ComplexField or RealField the
108
+ list of points returned is very likely to be incomplete. It may also
109
+ contain repeated points due to tolerances.
110
+
111
+ EXAMPLES::
112
+
113
+ sage: P.<x,y> = ProjectiveSpace(QQ, 1)
114
+ sage: P(QQ).points(bound=4)
115
+ [(-4 : 1), (-3 : 1), (-2 : 1), (-3/2 : 1), (-4/3 : 1), (-1 : 1),
116
+ (-3/4 : 1), (-2/3 : 1), (-1/2 : 1), (-1/3 : 1), (-1/4 : 1), (0 : 1),
117
+ (1/4 : 1), (1/3 : 1), (1/2 : 1), (2/3 : 1), (3/4 : 1), (1 : 0), (1 : 1),
118
+ (4/3 : 1), (3/2 : 1), (2 : 1), (3 : 1), (4 : 1)]
119
+
120
+ ::
121
+
122
+ sage: u = QQ['u'].0
123
+ sage: K.<v> = NumberField(u^2 + 3) # needs sage.rings.number_field
124
+ sage: P.<x,y,z> = ProjectiveSpace(K, 2) # needs sage.rings.number_field
125
+ sage: len(P(K).points(bound=1.8)) # needs sage.rings.number_field
126
+ 309
127
+
128
+ ::
129
+
130
+ sage: P1 = ProjectiveSpace(GF(2), 1)
131
+ sage: F.<a> = GF(4, 'a') # needs sage.rings.finite_rings
132
+ sage: P1(F).points() # needs sage.libs.singular sage.rings.finite_rings
133
+ [(0 : 1), (1 : 0), (1 : 1), (a : 1), (a + 1 : 1)]
134
+
135
+ ::
136
+
137
+ sage: P.<x,y,z> = ProjectiveSpace(QQ, 2)
138
+ sage: E = P.subscheme([(y^3-y*z^2) - (x^3-x*z^2), (y^3-y*z^2) + (x^3-x*z^2)])
139
+ sage: E(P.base_ring()).points() # needs sage.libs.singular
140
+ [(-1 : -1 : 1), (-1 : 0 : 1), (-1 : 1 : 1), (0 : -1 : 1), (0 : 0 : 1),
141
+ (0 : 1 : 1), (1 : -1 : 1), (1 : 0 : 1), (1 : 1 : 1)]
142
+
143
+ ::
144
+
145
+ sage: # needs sage.rings.real_mpfr
146
+ sage: P.<x,y,z> = ProjectiveSpace(CC, 2)
147
+ sage: E = P.subscheme([y^3 - x^3 - x*z^2, x*y*z])
148
+ sage: L = E(P.base_ring()).points(); sorted(L, key=str) # needs sage.libs.singular
149
+ verbose 0 (...: projective_homset.py, points) Warning: computations in
150
+ the numerical fields are inexact;points may be computed partially or incorrectly.
151
+ [(-0.500000000000000 + 0.866025403784439*I : 1.00000000000000 : 0.000000000000000),
152
+ (-0.500000000000000 - 0.866025403784439*I : 1.00000000000000 : 0.000000000000000),
153
+ (-1.00000000000000*I : 0.000000000000000 : 1.00000000000000),
154
+ (0.000000000000000 : 0.000000000000000 : 1.00000000000000),
155
+ (1.00000000000000 : 1.00000000000000 : 0.000000000000000),
156
+ (1.00000000000000*I : 0.000000000000000 : 1.00000000000000)]
157
+ sage: L[0].codomain() # needs sage.libs.singular
158
+ Projective Space of dimension 2 over Complex Field with 53 bits of precision
159
+
160
+ ::
161
+
162
+ sage: # needs sage.rings.complex_double
163
+ sage: P.<x,y,z> = ProjectiveSpace(CDF, 2)
164
+ sage: E = P.subscheme([y^2 + x^2 + z^2, x*y*z])
165
+ sage: len(E(P.base_ring()).points()) # needs sage.libs.singular
166
+ verbose 0 (...: projective_homset.py, points) Warning: computations in
167
+ the numerical fields are inexact;points may be computed partially or incorrectly.
168
+ 6
169
+ """
170
+ from sage.schemes.projective.projective_space import ProjectiveSpace_ring
171
+ X = self.codomain()
172
+ if not isinstance(X, ProjectiveSpace_ring) and X.base_ring() in Fields():
173
+ if hasattr(X.base_ring(), 'precision'):
174
+ numerical = True
175
+ verbose("Warning: computations in the numerical fields are inexact;points may be computed partially or incorrectly.", level=0)
176
+ pt_tol = RR(kwds.pop('point_tolerance', 10**(-10)))
177
+ zero_tol = RR(kwds.pop('zero_tolerance', 10**(-10)))
178
+ if pt_tol <= 0 or zero_tol <= 0:
179
+ raise ValueError("tolerance must be positive")
180
+ else:
181
+ numerical = False
182
+ #Then it must be a subscheme
183
+ dim_ideal = X.defining_ideal().dimension()
184
+ if dim_ideal < 1: # no points
185
+ return []
186
+ if dim_ideal == 1: # if X zero-dimensional
187
+ rat_points = set()
188
+ PS = X.ambient_space()
189
+ N = PS.dimension_relative()
190
+ BR = X.base_ring()
191
+ #need a lexicographic ordering for elimination
192
+ R = PolynomialRing(BR, N + 1, PS.variable_names(), order='lex')
193
+ I = R.ideal(X.defining_polynomials())
194
+ I0 = R.ideal(0)
195
+ #Determine the points through elimination
196
+ #This is much faster than using the I.variety() function on each affine chart.
197
+ for k in range(N + 1):
198
+ #create the elimination ideal for the kth affine patch
199
+ G = I.substitute({R.gen(k):1}).groebner_basis()
200
+ if G != [1]:
201
+ P = {}
202
+ #keep track that we know the kth coordinate is 1
203
+ P.update({R.gen(k):1})
204
+ points = [P]
205
+ #work backwards from solving each equation for the possible
206
+ #values of the next coordinate
207
+ for i in range(len(G) - 1, -1, -1):
208
+ new_points = []
209
+ good = 0
210
+ for P in points:
211
+ #substitute in our dictionary entry that has the values
212
+ #of coordinates known so far. This results in a single
213
+ #variable polynomial (by elimination)
214
+ L = G[i].substitute(P)
215
+ if R(L).degree() > 0:
216
+ if numerical:
217
+ for pol in L.univariate_polynomial().roots(multiplicities=False):
218
+ good = 1
219
+ r = L.variables()[0]
220
+ varindex = R.gens().index(r)
221
+ P.update({R.gen(varindex):pol})
222
+ new_points.append(copy(P))
223
+ else:
224
+ L = L.factor()
225
+ #the linear factors give the possible rational values of
226
+ #this coordinate
227
+ for pol, pow in L:
228
+ if pol.degree() == 1 and len(pol.variables()) == 1:
229
+ good = 1
230
+ r = pol.variables()[0]
231
+ varindex = R.gens().index(r)
232
+ #add this coordinates information to
233
+ #each dictionary entry
234
+ P.update({R.gen(varindex):-pol.constant_coefficient() / pol.monomial_coefficient(r)})
235
+ new_points.append(copy(P))
236
+ else:
237
+ new_points.append(P)
238
+ good = 1
239
+ if good:
240
+ points = new_points
241
+ #the dictionary entries now have values for all coordinates
242
+ #they are the rational solutions to the equations
243
+ #make them into projective points
244
+ for i in range(len(points)):
245
+ if numerical:
246
+ if len(points[i]) == N + 1:
247
+ S = PS([points[i][R.gen(j)] for j in range(N + 1)])
248
+ S.normalize_coordinates()
249
+ if all(g(list(S)) < zero_tol for g in X.defining_polynomials()):
250
+ rat_points.add(S)
251
+ else:
252
+ if len(points[i]) == N + 1 and I.subs(points[i]) == I0:
253
+ S = X([points[i][R.gen(j)] for j in range(N + 1)])
254
+ S.normalize_coordinates()
255
+ rat_points.add(S)
256
+
257
+ # remove duplicate element using tolerance
258
+ if numerical:
259
+ dupl_points = list(rat_points)
260
+ for i in range(len(dupl_points)):
261
+ u = dupl_points[i]
262
+ for j in range(i+1, len(dupl_points)):
263
+ v = dupl_points[j]
264
+ if all((u[k] - v[k]).abs() < pt_tol
265
+ for k in range(len(u))):
266
+ rat_points.remove(u)
267
+ break
268
+
269
+ rat_points = sorted(rat_points)
270
+ return rat_points
271
+ R = self.value_ring()
272
+ B = kwds.pop('bound', 0)
273
+ tol = kwds.pop('tolerance', 1e-2)
274
+ prec = kwds.pop('precision', 53)
275
+ if isinstance(R, RationalField):
276
+ if not B > 0:
277
+ raise TypeError("a positive bound B (= %s) must be specified" % B)
278
+ if isinstance(X, AlgebraicScheme_subscheme): # sieve should only be called for subschemes
279
+ from sage.schemes.projective.projective_rational_point import sieve
280
+ return sieve(X, B)
281
+ else:
282
+ from sage.schemes.projective.projective_rational_point import enum_projective_rational_field
283
+ return enum_projective_rational_field(self, B)
284
+ elif R in NumberFields():
285
+ if not B > 0:
286
+ raise TypeError("a positive bound B (= %s) must be specified" % B)
287
+ from sage.schemes.projective.projective_rational_point import enum_projective_number_field
288
+ return enum_projective_number_field(self, bound=B, tolerance=tol, precision=prec)
289
+ elif isinstance(R, FiniteField):
290
+ from sage.schemes.projective.projective_rational_point import enum_projective_finite_field
291
+ return enum_projective_finite_field(self.extended_codomain())
292
+ else:
293
+ raise TypeError("unable to enumerate points over %s" % R)
294
+
295
+ def numerical_points(self, F=None, **kwds):
296
+ """
297
+ Return some or all numerical approximations of rational points of a projective scheme.
298
+
299
+ This is for dimension 0 subschemes only and the points are determined
300
+ through a groebner calculation over the base ring and then numerically
301
+ approximating the roots of the resulting polynomials. If the base ring
302
+ is a number field, the embedding into ``F`` must be known.
303
+
304
+ INPUT:
305
+
306
+ - ``F`` -- numerical ring
307
+
308
+ kwds:
309
+
310
+ - ``point_tolerance`` -- positive real number (default: `10^{-10}`).
311
+ For numerically inexact fields, two points are considered the same
312
+ if their coordinates are within tolerance.
313
+
314
+ - ``zero_tolerance`` -- positive real number (default: `10^{-10}`).
315
+ For numerically inexact fields, points are on the subscheme if they
316
+ satisfy the equations to within tolerance.
317
+
318
+ OUTPUT: list of points in the ambient space
319
+
320
+ .. WARNING::
321
+
322
+ For numerically inexact fields the list of points returned may contain repeated
323
+ or be missing points due to tolerance.
324
+
325
+ EXAMPLES::
326
+
327
+ sage: P.<x,y,z> = ProjectiveSpace(QQ, 2)
328
+ sage: E = P.subscheme([y^3 - x^3 - x*z^2, x*y*z])
329
+ sage: L = E(QQ).numerical_points(F=RR); L # needs sage.libs.singular
330
+ [(0.000000000000000 : 0.000000000000000 : 1.00000000000000),
331
+ (1.00000000000000 : 1.00000000000000 : 0.000000000000000)]
332
+ sage: L[0].codomain() # needs sage.libs.singular
333
+ Projective Space of dimension 2 over Real Field with 53 bits of precision
334
+
335
+ ::
336
+
337
+ sage: S.<a> = QQ[]
338
+ sage: K.<v> = NumberField(a^5 - 7, embedding=CC(7)**(1/5)) # needs sage.rings.number_field
339
+ sage: P.<x,y,z> = ProjectiveSpace(K, 2) # needs sage.rings.number_field
340
+ sage: X = P.subscheme([x^2 - v^2*z^2, y - v*z]) # needs sage.rings.number_field
341
+ sage: len(X(K).numerical_points(F=CDF)) # needs sage.libs.singular sage.rings.number_field
342
+ 2
343
+
344
+ ::
345
+
346
+ sage: P.<x1, x2, x3> = ProjectiveSpace(QQ, 2)
347
+ sage: E = P.subscheme([3000*x1^50 + 9875643*x2^2*x3^48 + 12334545*x2^50, x1 + x2])
348
+ sage: len(E(P.base_ring()).numerical_points(F=CDF, zero_tolerance=1e-6)) # needs sage.libs.singular
349
+ 49
350
+
351
+ TESTS::
352
+
353
+ sage: P.<x,y,z> = ProjectiveSpace(QQ, 2)
354
+ sage: E = P.subscheme([y^3 - x^3 - x*z^2, x*y*z])
355
+ sage: E(QQ).numerical_points(F=CDF, point_tolerance=-1) # needs sage.libs.singular
356
+ Traceback (most recent call last):
357
+ ...
358
+ ValueError: tolerance must be positive
359
+
360
+ ::
361
+
362
+ sage: P.<x,y,z> = ProjectiveSpace(QQ, 2)
363
+ sage: E = P.subscheme([y^3 - x^3 - x*z^2, x*y*z])
364
+ sage: E(QQ).numerical_points(F=CC, zero_tolerance=-1) # needs sage.libs.singular
365
+ Traceback (most recent call last):
366
+ ...
367
+ ValueError: tolerance must be positive
368
+
369
+ ::
370
+
371
+ sage: P.<x,y,z> = ProjectiveSpace(QQ, 2)
372
+ sage: E = P.subscheme([y^3 - x^3 - x*z^2, x*y*z])
373
+ sage: E(QQ).numerical_points(F=QQbar) # needs sage.rings.number_field
374
+ Traceback (most recent call last):
375
+ ...
376
+ TypeError: F must be a numerical field
377
+ """
378
+ from sage.schemes.projective.projective_space import ProjectiveSpace_ring
379
+ if F is None:
380
+ F = CC
381
+ if F not in Fields() or not hasattr(F, 'precision'):
382
+ raise TypeError('F must be a numerical field')
383
+ X = self.codomain()
384
+ if X.base_ring() not in NumberFields():
385
+ raise TypeError('base ring must be a number field')
386
+
387
+ PP = X.ambient_space().change_ring(F)
388
+ if not isinstance(X, ProjectiveSpace_ring) and X.base_ring() in Fields():
389
+ #Then it must be a subscheme
390
+ dim_ideal = X.defining_ideal().dimension()
391
+ if dim_ideal < 1: # no points
392
+ return []
393
+ if dim_ideal == 1: # if X zero-dimensional
394
+ pt_tol = RR(kwds.pop('point_tolerance', 10**(-10)))
395
+ zero_tol = RR(kwds.pop('zero_tolerance', 10**(-10)))
396
+ if pt_tol <= 0 or zero_tol <= 0:
397
+ raise ValueError("tolerance must be positive")
398
+ rat_points = set()
399
+ PS = X.ambient_space()
400
+ N = PS.dimension_relative()
401
+ BR = X.base_ring()
402
+ #need a lexicographic ordering for elimination
403
+ R = PolynomialRing(BR, N + 1, PS.variable_names(), order='lex')
404
+ RF = R.change_ring(F)
405
+ I = R.ideal(X.defining_polynomials())
406
+ #Determine the points through elimination
407
+ #This is much faster than using the I.variety() function on each affine chart.
408
+ for k in range(N + 1):
409
+ #create the elimination ideal for the kth affine patch
410
+ G = I.substitute({R.gen(k):1}).groebner_basis()
411
+ G = [RF(g) for g in G]
412
+ if G != [1]:
413
+ P = {}
414
+ #keep track that we know the kth coordinate is 1
415
+ P.update({RF.gen(k):1})
416
+ points = [P]
417
+ #work backwards from solving each equation for the possible
418
+ #values of the next coordinate
419
+ for i in range(len(G) - 1, -1, -1):
420
+ new_points = []
421
+ good = 0
422
+ for P in points:
423
+ #substitute in our dictionary entry that has the values
424
+ #of coordinates known so far. This results in a single
425
+ #variable polynomial (by elimination)
426
+ L = G[i].substitute(P)
427
+ if len(RF(L).variables()) == 1:
428
+ for pol in L.univariate_polynomial().roots(ring=F, multiplicities=False):
429
+ r = L.variables()[0]
430
+ varindex = RF.gens().index(r)
431
+ P.update({RF.gen(varindex):pol})
432
+ new_points.append(copy(P))
433
+ good = 1
434
+ else:
435
+ new_points.append(P)
436
+ good = 1
437
+ if good:
438
+ points = new_points
439
+ #the dictionary entries now have values for all coordinates
440
+ #they are approximate solutions to the equations
441
+ #make them into projective points
442
+ polys = [g.change_ring(F) for g in X.defining_polynomials()]
443
+ for i in range(len(points)):
444
+ if len(points[i]) == N + 1:
445
+ S = PP([points[i][RF.gen(j)] for j in range(N + 1)])
446
+ S.normalize_coordinates()
447
+ if all(g(list(S)) < zero_tol for g in polys):
448
+ rat_points.add(S)
449
+ # remove duplicate element using tolerance
450
+ #since they are normalized we can just compare coefficients
451
+ dupl_points = list(rat_points)
452
+ for i in range(len(dupl_points)):
453
+ u = dupl_points[i]
454
+ for j in range(i+1, len(dupl_points)):
455
+ v = dupl_points[j]
456
+ if all((u[k] - v[k]).abs() < pt_tol
457
+ for k in range(len(u))):
458
+ rat_points.remove(u)
459
+ break
460
+
461
+ rat_points = sorted(rat_points)
462
+ return rat_points
463
+ raise NotImplementedError('numerical approximation of points only for dimension 0 subschemes')
464
+
465
+
466
+ class SchemeHomset_points_projective_ring(SchemeHomset_points):
467
+ """
468
+ Set of rational points of a projective variety over a commutative ring.
469
+
470
+ INPUT:
471
+
472
+ See :class:`SchemeHomset_generic`.
473
+
474
+ EXAMPLES::
475
+
476
+ sage: from sage.schemes.projective.projective_homset import SchemeHomset_points_projective_ring
477
+ sage: SchemeHomset_points_projective_ring(Spec(ZZ), ProjectiveSpace(ZZ,2))
478
+ Set of rational points of Projective Space of dimension 2 over Integer Ring
479
+ """
480
+
481
+ def points(self, B=0):
482
+ """
483
+ Return some or all rational points of a projective scheme.
484
+
485
+ INPUT:
486
+
487
+ - ``B`` -- integer (default: 0); the bound for the coordinates
488
+
489
+ EXAMPLES::
490
+
491
+ sage: from sage.schemes.projective.projective_homset import SchemeHomset_points_projective_ring
492
+ sage: H = SchemeHomset_points_projective_ring(Spec(ZZ), ProjectiveSpace(ZZ, 2))
493
+ sage: H.points(3)
494
+ [(0 : 0 : 1), (0 : 1 : -3), (0 : 1 : -2), (0 : 1 : -1), (0 : 1 : 0), (0 : 1 : 1),
495
+ (0 : 1 : 2), (0 : 1 : 3), (0 : 2 : -3), (0 : 2 : -1), (0 : 2 : 1), (0 : 2 : 3),
496
+ (0 : 3 : -2), (0 : 3 : -1), (0 : 3 : 1), (0 : 3 : 2), (1 : -3 : -3),
497
+ (1 : -3 : -2), (1 : -3 : -1), (1 : -3 : 0), (1 : -3 : 1), (1 : -3 : 2),
498
+ (1 : -3 : 3), (1 : -2 : -3), (1 : -2 : -2), (1 : -2 : -1), (1 : -2 : 0),
499
+ (1 : -2 : 1), (1 : -2 : 2), (1 : -2 : 3), (1 : -1 : -3), (1 : -1 : -2),
500
+ (1 : -1 : -1), (1 : -1 : 0), (1 : -1 : 1), (1 : -1 : 2), (1 : -1 : 3),
501
+ (1 : 0 : -3), (1 : 0 : -2), (1 : 0 : -1), (1 : 0 : 0), (1 : 0 : 1), (1 : 0 : 2),
502
+ (1 : 0 : 3), (1 : 1 : -3), (1 : 1 : -2), (1 : 1 : -1), (1 : 1 : 0), (1 : 1 : 1),
503
+ (1 : 1 : 2), (1 : 1 : 3), (1 : 2 : -3), (1 : 2 : -2), (1 : 2 : -1), (1 : 2 : 0),
504
+ (1 : 2 : 1), (1 : 2 : 2), (1 : 2 : 3), (1 : 3 : -3), (1 : 3 : -2), (1 : 3 : -1),
505
+ (1 : 3 : 0), (1 : 3 : 1), (1 : 3 : 2), (1 : 3 : 3), (2 : -3 : -3),
506
+ (2 : -3 : -2), (2 : -3 : -1), (2 : -3 : 0), (2 : -3 : 1), (2 : -3 : 2),
507
+ (2 : -3 : 3), (2 : -2 : -3), (2 : -2 : -1), (2 : -2 : 1), (2 : -2 : 3),
508
+ (2 : -1 : -3), (2 : -1 : -2), (2 : -1 : -1), (2 : -1 : 0), (2 : -1 : 1),
509
+ (2 : -1 : 2), (2 : -1 : 3), (2 : 0 : -3), (2 : 0 : -1), (2 : 0 : 1),
510
+ (2 : 0 : 3), (2 : 1 : -3), (2 : 1 : -2), (2 : 1 : -1), (2 : 1 : 0), (2 : 1 : 1),
511
+ (2 : 1 : 2), (2 : 1 : 3), (2 : 2 : -3), (2 : 2 : -1), (2 : 2 : 1), (2 : 2 : 3),
512
+ (2 : 3 : -3), (2 : 3 : -2), (2 : 3 : -1), (2 : 3 : 0), (2 : 3 : 1), (2 : 3 : 2),
513
+ (2 : 3 : 3), (3 : -3 : -2), (3 : -3 : -1), (3 : -3 : 1), (3 : -3 : 2),
514
+ (3 : -2 : -3), (3 : -2 : -2), (3 : -2 : -1), (3 : -2 : 0), (3 : -2 : 1),
515
+ (3 : -2 : 2), (3 : -2 : 3), (3 : -1 : -3), (3 : -1 : -2), (3 : -1 : -1),
516
+ (3 : -1 : 0), (3 : -1 : 1), (3 : -1 : 2), (3 : -1 : 3), (3 : 0 : -2),
517
+ (3 : 0 : -1), (3 : 0 : 1), (3 : 0 : 2), (3 : 1 : -3), (3 : 1 : -2),
518
+ (3 : 1 : -1), (3 : 1 : 0), (3 : 1 : 1), (3 : 1 : 2), (3 : 1 : 3), (3 : 2 : -3),
519
+ (3 : 2 : -2), (3 : 2 : -1), (3 : 2 : 0), (3 : 2 : 1), (3 : 2 : 2), (3 : 2 : 3),
520
+ (3 : 3 : -2), (3 : 3 : -1), (3 : 3 : 1), (3 : 3 : 2)]
521
+ """
522
+ R = self.value_ring()
523
+ if R == ZZ:
524
+ if not B > 0:
525
+ raise TypeError("a positive bound B (= %s) must be specified" % B)
526
+ from sage.schemes.projective.projective_rational_point import enum_projective_rational_field
527
+ return enum_projective_rational_field(self,B)
528
+ else:
529
+ raise TypeError("unable to enumerate points over %s" % R)
530
+
531
+
532
+ class SchemeHomset_polynomial_projective_space(SchemeHomset_generic):
533
+ """
534
+ Set of morphisms of a projective space.
535
+
536
+ EXAMPLES::
537
+
538
+ sage: P.<x,y,z> = ProjectiveSpace(2, QQ)
539
+ sage: Hom(P, P)
540
+ Set of morphisms
541
+ From: Projective Space of dimension 2 over Rational Field
542
+ To: Projective Space of dimension 2 over Rational Field
543
+ """
544
+ def identity(self):
545
+ """
546
+ Return the identity morphism of this hom-set.
547
+
548
+ EXAMPLES::
549
+
550
+ sage: P.<x,y,z> = ProjectiveSpace(2, QQ)
551
+ sage: Hom(P, P)
552
+ Set of morphisms
553
+ From: Projective Space of dimension 2 over Rational Field
554
+ To: Projective Space of dimension 2 over Rational Field
555
+ sage: _.identity()
556
+ Scheme endomorphism of Projective Space of dimension 2 over Rational Field
557
+ Defn: Identity map
558
+ """
559
+ if self.is_endomorphism_set():
560
+ from sage.schemes.generic.morphism import SchemeMorphism_polynomial_id
561
+ return SchemeMorphism_polynomial_id(self.domain())
562
+ raise TypeError("identity map is only defined for endomorphisms")
563
+
564
+
565
+ # *******************************************************************
566
+ # Abelian varieties
567
+ # *******************************************************************
568
+
569
+ class SchemeHomset_points_abelian_variety_field(SchemeHomset_points_projective_field):
570
+ r"""
571
+ Set of rational points of an Abelian variety.
572
+
573
+ INPUT:
574
+
575
+ See :class:`SchemeHomset_generic`.
576
+
577
+ TESTS:
578
+
579
+ The bug reported at :issue:`1785` is fixed::
580
+
581
+ sage: # needs database_cremona_mini_ellcurve sage.rings.number_field sage.schemes
582
+ sage: x = polygen(ZZ, 'x')
583
+ sage: K.<a> = NumberField(x^2 + x - (3^3-3))
584
+ sage: E = EllipticCurve('37a')
585
+ sage: X = E(K)
586
+ sage: X
587
+ Abelian group of points on
588
+ Elliptic Curve defined by y^2 + y = x^3 + (-1)*x
589
+ over Number Field in a with defining polynomial x^2 + x - 24
590
+ sage: P = X([3,a])
591
+ sage: P
592
+ (3 : a : 1)
593
+ sage: P in E
594
+ False
595
+ sage: P in E.base_extend(K)
596
+ True
597
+ sage: P in X.codomain()
598
+ False
599
+ sage: P in X.extended_codomain()
600
+ True
601
+
602
+ Check for :issue:`11982`::
603
+
604
+ sage: P2.<x,y,z> = ProjectiveSpace(QQ,2)
605
+ sage: d = 7
606
+ sage: C = Curve(x^3 + y^3 - d*z^3) # needs sage.schemes
607
+ sage: E = EllipticCurve([0,-432*d^2]) # needs sage.schemes
608
+ sage: transformation = [(36*d*z-y)/(72*d), (36*d*z+y)/(72*d), x/(12*d)]
609
+ sage: phi = E.hom(transformation, C); phi # needs sage.schemes
610
+ Scheme morphism:
611
+ From: Elliptic Curve defined by y^2 = x^3 - 21168 over Rational Field
612
+ To: Projective Plane Curve over Rational Field defined by x^3 + y^3 - 7*z^3
613
+ Defn: Defined on coordinates by sending (x : y : z) to
614
+ (-1/504*y + 1/2*z : 1/504*y + 1/2*z : 1/84*x)
615
+ """
616
+
617
+ def _element_constructor_(self, *v, **kwds):
618
+ """
619
+ The element constructor.
620
+
621
+ INPUT:
622
+
623
+ - ``v`` -- anything that determines a scheme morphism in the Hom-set
624
+
625
+ OUTPUT: the scheme morphism determined by ``v``
626
+
627
+ EXAMPLES::
628
+
629
+ sage: # needs database_cremona_mini_ellcurve sage.schemes
630
+ sage: E = EllipticCurve('37a')
631
+ sage: X = E(QQ)
632
+ sage: P = X([0,1,0]); P
633
+ (0 : 1 : 0)
634
+ sage: type(P)
635
+ <class 'sage.schemes.elliptic_curves.ell_point.EllipticCurvePoint_number_field'>
636
+
637
+ TESTS::
638
+
639
+ sage: X._element_constructor_([0,1,0]) # needs database_cremona_mini_ellcurve sage.schemes
640
+ (0 : 1 : 0)
641
+ """
642
+ if len(v) == 1:
643
+ v = v[0]
644
+ if v == 0:
645
+ return self.zero()
646
+ return self.codomain()._point(self.extended_codomain(), v, **kwds)
647
+
648
+ def _repr_(self):
649
+ """
650
+ Return a string representation of this homset.
651
+
652
+ OUTPUT: string
653
+
654
+ EXAMPLES::
655
+
656
+ sage: # needs database_cremona_mini_ellcurve sage.schemes
657
+ sage: E = EllipticCurve('37a')
658
+ sage: X = E(QQ)
659
+ sage: X._repr_()
660
+ 'Abelian group of points on Elliptic Curve defined by y^2 + y = x^3 - x over Rational Field'
661
+ """
662
+ s = 'Abelian group of points on ' + str(self.extended_codomain())
663
+ return s
664
+
665
+ def base_extend(self, R):
666
+ """
667
+ Extend the base ring.
668
+
669
+ This is currently not implemented except for the trivial case
670
+ ``R==ZZ``.
671
+
672
+ INPUT:
673
+
674
+ - ``R`` -- a ring
675
+
676
+ EXAMPLES::
677
+
678
+ sage: # needs database_cremona_mini_ellcurve sage.schemes
679
+ sage: E = EllipticCurve('37a')
680
+ sage: Hom = E.point_homset(); Hom
681
+ Abelian group of points on Elliptic Curve defined
682
+ by y^2 + y = x^3 - x over Rational Field
683
+ sage: Hom.base_ring()
684
+ Rational Field
685
+ sage: Hom.base_extend(QQ)
686
+ Traceback (most recent call last):
687
+ ...
688
+ NotImplementedError: Abelian variety point sets are not
689
+ implemented as modules over rings other than ZZ
690
+ """
691
+ if R is not ZZ:
692
+ raise NotImplementedError('Abelian variety point sets are not '
693
+ 'implemented as modules over rings other than ZZ')
694
+ return self
695
+
696
+ def zero(self):
697
+ r"""
698
+ Return the neutral element in this group of points.
699
+
700
+ EXAMPLES::
701
+
702
+ sage: # needs sage.schemes
703
+ sage: S = EllipticCurve(GF(5), [1,1]).point_homset()
704
+ sage: S.zero()
705
+ (0 : 1 : 0)
706
+ sage: S = EllipticCurve(Zmod(15), [1,1]).point_homset()
707
+ sage: S.zero()
708
+ (0 : 1 : 0)
709
+ """
710
+ return self.codomain()(0)
711
+
712
+ _an_element_ = zero
713
+
714
+
715
+ from sage.misc.persist import register_unpickle_override
716
+ register_unpickle_override('sage.schemes.generic.homset',
717
+ 'SchemeHomsetModule_abelian_variety_coordinates_field',
718
+ SchemeHomset_points_abelian_variety_field)