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,1189 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ r"""
3
+ Magmas
4
+ """
5
+ # ****************************************************************************
6
+ # Copyright (C) 2010 Nicolas M. Thiery <nthiery at users.sf.net>
7
+ #
8
+ # Distributed under the terms of the GNU General Public License (GPL)
9
+ # https://www.gnu.org/licenses/
10
+ # *****************************************************************************
11
+
12
+ from sage.misc.cachefunc import cached_method
13
+ from sage.misc.lazy_import import LazyImport
14
+ from sage.misc.abstract_method import abstract_method, AbstractMethod
15
+ from sage.categories.subquotients import SubquotientsCategory
16
+ from sage.categories.cartesian_product import CartesianProductsCategory
17
+ from sage.categories.algebra_functor import AlgebrasCategory
18
+ from sage.categories.category_with_axiom import CategoryWithAxiom
19
+ from sage.categories.category_singleton import Category_singleton
20
+ import sage.categories.coercion_methods
21
+ from sage.categories.sets_cat import Sets
22
+ from sage.categories.realizations import RealizationsCategory
23
+ from sage.cpython.getattr import raw_getattr
24
+
25
+
26
+ class Magmas(Category_singleton):
27
+ """
28
+ The category of (multiplicative) magmas.
29
+
30
+ A magma is a set with a binary operation `*`.
31
+
32
+ EXAMPLES::
33
+
34
+ sage: Magmas()
35
+ Category of magmas
36
+ sage: Magmas().super_categories()
37
+ [Category of sets]
38
+ sage: Magmas().all_super_categories()
39
+ [Category of magmas, Category of sets,
40
+ Category of sets with partial maps, Category of objects]
41
+
42
+ The following axioms are defined by this category::
43
+
44
+ sage: Magmas().Associative()
45
+ Category of semigroups
46
+ sage: Magmas().Unital()
47
+ Category of unital magmas
48
+ sage: Magmas().Commutative()
49
+ Category of commutative magmas
50
+ sage: Magmas().Unital().Inverse()
51
+ Category of inverse unital magmas
52
+ sage: Magmas().Associative()
53
+ Category of semigroups
54
+ sage: Magmas().Associative().Unital()
55
+ Category of monoids
56
+ sage: Magmas().Associative().Unital().Inverse()
57
+ Category of groups
58
+
59
+ TESTS::
60
+
61
+ sage: C = Magmas()
62
+ sage: TestSuite(C).run()
63
+ """
64
+ def super_categories(self):
65
+ """
66
+ EXAMPLES::
67
+
68
+ sage: Magmas().super_categories()
69
+ [Category of sets]
70
+ """
71
+ return [Sets()]
72
+
73
+ def __lean_init__(self):
74
+ return 'has_mul'
75
+
76
+ class SubcategoryMethods:
77
+
78
+ @cached_method
79
+ def Associative(self):
80
+ r"""
81
+ Return the full subcategory of the associative objects
82
+ of ``self``.
83
+
84
+ A (multiplicative) :class:`magma Magmas` `M` is
85
+ *associative* if, for all `x,y,z\in M`,
86
+
87
+ .. MATH:: x * (y * z) = (x * y) * z
88
+
89
+ .. SEEALSO:: :wikipedia:`Associative_property`
90
+
91
+ EXAMPLES::
92
+
93
+ sage: Magmas().Associative()
94
+ Category of semigroups
95
+
96
+ TESTS::
97
+
98
+ sage: TestSuite(Magmas().Associative()).run()
99
+ sage: Rings().Associative.__module__
100
+ 'sage.categories.magmas'
101
+ """
102
+ return self._with_axiom('Associative')
103
+
104
+ @cached_method
105
+ def Commutative(self):
106
+ r"""
107
+ Return the full subcategory of the commutative objects
108
+ of ``self``.
109
+
110
+ A (multiplicative) :class:`magma Magmas` `M` is
111
+ *commutative* if, for all `x,y\in M`,
112
+
113
+ .. MATH:: x * y = y * x
114
+
115
+ .. SEEALSO:: :wikipedia:`Commutative_property`
116
+
117
+ EXAMPLES::
118
+
119
+ sage: Magmas().Commutative()
120
+ Category of commutative magmas
121
+ sage: Monoids().Commutative()
122
+ Category of commutative monoids
123
+
124
+ TESTS::
125
+
126
+ sage: TestSuite(Magmas().Commutative()).run()
127
+ sage: Rings().Commutative.__module__
128
+ 'sage.categories.magmas'
129
+ """
130
+ return self._with_axiom('Commutative')
131
+
132
+ @cached_method
133
+ def Unital(self):
134
+ r"""
135
+ Return the subcategory of the unital objects of ``self``.
136
+
137
+ A (multiplicative) :class:`magma Magmas` `M` is *unital*
138
+ if it admits an element `1`, called *unit*, such that for
139
+ all `x\in M`,
140
+
141
+ .. MATH:: 1 * x = x * 1 = x
142
+
143
+ This element is necessarily unique, and should be provided
144
+ as ``M.one()``.
145
+
146
+ .. SEEALSO:: :wikipedia:`Unital_magma#unital`
147
+
148
+ EXAMPLES::
149
+
150
+ sage: Magmas().Unital()
151
+ Category of unital magmas
152
+ sage: Semigroups().Unital()
153
+ Category of monoids
154
+ sage: Monoids().Unital()
155
+ Category of monoids
156
+ sage: from sage.categories.associative_algebras import AssociativeAlgebras
157
+ sage: AssociativeAlgebras(QQ).Unital()
158
+ Category of algebras over Rational Field
159
+
160
+ TESTS::
161
+
162
+ sage: TestSuite(Magmas().Unital()).run()
163
+ sage: Semigroups().Unital.__module__
164
+ 'sage.categories.magmas'
165
+ """
166
+ return self._with_axiom("Unital")
167
+
168
+ @cached_method
169
+ def FinitelyGeneratedAsMagma(self):
170
+ r"""
171
+ Return the subcategory of the objects of ``self`` that are
172
+ endowed with a distinguished finite set of
173
+ (multiplicative) magma generators.
174
+
175
+ A set `S` of elements of a multiplicative magma form a
176
+ *set of generators* if any element of the magma can be
177
+ expressed recursively from elements of `S` and products
178
+ thereof.
179
+
180
+ It is not imposed that morphisms shall preserve the
181
+ distinguished set of generators; hence this is a full
182
+ subcategory.
183
+
184
+ .. SEEALSO:: :wikipedia:`Unital_magma#unital`
185
+
186
+ EXAMPLES::
187
+
188
+ sage: Magmas().FinitelyGeneratedAsMagma()
189
+ Category of finitely generated magmas
190
+
191
+ Being finitely generated does depend on the structure: for
192
+ a ring, being finitely generated as a magma, as an
193
+ additive magma, or as a ring are different concepts. Hence
194
+ the name of this axiom is explicit::
195
+
196
+ sage: Rings().FinitelyGeneratedAsMagma()
197
+ Category of finitely generated as magma enumerated rings
198
+
199
+ On the other hand, it does not depend on the
200
+ multiplicative structure: for example a group is finitely
201
+ generated if and only if it is finitely generated as a
202
+ magma. A short hand is provided when there is no
203
+ ambiguity, and the output tries to reflect that::
204
+
205
+ sage: Semigroups().FinitelyGenerated()
206
+ Category of finitely generated semigroups
207
+ sage: Groups().FinitelyGenerated()
208
+ Category of finitely generated enumerated groups
209
+
210
+ sage: Semigroups().FinitelyGenerated().axioms()
211
+ frozenset({'Associative', 'Enumerated', 'FinitelyGeneratedAsMagma'})
212
+
213
+ Note that the set of generators may depend on the actual
214
+ category; for example, in a group, one can often use less
215
+ generators since it is allowed to take inverses.
216
+
217
+ TESTS::
218
+
219
+ sage: TestSuite(Magmas().FinitelyGeneratedAsMagma()).run()
220
+ sage: Semigroups().FinitelyGeneratedAsMagma.__module__
221
+ 'sage.categories.magmas'
222
+ """
223
+ return self._with_axiom("FinitelyGeneratedAsMagma")
224
+
225
+ @cached_method
226
+ def FinitelyGenerated(self):
227
+ r"""
228
+ Return the subcategory of the objects of ``self`` that are
229
+ endowed with a distinguished finite set of
230
+ (multiplicative) magma generators.
231
+
232
+ EXAMPLES:
233
+
234
+ This is a shorthand for :meth:`FinitelyGeneratedAsMagma`,
235
+ which see::
236
+
237
+ sage: Magmas().FinitelyGenerated()
238
+ Category of finitely generated magmas
239
+ sage: Semigroups().FinitelyGenerated()
240
+ Category of finitely generated semigroups
241
+ sage: Groups().FinitelyGenerated()
242
+ Category of finitely generated enumerated groups
243
+
244
+ An error is raised if this is ambiguous::
245
+
246
+ sage: (Magmas() & AdditiveMagmas()).FinitelyGenerated()
247
+ Traceback (most recent call last):
248
+ ...
249
+ ValueError: FinitelyGenerated is ambiguous for
250
+ Join of Category of magmas and Category of additive magmas.
251
+ Please use explicitly one of the FinitelyGeneratedAsXXX methods
252
+
253
+ .. NOTE::
254
+
255
+ Checking that there is no ambiguity currently assumes
256
+ that all the other "finitely generated" axioms involve
257
+ an additive structure. As of Sage 6.4, this is
258
+ correct.
259
+
260
+ The use of this shorthand should be reserved for casual
261
+ interactive use or when there is no risk of ambiguity.
262
+ """
263
+ from sage.categories.additive_magmas import AdditiveMagmas
264
+ if self.is_subcategory(AdditiveMagmas()):
265
+ raise ValueError("FinitelyGenerated is ambiguous for {}.\nPlease use explicitly one of the FinitelyGeneratedAsXXX methods".format(self))
266
+ return self.FinitelyGeneratedAsMagma()
267
+
268
+ @cached_method
269
+ def Distributive(self):
270
+ """
271
+ Return the full subcategory of the objects of ``self``
272
+ where `*` is distributive on `+`.
273
+
274
+ INPUT:
275
+
276
+ - ``self`` -- a subcategory of :class:`Magmas`
277
+ and :class:`AdditiveMagmas`
278
+
279
+ Given that Sage does not yet know that the category
280
+ :class:`MagmasAndAdditiveMagmas` is the intersection of
281
+ the categories :class:`Magmas` and
282
+ :class:`AdditiveMagmas`, the method
283
+ :meth:`MagmasAndAdditiveMagmas.SubcategoryMethods.Distributive`
284
+ is not available, as would be desirable, for this intersection.
285
+
286
+ This method is a workaround. It checks that ``self`` is a
287
+ subcategory of both :class:`Magmas` and
288
+ :class:`AdditiveMagmas` and upgrades it to a subcategory
289
+ of :class:`MagmasAndAdditiveMagmas` before applying the
290
+ axiom. It complains otherwise, since the ``Distributive``
291
+ axiom does not make sense for a plain magma.
292
+
293
+ EXAMPLES::
294
+
295
+ sage: (Magmas() & AdditiveMagmas()).Distributive()
296
+ Category of distributive magmas and additive magmas
297
+ sage: (Monoids() & CommutativeAdditiveGroups()).Distributive()
298
+ Category of rings
299
+
300
+ sage: Magmas().Distributive()
301
+ Traceback (most recent call last):
302
+ ...
303
+ ValueError: The distributive axiom only makes sense on a magma
304
+ which is simultaneously an additive magma
305
+ sage: Semigroups().Distributive()
306
+ Traceback (most recent call last):
307
+ ...
308
+ ValueError: The distributive axiom only makes sense on a magma
309
+ which is simultaneously an additive magma
310
+
311
+ TESTS::
312
+
313
+ sage: Semigroups().Distributive.__module__
314
+ 'sage.categories.magmas'
315
+ sage: Rings().Distributive.__module__
316
+ 'sage.categories.magmas_and_additive_magmas'
317
+ """
318
+ from .additive_magmas import AdditiveMagmas
319
+ if not self.is_subcategory(AdditiveMagmas()):
320
+ raise ValueError("The distributive axiom only makes sense on a magma which is simultaneously an additive magma")
321
+ from .magmas_and_additive_magmas import MagmasAndAdditiveMagmas
322
+ return (self & MagmasAndAdditiveMagmas()).Distributive()
323
+
324
+ def JTrivial(self):
325
+ r"""
326
+ Return the full subcategory of the `J`-trivial objects of ``self``.
327
+
328
+ This axiom is in fact only meaningful for
329
+ :class:`semigroups <Semigroups>`. This stub definition is
330
+ here as a workaround for :issue:`20515`, in order to define
331
+ the `J`-trivial axiom as the intersection of the `L` and
332
+ `R`-trivial axioms.
333
+
334
+ .. SEEALSO:: :meth:`Semigroups.SubcategoryMethods.JTrivial`
335
+
336
+ TESTS::
337
+
338
+ sage: Magmas().JTrivial()
339
+ Category of j trivial magmas
340
+ sage: C = Semigroups().RTrivial() & Semigroups().LTrivial()
341
+ sage: C is Semigroups().JTrivial()
342
+ True
343
+ """
344
+ return self._with_axiom('JTrivial')
345
+
346
+ Associative = LazyImport('sage.categories.semigroups', 'Semigroups', at_startup=True)
347
+ FinitelyGeneratedAsMagma = LazyImport('sage.categories.finitely_generated_magmas', 'FinitelyGeneratedMagmas')
348
+
349
+ class JTrivial(CategoryWithAxiom):
350
+ # Workaround for #20515; see also Magmas.SubcategoryMethods.JTrivial
351
+ pass
352
+
353
+ class Algebras(AlgebrasCategory):
354
+
355
+ def extra_super_categories(self):
356
+ """
357
+ EXAMPLES::
358
+
359
+ sage: MCA = Magmas().Commutative().Algebras(QQ)
360
+ sage: MCA.extra_super_categories()
361
+ [Category of commutative magmas]
362
+
363
+ This implements the fact that the algebra of a commutative
364
+ magma is commutative::
365
+
366
+ sage: MCA.super_categories()
367
+ [Category of magma algebras over Rational Field,
368
+ Category of commutative magmas]
369
+
370
+ In particular, commutative monoid algebras are
371
+ commutative algebras::
372
+
373
+ sage: MoCA = Monoids().Commutative().Algebras(QQ)
374
+ sage: MoCA.is_subcategory(Algebras(QQ).Commutative())
375
+ True
376
+ """
377
+ from sage.categories.magmatic_algebras import MagmaticAlgebras
378
+ return [MagmaticAlgebras(self.base_ring())]
379
+
380
+ class ParentMethods:
381
+
382
+ def is_field(self, proof=True):
383
+ r"""
384
+ Return ``True`` if ``self`` is a field.
385
+
386
+ For a magma algebra `R S` this is always false unless
387
+ `S` is trivial and the base ring `R` is a field.
388
+
389
+ EXAMPLES::
390
+
391
+ sage: SymmetricGroup(1).algebra(QQ).is_field() # needs sage.combinat sage.groups
392
+ True
393
+ sage: SymmetricGroup(1).algebra(ZZ).is_field() # needs sage.combinat sage.groups
394
+ False
395
+ sage: SymmetricGroup(2).algebra(QQ).is_field() # needs sage.combinat sage.groups
396
+ False
397
+ sage: Magmas().example().algebra(QQ).is_field() # needs sage.combinat sage.modules
398
+ False
399
+
400
+ """
401
+ if not self.base_ring().is_field(proof):
402
+ return False
403
+ return self.basis().keys().cardinality() == 1
404
+
405
+ class Commutative(CategoryWithAxiom):
406
+
407
+ class ParentMethods:
408
+ def is_commutative(self) -> bool:
409
+ """
410
+ Return ``True``, since commutative magmas are commutative.
411
+
412
+ EXAMPLES::
413
+
414
+ sage: Parent(QQ, category=CommutativeRings()).is_commutative()
415
+ True
416
+ """
417
+ return True
418
+
419
+ class Algebras(AlgebrasCategory):
420
+
421
+ def extra_super_categories(self):
422
+ """
423
+ EXAMPLES::
424
+
425
+ sage: MCA = Magmas().Commutative().Algebras(QQ)
426
+ sage: MCA.extra_super_categories()
427
+ [Category of commutative magmas]
428
+
429
+ This implements the fact that the algebra of a commutative
430
+ magma is commutative::
431
+
432
+ sage: MCA.super_categories()
433
+ [Category of magma algebras over Rational Field,
434
+ Category of commutative magmas]
435
+
436
+ In particular, commutative monoid algebras are
437
+ commutative algebras::
438
+
439
+ sage: MoCA = Monoids().Commutative().Algebras(QQ)
440
+ sage: MoCA.is_subcategory(Algebras(QQ).Commutative())
441
+ True
442
+ """
443
+ return [Magmas().Commutative()]
444
+
445
+ class CartesianProducts(CartesianProductsCategory):
446
+ def extra_super_categories(self):
447
+ r"""
448
+ Implement the fact that a Cartesian product of commutative
449
+ additive magmas is still a commutative additive magmas.
450
+
451
+ EXAMPLES::
452
+
453
+ sage: C = Magmas().Commutative().CartesianProducts()
454
+ sage: C.extra_super_categories()
455
+ [Category of commutative magmas]
456
+ sage: C.axioms()
457
+ frozenset({'Commutative'})
458
+ """
459
+ return [Magmas().Commutative()]
460
+
461
+ class Unital(CategoryWithAxiom):
462
+
463
+ def additional_structure(self):
464
+ r"""
465
+ Return ``self``.
466
+
467
+ Indeed, the category of unital magmas defines an
468
+ additional structure, namely the unit of the magma which
469
+ shall be preserved by morphisms.
470
+
471
+ .. SEEALSO:: :meth:`Category.additional_structure`
472
+
473
+ EXAMPLES::
474
+
475
+ sage: Magmas().Unital().additional_structure()
476
+ Category of unital magmas
477
+ """
478
+ return self
479
+
480
+ class ParentMethods:
481
+ @cached_method
482
+ def one(self):
483
+ r"""
484
+ Return the unit of the monoid, that is the unique neutral
485
+ element for `*`.
486
+
487
+ .. NOTE::
488
+
489
+ The default implementation is to coerce `1` into ``self``.
490
+ It is recommended to override this method because the
491
+ coercion from the integers:
492
+
493
+ - is not always meaningful (except for `1`);
494
+ - often uses ``self.one()``.
495
+
496
+ EXAMPLES::
497
+
498
+ sage: M = Monoids().example(); M
499
+ An example of a monoid:
500
+ the free monoid generated by ('a', 'b', 'c', 'd')
501
+ sage: M.one()
502
+ ''
503
+ """
504
+ return self(1)
505
+
506
+ def _test_one(self, **options):
507
+ r"""
508
+ Test that ``self.one()`` is an element of ``self`` and is
509
+ neutral for the operation ``*``.
510
+
511
+ INPUT:
512
+
513
+ - ``options`` -- any keyword arguments accepted by :meth:`_tester`
514
+
515
+ EXAMPLES:
516
+
517
+ By default, this method tests only the elements returned by
518
+ ``self.some_elements()``::
519
+
520
+ sage: S = Monoids().example()
521
+ sage: S._test_one()
522
+
523
+ However, the elements tested can be customized with the
524
+ ``elements`` keyword argument::
525
+
526
+ sage: S._test_one(elements = (S('a'), S('b')))
527
+
528
+ See the documentation for :class:`TestSuite` for more information.
529
+ """
530
+ tester = self._tester(**options)
531
+ one = self.one()
532
+ tester.assertTrue(self.is_parent_of(one))
533
+ for x in tester.some_elements():
534
+ tester.assertEqual(x * one, x)
535
+ tester.assertEqual(one * x, x)
536
+ # Check that one is immutable if it looks like we can test this
537
+ if hasattr(one, "is_immutable"):
538
+ tester.assertTrue(one.is_immutable())
539
+ if hasattr(one, "is_mutable"):
540
+ tester.assertFalse(one.is_mutable())
541
+
542
+ def is_empty(self):
543
+ r"""
544
+ Return whether ``self`` is empty.
545
+
546
+ Since this set is a unital magma it is not empty and this method
547
+ always return ``False``.
548
+
549
+ EXAMPLES::
550
+
551
+ sage: S = SymmetricGroup(2) # needs sage.groups
552
+ sage: S.is_empty() # needs sage.groups
553
+ False
554
+
555
+ sage: M = Monoids().example()
556
+ sage: M.is_empty()
557
+ False
558
+
559
+ TESTS::
560
+
561
+ sage: S.is_empty.__module__ # needs sage.groups
562
+ 'sage.categories.magmas'
563
+ sage: M.is_empty.__module__
564
+ 'sage.categories.magmas'
565
+ """
566
+ return False
567
+
568
+ class ElementMethods:
569
+ pass
570
+
571
+ class SubcategoryMethods:
572
+
573
+ @cached_method
574
+ def Inverse(self):
575
+ r"""
576
+ Return the full subcategory of the inverse objects of ``self``.
577
+
578
+ An inverse :class:` (multiplicative) magma <Magmas>`
579
+ is a :class:`unital magma <Magmas.Unital>` such that
580
+ every element admits both an inverse on the left and
581
+ on the right. Such a magma is also called a *loop*.
582
+
583
+ .. SEEALSO::
584
+
585
+ :wikipedia:`Inverse_element`, :wikipedia:`Quasigroup`
586
+
587
+ EXAMPLES::
588
+
589
+ sage: Magmas().Unital().Inverse()
590
+ Category of inverse unital magmas
591
+ sage: Monoids().Inverse()
592
+ Category of groups
593
+
594
+ TESTS::
595
+
596
+ sage: TestSuite(Magmas().Unital().Inverse()).run()
597
+ sage: Algebras(QQ).Inverse.__module__
598
+ 'sage.categories.magmas'
599
+ """
600
+ return self._with_axiom("Inverse")
601
+
602
+ class Inverse(CategoryWithAxiom):
603
+ class CartesianProducts(CartesianProductsCategory):
604
+ def extra_super_categories(self):
605
+ """
606
+ Implement the fact that a Cartesian product of magmas with
607
+ inverses is a magma with inverse.
608
+
609
+ EXAMPLES::
610
+
611
+ sage: C = Magmas().Unital().Inverse().CartesianProducts()
612
+ sage: C.extra_super_categories()
613
+ [Category of inverse unital magmas]
614
+ sage: sorted(C.axioms())
615
+ ['Inverse', 'Unital']
616
+ """
617
+ return [Magmas().Unital().Inverse()]
618
+
619
+ class CartesianProducts(CartesianProductsCategory):
620
+ def extra_super_categories(self):
621
+ """
622
+ Implement the fact that a Cartesian product of unital magmas is
623
+ a unital magma
624
+
625
+ EXAMPLES::
626
+
627
+ sage: C = Magmas().Unital().CartesianProducts()
628
+ sage: C.extra_super_categories()
629
+ [Category of unital magmas]
630
+ sage: C.axioms()
631
+ frozenset({'Unital'})
632
+
633
+ sage: Monoids().CartesianProducts().is_subcategory(Monoids())
634
+ True
635
+ """
636
+ return [Magmas().Unital()]
637
+
638
+ class ParentMethods:
639
+
640
+ @cached_method
641
+ def one(self):
642
+ """
643
+ Return the unit of this Cartesian product.
644
+
645
+ It is built from the units for the Cartesian factors of ``self``.
646
+
647
+ EXAMPLES::
648
+
649
+ sage: cartesian_product([QQ, ZZ, RR]).one() # needs sage.rings.real_mpfr
650
+ (1, 1, 1.00000000000000)
651
+ """
652
+ return self._cartesian_product_of_elements(
653
+ _.one() for _ in self.cartesian_factors())
654
+
655
+ class ElementMethods:
656
+ def __invert__(self):
657
+ r"""
658
+ Return the inverse of ``self``, if it exists.
659
+
660
+ The inverse is computed by inverting each
661
+ Cartesian factor and attempting to convert the
662
+ result back to the original parent.
663
+
664
+ For example, if one of the Cartesian factor is an
665
+ element ``x`` of `\ZZ`, the result of ``~x`` is in
666
+ `\QQ`. So we need to convert it back to `\ZZ`. As
667
+ a side effect, this checks that ``x`` is indeed
668
+ invertible in `\ZZ`.
669
+
670
+ If needed an optimized version without this
671
+ conversion could be implemented in
672
+ :class:`Magmas.Unital.Inverse.ElementMethods`.
673
+
674
+ EXAMPLES::
675
+
676
+ sage: C = cartesian_product([QQ, ZZ, RR, GF(5)])
677
+ sage: c = C([2,-1,2,2]); c # needs sage.rings.real_mpfr
678
+ (2, -1, 2.00000000000000, 2)
679
+ sage: ~c # needs sage.rings.real_mpfr
680
+ (1/2, -1, 0.500000000000000, 3)
681
+
682
+ This fails as soon as one of the entries is not
683
+ invertible::
684
+
685
+ sage: ~C([0,2,2,2])
686
+ Traceback (most recent call last):
687
+ ...
688
+ ZeroDivisionError: rational division by zero
689
+
690
+ sage: ~C([2,2,2,2]) # needs sage.rings.real_mpfr
691
+ (1/2, 1/2, 0.500000000000000, 3)
692
+ """
693
+ # variant without coercion:
694
+ # return self.parent()._cartesian_product_of_elements(
695
+ return self.parent()(
696
+ ~x for x in self.cartesian_factors())
697
+
698
+ class Algebras(AlgebrasCategory):
699
+
700
+ def extra_super_categories(self):
701
+ """
702
+ EXAMPLES::
703
+
704
+ sage: MCA = Magmas().Commutative().Algebras(QQ)
705
+ sage: MCA.extra_super_categories()
706
+ [Category of commutative magmas]
707
+
708
+ This implements the fact that the algebra of a
709
+ commutative magma is commutative::
710
+
711
+ sage: MCA.super_categories()
712
+ [Category of magma algebras over Rational Field,
713
+ Category of commutative magmas]
714
+
715
+ In particular, commutative monoid algebras are
716
+ commutative algebras::
717
+
718
+ sage: MoCA = Monoids().Commutative().Algebras(QQ)
719
+ sage: MoCA.is_subcategory(Algebras(QQ).Commutative())
720
+ True
721
+ """
722
+ return [Magmas().Unital()]
723
+
724
+ class Realizations(RealizationsCategory):
725
+
726
+ class ParentMethods:
727
+
728
+ @cached_method
729
+ def one(self):
730
+ r"""
731
+ Return the unit element of ``self``.
732
+
733
+ EXAMPLES::
734
+
735
+ sage: # needs sage.combinat sage.groups
736
+ sage: from sage.combinat.root_system.extended_affine_weyl_group import ExtendedAffineWeylGroup
737
+ sage: PvW0 = ExtendedAffineWeylGroup(['A',2,1]).PvW0()
738
+ sage: PvW0 in Magmas().Unital().Realizations()
739
+ True
740
+ sage: PvW0.one()
741
+ 1
742
+ """
743
+ return self(self.realization_of().a_realization().one())
744
+
745
+ class ParentMethods:
746
+
747
+ def product(self, x, y):
748
+ """
749
+ The binary multiplication of the magma.
750
+
751
+ INPUT:
752
+
753
+ - ``x``, ``y`` -- elements of this magma
754
+
755
+ OUTPUT:
756
+
757
+ - an element of the magma (the product of ``x`` and ``y``)
758
+
759
+ EXAMPLES::
760
+
761
+ sage: S = Semigroups().example("free")
762
+ sage: x = S('a'); y = S('b')
763
+ sage: S.product(x, y)
764
+ 'ab'
765
+
766
+ A parent in ``Magmas()`` must either implement
767
+ :meth:`.product` in the parent class or ``_mul_`` in the
768
+ element class. By default, the addition method on elements
769
+ ``x._mul_(y)`` calls ``S.product(x,y)``, and reciprocally.
770
+
771
+ As a bonus, ``S.product`` models the binary function from
772
+ ``S`` to ``S``::
773
+
774
+ sage: bin = S.product
775
+ sage: bin(x,y)
776
+ 'ab'
777
+
778
+ Currently, ``S.product`` is just a bound method::
779
+
780
+ sage: bin
781
+ <bound method FreeSemigroup.product of An example of a semigroup:
782
+ the free semigroup generated by ('a', 'b', 'c', 'd')>
783
+
784
+ When Sage will support multivariate morphisms, it will be
785
+ possible, and in fact recommended, to enrich ``S.product``
786
+ with extra mathematical structure. This will typically be
787
+ implemented using lazy attributes.::
788
+
789
+ sage: bin # todo: not implemented
790
+ Generic binary morphism:
791
+ From: (S x S)
792
+ To: S
793
+ """
794
+ return x * y
795
+
796
+ product_from_element_class_mul = product
797
+
798
+ def __init_extra__(self):
799
+ """
800
+ EXAMPLES::
801
+
802
+ sage: S = Semigroups().example("free")
803
+ sage: S('a') * S('b') # indirect doctest
804
+ 'ab'
805
+ sage: S('a').__class__._mul_ == S('a').__class__._mul_parent
806
+ True
807
+ """
808
+ # This should instead register the multiplication to the coercion model
809
+ # But this is not yet implemented in the coercion model
810
+ #
811
+ # Github issue #11900: The following used to test whether
812
+ # self.product != self.product_from_element_class_mul. But
813
+ # that is, of course, a bug. Namely otherwise, if the parent
814
+ # has an optimized `product` then its elements will *always* use
815
+ # a slow generic `_mul_`.
816
+ #
817
+ # So, in addition, it should be tested whether the element class exists
818
+ # *and* has a custom _mul_, because in this case it must not be overridden.
819
+
820
+ if (self.product.__func__ == self.product_from_element_class_mul.__func__):
821
+ return
822
+ if not (hasattr(self, "element_class") and hasattr(self.element_class, "_mul_parent")):
823
+ return
824
+
825
+ E = self.element_class
826
+ E_mul_func = raw_getattr(E, '_mul_')
827
+ if not isinstance(E_mul_func, AbstractMethod):
828
+ C = self.category().element_class
829
+ try:
830
+ C_mul_func = raw_getattr(C, '_mul_')
831
+ except AttributeError: # Doesn't have _mul_
832
+ return
833
+
834
+ if isinstance(C_mul_func, AbstractMethod):
835
+ return
836
+
837
+ if E_mul_func is C_mul_func:
838
+ # self.product is custom, thus, we rely on it
839
+ E._mul_ = E._mul_parent
840
+ else: # E._mul_ has so far been abstract
841
+ E._mul_ = E._mul_parent
842
+
843
+ def multiplication_table(self, names='letters', elements=None):
844
+ r"""
845
+ Return a table describing the multiplication operation.
846
+
847
+ .. NOTE:: The order of the elements in the row and column
848
+ headings is equal to the order given by the table's
849
+ :meth:`~sage.matrix.operation_table.OperationTable.list`
850
+ method. The association can also be retrieved with the
851
+ :meth:`~sage.matrix.operation_table.OperationTable.dict`
852
+ method.
853
+
854
+ INPUT:
855
+
856
+ - ``names`` -- the type of names used
857
+
858
+ * ``'letters'`` -- lowercase ASCII letters are used
859
+ for a base 26 representation of the elements'
860
+ positions in the list given by
861
+ :meth:`~sage.matrix.operation_table.OperationTable.column_keys`,
862
+ padded to a common width with leading 'a's.
863
+ * ``'digits'`` -- base 10 representation of the
864
+ elements' positions in the list given by
865
+ :meth:`~sage.matrix.operation_table.OperationTable.column_keys`,
866
+ padded to a common width with leading zeros.
867
+ * ``'elements'`` -- the string representations
868
+ of the elements themselves.
869
+ * a list - a list of strings, where the length
870
+ of the list equals the number of elements.
871
+ - ``elements`` -- (default: ``None``) a list of
872
+ elements of the magma, in forms that can be
873
+ coerced into the structure, eg. their string
874
+ representations. This may be used to impose an
875
+ alternate ordering on the elements, perhaps when
876
+ this is used in the context of a particular structure.
877
+ The default is to use whatever ordering the ``S.list``
878
+ method returns. Or the ``elements`` can be a subset
879
+ which is closed under the operation. In particular,
880
+ this can be used when the base set is infinite.
881
+
882
+ OUTPUT:
883
+
884
+ The multiplication table as an object of the class
885
+ :class:`~sage.matrix.operation_table.OperationTable`
886
+ which defines several methods for manipulating and
887
+ displaying the table. See the documentation there
888
+ for full details to supplement the documentation
889
+ here.
890
+
891
+ EXAMPLES:
892
+
893
+ The default is to represent elements as lowercase
894
+ ASCII letters. ::
895
+
896
+ sage: G = CyclicPermutationGroup(5) # needs sage.groups
897
+ sage: G.multiplication_table() # needs sage.groups sage.modules
898
+ * a b c d e
899
+ +----------
900
+ a| a b c d e
901
+ b| b c d e a
902
+ c| c d e a b
903
+ d| d e a b c
904
+ e| e a b c d
905
+
906
+ All that is required is that an algebraic structure
907
+ has a multiplication defined. A
908
+ :class:`~sage.categories.examples.finite_semigroups.LeftRegularBand`
909
+ is an example of a finite semigroup. The ``names`` argument allows
910
+ displaying the elements in different ways. ::
911
+
912
+ sage: from sage.categories.examples.finite_semigroups import LeftRegularBand
913
+ sage: L = LeftRegularBand(('a', 'b'))
914
+ sage: T = L.multiplication_table(names='digits') # needs sage.modules
915
+ sage: T.column_keys() # needs sage.modules
916
+ ('a', 'ab', 'b', 'ba')
917
+ sage: T # needs sage.modules
918
+ * 0 1 2 3
919
+ +--------
920
+ 0| 0 1 1 1
921
+ 1| 1 1 1 1
922
+ 2| 3 3 2 3
923
+ 3| 3 3 3 3
924
+
925
+ Specifying the elements in an alternative order can provide
926
+ more insight into how the operation behaves. ::
927
+
928
+ sage: L = LeftRegularBand(('a', 'b', 'c'))
929
+ sage: elts = sorted(L.list())
930
+ sage: L.multiplication_table(elements=elts) # needs sage.modules
931
+ * a b c d e f g h i j k l m n o
932
+ +------------------------------
933
+ a| a b c d e b b c c c d d e e e
934
+ b| b b c c c b b c c c c c c c c
935
+ c| c c c c c c c c c c c c c c c
936
+ d| d e e d e e e e e e d d e e e
937
+ e| e e e e e e e e e e e e e e e
938
+ f| g g h h h f g h i j i j j i j
939
+ g| g g h h h g g h h h h h h h h
940
+ h| h h h h h h h h h h h h h h h
941
+ i| j j j j j i j j i j i j j i j
942
+ j| j j j j j j j j j j j j j j j
943
+ k| l m m l m n o o n o k l m n o
944
+ l| l m m l m m m m m m l l m m m
945
+ m| m m m m m m m m m m m m m m m
946
+ n| o o o o o n o o n o n o o n o
947
+ o| o o o o o o o o o o o o o o o
948
+
949
+ The ``elements`` argument can be used to provide
950
+ a subset of the elements of the structure. The subset
951
+ must be closed under the operation. Elements need only
952
+ be in a form that can be coerced into the set. The
953
+ ``names`` argument can also be used to request that
954
+ the elements be represented with their usual string
955
+ representation. ::
956
+
957
+ sage: L = LeftRegularBand(('a','b','c'))
958
+ sage: elts=['a', 'c', 'ac', 'ca']
959
+ sage: L.multiplication_table(names='elements', elements=elts) # needs sage.modules
960
+ * 'a' 'c' 'ac' 'ca'
961
+ +--------------------
962
+ 'a'| 'a' 'ac' 'ac' 'ac'
963
+ 'c'| 'ca' 'c' 'ca' 'ca'
964
+ 'ac'| 'ac' 'ac' 'ac' 'ac'
965
+ 'ca'| 'ca' 'ca' 'ca' 'ca'
966
+
967
+ The table returned can be manipulated in various ways. See
968
+ the documentation for
969
+ :class:`~sage.matrix.operation_table.OperationTable` for more
970
+ comprehensive documentation. ::
971
+
972
+ sage: # needs sage.groups sage.modules
973
+ sage: G = AlternatingGroup(3)
974
+ sage: T = G.multiplication_table()
975
+ sage: T.column_keys()
976
+ ((), (1,2,3), (1,3,2))
977
+ sage: T.translation()
978
+ {'a': (), 'b': (1,2,3), 'c': (1,3,2)}
979
+ sage: T.change_names(['x', 'y', 'z'])
980
+ sage: T.translation()
981
+ {'x': (), 'y': (1,2,3), 'z': (1,3,2)}
982
+ sage: T
983
+ * x y z
984
+ +------
985
+ x| x y z
986
+ y| y z x
987
+ z| z x y
988
+ """
989
+ from sage.matrix.operation_table import OperationTable
990
+ import operator
991
+ return OperationTable(self, operation=operator.mul, names=names, elements=elements)
992
+
993
+ class ElementMethods:
994
+ @abstract_method(optional=True)
995
+ def _mul_(self, right):
996
+ """
997
+ Product of two elements.
998
+
999
+ INPUT:
1000
+
1001
+ - ``self``, ``right`` -- two elements with the same parent
1002
+
1003
+ OUTPUT: an element of the same parent
1004
+
1005
+ EXAMPLES::
1006
+
1007
+ sage: S = Semigroups().example("free")
1008
+ sage: x = S('a'); y = S('b')
1009
+ sage: x._mul_(y)
1010
+ 'ab'
1011
+ """
1012
+
1013
+ _mul_parent = sage.categories.coercion_methods._mul_parent
1014
+
1015
+ def is_idempotent(self):
1016
+ r"""
1017
+ Test whether ``self`` is idempotent.
1018
+
1019
+ EXAMPLES::
1020
+
1021
+ sage: S = Semigroups().example("free"); S
1022
+ An example of a semigroup:
1023
+ the free semigroup generated by ('a', 'b', 'c', 'd')
1024
+ sage: a = S('a')
1025
+ sage: a^2
1026
+ 'aa'
1027
+ sage: a.is_idempotent()
1028
+ False
1029
+
1030
+ ::
1031
+
1032
+ sage: L = Semigroups().example("leftzero"); L
1033
+ An example of a semigroup: the left zero semigroup
1034
+ sage: x = L('x')
1035
+ sage: x^2
1036
+ 'x'
1037
+ sage: x.is_idempotent()
1038
+ True
1039
+ """
1040
+ return self * self == self
1041
+
1042
+ class CartesianProducts(CartesianProductsCategory):
1043
+
1044
+ def extra_super_categories(self):
1045
+ """
1046
+ This implements the fact that a subquotient (and therefore
1047
+ a quotient or subobject) of a finite set is finite.
1048
+
1049
+ EXAMPLES::
1050
+
1051
+ sage: Semigroups().CartesianProducts().extra_super_categories()
1052
+ [Category of semigroups]
1053
+ sage: Semigroups().CartesianProducts().super_categories()
1054
+ [Category of semigroups, Category of Cartesian products of magmas]
1055
+ """
1056
+ return [Magmas()]
1057
+
1058
+ def example(self):
1059
+ """
1060
+ Return an example of Cartesian product of magmas.
1061
+
1062
+ EXAMPLES::
1063
+
1064
+ sage: C = Magmas().CartesianProducts().example(); C
1065
+ The Cartesian product of (Rational Field, Integer Ring, Integer Ring)
1066
+ sage: C.category()
1067
+ Join of Category of Cartesian products of commutative rings and
1068
+ Category of Cartesian products of metric spaces
1069
+ sage: sorted(C.category().axioms())
1070
+ ['AdditiveAssociative', 'AdditiveCommutative', 'AdditiveInverse',
1071
+ 'AdditiveUnital', 'Associative', 'Commutative',
1072
+ 'Distributive', 'Unital']
1073
+
1074
+ sage: TestSuite(C).run()
1075
+ """
1076
+ from .cartesian_product import cartesian_product
1077
+ from sage.rings.integer_ring import ZZ
1078
+ from sage.rings.rational_field import QQ
1079
+ return cartesian_product([QQ, ZZ, ZZ])
1080
+
1081
+ class ParentMethods:
1082
+
1083
+ def product(self, left, right):
1084
+ """
1085
+ EXAMPLES::
1086
+
1087
+ sage: C = Magmas().CartesianProducts().example(); C
1088
+ The Cartesian product of (Rational Field, Integer Ring, Integer Ring)
1089
+ sage: x = C.an_element(); x
1090
+ (1/2, 1, 1)
1091
+ sage: x * x
1092
+ (1/4, 1, 1)
1093
+
1094
+ sage: # needs sage.combinat sage.groups sage.modules
1095
+ sage: A = SymmetricGroupAlgebra(QQ, 3)
1096
+ sage: x = cartesian_product([A([1,3,2]), A([2,3,1])])
1097
+ sage: y = cartesian_product([A([1,3,2]), A([2,3,1])])
1098
+ sage: cartesian_product([A,A]).product(x,y)
1099
+ B[(0, [1, 2, 3])] + B[(1, [3, 1, 2])]
1100
+ sage: x*y
1101
+ B[(0, [1, 2, 3])] + B[(1, [3, 1, 2])]
1102
+ """
1103
+ prods = ((a * b) for a, b in zip(left.cartesian_factors(),
1104
+ right.cartesian_factors()))
1105
+ return self._cartesian_product_of_elements(prods)
1106
+
1107
+ class Subquotients(SubquotientsCategory):
1108
+ r"""
1109
+ The category of subquotient magmas.
1110
+
1111
+ See :meth:`Sets.SubcategoryMethods.Subquotients` for the
1112
+ general setup for subquotients. In the case of a subquotient
1113
+ magma `S` of a magma `G`, the condition that `r` be a
1114
+ morphism in ``As`` can be rewritten as follows:
1115
+
1116
+ - for any two `a,b \in S` the identity
1117
+ `a \times_S b = r(l(a) \times_G l(b))` holds.
1118
+
1119
+ This is used by this category to implement the product
1120
+ `\times_S` of `S` from `l` and `r` and the product of `G`.
1121
+
1122
+ EXAMPLES::
1123
+
1124
+ sage: Semigroups().Subquotients().all_super_categories()
1125
+ [Category of subquotients of semigroups, Category of semigroups,
1126
+ Category of subquotients of magmas, Category of magmas,
1127
+ Category of subquotients of sets, Category of sets,
1128
+ Category of sets with partial maps,
1129
+ Category of objects]
1130
+ """
1131
+
1132
+ class ParentMethods:
1133
+
1134
+ def product(self, x, y):
1135
+ """
1136
+ Return the product of two elements of ``self``.
1137
+
1138
+ EXAMPLES::
1139
+
1140
+ sage: S = Semigroups().Subquotients().example()
1141
+ sage: S
1142
+ An example of a (sub)quotient semigroup:
1143
+ a quotient of the left zero semigroup
1144
+ sage: S.product(S(19), S(3))
1145
+ 19
1146
+
1147
+ Here is a more elaborate example involving a sub algebra::
1148
+
1149
+ sage: Z = SymmetricGroup(5).algebra(QQ).center() # needs sage.combinat sage.groups
1150
+ sage: B = Z.basis() # needs sage.combinat sage.groups
1151
+ sage: B[3] * B[2] # needs sage.combinat sage.groups
1152
+ 4*B[2] + 6*B[3] + 5*B[6]
1153
+ """
1154
+ assert x in self
1155
+ assert y in self
1156
+ return self.retract(self.lift(x) * self.lift(y))
1157
+
1158
+ class Realizations(RealizationsCategory):
1159
+
1160
+ class ParentMethods:
1161
+
1162
+ def product_by_coercion(self, left, right):
1163
+ r"""
1164
+ Default implementation of product for realizations.
1165
+
1166
+ This method coerces to the realization specified by
1167
+ ``self.realization_of().a_realization()``, computes
1168
+ the product in that realization, and then coerces
1169
+ back.
1170
+
1171
+ EXAMPLES::
1172
+
1173
+ sage: # needs sage.combinat sage.modules
1174
+ sage: Out = Sets().WithRealizations().example().Out(); Out
1175
+ The subset algebra of {1, 2, 3} over Rational Field
1176
+ in the Out basis
1177
+ sage: Out.product
1178
+ <bound method Magmas.Realizations.ParentMethods.product_by_coercion
1179
+ of The subset algebra of {1, 2, 3} over Rational Field
1180
+ in the Out basis>
1181
+ sage: Out.product.__module__
1182
+ 'sage.categories.magmas'
1183
+ sage: x = Out.an_element()
1184
+ sage: y = Out.an_element()
1185
+ sage: Out.product(x, y)
1186
+ Out[{}] + 4*Out[{1}] + 9*Out[{2}] + Out[{1, 2}]
1187
+ """
1188
+ R = self.realization_of().a_realization()
1189
+ return self(R(left) * R(right))