passagemath-combinat 10.6.42__cp314-cp314-musllinux_1_2_x86_64.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 (400) hide show
  1. passagemath_combinat/__init__.py +3 -0
  2. passagemath_combinat-10.6.42.dist-info/METADATA +160 -0
  3. passagemath_combinat-10.6.42.dist-info/RECORD +400 -0
  4. passagemath_combinat-10.6.42.dist-info/WHEEL +5 -0
  5. passagemath_combinat-10.6.42.dist-info/top_level.txt +3 -0
  6. passagemath_combinat.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
  7. passagemath_combinat.libs/libsymmetrica-81fe8739.so.3.0.0 +0 -0
  8. sage/algebras/affine_nil_temperley_lieb.py +263 -0
  9. sage/algebras/all.py +24 -0
  10. sage/algebras/all__sagemath_combinat.py +35 -0
  11. sage/algebras/askey_wilson.py +935 -0
  12. sage/algebras/associated_graded.py +345 -0
  13. sage/algebras/cellular_basis.py +350 -0
  14. sage/algebras/cluster_algebra.py +2766 -0
  15. sage/algebras/down_up_algebra.py +860 -0
  16. sage/algebras/free_algebra.py +1698 -0
  17. sage/algebras/free_algebra_element.py +345 -0
  18. sage/algebras/free_algebra_quotient.py +405 -0
  19. sage/algebras/free_algebra_quotient_element.py +295 -0
  20. sage/algebras/free_zinbiel_algebra.py +885 -0
  21. sage/algebras/hall_algebra.py +783 -0
  22. sage/algebras/hecke_algebras/all.py +4 -0
  23. sage/algebras/hecke_algebras/ariki_koike_algebra.py +1796 -0
  24. sage/algebras/hecke_algebras/ariki_koike_specht_modules.py +475 -0
  25. sage/algebras/hecke_algebras/cubic_hecke_algebra.py +3520 -0
  26. sage/algebras/hecke_algebras/cubic_hecke_base_ring.py +1473 -0
  27. sage/algebras/hecke_algebras/cubic_hecke_matrix_rep.py +1079 -0
  28. sage/algebras/iwahori_hecke_algebra.py +3095 -0
  29. sage/algebras/jordan_algebra.py +1773 -0
  30. sage/algebras/lie_conformal_algebras/abelian_lie_conformal_algebra.py +113 -0
  31. sage/algebras/lie_conformal_algebras/affine_lie_conformal_algebra.py +156 -0
  32. sage/algebras/lie_conformal_algebras/all.py +18 -0
  33. sage/algebras/lie_conformal_algebras/bosonic_ghosts_lie_conformal_algebra.py +134 -0
  34. sage/algebras/lie_conformal_algebras/examples.py +43 -0
  35. sage/algebras/lie_conformal_algebras/fermionic_ghosts_lie_conformal_algebra.py +131 -0
  36. sage/algebras/lie_conformal_algebras/finitely_freely_generated_lca.py +139 -0
  37. sage/algebras/lie_conformal_algebras/free_bosons_lie_conformal_algebra.py +174 -0
  38. sage/algebras/lie_conformal_algebras/free_fermions_lie_conformal_algebra.py +167 -0
  39. sage/algebras/lie_conformal_algebras/freely_generated_lie_conformal_algebra.py +107 -0
  40. sage/algebras/lie_conformal_algebras/graded_lie_conformal_algebra.py +135 -0
  41. sage/algebras/lie_conformal_algebras/lie_conformal_algebra.py +353 -0
  42. sage/algebras/lie_conformal_algebras/lie_conformal_algebra_element.py +236 -0
  43. sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_basis.py +78 -0
  44. sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_structure_coefs.py +328 -0
  45. sage/algebras/lie_conformal_algebras/n2_lie_conformal_algebra.py +117 -0
  46. sage/algebras/lie_conformal_algebras/neveu_schwarz_lie_conformal_algebra.py +86 -0
  47. sage/algebras/lie_conformal_algebras/virasoro_lie_conformal_algebra.py +82 -0
  48. sage/algebras/lie_conformal_algebras/weyl_lie_conformal_algebra.py +205 -0
  49. sage/algebras/nil_coxeter_algebra.py +191 -0
  50. sage/algebras/q_commuting_polynomials.py +673 -0
  51. sage/algebras/q_system.py +608 -0
  52. sage/algebras/quantum_clifford.py +959 -0
  53. sage/algebras/quantum_groups/ace_quantum_onsager.py +693 -0
  54. sage/algebras/quantum_groups/all.py +9 -0
  55. sage/algebras/quantum_groups/fock_space.py +2219 -0
  56. sage/algebras/quantum_groups/q_numbers.py +207 -0
  57. sage/algebras/quantum_groups/quantum_group_gap.py +2695 -0
  58. sage/algebras/quantum_groups/representations.py +591 -0
  59. sage/algebras/quantum_matrix_coordinate_algebra.py +1006 -0
  60. sage/algebras/quantum_oscillator.py +623 -0
  61. sage/algebras/quaternion_algebra.py +20 -0
  62. sage/algebras/quaternion_algebra_element.py +55 -0
  63. sage/algebras/rational_cherednik_algebra.py +525 -0
  64. sage/algebras/schur_algebra.py +670 -0
  65. sage/algebras/shuffle_algebra.py +1011 -0
  66. sage/algebras/splitting_algebra.py +779 -0
  67. sage/algebras/tensor_algebra.py +709 -0
  68. sage/algebras/yangian.py +1082 -0
  69. sage/algebras/yokonuma_hecke_algebra.py +1018 -0
  70. sage/all__sagemath_combinat.py +35 -0
  71. sage/combinat/SJT.py +255 -0
  72. sage/combinat/affine_permutation.py +2405 -0
  73. sage/combinat/algebraic_combinatorics.py +55 -0
  74. sage/combinat/all.py +53 -0
  75. sage/combinat/all__sagemath_combinat.py +195 -0
  76. sage/combinat/alternating_sign_matrix.py +2063 -0
  77. sage/combinat/baxter_permutations.py +346 -0
  78. sage/combinat/bijectionist.py +3220 -0
  79. sage/combinat/binary_recurrence_sequences.py +1180 -0
  80. sage/combinat/blob_algebra.py +685 -0
  81. sage/combinat/catalog_partitions.py +27 -0
  82. sage/combinat/chas/all.py +23 -0
  83. sage/combinat/chas/fsym.py +1180 -0
  84. sage/combinat/chas/wqsym.py +2601 -0
  85. sage/combinat/cluster_complex.py +326 -0
  86. sage/combinat/colored_permutations.py +2039 -0
  87. sage/combinat/colored_permutations_representations.py +964 -0
  88. sage/combinat/composition_signed.py +142 -0
  89. sage/combinat/composition_tableau.py +855 -0
  90. sage/combinat/constellation.py +1729 -0
  91. sage/combinat/core.py +751 -0
  92. sage/combinat/counting.py +12 -0
  93. sage/combinat/crystals/affine.py +742 -0
  94. sage/combinat/crystals/affine_factorization.py +518 -0
  95. sage/combinat/crystals/affinization.py +331 -0
  96. sage/combinat/crystals/alcove_path.py +2013 -0
  97. sage/combinat/crystals/all.py +22 -0
  98. sage/combinat/crystals/bkk_crystals.py +141 -0
  99. sage/combinat/crystals/catalog.py +115 -0
  100. sage/combinat/crystals/catalog_elementary_crystals.py +18 -0
  101. sage/combinat/crystals/catalog_infinity_crystals.py +33 -0
  102. sage/combinat/crystals/catalog_kirillov_reshetikhin.py +18 -0
  103. sage/combinat/crystals/crystals.py +257 -0
  104. sage/combinat/crystals/direct_sum.py +260 -0
  105. sage/combinat/crystals/elementary_crystals.py +1251 -0
  106. sage/combinat/crystals/fast_crystals.py +441 -0
  107. sage/combinat/crystals/fully_commutative_stable_grothendieck.py +1205 -0
  108. sage/combinat/crystals/generalized_young_walls.py +1076 -0
  109. sage/combinat/crystals/highest_weight_crystals.py +436 -0
  110. sage/combinat/crystals/induced_structure.py +695 -0
  111. sage/combinat/crystals/infinity_crystals.py +730 -0
  112. sage/combinat/crystals/kac_modules.py +863 -0
  113. sage/combinat/crystals/kirillov_reshetikhin.py +4196 -0
  114. sage/combinat/crystals/kyoto_path_model.py +497 -0
  115. sage/combinat/crystals/letters.cpython-314-x86_64-linux-musl.so +0 -0
  116. sage/combinat/crystals/letters.pxd +79 -0
  117. sage/combinat/crystals/letters.pyx +3056 -0
  118. sage/combinat/crystals/littelmann_path.py +1518 -0
  119. sage/combinat/crystals/monomial_crystals.py +1262 -0
  120. sage/combinat/crystals/multisegments.py +462 -0
  121. sage/combinat/crystals/mv_polytopes.py +467 -0
  122. sage/combinat/crystals/pbw_crystal.py +511 -0
  123. sage/combinat/crystals/pbw_datum.cpython-314-x86_64-linux-musl.so +0 -0
  124. sage/combinat/crystals/pbw_datum.pxd +4 -0
  125. sage/combinat/crystals/pbw_datum.pyx +487 -0
  126. sage/combinat/crystals/polyhedral_realization.py +372 -0
  127. sage/combinat/crystals/spins.cpython-314-x86_64-linux-musl.so +0 -0
  128. sage/combinat/crystals/spins.pxd +21 -0
  129. sage/combinat/crystals/spins.pyx +756 -0
  130. sage/combinat/crystals/star_crystal.py +290 -0
  131. sage/combinat/crystals/subcrystal.py +464 -0
  132. sage/combinat/crystals/tensor_product.py +1177 -0
  133. sage/combinat/crystals/tensor_product_element.cpython-314-x86_64-linux-musl.so +0 -0
  134. sage/combinat/crystals/tensor_product_element.pxd +35 -0
  135. sage/combinat/crystals/tensor_product_element.pyx +1870 -0
  136. sage/combinat/crystals/virtual_crystal.py +420 -0
  137. sage/combinat/cyclic_sieving_phenomenon.py +204 -0
  138. sage/combinat/debruijn_sequence.cpython-314-x86_64-linux-musl.so +0 -0
  139. sage/combinat/debruijn_sequence.pyx +355 -0
  140. sage/combinat/decorated_permutation.py +270 -0
  141. sage/combinat/degree_sequences.cpython-314-x86_64-linux-musl.so +0 -0
  142. sage/combinat/degree_sequences.pyx +588 -0
  143. sage/combinat/derangements.py +527 -0
  144. sage/combinat/descent_algebra.py +1008 -0
  145. sage/combinat/diagram.py +1551 -0
  146. sage/combinat/diagram_algebras.py +5886 -0
  147. sage/combinat/dyck_word.py +4349 -0
  148. sage/combinat/e_one_star.py +1623 -0
  149. sage/combinat/enumerated_sets.py +123 -0
  150. sage/combinat/expnums.cpython-314-x86_64-linux-musl.so +0 -0
  151. sage/combinat/expnums.pyx +148 -0
  152. sage/combinat/fast_vector_partitions.cpython-314-x86_64-linux-musl.so +0 -0
  153. sage/combinat/fast_vector_partitions.pyx +346 -0
  154. sage/combinat/fqsym.py +1977 -0
  155. sage/combinat/free_dendriform_algebra.py +954 -0
  156. sage/combinat/free_prelie_algebra.py +1141 -0
  157. sage/combinat/fully_commutative_elements.py +1077 -0
  158. sage/combinat/fully_packed_loop.py +1523 -0
  159. sage/combinat/gelfand_tsetlin_patterns.py +1409 -0
  160. sage/combinat/gray_codes.py +311 -0
  161. sage/combinat/grossman_larson_algebras.py +667 -0
  162. sage/combinat/growth.py +4352 -0
  163. sage/combinat/hall_polynomial.py +188 -0
  164. sage/combinat/hillman_grassl.py +866 -0
  165. sage/combinat/integer_matrices.py +329 -0
  166. sage/combinat/integer_vectors_mod_permgroup.py +1238 -0
  167. sage/combinat/k_tableau.py +4564 -0
  168. sage/combinat/kazhdan_lusztig.py +215 -0
  169. sage/combinat/key_polynomial.py +885 -0
  170. sage/combinat/knutson_tao_puzzles.py +2286 -0
  171. sage/combinat/lr_tableau.py +311 -0
  172. sage/combinat/matrices/all.py +24 -0
  173. sage/combinat/matrices/hadamard_matrix.py +3790 -0
  174. sage/combinat/matrices/latin.py +2912 -0
  175. sage/combinat/misc.py +401 -0
  176. sage/combinat/multiset_partition_into_sets_ordered.py +3541 -0
  177. sage/combinat/ncsf_qsym/all.py +21 -0
  178. sage/combinat/ncsf_qsym/combinatorics.py +317 -0
  179. sage/combinat/ncsf_qsym/generic_basis_code.py +1427 -0
  180. sage/combinat/ncsf_qsym/ncsf.py +5637 -0
  181. sage/combinat/ncsf_qsym/qsym.py +4053 -0
  182. sage/combinat/ncsf_qsym/tutorial.py +447 -0
  183. sage/combinat/ncsym/all.py +21 -0
  184. sage/combinat/ncsym/bases.py +855 -0
  185. sage/combinat/ncsym/dual.py +593 -0
  186. sage/combinat/ncsym/ncsym.py +2076 -0
  187. sage/combinat/necklace.py +551 -0
  188. sage/combinat/non_decreasing_parking_function.py +634 -0
  189. sage/combinat/nu_dyck_word.py +1474 -0
  190. sage/combinat/output.py +861 -0
  191. sage/combinat/parallelogram_polyomino.py +4326 -0
  192. sage/combinat/parking_functions.py +1602 -0
  193. sage/combinat/partition_algebra.py +1998 -0
  194. sage/combinat/partition_kleshchev.py +1982 -0
  195. sage/combinat/partition_shifting_algebras.py +584 -0
  196. sage/combinat/partition_tuple.py +3114 -0
  197. sage/combinat/path_tableaux/all.py +13 -0
  198. sage/combinat/path_tableaux/catalog.py +29 -0
  199. sage/combinat/path_tableaux/dyck_path.py +380 -0
  200. sage/combinat/path_tableaux/frieze.py +476 -0
  201. sage/combinat/path_tableaux/path_tableau.py +728 -0
  202. sage/combinat/path_tableaux/semistandard.py +510 -0
  203. sage/combinat/perfect_matching.py +779 -0
  204. sage/combinat/plane_partition.py +3300 -0
  205. sage/combinat/q_bernoulli.cpython-314-x86_64-linux-musl.so +0 -0
  206. sage/combinat/q_bernoulli.pyx +128 -0
  207. sage/combinat/quickref.py +81 -0
  208. sage/combinat/recognizable_series.py +2051 -0
  209. sage/combinat/regular_sequence.py +4316 -0
  210. sage/combinat/regular_sequence_bounded.py +543 -0
  211. sage/combinat/restricted_growth.py +81 -0
  212. sage/combinat/ribbon.py +20 -0
  213. sage/combinat/ribbon_shaped_tableau.py +489 -0
  214. sage/combinat/ribbon_tableau.py +1180 -0
  215. sage/combinat/rigged_configurations/all.py +46 -0
  216. sage/combinat/rigged_configurations/bij_abstract_class.py +548 -0
  217. sage/combinat/rigged_configurations/bij_infinity.py +370 -0
  218. sage/combinat/rigged_configurations/bij_type_A.py +163 -0
  219. sage/combinat/rigged_configurations/bij_type_A2_dual.py +338 -0
  220. sage/combinat/rigged_configurations/bij_type_A2_even.py +218 -0
  221. sage/combinat/rigged_configurations/bij_type_A2_odd.py +199 -0
  222. sage/combinat/rigged_configurations/bij_type_B.py +900 -0
  223. sage/combinat/rigged_configurations/bij_type_C.py +267 -0
  224. sage/combinat/rigged_configurations/bij_type_D.py +771 -0
  225. sage/combinat/rigged_configurations/bij_type_D_tri.py +392 -0
  226. sage/combinat/rigged_configurations/bij_type_D_twisted.py +576 -0
  227. sage/combinat/rigged_configurations/bij_type_E67.py +402 -0
  228. sage/combinat/rigged_configurations/bijection.py +143 -0
  229. sage/combinat/rigged_configurations/kleber_tree.py +1475 -0
  230. sage/combinat/rigged_configurations/kr_tableaux.py +1898 -0
  231. sage/combinat/rigged_configurations/rc_crystal.py +461 -0
  232. sage/combinat/rigged_configurations/rc_infinity.py +540 -0
  233. sage/combinat/rigged_configurations/rigged_configuration_element.py +2403 -0
  234. sage/combinat/rigged_configurations/rigged_configurations.py +1918 -0
  235. sage/combinat/rigged_configurations/rigged_partition.cpython-314-x86_64-linux-musl.so +0 -0
  236. sage/combinat/rigged_configurations/rigged_partition.pxd +15 -0
  237. sage/combinat/rigged_configurations/rigged_partition.pyx +680 -0
  238. sage/combinat/rigged_configurations/tensor_product_kr_tableaux.py +499 -0
  239. sage/combinat/rigged_configurations/tensor_product_kr_tableaux_element.py +428 -0
  240. sage/combinat/rsk.py +3438 -0
  241. sage/combinat/schubert_polynomial.py +508 -0
  242. sage/combinat/set_partition.py +3318 -0
  243. sage/combinat/set_partition_iterator.cpython-314-x86_64-linux-musl.so +0 -0
  244. sage/combinat/set_partition_iterator.pyx +136 -0
  245. sage/combinat/set_partition_ordered.py +1590 -0
  246. sage/combinat/sf/abreu_nigro.py +346 -0
  247. sage/combinat/sf/all.py +52 -0
  248. sage/combinat/sf/character.py +576 -0
  249. sage/combinat/sf/classical.py +319 -0
  250. sage/combinat/sf/dual.py +996 -0
  251. sage/combinat/sf/elementary.py +549 -0
  252. sage/combinat/sf/hall_littlewood.py +1028 -0
  253. sage/combinat/sf/hecke.py +336 -0
  254. sage/combinat/sf/homogeneous.py +464 -0
  255. sage/combinat/sf/jack.py +1428 -0
  256. sage/combinat/sf/k_dual.py +1458 -0
  257. sage/combinat/sf/kfpoly.py +447 -0
  258. sage/combinat/sf/llt.py +789 -0
  259. sage/combinat/sf/macdonald.py +2019 -0
  260. sage/combinat/sf/monomial.py +525 -0
  261. sage/combinat/sf/multiplicative.py +113 -0
  262. sage/combinat/sf/new_kschur.py +1786 -0
  263. sage/combinat/sf/ns_macdonald.py +964 -0
  264. sage/combinat/sf/orthogonal.py +246 -0
  265. sage/combinat/sf/orthotriang.py +355 -0
  266. sage/combinat/sf/powersum.py +963 -0
  267. sage/combinat/sf/schur.py +880 -0
  268. sage/combinat/sf/sf.py +1653 -0
  269. sage/combinat/sf/sfa.py +7053 -0
  270. sage/combinat/sf/symplectic.py +253 -0
  271. sage/combinat/sf/witt.py +721 -0
  272. sage/combinat/shifted_primed_tableau.py +2735 -0
  273. sage/combinat/shuffle.py +830 -0
  274. sage/combinat/sidon_sets.py +146 -0
  275. sage/combinat/similarity_class_type.py +1721 -0
  276. sage/combinat/sine_gordon.py +618 -0
  277. sage/combinat/six_vertex_model.py +784 -0
  278. sage/combinat/skew_partition.py +2053 -0
  279. sage/combinat/skew_tableau.py +2989 -0
  280. sage/combinat/sloane_functions.py +8935 -0
  281. sage/combinat/specht_module.py +1403 -0
  282. sage/combinat/species/all.py +48 -0
  283. sage/combinat/species/characteristic_species.py +321 -0
  284. sage/combinat/species/composition_species.py +273 -0
  285. sage/combinat/species/cycle_species.py +284 -0
  286. sage/combinat/species/empty_species.py +155 -0
  287. sage/combinat/species/functorial_composition_species.py +148 -0
  288. sage/combinat/species/generating_series.py +673 -0
  289. sage/combinat/species/library.py +148 -0
  290. sage/combinat/species/linear_order_species.py +169 -0
  291. sage/combinat/species/misc.py +83 -0
  292. sage/combinat/species/partition_species.py +290 -0
  293. sage/combinat/species/permutation_species.py +268 -0
  294. sage/combinat/species/product_species.py +423 -0
  295. sage/combinat/species/recursive_species.py +476 -0
  296. sage/combinat/species/set_species.py +192 -0
  297. sage/combinat/species/species.py +820 -0
  298. sage/combinat/species/structure.py +539 -0
  299. sage/combinat/species/subset_species.py +243 -0
  300. sage/combinat/species/sum_species.py +225 -0
  301. sage/combinat/subword.py +564 -0
  302. sage/combinat/subword_complex.py +2122 -0
  303. sage/combinat/subword_complex_c.cpython-314-x86_64-linux-musl.so +0 -0
  304. sage/combinat/subword_complex_c.pyx +119 -0
  305. sage/combinat/super_tableau.py +821 -0
  306. sage/combinat/superpartition.py +1154 -0
  307. sage/combinat/symmetric_group_algebra.py +3774 -0
  308. sage/combinat/symmetric_group_representations.py +1830 -0
  309. sage/combinat/t_sequences.py +877 -0
  310. sage/combinat/tableau.py +9506 -0
  311. sage/combinat/tableau_residues.py +860 -0
  312. sage/combinat/tableau_tuple.py +5353 -0
  313. sage/combinat/tiling.py +2432 -0
  314. sage/combinat/triangles_FHM.py +777 -0
  315. sage/combinat/tutorial.py +1857 -0
  316. sage/combinat/vector_partition.py +337 -0
  317. sage/combinat/words/abstract_word.py +1722 -0
  318. sage/combinat/words/all.py +59 -0
  319. sage/combinat/words/alphabet.py +268 -0
  320. sage/combinat/words/finite_word.py +7201 -0
  321. sage/combinat/words/infinite_word.py +113 -0
  322. sage/combinat/words/lyndon_word.py +652 -0
  323. sage/combinat/words/morphic.py +351 -0
  324. sage/combinat/words/morphism.py +3878 -0
  325. sage/combinat/words/paths.py +2932 -0
  326. sage/combinat/words/shuffle_product.py +278 -0
  327. sage/combinat/words/suffix_trees.py +1873 -0
  328. sage/combinat/words/word.py +769 -0
  329. sage/combinat/words/word_char.cpython-314-x86_64-linux-musl.so +0 -0
  330. sage/combinat/words/word_char.pyx +847 -0
  331. sage/combinat/words/word_datatypes.cpython-314-x86_64-linux-musl.so +0 -0
  332. sage/combinat/words/word_datatypes.pxd +4 -0
  333. sage/combinat/words/word_datatypes.pyx +1067 -0
  334. sage/combinat/words/word_generators.py +2026 -0
  335. sage/combinat/words/word_infinite_datatypes.py +1218 -0
  336. sage/combinat/words/word_options.py +99 -0
  337. sage/combinat/words/words.py +2396 -0
  338. sage/data_structures/all__sagemath_combinat.py +1 -0
  339. sage/databases/all__sagemath_combinat.py +13 -0
  340. sage/databases/findstat.py +4897 -0
  341. sage/databases/oeis.py +2058 -0
  342. sage/databases/sloane.py +393 -0
  343. sage/dynamics/all__sagemath_combinat.py +14 -0
  344. sage/dynamics/cellular_automata/all.py +7 -0
  345. sage/dynamics/cellular_automata/catalog.py +34 -0
  346. sage/dynamics/cellular_automata/elementary.py +612 -0
  347. sage/dynamics/cellular_automata/glca.py +477 -0
  348. sage/dynamics/cellular_automata/solitons.py +1463 -0
  349. sage/dynamics/finite_dynamical_system.py +1249 -0
  350. sage/dynamics/finite_dynamical_system_catalog.py +382 -0
  351. sage/games/all.py +7 -0
  352. sage/games/hexad.py +704 -0
  353. sage/games/quantumino.py +591 -0
  354. sage/games/sudoku.py +889 -0
  355. sage/games/sudoku_backtrack.cpython-314-x86_64-linux-musl.so +0 -0
  356. sage/games/sudoku_backtrack.pyx +189 -0
  357. sage/groups/all__sagemath_combinat.py +1 -0
  358. sage/groups/indexed_free_group.py +489 -0
  359. sage/libs/all__sagemath_combinat.py +6 -0
  360. sage/libs/lrcalc/__init__.py +1 -0
  361. sage/libs/lrcalc/lrcalc.py +525 -0
  362. sage/libs/symmetrica/__init__.py +7 -0
  363. sage/libs/symmetrica/all.py +101 -0
  364. sage/libs/symmetrica/kostka.pxi +168 -0
  365. sage/libs/symmetrica/part.pxi +193 -0
  366. sage/libs/symmetrica/plet.pxi +42 -0
  367. sage/libs/symmetrica/sab.pxi +196 -0
  368. sage/libs/symmetrica/sb.pxi +332 -0
  369. sage/libs/symmetrica/sc.pxi +192 -0
  370. sage/libs/symmetrica/schur.pxi +956 -0
  371. sage/libs/symmetrica/symmetrica.cpython-314-x86_64-linux-musl.so +0 -0
  372. sage/libs/symmetrica/symmetrica.pxi +1172 -0
  373. sage/libs/symmetrica/symmetrica.pyx +39 -0
  374. sage/monoids/all.py +13 -0
  375. sage/monoids/automatic_semigroup.py +1054 -0
  376. sage/monoids/free_abelian_monoid.py +315 -0
  377. sage/monoids/free_abelian_monoid_element.cpython-314-x86_64-linux-musl.so +0 -0
  378. sage/monoids/free_abelian_monoid_element.pxd +16 -0
  379. sage/monoids/free_abelian_monoid_element.pyx +397 -0
  380. sage/monoids/free_monoid.py +335 -0
  381. sage/monoids/free_monoid_element.py +431 -0
  382. sage/monoids/hecke_monoid.py +65 -0
  383. sage/monoids/string_monoid.py +817 -0
  384. sage/monoids/string_monoid_element.py +547 -0
  385. sage/monoids/string_ops.py +143 -0
  386. sage/monoids/trace_monoid.py +972 -0
  387. sage/rings/all__sagemath_combinat.py +2 -0
  388. sage/sat/all.py +4 -0
  389. sage/sat/boolean_polynomials.py +405 -0
  390. sage/sat/converters/__init__.py +6 -0
  391. sage/sat/converters/anf2cnf.py +14 -0
  392. sage/sat/converters/polybori.py +611 -0
  393. sage/sat/solvers/__init__.py +5 -0
  394. sage/sat/solvers/cryptominisat.py +287 -0
  395. sage/sat/solvers/dimacs.py +783 -0
  396. sage/sat/solvers/picosat.py +228 -0
  397. sage/sat/solvers/sat_lp.py +156 -0
  398. sage/sat/solvers/satsolver.cpython-314-x86_64-linux-musl.so +0 -0
  399. sage/sat/solvers/satsolver.pxd +3 -0
  400. sage/sat/solvers/satsolver.pyx +405 -0
@@ -0,0 +1,670 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.combinat sage.groups sage.modules
3
+ r"""
4
+ Schur algebras for `GL_n`
5
+
6
+ This file implements:
7
+
8
+ - Schur algebras for `GL_n` over an arbitrary field.
9
+
10
+ - The canonical action of the Schur algebra on a tensor power of the standard
11
+ representation.
12
+
13
+ - Using the above to calculate the characters of irreducible `GL_n` modules.
14
+
15
+ AUTHORS:
16
+
17
+ - Eric Webster (2010-07-01): implement Schur algebra
18
+
19
+ - Hugh Thomas (2011-05-08): implement action of Schur algebra and characters
20
+ of irreducible modules
21
+ """
22
+
23
+ # ****************************************************************************
24
+ # Copyright (C) 2010 Eric Webster
25
+ # Copyright (C) 2011 Hugh Thomas <hugh.ross.thomas@gmail.com>
26
+ #
27
+ # This program is free software: you can redistribute it and/or modify
28
+ # it under the terms of the GNU General Public License as published by
29
+ # the Free Software Foundation, either version 2 of the License, or
30
+ # (at your option) any later version.
31
+ # https://www.gnu.org/licenses/
32
+ # ****************************************************************************
33
+
34
+ import itertools
35
+
36
+ from sage.categories.algebras_with_basis import AlgebrasWithBasis
37
+ from sage.categories.modules_with_basis import ModulesWithBasis
38
+ from sage.categories.rings import Rings
39
+ from sage.combinat.free_module import CombinatorialFreeModule, CombinatorialFreeModule_Tensor
40
+ from sage.combinat.integer_lists import IntegerListsLex
41
+ from sage.combinat.partition import Partitions, Partition
42
+ from sage.combinat.permutation import Permutations
43
+ from sage.combinat.sf.sf import SymmetricFunctions
44
+ from sage.combinat.symmetric_group_algebra import SymmetricGroupAlgebra
45
+ from sage.combinat.tableau import SemistandardTableaux
46
+ from sage.arith.misc import binomial
47
+ from sage.matrix.constructor import Matrix
48
+ from sage.misc.cachefunc import cached_method
49
+ from sage.misc.flatten import flatten
50
+ from sage.rings.integer_ring import ZZ
51
+ from sage.rings.rational_field import QQ
52
+
53
+
54
+ def _schur_I_nr_representatives(n, r):
55
+ r"""
56
+ Internal function called by :func:`schur_representation_indices`,
57
+ which generates all weakly increasing tuples of length ``r`` in the
58
+ alphabet ``1, 2, ..., n``.
59
+
60
+ EXAMPLES::
61
+
62
+ sage: from sage.algebras.schur_algebra import _schur_I_nr_representatives
63
+ sage: _schur_I_nr_representatives(2, 4)
64
+ ((1, 1, 1, 1), (1, 1, 1, 2), (1, 1, 2, 2), (1, 2, 2, 2), (2, 2, 2, 2))
65
+ """
66
+ if r == 0:
67
+ return ()
68
+
69
+ index = []
70
+ element = [1]
71
+ while element:
72
+ if element[-1] > n:
73
+ element.pop()
74
+ if element:
75
+ element[-1] += 1
76
+ continue
77
+
78
+ if len(element) == r:
79
+ index.append(tuple(element))
80
+ element[-1] += 1
81
+ continue
82
+
83
+ element.append(element[-1])
84
+
85
+ return tuple(index)
86
+
87
+
88
+ def schur_representative_indices(n, r):
89
+ r"""
90
+ Return a set which functions as a basis of `S_K(n,r)`.
91
+
92
+ More specifically, the basis for `S_K(n,r)` consists of
93
+ equivalence classes of pairs of tuples of length ``r`` on the alphabet
94
+ `\{1, \dots, n\}`, where the equivalence relation is simultaneous
95
+ permutation of the two tuples. We can therefore fix a
96
+ representative for each equivalence class in which the entries of
97
+ the first tuple weakly increase, and the entries of the second tuple
98
+ whose corresponding values in the first tuple are equal, also
99
+ weakly increase.
100
+
101
+ EXAMPLES::
102
+
103
+ sage: from sage.algebras.schur_algebra import schur_representative_indices
104
+ sage: schur_representative_indices(2, 2)
105
+ [((1, 1), (1, 1)), ((1, 1), (1, 2)),
106
+ ((1, 1), (2, 2)), ((1, 2), (1, 1)),
107
+ ((1, 2), (1, 2)), ((1, 2), (2, 1)),
108
+ ((1, 2), (2, 2)), ((2, 2), (1, 1)),
109
+ ((2, 2), (1, 2)), ((2, 2), (2, 2))]
110
+ """
111
+ basis = []
112
+ I_nr_repr = _schur_I_nr_representatives(n, r)
113
+ for e in I_nr_repr:
114
+ j = 0
115
+ k = 0
116
+ I1 = []
117
+ l = len(e)
118
+ while k < l:
119
+ if e[k] != e[j]:
120
+ I2 = []
121
+ if j == 0:
122
+ I1 = _schur_I_nr_representatives(n, k)
123
+ else:
124
+ I2 = _schur_I_nr_representatives(n, k - j)
125
+ I1 = [I1[m1] + I2[m2] for m1 in range(len(I1))
126
+ for m2 in range(len(I2))]
127
+ j = k
128
+ elif k == l - 1:
129
+ I2 = []
130
+ k += 1
131
+ if j == 0:
132
+ I1 = _schur_I_nr_representatives(n, k)
133
+ else:
134
+ I2 = _schur_I_nr_representatives(n, k - j)
135
+ I1 = [I1[m1] + I2[m2] for m1 in range(len(I1))
136
+ for m2 in range(len(I2))]
137
+ else:
138
+ k += 1
139
+
140
+ te = tuple(e)
141
+ basis.extend((te, tuple(v)) for v in I1)
142
+
143
+ return basis
144
+
145
+
146
+ def schur_representative_from_index(i0, i1):
147
+ r"""
148
+ Simultaneously reorder a pair of tuples to obtain the equivalent
149
+ element of the distinguished basis of the Schur algebra.
150
+
151
+ .. SEEALSO::
152
+
153
+ :func:`schur_representative_indices`
154
+
155
+ INPUT:
156
+
157
+ - A pair of tuples of length `r` with elements in `\{1,\dots,n\}`
158
+
159
+ OUTPUT: the corresponding pair of tuples ordered correctly
160
+
161
+ EXAMPLES::
162
+
163
+ sage: from sage.algebras.schur_algebra import schur_representative_from_index
164
+ sage: schur_representative_from_index([2,1,2,2], [1,3,0,0])
165
+ ((1, 2, 2, 2), (3, 0, 0, 1))
166
+ """
167
+ w = []
168
+ for i, val in enumerate(i0):
169
+ w.append((val, i1[i]))
170
+ w.sort()
171
+ i0 = []
172
+ i1 = []
173
+ for pair in w:
174
+ i0.append(pair[0])
175
+ i1.append(pair[1])
176
+ return (tuple(i0), tuple(i1))
177
+
178
+
179
+ class SchurAlgebra(CombinatorialFreeModule):
180
+ r"""
181
+ A Schur algebra.
182
+
183
+ Let `R` be a commutative ring, `n` be a positive integer, and `r`
184
+ be a nonnegative integer. Define `A_R(n,r)` to be the set of
185
+ homogeneous polynomials of degree `r` in `n^2` variables `x_{ij}`.
186
+ Therefore we can write `R[x_{ij}] = \bigoplus_{r \geq 0} A_R(n,r)`,
187
+ and `R[x_{ij}]` is known to be a bialgebra with coproduct given by
188
+ `\Delta(x_{ij}) = \sum_l x_{il} \otimes x_{lj}` and counit
189
+ `\varepsilon(x_{ij}) = \delta_{ij}`. Therefore `A_R(n,r)` is a
190
+ subcoalgebra of `R[x_{ij}]`. The *Schur algebra* `S_R(n,r)` is the
191
+ linear dual to `A_R(n,r)`, that is `S_R(n,r) := \hom(A_R(n,r), R)`,
192
+ and `S_R(n,r)` obtains its algebra structure naturally by dualizing
193
+ the comultiplication of `A_R(n,r)`.
194
+
195
+ Let `V = R^n`. One of the most important properties of the Schur
196
+ algebra `S_R(n, r)` is that it is isomorphic to the endomorphisms
197
+ of `V^{\otimes r}` which commute with the natural action of `S_r`.
198
+
199
+ EXAMPLES::
200
+
201
+ sage: S = SchurAlgebra(ZZ, 2, 2); S
202
+ Schur algebra (2, 2) over Integer Ring
203
+
204
+ REFERENCES:
205
+
206
+ - [Gr2007]_
207
+ - :wikipedia:`Schur_algebra`
208
+ """
209
+ def __init__(self, R, n, r):
210
+ """
211
+ Initialize ``self``.
212
+
213
+ TESTS::
214
+
215
+ sage: S = SchurAlgebra(ZZ, 2, 2)
216
+ sage: TestSuite(S).run()
217
+
218
+ ::
219
+
220
+ sage: SchurAlgebra(ZZ, -2, 2)
221
+ Traceback (most recent call last):
222
+ ...
223
+ ValueError: n (=-2) must be a positive integer
224
+ sage: SchurAlgebra(ZZ, 2, -2)
225
+ Traceback (most recent call last):
226
+ ...
227
+ ValueError: r (=-2) must be a nonnegative integer
228
+ sage: SchurAlgebra('niet', 2, 2)
229
+ Traceback (most recent call last):
230
+ ...
231
+ ValueError: R (=niet) must be a commutative ring
232
+ """
233
+ if n not in ZZ or n <= 0:
234
+ raise ValueError("n (={}) must be a positive integer".format(n))
235
+ if r not in ZZ or r < 0:
236
+ raise ValueError("r (={}) must be a nonnegative integer".format(r))
237
+ if R not in Rings.Commutative():
238
+ raise ValueError("R (={}) must be a commutative ring".format(R))
239
+
240
+ self._n = n
241
+ self._r = r
242
+
243
+ CombinatorialFreeModule.__init__(self, R,
244
+ schur_representative_indices(n, r),
245
+ prefix='S', bracket=False,
246
+ category=AlgebrasWithBasis(R).FiniteDimensional())
247
+
248
+ def _repr_(self):
249
+ """
250
+ Return the string representation of ``self``.
251
+
252
+ EXAMPLES::
253
+
254
+ sage: SchurAlgebra(ZZ, 4, 4)
255
+ Schur algebra (4, 4) over Integer Ring
256
+ """
257
+ msg = "Schur algebra ({}, {}) over {}"
258
+ return msg.format(self._n, self._r, self.base_ring())
259
+
260
+ @cached_method
261
+ def one(self):
262
+ """
263
+ Return the element `1` of ``self``.
264
+
265
+ EXAMPLES::
266
+
267
+ sage: S = SchurAlgebra(ZZ, 2, 2)
268
+ sage: e = S.one(); e
269
+ S((1, 1), (1, 1)) + S((1, 2), (1, 2)) + S((2, 2), (2, 2))
270
+
271
+ sage: x = S.an_element()
272
+ sage: x * e == x
273
+ True
274
+ sage: all(e * x == x for x in S.basis())
275
+ True
276
+
277
+ sage: S = SchurAlgebra(ZZ, 4, 4)
278
+ sage: e = S.one()
279
+ sage: x = S.an_element()
280
+ sage: x * e == x
281
+ True
282
+ """
283
+ tt = IntegerListsLex(length=self._r, min_part=1, max_part=self._n,
284
+ min_slope=0)
285
+ words = [tuple(u) for u in tt]
286
+ return self.sum(self._monomial((w, w)) for w in words)
287
+
288
+ def product_on_basis(self, e_ij, e_kl):
289
+ r"""
290
+ Return the product of basis elements.
291
+
292
+ EXAMPLES::
293
+
294
+ sage: S = SchurAlgebra(QQ, 2, 3)
295
+ sage: B = S.basis()
296
+
297
+ If we multiply two basis elements `x` and `y`, such that
298
+ `x[1]` and `y[0]` are not permutations of each other, the
299
+ result is zero::
300
+
301
+ sage: S.product_on_basis(((1, 1, 1), (1, 1, 2)), ((1, 2, 2), (1, 1, 2)))
302
+ 0
303
+
304
+ If we multiply a basis element `x` by a basis element which
305
+ consists of the same tuple repeated twice (on either side),
306
+ the result is either zero (if the previous case applies) or `x`::
307
+
308
+ sage: ww = B[((1, 2, 2), (1, 2, 2))]
309
+ sage: x = B[((1, 2, 2), (1, 1, 2))]
310
+ sage: ww * x
311
+ S((1, 2, 2), (1, 1, 2))
312
+
313
+ An arbitrary product, on the other hand, may have multiplicities::
314
+
315
+ sage: x = B[((1, 1, 1), (1, 1, 2))]
316
+ sage: y = B[((1, 1, 2), (1, 2, 2))]
317
+ sage: x * y
318
+ 2*S((1, 1, 1), (1, 2, 2))
319
+ """
320
+ j = e_ij[1]
321
+
322
+ i = e_ij[0]
323
+ l = e_kl[1]
324
+
325
+ l = sorted(l)
326
+
327
+ # Find basis elements (p,q) such that p ~ i and q ~ l
328
+ e_pq = [v for v in self.basis().keys()
329
+ if v[0] == i and sorted(v[1]) == l]
330
+
331
+ b = self.basis()
332
+ product = self.zero()
333
+
334
+ # Find s in I(n,r) such that (p,s) ~ (i,j) and (s,q) ~ (k,l)
335
+ for e in e_pq:
336
+ Z_ijklpq = self.base_ring().zero()
337
+ for s in Permutations(list(j)):
338
+ if (schur_representative_from_index(e[0], s) == e_ij
339
+ and schur_representative_from_index(s, e[1]) == e_kl):
340
+ Z_ijklpq += self.base_ring().one()
341
+ product += Z_ijklpq * b[e]
342
+
343
+ return product
344
+
345
+ def dimension(self):
346
+ r"""
347
+ Return the dimension of ``self``.
348
+
349
+ The dimension of the Schur algebra `S_R(n, r)` is
350
+
351
+ .. MATH::
352
+
353
+ \dim S_R(n,r) = \binom{n^2+r-1}{r}.
354
+
355
+ EXAMPLES::
356
+
357
+ sage: S = SchurAlgebra(QQ, 4, 2)
358
+ sage: S.dimension()
359
+ 136
360
+ sage: S = SchurAlgebra(QQ, 2, 4)
361
+ sage: S.dimension()
362
+ 35
363
+ """
364
+ return binomial(self._n ** 2 + self._r - 1, self._r)
365
+
366
+
367
+ class SchurTensorModule(CombinatorialFreeModule_Tensor):
368
+ r"""
369
+ The space `V^{\otimes r}` where `V = R^n` equipped with a left action
370
+ of the Schur algebra `S_R(n,r)` and a right action of the symmetric
371
+ group `S_r`.
372
+
373
+ Let `R` be a commutative ring and `V = R^n`. We consider the module
374
+ `V^{\otimes r}` equipped with a natural right action of the symmetric
375
+ group `S_r` given by
376
+
377
+ .. MATH::
378
+
379
+ (v_1 \otimes v_2 \otimes \cdots \otimes v_n) \sigma
380
+ = v_{\sigma(1)} \otimes v_{\sigma(2)} \otimes \cdots
381
+ \otimes v_{\sigma(n)}.
382
+
383
+ The Schur algebra `S_R(n,r)` is naturally isomorphic to the
384
+ endomorphisms of `V^{\otimes r}` which commutes with the `S_r` action.
385
+ We get the natural left action of `S_R(n,r)` by this isomorphism.
386
+
387
+ EXAMPLES::
388
+
389
+ sage: T = SchurTensorModule(QQ, 2, 3); T
390
+ The 3-fold tensor product of a free module of dimension 2
391
+ over Rational Field
392
+ sage: A = SchurAlgebra(QQ, 2, 3)
393
+ sage: P = Permutations(3)
394
+ sage: t = T.an_element(); t
395
+ 2*B[1] # B[1] # B[1] + 2*B[1] # B[1] # B[2] + 3*B[1] # B[2] # B[1]
396
+ sage: a = A.an_element(); a
397
+ 2*S((1, 1, 1), (1, 1, 1)) + 2*S((1, 1, 1), (1, 1, 2))
398
+ + 3*S((1, 1, 1), (1, 2, 2))
399
+ sage: p = P.an_element(); p
400
+ [3, 1, 2]
401
+ sage: y = a * t; y
402
+ 14*B[1] # B[1] # B[1]
403
+ sage: y * p
404
+ 14*B[1] # B[1] # B[1]
405
+ sage: z = t * p; z
406
+ 2*B[1] # B[1] # B[1] + 3*B[1] # B[1] # B[2] + 2*B[2] # B[1] # B[1]
407
+ sage: a * z
408
+ 14*B[1] # B[1] # B[1]
409
+
410
+ We check the commuting action property::
411
+
412
+ sage: all( (bA * bT) * p == bA * (bT * p)
413
+ ....: for bT in T.basis() for bA in A.basis() for p in P)
414
+ True
415
+ """
416
+ def __init__(self, R, n, r):
417
+ """
418
+ Initialize ``self``.
419
+
420
+ TESTS::
421
+
422
+ sage: T = SchurTensorModule(QQ, 2, 3)
423
+ sage: TestSuite(T).run()
424
+ """
425
+ C = CombinatorialFreeModule(R, list(range(1, n + 1)))
426
+ self._n = n
427
+ self._r = r
428
+ self._sga = SymmetricGroupAlgebra(R, r)
429
+ self._schur = SchurAlgebra(R, n, r)
430
+ cat = ModulesWithBasis(R).TensorProducts().FiniteDimensional()
431
+ CombinatorialFreeModule_Tensor.__init__(self, tuple([C] * r), category=cat)
432
+ g = self._schur.module_morphism(self._monomial_product, codomain=self)
433
+ self._schur_action = self.module_morphism(g, codomain=self, position=1)
434
+
435
+ def _repr_(self):
436
+ """
437
+ Return the string representation of ``self``.
438
+
439
+ EXAMPLES::
440
+
441
+ sage: SchurTensorModule(QQ, 2, 3)
442
+ The 3-fold tensor product of a free module of dimension 2
443
+ over Rational Field
444
+ """
445
+ msg = "The {}-fold tensor product of a free module of dimension {}"
446
+ msg += " over {}"
447
+ return msg.format(self._r, self._n, self.base_ring())
448
+
449
+ def construction(self):
450
+ """
451
+ Return ``None``.
452
+
453
+ There is no functorial construction for ``self``.
454
+
455
+ EXAMPLES::
456
+
457
+ sage: T = SchurTensorModule(QQ, 2, 3)
458
+ sage: T.construction()
459
+ """
460
+ return None
461
+
462
+ def _monomial_product(self, xi, v):
463
+ """
464
+ Result of acting by the basis element ``xi`` of the corresponding
465
+ Schur algebra on the basis element ``v`` of ``self``.
466
+
467
+ EXAMPLES::
468
+
469
+ sage: T = SchurTensorModule(QQ, 2, 3)
470
+ sage: xi = T._schur.basis().keys()[4]; xi
471
+ ((1, 1, 2), (1, 1, 1))
472
+ sage: T._monomial_product(xi, (1, 1, 1))
473
+ B[1] # B[1] # B[2] + B[1] # B[2] # B[1] + B[2] # B[1] # B[1]
474
+ """
475
+ L = range(1, self._n + 1)
476
+ ret = [tuple(i) for i in itertools.product(L, repeat=self._r)
477
+ if schur_representative_from_index(i, v) == xi]
478
+ return self.sum_of_monomials(ret)
479
+
480
+ class Element(CombinatorialFreeModule_Tensor.Element):
481
+ def _acted_upon_(self, elt, self_on_left=False):
482
+ """
483
+ Return the action of ``elt`` on ``self``.
484
+
485
+ We add the *left* action of the Schur algebra, and the *right*
486
+ actions of the symmetric group algebra and the symmetric group.
487
+
488
+ EXAMPLES::
489
+
490
+ sage: T = SchurTensorModule(QQ, 2, 4)
491
+ sage: x = T.an_element()
492
+ sage: A = SchurAlgebra(QQ, 2, 4)
493
+ sage: y = A.an_element()
494
+ sage: y * x
495
+ 14*B[1] # B[1] # B[1] # B[1]
496
+ sage: x * y
497
+ Traceback (most recent call last):
498
+ ...
499
+ TypeError: unsupported operand parent(s) for *: ...
500
+
501
+ ::
502
+
503
+ sage: SGA = SymmetricGroupAlgebra(QQ, 4)
504
+ sage: y = SGA.an_element()
505
+ sage: x * y
506
+ 14*B[1] # B[1] # B[1] # B[1] + 17*B[1] # B[1] # B[1] # B[2]
507
+ + 7*B[1] # B[1] # B[2] # B[1] + 9*B[1] # B[2] # B[1] # B[1]
508
+ + 2*B[2] # B[1] # B[1] # B[1]
509
+ sage: y * x
510
+ Traceback (most recent call last):
511
+ ...
512
+ TypeError: unsupported operand parent(s) for *: ...
513
+
514
+ ::
515
+
516
+ sage: S = Permutations(4)
517
+ sage: y = S.an_element()
518
+ sage: x * y
519
+ 2*B[1] # B[1] # B[1] # B[1] + 3*B[1] # B[1] # B[1] # B[2]
520
+ + 2*B[2] # B[1] # B[1] # B[1]
521
+ """
522
+ P = self.parent()
523
+ if self_on_left:
524
+ if elt in P._sga:
525
+ return P.sum_of_terms((tuple([m[i - 1] for i in me]),
526
+ c * ce)
527
+ for m, c in self for me, ce in elt)
528
+
529
+ if elt in P._sga._indices:
530
+ return P.sum_of_terms((tuple([m[i - 1] for i in elt]), c)
531
+ for m, c in self)
532
+
533
+ elif elt in P._schur: # self_on_left is False
534
+ return P._schur_action(elt, self)
535
+ return super()._acted_upon_(elt, self_on_left)
536
+
537
+
538
+ def GL_irreducible_character(n, mu, KK):
539
+ r"""
540
+ Return the character of the irreducible module indexed by ``mu``
541
+ of `GL(n)` over the field ``KK``.
542
+
543
+ INPUT:
544
+
545
+ - ``n`` -- positive integer
546
+ - ``mu`` -- a partition of at most `n` parts
547
+ - ``KK`` -- a field
548
+
549
+ OUTPUT: a symmetric function which should be interpreted in `n`
550
+ variables to be meaningful as a character
551
+
552
+ EXAMPLES:
553
+
554
+ Over `\QQ`, the irreducible character for `\mu` is the Schur
555
+ function associated to `\mu`, plus garbage terms (Schur
556
+ functions associated to partitions with more than `n` parts)::
557
+
558
+ sage: from sage.algebras.schur_algebra import GL_irreducible_character
559
+ sage: sbasis = SymmetricFunctions(QQ).s()
560
+ sage: z = GL_irreducible_character(2, [2], QQ)
561
+ sage: sbasis(z)
562
+ s[2]
563
+
564
+ sage: z = GL_irreducible_character(4, [3, 2], QQ)
565
+ sage: sbasis(z)
566
+ -5*s[1, 1, 1, 1, 1] + s[3, 2]
567
+
568
+ Over a Galois field, the irreducible character for `\mu` will
569
+ in general be smaller.
570
+
571
+ In characteristic `p`, for a one-part partition `(r)`, where
572
+ `r = a_0 + p a_1 + p^2 a_2 + \dots`, the result is (see [Gr2007]_,
573
+ after 5.5d) the product of `h[a_0], h[a_1]( pbasis[p]), h[a_2]
574
+ ( pbasis[p^2]), \dots,` which is consistent with the following ::
575
+
576
+ sage: from sage.algebras.schur_algebra import GL_irreducible_character
577
+ sage: GL_irreducible_character(2, [7], GF(3))
578
+ m[4, 3] + m[6, 1] + m[7]
579
+ """
580
+ mbasis = SymmetricFunctions(QQ).m()
581
+ r = sum(mu)
582
+ M = SchurTensorModule(KK, n, r)
583
+ A = M._schur
584
+ SGA = M._sga
585
+
586
+ # make ST the superstandard tableau of shape mu
587
+ from sage.combinat.tableau import from_shape_and_word
588
+ ST = from_shape_and_word(mu, list(range(1, r + 1)), convention='English')
589
+
590
+ # make ell the reading word of the highest weight tableau of shape mu
591
+ ell = [i + 1 for i, l in enumerate(mu) for dummy in range(l)]
592
+
593
+ e = M.basis()[tuple(ell)] # the element e_l
594
+
595
+ # This is the notation `\{X\}` from just before (5.3a) of [Gr2007]_.
596
+ S = SGA._indices
597
+ BracC = SGA._from_dict({S(x.tuple()): x.sign() for x in ST.column_stabilizer()},
598
+ remove_zeros=False)
599
+ f = e * BracC # M.action_by_symmetric_group_algebra(e, BracC)
600
+
601
+ # [Green, Theorem 5.3b] says that a basis of the Carter-Lusztig
602
+ # module V_\mu is given by taking this f, and multiplying by all
603
+ # xi_{i,ell} with ell as above and i semistandard.
604
+
605
+ carter_lusztig = []
606
+ for T in SemistandardTableaux(mu, max_entry=n):
607
+ i = tuple(flatten(T))
608
+ schur_rep = schur_representative_from_index(i, tuple(ell))
609
+ y = A.basis()[schur_rep] * e # M.action_by_Schur_alg(A.basis()[schur_rep], e)
610
+ carter_lusztig.append(y.to_vector())
611
+
612
+ # Therefore, we now have carter_lusztig as a list giving the basis
613
+ # of `V_\mu`
614
+
615
+ # We want to think of expressing this character as a sum of monomial
616
+ # symmetric functions.
617
+
618
+ # We will determine a basis element for each m_\lambda in the
619
+ # character, and we want to keep track of them by \lambda.
620
+
621
+ # That means that we only want to pick out the basis elements above for
622
+ # those semistandard words whose content is a partition.
623
+
624
+ contents = Partitions(r, max_length=n).list()
625
+ # all partitions of r, length at most n
626
+
627
+ # JJ will consist of a list for each element of `contents`,
628
+ # recording the list
629
+ # of semistandard tableaux words with that content
630
+
631
+ # graded_basis will consist of the corresponding basis element
632
+ graded_basis = []
633
+ JJ = []
634
+ for i in range(len(contents)):
635
+ graded_basis.append([])
636
+ JJ.append([])
637
+ for T in SemistandardTableaux(mu, max_entry=n):
638
+ i = tuple(flatten(T))
639
+ # Get the content of T
640
+ con = [0] * n
641
+ for a in i:
642
+ con[a - 1] += 1
643
+ try:
644
+ P = Partition(con)
645
+ P_index = contents.index(P)
646
+ JJ[P_index].append(i)
647
+ schur_rep = schur_representative_from_index(i, tuple(ell))
648
+ x = A.basis()[schur_rep] * f # M.action_by_Schur_alg(A.basis()[schur_rep], f)
649
+ graded_basis[P_index].append(x.to_vector())
650
+ except ValueError:
651
+ pass
652
+
653
+ # There is an inner product on the Carter-Lusztig module V_\mu; its
654
+ # maximal submodule is exactly the kernel of the inner product.
655
+
656
+ # Now, for each possible partition content, we look at the graded piece of
657
+ # that degree, and we record how these elements pair with each of the
658
+ # elements of carter_lusztig.
659
+
660
+ # The kernel of this pairing is the part of this graded piece which is
661
+ # not in the irreducible module for \mu.
662
+
663
+ phi = mbasis.zero()
664
+ for aa, c_aa in enumerate(contents):
665
+ mat = [[elt_basis_aa.inner_product(elt_carter_lusztig)
666
+ for elt_carter_lusztig in carter_lusztig]
667
+ for elt_basis_aa in graded_basis[aa]]
668
+ angle = Matrix(mat)
669
+ phi += (len(JJ[aa]) - angle.nullity()) * mbasis(c_aa)
670
+ return phi