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,1070 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ r"""
3
+ Lie Algebras
4
+
5
+ AUTHORS:
6
+
7
+ - Travis Scrimshaw (07-15-2013): Initial implementation
8
+ """
9
+
10
+ #*****************************************************************************
11
+ # Copyright (C) 2013 Travis Scrimshaw <tscrim at ucdavis.edu>
12
+ #
13
+ # This program is free software: you can redistribute it and/or modify
14
+ # it under the terms of the GNU General Public License as published by
15
+ # the Free Software Foundation, either version 2 of the License, or
16
+ # (at your option) any later version.
17
+ # http://www.gnu.org/licenses/
18
+ #*****************************************************************************
19
+
20
+ from sage.misc.abstract_method import abstract_method
21
+ from sage.misc.cachefunc import cached_method
22
+ from sage.misc.lazy_attribute import lazy_attribute
23
+ from sage.misc.lazy_import import LazyImport
24
+ from sage.categories.category import JoinCategory, Category
25
+ from sage.categories.category_types import Category_over_base_ring
26
+ from sage.categories.category_with_axiom import CategoryWithAxiom_over_base_ring
27
+ from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets
28
+ from sage.categories.modules import Modules
29
+ from sage.categories.sets_cat import Sets
30
+ from sage.categories.homset import Hom
31
+ from sage.categories.morphism import Morphism
32
+ from sage.structure.element import coerce_binop
33
+
34
+
35
+ class LieAlgebras(Category_over_base_ring):
36
+ """
37
+ The category of Lie algebras.
38
+
39
+ EXAMPLES::
40
+
41
+ sage: C = LieAlgebras(QQ); C
42
+ Category of Lie algebras over Rational Field
43
+ sage: sorted(C.super_categories(), key=str)
44
+ [Category of vector spaces over Rational Field]
45
+
46
+ We construct a typical parent in this category, and do some
47
+ computations with it::
48
+
49
+ sage: # needs sage.combinat sage.groups sage.modules
50
+ sage: A = C.example(); A
51
+ An example of a Lie algebra: the Lie algebra from the associative
52
+ algebra Symmetric group algebra of order 3 over Rational Field
53
+ generated by ([2, 1, 3], [2, 3, 1])
54
+ sage: A.category()
55
+ Category of Lie algebras over Rational Field
56
+ sage: A.base_ring()
57
+ Rational Field
58
+ sage: a, b = A.lie_algebra_generators()
59
+ sage: a.bracket(b)
60
+ -[1, 3, 2] + [3, 2, 1]
61
+ sage: b.bracket(2*a + b)
62
+ 2*[1, 3, 2] - 2*[3, 2, 1]
63
+ sage: A.bracket(a, b)
64
+ -[1, 3, 2] + [3, 2, 1]
65
+
66
+ Please see the source code of `A` (with ``A??``) for how to
67
+ implement other Lie algebras.
68
+
69
+ TESTS::
70
+
71
+ sage: C = LieAlgebras(QQ)
72
+ sage: TestSuite(C).run()
73
+ sage: TestSuite(C.example()).run() # needs sage.combinat sage.groups sage.modules
74
+
75
+ .. TODO::
76
+
77
+ Many of these tests should use Lie algebras that are not the minimal
78
+ example and need to be added after :issue:`16820` (and :issue:`16823`).
79
+ """
80
+ @cached_method
81
+ def super_categories(self):
82
+ """
83
+ EXAMPLES::
84
+
85
+ sage: LieAlgebras(QQ).super_categories()
86
+ [Category of vector spaces over Rational Field]
87
+ """
88
+ # We do not also derive from (Magmatic) algebras since we don't want *
89
+ # to be our Lie bracket
90
+ # Also this doesn't inherit the ability to add axioms like Associative
91
+ # and Unital, both of which do not make sense for Lie algebras
92
+ return [Modules(self.base_ring())]
93
+
94
+ class SubcategoryMethods:
95
+ def Nilpotent(self):
96
+ r"""
97
+ Return the full subcategory of nilpotent objects of ``self``.
98
+
99
+ A Lie algebra `L` is nilpotent if there exist an integer `s` such
100
+ that all iterated brackets of `L` of length more than `s` vanish.
101
+ The integer `s` is called the nilpotency step.
102
+ For instance any abelian Lie algebra is nilpotent of step 1.
103
+
104
+ EXAMPLES::
105
+
106
+ sage: LieAlgebras(QQ).Nilpotent()
107
+ Category of nilpotent Lie algebras over Rational Field
108
+ sage: LieAlgebras(QQ).WithBasis().Nilpotent()
109
+ Category of nilpotent Lie algebras with basis over Rational Field
110
+ """
111
+ return self._with_axiom("Nilpotent")
112
+
113
+ Graded = LazyImport('sage.categories.graded_lie_algebras',
114
+ 'GradedLieAlgebras',
115
+ as_name='Graded')
116
+
117
+ # TODO: Find some way to do this without copying most of the logic.
118
+ def _repr_object_names(self):
119
+ r"""
120
+ Return the name of the objects of this category.
121
+
122
+ .. SEEALSO:: :meth:`Category._repr_object_names`
123
+
124
+ EXAMPLES::
125
+
126
+ sage: LieAlgebras(QQ)._repr_object_names()
127
+ 'Lie algebras over Rational Field'
128
+ sage: LieAlgebras(Fields())._repr_object_names()
129
+ 'Lie algebras over fields'
130
+ sage: from sage.categories.category import JoinCategory
131
+ sage: from sage.categories.category_with_axiom import Blahs
132
+ sage: LieAlgebras(JoinCategory((Blahs().Flying(), Fields())))
133
+ Category of Lie algebras over (flying unital blahs and fields)
134
+ """
135
+ base = self.base()
136
+ if isinstance(base, Category):
137
+ if isinstance(base, JoinCategory):
138
+ name = '('+' and '.join(C._repr_object_names() for C in base.super_categories())+')'
139
+ else:
140
+ name = base._repr_object_names()
141
+ else:
142
+ name = base
143
+ return "Lie algebras over {}".format(name)
144
+
145
+ def example(self, gens=None):
146
+ """
147
+ Return an example of a Lie algebra as per
148
+ :meth:`Category.example <sage.categories.category.Category.example>`.
149
+
150
+ EXAMPLES::
151
+
152
+ sage: LieAlgebras(QQ).example() # needs sage.combinat sage.groups sage.modules
153
+ An example of a Lie algebra: the Lie algebra from the associative algebra
154
+ Symmetric group algebra of order 3 over Rational Field
155
+ generated by ([2, 1, 3], [2, 3, 1])
156
+
157
+ Another set of generators can be specified as an optional argument::
158
+
159
+ sage: F.<x,y,z> = FreeAlgebra(QQ) # needs sage.combinat sage.modules
160
+ sage: LieAlgebras(QQ).example(F.gens()) # needs sage.combinat sage.modules
161
+ An example of a Lie algebra: the Lie algebra from the associative algebra
162
+ Free Algebra on 3 generators (x, y, z) over Rational Field
163
+ generated by (x, y, z)
164
+ """
165
+ if gens is None:
166
+ from sage.combinat.symmetric_group_algebra import SymmetricGroupAlgebra
167
+ from sage.rings.rational_field import QQ
168
+ gens = SymmetricGroupAlgebra(QQ, 3).algebra_generators()
169
+ from sage.categories.examples.lie_algebras import Example
170
+ return Example(gens)
171
+
172
+ WithBasis = LazyImport('sage.categories.lie_algebras_with_basis',
173
+ 'LieAlgebrasWithBasis', as_name='WithBasis')
174
+
175
+ class FiniteDimensional(CategoryWithAxiom_over_base_ring):
176
+ WithBasis = LazyImport('sage.categories.finite_dimensional_lie_algebras_with_basis',
177
+ 'FiniteDimensionalLieAlgebrasWithBasis', as_name='WithBasis')
178
+
179
+ def extra_super_categories(self):
180
+ """
181
+ Implement the fact that a finite dimensional Lie algebra over
182
+ a finite ring is finite.
183
+
184
+ EXAMPLES::
185
+
186
+ sage: LieAlgebras(IntegerModRing(4)).FiniteDimensional().extra_super_categories()
187
+ [Category of finite sets]
188
+ sage: LieAlgebras(ZZ).FiniteDimensional().extra_super_categories()
189
+ []
190
+ sage: C = LieAlgebras(GF(5)).FiniteDimensional()
191
+ sage: C.is_subcategory(Sets().Finite())
192
+ True
193
+ sage: C = LieAlgebras(ZZ).FiniteDimensional()
194
+ sage: C.is_subcategory(Sets().Finite())
195
+ False
196
+ sage: C = LieAlgebras(GF(5)).WithBasis().FiniteDimensional()
197
+ sage: C.is_subcategory(Sets().Finite())
198
+ True
199
+ """
200
+ if self.base_ring() in Sets().Finite():
201
+ return [Sets().Finite()]
202
+ return []
203
+
204
+ class Nilpotent(CategoryWithAxiom_over_base_ring):
205
+ r"""
206
+ Category of nilpotent Lie algebras.
207
+
208
+ TESTS::
209
+
210
+ sage: C = LieAlgebras(QQ).Nilpotent()
211
+ sage: TestSuite(C).run()
212
+ """
213
+ class ParentMethods:
214
+ @abstract_method
215
+ def step(self):
216
+ r"""
217
+ Return the nilpotency step of ``self``.
218
+
219
+ EXAMPLES::
220
+
221
+ sage: h = lie_algebras.Heisenberg(ZZ, oo) # needs sage.combinat sage.graphs sage.modules
222
+ sage: h.step() # needs sage.combinat sage.graphs sage.modules
223
+ 2
224
+ """
225
+
226
+ def is_nilpotent(self):
227
+ r"""
228
+ Return ``True`` since ``self`` is nilpotent.
229
+
230
+ EXAMPLES::
231
+
232
+ sage: h = lie_algebras.Heisenberg(ZZ, oo) # needs sage.combinat sage.graphs sage.modules
233
+ sage: h.is_nilpotent() # needs sage.combinat sage.graphs sage.modules
234
+ True
235
+ """
236
+ return True
237
+
238
+ class ParentMethods:
239
+ #@abstract_method
240
+ #def lie_algebra_generators(self):
241
+ # """
242
+ # Return the generators of ``self`` as a Lie algebra.
243
+ # """
244
+
245
+ # TODO: Move this to LieAlgebraElement, cythonize, and use more standard
246
+ # coercion framework test (i.e., have_same_parent)
247
+ def bracket(self, lhs, rhs):
248
+ """
249
+ Return the Lie bracket ``[lhs, rhs]`` after coercing ``lhs`` and
250
+ ``rhs`` into elements of ``self``.
251
+
252
+ If ``lhs`` and ``rhs`` are Lie algebras, then this constructs
253
+ the product space, and if only one of them is a Lie algebra,
254
+ then it constructs the corresponding ideal.
255
+
256
+ EXAMPLES::
257
+
258
+ sage: # needs sage.combinat sage.groups sage.modules
259
+ sage: L = LieAlgebras(QQ).example()
260
+ sage: x, y = L.lie_algebra_generators()
261
+ sage: L.bracket(x, x + y)
262
+ -[1, 3, 2] + [3, 2, 1]
263
+ sage: L.bracket(x, 0)
264
+ 0
265
+ sage: L.bracket(0, x)
266
+ 0
267
+
268
+ Constructing the product space::
269
+
270
+ sage: L = lie_algebras.Heisenberg(QQ, 1) # needs sage.combinat sage.graphs sage.modules
271
+ sage: Z = L.bracket(L, L); Z # needs sage.combinat sage.graphs sage.modules
272
+ Ideal (z) of Heisenberg algebra of rank 1 over Rational Field
273
+ sage: L.bracket(L, Z) # needs sage.combinat sage.graphs sage.modules
274
+ Ideal () of Heisenberg algebra of rank 1 over Rational Field
275
+
276
+ Constructing ideals::
277
+
278
+ sage: p, q, z = L.basis(); p, q, z # needs sage.combinat sage.graphs sage.modules
279
+ (p1, q1, z)
280
+ sage: L.bracket(3*p, L) # needs sage.combinat sage.graphs sage.modules
281
+ Ideal (3*p1) of Heisenberg algebra of rank 1 over Rational Field
282
+ sage: L.bracket(L, q + p) # needs sage.combinat sage.graphs sage.modules
283
+ Ideal (p1 + q1) of Heisenberg algebra of rank 1 over Rational Field
284
+ """
285
+ if lhs in LieAlgebras:
286
+ if rhs in LieAlgebras:
287
+ return lhs.product_space(rhs)
288
+ return lhs.ideal(rhs)
289
+ elif rhs in LieAlgebras:
290
+ return rhs.ideal(lhs)
291
+ return self(lhs)._bracket_(self(rhs))
292
+
293
+ # Do not override this. Instead implement :meth:`_construct_UEA`;
294
+ # then, :meth:`lift` and :meth:`universal_enveloping_algebra`
295
+ # will automatically setup the coercion.
296
+ def universal_enveloping_algebra(self):
297
+ """
298
+ Return the universal enveloping algebra of ``self``.
299
+
300
+ EXAMPLES::
301
+
302
+ sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() # needs sage.combinat sage.libs.singular sage.modules
303
+ sage: L.universal_enveloping_algebra() # needs sage.combinat sage.libs.singular sage.modules
304
+ Noncommutative Multivariate Polynomial Ring in b0, b1, b2
305
+ over Rational Field, nc-relations: {}
306
+
307
+ ::
308
+
309
+ sage: L = LieAlgebra(QQ, 3, 'x', abelian=True) # needs sage.combinat sage.libs.singular sage.modules
310
+ sage: L.universal_enveloping_algebra() # needs sage.combinat sage.libs.singular sage.modules
311
+ Multivariate Polynomial Ring in x0, x1, x2 over Rational Field
312
+
313
+ .. SEEALSO::
314
+
315
+ :meth:`lift`
316
+ """
317
+ return self.lift.codomain()
318
+
319
+ @abstract_method(optional=True)
320
+ def _construct_UEA(self):
321
+ """
322
+ Return the universal enveloping algebra of ``self``.
323
+
324
+ Unlike :meth:`universal_enveloping_algebra`, this method does not
325
+ (usually) construct the canonical lift morphism from ``self``
326
+ to the universal enveloping algebra (let alone register it
327
+ as a coercion).
328
+
329
+ One should implement this method and the ``lift`` method for
330
+ the element class to construct the morphism the universal
331
+ enveloping algebra.
332
+
333
+ EXAMPLES::
334
+
335
+ sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() # needs sage.combinat sage.libs.singular sage.modules
336
+ sage: L._construct_UEA() # needs sage.combinat sage.libs.singular sage.modules
337
+ Noncommutative Multivariate Polynomial Ring in b0, b1, b2
338
+ over Rational Field, nc-relations: {}
339
+
340
+ ::
341
+
342
+ sage: L = LieAlgebra(QQ, 3, 'x', abelian=True) # needs sage.combinat sage.modules
343
+ sage: L.universal_enveloping_algebra() # indirect doctest # needs sage.combinat sage.libs.singular sage.modules
344
+ Multivariate Polynomial Ring in x0, x1, x2 over Rational Field
345
+ """
346
+
347
+ def center_universal_enveloping_algebra(self, UEA=None):
348
+ """
349
+ Return the center of the universal enveloping algebra of ``self``.
350
+
351
+ EXAMPLES::
352
+
353
+ sage: # needs sage.combinat sage.modules
354
+ sage: L = LieAlgebra(QQ, 3, 'x', abelian=True)
355
+ sage: L.center_universal_enveloping_algebra()
356
+ Center of Universal enveloping algebra of Abelian Lie algebra on 3 generators (x0, x1, x2)
357
+ over Rational Field in the Poincare-Birkhoff-Witt basis
358
+ sage: PBW = L.pbw_basis()
359
+ sage: L.center_universal_enveloping_algebra(PBW)
360
+ Center of Universal enveloping algebra of Abelian Lie algebra on 3 generators (x0, x1, x2)
361
+ over Rational Field in the Poincare-Birkhoff-Witt basis
362
+ """
363
+ if UEA is not None:
364
+ return UEA.center()
365
+ return self.pbw_basis().center()
366
+
367
+ @abstract_method(optional=True)
368
+ def module(self):
369
+ r"""
370
+ Return an `R`-module which is isomorphic to the
371
+ underlying `R`-module of ``self``.
372
+
373
+ The rationale behind this method is to enable linear
374
+ algebraic functionality on ``self`` (such as
375
+ computing the span of a list of vectors in ``self``)
376
+ via an isomorphism from ``self`` to an `R`-module
377
+ (typically, although not always, an `R`-module of
378
+ the form `R^n` for an `n \in \NN`) on which such
379
+ functionality already exists. For this method to be
380
+ of any use, it should return an `R`-module which has
381
+ linear algebraic functionality that ``self`` does
382
+ not have.
383
+
384
+ For instance, if ``self`` has ordered basis
385
+ `(e, f, h)`, then ``self.module()`` will be the
386
+ `R`-module `R^3`, and the elements `e`, `f` and
387
+ `h` of ``self`` will correspond to the basis
388
+ vectors `(1, 0, 0)`, `(0, 1, 0)` and `(0, 0, 1)`
389
+ of ``self.module()``.
390
+
391
+ This method :meth:`module` needs to be set whenever
392
+ a finite-dimensional Lie algebra with basis is
393
+ intended to support linear algebra (which is, e.g.,
394
+ used in the computation of centralizers and lower
395
+ central series). One then needs to also implement
396
+ the `R`-module isomorphism from ``self`` to
397
+ ``self.module()`` in both directions; that is,
398
+ implement:
399
+
400
+ * a ``to_vector`` ElementMethod which sends every
401
+ element of ``self`` to the corresponding element of
402
+ ``self.module()``;
403
+
404
+ * a ``from_vector`` ParentMethod which sends every
405
+ element of ``self.module()`` to an element
406
+ of ``self``.
407
+
408
+ The ``from_vector`` method will automatically serve
409
+ as an element constructor of ``self`` (that is,
410
+ ``self(v)`` for any ``v`` in ``self.module()`` will
411
+ return ``self.from_vector(v)``).
412
+
413
+ .. TODO::
414
+
415
+ Ensure that this is actually so.
416
+
417
+ EXAMPLES::
418
+
419
+ sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() # needs sage.combinat sage.libs.singular sage.modules
420
+ sage: L.module() # needs sage.combinat sage.libs.singular sage.modules
421
+ Vector space of dimension 3 over Rational Field
422
+ """
423
+
424
+ @abstract_method(optional=True)
425
+ def from_vector(self, v, order=None, coerce=False):
426
+ """
427
+ Return the element of ``self`` corresponding to the
428
+ vector ``v`` in ``self.module()``.
429
+
430
+ Implement this if you implement :meth:`module`; see the
431
+ documentation of the latter for how this is to be done.
432
+
433
+ EXAMPLES::
434
+
435
+ sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() # needs sage.combinat sage.libs.singular sage.modules
436
+ sage: u = L.from_vector(vector(QQ, (1, 0, 0))); u # needs sage.combinat sage.libs.singular sage.modules
437
+ (1, 0, 0)
438
+ sage: parent(u) is L # needs sage.combinat sage.libs.singular sage.modules
439
+ True
440
+ """
441
+
442
+ @lazy_attribute
443
+ def lift(self):
444
+ r"""
445
+ Construct the lift morphism from ``self`` to the universal
446
+ enveloping algebra of ``self`` (the latter is implemented
447
+ as :meth:`universal_enveloping_algebra`).
448
+
449
+ This is a Lie algebra homomorphism. It is injective if
450
+ ``self`` is a free module over its base ring, or if the
451
+ base ring is a `\QQ`-algebra.
452
+
453
+ EXAMPLES::
454
+
455
+ sage: # needs sage.combinat sage.libs.singular sage.modules
456
+ sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example()
457
+ sage: a, b, c = L.lie_algebra_generators()
458
+ sage: lifted = L.lift(2*a + b - c); lifted
459
+ 2*b0 + b1 - b2
460
+ sage: lifted.parent() is L.universal_enveloping_algebra()
461
+ True
462
+ """
463
+ M = LiftMorphism(self, self._construct_UEA())
464
+ M.register_as_coercion()
465
+ return M
466
+
467
+ def subalgebra(self, gens, names=None, index_set=None, category=None):
468
+ r"""
469
+ Return the subalgebra of ``self`` generated by ``gens``.
470
+
471
+ EXAMPLES::
472
+
473
+ sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() # needs sage.combinat sage.libs.singular sage.modules
474
+ sage: a, b, c = L.lie_algebra_generators() # needs sage.combinat sage.libs.singular sage.modules
475
+ sage: L.subalgebra([2*a - c, b + c]) # needs sage.combinat sage.libs.singular sage.modules
476
+ An example of a finite dimensional Lie algebra with basis:
477
+ the 2-dimensional abelian Lie algebra over Rational Field
478
+ with basis matrix:
479
+ [ 1 0 -1/2]
480
+ [ 0 1 1]
481
+
482
+ ::
483
+
484
+ sage: # needs sage.combinat sage.groups sage.modules
485
+ sage: L = LieAlgebras(QQ).example()
486
+ sage: x,y = L.lie_algebra_generators()
487
+ sage: L.subalgebra([x + y])
488
+ Traceback (most recent call last):
489
+ ...
490
+ NotImplementedError: subalgebras not yet implemented: see #17416
491
+ """
492
+ raise NotImplementedError("subalgebras not yet implemented: see #17416")
493
+ #from sage.algebras.lie_algebras.subalgebra import LieSubalgebra
494
+ #return LieSubalgebra(gens, names, index_set, category)
495
+
496
+ def ideal(self, *gens, **kwds):
497
+ r"""
498
+ Return the ideal of ``self`` generated by ``gens``.
499
+
500
+ EXAMPLES::
501
+
502
+ sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() # needs sage.combinat sage.libs.singular sage.modules
503
+ sage: a, b, c = L.lie_algebra_generators() # needs sage.combinat sage.libs.singular sage.modules
504
+ sage: L.ideal([2*a - c, b + c]) # needs sage.combinat sage.libs.singular sage.modules
505
+ An example of a finite dimensional Lie algebra with basis:
506
+ the 2-dimensional abelian Lie algebra over Rational Field
507
+ with basis matrix:
508
+ [ 1 0 -1/2]
509
+ [ 0 1 1]
510
+
511
+ ::
512
+
513
+ sage: # needs sage.combinat sage.groups sage.modules
514
+ sage: L = LieAlgebras(QQ).example()
515
+ sage: x, y = L.lie_algebra_generators()
516
+ sage: L.ideal([x + y])
517
+ Traceback (most recent call last):
518
+ ...
519
+ NotImplementedError: ideals not yet implemented: see #16824
520
+ """
521
+ raise NotImplementedError("ideals not yet implemented: see #16824")
522
+ #from sage.algebras.lie_algebras.ideal import LieIdeal
523
+ #if len(gens) == 1 and isinstance(gens[0], (list, tuple)):
524
+ # gens = gens[0]
525
+ #names = kwds.pop("names", None)
526
+ #index_set = kwds.pop("index_set", None)
527
+ #category = kwds.pop("category", None)
528
+ #return LieIdeal(gens, names, index_set, category)
529
+
530
+ def is_ideal(self, A):
531
+ """
532
+ Return if ``self`` is an ideal of ``A``.
533
+
534
+ EXAMPLES::
535
+
536
+ sage: L = LieAlgebras(QQ).example() # needs sage.combinat sage.groups sage.modules
537
+ sage: L.is_ideal(L) # needs sage.combinat sage.groups sage.modules
538
+ True
539
+ """
540
+ if A == self:
541
+ return True
542
+ raise NotImplementedError("ideals not yet implemented: see #16824")
543
+ #from sage.algebras.lie_algebras.ideal import LieIdeal
544
+ #return isinstance(self, LieIdeal) and self._ambient is A
545
+
546
+ @abstract_method(optional=True)
547
+ def killing_form(self, x, y):
548
+ """
549
+ Return the Killing form of ``x`` and ``y``.
550
+
551
+ EXAMPLES::
552
+
553
+ sage: # needs sage.combinat sage.libs.singular sage.modules
554
+ sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example()
555
+ sage: a, b, c = L.lie_algebra_generators()
556
+ sage: L.killing_form(a, b + c)
557
+ 0
558
+ """
559
+
560
+ def is_abelian(self):
561
+ r"""
562
+ Return ``True`` if this Lie algebra is abelian.
563
+
564
+ A Lie algebra `\mathfrak{g}` is abelian if `[x, y] = 0` for all
565
+ `x, y \in \mathfrak{g}`.
566
+
567
+ EXAMPLES::
568
+
569
+ sage: # needs sage.combinat sage.modules
570
+ sage: L = LieAlgebras(QQ).example() # needs sage.groups
571
+ sage: L.is_abelian() # needs sage.groups
572
+ False
573
+ sage: R = QQ['x,y']
574
+ sage: L = LieAlgebras(QQ).example(R.gens())
575
+ sage: L.is_abelian()
576
+ True
577
+
578
+ ::
579
+
580
+ sage: # not implemented, needs sage.combinat sage.modules
581
+ sage: L.<x> = LieAlgebra(QQ, 1)
582
+ sage: L.is_abelian()
583
+ True
584
+ sage: L.<x,y> = LieAlgebra(QQ, 2)
585
+ sage: L.is_abelian()
586
+ False
587
+ """
588
+ G = self.lie_algebra_generators()
589
+ if G not in FiniteEnumeratedSets():
590
+ raise NotImplementedError("infinite number of generators")
591
+ zero = self.zero()
592
+ return all(x._bracket_(y) == zero for x in G for y in G)
593
+
594
+ def is_commutative(self) -> bool:
595
+ """
596
+ Return if ``self`` is commutative.
597
+
598
+ This is equivalent to ``self`` being abelian.
599
+
600
+ EXAMPLES::
601
+
602
+ sage: L = LieAlgebras(QQ).example() # needs sage.combinat sage.groups sage.modules
603
+ sage: L.is_commutative() # needs sage.combinat sage.groups sage.modules
604
+ False
605
+
606
+ ::
607
+
608
+ sage: L.<x> = LieAlgebra(QQ, 1) # not implemented # needs sage.combinat sage.modules
609
+ sage: L.is_commutative() # not implemented # needs sage.combinat sage.modules
610
+ True
611
+ """
612
+ return self.is_abelian()
613
+
614
+ @abstract_method(optional=True)
615
+ def is_solvable(self):
616
+ """
617
+ Return if ``self`` is a solvable Lie algebra.
618
+
619
+ EXAMPLES::
620
+
621
+ sage: # needs sage.combinat sage.libs.singular sage.modules
622
+ sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example()
623
+ sage: L.is_solvable()
624
+ True
625
+ """
626
+
627
+ @abstract_method(optional=True)
628
+ def is_nilpotent(self):
629
+ """
630
+ Return if ``self`` is a nilpotent Lie algebra.
631
+
632
+ EXAMPLES::
633
+
634
+ sage: # needs sage.combinat sage.libs.singular sage.modules
635
+ sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example()
636
+ sage: L.is_nilpotent()
637
+ True
638
+ """
639
+
640
+ def bch(self, X, Y, prec=None):
641
+ r"""
642
+ Return the element `\log(\exp(X)\exp(Y))`.
643
+
644
+ The BCH formula is an expression for `\log(\exp(X)\exp(Y))`
645
+ as a sum of Lie brackets of ``X ` and ``Y`` with rational
646
+ coefficients. It is only defined if the base ring of
647
+ ``self`` has a coercion from the rationals.
648
+
649
+ INPUT:
650
+
651
+ - ``X`` -- an element of ``self``
652
+ - ``Y`` -- an element of ``self``
653
+ - ``prec`` -- integer; the maximum length of Lie brackets to be
654
+ considered in the formula
655
+
656
+ EXAMPLES:
657
+
658
+ The BCH formula for the generators of a free nilpotent Lie
659
+ algebra of step 4::
660
+
661
+ sage: L = LieAlgebra(QQ, 2, step=4) # needs sage.combinat sage.modules
662
+ sage: L.inject_variables() # needs sage.combinat sage.modules
663
+ Defining X_1, X_2, X_12, X_112, X_122, X_1112, X_1122, X_1222
664
+ sage: L.bch(X_1, X_2) # needs sage.combinat sage.libs.flint sage.modules
665
+ X_1 + X_2 + 1/2*X_12 + 1/12*X_112 + 1/12*X_122 + 1/24*X_1122
666
+
667
+ An example of the BCH formula in a quotient::
668
+
669
+ sage: Q = L.quotient(X_112 + X_122) # needs sage.combinat sage.modules
670
+ sage: x, y = Q.basis().list()[:2] # needs sage.combinat sage.modules
671
+ sage: Q.bch(x, y) # needs sage.combinat sage.libs.flint sage.modules
672
+ X_1 + X_2 + 1/2*X_12 - 1/24*X_1112
673
+
674
+ The BCH formula for a non-nilpotent Lie algebra requires the
675
+ precision to be explicitly stated::
676
+
677
+ sage: L.<X,Y> = LieAlgebra(QQ) # needs sage.combinat sage.modules
678
+ sage: L.bch(X, Y) # needs sage.combinat sage.modules
679
+ Traceback (most recent call last):
680
+ ...
681
+ ValueError: the Lie algebra is not known to be nilpotent,
682
+ so you must specify the precision
683
+ sage: L.bch(X, Y, 4) # needs sage.combinat sage.libs.flint sage.modules
684
+ X + 1/12*[X, [X, Y]] + 1/24*[X, [[X, Y], Y]]
685
+ + 1/2*[X, Y] + 1/12*[[X, Y], Y] + Y
686
+
687
+ The BCH formula requires a coercion from the rationals::
688
+
689
+ sage: L.<X,Y,Z> = LieAlgebra(ZZ, 2, step=2) # needs sage.combinat sage.modules
690
+ sage: L.bch(X, Y) # needs sage.combinat sage.modules
691
+ Traceback (most recent call last):
692
+ ...
693
+ TypeError: the BCH formula is not well defined
694
+ since Integer Ring has no coercion from Rational Field
695
+ """
696
+ if self not in LieAlgebras.Nilpotent and prec is None:
697
+ raise ValueError("the Lie algebra is not known to be nilpotent,"
698
+ " so you must specify the precision")
699
+ from sage.algebras.lie_algebras.bch import bch_iterator
700
+ if prec is None:
701
+ return self.sum(Z for Z in bch_iterator(X, Y))
702
+ bch = bch_iterator(X, Y)
703
+ return self.sum(next(bch) for k in range(prec))
704
+
705
+ baker_campbell_hausdorff = bch
706
+
707
+ @abstract_method(optional=True)
708
+ def lie_group(self, name='G', **kwds):
709
+ r"""
710
+ Return the simply connected Lie group related to ``self``.
711
+
712
+ INPUT:
713
+
714
+ - ``name`` -- string (default: ``'G'``);
715
+ the name (symbol) given to the Lie group
716
+
717
+ EXAMPLES::
718
+
719
+ sage: L = lie_algebras.Heisenberg(QQ, 1) # needs sage.combinat sage.graphs sage.modules
720
+ sage: G = L.lie_group('G'); G # needs sage.combinat sage.graphs sage.modules sage.symbolic
721
+ Lie group G of Heisenberg algebra of rank 1 over Rational Field
722
+ """
723
+
724
+ def trivial_representation(self):
725
+ """
726
+ Return the trivial representation of ``self``.
727
+
728
+ EXAMPLES::
729
+
730
+ sage: L = lie_algebras.strictly_upper_triangular_matrices(QQ, 4) # needs sage.combinat sage.modules sage.symbolic
731
+ sage: L.trivial_representation() # needs sage.combinat sage.modules sage.symbolic
732
+ Trivial representation of Lie algebra of 4-dimensional
733
+ strictly upper triangular matrices over Rational Field
734
+ """
735
+ from sage.algebras.lie_algebras.representation import TrivialRepresentation
736
+ return TrivialRepresentation(self)
737
+
738
+ def representation(self, f=None, index_set=None, on_basis=False, **kwargs):
739
+ """
740
+ Return a representation of ``self``.
741
+
742
+ If no arguments are given, then this returns the trivial
743
+ representation.
744
+
745
+ Currently the only implemented method of constructing a
746
+ representation is by explicitly specifying the action of
747
+
748
+ * the elements of ``self`` by matrices;
749
+ * the basis elements of ``self`` using a ``dict`` or
750
+ a :func:`Family`;
751
+ * a function on basis elements (either passed as ``on_basis``
752
+ or setting ``on_basis=True``).
753
+
754
+ INPUT:
755
+
756
+ - ``f`` -- the function that defines the action
757
+ - ``index_set`` -- the index set of the representation
758
+ - ``on_basis`` -- (optional) see above
759
+
760
+ .. SEEALSO::
761
+
762
+ :class:`~sage.algebras.lie_algebras.representation.RepresentationByMorphism`
763
+
764
+ EXAMPLES::
765
+
766
+ sage: # needs sage.combinat sage.modules
767
+ sage: L.<x,y> = LieAlgebra(QQ, {('x','y'): {'y':1}})
768
+ sage: f = {x: Matrix([[1,0],[0,0]]), y: Matrix([[0,1],[0,0]])}
769
+ sage: L.representation(f)
770
+ Representation of Lie algebra on 2 generators (x, y) over Rational Field defined by:
771
+ [1 0]
772
+ x |--> [0 0]
773
+ [0 1]
774
+ y |--> [0 0]
775
+ sage: L.representation()
776
+ Trivial representation of Lie algebra on 2 generators (x, y) over Rational Field
777
+ """
778
+ if f is None and on_basis is False and index_set is None:
779
+ return self.trivial_representation(**kwargs)
780
+ from sage.algebras.lie_algebras.representation import RepresentationByMorphism
781
+ return RepresentationByMorphism(self, f, index_set, on_basis, **kwargs)
782
+
783
+ def _test_jacobi_identity(self, **options):
784
+ """
785
+ Test that the Jacobi identity is satisfied on (not
786
+ necessarily all) elements of this set.
787
+
788
+ INPUT:
789
+
790
+ - ``options`` -- any keyword arguments accepted by :meth:`_tester`
791
+
792
+ EXAMPLES:
793
+
794
+ By default, this method runs the tests only on the
795
+ elements returned by ``self.some_elements()``::
796
+
797
+ sage: L = LieAlgebras(QQ).example() # needs sage.combinat sage.groups sage.modules
798
+ sage: L._test_jacobi_identity() # needs sage.combinat sage.groups sage.modules
799
+
800
+ However, the elements tested can be customized with the
801
+ ``elements`` keyword argument::
802
+
803
+ sage: L = LieAlgebras(QQ).example() # needs sage.combinat sage.groups sage.modules
804
+ sage: x,y = L.lie_algebra_generators() # needs sage.combinat sage.groups sage.modules
805
+ sage: L._test_jacobi_identity(elements=[x + y, x, 2*y, x.bracket(y)]) # needs sage.combinat sage.groups sage.modules
806
+
807
+ See the documentation for :class:`TestSuite` for more information.
808
+ """
809
+ tester = self._tester(**options)
810
+ elts = tester.some_elements()
811
+ jacobi = lambda x, y, z: self.bracket(x, self.bracket(y, z)) + \
812
+ self.bracket(y, self.bracket(z, x)) + \
813
+ self.bracket(z, self.bracket(x, y))
814
+ zero = self.zero()
815
+ for x in elts:
816
+ for y in elts:
817
+ if x == y:
818
+ continue
819
+ for z in elts:
820
+ tester.assertEqual(jacobi(x, y, z), zero)
821
+
822
+ def _test_antisymmetry(self, **options):
823
+ """
824
+ Test that the antisymmetry axiom is satisfied on (not
825
+ necessarily all) elements of this set.
826
+
827
+ INPUT:
828
+
829
+ - ``options`` -- any keyword arguments accepted by :meth:`_tester`
830
+
831
+ EXAMPLES:
832
+
833
+ By default, this method runs the tests only on the
834
+ elements returned by ``self.some_elements()``::
835
+
836
+ sage: L = LieAlgebras(QQ).example() # needs sage.combinat sage.groups sage.modules
837
+ sage: L._test_antisymmetry() # needs sage.combinat sage.groups sage.modules
838
+
839
+ However, the elements tested can be customized with the
840
+ ``elements`` keyword argument::
841
+
842
+ sage: L = LieAlgebras(QQ).example() # needs sage.combinat sage.groups sage.modules
843
+ sage: x,y = L.lie_algebra_generators() # needs sage.combinat sage.groups sage.modules
844
+ sage: L._test_antisymmetry(elements=[x + y, x, 2*y, x.bracket(y)]) # needs sage.combinat sage.groups sage.modules
845
+
846
+ See the documentation for :class:`TestSuite` for more information.
847
+ """
848
+ tester = self._tester(**options)
849
+ elts = tester.some_elements()
850
+ zero = self.zero()
851
+ for x in elts:
852
+ tester.assertEqual(self.bracket(x, x), zero)
853
+
854
+ def _test_distributivity(self, **options):
855
+ r"""
856
+ Test the distributivity of the Lie bracket `[,]` on `+` on (not
857
+ necessarily all) elements of this set.
858
+
859
+ INPUT:
860
+
861
+ - ``options`` -- any keyword arguments accepted by :meth:`_tester`
862
+
863
+ TESTS::
864
+
865
+ sage: L = LieAlgebras(QQ).example() # needs sage.combinat sage.groups sage.modules
866
+ sage: L._test_distributivity() # needs sage.combinat sage.groups sage.modules
867
+
868
+ EXAMPLES:
869
+
870
+ By default, this method runs the tests only on the
871
+ elements returned by ``self.some_elements()``::
872
+
873
+ sage: L = LieAlgebra(QQ, 3, 'x,y,z', representation='polynomial') # needs sage.combinat sage.modules
874
+ sage: L.some_elements() # needs sage.combinat sage.modules
875
+ [x + y + z]
876
+ sage: L._test_distributivity() # needs sage.combinat sage.modules
877
+
878
+ However, the elements tested can be customized with the
879
+ ``elements`` keyword argument::
880
+
881
+ sage: # not implemented, needs sage.combinat sage.modules
882
+ sage: L = LieAlgebra(QQ, cartan_type=['A', 2])
883
+ sage: h1 = L.gen(0)
884
+ sage: h2 = L.gen(1)
885
+ sage: e2 = L.gen(3)
886
+ sage: L._test_distributivity(elements=[h1, h2, e2])
887
+
888
+ See the documentation for :class:`TestSuite` for more information.
889
+ """
890
+ tester = self._tester(**options)
891
+ S = tester.some_elements()
892
+ from sage.misc.misc import some_tuples
893
+ for x,y,z in some_tuples(S, 3, tester._max_runs):
894
+ # left distributivity
895
+ tester.assertEqual(self.bracket(x, (y + z)),
896
+ self.bracket(x, y) + self.bracket(x, z))
897
+ # right distributivity
898
+ tester.assertEqual(self.bracket((x + y), z),
899
+ self.bracket(x, z) + self.bracket(y, z))
900
+
901
+ class ElementMethods:
902
+ @coerce_binop
903
+ def bracket(self, rhs):
904
+ """
905
+ Return the Lie bracket ``[self, rhs]``.
906
+
907
+ EXAMPLES::
908
+
909
+ sage: # needs sage.combinat sage.groups sage.modules
910
+ sage: L = LieAlgebras(QQ).example()
911
+ sage: x,y = L.lie_algebra_generators()
912
+ sage: x.bracket(y)
913
+ -[1, 3, 2] + [3, 2, 1]
914
+ sage: x.bracket(0)
915
+ 0
916
+ """
917
+ return self._bracket_(rhs)
918
+
919
+ # Implement this method to define the Lie bracket. You do not
920
+ # need to deal with the coercions here.
921
+ @abstract_method
922
+ def _bracket_(self, y):
923
+ """
924
+ Return the Lie bracket ``[self, y]``, where ``y`` is an
925
+ element of the same Lie algebra as ``self``.
926
+
927
+ EXAMPLES::
928
+
929
+ sage: # needs sage.combinat sage.groups sage.modules
930
+ sage: L = LieAlgebras(QQ).example()
931
+ sage: x,y = L.lie_algebra_generators()
932
+ sage: x._bracket_(y)
933
+ -[1, 3, 2] + [3, 2, 1]
934
+ sage: y._bracket_(x)
935
+ [1, 3, 2] - [3, 2, 1]
936
+ sage: x._bracket_(x)
937
+ 0
938
+ """
939
+
940
+ @abstract_method(optional=True)
941
+ def to_vector(self, order=None):
942
+ """
943
+ Return the vector in ``g.module()`` corresponding to the
944
+ element ``self`` of ``g`` (where ``g`` is the parent of
945
+ ``self``).
946
+
947
+ Implement this if you implement ``g.module()``.
948
+ See :meth:`LieAlgebras.module` for how this is to be done.
949
+
950
+ EXAMPLES::
951
+
952
+ sage: # needs sage.combinat sage.libs.singular sage.modules
953
+ sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example()
954
+ sage: u = L((1, 0, 0)).to_vector(); u
955
+ (1, 0, 0)
956
+ sage: parent(u)
957
+ Vector space of dimension 3 over Rational Field
958
+ """
959
+
960
+ @abstract_method(optional=True)
961
+ def lift(self):
962
+ """
963
+ Return the image of ``self`` under the canonical lift from the Lie
964
+ algebra to its universal enveloping algebra.
965
+
966
+ EXAMPLES::
967
+
968
+ sage: # needs sage.combinat sage.libs.singular sage.modules
969
+ sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example()
970
+ sage: a, b, c = L.lie_algebra_generators()
971
+ sage: elt = 3*a + b - c
972
+ sage: elt.lift()
973
+ 3*b0 + b1 - b2
974
+
975
+ ::
976
+
977
+ sage: L.<x,y> = LieAlgebra(QQ, abelian=True) # needs sage.combinat sage.modules
978
+ sage: x.lift() # needs sage.combinat sage.modules
979
+ x
980
+ """
981
+
982
+ def killing_form(self, x):
983
+ """
984
+ Return the Killing form of ``self`` and ``x``.
985
+
986
+ EXAMPLES::
987
+
988
+ sage: # needs sage.combinat sage.libs.singular sage.modules
989
+ sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example()
990
+ sage: a, b, c = L.lie_algebra_generators()
991
+ sage: a.killing_form(b)
992
+ 0
993
+ """
994
+ return self.parent().killing_form(self, x)
995
+
996
+ def exp(self, lie_group=None):
997
+ r"""
998
+ Return the exponential of ``self`` in ``lie_group``.
999
+
1000
+ INPUT:
1001
+
1002
+ - ``lie_group`` -- (optional) the Lie group to map into;
1003
+ If ``lie_group`` is not given, the Lie group associated to the
1004
+ parent Lie algebra of ``self`` is used.
1005
+
1006
+ EXAMPLES::
1007
+
1008
+ sage: # needs sage.combinat sage.modules sage.symbolic
1009
+ sage: L.<X,Y,Z> = LieAlgebra(QQ, 2, step=2)
1010
+ sage: g = (X + Y + Z).exp(); g
1011
+ exp(X + Y + Z)
1012
+ sage: h = X.exp(); h
1013
+ exp(X)
1014
+ sage: g.parent()
1015
+ Lie group G of Free Nilpotent Lie algebra on 3 generators (X, Y, Z)
1016
+ over Rational Field
1017
+ sage: g.parent() is h.parent()
1018
+ True
1019
+
1020
+ The Lie group can be specified explicitly::
1021
+
1022
+ sage: # needs sage.combinat sage.modules sage.symbolic
1023
+ sage: H = L.lie_group('H')
1024
+ sage: k = Z.exp(lie_group=H); k
1025
+ exp(Z)
1026
+ sage: k.parent()
1027
+ Lie group H of Free Nilpotent Lie algebra on 3 generators (X, Y, Z)
1028
+ over Rational Field
1029
+ sage: g.parent() == k.parent()
1030
+ False
1031
+ """
1032
+ if lie_group is None:
1033
+ lie_group = self.parent().lie_group()
1034
+ return lie_group.exp(self)
1035
+
1036
+
1037
+ class LiftMorphism(Morphism):
1038
+ """
1039
+ The natural lifting morphism from a Lie algebra to its
1040
+ enveloping algebra.
1041
+ """
1042
+ def __init__(self, domain, codomain):
1043
+ """
1044
+ Initialize ``self``.
1045
+
1046
+ EXAMPLES::
1047
+
1048
+ sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() # needs sage.combinat sage.libs.singular sage.modules
1049
+ sage: f = L.lift # needs sage.combinat sage.libs.singular sage.modules
1050
+
1051
+ We skip the category test since this is currently not an element of
1052
+ a homspace::
1053
+
1054
+ sage: TestSuite(f).run(skip='_test_category') # needs sage.combinat sage.libs.singular sage.modules
1055
+ """
1056
+ Morphism.__init__(self, Hom(domain, codomain))
1057
+
1058
+ def _call_(self, x):
1059
+ """
1060
+ Lift ``x`` to the universal enveloping algebra.
1061
+
1062
+ EXAMPLES::
1063
+
1064
+ sage: # needs sage.combinat sage.libs.singular sage.modules
1065
+ sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example()
1066
+ sage: a, b, c = L.lie_algebra_generators()
1067
+ sage: L.lift(3*a + b - c)
1068
+ 3*b0 + b1 - b2
1069
+ """
1070
+ return x.lift()