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,853 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ # sage.doctest: needs sage.combinat sage.groups
3
+ r"""
4
+ Weyl Groups
5
+ """
6
+ # ****************************************************************************
7
+ # Copyright (C) 2009 Nicolas M. Thiery <nthiery at users.sf.net>
8
+ #
9
+ # Distributed under the terms of the GNU General Public License (GPL)
10
+ # https://www.gnu.org/licenses/
11
+ # *****************************************************************************
12
+
13
+ from sage.misc.cachefunc import cached_method, cached_in_parent_method
14
+ from sage.misc.lazy_import import LazyImport
15
+ from sage.categories.category_singleton import Category_singleton
16
+ from sage.categories.coxeter_groups import CoxeterGroups
17
+
18
+
19
+ class WeylGroups(Category_singleton):
20
+ r"""
21
+ The category of Weyl groups.
22
+
23
+ See the :wikipedia:`Wikipedia page of Weyl Groups <Weyl_group>`.
24
+
25
+ EXAMPLES::
26
+
27
+ sage: WeylGroups()
28
+ Category of Weyl groups
29
+ sage: WeylGroups().super_categories()
30
+ [Category of Coxeter groups]
31
+
32
+ Here are some examples::
33
+
34
+ sage: WeylGroups().example() # todo: not implemented
35
+ sage: FiniteWeylGroups().example()
36
+ The symmetric group on {0, ..., 3}
37
+ sage: AffineWeylGroups().example() # todo: not implemented
38
+ sage: WeylGroup(["B", 3])
39
+ Weyl Group of type ['B', 3] (as a matrix group acting on the ambient space)
40
+
41
+ This one will eventually be also in this category::
42
+
43
+ sage: SymmetricGroup(4)
44
+ Symmetric group of order 4! as a permutation group
45
+
46
+ TESTS::
47
+
48
+ sage: C = WeylGroups()
49
+ sage: TestSuite(C).run()
50
+ """
51
+
52
+ def super_categories(self):
53
+ r"""
54
+ EXAMPLES::
55
+
56
+ sage: WeylGroups().super_categories()
57
+ [Category of Coxeter groups]
58
+ """
59
+ return [CoxeterGroups()]
60
+
61
+ def additional_structure(self):
62
+ r"""
63
+ Return ``None``.
64
+
65
+ Indeed, the category of Weyl groups defines no additional
66
+ structure: Weyl groups are a special class of Coxeter groups.
67
+
68
+ .. SEEALSO:: :meth:`Category.additional_structure`
69
+
70
+ .. TODO:: Should this category be a :class:`CategoryWithAxiom`?
71
+
72
+ EXAMPLES::
73
+
74
+ sage: WeylGroups().additional_structure()
75
+ """
76
+ return None
77
+
78
+ Finite = LazyImport('sage.categories.finite_weyl_groups', 'FiniteWeylGroups')
79
+
80
+ class ParentMethods:
81
+ def coxeter_matrix(self):
82
+ """
83
+ Return the Coxeter matrix associated to ``self``.
84
+
85
+ EXAMPLES::
86
+
87
+ sage: G = WeylGroup(['A',3])
88
+ sage: G.coxeter_matrix()
89
+ [1 3 2]
90
+ [3 1 3]
91
+ [2 3 1]
92
+ """
93
+ return self.cartan_type().coxeter_matrix()
94
+
95
+ def pieri_factors(self, *args, **keywords):
96
+ r"""
97
+ Return the set of Pieri factors in this Weyl group.
98
+
99
+ For any type, the set of Pieri factors forms a lower ideal
100
+ in Bruhat order, generated by all the conjugates of some
101
+ special element of the Weyl group. In type `A_n`, this
102
+ special element is `s_n\cdots s_1`, and the conjugates are
103
+ obtained by rotating around this reduced word.
104
+
105
+ These are used to compute Stanley symmetric functions.
106
+
107
+ .. SEEALSO::
108
+
109
+ * :meth:`WeylGroups.ElementMethods.stanley_symmetric_function`
110
+ * :mod:`sage.combinat.root_system.pieri_factors`
111
+
112
+ EXAMPLES::
113
+
114
+ sage: W = WeylGroup(['A',5,1])
115
+ sage: PF = W.pieri_factors()
116
+ sage: PF.cardinality()
117
+ 63
118
+
119
+ sage: W = WeylGroup(['B',3])
120
+ sage: PF = W.pieri_factors()
121
+ sage: sorted([w.reduced_word() for w in PF])
122
+ [[],
123
+ [1],
124
+ [1, 2],
125
+ [1, 2, 1],
126
+ [1, 2, 3],
127
+ [1, 2, 3, 1],
128
+ [1, 2, 3, 2],
129
+ [1, 2, 3, 2, 1],
130
+ [2],
131
+ [2, 1],
132
+ [2, 3],
133
+ [2, 3, 1],
134
+ [2, 3, 2],
135
+ [2, 3, 2, 1],
136
+ [3],
137
+ [3, 1],
138
+ [3, 1, 2],
139
+ [3, 1, 2, 1],
140
+ [3, 2],
141
+ [3, 2, 1]]
142
+ sage: W = WeylGroup(['C',4,1])
143
+ sage: PF = W.pieri_factors()
144
+ sage: W.from_reduced_word([3,2,0]) in PF
145
+ True
146
+ """
147
+ # Do not remove this line which makes sure the pieri factor
148
+ # code is properly inserted inside the Cartan Types
149
+ import sage.combinat.root_system.pieri_factors
150
+ assert sage.combinat.root_system.pieri_factors
151
+ ct = self.cartan_type()
152
+ if hasattr(ct, "PieriFactors"):
153
+ return ct.PieriFactors(self, *args, **keywords)
154
+ raise NotImplementedError("Pieri factors for type {}".format(ct))
155
+
156
+ def bruhat_cone(self, x, y, side='upper', backend='cdd'):
157
+ r"""
158
+ Return the (upper or lower) Bruhat cone associated to the interval ``[x,y]``.
159
+
160
+ To a cover relation `v \prec w` in strong Bruhat order you can assign a positive
161
+ root `\beta` given by the unique reflection `s_\beta` such that `s_\beta v = w`.
162
+
163
+ The upper Bruhat cone of the interval `[x,y]` is the non-empty, polyhedral cone generated
164
+ by the roots corresponding to `x \prec a` for all atoms `a` in the interval.
165
+ The lower Bruhat cone of the interval `[x,y]` is the non-empty, polyhedral cone generated
166
+ by the roots corresponding to `c \prec y` for all coatoms `c` in the interval.
167
+
168
+ INPUT:
169
+
170
+ - ``x`` -- an element in the group `W`
171
+
172
+ - ``y`` -- an element in the group `W`
173
+
174
+ - ``side`` -- (default: ``'upper'``) must be one of the following:
175
+
176
+ * ``'upper'`` -- return the upper Bruhat cone of the interval [``x``, ``y``]
177
+ * ``'lower'`` -- return the lower Bruhat cone of the interval [``x``, ``y``]
178
+
179
+ - ``backend`` -- string (default: ``'cdd'``); the backend to use to create the polyhedron
180
+
181
+ EXAMPLES::
182
+
183
+ sage: W = WeylGroup(['A',2])
184
+ sage: x = W.from_reduced_word([1])
185
+ sage: y = W.w0
186
+ sage: W.bruhat_cone(x, y) # needs cddexec_gmp
187
+ A 2-dimensional polyhedron in QQ^3
188
+ defined as the convex hull of 1 vertex and 2 rays
189
+
190
+ sage: W = WeylGroup(['E',6])
191
+ sage: x = W.one()
192
+ sage: y = W.w0
193
+ sage: W.bruhat_cone(x, y, side='lower') # needs cddexec_gmp
194
+ A 6-dimensional polyhedron in QQ^8
195
+ defined as the convex hull of 1 vertex and 6 rays
196
+
197
+ TESTS::
198
+
199
+ sage: W = WeylGroup(['A',2])
200
+ sage: x = W.one()
201
+ sage: y = W.w0
202
+ sage: W.bruhat_cone(x, y, side='nonsense')
203
+ Traceback (most recent call last):
204
+ ...
205
+ ValueError: side must be either 'upper' or 'lower'
206
+
207
+ REFERENCES:
208
+
209
+ - [Dy1994]_
210
+ - [JS2021]_
211
+ """
212
+ from sage.modules.free_module_element import vector
213
+ if side == 'upper':
214
+ roots = [vector((x * r * x.inverse()).reflection_to_root().to_ambient())
215
+ for z, r in x.bruhat_upper_covers_reflections()
216
+ if z.bruhat_le(y)]
217
+ elif side == 'lower':
218
+ roots = [vector((y * r * y.inverse()).reflection_to_root().to_ambient())
219
+ for z, r in y.bruhat_lower_covers_reflections()
220
+ if x.bruhat_le(z)]
221
+ else:
222
+ raise ValueError("side must be either 'upper' or 'lower'")
223
+
224
+ from sage.geometry.polyhedron.constructor import Polyhedron
225
+ return Polyhedron(vertices=[vector([0] * self.degree())],
226
+ rays=roots,
227
+ ambient_dim=self.degree(),
228
+ backend=backend)
229
+
230
+ @cached_method
231
+ def quantum_bruhat_graph(self, index_set=()):
232
+ r"""
233
+ Return the quantum Bruhat graph of the quotient of the Weyl
234
+ group by a parabolic subgroup `W_J`.
235
+
236
+ INPUT:
237
+
238
+ - ``index_set`` -- (default: ()) a tuple `J` of nodes of
239
+ the Dynkin diagram
240
+
241
+ By default, the value for ``index_set`` indicates that the
242
+ subgroup is trivial and the quotient is the full Weyl group.
243
+
244
+ EXAMPLES::
245
+
246
+ sage: W = WeylGroup(['A',3], prefix='s')
247
+ sage: g = W.quantum_bruhat_graph((1,3))
248
+ sage: g
249
+ Parabolic Quantum Bruhat Graph of Weyl Group of type ['A', 3]
250
+ (as a matrix group acting on the ambient space)
251
+ for nodes (1, 3): Digraph on 6 vertices
252
+ sage: g.vertices(sort=True)
253
+ [s2*s3*s1*s2, s3*s1*s2, s1*s2, s3*s2, s2, 1]
254
+ sage: g.edges(sort=True)
255
+ [(s2*s3*s1*s2, s2, alpha[2]),
256
+ (s3*s1*s2, s2*s3*s1*s2, alpha[1] + alpha[2] + alpha[3]),
257
+ (s3*s1*s2, 1, alpha[2]),
258
+ (s1*s2, s3*s1*s2, alpha[2] + alpha[3]),
259
+ (s3*s2, s3*s1*s2, alpha[1] + alpha[2]),
260
+ (s2, s1*s2, alpha[1] + alpha[2]),
261
+ (s2, s3*s2, alpha[2] + alpha[3]),
262
+ (1, s2, alpha[2])]
263
+ sage: W = WeylGroup(['A',3,1], prefix='s')
264
+ sage: g = W.quantum_bruhat_graph()
265
+ Traceback (most recent call last):
266
+ ...
267
+ ValueError: the Cartan type ['A', 3, 1] is not finite
268
+ """
269
+ if not self.cartan_type().is_finite():
270
+ raise ValueError("the Cartan type {} is not finite".format(self.cartan_type()))
271
+
272
+ # This is a modified form of quantum_bruhat_successors.
273
+ # It does not do any error checking and also is more efficient
274
+ # with how it handles memory and checks by using data stored
275
+ # at this function level rather than recomputing everything.
276
+ lattice = self.cartan_type().root_system().root_lattice()
277
+ NPR = lattice.nonparabolic_positive_roots(index_set)
278
+ NPR_sum = sum(NPR)
279
+ NPR_data = {}
280
+ double_rho = lattice.sum(lattice.positive_roots()) # = 2 * \rho
281
+ for alpha in NPR:
282
+ ref = alpha.associated_reflection()
283
+ alphacheck = alpha.associated_coroot()
284
+ NPR_data[alpha] = [self.from_reduced_word(ref), # the element
285
+ len(ref) == double_rho.scalar(alphacheck) - 1, # is_quantum
286
+ NPR_sum.scalar(alphacheck)] # the scalar
287
+ # We also create a temporary cache of lengths as they are
288
+ # relatively expensive to compute and needed frequently
289
+ visited = {}
290
+ todo = {self.one()}
291
+ len_cache = {}
292
+
293
+ def length(x):
294
+ if x in len_cache:
295
+ return len_cache[x]
296
+ len_cache[x] = x.length()
297
+ return len_cache[x]
298
+ while todo:
299
+ x = todo.pop()
300
+ w_length_plus_one = length(x) + 1
301
+ adj = {}
302
+ for alpha in NPR:
303
+ elt, is_quantum, scalar = NPR_data[alpha]
304
+ wr = x * elt
305
+ wrc = wr.coset_representative(index_set)
306
+ # coset_representative returns wr if nothing gets changed
307
+ if wrc is wr and length(wrc) == w_length_plus_one:
308
+ if wrc not in visited:
309
+ todo.add(wrc)
310
+ adj[wr] = alpha
311
+ elif is_quantum and length(wrc) == w_length_plus_one - scalar:
312
+ if wrc not in visited:
313
+ todo.add(wrc)
314
+ adj[wrc] = alpha
315
+ visited[x] = adj
316
+
317
+ from sage.graphs.digraph import DiGraph
318
+ return DiGraph(visited,
319
+ name="Parabolic Quantum Bruhat Graph of %s for nodes %s" % (self, index_set),
320
+ format='dict_of_dicts',
321
+ data_structure='static_sparse')
322
+
323
+ class ElementMethods:
324
+
325
+ def is_pieri_factor(self):
326
+ r"""
327
+ Return whether ``self`` is a Pieri factor, as used for
328
+ computing Stanley symmetric functions.
329
+
330
+ .. SEEALSO::
331
+
332
+ * :meth:`stanley_symmetric_function`
333
+ * :meth:`WeylGroups.ParentMethods.pieri_factors`
334
+
335
+ EXAMPLES::
336
+
337
+ sage: W = WeylGroup(['A',5,1])
338
+ sage: W.from_reduced_word([3,2,5]).is_pieri_factor()
339
+ True
340
+ sage: W.from_reduced_word([3,2,4,5]).is_pieri_factor()
341
+ False
342
+
343
+ sage: W = WeylGroup(['C',4,1])
344
+ sage: W.from_reduced_word([0,2,1]).is_pieri_factor()
345
+ True
346
+ sage: W.from_reduced_word([0,2,1,0]).is_pieri_factor()
347
+ False
348
+
349
+ sage: W = WeylGroup(['B',3])
350
+ sage: W.from_reduced_word([3,2,3]).is_pieri_factor()
351
+ False
352
+ sage: W.from_reduced_word([2,1,2]).is_pieri_factor()
353
+ True
354
+ """
355
+
356
+ return self in self.parent().pieri_factors()
357
+
358
+ def left_pieri_factorizations(self, max_length=None):
359
+ r"""
360
+ Return all factorizations of ``self`` as `uv`, where `u`
361
+ is a Pieri factor and `v` is an element of the Weyl group.
362
+
363
+ .. SEEALSO::
364
+
365
+ * :meth:`WeylGroups.ParentMethods.pieri_factors`
366
+ * :mod:`sage.combinat.root_system.pieri_factors`
367
+
368
+ EXAMPLES:
369
+
370
+ If we take `w = w_0` the maximal element of a strict parabolic
371
+ subgroup of type `A_{n_1} \times \cdots \times A_{n_k}`, then the Pieri
372
+ factorizations are in correspondence with all Pieri factors, and
373
+ there are `\prod 2^{n_i}` of them::
374
+
375
+ sage: W = WeylGroup(['A', 4, 1])
376
+ sage: W.from_reduced_word([]).left_pieri_factorizations().cardinality()
377
+ 1
378
+ sage: W.from_reduced_word([1]).left_pieri_factorizations().cardinality()
379
+ 2
380
+ sage: W.from_reduced_word([1,2,1]).left_pieri_factorizations().cardinality()
381
+ 4
382
+ sage: W.from_reduced_word([1,2,3,1,2,1]).left_pieri_factorizations().cardinality()
383
+ 8
384
+
385
+ sage: W.from_reduced_word([1,3]).left_pieri_factorizations().cardinality()
386
+ 4
387
+ sage: W.from_reduced_word([1,3,4,3]).left_pieri_factorizations().cardinality()
388
+ 8
389
+
390
+ sage: W.from_reduced_word([2,1]).left_pieri_factorizations().cardinality()
391
+ 3
392
+ sage: W.from_reduced_word([1,2]).left_pieri_factorizations().cardinality()
393
+ 2
394
+ sage: [W.from_reduced_word([1,2]).left_pieri_factorizations(max_length=i).cardinality()
395
+ ....: for i in [-1, 0, 1, 2]]
396
+ [0, 1, 2, 2]
397
+
398
+ sage: W = WeylGroup(['C',4,1])
399
+ sage: w = W.from_reduced_word([0,3,2,1,0])
400
+ sage: w.left_pieri_factorizations().cardinality()
401
+ 7
402
+ sage: [(u.reduced_word(),v.reduced_word())
403
+ ....: for (u,v) in w.left_pieri_factorizations()]
404
+ [([], [3, 2, 0, 1, 0]),
405
+ ([0], [3, 2, 1, 0]),
406
+ ([3], [2, 0, 1, 0]),
407
+ ([3, 0], [2, 1, 0]),
408
+ ([3, 2], [0, 1, 0]),
409
+ ([3, 2, 0], [1, 0]),
410
+ ([3, 2, 0, 1], [0])]
411
+
412
+ sage: W = WeylGroup(['B',4,1])
413
+ sage: W.from_reduced_word([0,2,1,0]).left_pieri_factorizations().cardinality()
414
+ 6
415
+ """
416
+ if max_length is None:
417
+ from sage.rings.infinity import infinity
418
+ max_length = infinity
419
+ pieri_factors = self.parent().pieri_factors()
420
+
421
+ def predicate(u):
422
+ return u in pieri_factors and u.length() <= max_length
423
+
424
+ return self.binary_factorizations(predicate)
425
+
426
+ @cached_in_parent_method
427
+ def stanley_symmetric_function_as_polynomial(self, max_length=None):
428
+ r"""
429
+ Return a multivariate generating function for the number
430
+ of factorizations of a Weyl group element into Pieri
431
+ factors of decreasing length, weighted by a statistic on
432
+ Pieri factors.
433
+
434
+ .. SEEALSO::
435
+
436
+ * :meth:`stanley_symmetric_function`
437
+ * :meth:`WeylGroups.ParentMethods.pieri_factors`
438
+ * :mod:`sage.combinat.root_system.pieri_factors`
439
+
440
+ INPUT:
441
+
442
+ - ``self`` -- an element `w` of a Weyl group `W`
443
+ - ``max_length`` -- nonnegative integer or infinity (default: infinity)
444
+
445
+ Returns the generating series for the Pieri factorizations
446
+ `w = u_1 \cdots u_k`, where `u_i` is a Pieri factor for
447
+ all `i`, `l(w) = \sum_{i=1}^k l(u_i)` and
448
+ ``max_length`` `\geq l(u_1) \geq \cdots \geq l(u_k)`.
449
+
450
+ A factorization `u_1 \cdots u_k` contributes a monomial of
451
+ the form `\prod_i x_{l(u_i)}`, with coefficient given by
452
+ `\prod_i 2^{c(u_i)}`, where `c` is a type-dependent
453
+ statistic on Pieri factors, as returned by the method
454
+ ``u[i].stanley_symm_poly_weight()``.
455
+
456
+ EXAMPLES::
457
+
458
+ sage: W = WeylGroup(['A', 3, 1])
459
+ sage: W.from_reduced_word([]).stanley_symmetric_function_as_polynomial()
460
+ 1
461
+ sage: W.from_reduced_word([1]).stanley_symmetric_function_as_polynomial()
462
+ x1
463
+ sage: W.from_reduced_word([1,2]).stanley_symmetric_function_as_polynomial()
464
+ x1^2
465
+ sage: W.from_reduced_word([2,1]).stanley_symmetric_function_as_polynomial()
466
+ x1^2 + x2
467
+ sage: W.from_reduced_word([1,2,1]).stanley_symmetric_function_as_polynomial()
468
+ 2*x1^3 + x1*x2
469
+ sage: W.from_reduced_word([1,2,1,0]).stanley_symmetric_function_as_polynomial()
470
+ 3*x1^4 + 2*x1^2*x2 + x2^2 + x1*x3
471
+ sage: x = W.from_reduced_word([1,2,3,1,2,1,0])
472
+ sage: x.stanley_symmetric_function_as_polynomial() # long time
473
+ 22*x1^7 + 11*x1^5*x2 + 5*x1^3*x2^2 + 3*x1^4*x3 + 2*x1*x2^3 + x1^2*x2*x3
474
+ sage: y = W.from_reduced_word([3,1,2,0,3,1,0])
475
+ sage: y.stanley_symmetric_function_as_polynomial() # long time
476
+ 8*x1^7 + 4*x1^5*x2 + 2*x1^3*x2^2 + x1*x2^3
477
+
478
+ sage: W = WeylGroup(['C',3,1])
479
+ sage: W.from_reduced_word([0,2,1,0]).stanley_symmetric_function_as_polynomial()
480
+ 32*x1^4 + 16*x1^2*x2 + 8*x2^2 + 4*x1*x3
481
+
482
+ sage: W = WeylGroup(['B',3,1])
483
+ sage: W.from_reduced_word([3,2,1]).stanley_symmetric_function_as_polynomial()
484
+ 2*x1^3 + x1*x2 + 1/2*x3
485
+
486
+ Algorithm: Induction on the left Pieri factors. Note that
487
+ this induction preserves subsets of `W` which are stable
488
+ by taking right factors, and in particular Grassmanian
489
+ elements.
490
+ """
491
+ if max_length is None:
492
+ from sage.rings.infinity import infinity
493
+ max_length = infinity
494
+ W = self.parent()
495
+ pieri_factors = W.pieri_factors()
496
+ from sage.rings.rational_field import QQ
497
+ R = QQ[','.join('x%s' % l for l in range(1, pieri_factors.max_length() + 1))]
498
+ x = R.gens()
499
+ if self.is_one():
500
+ return R.one()
501
+
502
+ return R(sum(2**(pieri_factors.stanley_symm_poly_weight(u)) * x[u.length() - 1] * v.stanley_symmetric_function_as_polynomial(max_length=u.length())
503
+ for (u, v) in self.left_pieri_factorizations(max_length)
504
+ if u != W.one()))
505
+
506
+ def stanley_symmetric_function(self):
507
+ r"""
508
+ Return the affine Stanley symmetric function indexed by ``self``.
509
+
510
+ INPUT:
511
+
512
+ - ``self`` -- an element `w` of a Weyl group
513
+
514
+ Returns the affine Stanley symmetric function indexed by
515
+ `w`. Stanley symmetric functions are defined as generating
516
+ series of the factorizations of `w` into Pieri factors and
517
+ weighted by a statistic on Pieri factors.
518
+
519
+ .. SEEALSO::
520
+
521
+ * :meth:`stanley_symmetric_function_as_polynomial`
522
+ * :meth:`WeylGroups.ParentMethods.pieri_factors`
523
+ * :mod:`sage.combinat.root_system.pieri_factors`
524
+
525
+ EXAMPLES::
526
+
527
+ sage: W = WeylGroup(['A', 3, 1])
528
+ sage: W.from_reduced_word([3,1,2,0,3,1,0]).stanley_symmetric_function()
529
+ 8*m[1, 1, 1, 1, 1, 1, 1] + 4*m[2, 1, 1, 1, 1, 1]
530
+ + 2*m[2, 2, 1, 1, 1] + m[2, 2, 2, 1]
531
+ sage: A = AffinePermutationGroup(['A',3,1])
532
+ sage: A.from_reduced_word([3,1,2,0,3,1,0]).stanley_symmetric_function()
533
+ 8*m[1, 1, 1, 1, 1, 1, 1] + 4*m[2, 1, 1, 1, 1, 1]
534
+ + 2*m[2, 2, 1, 1, 1] + m[2, 2, 2, 1]
535
+
536
+ sage: W = WeylGroup(['C',3,1])
537
+ sage: W.from_reduced_word([0,2,1,0]).stanley_symmetric_function()
538
+ 32*m[1, 1, 1, 1] + 16*m[2, 1, 1] + 8*m[2, 2] + 4*m[3, 1]
539
+
540
+ sage: W = WeylGroup(['B',3,1])
541
+ sage: W.from_reduced_word([3,2,1]).stanley_symmetric_function()
542
+ 2*m[1, 1, 1] + m[2, 1] + 1/2*m[3]
543
+
544
+ sage: W = WeylGroup(['B',4])
545
+ sage: w = W.from_reduced_word([3,2,3,1])
546
+ sage: w.stanley_symmetric_function() # long time (6s on sage.math, 2011)
547
+ 48*m[1, 1, 1, 1] + 24*m[2, 1, 1] + 12*m[2, 2] + 8*m[3, 1] + 2*m[4]
548
+
549
+ sage: A = AffinePermutationGroup(['A',4,1])
550
+ sage: a = A([-2,0,1,4,12])
551
+ sage: a.stanley_symmetric_function()
552
+ 6*m[1, 1, 1, 1, 1, 1, 1, 1] + 5*m[2, 1, 1, 1, 1, 1, 1]
553
+ + 4*m[2, 2, 1, 1, 1, 1] + 3*m[2, 2, 2, 1, 1] + 2*m[2, 2, 2, 2]
554
+ + 4*m[3, 1, 1, 1, 1, 1] + 3*m[3, 2, 1, 1, 1] + 2*m[3, 2, 2, 1]
555
+ + 2*m[3, 3, 1, 1] + m[3, 3, 2] + 3*m[4, 1, 1, 1, 1]
556
+ + 2*m[4, 2, 1, 1] + m[4, 2, 2] + m[4, 3, 1]
557
+
558
+ One more example (:issue:`14095`)::
559
+
560
+ sage: G = SymmetricGroup(4)
561
+ sage: w = G.from_reduced_word([3,2,3,1])
562
+ sage: w.stanley_symmetric_function()
563
+ 3*m[1, 1, 1, 1] + 2*m[2, 1, 1] + m[2, 2] + m[3, 1]
564
+
565
+ REFERENCES:
566
+
567
+ - [BH1994]_
568
+
569
+ - [Lam2008]_
570
+
571
+ - [LSS2009]_
572
+
573
+ - [Pon2010]_
574
+ """
575
+ from sage.rings.rational_field import QQ
576
+ from sage.combinat.sf.sf import SymmetricFunctions
577
+
578
+ m = SymmetricFunctions(QQ).monomial()
579
+ return m.from_polynomial_exp(self.stanley_symmetric_function_as_polynomial())
580
+
581
+ @cached_in_parent_method
582
+ def reflection_to_root(self):
583
+ r"""
584
+ Return the root associated with the reflection ``self``.
585
+
586
+ EXAMPLES::
587
+
588
+ sage: W = WeylGroup(['C',2], prefix='s')
589
+ sage: W.from_reduced_word([1,2,1]).reflection_to_root()
590
+ 2*alpha[1] + alpha[2]
591
+ sage: W.from_reduced_word([1,2]).reflection_to_root()
592
+ Traceback (most recent call last):
593
+ ...
594
+ ValueError: s1*s2 is not a reflection
595
+ sage: W.long_element().reflection_to_root()
596
+ Traceback (most recent call last):
597
+ ...
598
+ ValueError: s2*s1*s2*s1 is not a reflection
599
+ """
600
+ i = self.first_descent()
601
+ if i is None:
602
+ raise ValueError("{} is not a reflection".format(self))
603
+ if self == self.parent().simple_reflection(i):
604
+ return self.parent().cartan_type().root_system().root_lattice().simple_root(i)
605
+ rsi = self.apply_simple_reflection(i)
606
+ if not rsi.has_descent(i, side='left'):
607
+ raise ValueError("{} is not a reflection".format(self))
608
+ return rsi.apply_simple_reflection(i, side='left').reflection_to_root().simple_reflection(i)
609
+
610
+ @cached_in_parent_method
611
+ def reflection_to_coroot(self):
612
+ r"""
613
+ Return the coroot associated with the reflection ``self``.
614
+
615
+ EXAMPLES::
616
+
617
+ sage: W = WeylGroup(['C',2], prefix='s')
618
+ sage: W.from_reduced_word([1,2,1]).reflection_to_coroot()
619
+ alphacheck[1] + alphacheck[2]
620
+ sage: W.from_reduced_word([1,2]).reflection_to_coroot()
621
+ Traceback (most recent call last):
622
+ ...
623
+ ValueError: s1*s2 is not a reflection
624
+ sage: W.long_element().reflection_to_coroot()
625
+ Traceback (most recent call last):
626
+ ...
627
+ ValueError: s2*s1*s2*s1 is not a reflection
628
+ """
629
+ i = self.first_descent()
630
+ if i is None:
631
+ raise ValueError("{} is not a reflection".format(self))
632
+ if self == self.parent().simple_reflection(i):
633
+ return self.parent().cartan_type().root_system().root_lattice().simple_coroot(i)
634
+ rsi = self.apply_simple_reflection(i)
635
+ if not rsi.has_descent(i, side='left'):
636
+ raise ValueError("{} is not a reflection".format(self))
637
+ return rsi.apply_simple_reflection(i, side='left').reflection_to_coroot().simple_reflection(i)
638
+
639
+ def inversions(self, side='right', inversion_type='reflections'):
640
+ """
641
+ Return the set of inversions of ``self``.
642
+
643
+ INPUT:
644
+
645
+ - ``side`` -- 'right' (default) or 'left'
646
+ - ``inversion_type`` -- 'reflections' (default), 'roots', or 'coroots'
647
+
648
+ OUTPUT:
649
+
650
+ For reflections, the set of reflections r in the Weyl group such that
651
+ ``self`` ``r`` < ``self``. For (co)roots, the set of positive (co)roots that are sent
652
+ by ``self`` to negative (co)roots; their associated reflections are described above.
653
+
654
+ If ``side`` is 'left', the inverse Weyl group element is used.
655
+
656
+ EXAMPLES::
657
+
658
+ sage: W = WeylGroup(['C',2], prefix='s')
659
+ sage: w = W.from_reduced_word([1,2])
660
+ sage: w.inversions()
661
+ [s2, s2*s1*s2]
662
+ sage: w.inversions(inversion_type = 'reflections')
663
+ [s2, s2*s1*s2]
664
+ sage: w.inversions(inversion_type = 'roots')
665
+ [alpha[2], alpha[1] + alpha[2]]
666
+ sage: w.inversions(inversion_type = 'coroots')
667
+ [alphacheck[2], alphacheck[1] + 2*alphacheck[2]]
668
+ sage: w.inversions(side = 'left')
669
+ [s1, s1*s2*s1]
670
+ sage: w.inversions(side = 'left', inversion_type = 'roots')
671
+ [alpha[1], 2*alpha[1] + alpha[2]]
672
+ sage: w.inversions(side = 'left', inversion_type = 'coroots')
673
+ [alphacheck[1], alphacheck[1] + alphacheck[2]]
674
+ """
675
+ if side == 'left':
676
+ self = self.inverse()
677
+ reflections = self.inversions_as_reflections()
678
+ if inversion_type == 'reflections':
679
+ return reflections
680
+ if inversion_type == 'roots':
681
+ return [r.reflection_to_root() for r in reflections]
682
+ if inversion_type == 'coroots':
683
+ return [r.reflection_to_coroot() for r in reflections]
684
+ raise ValueError(f"inversion_type {inversion_type} is invalid")
685
+
686
+ def inversion_arrangement(self, side='right'):
687
+ r"""
688
+ Return the inversion hyperplane arrangement of ``self``.
689
+
690
+ INPUT:
691
+
692
+ - ``side`` -- ``'right'`` (default) or ``'left'``
693
+
694
+ OUTPUT:
695
+
696
+ A (central) hyperplane arrangement whose hyperplanes correspond
697
+ to the inversions of ``self`` given as roots.
698
+
699
+ The ``side`` parameter determines on which side
700
+ to compute the inversions.
701
+
702
+ EXAMPLES::
703
+
704
+ sage: W = WeylGroup(['A',3])
705
+ sage: w = W.from_reduced_word([1, 2, 3, 1, 2])
706
+ sage: A = w.inversion_arrangement(); A
707
+ Arrangement of 5 hyperplanes of dimension 3 and rank 3
708
+ sage: A.hyperplanes()
709
+ (Hyperplane 0*a1 + 0*a2 + a3 + 0,
710
+ Hyperplane 0*a1 + a2 + 0*a3 + 0,
711
+ Hyperplane 0*a1 + a2 + a3 + 0,
712
+ Hyperplane a1 + a2 + 0*a3 + 0,
713
+ Hyperplane a1 + a2 + a3 + 0)
714
+
715
+ The identity element gives the empty arrangement::
716
+
717
+ sage: W = WeylGroup(['A',3])
718
+ sage: W.one().inversion_arrangement()
719
+ Empty hyperplane arrangement of dimension 3
720
+ """
721
+ inv = self.inversions(side=side, inversion_type='roots')
722
+ from sage.geometry.hyperplane_arrangement.arrangement import HyperplaneArrangements
723
+ I = self.parent().cartan_type().index_set()
724
+ from sage.rings.rational_field import QQ
725
+ H = HyperplaneArrangements(QQ, tuple(['a{}'.format(i) for i in I]))
726
+ gens = H.gens()
727
+ if not inv:
728
+ return H()
729
+ return H([sum(c * gens[I.index(i)] for (i, c) in root)
730
+ for root in inv])
731
+
732
+ def bruhat_lower_covers_coroots(self):
733
+ r"""
734
+ Return all 2-tuples (``v``, `\alpha`) where ``v`` is covered
735
+ by ``self`` and `\alpha` is the positive coroot such that
736
+ ``self`` = ``v`` `s_\alpha` where `s_\alpha` is
737
+ the reflection orthogonal to `\alpha`.
738
+
739
+ ALGORITHM:
740
+
741
+ See :meth:`.bruhat_lower_covers` and
742
+ :meth:`.bruhat_lower_covers_reflections` for Coxeter groups.
743
+
744
+ EXAMPLES::
745
+
746
+ sage: W = WeylGroup(['A',3], prefix='s')
747
+ sage: w = W.from_reduced_word([3,1,2,1])
748
+ sage: w.bruhat_lower_covers_coroots()
749
+ [(s1*s2*s1, alphacheck[1] + alphacheck[2] + alphacheck[3]),
750
+ (s3*s2*s1, alphacheck[2]), (s3*s1*s2, alphacheck[1])]
751
+ """
752
+ return [(x[0], x[1].reflection_to_coroot())
753
+ for x in self.bruhat_lower_covers_reflections()]
754
+
755
+ def bruhat_upper_covers_coroots(self):
756
+ r"""
757
+ Return all 2-tuples (``v``, `\alpha`) where ``v`` is covers ``self`` and `\alpha`
758
+ is the positive coroot such that ``self`` = ``v`` `s_\alpha` where `s_\alpha` is
759
+ the reflection orthogonal to `\alpha`.
760
+
761
+ ALGORITHM:
762
+
763
+ See :meth:`~CoxeterGroups.ElementMethods.bruhat_upper_covers` and :meth:`.bruhat_upper_covers_reflections` for Coxeter groups.
764
+
765
+ EXAMPLES::
766
+
767
+ sage: W = WeylGroup(['A',4], prefix='s')
768
+ sage: w = W.from_reduced_word([3,1,2,1])
769
+ sage: w.bruhat_upper_covers_coroots()
770
+ [(s1*s2*s3*s2*s1, alphacheck[3]),
771
+ (s2*s3*s1*s2*s1, alphacheck[2] + alphacheck[3]),
772
+ (s3*s4*s1*s2*s1, alphacheck[4]),
773
+ (s4*s3*s1*s2*s1, alphacheck[1] + alphacheck[2] + alphacheck[3] + alphacheck[4])]
774
+ """
775
+ return [(x[0], x[1].reflection_to_coroot())
776
+ for x in self.bruhat_upper_covers_reflections()]
777
+
778
+ def quantum_bruhat_successors(self, index_set=None, roots=False, quantum_only=False):
779
+ r"""
780
+ Return the successors of ``self`` in the quantum Bruhat graph
781
+ on the parabolic quotient of the Weyl group determined by the
782
+ subset of Dynkin nodes ``index_set``.
783
+
784
+ INPUT:
785
+
786
+ - ``self`` -- a Weyl group element, which is assumed to
787
+ be of minimum length in its coset with respect to the
788
+ parabolic subgroup
789
+
790
+ - ``index_set`` -- (default: ``None``) indicates the set of
791
+ simple reflections used to generate the parabolic subgroup;
792
+ the default value indicates that the subgroup is the identity
793
+
794
+ - ``roots`` -- boolean (default: ``False``); if ``True``, returns
795
+ the list of 2-tuples (``w``, `\alpha`) where ``w`` is a successor
796
+ and `\alpha` is the positive root associated with the
797
+ successor relation
798
+
799
+ - ``quantum_only`` -- boolean (default: ``False``); if ``True``,
800
+ returns only the quantum successors
801
+
802
+ EXAMPLES::
803
+
804
+ sage: W = WeylGroup(['A',3], prefix='s')
805
+ sage: w = W.from_reduced_word([3,1,2])
806
+ sage: w.quantum_bruhat_successors([1], roots = True)
807
+ [(s3, alpha[2]), (s1*s2*s3*s2, alpha[3]),
808
+ (s2*s3*s1*s2, alpha[1] + alpha[2] + alpha[3])]
809
+ sage: w.quantum_bruhat_successors([1,3])
810
+ [1, s2*s3*s1*s2]
811
+ sage: w.quantum_bruhat_successors(roots = True)
812
+ [(s3*s1*s2*s1, alpha[1]),
813
+ (s3*s1, alpha[2]),
814
+ (s1*s2*s3*s2, alpha[3]),
815
+ (s2*s3*s1*s2, alpha[1] + alpha[2] + alpha[3])]
816
+ sage: w.quantum_bruhat_successors()
817
+ [s3*s1*s2*s1, s3*s1, s1*s2*s3*s2, s2*s3*s1*s2]
818
+ sage: w.quantum_bruhat_successors(quantum_only = True)
819
+ [s3*s1]
820
+ sage: w = W.from_reduced_word([2,3])
821
+ sage: w.quantum_bruhat_successors([1,3])
822
+ Traceback (most recent call last):
823
+ ...
824
+ ValueError: s2*s3 is not of minimum length in its coset
825
+ of the parabolic subgroup generated by the reflections (1, 3)
826
+ """
827
+ W = self.parent()
828
+ if not W.cartan_type().is_finite():
829
+ raise ValueError("the Cartan type {} is not finite".format(W.cartan_type()))
830
+ if index_set is None:
831
+ index_set = []
832
+ else:
833
+ index_set = list(index_set)
834
+ index_set = tuple(index_set)
835
+ if self != self.coset_representative(index_set):
836
+ raise ValueError("{} is not of minimum length in its coset of the parabolic subgroup generated by the reflections {}".format(self, index_set))
837
+ lattice = W.cartan_type().root_system().root_lattice()
838
+ w_length_plus_one = self.length() + 1
839
+ successors = []
840
+ for alpha in lattice.nonparabolic_positive_roots(index_set):
841
+ wr = self * W.from_reduced_word(alpha.associated_reflection())
842
+ wrc = wr.coset_representative(index_set)
843
+ if wrc == wr and wr.length() == w_length_plus_one and not quantum_only:
844
+ if roots:
845
+ successors.append((wr, alpha))
846
+ else:
847
+ successors.append(wr)
848
+ elif alpha.quantum_root() and wrc.length() == w_length_plus_one - lattice.nonparabolic_positive_root_sum(index_set).scalar(alpha.associated_coroot()):
849
+ if roots:
850
+ successors.append((wrc, alpha))
851
+ else:
852
+ successors.append(wrc)
853
+ return successors