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,989 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ r"""
3
+ Modules
4
+ """
5
+ # ****************************************************************************
6
+ # Copyright (C) 2005 David Kohel <kohel@maths.usyd.edu>
7
+ # William Stein <wstein@math.ucsd.edu>
8
+ # 2008 Teresa Gomez-Diaz (CNRS) <Teresa.Gomez-Diaz@univ-mlv.fr>
9
+ # 2008-2011 Nicolas M. Thiery <nthiery at users.sf.net>
10
+ #
11
+ # Distributed under the terms of the GNU General Public License (GPL)
12
+ # https://www.gnu.org/licenses/
13
+ # *****************************************************************************
14
+
15
+ from sage.categories.bimodules import Bimodules
16
+ from sage.categories.cartesian_product import CartesianProductsCategory
17
+ from sage.categories.category import Category
18
+ from sage.categories.category_types import Category_module
19
+ from sage.categories.category_with_axiom import CategoryWithAxiom_over_base_ring
20
+ from sage.categories.dual import DualObjectsCategory
21
+ from sage.categories.fields import Fields
22
+ from sage.categories.homset import Hom
23
+ from sage.categories.homsets import HomsetsCategory
24
+ from sage.categories.morphism import SetMorphism
25
+ from sage.categories.sets_cat import Sets
26
+ from sage.categories.tensor import TensorProductFunctor, TensorProductsCategory, tensor
27
+ from sage.misc.abstract_method import abstract_method
28
+ from sage.misc.cachefunc import cached_method
29
+ from sage.misc.lazy_import import LazyImport
30
+
31
+ _Fields = Fields()
32
+
33
+
34
+ class Modules(Category_module):
35
+ r"""
36
+ The category of all modules over a base ring `R`.
37
+
38
+ An `R`-module `M` is a left and right `R`-module over a
39
+ commutative ring `R` such that:
40
+
41
+ .. MATH::
42
+
43
+ r*(x*s) = (r*x)*s \qquad \forall r,s \in R \text{ and } x \in M
44
+
45
+ INPUT:
46
+
47
+ - ``base_ring`` -- a ring `R` or subcategory of ``Rings()``
48
+ - ``dispatch`` -- boolean (for internal use; default: ``True``)
49
+
50
+ When the base ring is a field, the category of vector spaces is
51
+ returned instead (unless ``dispatch == False``).
52
+
53
+ .. WARNING::
54
+
55
+ Outside of the context of symmetric modules over a commutative
56
+ ring, the specifications of this category are fuzzy and not
57
+ yet set in stone (see below). The code in this category and
58
+ its subcategories is therefore prone to bugs or arbitrary
59
+ limitations in this case.
60
+
61
+ EXAMPLES::
62
+
63
+ sage: Modules(ZZ)
64
+ Category of modules over Integer Ring
65
+ sage: Modules(QQ)
66
+ Category of vector spaces over Rational Field
67
+
68
+ sage: Modules(Rings())
69
+ Category of modules over rings
70
+ sage: Modules(FiniteFields())
71
+ Category of vector spaces over finite enumerated fields
72
+
73
+ sage: Modules(Integers(9))
74
+ Category of modules over Ring of integers modulo 9
75
+
76
+ sage: Modules(Integers(9)).super_categories()
77
+ [Category of bimodules over Ring of integers modulo 9 on the left
78
+ and Ring of integers modulo 9 on the right]
79
+
80
+ sage: Modules(ZZ).super_categories()
81
+ [Category of bimodules over Integer Ring on the left
82
+ and Integer Ring on the right]
83
+
84
+ sage: Modules == RingModules
85
+ True
86
+
87
+ sage: Modules(ZZ['x']).is_abelian() # see #6081
88
+ True
89
+
90
+ TESTS::
91
+
92
+ sage: TestSuite(Modules(ZZ)).run()
93
+
94
+ .. TODO::
95
+
96
+ - Clarify the distinction, if any, with ``BiModules(R, R)``.
97
+ In particular, if `R` is a commutative ring (e.g. a field),
98
+ some pieces of the code possibly assume that `M` is a
99
+ *symmetric `R`-`R`-bimodule*:
100
+
101
+ .. MATH::
102
+
103
+ r*x = x*r \qquad \forall r \in R \text{ and } x \in M
104
+
105
+ - Make sure that non symmetric modules are properly supported
106
+ by all the code, and advertise it.
107
+
108
+ - Make sure that non commutative rings are properly supported
109
+ by all the code, and advertise it.
110
+
111
+ - Add support for base semirings.
112
+
113
+ - Implement a ``FreeModules(R)`` category, when so prompted by a
114
+ concrete use case: e.g. modeling a free module with several
115
+ bases (using :meth:`Sets.SubcategoryMethods.Realizations`)
116
+ or with an atlas of local maps (see e.g. :issue:`15916`).
117
+ """
118
+
119
+ @staticmethod
120
+ def __classcall_private__(cls, base_ring, dispatch=True):
121
+ r"""
122
+ Implement the dispatching of ``Modules(field)`` to
123
+ ``VectorSpaces(field)``.
124
+
125
+ This feature will later be extended, probably as a covariant
126
+ functorial construction, to support modules over various kinds
127
+ of rings (principal ideal domains, ...), or even over semirings.
128
+
129
+ TESTS::
130
+
131
+ sage: C = Modules(ZZ); C
132
+ Category of modules over Integer Ring
133
+ sage: C is Modules(ZZ, dispatch = False)
134
+ True
135
+ sage: C is Modules(ZZ, dispatch = True)
136
+ True
137
+ sage: C._reduction
138
+ (<class 'sage.categories.modules.Modules'>, (Integer Ring,), {'dispatch': False})
139
+ sage: TestSuite(C).run()
140
+
141
+ sage: Modules(QQ) is VectorSpaces(QQ)
142
+ True
143
+ sage: Modules(QQ, dispatch = True) is VectorSpaces(QQ)
144
+ True
145
+
146
+ sage: C = Modules(NonNegativeIntegers()); C # todo: not implemented
147
+ Category of semiring modules over Non negative integers
148
+
149
+ sage: C = Modules(QQ, dispatch = False); C
150
+ Category of modules over Rational Field
151
+ sage: C._reduction
152
+ (<class 'sage.categories.modules.Modules'>, (Rational Field,), {'dispatch': False})
153
+ sage: TestSuite(C).run()
154
+ """
155
+ if dispatch:
156
+ if base_ring in _Fields or (isinstance(base_ring, Category)
157
+ and base_ring.is_subcategory(_Fields)):
158
+ from .vector_spaces import VectorSpaces
159
+ return VectorSpaces(base_ring, check=False)
160
+ result = super().__classcall__(cls, base_ring)
161
+ result._reduction[2]['dispatch'] = False
162
+ return result
163
+
164
+ def super_categories(self):
165
+ """
166
+ EXAMPLES::
167
+
168
+ sage: Modules(ZZ).super_categories()
169
+ [Category of bimodules over Integer Ring on the left
170
+ and Integer Ring on the right]
171
+
172
+ Nota bene::
173
+
174
+ sage: Modules(QQ)
175
+ Category of vector spaces over Rational Field
176
+ sage: Modules(QQ).super_categories()
177
+ [Category of modules over Rational Field]
178
+ """
179
+ R = self.base_ring()
180
+ return [Bimodules(R, R)]
181
+
182
+ def additional_structure(self):
183
+ r"""
184
+ Return ``None``.
185
+
186
+ Indeed, the category of modules defines no additional structure:
187
+ a bimodule morphism between two modules is a module morphism.
188
+
189
+ .. SEEALSO:: :meth:`Category.additional_structure`
190
+
191
+ .. TODO:: Should this category be a :class:`~sage.categories.category_with_axiom.CategoryWithAxiom`?
192
+
193
+ EXAMPLES::
194
+
195
+ sage: Modules(ZZ).additional_structure()
196
+ """
197
+ return None
198
+
199
+ class SubcategoryMethods:
200
+
201
+ @cached_method
202
+ def base_ring(self):
203
+ r"""
204
+ Return the base ring (category) for ``self``.
205
+
206
+ This implements a ``base_ring`` method for all
207
+ subcategories of ``Modules(K)``.
208
+
209
+ EXAMPLES::
210
+
211
+ sage: C = Modules(QQ) & Semigroups(); C
212
+ Join of Category of semigroups
213
+ and Category of vector spaces over Rational Field
214
+ sage: C.base_ring()
215
+ Rational Field
216
+ sage: C.base_ring.__module__
217
+ 'sage.categories.modules'
218
+
219
+ sage: C2 = Modules(Rings()) & Semigroups(); C2
220
+ Join of Category of semigroups and Category of modules over rings
221
+ sage: C2.base_ring()
222
+ Category of rings
223
+ sage: C2.base_ring.__module__
224
+ 'sage.categories.modules'
225
+
226
+ sage: # needs sage.combinat sage.groups sage.modules
227
+ sage: C3 = DescentAlgebra(QQ,3).B().category()
228
+ sage: C3.base_ring.__module__
229
+ 'sage.categories.modules'
230
+ sage: C3.base_ring()
231
+ Rational Field
232
+
233
+ sage: # needs sage.combinat sage.modules
234
+ sage: C4 = QuasiSymmetricFunctions(QQ).F().category()
235
+ sage: C4.base_ring.__module__
236
+ 'sage.categories.modules'
237
+ sage: C4.base_ring()
238
+ Rational Field
239
+ """
240
+ for C in self.super_categories():
241
+ # Is there a better way to ask if C is a subcategory of Modules?
242
+ if hasattr(C, "base_ring"):
243
+ return C.base_ring()
244
+ assert False, "some super category of {} should be a category over base ring".format(self)
245
+
246
+ def TensorProducts(self):
247
+ r"""
248
+ Return the full subcategory of objects of ``self`` constructed
249
+ as tensor products.
250
+
251
+ .. SEEALSO::
252
+
253
+ - :class:`.tensor.TensorProductsCategory`
254
+ - :class:`~.covariant_functorial_construction.RegressiveCovariantFunctorialConstruction`.
255
+
256
+ EXAMPLES::
257
+
258
+ sage: ModulesWithBasis(QQ).TensorProducts()
259
+ Category of tensor products of vector spaces with basis over Rational Field
260
+ """
261
+ return TensorProductsCategory.category_of(self)
262
+
263
+ @cached_method
264
+ def DualObjects(self):
265
+ r"""
266
+ Return the category of spaces constructed as duals of
267
+ spaces of ``self``.
268
+
269
+ The *dual* of a vector space `V` is the space consisting of
270
+ all linear functionals on `V` (see :wikipedia:`Dual_space`).
271
+ Additional structure on `V` can endow its dual with
272
+ additional structure; for example, if `V` is a finite
273
+ dimensional algebra, then its dual is a coalgebra.
274
+
275
+ This returns the category of spaces constructed as dual of
276
+ spaces in ``self``, endowed with the appropriate
277
+ additional structure.
278
+
279
+ .. WARNING::
280
+
281
+ - This semantic of ``dual`` and ``DualObject`` is
282
+ imposed on all subcategories, in particular to make
283
+ ``dual`` a covariant functorial construction.
284
+
285
+ A subcategory that defines a different notion of
286
+ dual needs to use a different name.
287
+
288
+ - Typically, the category of graded modules should
289
+ define a separate ``graded_dual`` construction (see
290
+ :issue:`15647`). For now the two constructions are
291
+ not distinguished which is an oversimplified model.
292
+
293
+ .. SEEALSO::
294
+
295
+ - :class:`.dual.DualObjectsCategory`
296
+ - :class:`~.covariant_functorial_construction.CovariantFunctorialConstruction`.
297
+
298
+ EXAMPLES::
299
+
300
+ sage: VectorSpaces(QQ).DualObjects()
301
+ Category of duals of vector spaces over Rational Field
302
+
303
+ The dual of a vector space is a vector space::
304
+
305
+ sage: VectorSpaces(QQ).DualObjects().super_categories()
306
+ [Category of vector spaces over Rational Field]
307
+
308
+ The dual of an algebra is a coalgebra::
309
+
310
+ sage: sorted(Algebras(QQ).DualObjects().super_categories(), key=str)
311
+ [Category of coalgebras over Rational Field,
312
+ Category of duals of vector spaces over Rational Field]
313
+
314
+ The dual of a coalgebra is an algebra::
315
+
316
+ sage: sorted(Coalgebras(QQ).DualObjects().super_categories(), key=str)
317
+ [Category of algebras over Rational Field,
318
+ Category of duals of vector spaces over Rational Field]
319
+
320
+ As a shorthand, this category can be accessed with the
321
+ :meth:`~Modules.SubcategoryMethods.dual` method::
322
+
323
+ sage: VectorSpaces(QQ).dual()
324
+ Category of duals of vector spaces over Rational Field
325
+
326
+ TESTS::
327
+
328
+ sage: C = VectorSpaces(QQ).DualObjects()
329
+ sage: C.base_category()
330
+ Category of vector spaces over Rational Field
331
+ sage: C.super_categories()
332
+ [Category of vector spaces over Rational Field]
333
+ sage: latex(C)
334
+ \mathbf{DualObjects}(\mathbf{VectorSpaces}_{\Bold{Q}})
335
+ sage: TestSuite(C).run()
336
+ """
337
+ return DualObjectsCategory.category_of(self)
338
+
339
+ dual = DualObjects
340
+
341
+ @cached_method
342
+ def FiniteDimensional(self):
343
+ r"""
344
+ Return the full subcategory of the finite dimensional objects of ``self``.
345
+
346
+ EXAMPLES::
347
+
348
+ sage: Modules(ZZ).FiniteDimensional()
349
+ Category of finite dimensional modules over Integer Ring
350
+ sage: Coalgebras(QQ).FiniteDimensional()
351
+ Category of finite dimensional coalgebras over Rational Field
352
+ sage: AlgebrasWithBasis(QQ).FiniteDimensional()
353
+ Category of finite dimensional algebras with basis over Rational Field
354
+
355
+ TESTS::
356
+
357
+ sage: TestSuite(Modules(ZZ).FiniteDimensional()).run()
358
+ sage: Coalgebras(QQ).FiniteDimensional.__module__
359
+ 'sage.categories.modules'
360
+ """
361
+ return self._with_axiom("FiniteDimensional")
362
+
363
+ @cached_method
364
+ def FinitelyPresented(self):
365
+ r"""
366
+ Return the full subcategory of the finitely presented objects of ``self``.
367
+
368
+ EXAMPLES::
369
+
370
+ sage: Modules(ZZ).FinitelyPresented()
371
+ Category of finitely presented modules over Integer Ring
372
+ sage: A = SteenrodAlgebra(2) # needs sage.combinat sage.modules
373
+ sage: from sage.modules.fp_graded.module import FPModule # needs sage.combinat sage.modules
374
+ sage: FPModule(A, [0, 1], [[Sq(2), Sq(1)]]).category() # needs sage.combinat sage.modules
375
+ Category of finitely presented graded modules
376
+ over mod 2 Steenrod algebra, milnor basis
377
+
378
+ TESTS::
379
+
380
+ sage: TestSuite(Modules(ZZ).FinitelyPresented()).run()
381
+ """
382
+ return self._with_axiom("FinitelyPresented")
383
+
384
+ @cached_method
385
+ def Filtered(self, base_ring=None):
386
+ r"""
387
+ Return the subcategory of the filtered objects of ``self``.
388
+
389
+ INPUT:
390
+
391
+ - ``base_ring`` -- this is ignored
392
+
393
+ EXAMPLES::
394
+
395
+ sage: Modules(ZZ).Filtered()
396
+ Category of filtered modules over Integer Ring
397
+
398
+ sage: Coalgebras(QQ).Filtered()
399
+ Category of filtered coalgebras over Rational Field
400
+
401
+ sage: AlgebrasWithBasis(QQ).Filtered()
402
+ Category of filtered algebras with basis over Rational Field
403
+
404
+ .. TODO::
405
+
406
+ - Explain why this does not commute with :meth:`WithBasis`
407
+ - Improve the support for covariant functorial
408
+ constructions categories over a base ring so as to
409
+ get rid of the ``base_ring`` argument.
410
+
411
+ TESTS::
412
+
413
+ sage: Coalgebras(QQ).Graded.__module__
414
+ 'sage.categories.modules'
415
+ """
416
+ assert base_ring is None or base_ring is self.base_ring()
417
+ from sage.categories.filtered_modules import FilteredModulesCategory
418
+ return FilteredModulesCategory.category_of(self)
419
+
420
+ @cached_method
421
+ def Graded(self, base_ring=None):
422
+ r"""
423
+ Return the subcategory of the graded objects of ``self``.
424
+
425
+ INPUT:
426
+
427
+ - ``base_ring`` -- this is ignored
428
+
429
+ EXAMPLES::
430
+
431
+ sage: Modules(ZZ).Graded()
432
+ Category of graded modules over Integer Ring
433
+
434
+ sage: Coalgebras(QQ).Graded()
435
+ Category of graded coalgebras over Rational Field
436
+
437
+ sage: AlgebrasWithBasis(QQ).Graded()
438
+ Category of graded algebras with basis over Rational Field
439
+
440
+ .. TODO::
441
+
442
+ - Explain why this does not commute with :meth:`WithBasis`
443
+ - Improve the support for covariant functorial
444
+ constructions categories over a base ring so as to
445
+ get rid of the ``base_ring`` argument.
446
+
447
+ TESTS::
448
+
449
+ sage: Coalgebras(QQ).Graded.__module__
450
+ 'sage.categories.modules'
451
+ """
452
+ assert base_ring is None or base_ring is self.base_ring()
453
+ from sage.categories.graded_modules import GradedModulesCategory
454
+ return GradedModulesCategory.category_of(self)
455
+
456
+ @cached_method
457
+ def Super(self, base_ring=None):
458
+ r"""
459
+ Return the super-analogue category of ``self``.
460
+
461
+ INPUT:
462
+
463
+ - ``base_ring`` -- this is ignored
464
+
465
+ EXAMPLES::
466
+
467
+ sage: Modules(ZZ).Super()
468
+ Category of super modules over Integer Ring
469
+
470
+ sage: Coalgebras(QQ).Super()
471
+ Category of super coalgebras over Rational Field
472
+
473
+ sage: AlgebrasWithBasis(QQ).Super()
474
+ Category of super algebras with basis over Rational Field
475
+
476
+ .. TODO::
477
+
478
+ - Explain why this does not commute with :meth:`WithBasis`
479
+ - Improve the support for covariant functorial
480
+ constructions categories over a base ring so as to
481
+ get rid of the ``base_ring`` argument.
482
+
483
+ TESTS::
484
+
485
+ sage: Coalgebras(QQ).Super.__module__
486
+ 'sage.categories.modules'
487
+ """
488
+ assert base_ring is None or base_ring is self.base_ring()
489
+ from sage.categories.super_modules import SuperModulesCategory
490
+ return SuperModulesCategory.category_of(self)
491
+
492
+ @cached_method
493
+ def WithBasis(self):
494
+ r"""
495
+ Return the full subcategory of the objects of ``self`` with
496
+ a distinguished basis.
497
+
498
+ EXAMPLES::
499
+
500
+ sage: Modules(ZZ).WithBasis()
501
+ Category of modules with basis over Integer Ring
502
+ sage: Coalgebras(QQ).WithBasis()
503
+ Category of coalgebras with basis over Rational Field
504
+ sage: AlgebrasWithBasis(QQ).WithBasis()
505
+ Category of algebras with basis over Rational Field
506
+
507
+ TESTS::
508
+
509
+ sage: TestSuite(Modules(ZZ).WithBasis()).run()
510
+ sage: Coalgebras(QQ).WithBasis.__module__
511
+ 'sage.categories.modules'
512
+ """
513
+ return self._with_axiom("WithBasis")
514
+
515
+ class FiniteDimensional(CategoryWithAxiom_over_base_ring):
516
+
517
+ def extra_super_categories(self):
518
+ """
519
+ Implement the fact that a finite dimensional module over a finite
520
+ ring is finite.
521
+
522
+ EXAMPLES::
523
+
524
+ sage: Modules(IntegerModRing(4)).FiniteDimensional().extra_super_categories()
525
+ [Category of finite sets]
526
+ sage: Modules(ZZ).FiniteDimensional().extra_super_categories()
527
+ []
528
+ sage: Modules(GF(5)).FiniteDimensional().is_subcategory(Sets().Finite())
529
+ True
530
+ sage: Modules(ZZ).FiniteDimensional().is_subcategory(Sets().Finite())
531
+ False
532
+
533
+ sage: Modules(Rings().Finite()).FiniteDimensional().is_subcategory(Sets().Finite())
534
+ True
535
+ sage: Modules(Rings()).FiniteDimensional().is_subcategory(Sets().Finite())
536
+ False
537
+ """
538
+ base_ring = self.base_ring()
539
+ FiniteSets = Sets().Finite()
540
+ if (isinstance(base_ring, Category) and
541
+ base_ring.is_subcategory(FiniteSets)) or \
542
+ base_ring in FiniteSets:
543
+ return [FiniteSets]
544
+ else:
545
+ return []
546
+
547
+ class TensorProducts(TensorProductsCategory):
548
+
549
+ def extra_super_categories(self):
550
+ """
551
+ Implement the fact that a (finite) tensor product of
552
+ finite dimensional modules is a finite dimensional module.
553
+
554
+ EXAMPLES::
555
+
556
+ sage: Modules(ZZ).FiniteDimensional().TensorProducts().extra_super_categories()
557
+ [Category of finite dimensional modules over Integer Ring]
558
+ sage: Modules(QQ).FiniteDimensional().TensorProducts().FiniteDimensional()
559
+ Category of tensor products of finite dimensional vector spaces
560
+ over Rational Field
561
+ """
562
+ return [self.base_category()]
563
+
564
+ class FinitelyPresented(CategoryWithAxiom_over_base_ring):
565
+
566
+ def extra_super_categories(self):
567
+ """
568
+ Implement the fact that a finitely presented module over a finite
569
+ ring is finite.
570
+
571
+ EXAMPLES::
572
+
573
+ sage: Modules(IntegerModRing(4)).FiniteDimensional().extra_super_categories()
574
+ [Category of finite sets]
575
+ sage: Modules(ZZ).FiniteDimensional().extra_super_categories()
576
+ []
577
+ sage: Modules(GF(5)).FiniteDimensional().is_subcategory(Sets().Finite())
578
+ True
579
+ sage: Modules(ZZ).FiniteDimensional().is_subcategory(Sets().Finite())
580
+ False
581
+
582
+ sage: Modules(Rings().Finite()).FiniteDimensional().is_subcategory(Sets().Finite())
583
+ True
584
+ sage: Modules(Rings()).FiniteDimensional().is_subcategory(Sets().Finite())
585
+ False
586
+ """
587
+ base_ring = self.base_ring()
588
+ FiniteSets = Sets().Finite()
589
+ if (isinstance(base_ring, Category) and
590
+ base_ring.is_subcategory(FiniteSets)) or \
591
+ base_ring in FiniteSets:
592
+ return [FiniteSets]
593
+ else:
594
+ return []
595
+
596
+ Filtered = LazyImport('sage.categories.filtered_modules', 'FilteredModules')
597
+ Graded = LazyImport('sage.categories.graded_modules', 'GradedModules')
598
+ Super = LazyImport('sage.categories.super_modules', 'SuperModules')
599
+ # at_startup currently needed for MatrixSpace, see #22955 (e.g., comment:20)
600
+ WithBasis = LazyImport('sage.categories.modules_with_basis', 'ModulesWithBasis',
601
+ at_startup=True)
602
+
603
+ class ParentMethods:
604
+
605
+ def linear_combination(self, iter_of_elements_coeff, factor_on_left=True):
606
+ r"""
607
+ Return the linear combination `\lambda_1 v_1 + \cdots +
608
+ \lambda_k v_k` (resp. the linear combination `v_1 \lambda_1 +
609
+ \cdots + v_k \lambda_k`) where ``iter_of_elements_coeff`` iterates
610
+ through the sequence `((\lambda_1, v_1), ..., (\lambda_k, v_k))`.
611
+
612
+ INPUT:
613
+
614
+ - ``iter_of_elements_coeff`` -- iterator of pairs
615
+ ``(element, coeff)`` with ``element`` in ``self`` and
616
+ ``coeff`` in ``self.base_ring()``
617
+
618
+ - ``factor_on_left`` -- (optional) if ``True``, the coefficients
619
+ are multiplied from the left; if ``False``, the coefficients
620
+ are multiplied from the right
621
+
622
+ EXAMPLES::
623
+
624
+ sage: m = matrix([[0,1], [1,1]]) # needs sage.modules
625
+ sage: J.<a,b,c> = JordanAlgebra(m) # needs sage.combinat sage.modules
626
+ sage: J.linear_combination(((a+b, 1), (-2*b + c, -1))) # needs sage.combinat sage.modules
627
+ 1 + (3, -1)
628
+ """
629
+ if factor_on_left:
630
+ return self.sum(coeff * element
631
+ for element, coeff in iter_of_elements_coeff)
632
+ else:
633
+ return self.sum(element * coeff
634
+ for element, coeff in iter_of_elements_coeff)
635
+
636
+ @cached_method
637
+ def tensor_square(self):
638
+ """
639
+ Return the tensor square of ``self``.
640
+
641
+ EXAMPLES::
642
+
643
+ sage: A = HopfAlgebrasWithBasis(QQ).example() # needs sage.groups sage.modules
644
+ sage: A.tensor_square() # needs sage.groups sage.modules
645
+ An example of Hopf algebra with basis:
646
+ the group algebra of the Dihedral group of order 6
647
+ as a permutation group over Rational Field # An example
648
+ of Hopf algebra with basis: the group algebra of the Dihedral
649
+ group of order 6 as a permutation group over Rational Field
650
+ """
651
+ return tensor([self, self])
652
+
653
+ def module_morphism(self, *, function, category=None, codomain, **keywords):
654
+ r"""
655
+ Construct a module morphism from ``self`` to ``codomain``.
656
+
657
+ Let ``self`` be a module `X` over a ring `R`.
658
+ This constructs a morphism `f: X \to Y`.
659
+
660
+ INPUT:
661
+
662
+ - ``self`` -- a parent `X` in ``Modules(R)``
663
+
664
+ - ``function`` -- a function `f` from `X` to `Y`
665
+
666
+ - ``codomain`` -- the codomain `Y` of the morphism (default:
667
+ ``f.codomain()`` if it's defined; otherwise it must be specified)
668
+
669
+ - ``category`` -- a category or ``None`` (default: ``None``)
670
+
671
+ EXAMPLES::
672
+
673
+ sage: # needs sage.modules
674
+ sage: V = FiniteRankFreeModule(QQ, 2)
675
+ sage: e = V.basis('e'); e
676
+ Basis (e_0,e_1) on the
677
+ 2-dimensional vector space over the Rational Field
678
+ sage: neg = V.module_morphism(function=operator.neg, codomain=V); neg
679
+ Generic endomorphism of
680
+ 2-dimensional vector space over the Rational Field
681
+ sage: neg(e[0])
682
+ Element -e_0 of the 2-dimensional vector space over the Rational Field
683
+ """
684
+ # Make sure that we only create a module morphism, even if
685
+ # domain and codomain have more structure
686
+ if category is None:
687
+ category = Modules(self.base_ring())
688
+ return SetMorphism(Hom(self, codomain, category), function)
689
+
690
+ def quotient(self, submodule, check=True, **kwds):
691
+ r"""
692
+ Construct the quotient module ``self`` / ``submodule``.
693
+
694
+ INPUT:
695
+
696
+ - ``submodule`` -- a submodule with basis of ``self``, or
697
+ something that can be turned into one via
698
+ ``self.submodule(submodule)``
699
+
700
+ - ``check``, other keyword arguments -- passed on to
701
+ :meth:`quotient_module`.
702
+
703
+ This method just delegates to :meth:`quotient_module`.
704
+ Classes implementing modules should override that method.
705
+
706
+ Parents in categories with additional structure may override
707
+ :meth:`quotient`. For example, in algebras, :meth:`quotient` will
708
+ be the same as :meth:`quotient_ring`.
709
+
710
+ EXAMPLES::
711
+
712
+ sage: C = CombinatorialFreeModule(QQ, ['a','b','c']) # needs sage.modules
713
+ sage: TA = TensorAlgebra(C) # needs sage.combinat sage.modules
714
+ sage: TA.quotient # needs sage.combinat sage.modules
715
+ <bound method Rings.ParentMethods.quotient of
716
+ Tensor Algebra of Free module generated by {'a', 'b', 'c'}
717
+ over Rational Field>
718
+ """
719
+ return self.quotient_module(submodule, check=check, **kwds)
720
+
721
+ class ElementMethods:
722
+ pass
723
+
724
+ class Homsets(HomsetsCategory):
725
+ r"""
726
+ The category of homomorphism sets `\hom(X,Y)` for `X`, `Y` modules.
727
+ """
728
+
729
+ def extra_super_categories(self):
730
+ """
731
+ EXAMPLES::
732
+
733
+ sage: Modules(ZZ).Homsets().extra_super_categories()
734
+ [Category of modules over Integer Ring]
735
+ """
736
+ return [Modules(self.base_category().base_ring())]
737
+
738
+ def base_ring(self):
739
+ """
740
+ EXAMPLES::
741
+
742
+ sage: Modules(ZZ).Homsets().base_ring()
743
+ Integer Ring
744
+
745
+ .. TODO::
746
+
747
+ Generalize this so that any homset category of a full
748
+ subcategory of modules over a base ring is a category over
749
+ this base ring.
750
+ """
751
+ return self.base_category().base_ring()
752
+
753
+ class ParentMethods:
754
+
755
+ @cached_method
756
+ def base_ring(self):
757
+ """
758
+ Return the base ring of ``self``.
759
+
760
+ EXAMPLES::
761
+
762
+ sage: # needs sage.modules
763
+ sage: E = CombinatorialFreeModule(ZZ, [1,2,3])
764
+ sage: F = CombinatorialFreeModule(ZZ, [2,3,4])
765
+ sage: H = Hom(E, F)
766
+ sage: H.base_ring()
767
+ Integer Ring
768
+
769
+ This ``base_ring`` method is actually overridden by
770
+ :meth:`sage.structure.category_object.CategoryObject.base_ring`::
771
+
772
+ sage: H.base_ring.__module__ # needs sage.modules
773
+
774
+ Here we call it directly::
775
+
776
+ sage: method = H.category().parent_class.base_ring # needs sage.modules
777
+ sage: method.__get__(H)() # needs sage.modules
778
+ Integer Ring
779
+ """
780
+ return self.domain().base_ring()
781
+
782
+ @cached_method
783
+ def zero(self):
784
+ """
785
+ EXAMPLES::
786
+
787
+ sage: # needs sage.modules
788
+ sage: E = CombinatorialFreeModule(ZZ, [1,2,3])
789
+ sage: F = CombinatorialFreeModule(ZZ, [2,3,4])
790
+ sage: H = Hom(E, F)
791
+ sage: f = H.zero()
792
+ sage: f
793
+ Generic morphism:
794
+ From: Free module generated by {1, 2, 3} over Integer Ring
795
+ To: Free module generated by {2, 3, 4} over Integer Ring
796
+ sage: f(E.monomial(2))
797
+ 0
798
+ sage: f(E.monomial(3)) == F.zero()
799
+ True
800
+
801
+ TESTS:
802
+
803
+ We check that ``H.zero()`` is picklable::
804
+
805
+ sage: loads(dumps(f.parent().zero())) # needs sage.modules
806
+ Generic morphism:
807
+ From: Free module generated by {1, 2, 3} over Integer Ring
808
+ To: Free module generated by {2, 3, 4} over Integer Ring
809
+ """
810
+ from sage.misc.constant_function import ConstantFunction
811
+ return self(ConstantFunction(self.codomain().zero()))
812
+
813
+ class Endset(CategoryWithAxiom_over_base_ring):
814
+ """
815
+ The category of endomorphism sets `End(X)` for `X`
816
+ a module (this is not used yet)
817
+ """
818
+ def extra_super_categories(self):
819
+ """
820
+ Implement the fact that the endomorphism set of a module is an algebra.
821
+
822
+ .. SEEALSO:: :meth:`CategoryWithAxiom.extra_super_categories`
823
+
824
+ EXAMPLES::
825
+
826
+ sage: Modules(ZZ).Endsets().extra_super_categories()
827
+ [Category of magmatic algebras over Integer Ring]
828
+
829
+ sage: End(ZZ^3) in Algebras(ZZ) # needs sage.modules
830
+ True
831
+ """
832
+ from .magmatic_algebras import MagmaticAlgebras
833
+ return [MagmaticAlgebras(self.base_category().base_ring())]
834
+
835
+ class CartesianProducts(CartesianProductsCategory):
836
+ """
837
+ The category of modules constructed as Cartesian products of modules.
838
+
839
+ This construction gives the direct product of modules. The
840
+ implementation is based on the following resources:
841
+
842
+ - http://groups.google.fr/group/sage-devel/browse_thread/thread/35a72b1d0a2fc77a/348f42ae77a66d16#348f42ae77a66d16
843
+ - :wikipedia:`Direct_product`
844
+ """
845
+ def extra_super_categories(self):
846
+ """
847
+ A Cartesian product of modules is endowed with a natural
848
+ module structure.
849
+
850
+ EXAMPLES::
851
+
852
+ sage: Modules(ZZ).CartesianProducts().extra_super_categories()
853
+ [Category of modules over Integer Ring]
854
+ sage: Modules(ZZ).CartesianProducts().super_categories()
855
+ [Category of Cartesian products of commutative additive groups,
856
+ Category of modules over Integer Ring]
857
+ """
858
+ return [self.base_category()]
859
+
860
+ class ParentMethods:
861
+
862
+ def __init_extra__(self):
863
+ """
864
+ Initialise the base ring of this Cartesian product.
865
+
866
+ EXAMPLES::
867
+
868
+ sage: # needs sage.modules
869
+ sage: E = CombinatorialFreeModule(ZZ, [1,2,3])
870
+ sage: F = CombinatorialFreeModule(ZZ, [2,3,4])
871
+ sage: C = cartesian_product([E, F]); C
872
+ Free module generated by {1, 2, 3} over Integer Ring (+)
873
+ Free module generated by {2, 3, 4} over Integer Ring
874
+ sage: C.base_ring()
875
+ Integer Ring
876
+
877
+ Check that :issue:`29225` is fixed::
878
+
879
+ sage: M = cartesian_product((ZZ^2, ZZ^3)); M # needs sage.modules
880
+ The Cartesian product of
881
+ (Ambient free module of rank 2 over the principal ideal domain Integer Ring,
882
+ Ambient free module of rank 3 over the principal ideal domain Integer Ring)
883
+ sage: M.category() # needs sage.modules
884
+ Category of Cartesian products of modules with basis
885
+ over (Dedekind domains and euclidean domains
886
+ and noetherian rings
887
+ and infinite enumerated sets and metric spaces)
888
+ sage: M.base_ring() # needs sage.modules
889
+ Integer Ring
890
+
891
+ sage: A = cartesian_product((QQ^2, QQ['x'])); A # needs sage.modules
892
+ The Cartesian product of
893
+ (Vector space of dimension 2 over Rational Field,
894
+ Univariate Polynomial Ring in x over Rational Field)
895
+ sage: A.category() # needs sage.modules
896
+ Category of Cartesian products of vector spaces with basis
897
+ over (number fields and quotient fields and metric spaces)
898
+ sage: A.base_ring() # needs sage.modules
899
+ Rational Field
900
+
901
+ This currently only works if all factors have the same
902
+ base ring::
903
+
904
+ sage: B = cartesian_product((ZZ['x'], QQ^3)); B # needs sage.modules
905
+ The Cartesian product of
906
+ (Univariate Polynomial Ring in x over Integer Ring,
907
+ Vector space of dimension 3 over Rational Field)
908
+ sage: B.category() # needs sage.modules
909
+ Category of Cartesian products of commutative additive groups
910
+ sage: B.base_ring() # needs sage.modules
911
+ """
912
+ factors = self._sets
913
+ if factors:
914
+ R = factors[0].base_ring()
915
+ if all(A.base_ring() is R for A in factors):
916
+ self._base = R
917
+
918
+ class ElementMethods:
919
+
920
+ def _lmul_(self, x):
921
+ """
922
+ Return the product of `x` with ``self``.
923
+
924
+ EXAMPLES::
925
+
926
+ sage: A = FreeModule(ZZ, 2) # needs sage.modules
927
+ sage: B = cartesian_product([A, A]); B # needs sage.modules
928
+ The Cartesian product of
929
+ (Ambient free module of rank 2 over the principal ideal domain Integer Ring,
930
+ Ambient free module of rank 2 over the principal ideal domain Integer Ring)
931
+ sage: 5*B(([1, 2], [3, 4])) # needs sage.modules
932
+ ((5, 10), (15, 20))
933
+ """
934
+ return self.parent()._cartesian_product_of_elements(
935
+ x * y for y in self.cartesian_factors())
936
+
937
+ class TensorProducts(TensorProductsCategory):
938
+ """
939
+ The category of modules constructed by tensor product of modules.
940
+ """
941
+ @cached_method
942
+ def extra_super_categories(self):
943
+ """
944
+ EXAMPLES::
945
+
946
+ sage: Modules(ZZ).TensorProducts().extra_super_categories()
947
+ [Category of modules over Integer Ring]
948
+ sage: Modules(ZZ).TensorProducts().super_categories()
949
+ [Category of modules over Integer Ring]
950
+ """
951
+ return [self.base_category()]
952
+
953
+ class ParentMethods:
954
+ """
955
+ Implement operations on tensor products of modules.
956
+ """
957
+ def construction(self):
958
+ """
959
+ Return the construction of ``self``.
960
+
961
+ EXAMPLES::
962
+
963
+ sage: A = algebras.Free(QQ, 2) # needs sage.combinat sage.modules
964
+ sage: T = A.tensor(A) # needs sage.combinat sage.modules
965
+ sage: T.construction() # needs sage.combinat sage.modules
966
+ (The tensor functorial construction,
967
+ (Free Algebra on 2 generators (None0, None1) over Rational Field,
968
+ Free Algebra on 2 generators (None0, None1) over Rational Field))
969
+ """
970
+ factors = self.tensor_factors()
971
+ return (TensorProductFunctor(), factors)
972
+
973
+ @abstract_method
974
+ def tensor_factors(self):
975
+ """
976
+ Return the tensor factors of this tensor product.
977
+
978
+ EXAMPLES::
979
+
980
+ sage: # needs sage.modules
981
+ sage: F = CombinatorialFreeModule(ZZ, [1,2])
982
+ sage: F.rename('F')
983
+ sage: G = CombinatorialFreeModule(ZZ, [3,4])
984
+ sage: G.rename('G')
985
+ sage: T = tensor([F, G]); T
986
+ F # G
987
+ sage: T.tensor_factors()
988
+ (F, G)
989
+ """