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,708 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ """
3
+ Data structures for maps between finite sets
4
+
5
+ This module implements several fast Cython data structures for maps
6
+ between two finite set. Those classes are not intended to be used
7
+ directly. Instead, such a map should be constructed via its parent,
8
+ using the class :class:`~sage.sets.finite_set_maps.FiniteSetMaps`.
9
+
10
+ EXAMPLES:
11
+
12
+ To create a map between two sets, one first creates the set of such maps::
13
+
14
+ sage: M = FiniteSetMaps(["a", "b"], [3, 4, 5])
15
+
16
+ The map can then be constructed either from a function::
17
+
18
+ sage: f1 = M(lambda c: ord(c)-94); f1
19
+ map: a -> 3, b -> 4
20
+
21
+ or from a dictionary::
22
+
23
+ sage: f2 = M.from_dict({'a':3, 'b':4}); f2
24
+ map: a -> 3, b -> 4
25
+
26
+ The two created maps are equal::
27
+
28
+ sage: f1 == f2
29
+ True
30
+
31
+ Internally, maps are represented as the list of the ranks of the
32
+ images ``f(x)`` in the co-domain, in the order of the domain::
33
+
34
+ sage: list(f2)
35
+ [0, 1]
36
+
37
+ A third fast way to create a map it to use such a list. it should be
38
+ kept for internal use::
39
+
40
+ sage: f3 = M._from_list_([0, 1]); f3
41
+ map: a -> 3, b -> 4
42
+ sage: f1 == f3
43
+ True
44
+
45
+ AUTHORS:
46
+
47
+ - Florent Hivert
48
+ """
49
+ # ****************************************************************************
50
+ # Copyright (C) 2010 Florent Hivert <Florent.Hivert@univ-rouen.fr>,
51
+ #
52
+ # Distributed under the terms of the GNU General Public License (GPL)
53
+ # https://www.gnu.org/licenses/
54
+ # ****************************************************************************
55
+
56
+ from sage.structure.list_clone cimport ClonableIntArray
57
+ from sage.structure.parent cimport Parent
58
+ from sage.arith.power cimport generic_power
59
+ from sage.sets.set import Set_object_enumerated
60
+
61
+
62
+ cpdef fibers(f, domain):
63
+ r"""
64
+ Return the fibers of the function ``f`` on the finite set ``domain``.
65
+
66
+ INPUT:
67
+
68
+ - ``f`` -- a function or callable
69
+ - ``domain`` -- a finite iterable
70
+
71
+ OUTPUT:
72
+
73
+ - a dictionary ``d`` such that ``d[y]`` is the set of all ``x`` in
74
+ ``domain`` such that ``f(x) = y``
75
+
76
+ EXAMPLES::
77
+
78
+ sage: from sage.sets.finite_set_map_cy import fibers, fibers_args
79
+ sage: fibers(lambda x: 1, [])
80
+ {}
81
+ sage: fibers(lambda x: x^2, [-1, 2, -3, 1, 3, 4])
82
+ {1: {1, -1}, 4: {2}, 9: {3, -3}, 16: {4}}
83
+ sage: fibers(lambda x: 1, [-1, 2, -3, 1, 3, 4])
84
+ {1: {1, 2, 3, 4, -3, -1}}
85
+ sage: fibers(lambda x: 1, [1,1,1])
86
+ {1: {1}}
87
+
88
+ .. SEEALSO:: :func:`fibers_args` if one needs to pass extra
89
+ arguments to ``f``.
90
+ """
91
+ result = {}
92
+ for x in domain:
93
+ y = f(x)
94
+ result.setdefault(y, set()).add(x)
95
+ for x, v in result.iteritems():
96
+ result[x] = Set_object_enumerated(v)
97
+ return result
98
+
99
+
100
+ def fibers_args(f, domain, *args, **opts):
101
+ r"""
102
+ Return the fibers of the function ``f`` on the finite set ``domain``.
103
+
104
+ It is the same as :func:`fibers` except that one can pass extra
105
+ argument for ``f`` (with a small overhead)
106
+
107
+ EXAMPLES::
108
+
109
+ sage: from sage.sets.finite_set_map_cy import fibers_args
110
+ sage: fibers_args(operator.pow, [-1, 2, -3, 1, 3, 4], 2)
111
+ {1: {1, -1}, 4: {2}, 9: {3, -3}, 16: {4}}
112
+ """
113
+ return fibers(lambda x: f(x, *args, **opts), domain)
114
+
115
+
116
+ cdef class FiniteSetMap_MN(ClonableIntArray):
117
+ """
118
+ Data structure for maps from ``range(m)`` to ``range(n)``.
119
+
120
+ We assume that the parent given as argument is such that:
121
+
122
+ - ``m`` -- stored in ``self.parent()._m``
123
+ - ``n`` -- stored in ``self.parent()._n``
124
+ - the domain is in ``self.parent().domain()``
125
+ - the codomain is in ``self.parent().codomain()``
126
+ """
127
+
128
+ def __call__(self, int i):
129
+ """
130
+ Return the image of ``i`` under the map ``self``.
131
+
132
+ INPUT:
133
+
134
+ - ``i`` -- integer
135
+
136
+ OUTPUT: integer
137
+
138
+ EXAMPLES::
139
+
140
+ sage: fs = FiniteSetMaps(4, 3)([1, 0, 2, 1])
141
+ sage: fs(0), fs(1), fs(2), fs(3)
142
+ (1, 0, 2, 1)
143
+ """
144
+ return self._getitem(i)
145
+
146
+ # Needed by generic power which refuses to compute 0^0
147
+ def __bool__(self):
148
+ """
149
+ Return whether ``self`` is nonzero; this is always ``True``.
150
+
151
+ EXAMPLES::
152
+
153
+ sage: fs = FiniteSetMaps(4, 3)([1, 0, 2, 1])
154
+ sage: bool(fs)
155
+ True
156
+ """
157
+ return True
158
+
159
+ cpdef domain(self):
160
+ """
161
+ Return the domain of ``self``.
162
+
163
+ EXAMPLES::
164
+
165
+ sage: FiniteSetMaps(4, 3)([1, 0, 2, 1]).domain()
166
+ {0, 1, 2, 3}
167
+ """
168
+ return self._parent.domain()
169
+
170
+ cpdef codomain(self):
171
+ """
172
+ Return the codomain of ``self``.
173
+
174
+ EXAMPLES::
175
+
176
+ sage: FiniteSetMaps(4, 3)([1, 0, 2, 1]).codomain()
177
+ {0, 1, 2}
178
+ """
179
+ return self._parent.codomain()
180
+
181
+ cpdef _setimage(self, int i, int j):
182
+ """
183
+ Set the image of ``i`` as ``j`` in ``self``.
184
+
185
+ This is a fast internal version where ``i`` and ``j`` are both int's.
186
+
187
+ .. warning:: ``self`` must be mutable; otherwise an exception is raised.
188
+
189
+ INPUT:
190
+
191
+ - ``i``, ``j`` -- integers
192
+
193
+ OUTPUT: none
194
+
195
+ EXAMPLES::
196
+
197
+ sage: fs = FiniteSetMaps(4, 3)([1, 0, 2, 1])
198
+ sage: fs2 = copy(fs)
199
+ sage: fs2._setimage(2, 1)
200
+ sage: fs2
201
+ [1, 0, 1, 1]
202
+ sage: with fs.clone() as fs3:
203
+ ....: fs3._setimage(0, 2)
204
+ ....: fs3._setimage(1, 2)
205
+ sage: fs3
206
+ [2, 2, 2, 1]
207
+
208
+ TESTS::
209
+
210
+ sage: with fs.clone() as fs3:
211
+ ....: fs3._setimage(6, 2)
212
+ Traceback (most recent call last):
213
+ ...
214
+ IndexError: list index out of range
215
+ sage: with fs.clone() as fs3:
216
+ ....: fs3._setimage(1, 4)
217
+ Traceback (most recent call last):
218
+ ...
219
+ AssertionError: Wrong value self(1) = 4
220
+ """
221
+ self._setitem(i, j)
222
+
223
+ cpdef _getimage(self, int i):
224
+ """
225
+ Return the image of ``i`` by ``self``.
226
+
227
+ This is a fast internal version where ``i`` is integer.
228
+
229
+ INPUT:
230
+
231
+ - ``i`` -- integer
232
+
233
+ EXAMPLES::
234
+
235
+ sage: fs = FiniteSetMaps(4, 3)([1, 0, 2, 1])
236
+ sage: fs._getimage(0), fs._getimage(1), fs._getimage(2), fs._getimage(3)
237
+ (1, 0, 2, 1)
238
+ """
239
+ return self._getitem(i)
240
+
241
+ cpdef setimage(self, i, j):
242
+ """
243
+ Set the image of ``i`` as ``j`` in ``self``.
244
+
245
+ .. warning:: ``self`` must be mutable; otherwise an exception is raised.
246
+
247
+ INPUT:
248
+
249
+ - ``i``, ``j`` -- two ``object``'s
250
+
251
+ OUTPUT: none
252
+
253
+ .. NOTE:: if you need speed, please use instead :meth:`_setimage`
254
+
255
+ EXAMPLES::
256
+
257
+ sage: fs = FiniteSetMaps(4, 3)([1, 0, 2, 1])
258
+ sage: fs2 = copy(fs)
259
+ sage: fs2.setimage(2, 1)
260
+ sage: fs2
261
+ [1, 0, 1, 1]
262
+ sage: with fs.clone() as fs3:
263
+ ....: fs3.setimage(0, 2)
264
+ ....: fs3.setimage(1, 2)
265
+ sage: fs3
266
+ [2, 2, 2, 1]
267
+ """
268
+ self._setitem(int(i), int(j))
269
+
270
+ cpdef getimage(self, i):
271
+ """
272
+ Return the image of ``i`` by ``self``.
273
+
274
+ INPUT:
275
+
276
+ - ``i`` -- any object
277
+
278
+ .. NOTE:: if you need speed, please use instead :meth:`_getimage`
279
+
280
+ EXAMPLES::
281
+
282
+ sage: fs = FiniteSetMaps(4, 3)([1, 0, 2, 1])
283
+ sage: fs.getimage(0), fs.getimage(1), fs.getimage(2), fs.getimage(3)
284
+ (1, 0, 2, 1)
285
+ """
286
+ return self._getitem(int(i))
287
+
288
+ cpdef image_set(self):
289
+ """
290
+ Return the image set of ``self``.
291
+
292
+ EXAMPLES::
293
+
294
+ sage: FiniteSetMaps(4, 3)([1, 0, 2, 1]).image_set()
295
+ {0, 1, 2}
296
+ sage: FiniteSetMaps(4, 3)([1, 0, 0, 1]).image_set()
297
+ {0, 1}
298
+ """
299
+ return Set_object_enumerated(self)
300
+
301
+ cpdef fibers(self):
302
+ """
303
+ Return the fibers of ``self``.
304
+
305
+ OUTPUT:
306
+
307
+ a dictionary ``d`` such that ``d[y]`` is the set of all ``x`` in
308
+ ``domain`` such that ``f(x) = y``
309
+
310
+ EXAMPLES::
311
+
312
+ sage: FiniteSetMaps(4, 3)([1, 0, 2, 1]).fibers()
313
+ {0: {1}, 1: {0, 3}, 2: {2}}
314
+ sage: F = FiniteSetMaps(["a", "b", "c"])
315
+ sage: F.from_dict({"a": "b", "b": "a", "c": "b"}).fibers() == {'a': {'b'}, 'b': {'a', 'c'}}
316
+ True
317
+ """
318
+ return fibers(self, self.domain())
319
+
320
+ cpdef items(self):
321
+ """
322
+ The items of ``self``.
323
+
324
+ Return the list of the ordered pairs ``(x, self(x))``
325
+
326
+ EXAMPLES::
327
+
328
+ sage: FiniteSetMaps(4, 3)([1, 0, 2, 1]).items()
329
+ [(0, 1), (1, 0), (2, 2), (3, 1)]
330
+ """
331
+ return [(i, self._getimage(i)) for i in self.domain()]
332
+
333
+ cpdef check(self):
334
+ """
335
+ Perform checks on ``self``.
336
+
337
+ Check that ``self`` is a proper function and then calls
338
+ ``parent.check_element(self)`` where ``parent`` is the parent
339
+ of ``self``.
340
+
341
+ TESTS::
342
+
343
+ sage: fs = FiniteSetMaps(3, 2)
344
+ sage: for el in fs: el.check()
345
+ sage: fs([1,1])
346
+ Traceback (most recent call last):
347
+ ...
348
+ AssertionError: Wrong number of values
349
+ sage: fs([0,0,2])
350
+ Traceback (most recent call last):
351
+ ...
352
+ AssertionError: Wrong value self(2) = 2
353
+ """
354
+ cdef int i, m, n
355
+ m = self._parent._m
356
+ n = self._parent._n
357
+ assert self._len == m, "Wrong number of values"
358
+ for i in range(m):
359
+ assert 0 <= self._list[i] < n, "Wrong value self(%i) = %i" % (i, self._list[i])
360
+ if hasattr(self._parent, 'check_element'):
361
+ self._parent.check_element(self)
362
+
363
+ cpdef FiniteSetMap_MN _compose_internal_(self, FiniteSetMap_MN other,
364
+ Parent resParent):
365
+ """
366
+ TESTS::
367
+
368
+ sage: FSM = FiniteSetMaps(3)
369
+ sage: fs1 = FSM([1, 0, 2])
370
+ sage: fs2 = FSM([0, 1, 2])
371
+ sage: el = fs1*fs2; el
372
+ [1, 0, 2]
373
+ sage: el.check()
374
+ """
375
+ cdef type t = type(self)
376
+ cdef FiniteSetMap_MN res = t.__new__(t)
377
+ res._parent = resParent
378
+ res._alloc_(self._len)
379
+ for i in range(self._len):
380
+ res._list[i] = other._list[self._list[i]]
381
+ res.set_immutable()
382
+ return res
383
+
384
+
385
+ cpdef FiniteSetMap_Set FiniteSetMap_Set_from_list(t, parent, lst):
386
+ """
387
+ Create a ``FiniteSetMap`` from a list.
388
+
389
+ .. warning:: no check is performed !
390
+
391
+ TESTS::
392
+
393
+ sage: from sage.sets.finite_set_map_cy import FiniteSetMap_Set_from_list as from_list
394
+ sage: F = FiniteSetMaps(["a", "b"], [3, 4, 5])
395
+ sage: f = from_list(F.element_class, F, [0,2]); f.check(); f
396
+ map: a -> 3, b -> 5
397
+ sage: f.parent() is F
398
+ True
399
+ sage: f.is_immutable()
400
+ True
401
+ """
402
+ cdef FiniteSetMap_MN res
403
+ cdef type cls = <type>t
404
+ res = cls.__new__(cls)
405
+ super(FiniteSetMap_MN, res).__init__(parent, lst)
406
+ return res
407
+
408
+ cpdef FiniteSetMap_Set FiniteSetMap_Set_from_dict(t, parent, d):
409
+ """
410
+ Create a ``FiniteSetMap`` from a dictionary.
411
+
412
+ .. warning:: no check is performed !
413
+
414
+ TESTS::
415
+
416
+ sage: from sage.sets.finite_set_map_cy import FiniteSetMap_Set_from_dict as from_dict
417
+ sage: F = FiniteSetMaps(["a", "b"], [3, 4, 5])
418
+ sage: f = from_dict(F.element_class, F, {"a": 3, "b": 5}); f.check(); f
419
+ map: a -> 3, b -> 5
420
+ sage: f.parent() is F
421
+ True
422
+ sage: f.is_immutable()
423
+ True
424
+ """
425
+ cdef FiniteSetMap_Set res
426
+ cdef type cls = <type>t
427
+ res = cls.__new__(cls)
428
+ res.__init__(parent, d.__getitem__)
429
+ return res
430
+
431
+
432
+ cdef class FiniteSetMap_Set(FiniteSetMap_MN):
433
+ """
434
+ Data structure for maps.
435
+
436
+ We assume that the parent given as argument is such that:
437
+
438
+ - the domain is in ``parent.domain()``
439
+ - the codomain is in ``parent.codomain()``
440
+ - ``parent._m`` contains the cardinality of the domain
441
+ - ``parent._n`` contains the cardinality of the codomain
442
+ - ``parent._unrank_domain`` and ``parent._rank_domain`` is a pair of
443
+ reciprocal rank and unrank functions between the domain and
444
+ ``range(parent._m)``.
445
+ - ``parent._unrank_codomain`` and ``parent._rank_codomain`` is a pair of
446
+ reciprocal rank and unrank functions between the codomain and
447
+ ``range(parent._n)``.
448
+ """
449
+
450
+ def __init__(self, parent, fun, check=True):
451
+ """
452
+ EXAMPLES::
453
+
454
+ sage: F = FiniteSetMaps(["a", "b", "c", "d"], ["u", "v", "w"])
455
+ sage: F(lambda x: "v")
456
+ map: a -> v, b -> v, c -> v, d -> v
457
+ """
458
+ # For speed we initialize self by hand.
459
+ # super(FiniteSetMap_Set, self).__init__(parent, [], check=False)
460
+ self._parent = parent
461
+ self._alloc_(int(parent._m))
462
+ for i, el in enumerate(parent.domain().list()):
463
+ self._setitem(i, parent._rank_codomain(fun(el)))
464
+ self.set_immutable()
465
+ if check:
466
+ self.check()
467
+
468
+ from_list = classmethod(FiniteSetMap_Set_from_list)
469
+ from_dict = classmethod(FiniteSetMap_Set_from_dict)
470
+
471
+ def __call__(self, i):
472
+ """
473
+ Return the image of ``i`` under the map ``self``.
474
+
475
+ INPUT:
476
+
477
+ - ``i`` -- integer
478
+
479
+ OUTPUT: integer
480
+
481
+ EXAMPLES::
482
+
483
+ sage: F = FiniteSetMaps(["a", "b"], [3, 4, 5])
484
+ sage: fs = F.from_dict({"a": 3, "b": 5})
485
+ sage: fs('a'), fs('b')
486
+ (3, 5)
487
+ """
488
+ parent = self._parent
489
+ return parent._unrank_codomain(self._getitem(parent._rank_domain(i)))
490
+
491
+ cpdef image_set(self):
492
+ """
493
+ Return the image set of ``self``.
494
+
495
+ EXAMPLES::
496
+
497
+ sage: F = FiniteSetMaps(["a", "b", "c"])
498
+ sage: sorted(F.from_dict({"a": "b", "b": "a", "c": "b"}).image_set())
499
+ ['a', 'b']
500
+ sage: F = FiniteSetMaps(["a", "b", "c"])
501
+ sage: F(lambda x: "c").image_set()
502
+ {'c'}
503
+ """
504
+ image_i = self._parent._unrank_codomain
505
+ return Set_object_enumerated([image_i(i) for i in self])
506
+
507
+ cpdef setimage(self, i, j):
508
+ """
509
+ Set the image of ``i`` as ``j`` in ``self``.
510
+
511
+ .. warning:: ``self`` must be mutable otherwise an exception is raised.
512
+
513
+ INPUT:
514
+
515
+ - ``i``, ``j`` -- two ``object``'s
516
+
517
+ OUTPUT: none
518
+
519
+ EXAMPLES::
520
+
521
+ sage: F = FiniteSetMaps(["a", "b", "c", "d"], ["u", "v", "w"])
522
+ sage: fs = F(lambda x: "v")
523
+ sage: fs2 = copy(fs)
524
+ sage: fs2.setimage("a", "w")
525
+ sage: fs2
526
+ map: a -> w, b -> v, c -> v, d -> v
527
+ sage: with fs.clone() as fs3:
528
+ ....: fs3.setimage("a", "u")
529
+ ....: fs3.setimage("c", "w")
530
+ sage: fs3
531
+ map: a -> u, b -> v, c -> w, d -> v
532
+
533
+ TESTS::
534
+
535
+ sage: with fs.clone() as fs3:
536
+ ....: fs3.setimage("z", 2)
537
+ Traceback (most recent call last):
538
+ ...
539
+ ValueError: 'z' is not in dict
540
+
541
+ sage: with fs.clone() as fs3:
542
+ ....: fs3.setimage(1, 4)
543
+ Traceback (most recent call last):
544
+ ...
545
+ ValueError: 1 is not in dict
546
+ """
547
+ parent = self._parent
548
+ return self._setitem(parent._rank_domain(i), parent._rank_codomain(j))
549
+
550
+ cpdef getimage(self, i):
551
+ """
552
+ Return the image of ``i`` by ``self``.
553
+
554
+ INPUT:
555
+
556
+ - ``i`` -- integer
557
+
558
+ EXAMPLES::
559
+
560
+ sage: F = FiniteSetMaps(["a", "b", "c", "d"], ["u", "v", "w"])
561
+ sage: fs = F._from_list_([1, 0, 2, 1])
562
+ sage: list(map(fs.getimage, ["a", "b", "c", "d"]))
563
+ ['v', 'u', 'w', 'v']
564
+ """
565
+ parent = self._parent
566
+ return parent._unrank_codomain(self._getitem(parent._rank_domain(i)))
567
+
568
+ cpdef items(self):
569
+ """
570
+ The items of ``self``.
571
+
572
+ Return the list of the couple ``(x, self(x))``
573
+
574
+ EXAMPLES::
575
+
576
+ sage: F = FiniteSetMaps(["a", "b", "c"])
577
+ sage: F.from_dict({"a": "b", "b": "a", "c": "b"}).items()
578
+ [('a', 'b'), ('b', 'a'), ('c', 'b')]
579
+
580
+ TESTS::
581
+
582
+ sage: all(F.from_dict(dict(f.items())) == f for f in F)
583
+ True
584
+ """
585
+ parent = self._parent
586
+ return [(parent._unrank_domain(i),
587
+ parent._unrank_codomain(self._getitem(i)))
588
+ for i in range(parent._m)]
589
+
590
+ def _repr_(self):
591
+ """
592
+ TESTS::
593
+
594
+ sage: F = FiniteSetMaps(["a", "b"], [3, 4, 5])
595
+ sage: F._from_list_([0, 2])
596
+ map: a -> 3, b -> 5
597
+ """
598
+ return "map: " + ", ".join("%s -> %s" % (i, self(i))
599
+ for i in self.domain())
600
+
601
+
602
+ cdef class FiniteSetEndoMap_N(FiniteSetMap_MN):
603
+ """
604
+ Map from ``range(n)`` to itself.
605
+
606
+ .. SEEALSO:: :class:`FiniteSetMap_MN` for assumptions on the parent
607
+
608
+ TESTS::
609
+
610
+ sage: fs = FiniteSetMaps(3)([1, 0, 2])
611
+ sage: TestSuite(fs).run()
612
+ """
613
+
614
+ def __mul__(FiniteSetEndoMap_N self, FiniteSetEndoMap_N other):
615
+ """
616
+ TESTS::
617
+
618
+ sage: F = FiniteSetMaps(3)
619
+ sage: F([1, 0, 2]) * F([2, 1, 0])
620
+ [2, 0, 1]
621
+ sage: F = FiniteSetMaps(3, action='right')
622
+ sage: F([1, 0, 2]) * F([2, 1, 0])
623
+ [1, 2, 0]
624
+ """
625
+ assert (self._parent is other._parent), "Parent mismatch"
626
+ if self._parent._action == "right":
627
+ return self._compose_internal_(other, self._parent)
628
+ return other._compose_internal_(self, self._parent)
629
+
630
+ def __pow__(self, n, dummy):
631
+ """
632
+ Return the ``n``-th power of ``self``.
633
+
634
+ INPUT:
635
+
636
+ - ``n`` -- positive integer
637
+ - ``dummy`` -- not used; must be set to ``None`` (for compatibility only)
638
+
639
+ EXAMPLES::
640
+
641
+ sage: fs = FiniteSetMaps(3)([1,0,2])
642
+ sage: fs^2
643
+ [0, 1, 2]
644
+ sage: fs^0
645
+ [0, 1, 2]
646
+ sage: fs.__pow__(2)
647
+ [0, 1, 2]
648
+ """
649
+ if dummy is not None:
650
+ raise RuntimeError("__pow__ dummy argument not used")
651
+ return generic_power(self, n)
652
+
653
+
654
+ cdef class FiniteSetEndoMap_Set(FiniteSetMap_Set):
655
+ """
656
+ Map from a set to itself.
657
+
658
+ .. SEEALSO:: :class:`FiniteSetMap_Set` for assumptions on the parent
659
+
660
+ TESTS::
661
+
662
+ sage: F = FiniteSetMaps(["a", "b", "c"])
663
+ sage: f = F.from_dict({"a": "b", "b": "a", "c": "b"}); f
664
+ map: a -> b, b -> a, c -> b
665
+ sage: TestSuite(f).run()
666
+ """
667
+
668
+ def __mul__(FiniteSetEndoMap_Set self, FiniteSetEndoMap_Set other):
669
+ """
670
+ TESTS::
671
+
672
+ sage: F = FiniteSetMaps(["a", "b", "c"])
673
+ sage: f = F.from_dict({"a": "b", "b": "a", "c": "b"}); f
674
+ map: a -> b, b -> a, c -> b
675
+ sage: g = F.from_dict({"a": "c", "b": "c", "c": "a"}); g
676
+ map: a -> c, b -> c, c -> a
677
+ sage: f * g
678
+ map: a -> b, b -> b, c -> b
679
+ sage: g * f
680
+ map: a -> c, b -> c, c -> c
681
+ """
682
+ assert (self._parent is other._parent), "Parent mismatch"
683
+ if self._parent._action == "right":
684
+ return self._compose_internal_(other, self._parent)
685
+ return other._compose_internal_(self, self._parent)
686
+
687
+ def __pow__(self, n, dummy):
688
+ """
689
+ Return the ``n``-th power of ``self``.
690
+
691
+ INPUT:
692
+
693
+ - ``n`` -- positive integer
694
+ - ``dummy`` -- not used; must be set to None (for compatibility only)
695
+
696
+ EXAMPLES::
697
+
698
+ sage: F = FiniteSetMaps(["a", "b", "c"])
699
+ sage: f = F.from_dict({"a": "b", "b": "a", "c": "b"}); f
700
+ map: a -> b, b -> a, c -> b
701
+ sage: f^2
702
+ map: a -> a, b -> b, c -> a
703
+ sage: f^3 == f
704
+ True
705
+ """
706
+ if dummy is not None:
707
+ raise RuntimeError("__pow__ dummy argument not used")
708
+ return generic_power(self, n)