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,739 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ r"""
3
+ Monoids
4
+ """
5
+ # ****************************************************************************
6
+ # Copyright (C) 2005 David Kohel <kohel@maths.usyd.edu>
7
+ # William Stein <wstein@math.ucsd.edu>
8
+ # 2008 Teresa Gomez-Diaz (CNRS) <Teresa.Gomez-Diaz@univ-mlv.fr>
9
+ # 2008-2009 Florent Hivert <florent.hivert at univ-rouen.fr>
10
+ # 2008-2014 Nicolas M. Thiery <nthiery at users.sf.net>
11
+ #
12
+ # Distributed under the terms of the GNU General Public License (GPL)
13
+ # https://www.gnu.org/licenses/
14
+ # *****************************************************************************
15
+
16
+ from sage.misc.cachefunc import cached_method
17
+ from sage.categories.category_with_axiom import CategoryWithAxiom
18
+ from sage.categories.semigroups import Semigroups
19
+ from sage.misc.lazy_import import LazyImport
20
+ from sage.categories.subquotients import SubquotientsCategory
21
+ from sage.categories.cartesian_product import CartesianProductsCategory
22
+ from sage.categories.algebra_functor import AlgebrasCategory
23
+ from sage.categories.with_realizations import WithRealizationsCategory
24
+ from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets
25
+ from sage.arith.power import generic_power
26
+
27
+
28
+ class Monoids(CategoryWithAxiom):
29
+ r"""
30
+ The category of (multiplicative) monoids.
31
+
32
+ A *monoid* is a unital :class:`semigroup <Semigroups>`, that is a
33
+ set endowed with a multiplicative binary operation `*` which is
34
+ associative and admits a unit (see :wikipedia:`Monoid`).
35
+
36
+ EXAMPLES::
37
+
38
+ sage: Monoids()
39
+ Category of monoids
40
+ sage: Monoids().super_categories()
41
+ [Category of semigroups, Category of unital magmas]
42
+ sage: Monoids().all_super_categories()
43
+ [Category of monoids,
44
+ Category of semigroups,
45
+ Category of unital magmas, Category of magmas,
46
+ Category of sets,
47
+ Category of sets with partial maps,
48
+ Category of objects]
49
+
50
+ sage: Monoids().axioms()
51
+ frozenset({'Associative', 'Unital'})
52
+ sage: Semigroups().Unital()
53
+ Category of monoids
54
+
55
+ sage: Monoids().example()
56
+ An example of a monoid: the free monoid generated by ('a', 'b', 'c', 'd')
57
+
58
+ TESTS::
59
+
60
+ sage: C = Monoids()
61
+ sage: TestSuite(C).run()
62
+
63
+ ::
64
+
65
+ sage: S = Monoids().example()
66
+ sage: x = S("aa")
67
+ sage: x^0, x^1, x^2, x^3, x^4, x^5
68
+ ('', 'aa', 'aaaa', 'aaaaaa', 'aaaaaaaa', 'aaaaaaaaaa')
69
+
70
+ Check for :issue:`31212`::
71
+
72
+ sage: R = IntegerModRing(15)
73
+ sage: R.submonoid([R.one()]).list() # needs sage.combinat
74
+ [1]
75
+ """
76
+ _base_category_class_and_axiom = (Semigroups, "Unital")
77
+
78
+ Finite = LazyImport('sage.categories.finite_monoids', 'FiniteMonoids', at_startup=True)
79
+ Inverse = LazyImport('sage.categories.groups', 'Groups', at_startup=True)
80
+
81
+ @staticmethod
82
+ def free(index_set=None, names=None, **kwds):
83
+ r"""
84
+ Return a free monoid on `n` generators or with the generators
85
+ indexed by a set `I`.
86
+
87
+ A free monoid is constructed by specifying either:
88
+
89
+ - the number of generators and/or the names of the generators
90
+ - the indexing set for the generators
91
+
92
+ INPUT:
93
+
94
+ - ``index_set`` -- (optional) an index set for the generators; if
95
+ an integer, then this represents `\{0, 1, \ldots, n-1\}`
96
+
97
+ - ``names`` -- string or list/tuple/iterable of strings
98
+ (default: ``'x'``); the generator names or name prefix
99
+
100
+ EXAMPLES::
101
+
102
+ sage: Monoids.free(index_set=ZZ)
103
+ Free monoid indexed by Integer Ring
104
+ sage: Monoids().free(ZZ)
105
+ Free monoid indexed by Integer Ring
106
+ sage: F.<x,y,z> = Monoids().free(); F
107
+ Free monoid indexed by {'x', 'y', 'z'}
108
+ """
109
+ if names is not None:
110
+ if isinstance(names, str):
111
+ from sage.rings.integer_ring import ZZ
112
+ if ',' not in names and index_set in ZZ:
113
+ names = [names + repr(i) for i in range(index_set)]
114
+ else:
115
+ names = names.split(',')
116
+ names = tuple(names)
117
+ if index_set is None:
118
+ index_set = names
119
+
120
+ from sage.monoids.indexed_free_monoid import IndexedFreeMonoid
121
+ return IndexedFreeMonoid(index_set, names=names, **kwds)
122
+
123
+ class ParentMethods:
124
+
125
+ def semigroup_generators(self):
126
+ """
127
+ Return the generators of ``self`` as a semigroup.
128
+
129
+ The generators of a monoid `M` as a semigroup are the generators
130
+ of `M` as a monoid and the unit.
131
+
132
+ EXAMPLES::
133
+
134
+ sage: M = Monoids().free([1,2,3])
135
+ sage: M.semigroup_generators()
136
+ Family (1, F[1], F[2], F[3])
137
+ """
138
+ G = self.monoid_generators()
139
+ from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets
140
+ if G not in FiniteEnumeratedSets():
141
+ raise NotImplementedError("currently only implemented for finitely generated monoids")
142
+ from sage.sets.family import Family
143
+ return Family((self.one(),) + tuple(G))
144
+
145
+ def prod(self, args):
146
+ r"""
147
+ n-ary product of elements of ``self``.
148
+
149
+ INPUT:
150
+
151
+ - ``args`` -- list (or iterable) of elements of ``self``
152
+
153
+ Returns the product of the elements in ``args``, as an element of
154
+ ``self``.
155
+
156
+ EXAMPLES::
157
+
158
+ sage: S = Monoids().example()
159
+ sage: S.prod([S('a'), S('b')])
160
+ 'ab'
161
+ """
162
+ from sage.misc.misc_c import prod
163
+ return prod(args, self.one())
164
+
165
+ def _test_prod(self, **options):
166
+ r"""
167
+ Run basic tests for the product method :meth:`prod` of ``self``.
168
+
169
+ See the documentation for :class:`TestSuite` for information on
170
+ further options.
171
+
172
+ INPUT:
173
+
174
+ - ``options`` -- any keyword arguments accepted by :meth:`_tester`
175
+
176
+ EXAMPLES:
177
+
178
+ By default, this method tests only the elements returned by
179
+ ``self.some_elements()``::
180
+
181
+ sage: S = Monoids().example()
182
+ sage: S._test_prod()
183
+
184
+ However, the elements tested can be customized with the
185
+ ``elements`` keyword argument::
186
+
187
+ sage: S._test_prod(elements = (S('a'), S('b')))
188
+ """
189
+ tester = self._tester(**options)
190
+ tester.assertEqual(self.prod([]), self.one())
191
+ for x in tester.some_elements():
192
+ tester.assertEqual(self.prod([x]), x)
193
+ tester.assertEqual(self.prod([x, x]), x**2)
194
+ tester.assertEqual(self.prod([x, x, x]), x**3)
195
+
196
+ def submonoid(self, generators, category=None):
197
+ r"""
198
+ Return the multiplicative submonoid generated by ``generators``.
199
+
200
+ INPUT:
201
+
202
+ - ``generators`` -- a finite family of elements of
203
+ ``self``, or a list, iterable, ... that can be converted
204
+ into one (see :class:`Family`).
205
+
206
+ - ``category`` -- a category
207
+
208
+ This is a shorthand for
209
+ :meth:`Semigroups.ParentMethods.subsemigroup` that
210
+ specifies that this is a submonoid, and in particular that
211
+ the unit is ``self.one()``.
212
+
213
+ EXAMPLES::
214
+
215
+ sage: R = IntegerModRing(15)
216
+ sage: M = R.submonoid([R(3), R(5)]); M # needs sage.combinat
217
+ A submonoid of (Ring of integers modulo 15) with 2 generators
218
+ sage: M.list() # needs sage.combinat
219
+ [1, 3, 5, 9, 0, 10, 12, 6]
220
+
221
+ Not the presence of the unit, unlike in::
222
+
223
+ sage: S = R.subsemigroup([R(3), R(5)]); S # needs sage.combinat
224
+ A subsemigroup of (Ring of integers modulo 15) with 2 generators
225
+ sage: S.list() # needs sage.combinat
226
+ [3, 5, 9, 0, 10, 12, 6]
227
+
228
+ This method is really a shorthand for subsemigroup::
229
+
230
+ sage: M2 = R.subsemigroup([R(3), R(5)], one=R.one()) # needs sage.combinat
231
+ sage: M2 is M # needs sage.combinat
232
+ True
233
+ """
234
+ return self.subsemigroup(generators, one=self.one())
235
+
236
+ class ElementMethods:
237
+ def _div_(left, right):
238
+ r"""
239
+ Default implementation of division, multiplying (on the right) by the inverse.
240
+
241
+ INPUT:
242
+
243
+ - ``left``, ``right`` -- two elements of the same unital monoid
244
+
245
+ .. SEEALSO:: :meth:`__div__`
246
+
247
+ EXAMPLES::
248
+
249
+ sage: # needs sage.combinat sage.groups
250
+ sage: G = FreeGroup(2)
251
+ sage: x0, x1 = G.group_generators()
252
+ sage: c1 = cartesian_product([x0, x1])
253
+ sage: c2 = cartesian_product([x1, x0])
254
+ sage: c1._div_(c2)
255
+ (x0*x1^-1, x1*x0^-1)
256
+
257
+ With this default implementation, division will fail as
258
+ soon as ``right`` is not invertible, even if ``right``
259
+ actually divides ``left``::
260
+
261
+ sage: x = cartesian_product([2, 0])
262
+ sage: y = cartesian_product([1, 1])
263
+ sage: x / y
264
+ (2, 0)
265
+ sage: y / x
266
+ Traceback (most recent call last):
267
+ ...
268
+ ZeroDivisionError: rational division by zero
269
+
270
+ TESTS::
271
+
272
+ sage: c1._div_.__module__ # needs sage.combinat sage.groups
273
+ 'sage.categories.monoids'
274
+ """
275
+ return left * ~right
276
+
277
+ def is_one(self):
278
+ r"""
279
+ Return whether ``self`` is the one of the monoid.
280
+
281
+ The default implementation is to compare with ``self.one()``.
282
+
283
+ TESTS::
284
+
285
+ sage: S = Monoids().example()
286
+ sage: S.one().is_one()
287
+ True
288
+ sage: S("aa").is_one()
289
+ False
290
+ """
291
+ return self == self.parent().one()
292
+
293
+ def _pow_int(self, n):
294
+ r"""
295
+ Return ``self`` to the `n`-th power.
296
+
297
+ INPUT:
298
+
299
+ - ``n`` -- nonnegative integer
300
+
301
+ EXAMPLES::
302
+
303
+ sage: S = Monoids().example()
304
+ sage: S("a") ^ 5
305
+ 'aaaaa'
306
+ """
307
+ return generic_power(self, n)
308
+
309
+ def _pow_naive(self, n):
310
+ r"""
311
+ Return ``self`` to the `n`-th power (naive implementation).
312
+
313
+ INPUT:
314
+
315
+ - ``n`` -- nonnegative integer
316
+
317
+ This naive implementation does not use binary
318
+ exponentiation; there are cases where this is actually
319
+ faster due to size explosion.
320
+
321
+ EXAMPLES::
322
+
323
+ sage: S = Monoids().example()
324
+ sage: x = S("aa")
325
+ sage: [x._pow_naive(i) for i in range(6)]
326
+ ['', 'aa', 'aaaa', 'aaaaaa', 'aaaaaaaa', 'aaaaaaaaaa']
327
+ """
328
+ if not n:
329
+ return self.parent().one()
330
+ result = self
331
+ for i in range(n - 1):
332
+ result *= self
333
+ return result
334
+
335
+ def powers(self, n):
336
+ r"""
337
+ Return the list `[x^0, x^1, \ldots, x^{n-1}]`.
338
+
339
+ EXAMPLES::
340
+
341
+ sage: A = Matrix([[1, 1], [-1, 0]]) # needs sage.modules
342
+ sage: A.powers(6) # needs sage.modules
343
+ [
344
+ [1 0] [ 1 1] [ 0 1] [-1 0] [-1 -1] [ 0 -1]
345
+ [0 1], [-1 0], [-1 -1], [ 0 -1], [ 1 0], [ 1 1]
346
+ ]
347
+ """
348
+ if n < 0:
349
+ raise ValueError("negative number of powers requested")
350
+ elif n == 0:
351
+ return []
352
+ x = self.parent().one()
353
+ l = [x]
354
+ for i in range(n - 1):
355
+ x = x * self
356
+ l.append(x)
357
+ return l
358
+
359
+ def __invert__(self):
360
+ r"""
361
+ Return the multiplicative inverse of ``self``.
362
+
363
+ There is no default implementation, to avoid conflict
364
+ with the default implementation of ``_div_``.
365
+
366
+ EXAMPLES::
367
+
368
+ sage: A = Matrix([[1, 0], [1, 1]]) # needs sage.modules
369
+ sage: ~A # needs sage.modules
370
+ [ 1 0]
371
+ [-1 1]
372
+ """
373
+ raise NotImplementedError("please implement __invert__")
374
+
375
+ def inverse(self):
376
+ """
377
+ Return the multiplicative inverse of ``self``.
378
+
379
+ This is an alias for inversion, which can also be invoked
380
+ by ``~x`` for an element ``x``.
381
+
382
+ Nota Bene: Element classes should implement ``__invert__`` only.
383
+
384
+ EXAMPLES::
385
+
386
+ sage: AA(sqrt(~2)).inverse() # needs sage.rings.number_field sage.symbolic
387
+ 1.414213562373095?
388
+ """
389
+ # Nota Bene: Element classes should implement ``__invert__`` only.
390
+ return self.__invert__()
391
+
392
+ class Commutative(CategoryWithAxiom):
393
+ r"""
394
+ Category of commutative (abelian) monoids.
395
+
396
+ A monoid `M` is *commutative* if `xy = yx` for all `x,y \in M`.
397
+ """
398
+ @staticmethod
399
+ def free(index_set=None, names=None, **kwds):
400
+ r"""
401
+ Return a free abelian monoid on `n` generators or with
402
+ the generators indexed by a set `I`.
403
+
404
+ A free monoid is constructed by specifying either:
405
+
406
+ - the number of generators and/or the names of the generators, or
407
+ - the indexing set for the generators.
408
+
409
+ INPUT:
410
+
411
+ - ``index_set`` -- (optional) an index set for the generators; if
412
+ an integer, then this represents `\{0, 1, \ldots, n-1\}`
413
+
414
+ - ``names`` -- string or list/tuple/iterable of strings
415
+ (default: ``'x'``); the generator names or name prefix
416
+
417
+ EXAMPLES::
418
+
419
+ sage: Monoids.Commutative.free(index_set=ZZ)
420
+ Free abelian monoid indexed by Integer Ring
421
+ sage: Monoids().Commutative().free(ZZ)
422
+ Free abelian monoid indexed by Integer Ring
423
+ sage: F.<x,y,z> = Monoids().Commutative().free(); F
424
+ Free abelian monoid indexed by {'x', 'y', 'z'}
425
+ """
426
+ if names is not None:
427
+ if isinstance(names, str):
428
+ from sage.rings.integer_ring import ZZ
429
+ if ',' not in names and index_set in ZZ:
430
+ names = [names + repr(i) for i in range(index_set)]
431
+ else:
432
+ names = names.split(',')
433
+ names = tuple(names)
434
+ if index_set is None:
435
+ index_set = names
436
+
437
+ from sage.monoids.indexed_free_monoid import IndexedFreeAbelianMonoid
438
+ return IndexedFreeAbelianMonoid(index_set, names=names, **kwds)
439
+
440
+ class WithRealizations(WithRealizationsCategory):
441
+
442
+ class ParentMethods:
443
+
444
+ def one(self):
445
+ r"""
446
+ Return the unit of this monoid.
447
+
448
+ This default implementation returns the unit of the
449
+ realization of ``self`` given by
450
+ :meth:`~Sets.WithRealizations.ParentMethods.a_realization`.
451
+
452
+ EXAMPLES::
453
+
454
+ sage: A = Sets().WithRealizations().example(); A # needs sage.modules
455
+ The subset algebra of {1, 2, 3} over Rational Field
456
+ sage: A.one.__module__ # needs sage.modules
457
+ 'sage.categories.monoids'
458
+ sage: A.one() # needs sage.modules
459
+ F[{}]
460
+
461
+ TESTS::
462
+
463
+ sage: A.one() is A.a_realization().one() # needs sage.modules
464
+ True
465
+ sage: A._test_one() # needs sage.modules
466
+ """
467
+ return self.a_realization().one()
468
+
469
+ class Subquotients(SubquotientsCategory):
470
+
471
+ class ParentMethods:
472
+
473
+ def one(self):
474
+ """
475
+ Return the multiplicative unit of this monoid,
476
+ obtained by retracting that of the ambient monoid.
477
+
478
+ EXAMPLES::
479
+
480
+ sage: S = Monoids().Subquotients().example() # todo: not implemented
481
+ sage: S.one() # todo: not implemented
482
+ """
483
+ return self.retract(self.ambient().one())
484
+
485
+ class Algebras(AlgebrasCategory):
486
+
487
+ def extra_super_categories(self):
488
+ """
489
+ The algebra of a monoid is a bialgebra and a monoid.
490
+
491
+ EXAMPLES::
492
+
493
+ sage: C = Monoids().Algebras(QQ)
494
+ sage: C.extra_super_categories()
495
+ [Category of bialgebras over Rational Field,
496
+ Category of monoids]
497
+ sage: Monoids().Algebras(QQ).super_categories()
498
+ [Category of bialgebras with basis over Rational Field,
499
+ Category of semigroup algebras over Rational Field,
500
+ Category of unital magma algebras over Rational Field]
501
+ """
502
+ from sage.categories.bialgebras import Bialgebras
503
+ return [Bialgebras(self.base_ring()), Monoids()]
504
+
505
+ class ParentMethods:
506
+
507
+ def is_field(self, proof=True) -> bool:
508
+ r"""
509
+ Return ``True`` if ``self`` is a field.
510
+
511
+ For a monoid algebra `R S` this is always false unless
512
+ `S` is trivial and the base ring `R` is a field.
513
+
514
+ EXAMPLES::
515
+
516
+ sage: SymmetricGroup(1).algebra(QQ).is_field() # needs sage.combinat sage.groups
517
+ True
518
+ sage: SymmetricGroup(1).algebra(ZZ).is_field() # needs sage.combinat sage.groups
519
+ False
520
+ sage: SymmetricGroup(2).algebra(QQ).is_field() # needs sage.combinat sage.groups
521
+ False
522
+ """
523
+ if not self.base_ring().is_field(proof):
524
+ return False
525
+ return self.basis().keys().cardinality() == 1
526
+
527
+ @cached_method
528
+ def one_basis(self):
529
+ """
530
+ Return the unit of the monoid, which indexes the unit of
531
+ this algebra, as per
532
+ :meth:`AlgebrasWithBasis.ParentMethods.one_basis()
533
+ <sage.categories.algebras_with_basis.AlgebrasWithBasis.ParentMethods.one_basis>`.
534
+
535
+ EXAMPLES::
536
+
537
+ sage: # needs sage.modules
538
+ sage: A = Monoids().example().algebra(ZZ)
539
+ sage: A.one_basis()
540
+ ''
541
+ sage: A.one()
542
+ B['']
543
+ sage: A(3)
544
+ 3*B['']
545
+ """
546
+ return self.basis().keys().one()
547
+
548
+ @cached_method
549
+ def algebra_generators(self):
550
+ r"""
551
+ Return generators for this algebra.
552
+
553
+ For a monoid algebra, the algebra generators are built
554
+ from the monoid generators if available and from the
555
+ semigroup generators otherwise.
556
+
557
+ .. SEEALSO::
558
+
559
+ - :meth:`Semigroups.Algebras.ParentMethods.algebra_generators`
560
+ - :meth:`MagmaticAlgebras.ParentMethods.algebra_generators()
561
+ <.magmatic_algebras.MagmaticAlgebras.ParentMethods.algebra_generators>`.
562
+
563
+ EXAMPLES::
564
+
565
+ sage: M = Monoids().example(); M
566
+ An example of a monoid:
567
+ the free monoid generated by ('a', 'b', 'c', 'd')
568
+ sage: M.monoid_generators()
569
+ Finite family {'a': 'a', 'b': 'b', 'c': 'c', 'd': 'd'}
570
+ sage: M.algebra(ZZ).algebra_generators() # needs sage.modules
571
+ Finite family {'a': B['a'], 'b': B['b'], 'c': B['c'], 'd': B['d']}
572
+
573
+ sage: Z12 = Monoids().Finite().example(); Z12
574
+ An example of a finite multiplicative monoid:
575
+ the integers modulo 12
576
+ sage: Z12.monoid_generators()
577
+ Traceback (most recent call last):
578
+ ...
579
+ AttributeError: 'IntegerModMonoid_with_category' object
580
+ has no attribute 'monoid_generators'...
581
+ sage: Z12.semigroup_generators()
582
+ Family (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
583
+ sage: Z12.algebra(QQ).algebra_generators() # needs sage.modules
584
+ Family (B[0], B[1], B[2], B[3], B[4], B[5], B[6], B[7], B[8], B[9], B[10], B[11])
585
+
586
+
587
+ sage: A10 = AlternatingGroup(10) # needs sage.groups
588
+ sage: GroupAlgebras(QQ).example(A10).algebra_generators() # needs sage.groups sage.modules
589
+ Family ((1,2,3,4,5,6,7,8,9), (8,9,10))
590
+
591
+ sage: A = DihedralGroup(3).algebra(QQ); A # needs sage.groups sage.modules
592
+ Algebra of Dihedral group of order 6 as a permutation group
593
+ over Rational Field
594
+ sage: A.algebra_generators() # needs sage.groups sage.modules
595
+ Family ((1,2,3), (1,3))
596
+ """
597
+ monoid = self.basis().keys()
598
+ try:
599
+ generators = monoid.monoid_generators()
600
+ except AttributeError:
601
+ generators = monoid.semigroup_generators()
602
+ return generators.map(self.monomial)
603
+
604
+ class ElementMethods:
605
+
606
+ def is_central(self):
607
+ r"""
608
+ Return whether the element ``self`` is central.
609
+
610
+ EXAMPLES::
611
+
612
+ sage: SG4 = SymmetricGroupAlgebra(ZZ,4) # needs sage.combinat sage.groups
613
+ sage: SG4(1).is_central() # needs sage.combinat sage.groups
614
+ True
615
+ sage: SG4(Permutation([1,3,2,4])).is_central() # needs sage.combinat sage.groups
616
+ False
617
+
618
+ sage: A = GroupAlgebras(QQ).example(); A # needs sage.combinat sage.groups
619
+ Algebra of Dihedral group of order 8
620
+ as a permutation group over Rational Field
621
+ sage: sum(A.basis()).is_central() # needs sage.combinat sage.groups
622
+ True
623
+ """
624
+ return all(i * self == self * i
625
+ for i in self.parent().algebra_generators())
626
+
627
+ class CartesianProducts(CartesianProductsCategory):
628
+ """
629
+ The category of monoids constructed as Cartesian products of monoids.
630
+
631
+ This construction gives the direct product of monoids. See
632
+ :wikipedia:`Direct_product` for more information.
633
+ """
634
+ def extra_super_categories(self):
635
+ """
636
+ A Cartesian product of monoids is endowed with a natural
637
+ group structure.
638
+
639
+ EXAMPLES::
640
+
641
+ sage: C = Monoids().CartesianProducts()
642
+ sage: C.extra_super_categories()
643
+ [Category of monoids]
644
+ sage: sorted(C.super_categories(), key=str)
645
+ [Category of Cartesian products of semigroups,
646
+ Category of Cartesian products of unital magmas,
647
+ Category of monoids]
648
+ """
649
+ return [self.base_category()]
650
+
651
+ class ParentMethods:
652
+ @cached_method
653
+ def monoid_generators(self):
654
+ """
655
+ Return the generators of ``self``.
656
+
657
+ EXAMPLES::
658
+
659
+ sage: # needs sage.combinat sage.groups
660
+ sage: M = Monoids.free([1, 2, 3])
661
+ sage: N = Monoids.free(['a', 'b'])
662
+ sage: C = cartesian_product([M, N])
663
+ sage: C.monoid_generators()
664
+ Family ((F[1], 1), (F[2], 1), (F[3], 1),
665
+ (1, F['a']), (1, F['b']))
666
+
667
+ An example with an infinitely generated group (a better output
668
+ is needed)::
669
+
670
+ sage: N = Monoids.free(ZZ)
671
+ sage: C = cartesian_product([M, N]) # needs sage.combinat sage.groups
672
+ sage: C.monoid_generators() # needs sage.combinat sage.groups
673
+ Lazy family (gen(i))_{i in The Cartesian product of (...)}
674
+ """
675
+ F = self.cartesian_factors()
676
+ ids = tuple(M.one() for M in F)
677
+
678
+ def lift(i, gen):
679
+ cur = list(ids)
680
+ cur[i] = gen
681
+ return self._cartesian_product_of_elements(cur)
682
+ from sage.sets.family import Family
683
+
684
+ # Finitely generated
685
+ cat = FiniteEnumeratedSets()
686
+ if all(M.monoid_generators() in cat or
687
+ isinstance(M.monoid_generators(), (tuple, list))
688
+ for M in F):
689
+ ret = [lift(i, gen) for i, M in enumerate(F)
690
+ for gen in M.monoid_generators()]
691
+ return Family(ret)
692
+
693
+ # Infinitely generated
694
+ # This does not return a good output, but it is "correct"
695
+ # TODO: Figure out a better way to do things
696
+ from sage.categories.cartesian_product import cartesian_product
697
+ gens_prod = cartesian_product([Family(M.monoid_generators(),
698
+ lambda g: (i, g))
699
+ for i, M in enumerate(F)])
700
+ return Family(gens_prod, lift, name='gen')
701
+
702
+ class ElementMethods:
703
+ def multiplicative_order(self):
704
+ r"""
705
+ Return the multiplicative order of this element.
706
+
707
+ EXAMPLES::
708
+
709
+ sage: # needs sage.groups sage.modules
710
+ sage: G1 = SymmetricGroup(3)
711
+ sage: G2 = SL(2, 3)
712
+ sage: G = cartesian_product([G1, G2])
713
+ sage: G((G1.gen(0), G2.gen(1))).multiplicative_order()
714
+ 12
715
+ """
716
+ from sage.rings.infinity import Infinity
717
+ orders = [x.multiplicative_order() for x in self.cartesian_factors()]
718
+ if any(o is Infinity for o in orders):
719
+ return Infinity
720
+ else:
721
+ from sage.arith.functions import LCM_list
722
+ return LCM_list(orders)
723
+
724
+ def __invert__(self):
725
+ """
726
+ Return the inverse.
727
+
728
+ EXAMPLES::
729
+
730
+ sage: # needs sage.groups sage.modules
731
+ sage: a1 = Permutation((4,2,1,3))
732
+ sage: a2 = SL(2, 3)([2,1,1,1])
733
+ sage: h = cartesian_product([a1, a2])
734
+ sage: ~h
735
+ ([2, 4, 1, 3], [1 2]
736
+ [2 2])
737
+ """
738
+ build = self.parent()._cartesian_product_of_elements
739
+ return build([x.__invert__() for x in self.cartesian_factors()])