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,820 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ r"""
3
+ Set of homomorphisms between two schemes
4
+
5
+ For schemes `X` and `Y`, this module implements the set of morphisms
6
+ `\mathrm{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 scheme.
9
+ Recall that the `K`-rational points of a scheme `X` over `k` can be identified
10
+ with the set of morphisms `\mathrm{Spec}(K) \to X`. In Sage the rational points
11
+ are implemented by such scheme morphisms. This is done by
12
+ :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
+
29
+ # *****************************************************************************
30
+ # Copyright (C) 2011 Volker Braun <vbraun.name@gmail.com>
31
+ # Copyright (C) 2006 William Stein <wstein@gmail.com>
32
+ #
33
+ # Distributed under the terms of the GNU General Public License (GPL)
34
+ # as published by the Free Software Foundation; either version 2 of
35
+ # the License, or (at your option) any later version.
36
+ # https://www.gnu.org/licenses/
37
+ # *****************************************************************************
38
+
39
+ from sage.categories.homset import HomsetWithBase
40
+ from sage.misc.lazy_import import lazy_import
41
+ from sage.structure.factory import UniqueFactory
42
+ from sage.structure.parent import Set_generic
43
+
44
+ from sage.rings.integer_ring import ZZ
45
+ from sage.rings.ring import CommutativeRing
46
+ from sage.categories.commutative_rings import CommutativeRings
47
+
48
+ from sage.schemes.generic.scheme import AffineScheme
49
+ from sage.schemes.generic.morphism import (
50
+ SchemeMorphism,
51
+ SchemeMorphism_structure_map,
52
+ SchemeMorphism_spec)
53
+
54
+ lazy_import('sage.schemes.affine.affine_space', 'AffineSpace_generic', as_='AffineSpace')
55
+ lazy_import('sage.schemes.generic.algebraic_scheme', 'AlgebraicScheme_subscheme')
56
+ lazy_import('sage.schemes.product_projective.space', 'ProductProjectiveSpaces_ring', as_='ProductProjectiveSpaces')
57
+ lazy_import('sage.schemes.projective.projective_space', 'ProjectiveSpace_ring', as_='ProjectiveSpace')
58
+
59
+
60
+ def is_SchemeHomset(H):
61
+ r"""
62
+ Test whether ``H`` is a scheme Hom-set.
63
+
64
+ EXAMPLES::
65
+
66
+ sage: f = Spec(QQ).identity_morphism(); f
67
+ Scheme endomorphism of Spectrum of Rational Field
68
+ Defn: Identity map
69
+ sage: from sage.schemes.generic.homset import is_SchemeHomset
70
+ sage: is_SchemeHomset(f)
71
+ doctest:warning...
72
+ DeprecationWarning: The function is_SchemeHomset is deprecated; use 'isinstance(..., SchemeHomset_generic)' instead.
73
+ See https://github.com/sagemath/sage/issues/38022 for details.
74
+ False
75
+ sage: is_SchemeHomset(f.parent())
76
+ True
77
+ sage: is_SchemeHomset('a string')
78
+ False
79
+ """
80
+ from sage.misc.superseded import deprecation
81
+ deprecation(38022, "The function is_SchemeHomset is deprecated; use 'isinstance(..., SchemeHomset_generic)' instead.")
82
+ return isinstance(H, SchemeHomset_generic)
83
+
84
+
85
+ # *******************************************************************
86
+ # Factory for Hom sets of schemes
87
+ # *******************************************************************
88
+
89
+ class SchemeHomsetFactory(UniqueFactory):
90
+ """
91
+ Factory for Hom-sets of schemes.
92
+
93
+ EXAMPLES::
94
+
95
+ sage: A2 = AffineSpace(QQ, 2)
96
+ sage: A3 = AffineSpace(QQ, 3)
97
+ sage: Hom = A3.Hom(A2)
98
+
99
+ The Hom-sets are uniquely determined by domain and codomain::
100
+
101
+ sage: Hom is copy(Hom)
102
+ True
103
+ sage: Hom is A3.Hom(A2)
104
+ True
105
+
106
+ The Hom-sets are identical if the domains and codomains are
107
+ identical::
108
+
109
+ sage: loads(Hom.dumps()) is Hom
110
+ True
111
+ sage: A3_iso = AffineSpace(QQ, 3)
112
+ sage: A3_iso is A3
113
+ True
114
+ sage: Hom_iso = A3_iso.Hom(A2)
115
+ sage: Hom_iso is Hom
116
+ True
117
+
118
+ TESTS::
119
+
120
+ sage: Hom.base()
121
+ Rational Field
122
+ sage: Hom.base_ring()
123
+ Rational Field
124
+ """
125
+
126
+ def create_key_and_extra_args(self, X, Y, category=None, base=None,
127
+ check=True, as_point_homset=False):
128
+ """
129
+ Create a key that uniquely determines the Hom-set.
130
+
131
+ INPUT:
132
+
133
+ - ``X`` -- a scheme; the domain of the morphisms
134
+
135
+ - ``Y`` -- a scheme; the codomain of the morphisms
136
+
137
+ - ``category`` -- a category for the Hom-sets (default: schemes over
138
+ given base)
139
+
140
+ - ``base`` -- a scheme or a ring; the base scheme of domain
141
+ and codomain schemes. If a ring is specified, the spectrum
142
+ of that ring will be used as base scheme.
143
+
144
+ - ``check`` -- boolean (default: ``True``)
145
+
146
+ EXAMPLES::
147
+
148
+ sage: A2 = AffineSpace(QQ, 2)
149
+ sage: A3 = AffineSpace(QQ, 3)
150
+ sage: A3.Hom(A2) # indirect doctest
151
+ Set of morphisms
152
+ From: Affine Space of dimension 3 over Rational Field
153
+ To: Affine Space of dimension 2 over Rational Field
154
+ sage: from sage.schemes.generic.homset import SchemeHomsetFactory
155
+ sage: SHOMfactory = SchemeHomsetFactory('test')
156
+ sage: key, extra = SHOMfactory.create_key_and_extra_args(A3, A2, check=False)
157
+ sage: key
158
+ (..., ..., Category of schemes over Rational Field, False)
159
+ sage: extra
160
+ {'X': Affine Space of dimension 3 over Rational Field,
161
+ 'Y': Affine Space of dimension 2 over Rational Field,
162
+ 'base_ring': Rational Field,
163
+ 'check': False}
164
+ """
165
+ _CommRings = CommutativeRings()
166
+ if X in _CommRings:
167
+ X = AffineScheme(X)
168
+ if Y in _CommRings:
169
+ Y = AffineScheme(Y)
170
+ if base is None:
171
+ from sage.structure.element import coercion_model
172
+ base = coercion_model.common_parent(X.base_ring(), Y.base_ring())
173
+ if isinstance(base, AffineScheme):
174
+ base_spec = base
175
+ base_ring = base.coordinate_ring()
176
+ elif base in _CommRings:
177
+ base_spec = AffineScheme(base)
178
+ base_ring = base
179
+ else:
180
+ raise ValueError('base must be a commutative ring or its spectrum')
181
+ if not category:
182
+ from sage.categories.schemes import Schemes
183
+ category = Schemes(base_spec)
184
+ key = (id(X), id(Y), category, as_point_homset)
185
+ extra = {'X':X, 'Y':Y, 'base_ring':base_ring, 'check':check}
186
+ return key, extra
187
+
188
+ def create_object(self, version, key, **extra_args):
189
+ """
190
+ Create a :class:`SchemeHomset_generic`.
191
+
192
+ INPUT:
193
+
194
+ - ``version`` -- object version; currently not used
195
+
196
+ - ``key`` -- a key created by :meth:`create_key_and_extra_args`
197
+
198
+ - ``extra_args`` -- dictionary of extra keyword arguments
199
+
200
+ EXAMPLES::
201
+
202
+ sage: A2 = AffineSpace(QQ, 2)
203
+ sage: A3 = AffineSpace(QQ, 3)
204
+ sage: A3.Hom(A2) is A3.Hom(A2) # indirect doctest
205
+ True
206
+ sage: from sage.schemes.generic.homset import SchemeHomsetFactory
207
+ sage: SHOMfactory = SchemeHomsetFactory('test')
208
+ sage: SHOMfactory.create_object(0, [id(A3), id(A2), A3.category(), False],
209
+ ....: check=True, X=A3, Y=A2, base_ring=QQ)
210
+ Set of morphisms
211
+ From: Affine Space of dimension 3 over Rational Field
212
+ To: Affine Space of dimension 2 over Rational Field
213
+ """
214
+ category = key[2]
215
+ X = extra_args.pop('X')
216
+ Y = extra_args.pop('Y')
217
+ base_ring = extra_args.pop('base_ring')
218
+ if len(key) >= 4 and key[3]: # as_point_homset=True
219
+ return Y._point_homset(X, Y, category=category, base=base_ring, **extra_args)
220
+ try:
221
+ return X._homset(X, Y, category=category, base=base_ring, **extra_args)
222
+ except AttributeError:
223
+ return SchemeHomset_generic(X, Y, category=category, base=base_ring, **extra_args)
224
+
225
+
226
+ SchemeHomset = SchemeHomsetFactory('sage.schemes.generic.homset.SchemeHomset')
227
+
228
+
229
+ # *******************************************************************
230
+ # Base class
231
+ # *******************************************************************
232
+
233
+ class SchemeHomset_generic(HomsetWithBase):
234
+ r"""
235
+ The base class for Hom-sets of schemes.
236
+
237
+ INPUT:
238
+
239
+ - ``X`` -- a scheme; the domain of the Hom-set
240
+
241
+ - ``Y`` -- a scheme; the codomain of the Hom-set
242
+
243
+ - ``category`` -- a category (optional); the category of the
244
+ Hom-set
245
+
246
+ - ``check`` -- boolean (default: ``True``); whether to
247
+ check the defining data for consistency
248
+
249
+ EXAMPLES::
250
+
251
+ sage: from sage.schemes.generic.homset import SchemeHomset_generic
252
+ sage: A2 = AffineSpace(QQ,2)
253
+ sage: Hom = SchemeHomset_generic(A2, A2); Hom
254
+ Set of morphisms
255
+ From: Affine Space of dimension 2 over Rational Field
256
+ To: Affine Space of dimension 2 over Rational Field
257
+ sage: Hom.category()
258
+ Category of endsets of schemes over Rational Field
259
+ """
260
+ Element = SchemeMorphism
261
+
262
+ def __reduce__(self):
263
+ """
264
+ Used in pickling.
265
+
266
+ EXAMPLES::
267
+
268
+ sage: A2 = AffineSpace(QQ, 2)
269
+ sage: A3 = AffineSpace(QQ, 3)
270
+ sage: Hom = A3.Hom(A2)
271
+ sage: loads(Hom.dumps()) == Hom
272
+ True
273
+ """
274
+ return SchemeHomset, (self.domain(), self.codomain(), self.homset_category(),
275
+ self.base_ring(), False, False)
276
+
277
+ def __call__(self, *args, **kwds):
278
+ r"""
279
+ Make Hom-sets callable.
280
+
281
+ See the ``_call_()`` method of the derived class. All
282
+ arguments are handed through.
283
+
284
+ EXAMPLES::
285
+
286
+ sage: A2 = AffineSpace(QQ, 2)
287
+ sage: A2(4,5)
288
+ (4, 5)
289
+ """
290
+ # Homset (base of HomsetWithBase) overrides __call__ @#$
291
+ return Set_generic.__call__(self, *args, **kwds)
292
+
293
+ def _repr_(self):
294
+ r"""
295
+ Return a string representation.
296
+
297
+ OUTPUT: string
298
+
299
+ EXAMPLES::
300
+
301
+ sage: A = AffineSpace(4, QQ)
302
+ sage: print(A.structure_morphism()._repr_())
303
+ Scheme morphism:
304
+ From: Affine Space of dimension 4 over Rational Field
305
+ To: Spectrum of Rational Field
306
+ Defn: Structure map
307
+ """
308
+ s = 'Set of morphisms'
309
+ s += '\n From: %s' % self.domain()
310
+ s += '\n To: %s' % self.codomain()
311
+ return s
312
+
313
+ def natural_map(self):
314
+ r"""
315
+ Return a natural map in the Hom space.
316
+
317
+ OUTPUT:
318
+
319
+ A :class:`SchemeMorphism` if there is a natural map from
320
+ domain to codomain. Otherwise, a :exc:`NotImplementedError` is raised.
321
+
322
+ EXAMPLES::
323
+
324
+ sage: A = AffineSpace(4, QQ)
325
+ sage: A.structure_morphism() # indirect doctest
326
+ Scheme morphism:
327
+ From: Affine Space of dimension 4 over Rational Field
328
+ To: Spectrum of Rational Field
329
+ Defn: Structure map
330
+ """
331
+ X = self.domain()
332
+ Y = self.codomain()
333
+ if isinstance(Y, AffineScheme) and Y.coordinate_ring() == X.base_ring():
334
+ return SchemeMorphism_structure_map(self)
335
+ raise NotImplementedError
336
+
337
+ def _element_constructor_(self, x, check=True):
338
+ """
339
+ Construct a scheme morphism.
340
+
341
+ INPUT:
342
+
343
+ - ``x`` -- a ring morphism, or a list or a tuple that define a
344
+ ring morphism
345
+
346
+ - ``check`` -- boolean (default: ``True``); passed onto
347
+ functions called by this one to be more careful about input
348
+ argument type checking
349
+
350
+ EXAMPLES::
351
+
352
+ sage: f = ZZ.hom(QQ); f
353
+ Natural morphism:
354
+ From: Integer Ring
355
+ To: Rational Field
356
+
357
+ sage: H = Hom(Spec(QQ, ZZ), Spec(ZZ)); H
358
+ Set of morphisms
359
+ From: Spectrum of Rational Field
360
+ To: Spectrum of Integer Ring
361
+
362
+ sage: phi = H(f); phi
363
+ Affine Scheme morphism:
364
+ From: Spectrum of Rational Field
365
+ To: Spectrum of Integer Ring
366
+ Defn: Natural morphism:
367
+ From: Integer Ring
368
+ To: Rational Field
369
+
370
+ TESTS::
371
+
372
+ sage: H._element_constructor_(f)
373
+ Affine Scheme morphism:
374
+ From: Spectrum of Rational Field
375
+ To: Spectrum of Integer Ring
376
+ Defn: Natural morphism:
377
+ From: Integer Ring
378
+ To: Rational Field
379
+
380
+ We illustrate input type checking::
381
+
382
+ sage: R.<x,y> = QQ[]
383
+ sage: A.<x,y> = AffineSpace(R)
384
+ sage: C = A.subscheme(x*y - 1)
385
+ sage: H = C.Hom(C); H
386
+ Set of morphisms
387
+ From: Closed subscheme of Affine Space of dimension 2 over Rational Field
388
+ defined by: x*y - 1
389
+ To: Closed subscheme of Affine Space of dimension 2 over Rational Field
390
+ defined by: x*y - 1
391
+ sage: H(1)
392
+ Traceback (most recent call last):
393
+ ...
394
+ TypeError: x must be a ring homomorphism, list or tuple
395
+ """
396
+ if isinstance(x, (list, tuple)):
397
+ return self.domain()._morphism(self, x, check=check)
398
+
399
+ from sage.categories.map import Map
400
+ from sage.categories.rings import Rings
401
+ if isinstance(x, Map) and x.category_for().is_subcategory(Rings()):
402
+ # x is a morphism of Rings
403
+ return SchemeMorphism_spec(self, x, check=check)
404
+
405
+ raise TypeError("x must be a ring homomorphism, list or tuple")
406
+
407
+
408
+ # *******************************************************************
409
+ # Base class for points
410
+ # *******************************************************************
411
+
412
+ class SchemeHomset_points(SchemeHomset_generic):
413
+ r"""
414
+ Set of rational points of the scheme.
415
+
416
+ Recall that the `K`-rational points of a scheme `X` over `k` can be
417
+ identified with the set of morphisms `\mathrm{Spec}(K) \to X`. In Sage, the
418
+ rational points are implemented by such scheme morphisms.
419
+
420
+ If a scheme has a finite number of points, then the homset is
421
+ supposed to implement the Python iterator interface. See
422
+ :class:`~sage.schemes.toric.homset.SchemeHomset_points_toric_field`
423
+ for example.
424
+
425
+ INPUT:
426
+
427
+ See :class:`SchemeHomset_generic`.
428
+
429
+ EXAMPLES::
430
+
431
+ sage: from sage.schemes.generic.homset import SchemeHomset_points
432
+ sage: SchemeHomset_points(Spec(QQ), AffineSpace(ZZ,2))
433
+ Set of rational points of Affine Space of dimension 2 over Rational Field
434
+ """
435
+
436
+ def __init__(self, X, Y, category=None, check=True, base=ZZ):
437
+ """
438
+ Python constructor.
439
+
440
+ INPUT:
441
+
442
+ See :class:`SchemeHomset_generic`.
443
+
444
+ EXAMPLES::
445
+
446
+ sage: from sage.schemes.generic.homset import SchemeHomset_points
447
+ sage: SchemeHomset_points(Spec(QQ), AffineSpace(ZZ,2))
448
+ Set of rational points of Affine Space of dimension 2 over Rational Field
449
+ """
450
+ if check and not isinstance(X, AffineScheme):
451
+ raise ValueError('The domain must be an affine scheme.')
452
+ SchemeHomset_generic.__init__(self, X, Y, category=category, check=check, base=base)
453
+
454
+ def __reduce__(self):
455
+ """
456
+ Used in pickling.
457
+
458
+ EXAMPLES::
459
+
460
+ sage: A2 = AffineSpace(QQ, 2)
461
+ sage: Hom = A2(QQ)
462
+ sage: loads(Hom.dumps()) == Hom
463
+ True
464
+ """
465
+ return SchemeHomset, (self.domain(), self.codomain(), self.homset_category(),
466
+ self.base_ring(), False, True)
467
+
468
+ def _coerce_map_from_(self, other):
469
+ r"""
470
+ Return true if ``other`` canonically coerces to ``self``.
471
+
472
+ EXAMPLES::
473
+
474
+ sage: R.<t> = QQ[]
475
+ sage: P = ProjectiveSpace(QQ, 1, 'x')
476
+ sage: P2 = ProjectiveSpace(R, 1, 'x')
477
+ sage: P2(R)._coerce_map_from_(P(QQ))
478
+ True
479
+ sage: P(QQ)._coerce_map_from_(P2(R))
480
+ False
481
+
482
+ ::
483
+
484
+ sage: P = ProjectiveSpace(QQ, 1, 'x')
485
+ sage: P2 = ProjectiveSpace(CC, 1, 'y') # needs sage.rings.real_mpfr
486
+ sage: P2(CC)._coerce_map_from_(P(QQ)) # needs sage.rings.real_mpfr
487
+ False
488
+
489
+ ::
490
+
491
+ sage: A.<x,y,z> = AffineSpace(QQ, 3)
492
+ sage: H = A.subscheme(z)
493
+ sage: L = A.subscheme([z, y + z])
494
+ sage: A(QQ)._coerce_map_from_(H(QQ))
495
+ True
496
+ sage: H(QQ)._coerce_map_from_(L(QQ)) # needs sage.libs.singular
497
+ True
498
+ sage: L(QQ).has_coerce_map_from(H(QQ)) # needs sage.libs.singular
499
+ False
500
+ sage: A(CC)._coerce_map_from_(H(QQ)) # needs sage.rings.real_mpfr
501
+ True
502
+ sage: H(CC)._coerce_map_from_(L(RR)) # needs sage.libs.singular sage.rings.real_mpfr
503
+ True
504
+
505
+ ::
506
+
507
+ sage: A.<x,y,z> = AffineSpace(QQ, 3)
508
+ sage: A2.<u,v> = AffineSpace(QQ, 2)
509
+ sage: A(QQ).has_coerce_map_from(A2(QQ))
510
+ False
511
+
512
+ ::
513
+
514
+ sage: A.<x,y> = AffineSpace(QQ, 2)
515
+ sage: P.<u,v,w> = ProjectiveSpace(QQ, 2)
516
+ sage: A(QQ).has_coerce_map_from(P(QQ))
517
+ False
518
+
519
+ ::
520
+
521
+ sage: A = AffineSpace(QQ, 1)
522
+ sage: A(QQ)._coerce_map_from_(ZZ)
523
+ True
524
+
525
+ ::
526
+
527
+ sage: PS = ProjectiveSpace(ZZ, 1, 'x')
528
+ sage: PS2 = ProjectiveSpace(Zp(7), 1, 'x') # needs sage.rings.padics
529
+ sage: PS(ZZ).has_coerce_map_from(PS2(Zp(7))) # needs sage.rings.padics
530
+ False
531
+ sage: PS2(Zp(7)).has_coerce_map_from(PS(ZZ)) # needs sage.rings.padics
532
+ True
533
+
534
+ ::
535
+
536
+ sage: PP1 = ProductProjectiveSpaces(ZZ, [2,1], 'x')
537
+ sage: PP1(QQ)._coerce_map_from_(PP1(ZZ))
538
+ True
539
+ sage: PP2 = ProductProjectiveSpaces(QQ, [1,2], 'x')
540
+ sage: PP2(QQ)._coerce_map_from_(PP1(ZZ))
541
+ False
542
+ sage: PP3 = ProductProjectiveSpaces(QQ, [2,1], 'y')
543
+ sage: PP3(QQ)._coerce_map_from_(PP1(ZZ))
544
+ False
545
+
546
+ ::
547
+
548
+ sage: # needs sage.rings.number_field
549
+ sage: K.<w> = QuadraticField(2)
550
+ sage: A.<x,y,z> = AffineSpace(QQ, 3)
551
+ sage: H = A.subscheme(z)
552
+ sage: A(K).has_coerce_map_from(H(QQ))
553
+ True
554
+
555
+ TESTS::
556
+
557
+ sage: P.<x,y> = ProjectiveSpace(QQ, 1)
558
+ sage: X = P.subscheme([x - y])
559
+ sage: P(1,1) == X(1,1)
560
+ True
561
+
562
+ ::
563
+
564
+ sage: A = AffineSpace(QQ, 1, 'x')
565
+ sage: AC = AffineSpace(CC, 1, 'x') # needs sage.rings.real_mpfr
566
+ sage: A(3/2) == AC(3/2) # needs sage.rings.real_mpfr
567
+ True
568
+
569
+ ::
570
+
571
+ sage: A = AffineSpace(QQ, 1)
572
+ sage: A(0) == 0
573
+ True
574
+ """
575
+ target = self.codomain()
576
+ # ring elements can be coerced to a space if we're affine dimension 1
577
+ # and the base rings are coercible
578
+ if isinstance(other, CommutativeRing):
579
+ try:
580
+ if (isinstance(target.ambient_space(), AffineSpace)
581
+ and target.ambient_space().dimension_relative() == 1):
582
+ return target.base_ring().has_coerce_map_from(other)
583
+ else:
584
+ return False
585
+ except AttributeError: # no .ambient_space
586
+ return False
587
+ elif isinstance(other, SchemeHomset_points):
588
+ # we are converting between scheme points
589
+ source = other.codomain()
590
+ if isinstance(target, AlgebraicScheme_subscheme):
591
+ # subscheme coerce when there is containment
592
+ if not isinstance(source, AlgebraicScheme_subscheme):
593
+ return False
594
+ if target.ambient_space() == source.ambient_space():
595
+ if all(g in source.defining_ideal()
596
+ for g in target.defining_polynomials()):
597
+ return self.domain().coordinate_ring().has_coerce_map_from(other.domain().coordinate_ring())
598
+ else:
599
+ # if the target is an ambient space, we can coerce if the base rings coerce
600
+ # and they are the same type: affine, projective, etc and have the same
601
+ # variable names
602
+ try:
603
+ ta = target.ambient_space()
604
+ sa = source.ambient_space()
605
+ except AttributeError: #no .ambient_space
606
+ return False
607
+ #for projective and affine varieties, we check dimension
608
+ #and matching variable names
609
+ if ((isinstance(ta, ProjectiveSpace) and isinstance(sa, ProjectiveSpace))
610
+ or (isinstance(ta, AffineSpace) and isinstance(sa, AffineSpace))):
611
+ if (ta.variable_names() == sa.variable_names()):
612
+ return self.domain().coordinate_ring().has_coerce_map_from(other.domain().coordinate_ring())
613
+ else:
614
+ return False
615
+ #for products of projective spaces, we check dimension of
616
+ #components and matching variable names
617
+ elif isinstance(ta, ProductProjectiveSpaces) and isinstance(sa, ProductProjectiveSpaces):
618
+ if (ta.dimension_relative_components() == sa.dimension_relative_components()) \
619
+ and (ta.variable_names() == sa.variable_names()):
620
+ return self.domain().coordinate_ring().has_coerce_map_from(other.domain().coordinate_ring())
621
+ else:
622
+ return False
623
+
624
+ def _element_constructor_(self, *v, **kwds):
625
+ """
626
+ The element constructor.
627
+
628
+ INPUT:
629
+
630
+ - ``v`` -- anything that determines a scheme morphism in the
631
+ Hom-set
632
+
633
+ OUTPUT: the scheme morphism determined by ``v``
634
+
635
+ EXAMPLES::
636
+
637
+ sage: A2 = AffineSpace(ZZ, 2)
638
+ sage: F = GF(3)
639
+ sage: F_points = A2(F); type(F_points)
640
+ <class 'sage.schemes.affine.affine_homset.SchemeHomset_points_affine_with_category'>
641
+ sage: F_points([2,5])
642
+ (2, 2)
643
+
644
+ sage: # needs sage.rings.finite_rings
645
+ sage: P2 = ProjectiveSpace(GF(3), 2)
646
+ sage: F.<a> = GF(9, 'a')
647
+ sage: F_points = P2(F)
648
+ sage: type(F_points)
649
+ <class 'sage.schemes.projective.projective_homset.SchemeHomset_points_projective_field_with_category'>
650
+ sage: F_points([4,2*a])
651
+ (1 : 2*a : 1)
652
+
653
+ TESTS::
654
+
655
+ sage: F_points._element_constructor_([4,2*a]) # needs sage.rings.finite_rings
656
+ (1 : 2*a : 1)
657
+ """
658
+ if len(v) == 1:
659
+ v = v[0]
660
+ return self.extended_codomain()._point(self, v, **kwds)
661
+
662
+ def __iter__(self):
663
+ r"""
664
+ Return an iterator for the set of rational points on this scheme.
665
+
666
+ By default, this calls the :meth:`points` method, which is implemented
667
+ when the base ring is a field
668
+
669
+ - for affine homsets at :meth:`sage.schemes.affine.affine_homset.SchemeHomset_points_affine.points`;
670
+ - for projective homsets at :meth:`sage.schemes.projective.projective_homset.SchemeHomset_points_projective_field.points`;
671
+ - and toric homsets at :meth:`sage.schemes.toric.homset.SchemeHomset_points_toric_field._enumerator`.
672
+
673
+ OUTPUT: iterator over points
674
+
675
+ TESTS::
676
+
677
+ sage: # needs sage.schemes
678
+ sage: E = EllipticCurve(GF(19), [1, 0])
679
+ sage: list(E.point_homset())
680
+ [(0 : 1 : 0), (0 : 0 : 1), (3 : 7 : 1), (3 : 12 : 1), (4 : 7 : 1),
681
+ (4 : 12 : 1), (5 : 4 : 1), (5 : 15 : 1), (8 : 8 : 1), (8 : 11 : 1),
682
+ (9 : 4 : 1), (9 : 15 : 1), (12 : 7 : 1), (12 : 12 : 1), (13 : 5 : 1),
683
+ (13 : 14 : 1), (17 : 3 : 1), (17 : 16 : 1), (18 : 6 : 1), (18 : 13 : 1)]
684
+ sage: _ == list(E)
685
+ True
686
+ sage: E.point_homset().cardinality()
687
+ 20
688
+
689
+ ::
690
+
691
+ sage: A.<x, y> = AffineSpace(2, GF(5))
692
+ sage: list(A.point_homset())
693
+ [(0, 0), (0, 1), (0, 2), (0, 3), (0, 4),
694
+ (1, 0), (1, 1), (1, 2), (1, 3), (1, 4),
695
+ (2, 0), (2, 1), (2, 2), (2, 3), (2, 4),
696
+ (3, 0), (3, 1), (3, 2), (3, 3), (3, 4),
697
+ (4, 0), (4, 1), (4, 2), (4, 3), (4, 4)]
698
+ sage: _ == list(A)
699
+ True
700
+ sage: A.point_homset().cardinality()
701
+ 25
702
+
703
+ ::
704
+
705
+ sage: # needs sage.geometry.polyhedron sage.graphs
706
+ sage: P1 = toric_varieties.P1(base_ring=GF(3))
707
+ sage: list(P1.point_homset())
708
+ [[0 : 1], [1 : 0], [1 : 1], [1 : 2]]
709
+ sage: P1.point_homset().cardinality()
710
+ 4
711
+ """
712
+ yield from self.points()
713
+
714
+ def extended_codomain(self):
715
+ r"""
716
+ Return the codomain with extended base, if necessary.
717
+
718
+ OUTPUT:
719
+
720
+ The codomain scheme, with its base ring extended to the
721
+ codomain. That is, the codomain is of the form `\mathrm{Spec}(R)` and
722
+ the base ring of the domain is extended to `R`.
723
+
724
+ EXAMPLES::
725
+
726
+ sage: # needs sage.rings.number_field
727
+ sage: P2 = ProjectiveSpace(QQ, 2)
728
+ sage: x = polygen(ZZ, 'x')
729
+ sage: K.<a> = NumberField(x^2 + x - (3^3-3))
730
+ sage: K_points = P2(K); K_points
731
+ Set of rational points of Projective Space of dimension 2
732
+ over Number Field in a with defining polynomial x^2 + x - 24
733
+ sage: K_points.codomain()
734
+ Projective Space of dimension 2 over Rational Field
735
+ sage: K_points.extended_codomain()
736
+ Projective Space of dimension 2
737
+ over Number Field in a with defining polynomial x^2 + x - 24
738
+ """
739
+ if '_extended_codomain' in self.__dict__:
740
+ return self._extended_codomain
741
+ R = self.domain().coordinate_ring()
742
+ if R is not self.codomain().base_ring():
743
+ X = self.codomain().base_extend(R)
744
+ else:
745
+ X = self.codomain()
746
+ self._extended_codomain = X
747
+ return X
748
+
749
+ def zero(self):
750
+ """
751
+ Return the identity of the codomain with extended base, if necessary.
752
+ """
753
+ return self.extended_codomain().zero()
754
+
755
+ def _repr_(self):
756
+ """
757
+ Return a string representation of ``self``.
758
+
759
+ OUTPUT: string
760
+
761
+ EXAMPLES::
762
+
763
+ sage: P2 = ProjectiveSpace(ZZ, 2)
764
+ sage: P2(QQ)._repr_()
765
+ 'Set of rational points of Projective Space of dimension 2 over Rational Field'
766
+ """
767
+ return 'Set of rational points of '+str(self.extended_codomain())
768
+
769
+ def value_ring(self):
770
+ r"""
771
+ Return `R` for a point Hom-set `X(\mathrm{Spec}(R))`.
772
+
773
+ OUTPUT: a commutative ring
774
+
775
+ EXAMPLES::
776
+
777
+ sage: P2 = ProjectiveSpace(ZZ, 2)
778
+ sage: P2(QQ).value_ring()
779
+ Rational Field
780
+ """
781
+ dom = self.domain()
782
+ if not isinstance(dom, AffineScheme):
783
+ raise ValueError("value rings are defined for affine domains only")
784
+ return dom.coordinate_ring()
785
+
786
+ def cardinality(self):
787
+ """
788
+ Return the number of points.
789
+
790
+ OUTPUT: integer or infinity
791
+
792
+ EXAMPLES::
793
+
794
+ sage: toric_varieties.P2().point_set().cardinality() # needs palp sage.geometry.polyhedron sage.graphs
795
+ +Infinity
796
+
797
+ sage: P2 = toric_varieties.P2(base_ring=GF(3)) # needs palp sage.geometry.polyhedron sage.graphs
798
+ sage: P2.point_set().cardinality() # needs palp sage.geometry.polyhedron sage.graphs
799
+ 13
800
+ """
801
+ if hasattr(self, 'is_finite') and not self.is_finite():
802
+ from sage.rings.infinity import Infinity
803
+ return Infinity
804
+ return sum(ZZ.one() for point in self)
805
+
806
+ __len__ = cardinality
807
+
808
+ def list(self):
809
+ """
810
+ Return a tuple containing all points.
811
+
812
+ OUTPUT: a tuple containing all points of the toric variety
813
+
814
+ EXAMPLES::
815
+
816
+ sage: P1 = toric_varieties.P1(base_ring=GF(3)) # needs palp sage.geometry.polyhedron sage.graphs
817
+ sage: P1.point_set().list() # needs palp sage.geometry.polyhedron sage.graphs
818
+ ([0 : 1], [1 : 0], [1 : 1], [1 : 2])
819
+ """
820
+ return tuple(self)