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,1044 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ r"""
3
+ Additive magmas
4
+ """
5
+ # ****************************************************************************
6
+ # Copyright (C) 2010-2014 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
+ try:
13
+ from typing import Self # type: ignore (Python >= 3.11)
14
+ except ImportError:
15
+ from typing_extensions import Self # type: ignore (Python 3.10)
16
+
17
+ from sage.categories.algebra_functor import AlgebrasCategory
18
+ from sage.categories.cartesian_product import CartesianProductsCategory
19
+ from sage.categories.category_singleton import Category_singleton
20
+ from sage.categories.category_with_axiom import CategoryWithAxiom
21
+ from sage.categories.homsets import HomsetsCategory
22
+ from sage.categories.sets_cat import Sets
23
+ from sage.categories.with_realizations import WithRealizationsCategory
24
+ from sage.misc.abstract_method import abstract_method
25
+ from sage.misc.cachefunc import cached_method
26
+ from sage.misc.lazy_import import LazyImport
27
+
28
+
29
+ class AdditiveMagmas(Category_singleton):
30
+ """
31
+ The category of additive magmas.
32
+
33
+ An additive magma is a set endowed with a binary operation `+`.
34
+
35
+ EXAMPLES::
36
+
37
+ sage: AdditiveMagmas()
38
+ Category of additive magmas
39
+ sage: AdditiveMagmas().super_categories()
40
+ [Category of sets]
41
+ sage: AdditiveMagmas().all_super_categories()
42
+ [Category of additive magmas,
43
+ Category of sets,
44
+ Category of sets with partial maps,
45
+ Category of objects]
46
+
47
+ The following axioms are defined by this category::
48
+
49
+ sage: AdditiveMagmas().AdditiveAssociative()
50
+ Category of additive semigroups
51
+ sage: AdditiveMagmas().AdditiveUnital()
52
+ Category of additive unital additive magmas
53
+ sage: AdditiveMagmas().AdditiveCommutative()
54
+ Category of additive commutative additive magmas
55
+ sage: AdditiveMagmas().AdditiveUnital().AdditiveInverse()
56
+ Category of additive inverse additive unital additive magmas
57
+ sage: C = AdditiveMagmas().AdditiveAssociative().AdditiveCommutative(); C
58
+ Category of commutative additive semigroups
59
+ sage: C.AdditiveUnital()
60
+ Category of commutative additive monoids
61
+ sage: C.AdditiveUnital().AdditiveInverse()
62
+ Category of commutative additive groups
63
+
64
+ TESTS::
65
+
66
+ sage: C = AdditiveMagmas()
67
+ sage: TestSuite(C).run()
68
+ """
69
+
70
+ def super_categories(self):
71
+ """
72
+ EXAMPLES::
73
+
74
+ sage: AdditiveMagmas().super_categories()
75
+ [Category of sets]
76
+ """
77
+ return [Sets()]
78
+
79
+ def __lean_init__(self):
80
+ return 'has_add'
81
+
82
+ class SubcategoryMethods:
83
+
84
+ @cached_method
85
+ def AdditiveAssociative(self):
86
+ r"""
87
+ Return the full subcategory of the additive associative
88
+ objects of ``self``.
89
+
90
+ An :class:`additive magma <AdditiveMagmas>` `M` is
91
+ *associative* if, for all `x,y,z \in M`,
92
+
93
+ .. MATH:: x + (y + z) = (x + y) + z
94
+
95
+ .. SEEALSO:: :wikipedia:`Associative_property`
96
+
97
+ EXAMPLES::
98
+
99
+ sage: AdditiveMagmas().AdditiveAssociative()
100
+ Category of additive semigroups
101
+
102
+ TESTS::
103
+
104
+ sage: TestSuite(AdditiveMagmas().AdditiveAssociative()).run()
105
+ sage: Rings().AdditiveAssociative.__module__
106
+ 'sage.categories.additive_magmas'
107
+ """
108
+ return self._with_axiom('AdditiveAssociative')
109
+
110
+ @cached_method
111
+ def AdditiveCommutative(self):
112
+ r"""
113
+ Return the full subcategory of the commutative objects of ``self``.
114
+
115
+ An :class:`additive magma <AdditiveMagmas>` `M` is
116
+ *commutative* if, for all `x,y \in M`,
117
+
118
+ .. MATH:: x + y = y + x
119
+
120
+ .. SEEALSO:: :wikipedia:`Commutative_property`
121
+
122
+ EXAMPLES::
123
+
124
+ sage: AdditiveMagmas().AdditiveCommutative()
125
+ Category of additive commutative additive magmas
126
+ sage: C = AdditiveMagmas().AdditiveAssociative().AdditiveUnital()
127
+ sage: C.AdditiveCommutative()
128
+ Category of commutative additive monoids
129
+ sage: C.AdditiveCommutative() is CommutativeAdditiveMonoids()
130
+ True
131
+
132
+ TESTS::
133
+
134
+ sage: TestSuite(AdditiveMagmas().AdditiveCommutative()).run()
135
+ sage: Rings().AdditiveCommutative.__module__
136
+ 'sage.categories.additive_magmas'
137
+ """
138
+ return self._with_axiom('AdditiveCommutative')
139
+
140
+ @cached_method
141
+ def AdditiveUnital(self):
142
+ r"""
143
+ Return the subcategory of the unital objects of ``self``.
144
+
145
+ An :class:`additive magma <AdditiveMagmas>` `M` is *unital*
146
+ if it admits an element `0`, called *neutral element*,
147
+ such that for all `x \in M`,
148
+
149
+ .. MATH:: 0 + x = x + 0 = x
150
+
151
+ This element is necessarily unique, and should be provided
152
+ as ``M.zero()``.
153
+
154
+ .. SEEALSO:: :wikipedia:`Unital_magma#unital`
155
+
156
+ EXAMPLES::
157
+
158
+ sage: AdditiveMagmas().AdditiveUnital()
159
+ Category of additive unital additive magmas
160
+ sage: from sage.categories.additive_semigroups import AdditiveSemigroups
161
+ sage: AdditiveSemigroups().AdditiveUnital()
162
+ Category of additive monoids
163
+ sage: CommutativeAdditiveMonoids().AdditiveUnital()
164
+ Category of commutative additive monoids
165
+
166
+ TESTS::
167
+
168
+ sage: TestSuite(AdditiveMagmas().AdditiveUnital()).run()
169
+ sage: CommutativeAdditiveSemigroups().AdditiveUnital.__module__
170
+ 'sage.categories.additive_magmas'
171
+ """
172
+ return self._with_axiom("AdditiveUnital")
173
+
174
+ AdditiveAssociative = LazyImport('sage.categories.additive_semigroups', 'AdditiveSemigroups', at_startup=True)
175
+
176
+ class ParentMethods:
177
+
178
+ def summation(self, x, y):
179
+ r"""
180
+ Return the sum of ``x`` and ``y``.
181
+
182
+ The binary addition operator of this additive magma.
183
+
184
+ INPUT:
185
+
186
+ - ``x``, ``y`` -- elements of this additive magma
187
+
188
+ EXAMPLES::
189
+
190
+ sage: S = CommutativeAdditiveSemigroups().example()
191
+ sage: (a,b,c,d) = S.additive_semigroup_generators()
192
+ sage: S.summation(a, b)
193
+ a + b
194
+
195
+ A parent in ``AdditiveMagmas()`` must
196
+ either implement :meth:`.summation` in the parent class or
197
+ ``_add_`` in the element class. By default, the addition
198
+ method on elements ``x._add_(y)`` calls
199
+ ``S.summation(x,y)``, and reciprocally.
200
+
201
+ As a bonus effect, ``S.summation`` by itself models the
202
+ binary function from ``S`` to ``S``::
203
+
204
+ sage: bin = S.summation
205
+ sage: bin(a,b)
206
+ a + b
207
+
208
+ Here, ``S.summation`` is just a bound method. Whenever
209
+ possible, it is recommended to enrich ``S.summation`` with
210
+ extra mathematical structure. Lazy attributes can come
211
+ handy for this.
212
+
213
+ .. TODO:: Add an example.
214
+ """
215
+ return x + y
216
+
217
+ summation_from_element_class_add = summation
218
+
219
+ def __init_extra__(self):
220
+ """
221
+ TESTS::
222
+
223
+ sage: S = CommutativeAdditiveSemigroups().example()
224
+ sage: (a,b,c,d) = S.additive_semigroup_generators()
225
+ sage: a + b # indirect doctest
226
+ a + b
227
+ sage: a.__class__._add_ == a.__class__._add_parent
228
+ True
229
+ """
230
+ # This should instead register the summation to the coercion model
231
+ # But this is not yet implemented in the coercion model
232
+ if (self.summation != self.summation_from_element_class_add) and hasattr(self, "element_class") and hasattr(self.element_class, "_add_parent"):
233
+ self.element_class._add_ = self.element_class._add_parent
234
+
235
+ def addition_table(self, names='letters', elements=None):
236
+ r"""
237
+ Return a table describing the addition operation.
238
+
239
+ .. NOTE::
240
+
241
+ The order of the elements in the row and column
242
+ headings is equal to the order given by the table's
243
+ :meth:`~sage.matrix.operation_table.OperationTable.column_keys`
244
+ method. The association can also be retrieved with the
245
+ :meth:`~sage.matrix.operation_table.OperationTable.translation`
246
+ method.
247
+
248
+ INPUT:
249
+
250
+ - ``names`` -- the type of names used:
251
+
252
+ * ``'letters'`` -- lowercase ASCII letters are used
253
+ for a base 26 representation of the elements'
254
+ positions in the list given by
255
+ :meth:`~sage.matrix.operation_table.OperationTable.column_keys`,
256
+ padded to a common width with leading 'a's.
257
+ * ``'digits'`` -- base 10 representation of the
258
+ elements' positions in the list given by
259
+ :meth:`~sage.matrix.operation_table.OperationTable.column_keys`,
260
+ padded to a common width with leading zeros.
261
+ * ``'elements'`` -- the string representations
262
+ of the elements themselves.
263
+ * a list - a list of strings, where the length
264
+ of the list equals the number of elements.
265
+
266
+ - ``elements`` -- (default: ``None``) A list of
267
+ elements of the additive magma, in forms that
268
+ can be coerced into the structure, eg. their
269
+ string representations. This may be used to
270
+ impose an alternate ordering on the elements,
271
+ perhaps when this is used in the context of a
272
+ particular structure. The default is to use
273
+ whatever ordering the ``S.list`` method returns.
274
+ Or the ``elements`` can be a subset which is
275
+ closed under the operation. In particular,
276
+ this can be used when the base set is infinite.
277
+
278
+ OUTPUT:
279
+
280
+ The addition table as an object of the class
281
+ :class:`~sage.matrix.operation_table.OperationTable`
282
+ which defines several methods for manipulating and
283
+ displaying the table. See the documentation there
284
+ for full details to supplement the documentation
285
+ here.
286
+
287
+ EXAMPLES:
288
+
289
+ All that is required is that an algebraic structure
290
+ has an addition defined.The default is to represent
291
+ elements as lowercase ASCII letters. ::
292
+
293
+ sage: R = IntegerModRing(5)
294
+ sage: R.addition_table() # needs sage.modules
295
+ + a b c d e
296
+ +----------
297
+ a| a b c d e
298
+ b| b c d e a
299
+ c| c d e a b
300
+ d| d e a b c
301
+ e| e a b c d
302
+
303
+ The ``names`` argument allows displaying the elements in
304
+ different ways. Requesting ``elements`` will use the
305
+ representation of the elements of the set. Requesting
306
+ ``digits`` will include leading zeros as padding. ::
307
+
308
+ sage: R = IntegerModRing(11)
309
+ sage: P = R.addition_table(names='elements'); P # needs sage.modules
310
+ + 0 1 2 3 4 5 6 7 8 9 10
311
+ +---------------------------------
312
+ 0| 0 1 2 3 4 5 6 7 8 9 10
313
+ 1| 1 2 3 4 5 6 7 8 9 10 0
314
+ 2| 2 3 4 5 6 7 8 9 10 0 1
315
+ 3| 3 4 5 6 7 8 9 10 0 1 2
316
+ 4| 4 5 6 7 8 9 10 0 1 2 3
317
+ 5| 5 6 7 8 9 10 0 1 2 3 4
318
+ 6| 6 7 8 9 10 0 1 2 3 4 5
319
+ 7| 7 8 9 10 0 1 2 3 4 5 6
320
+ 8| 8 9 10 0 1 2 3 4 5 6 7
321
+ 9| 9 10 0 1 2 3 4 5 6 7 8
322
+ 10| 10 0 1 2 3 4 5 6 7 8 9
323
+
324
+ sage: T = R.addition_table(names='digits'); T # needs sage.modules
325
+ + 00 01 02 03 04 05 06 07 08 09 10
326
+ +---------------------------------
327
+ 00| 00 01 02 03 04 05 06 07 08 09 10
328
+ 01| 01 02 03 04 05 06 07 08 09 10 00
329
+ 02| 02 03 04 05 06 07 08 09 10 00 01
330
+ 03| 03 04 05 06 07 08 09 10 00 01 02
331
+ 04| 04 05 06 07 08 09 10 00 01 02 03
332
+ 05| 05 06 07 08 09 10 00 01 02 03 04
333
+ 06| 06 07 08 09 10 00 01 02 03 04 05
334
+ 07| 07 08 09 10 00 01 02 03 04 05 06
335
+ 08| 08 09 10 00 01 02 03 04 05 06 07
336
+ 09| 09 10 00 01 02 03 04 05 06 07 08
337
+ 10| 10 00 01 02 03 04 05 06 07 08 09
338
+
339
+ Specifying the elements in an alternative order can provide
340
+ more insight into how the operation behaves. ::
341
+
342
+ sage: S = IntegerModRing(7)
343
+ sage: elts = [0, 3, 6, 2, 5, 1, 4]
344
+ sage: S.addition_table(elements=elts) # needs sage.modules
345
+ + a b c d e f g
346
+ +--------------
347
+ a| a b c d e f g
348
+ b| b c d e f g a
349
+ c| c d e f g a b
350
+ d| d e f g a b c
351
+ e| e f g a b c d
352
+ f| f g a b c d e
353
+ g| g a b c d e f
354
+
355
+ The ``elements`` argument can be used to provide
356
+ a subset of the elements of the structure. The subset
357
+ must be closed under the operation. Elements need only
358
+ be in a form that can be coerced into the set. The
359
+ ``names`` argument can also be used to request that
360
+ the elements be represented with their usual string
361
+ representation. ::
362
+
363
+ sage: T = IntegerModRing(12)
364
+ sage: elts = [0, 3, 6, 9]
365
+ sage: T.addition_table(names='elements', elements=elts) # needs sage.modules
366
+ + 0 3 6 9
367
+ +--------
368
+ 0| 0 3 6 9
369
+ 3| 3 6 9 0
370
+ 6| 6 9 0 3
371
+ 9| 9 0 3 6
372
+
373
+ The table returned can be manipulated in various ways. See
374
+ the documentation for
375
+ :class:`~sage.matrix.operation_table.OperationTable` for more
376
+ comprehensive documentation. ::
377
+
378
+ sage: # needs sage.modules
379
+ sage: R = IntegerModRing(3)
380
+ sage: T = R.addition_table()
381
+ sage: T.column_keys()
382
+ (0, 1, 2)
383
+ sage: sorted(T.translation().items())
384
+ [('a', 0), ('b', 1), ('c', 2)]
385
+ sage: T.change_names(['x', 'y', 'z'])
386
+ sage: sorted(T.translation().items())
387
+ [('x', 0), ('y', 1), ('z', 2)]
388
+ sage: T
389
+ + x y z
390
+ +------
391
+ x| x y z
392
+ y| y z x
393
+ z| z x y
394
+ """
395
+ import operator
396
+
397
+ from sage.matrix.operation_table import OperationTable
398
+ return OperationTable(self, operation=operator.add,
399
+ names=names, elements=elements)
400
+
401
+ class ElementMethods:
402
+
403
+ @abstract_method(optional=True)
404
+ def _add_(self, right):
405
+ """
406
+ Return the sum of ``self`` and ``right``.
407
+
408
+ INPUT:
409
+
410
+ - ``self``, ``right`` -- two elements with the same parent
411
+
412
+ OUTPUT: an element of the same parent
413
+
414
+ EXAMPLES::
415
+
416
+ sage: F = CommutativeAdditiveSemigroups().example()
417
+ sage: (a,b,c,d) = F.additive_semigroup_generators()
418
+ sage: a._add_(b)
419
+ a + b
420
+ """
421
+
422
+ def _add_parent(self, other):
423
+ r"""
424
+ Return the sum of the two elements, calculated using
425
+ the ``summation`` method of the parent.
426
+
427
+ This is the default implementation of _add_ if
428
+ ``summation`` is implemented in the parent.
429
+
430
+ INPUT:
431
+
432
+ - ``other`` -- an element of the parent of ``self``
433
+
434
+ OUTPUT: an element of the parent of ``self``
435
+
436
+ EXAMPLES::
437
+
438
+ sage: S = CommutativeAdditiveSemigroups().example()
439
+ sage: (a,b,c,d) = S.additive_semigroup_generators()
440
+ sage: a._add_parent(b)
441
+ a + b
442
+ """
443
+ return self.parent().summation(self, other)
444
+
445
+ class Homsets(HomsetsCategory):
446
+ def extra_super_categories(self):
447
+ """
448
+ Implement the fact that a homset between two magmas is a magma.
449
+
450
+ EXAMPLES::
451
+
452
+ sage: AdditiveMagmas().Homsets().extra_super_categories()
453
+ [Category of additive magmas]
454
+ sage: AdditiveMagmas().Homsets().super_categories()
455
+ [Category of additive magmas, Category of homsets]
456
+ """
457
+ return [AdditiveMagmas()]
458
+
459
+ class CartesianProducts(CartesianProductsCategory):
460
+ def extra_super_categories(self):
461
+ """
462
+ Implement the fact that a Cartesian product of additive magmas is
463
+ an additive magma.
464
+
465
+ EXAMPLES::
466
+
467
+ sage: C = AdditiveMagmas().CartesianProducts()
468
+ sage: C.extra_super_categories()
469
+ [Category of additive magmas]
470
+ sage: C.super_categories()
471
+ [Category of additive magmas, Category of Cartesian products of sets]
472
+ sage: C.axioms()
473
+ frozenset()
474
+ """
475
+ return [AdditiveMagmas()]
476
+
477
+ class ElementMethods:
478
+ def _add_(self, right):
479
+ r"""
480
+ EXAMPLES::
481
+
482
+ sage: # needs sage.rings.finite_rings
483
+ sage: G5 = GF(5); G8 = GF(4, 'x'); GG = G5.cartesian_product(G8)
484
+ sage: e = GG((G5(1), G8.primitive_element())); e
485
+ (1, x)
486
+ sage: e + e
487
+ (2, 0)
488
+
489
+ sage: # needs sage.groups sage.modules
490
+ sage: e = groups.misc.AdditiveCyclic(8)
491
+ sage: x = e.cartesian_product(e)((e(1), e(2)))
492
+ sage: x
493
+ (1, 2)
494
+ sage: 4 * x
495
+ (4, 0)
496
+ """
497
+ return self.parent()._cartesian_product_of_elements(
498
+ x + y for x, y in zip(self.cartesian_factors(),
499
+ right.cartesian_factors()))
500
+
501
+ class Algebras(AlgebrasCategory):
502
+
503
+ def extra_super_categories(self):
504
+ """
505
+ EXAMPLES::
506
+
507
+ sage: AdditiveMagmas().Algebras(QQ).extra_super_categories()
508
+ [Category of magmatic algebras with basis over Rational Field]
509
+
510
+ sage: AdditiveMagmas().Algebras(QQ).super_categories()
511
+ [Category of magmatic algebras with basis over Rational Field,
512
+ Category of set algebras over Rational Field]
513
+ """
514
+ from sage.categories.magmatic_algebras import MagmaticAlgebras
515
+ return [MagmaticAlgebras(self.base_ring()).WithBasis()]
516
+
517
+ class ParentMethods:
518
+
519
+ @cached_method
520
+ def algebra_generators(self):
521
+ r"""
522
+ The generators of this algebra, as per
523
+ :meth:`MagmaticAlgebras.ParentMethods.algebra_generators()
524
+ <.magmatic_algebras.MagmaticAlgebras.ParentMethods.algebra_generators>`.
525
+
526
+ They correspond to the generators of the additive semigroup.
527
+
528
+ EXAMPLES::
529
+
530
+ sage: S = CommutativeAdditiveSemigroups().example(); S
531
+ An example of a commutative semigroup:
532
+ the free commutative semigroup generated by ('a', 'b', 'c', 'd')
533
+ sage: A = S.algebra(QQ) # needs sage.modules
534
+ sage: A.algebra_generators() # needs sage.modules
535
+ Family (B[a], B[b], B[c], B[d])
536
+
537
+ .. TODO::
538
+
539
+ This doctest does not actually test this method,
540
+ but rather the method of the same name for
541
+ ``AdditiveSemigroups``. Find a better doctest!
542
+ """
543
+ return self.basis().keys().additive_semigroup_generators().map(self.monomial)
544
+
545
+ def product_on_basis(self, g1, g2):
546
+ r"""
547
+ Product, on basis elements, as per
548
+ :meth:`MagmaticAlgebras.WithBasis.ParentMethods.product_on_basis()
549
+ <.magmatic_algebras.MagmaticAlgebras.WithBasis.ParentMethods.product_on_basis>`.
550
+
551
+ The product of two basis elements is induced by the
552
+ addition of the corresponding elements of the group.
553
+
554
+ EXAMPLES::
555
+
556
+ sage: S = CommutativeAdditiveSemigroups().example(); S
557
+ An example of a commutative semigroup:
558
+ the free commutative semigroup generated by ('a', 'b', 'c', 'd')
559
+ sage: A = S.algebra(QQ) # needs sage.modules
560
+ sage: a, b, c, d = A.algebra_generators() # needs sage.modules
561
+ sage: a * d * b # needs sage.modules
562
+ B[a + b + d]
563
+
564
+ .. TODO::
565
+
566
+ This doctest does not actually test this method,
567
+ but rather the method of the same name for
568
+ ``AdditiveSemigroups``. Find a better doctest!
569
+ """
570
+ return self.monomial(g1 + g2)
571
+
572
+ class AdditiveCommutative(CategoryWithAxiom):
573
+ class CartesianProducts(CartesianProductsCategory):
574
+ def extra_super_categories(self):
575
+ """
576
+ Implement the fact that a Cartesian product of commutative
577
+ additive magmas is a commutative additive magma.
578
+
579
+ EXAMPLES::
580
+
581
+ sage: C = AdditiveMagmas().AdditiveCommutative().CartesianProducts()
582
+ sage: C.extra_super_categories()
583
+ [Category of additive commutative additive magmas]
584
+ sage: C.axioms()
585
+ frozenset({'AdditiveCommutative'})
586
+ """
587
+ return [AdditiveMagmas().AdditiveCommutative()]
588
+
589
+ class Algebras(AlgebrasCategory):
590
+ def extra_super_categories(self):
591
+ """
592
+ Implement the fact that the algebra of a commutative additive
593
+ magmas is commutative.
594
+
595
+ EXAMPLES::
596
+
597
+ sage: C = AdditiveMagmas().AdditiveCommutative().Algebras(QQ)
598
+ sage: C.extra_super_categories()
599
+ [Category of commutative magmas]
600
+
601
+ sage: C.super_categories()
602
+ [Category of additive magma algebras over Rational Field,
603
+ Category of commutative magmas]
604
+ """
605
+ from sage.categories.magmas import Magmas
606
+ return [Magmas().Commutative()]
607
+
608
+ class AdditiveUnital(CategoryWithAxiom):
609
+
610
+ def additional_structure(self) -> Self:
611
+ r"""
612
+ Return whether ``self`` is a structure category.
613
+
614
+ .. SEEALSO:: :meth:`Category.additional_structure`
615
+
616
+ The category of unital additive magmas defines the zero as
617
+ additional structure, and this zero shall be preserved by
618
+ morphisms.
619
+
620
+ EXAMPLES::
621
+
622
+ sage: AdditiveMagmas().AdditiveUnital().additional_structure()
623
+ Category of additive unital additive magmas
624
+ """
625
+ return self
626
+
627
+ class SubcategoryMethods:
628
+
629
+ @cached_method
630
+ def AdditiveInverse(self):
631
+ r"""
632
+ Return the full subcategory of the additive inverse objects
633
+ of ``self``.
634
+
635
+ An inverse :class:`additive magma <AdditiveMagmas>` is
636
+ a :class:`unital additive magma <AdditiveMagmas.Unital>`
637
+ such that every element admits both an additive
638
+ inverse on the left and on the right. Such an additive
639
+ magma is also called an *additive loop*.
640
+
641
+ .. SEEALSO::
642
+
643
+ :wikipedia:`Inverse_element`, :wikipedia:`Quasigroup`
644
+
645
+ EXAMPLES::
646
+
647
+ sage: AdditiveMagmas().AdditiveUnital().AdditiveInverse()
648
+ Category of additive inverse additive unital additive magmas
649
+ sage: from sage.categories.additive_monoids import AdditiveMonoids
650
+ sage: AdditiveMonoids().AdditiveInverse()
651
+ Category of additive groups
652
+
653
+ TESTS::
654
+
655
+ sage: TestSuite(AdditiveMagmas().AdditiveUnital().AdditiveInverse()).run()
656
+ sage: CommutativeAdditiveMonoids().AdditiveInverse.__module__
657
+ 'sage.categories.additive_magmas'
658
+ """
659
+ return self._with_axiom("AdditiveInverse")
660
+
661
+ class ParentMethods:
662
+
663
+ def _test_zero(self, **options):
664
+ r"""
665
+ Test that ``self.zero()`` is an element of ``self`` and
666
+ is neutral for the addition.
667
+
668
+ INPUT:
669
+
670
+ - ``options`` -- any keyword arguments accepted
671
+ by :meth:`_tester`
672
+
673
+ EXAMPLES:
674
+
675
+ By default, this method tests only the elements returned by
676
+ ``self.some_elements()``::
677
+
678
+ sage: S = CommutativeAdditiveMonoids().example()
679
+ sage: S._test_zero()
680
+
681
+ However, the elements tested can be customized with the
682
+ ``elements`` keyword argument::
683
+
684
+ sage: (a,b,c,d) = S.additive_semigroup_generators()
685
+ sage: S._test_zero(elements = (a, a+c))
686
+
687
+ See the documentation for :class:`TestSuite` for
688
+ more information.
689
+ """
690
+ tester = self._tester(**options)
691
+ zero = self.zero()
692
+ # TODO: also call is_zero once it will work
693
+ tester.assertTrue(self.is_parent_of(zero))
694
+ for x in tester.some_elements():
695
+ tester.assertEqual(x + zero, x)
696
+ # Check that zero is immutable if it looks like we can:
697
+ if hasattr(zero, "is_immutable"):
698
+ tester.assertEqual(zero.is_immutable(), True)
699
+ if hasattr(zero, "is_mutable"):
700
+ tester.assertEqual(zero.is_mutable(), False)
701
+ # Check that bool behave consistently on zero
702
+ tester.assertFalse(bool(self.zero()))
703
+
704
+ @cached_method
705
+ def zero(self):
706
+ """
707
+ Return the zero of this additive magma, that is the unique
708
+ neutral element for `+`.
709
+
710
+ The default implementation is to coerce ``0`` into ``self``.
711
+
712
+ It is recommended to override this method because the
713
+ coercion from the integers:
714
+
715
+ - is not always meaningful (except for `0`), and
716
+ - often uses ``self.zero()`` otherwise.
717
+
718
+ EXAMPLES::
719
+
720
+ sage: S = CommutativeAdditiveMonoids().example()
721
+ sage: S.zero()
722
+ 0
723
+ """
724
+ # TODO: add a test that actually exercise this default implementation
725
+ return self(0)
726
+
727
+ def is_empty(self):
728
+ r"""
729
+ Return whether this set is empty.
730
+
731
+ Since this set is an additive magma it has a zero element and
732
+ hence is not empty. This method thus always returns ``False``.
733
+
734
+ EXAMPLES::
735
+
736
+ sage: # needs sage.modules
737
+ sage: A = AdditiveAbelianGroup([3, 3])
738
+ sage: A in AdditiveMagmas()
739
+ True
740
+ sage: A.is_empty()
741
+ False
742
+
743
+ sage: B = CommutativeAdditiveMonoids().example()
744
+ sage: B.is_empty()
745
+ False
746
+
747
+ TESTS:
748
+
749
+ We check that the method ``is_empty`` is inherited from this
750
+ category in both examples above::
751
+
752
+ sage: A.is_empty.__module__ # needs sage.modules
753
+ 'sage.categories.additive_magmas'
754
+ sage: B.is_empty.__module__
755
+ 'sage.categories.additive_magmas'
756
+ """
757
+ return False
758
+
759
+ class ElementMethods:
760
+ # TODO: merge with the implementation in Element which currently
761
+ # overrides this one, and further requires self.parent()(0) to work.
762
+ #
763
+ # def is_zero(self):
764
+ # """
765
+ # Returns whether self is the zero of the magma
766
+ #
767
+ # The default implementation, is to compare with ``self.zero()``.
768
+ #
769
+ # TESTS::
770
+ #
771
+ # sage: S = CommutativeAdditiveMonoids().example()
772
+ # sage: S.zero().is_zero()
773
+ # True
774
+ # sage: S("aa").is_zero()
775
+ # False
776
+ # """
777
+ # return self == self.parent().zero()
778
+
779
+ @abstract_method
780
+ def __bool__(self):
781
+ """
782
+ Return whether ``self`` is not zero.
783
+
784
+ All parents in the category ``CommutativeAdditiveMonoids()``
785
+ should implement this method.
786
+
787
+ .. NOTE:: This is currently not useful because this method is
788
+ overridden by ``Element``.
789
+
790
+ TESTS::
791
+
792
+ sage: S = CommutativeAdditiveMonoids().example()
793
+ sage: bool(S.zero())
794
+ False
795
+ sage: bool(S.an_element())
796
+ True
797
+ """
798
+
799
+ def _test_nonzero_equal(self, **options):
800
+ r"""
801
+ Test that ``.__bool__()`` behave consistently
802
+ with `` == 0``.
803
+
804
+ TESTS::
805
+
806
+ sage: S = CommutativeAdditiveMonoids().example()
807
+ sage: S.zero()._test_nonzero_equal()
808
+ sage: S.an_element()._test_nonzero_equal()
809
+ """
810
+ tester = self._tester(**options)
811
+ tester.assertEqual(bool(self), self != self.parent().zero())
812
+ tester.assertEqual(not self, self == self.parent().zero())
813
+
814
+ def _sub_(left, right):
815
+ r"""
816
+ Default implementation of difference.
817
+
818
+ EXAMPLES::
819
+
820
+ sage: F = CombinatorialFreeModule(QQ, ['a', 'b']) # needs sage.modules
821
+ sage: a, b = F.basis() # needs sage.modules
822
+ sage: a - b # needs sage.modules
823
+ B['a'] - B['b']
824
+
825
+ TESTS:
826
+
827
+ Check that :issue:`18275` is fixed::
828
+
829
+ sage: C = GF(5).cartesian_product(GF(5))
830
+ sage: C.one() - C.one()
831
+ (0, 0)
832
+ """
833
+ return left + (-right)
834
+
835
+ def __neg__(self):
836
+ """
837
+ Return the negation of ``self``, if it exists.
838
+
839
+ This top-level implementation delegates the job to
840
+ ``_neg_``, for those additive unital magmas which may
841
+ choose to implement it instead of ``__neg__`` for
842
+ consistency.
843
+
844
+ EXAMPLES::
845
+
846
+ sage: F = CombinatorialFreeModule(QQ, ['a', 'b']) # needs sage.modules
847
+ sage: a, b = F.basis() # needs sage.modules
848
+ sage: -b # needs sage.modules
849
+ -B['b']
850
+
851
+ TESTS::
852
+
853
+ sage: # needs sage.modules
854
+ sage: F = CombinatorialFreeModule(ZZ, ['a', 'b'])
855
+ sage: a, b = F.gens()
856
+ sage: FF = cartesian_product((F, F))
857
+ sage: x = cartesian_product([a, 2*a-3*b]); x
858
+ B[(0, 'a')] + 2*B[(1, 'a')] - 3*B[(1, 'b')]
859
+ sage: x.parent() is FF
860
+ True
861
+ sage: -x
862
+ -B[(0, 'a')] - 2*B[(1, 'a')] + 3*B[(1, 'b')]
863
+ """
864
+ return self._neg_()
865
+
866
+ class Homsets(HomsetsCategory):
867
+ def extra_super_categories(self):
868
+ """
869
+ Implement the fact that a homset between two unital additive
870
+ magmas is a unital additive magma.
871
+
872
+ EXAMPLES::
873
+
874
+ sage: AdditiveMagmas().AdditiveUnital().Homsets().extra_super_categories()
875
+ [Category of additive unital additive magmas]
876
+ sage: AdditiveMagmas().AdditiveUnital().Homsets().super_categories()
877
+ [Category of additive unital additive magmas, Category of homsets]
878
+ """
879
+ return [AdditiveMagmas().AdditiveUnital()]
880
+
881
+ class ParentMethods:
882
+
883
+ @cached_method
884
+ def zero(self):
885
+ """
886
+ EXAMPLES::
887
+
888
+ sage: R = QQ['x']
889
+ sage: H = Hom(ZZ, R, AdditiveMagmas().AdditiveUnital())
890
+ sage: f = H.zero()
891
+ sage: f
892
+ Generic morphism:
893
+ From: Integer Ring
894
+ To: Univariate Polynomial Ring in x over Rational Field
895
+ sage: f(3)
896
+ 0
897
+ sage: f(3) is R.zero()
898
+ True
899
+
900
+ TESTS:
901
+
902
+ sage: TestSuite(f).run()
903
+ """
904
+ from sage.misc.constant_function import ConstantFunction
905
+ return self(ConstantFunction(self.codomain().zero()))
906
+
907
+ class AdditiveInverse(CategoryWithAxiom):
908
+ class CartesianProducts(CartesianProductsCategory):
909
+ def extra_super_categories(self):
910
+ """
911
+ Implement the fact that a Cartesian product of additive magmas
912
+ with inverses is an additive magma with inverse.
913
+
914
+ EXAMPLES::
915
+
916
+ sage: C = AdditiveMagmas().AdditiveUnital().AdditiveInverse().CartesianProducts()
917
+ sage: C.extra_super_categories()
918
+ [Category of additive inverse additive unital additive magmas]
919
+ sage: sorted(C.axioms())
920
+ ['AdditiveInverse', 'AdditiveUnital']
921
+ """
922
+ return [AdditiveMagmas().AdditiveUnital().AdditiveInverse()]
923
+
924
+ class ElementMethods:
925
+ def _neg_(self):
926
+ """
927
+ Return the negation of ``self``.
928
+
929
+ EXAMPLES::
930
+
931
+ sage: x = cartesian_product((GF(7)(2), 17)); x
932
+ (2, 17)
933
+ sage: -x
934
+ (5, -17)
935
+
936
+ TESTS::
937
+
938
+ sage: C = AdditiveMagmas().AdditiveUnital().AdditiveInverse().CartesianProducts()
939
+ sage: x.parent() in C
940
+ True
941
+ """
942
+ return self.parent()._cartesian_product_of_elements(
943
+ [-x for x in self.cartesian_factors()])
944
+
945
+ class CartesianProducts(CartesianProductsCategory):
946
+ def extra_super_categories(self):
947
+ """
948
+ Implement the fact that a Cartesian product of unital additive
949
+ magmas is a unital additive magma.
950
+
951
+ EXAMPLES::
952
+
953
+ sage: C = AdditiveMagmas().AdditiveUnital().CartesianProducts()
954
+ sage: C.extra_super_categories()
955
+ [Category of additive unital additive magmas]
956
+ sage: C.axioms()
957
+ frozenset({'AdditiveUnital'})
958
+ """
959
+ return [AdditiveMagmas().AdditiveUnital()]
960
+
961
+ class ParentMethods:
962
+ def zero(self):
963
+ r"""
964
+ Return the zero of this group.
965
+
966
+ EXAMPLES::
967
+
968
+ sage: GF(8, 'x').cartesian_product(GF(5)).zero() # needs sage.rings.finite_rings
969
+ (0, 0)
970
+ """
971
+ return self._cartesian_product_of_elements(
972
+ _.zero() for _ in self.cartesian_factors())
973
+
974
+ class Algebras(AlgebrasCategory):
975
+
976
+ def extra_super_categories(self):
977
+ """
978
+ EXAMPLES::
979
+
980
+ sage: C = AdditiveMagmas().AdditiveUnital().Algebras(QQ)
981
+ sage: C.extra_super_categories()
982
+ [Category of unital magmas]
983
+
984
+ sage: C.super_categories()
985
+ [Category of additive magma algebras over Rational Field,
986
+ Category of unital algebras with basis over Rational Field]
987
+ """
988
+ from sage.categories.magmas import Magmas
989
+ return [Magmas().Unital()]
990
+
991
+ class ParentMethods:
992
+
993
+ @cached_method
994
+ def one_basis(self):
995
+ """
996
+ Return the zero of this additive magma, which index the
997
+ one of this algebra, as per
998
+ :meth:`AlgebrasWithBasis.ParentMethods.one_basis()
999
+ <sage.categories.algebras_with_basis.AlgebrasWithBasis.ParentMethods.one_basis>`.
1000
+
1001
+ EXAMPLES::
1002
+
1003
+ sage: # needs sage.modules
1004
+ sage: S = CommutativeAdditiveMonoids().example(); S
1005
+ An example of a commutative monoid:
1006
+ the free commutative monoid generated by ('a', 'b', 'c', 'd')
1007
+ sage: A = S.algebra(ZZ)
1008
+ sage: A.one_basis()
1009
+ 0
1010
+ sage: A.one()
1011
+ B[0]
1012
+ sage: A(3)
1013
+ 3*B[0]
1014
+ """
1015
+ return self.basis().keys().zero()
1016
+
1017
+ class WithRealizations(WithRealizationsCategory):
1018
+
1019
+ class ParentMethods:
1020
+
1021
+ def zero(self):
1022
+ r"""
1023
+ Return the zero of this unital additive magma.
1024
+
1025
+ This default implementation returns the zero of the
1026
+ realization of ``self`` given by
1027
+ :meth:`~Sets.WithRealizations.ParentMethods.a_realization`.
1028
+
1029
+ EXAMPLES::
1030
+
1031
+ sage: A = Sets().WithRealizations().example(); A # needs sage.modules
1032
+ The subset algebra of {1, 2, 3} over Rational Field
1033
+ sage: A.zero.__module__ # needs sage.modules
1034
+ 'sage.categories.additive_magmas'
1035
+ sage: A.zero() # needs sage.modules
1036
+ 0
1037
+
1038
+ TESTS::
1039
+
1040
+ sage: A.zero() is A.a_realization().zero() # needs sage.modules
1041
+ True
1042
+ sage: A._test_zero() # needs sage.modules
1043
+ """
1044
+ return self.a_realization().zero()