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,863 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.combinat sage.graphs sage.modules
3
+ """
4
+ Crystals of Kac modules of the general-linear Lie superalgebra
5
+ """
6
+
7
+ #*****************************************************************************
8
+ # Copyright (C) 2017 Travis Scrimshaw <tcscrims at gmail.com>
9
+ #
10
+ # This program is free software: you can redistribute it and/or modify
11
+ # it under the terms of the GNU General Public License as published by
12
+ # the Free Software Foundation, either version 2 of the License, or
13
+ # (at your option) any later version.
14
+ # http://www.gnu.org/licenses/
15
+ #*****************************************************************************
16
+
17
+ from sage.structure.parent import Parent
18
+ from sage.structure.element_wrapper import ElementWrapper
19
+ from sage.structure.unique_representation import UniqueRepresentation
20
+ from sage.rings.integer_ring import ZZ
21
+
22
+ from sage.categories.regular_supercrystals import RegularSuperCrystals
23
+ from sage.combinat.crystals.tensor_product import CrystalOfTableaux
24
+ from sage.combinat.root_system.cartan_type import CartanType
25
+ from sage.combinat.partition import _Partitions
26
+
27
+
28
+ class CrystalOfOddNegativeRoots(UniqueRepresentation, Parent):
29
+ r"""
30
+ Crystal of the set of odd negative roots.
31
+
32
+ Let `\mathfrak{g}` be the general-linear Lie superalgebra
33
+ `\mathfrak{gl}(m|n)`. This is the crystal structure on the set of
34
+ negative roots as given by [Kwon2012]_.
35
+
36
+ More specifically, this is the crystal basis of the subalgebra
37
+ of `U_q^-(\mathfrak{g})` generated by `f_{\alpha}`, where `\alpha`
38
+ ranges over all odd positive roots. As `\QQ(q)`-modules, we have
39
+
40
+ .. MATH::
41
+
42
+ U_q^-(\mathfrak{g}) \cong
43
+ K \otimes U^-_q(\mathfrak{gl}_m \oplus \mathfrak{gl}_n).
44
+
45
+ EXAMPLES::
46
+
47
+ sage: S = crystals.OddNegativeRoots(['A', [2,1]])
48
+ sage: mg = S.module_generator(); mg
49
+ {}
50
+ sage: mg.f(0)
51
+ {-e[-1]+e[1]}
52
+ sage: mg.f_string([0,-1,0,1,2,1,0])
53
+ {-e[-2]+e[3], -e[-1]+e[1], -e[-1]+e[2]}
54
+ """
55
+ @staticmethod
56
+ def __classcall_private__(cls, cartan_type):
57
+ """
58
+ Normalize input to ensure a unique representation.
59
+
60
+ TESTS::
61
+
62
+ sage: S1 = crystals.OddNegativeRoots(['A', [2,1]])
63
+ sage: S2 = crystals.OddNegativeRoots(CartanType(['A', [2,1]]))
64
+ sage: S1 is S2
65
+ True
66
+ """
67
+ return super().__classcall__(cls, CartanType(cartan_type))
68
+
69
+ def __init__(self, cartan_type):
70
+ """
71
+ Initialize ``self``.
72
+
73
+ TESTS::
74
+
75
+ sage: S = crystals.OddNegativeRoots(['A', [2,1]])
76
+ sage: TestSuite(S).run()
77
+ """
78
+ self._cartan_type = cartan_type
79
+ Parent.__init__(self, category=RegularSuperCrystals())
80
+ self.module_generators = (self.element_class(self, frozenset()),)
81
+
82
+ def _repr_(self):
83
+ """
84
+ Return a string representation of ``self``.
85
+
86
+ EXAMPLES::
87
+
88
+ sage: crystals.OddNegativeRoots(['A', [2,1]])
89
+ Crystal of odd negative roots of type ['A', [2, 1]]
90
+ """
91
+ return "Crystal of odd negative roots of type {}".format(self._cartan_type)
92
+
93
+ def module_generator(self):
94
+ """
95
+ Return the module generator of ``self``.
96
+
97
+ EXAMPLES::
98
+
99
+ sage: S = crystals.OddNegativeRoots(['A', [2,1]])
100
+ sage: S.module_generator()
101
+ {}
102
+ """
103
+ return self.module_generators[0]
104
+
105
+ class Element(ElementWrapper):
106
+ """
107
+ An element of the crystal of odd negative roots.
108
+
109
+ TESTS:
110
+
111
+ Check that `e_i` and `f_i` are psuedo-inverses::
112
+
113
+ sage: S = crystals.OddNegativeRoots(['A', [2,1]])
114
+ sage: for x in S:
115
+ ....: for i in S.index_set():
116
+ ....: y = x.f(i)
117
+ ....: assert y is None or y.e(i) == x
118
+
119
+ Check that we obtain the entire powerset of negative odd roots::
120
+
121
+ sage: S = crystals.OddNegativeRoots(['A', [2,3]])
122
+ sage: S.cardinality()
123
+ 4096
124
+ sage: 2^len(S.weight_lattice_realization().positive_odd_roots())
125
+ 4096
126
+ """
127
+
128
+ def _repr_(self):
129
+ r"""
130
+ Return a string representation of ``self``.
131
+
132
+ EXAMPLES::
133
+
134
+ sage: S = crystals.OddNegativeRoots(['A', [2,2]])
135
+ sage: mg = S.module_generator(); mg
136
+ {}
137
+ sage: mg.f(0)
138
+ {-e[-1]+e[1]}
139
+ sage: mg.f_string([0,-1,0])
140
+ {-e[-2]+e[1], -e[-1]+e[1]}
141
+ """
142
+ return ('{'
143
+ + ", ".join("-e[{}]+e[{}]".format(*i)
144
+ for i in sorted(self.value))
145
+ + '}')
146
+
147
+ def _latex_(self):
148
+ r"""
149
+ Return a latex representation of ``self``.
150
+
151
+ EXAMPLES::
152
+
153
+ sage: S = crystals.OddNegativeRoots(['A', [2,2]])
154
+ sage: mg = S.module_generator()
155
+ sage: latex(mg)
156
+ \{\}
157
+ sage: latex(mg.f(0))
158
+ \{-e_{-1}+e_{1}\}
159
+ sage: latex(mg.f_string([0,-1,0]))
160
+ \{-e_{-2}+e_{1}, -e_{-1}+e_{1}\}
161
+ """
162
+ return (r'\{'
163
+ + ", ".join("-e_{{{}}}+e_{{{}}}".format(*i)
164
+ for i in sorted(self.value))
165
+ + r'\}')
166
+
167
+ def e(self, i):
168
+ r"""
169
+ Return the action of the crystal operator `e_i` on ``self``.
170
+
171
+ EXAMPLES::
172
+
173
+ sage: S = crystals.OddNegativeRoots(['A', [2,2]])
174
+ sage: mg = S.module_generator()
175
+ sage: mg.e(0)
176
+ sage: mg.e(1)
177
+ sage: b = mg.f_string([0,1,2,-1,0])
178
+ sage: b.e(-1)
179
+ sage: b.e(0)
180
+ {-e[-2]+e[3]}
181
+ sage: b.e(1)
182
+ sage: b.e(2)
183
+ {-e[-2]+e[2], -e[-1]+e[1]}
184
+ sage: b.e_string([2,1,0,-1,0])
185
+ {}
186
+ """
187
+ if i == 0:
188
+ if (-1,1) not in self.value:
189
+ return None
190
+ return type(self)(self.parent(), self.value.difference([(-1,1)]))
191
+
192
+ count = 0
193
+ act_val = None
194
+ if i < 0:
195
+ lst = sorted(self.value, key=lambda x: (x[1], -x[0]))
196
+ for val in lst:
197
+ # We don't have to check val[1] because this is an odd root
198
+ if val[0] == i - 1:
199
+ if count == 0:
200
+ act_val = val
201
+ else:
202
+ count -= 1
203
+ elif val[0] == i:
204
+ count += 1
205
+ if act_val is None:
206
+ return None
207
+ ret = self.value.difference([act_val]).union([(i, act_val[1])])
208
+ return type(self)(self.parent(), ret)
209
+
210
+ # else i > 0
211
+ lst = sorted(self.value, key=lambda x: (-x[0], -x[1]))
212
+ for val in reversed(lst):
213
+ # We don't have to check val[0] because this is an odd root
214
+ if val[1] == i + 1:
215
+ if count == 0:
216
+ act_val = val
217
+ else:
218
+ count -= 1
219
+ elif val[1] == i:
220
+ count += 1
221
+ if act_val is None:
222
+ return None
223
+ ret = self.value.difference([act_val]).union([(act_val[0], i)])
224
+ return type(self)(self.parent(), ret)
225
+
226
+ def f(self, i):
227
+ r"""
228
+ Return the action of the crystal operator `f_i` on ``self``.
229
+
230
+ EXAMPLES::
231
+
232
+ sage: S = crystals.OddNegativeRoots(['A', [2,2]])
233
+ sage: mg = S.module_generator()
234
+ sage: mg.f(0)
235
+ {-e[-1]+e[1]}
236
+ sage: mg.f(1)
237
+ sage: b = mg.f_string([0,1,2,-1,0]); b
238
+ {-e[-2]+e[3], -e[-1]+e[1]}
239
+ sage: b.f(-2)
240
+ {-e[-3]+e[3], -e[-1]+e[1]}
241
+ sage: b.f(-1)
242
+ sage: b.f(0)
243
+ sage: b.f(1)
244
+ {-e[-2]+e[3], -e[-1]+e[2]}
245
+ """
246
+ if i == 0:
247
+ if (-1,1) in self.value:
248
+ return None
249
+ return type(self)(self.parent(), self.value.union([(-1,1)]))
250
+
251
+ count = 0
252
+ act_val = None
253
+ if i < 0:
254
+ lst = sorted(self.value, key=lambda x: (x[1], -x[0]))
255
+ for val in reversed(lst):
256
+ # We don't have to check val[1] because this is an odd root
257
+ if val[0] == i:
258
+ if count == 0:
259
+ act_val = val
260
+ else:
261
+ count -= 1
262
+ elif val[0] == i - 1:
263
+ count += 1
264
+ if act_val is None:
265
+ return None
266
+ ret = self.value.difference([act_val]).union([(i-1, act_val[1])])
267
+ return type(self)(self.parent(), ret)
268
+
269
+ # else i > 0
270
+ lst = sorted(self.value, key=lambda x: (-x[0], -x[1]))
271
+ for val in lst:
272
+ # We don't have to check val[0] because this is an odd root
273
+ if val[1] == i:
274
+ if count == 0:
275
+ act_val = val
276
+ else:
277
+ count -= 1
278
+ elif val[1] == i + 1:
279
+ count += 1
280
+ if act_val is None:
281
+ return None
282
+ ret = self.value.difference([act_val]).union([(act_val[0], i+1)])
283
+ return type(self)(self.parent(), ret)
284
+
285
+ def epsilon(self, i):
286
+ r"""
287
+ Return `\varepsilon_i` of ``self``.
288
+
289
+ EXAMPLES::
290
+
291
+ sage: S = crystals.OddNegativeRoots(['A', [2,2]])
292
+ sage: mg = S.module_generator()
293
+ sage: [mg.epsilon(i) for i in S.index_set()]
294
+ [0, 0, 0, 0, 0]
295
+ sage: b = mg.f_string([0,1,0,-1,0,-1,-2,-2]); b
296
+ {-e[-3]+e[1], -e[-3]+e[2], -e[-1]+e[1]}
297
+ sage: [b.epsilon(i) for i in S.index_set()]
298
+ [2, 0, 1, 0, 0]
299
+ sage: b = mg.f_string([0,1,0,-1,0,-1,-2,-2,2,-1,0]); b
300
+ {-e[-3]+e[1], -e[-3]+e[3], -e[-2]+e[1], -e[-1]+e[1]}
301
+ sage: [b.epsilon(i) for i in S.index_set()]
302
+ [1, 0, 1, 0, 1]
303
+
304
+ TESTS::
305
+
306
+ sage: S = crystals.OddNegativeRoots(['A', [2,1]])
307
+ sage: def count_e(x, i):
308
+ ....: ret = -1
309
+ ....: while x is not None:
310
+ ....: x = x.e(i)
311
+ ....: ret += 1
312
+ ....: return ret
313
+ sage: for x in S:
314
+ ....: for i in S.index_set():
315
+ ....: assert x.epsilon(i) == count_e(x, i)
316
+ """
317
+ if i == 0:
318
+ return ZZ.one() if (-1,1) in self.value else ZZ.zero()
319
+
320
+ count = 0
321
+ ret = 0
322
+ if i < 0:
323
+ lst = sorted(self.value, key=lambda x: (x[1], -x[0]))
324
+ for val in lst:
325
+ # We don't have to check val[1] because this is an odd root
326
+ if val[0] == i - 1:
327
+ if count == 0:
328
+ ret += 1
329
+ else:
330
+ count -= 1
331
+ elif val[0] == i:
332
+ count += 1
333
+
334
+ else: # i > 0
335
+ lst = sorted(self.value, key=lambda x: (-x[0], -x[1]))
336
+ for val in reversed(lst):
337
+ # We don't have to check val[0] because this is an odd root
338
+ if val[1] == i + 1:
339
+ if count == 0:
340
+ ret += 1
341
+ else:
342
+ count -= 1
343
+ elif val[1] == i:
344
+ count += 1
345
+ return ret
346
+
347
+ def phi(self, i):
348
+ r"""
349
+ Return `\varphi_i` of ``self``.
350
+
351
+ EXAMPLES::
352
+
353
+ sage: S = crystals.OddNegativeRoots(['A', [2,2]])
354
+ sage: mg = S.module_generator()
355
+ sage: [mg.phi(i) for i in S.index_set()]
356
+ [0, 0, 1, 0, 0]
357
+ sage: b = mg.f(0)
358
+ sage: [b.phi(i) for i in S.index_set()]
359
+ [0, 1, 0, 1, 0]
360
+ sage: b = mg.f_string([0,1,0,-1,0,-1]); b
361
+ {-e[-2]+e[1], -e[-2]+e[2], -e[-1]+e[1]}
362
+ sage: [b.phi(i) for i in S.index_set()]
363
+ [2, 0, 0, 1, 1]
364
+
365
+ TESTS::
366
+
367
+ sage: S = crystals.OddNegativeRoots(['A', [2,1]])
368
+ sage: def count_f(x, i):
369
+ ....: ret = -1
370
+ ....: while x is not None:
371
+ ....: x = x.f(i)
372
+ ....: ret += 1
373
+ ....: return ret
374
+ sage: for x in S:
375
+ ....: for i in S.index_set():
376
+ ....: assert x.phi(i) == count_f(x, i)
377
+ """
378
+ if i == 0:
379
+ return ZZ.zero() if (-1,1) in self.value else ZZ.one()
380
+
381
+ count = 0
382
+ ret = 0
383
+ if i < 0:
384
+ lst = sorted(self.value, key=lambda x: (x[1], -x[0]))
385
+ for val in reversed(lst):
386
+ # We don't have to check val[1] because this is an odd root
387
+ if val[0] == i:
388
+ if count == 0:
389
+ ret += 1
390
+ else:
391
+ count -= 1
392
+ elif val[0] == i - 1:
393
+ count += 1
394
+
395
+ else: # i > 0
396
+ lst = sorted(self.value, key=lambda x: (-x[0], -x[1]))
397
+ for val in lst:
398
+ # We don't have to check val[0] because this is an odd root
399
+ if val[1] == i:
400
+ if count == 0:
401
+ ret += 1
402
+ else:
403
+ count -= 1
404
+ elif val[1] == i + 1:
405
+ count += 1
406
+ return ret
407
+
408
+ def weight(self):
409
+ r"""
410
+ Return the weight of ``self``.
411
+
412
+ EXAMPLES::
413
+
414
+ sage: S = crystals.OddNegativeRoots(['A', [2,2]])
415
+ sage: mg = S.module_generator()
416
+ sage: mg.weight()
417
+ (0, 0, 0, 0, 0, 0)
418
+ sage: mg.f_string([0,1,2,-1,-2]).weight()
419
+ (-1, 0, 0, 0, 0, 1)
420
+ sage: mg.f_string([0,1,2,-1,-2,0,1,0,2]).weight()
421
+ (-1, 0, -2, 1, 0, 2)
422
+
423
+ TESTS::
424
+
425
+ sage: S = crystals.OddNegativeRoots(['A', [2,1]])
426
+ sage: al = S.weight_lattice_realization().simple_roots()
427
+ sage: for x in S:
428
+ ....: for i in S.index_set():
429
+ ....: y = x.f(i)
430
+ ....: assert y is None or x.weight() - al[i] == y.weight()
431
+ """
432
+ WLR = self.parent().weight_lattice_realization()
433
+ e = WLR.basis()
434
+ return WLR.sum(-e[i]+e[j] for (i,j) in self.value)
435
+
436
+
437
+ class CrystalOfKacModule(UniqueRepresentation, Parent):
438
+ r"""
439
+ Crystal of a Kac module.
440
+
441
+ Let `\mathfrak{g}` be the general linear Lie superalgebra
442
+ `\mathfrak{gl}(m|n)`. Let `\lambda` and `\mu` be dominant weights
443
+ for `\mathfrak{gl}_m` and `\mathfrak{gl}_n`, respectively.
444
+ Let `K` be the module `K = \langle f_{\alpha} \rangle`,
445
+ where `\alpha` ranges over all odd positive roots. A *Kac module*
446
+ is the `U_q(\mathfrak{g})`-module constructed from the highest
447
+ weight `U_q(\mathfrak{gl}_m \oplus \mathfrak{gl}_n)`-module
448
+ `V(\lambda, \mu)` (induced to a `U_q(\mathfrak{g})`-module in
449
+ the natural way) by
450
+
451
+ .. MATH::
452
+
453
+ K(\lambda, \mu) := K \otimes_L V(\lambda, \mu),
454
+
455
+ where `L` is the subalgebra generated by `e_0` and
456
+ `U_q(\mathfrak{gl}_m \oplus \mathfrak{gl}_n)`.
457
+
458
+ The Kac module admits a `U_q(\mathfrak{g})`-crystal structure
459
+ by taking the crystal structure of `K` as given by
460
+ :class:`~sage.combinat.crystals.kac_modules.CrystalOfOddNegativeRoots`
461
+ and the crystal `B(\lambda, \mu)` (the natural crystal structure
462
+ of `V(\lambda, \mu)`).
463
+
464
+ .. NOTE::
465
+
466
+ Our notation differs slightly from [Kwon2012]_ in that our
467
+ last tableau is transposed.
468
+
469
+ EXAMPLES::
470
+
471
+ sage: K = crystals.KacModule(['A', [1,2]], [2], [1,1])
472
+ sage: K.cardinality()
473
+ 576
474
+ sage: K.cardinality().factor()
475
+ 2^6 * 3^2
476
+ sage: len(K.cartan_type().root_system().ambient_space().positive_odd_roots())
477
+ 6
478
+ sage: mg = K.module_generator()
479
+ sage: mg
480
+ ({}, [[-2, -2]], [[1], [2]])
481
+ sage: mg.weight()
482
+ (2, 0, 1, 1, 0)
483
+ sage: mg.f(-1)
484
+ ({}, [[-2, -1]], [[1], [2]])
485
+ sage: mg.f(0)
486
+ ({-e[-1]+e[1]}, [[-2, -2]], [[1], [2]])
487
+ sage: mg.f(1)
488
+ sage: mg.f(2)
489
+ ({}, [[-2, -2]], [[1], [3]])
490
+
491
+ sage: sorted(K.highest_weight_vectors(), key=str)
492
+ [({-e[-1]+e[3]}, [[-2, -1]], [[1], [2]]),
493
+ ({-e[-1]+e[3]}, [[-2, -2]], [[1], [2]]),
494
+ ({}, [[-2, -2]], [[1], [2]])]
495
+
496
+ ::
497
+
498
+ sage: K = crystals.KacModule(['A', [1,1]], [2], [1])
499
+ sage: K.cardinality()
500
+ 96
501
+ sage: K.cardinality().factor()
502
+ 2^5 * 3
503
+ sage: len(K.cartan_type().root_system().ambient_space().positive_odd_roots())
504
+ 4
505
+
506
+ sage: sorted(K.highest_weight_vectors(), key=str)
507
+ [({-e[-1]+e[2]}, [[-2, -1]], [[1]]),
508
+ ({-e[-1]+e[2]}, [[-2, -2]], [[1]]),
509
+ ({}, [[-2, -2]], [[1]])]
510
+ sage: K.genuine_lowest_weight_vectors()
511
+ (({-e[-2]+e[1], -e[-2]+e[2], -e[-1]+e[1], -e[-1]+e[2]}, [[-1, -1]], [[2]]),)
512
+ sage: sorted(K.lowest_weight_vectors(), key=str)
513
+ [({-e[-1]+e[1], -e[-1]+e[2]}, [[-1, -1]], [[2]]),
514
+ ({-e[-2]+e[1], -e[-2]+e[2], -e[-1]+e[1], -e[-1]+e[2]}, [[-1, -1]], [[2]]),
515
+ ({-e[-2]+e[2], -e[-1]+e[1], -e[-1]+e[2]}, [[-1, -1]], [[1]]),
516
+ ({-e[-2]+e[2], -e[-1]+e[1], -e[-1]+e[2]}, [[-1, -1]], [[2]])]
517
+
518
+ REFERENCES:
519
+
520
+ - [Kwon2012]_
521
+ """
522
+ @staticmethod
523
+ def __classcall_private__(cls, cartan_type, la, mu):
524
+ """
525
+ Normalize input to ensure a unique representation.
526
+
527
+ TESTS::
528
+
529
+ sage: K1 = crystals.KacModule(['A', [2,1]], [2,1], [1])
530
+ sage: K2 = crystals.KacModule(CartanType(['A', [2,1]]), (2,1), (1,))
531
+ sage: K1 is K2
532
+ True
533
+ """
534
+ cartan_type = CartanType(cartan_type)
535
+ la = _Partitions(la)
536
+ mu = _Partitions(mu)
537
+ return super().__classcall__(cls, cartan_type, la, mu)
538
+
539
+ def __init__(self, cartan_type, la, mu):
540
+ """
541
+ Initialize ``self``.
542
+
543
+ TESTS::
544
+
545
+ sage: K = crystals.KacModule(['A', [2,1]], [2,1], [1])
546
+ sage: TestSuite(K).run()
547
+ """
548
+ self._cartan_type = cartan_type
549
+ self._la = la
550
+ self._mu = mu
551
+ Parent.__init__(self, category=RegularSuperCrystals())
552
+ self._S = CrystalOfOddNegativeRoots(self._cartan_type)
553
+ self._dual = CrystalOfTableaux(['A', self._cartan_type.m], shape=la)
554
+ self._reg = CrystalOfTableaux(['A', self._cartan_type.n], shape=mu)
555
+ data = (self._S.module_generators[0],
556
+ self._dual.module_generators[0],
557
+ self._reg.module_generators[0])
558
+ self.module_generators = (self.element_class(self, data),)
559
+
560
+ def _repr_(self):
561
+ r"""
562
+ Return a string representation of ``self``.
563
+
564
+ EXAMPLES::
565
+
566
+ sage: crystals.KacModule(['A', [2,1]], [3,1], [1])
567
+ Crystal of Kac module K([3, 1], [1]) of type ['A', [2, 1]]
568
+ """
569
+ return "Crystal of Kac module K({}, {}) of type {}".format(
570
+ self._la, self._mu, self._cartan_type)
571
+
572
+ def module_generator(self):
573
+ """
574
+ Return the module generator of ``self``.
575
+
576
+ EXAMPLES::
577
+
578
+ sage: K = crystals.KacModule(['A', [2,1]], [2,1], [1])
579
+ sage: K.module_generator()
580
+ ({}, [[-3, -3], [-2]], [[1]])
581
+ """
582
+ return self.module_generators[0]
583
+
584
+ class Element(ElementWrapper):
585
+ r"""
586
+ An element of a Kac module crystal.
587
+
588
+ TESTS:
589
+
590
+ Check that `e_i` and `f_i` are psuedo-inverses::
591
+
592
+ sage: K = crystals.KacModule(['A', [2,1]], [2,1], [1])
593
+ sage: for x in K:
594
+ ....: for i in K.index_set():
595
+ ....: y = x.f(i)
596
+ ....: assert y is None or y.e(i) == x
597
+ """
598
+
599
+ def _repr_(self):
600
+ """
601
+ Return a string representation of ``self``.
602
+
603
+ EXAMPLES::
604
+
605
+ sage: K = crystals.KacModule(['A', [2,1]], [2,1], [1])
606
+ sage: mg = K.module_generator(); mg
607
+ ({}, [[-3, -3], [-2]], [[1]])
608
+ sage: mg.f_string([0,1,-2,1,-1,0,-1,-1,1,-2,-2])
609
+ ({-e[-3]+e[2], -e[-1]+e[2]}, [[-2, -1], [-1]], [[2]])
610
+ """
611
+ return repr((self.value[0], to_dual_tableau(self.value[1]), self.value[2]))
612
+
613
+ def _latex_(self):
614
+ r"""
615
+ Return a string representation of ``self``.
616
+
617
+ EXAMPLES::
618
+
619
+ sage: K = crystals.KacModule(['A', [2,1]], [2,1], [1])
620
+ sage: mg = K.module_generator()
621
+ sage: latex(mg)
622
+ \{\}
623
+ \otimes {\def\lr#1{\multicolumn{1}{|@{\hspace{.6ex}}c@{\hspace{.6ex}}|}{\raisebox{-.3ex}{$#1$}}}
624
+ \raisebox{-.6ex}{$\begin{array}[b]{*{2}c}\cline{1-2}
625
+ \lr{\overline{3}}&\lr{\overline{3}}\\\cline{1-2}
626
+ \lr{\overline{2}}\\\cline{1-1}
627
+ \end{array}$}
628
+ } \otimes {\def\lr#1{\multicolumn{1}{|@{\hspace{.6ex}}c@{\hspace{.6ex}}|}{\raisebox{-.3ex}{$#1$}}}
629
+ \raisebox{-.6ex}{$\begin{array}[b]{*{1}c}\cline{1-1}
630
+ \lr{1}\\\cline{1-1}
631
+ \end{array}$}
632
+ }
633
+ sage: latex(mg.f_string([0,1,-2,1,-1,0,-1,-1,1,-2,-2]))
634
+ \{-e_{-3}+e_{2}, -e_{-1}+e_{2}\}
635
+ \otimes {\def\lr#1{\multicolumn{1}{|@{\hspace{.6ex}}c@{\hspace{.6ex}}|}{\raisebox{-.3ex}{$#1$}}}
636
+ \raisebox{-.6ex}{$\begin{array}[b]{*{2}c}\cline{1-2}
637
+ \lr{\overline{2}}&\lr{\overline{1}}\\\cline{1-2}
638
+ \lr{\overline{1}}\\\cline{1-1}
639
+ \end{array}$}
640
+ } \otimes {\def\lr#1{\multicolumn{1}{|@{\hspace{.6ex}}c@{\hspace{.6ex}}|}{\raisebox{-.3ex}{$#1$}}}
641
+ \raisebox{-.6ex}{$\begin{array}[b]{*{1}c}\cline{1-1}
642
+ \lr{2}\\\cline{1-1}
643
+ \end{array}$}
644
+ }
645
+ """
646
+ from sage.misc.latex import latex
647
+ return r" \otimes ".join([latex(self.value[0]),
648
+ latex_dual(self.value[1]),
649
+ latex(self.value[2])])
650
+
651
+ def e(self, i):
652
+ r"""
653
+ Return the action of the crystal operator `e_i` on ``self``.
654
+
655
+ EXAMPLES::
656
+
657
+ sage: K = crystals.KacModule(['A', [2,2]], [2,1], [1])
658
+ sage: mg = K.module_generator()
659
+ sage: mg.e(0)
660
+ sage: mg.e(1)
661
+ sage: mg.e(-1)
662
+ sage: b = mg.f_string([1,0,1,-1,-2,0,1,2,0,-2,-1,-1,-1]); b
663
+ ({-e[-3]+e[2], -e[-2]+e[1], -e[-2]+e[2]}, [[-3, -1], [-2]], [[3]])
664
+ sage: b.e(-2)
665
+ sage: b.e(-1)
666
+ ({-e[-3]+e[2], -e[-2]+e[1], -e[-2]+e[2]}, [[-3, -2], [-2]], [[3]])
667
+ sage: b.e(0)
668
+ sage: b.e(1)
669
+ ({-e[-3]+e[1], -e[-2]+e[1], -e[-2]+e[2]}, [[-3, -1], [-2]], [[3]])
670
+ sage: b.e(2)
671
+ ({-e[-3]+e[2], -e[-2]+e[1], -e[-2]+e[2]}, [[-3, -1], [-2]], [[2]])
672
+ """
673
+ if i == 0:
674
+ x = self.value[0].e(i)
675
+ if x is None:
676
+ return None
677
+ return type(self)(self.parent(), (x, self.value[1], self.value[2]))
678
+ if i > 0:
679
+ if self.value[0].epsilon(i) > self.value[2].phi(i):
680
+ x = self.value[0].e(i)
681
+ if x is None:
682
+ return None
683
+ return type(self)(self.parent(), (x, self.value[1], self.value[2]))
684
+ else:
685
+ x = self.value[2].e(i)
686
+ if x is None:
687
+ return None
688
+ return type(self)(self.parent(), (self.value[0], self.value[1], x))
689
+ # else i < 0
690
+ M = self.parent()._cartan_type.m + 1
691
+ if self.value[0].phi(i) < self.value[1].epsilon(M+i):
692
+ x = self.value[1].e(M+i)
693
+ if x is None:
694
+ return None
695
+ return type(self)(self.parent(), (self.value[0], x, self.value[2]))
696
+ else:
697
+ x = self.value[0].e(i)
698
+ if x is None:
699
+ return None
700
+ return type(self)(self.parent(), (x, self.value[1], self.value[2]))
701
+
702
+ def f(self, i):
703
+ r"""
704
+ Return the action of the crystal operator `f_i` on ``self``.
705
+
706
+ EXAMPLES::
707
+
708
+ sage: K = crystals.KacModule(['A', [2,2]], [2,1], [1])
709
+ sage: mg = K.module_generator()
710
+ sage: mg.f(-2)
711
+ ({}, [[-3, -2], [-2]], [[1]])
712
+ sage: mg.f(-1)
713
+ ({}, [[-3, -3], [-1]], [[1]])
714
+ sage: mg.f(0)
715
+ ({-e[-1]+e[1]}, [[-3, -3], [-2]], [[1]])
716
+ sage: mg.f(1)
717
+ ({}, [[-3, -3], [-2]], [[2]])
718
+ sage: mg.f(2)
719
+ sage: b = mg.f_string([1,0,1,-1,-2,0,1,2,0,-2,-1,2,0]); b
720
+ ({-e[-3]+e[3], -e[-2]+e[1], -e[-1]+e[1], -e[-1]+e[2]},
721
+ [[-3, -2], [-2]], [[3]])
722
+ """
723
+ if i == 0:
724
+ x = self.value[0].f(i)
725
+ if x is None:
726
+ return None
727
+ return type(self)(self.parent(), (x, self.value[1], self.value[2]))
728
+ if i > 0:
729
+ if self.value[0].epsilon(i) < self.value[2].phi(i):
730
+ x = self.value[2].f(i)
731
+ if x is None:
732
+ return None
733
+ return type(self)(self.parent(), (self.value[0], self.value[1], x))
734
+ else:
735
+ x = self.value[0].f(i)
736
+ if x is None:
737
+ return None
738
+ return type(self)(self.parent(), (x, self.value[1], self.value[2]))
739
+ # else i < 0
740
+ M = self.parent()._cartan_type.m + 1
741
+ if self.value[0].phi(i) > self.value[1].epsilon(M+i):
742
+ x = self.value[0].f(i)
743
+ if x is None:
744
+ return None
745
+ return type(self)(self.parent(), (x, self.value[1], self.value[2]))
746
+ else:
747
+ x = self.value[1].f(M+i)
748
+ if x is None:
749
+ return None
750
+ return type(self)(self.parent(), (self.value[0], x, self.value[2]))
751
+
752
+ def weight(self):
753
+ r"""
754
+ Return weight of ``self``.
755
+
756
+ EXAMPLES::
757
+
758
+ sage: K = crystals.KacModule(['A', [3,2]], [2,1], [5,1])
759
+ sage: mg = K.module_generator()
760
+ sage: mg.weight()
761
+ (2, 1, 0, 0, 5, 1, 0)
762
+ sage: mg.weight().is_dominant()
763
+ True
764
+ sage: mg.f(0).weight()
765
+ (2, 1, 0, -1, 6, 1, 0)
766
+ sage: b = mg.f_string([2,1,-3,-2,-1,1,1,0,-2,-1,2,1,1,1,0,2,-3,-2,-1])
767
+ sage: b.weight()
768
+ (0, 0, 0, 1, 1, 4, 3)
769
+ """
770
+ e = self.parent().weight_lattice_realization().basis()
771
+ M = self.parent()._cartan_type.m + 1
772
+ wt = self.value[0].weight()
773
+ wt += sum(c*e[i-M] for i,c in self.value[1].weight())
774
+ wt += sum(c*e[i+1] for i,c in self.value[2].weight())
775
+ return wt
776
+
777
+ #####################################################################
778
+ ## Helper functions
779
+
780
+
781
+ def to_dual_tableau(elt):
782
+ r"""
783
+ Return a type `A_n` crystal tableau ``elt`` as a tableau expressed
784
+ in terms of dual letters.
785
+
786
+ The dual letter of `k` is expressed as `\overline{n+2-k}` represented
787
+ as `-(n+2-k)`.
788
+
789
+ EXAMPLES::
790
+
791
+ sage: from sage.combinat.crystals.kac_modules import to_dual_tableau
792
+ sage: T = crystals.Tableaux(['A',2], shape=[2,1])
793
+ sage: ascii_art([to_dual_tableau(t) for t in T])
794
+ [ -3 -3 -3 -2 -3 -1 -3 -1 -2 -1 -3 -3 -3 -2 -2 -2 ]
795
+ [ -2 , -2 , -2 , -1 , -1 , -1 , -1 , -1 ]
796
+
797
+ TESTS:
798
+
799
+ Check that :issue:`23935` is fixed::
800
+
801
+ sage: from sage.combinat.crystals.kac_modules import to_dual_tableau
802
+ sage: T = crystals.Tableaux(['A',2], shape=[])
803
+ sage: to_dual_tableau(T[0])
804
+ []
805
+
806
+ sage: Ktriv = crystals.KacModule(['A',[1,1]], [], [])
807
+ sage: Ktriv.module_generator()
808
+ ({}, [], [])
809
+ """
810
+ from sage.combinat.tableau import Tableau
811
+ M = elt.parent().cartan_type().rank() + 2
812
+ if not elt:
813
+ return Tableau([])
814
+ tab = [ [elt[0].value-M] ]
815
+ for i in range(1, len(elt)):
816
+ if elt[i-1] < elt[i] or (elt[i-1].value != 0 and elt[i-1] == elt[i]):
817
+ tab.append([elt[i].value-M])
818
+ else:
819
+ tab[len(tab)-1].append(elt[i].value-M)
820
+ for x in tab:
821
+ x.reverse()
822
+ return Tableau(tab).conjugate()
823
+
824
+
825
+ def latex_dual(elt):
826
+ r"""
827
+ Return a latex representation of a type `A_n` crystal tableau ``elt``
828
+ expressed in terms of dual letters.
829
+
830
+ The dual letter of `k` is expressed as `\overline{n+2-k}`.
831
+
832
+ EXAMPLES::
833
+
834
+ sage: from sage.combinat.crystals.kac_modules import latex_dual
835
+ sage: T = crystals.Tableaux(['A',2], shape=[2,1])
836
+ sage: print(latex_dual(T[0]))
837
+ {\def\lr#1{\multicolumn{1}{|@{\hspace{.6ex}}c@{\hspace{.6ex}}|}{\raisebox{-.3ex}{$#1$}}}
838
+ \raisebox{-.6ex}{$\begin{array}[b]{*{2}c}\cline{1-2}
839
+ \lr{\overline{3}}&\lr{\overline{3}}\\\cline{1-2}
840
+ \lr{\overline{2}}\\\cline{1-1}
841
+ \end{array}$}
842
+ }
843
+ """
844
+ M = elt.parent().cartan_type().rank() + 2
845
+ from sage.combinat.tableau import Tableau
846
+ from sage.combinat.output import tex_from_array
847
+ # Modified version of to_tableau() to have the entries be letters
848
+ # rather than their values
849
+ if not elt:
850
+ return "{\\emptyset}"
851
+
852
+ tab = [ ["\\overline{{{}}}".format(M-elt[0].value)] ]
853
+ for i in range(1, len(elt)):
854
+ if elt[i-1] < elt[i] or (elt[i-1].value != 0 and elt[i-1] == elt[i]):
855
+ tab.append(["\\overline{{{}}}".format(M-elt[i].value)])
856
+ else:
857
+ l = len(tab)-1
858
+ tab[l].append("\\overline{{{}}}".format(M-elt[i].value))
859
+ for x in tab:
860
+ x.reverse()
861
+
862
+ T = Tableau(tab).conjugate()
863
+ return tex_from_array([list(row) for row in T])