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,22 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ r"""
3
+ Crystals
4
+
5
+ - :ref:`sage.combinat.crystals.crystals`
6
+ - The `Lie Methods and Related Combinatorics <../../../../../thematic_tutorials/lie.html>`_ thematic tutorial
7
+ - :ref:`sage.combinat.crystals.catalog`
8
+
9
+ See also the categories for crystals: :class:`Crystals`,
10
+ :class:`HighestWeightCrystals`, :class:`FiniteCrystals`,
11
+ :class:`ClassicalCrystals`, :class:`RegularCrystals`,
12
+ :class:`~sage.categories.regular_supercrystals.RegularSuperCrystals`
13
+ """
14
+ # install the docstring of this module to the containing package
15
+ from sage.misc.namespace_package import install_doc
16
+ install_doc(__package__, __doc__)
17
+
18
+ from sage.misc.lazy_import import lazy_import
19
+
20
+ lazy_import('sage.combinat.crystals', 'catalog', 'crystals')
21
+ del lazy_import
22
+ del install_doc
@@ -0,0 +1,141 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.combinat sage.graphs sage.modules
3
+ """
4
+ Benkart-Kang-Kashiwara crystals for the general-linear Lie superalgebra
5
+ """
6
+
7
+ # ****************************************************************************
8
+ # Copyright (C) 2017 Franco Saliola <saliola@gmail.com>
9
+ # 2017 Travis Scrimshaw <tcscrims at gmail.com>
10
+ # 2017 Anne Schilling <anne@math.ucdavis.edu>
11
+ #
12
+ # This program is free software: you can redistribute it and/or modify
13
+ # it under the terms of the GNU General Public License as published by
14
+ # the Free Software Foundation, either version 2 of the License, or
15
+ # (at your option) any later version.
16
+ # https://www.gnu.org/licenses/
17
+ # ****************************************************************************
18
+
19
+ from sage.structure.parent import Parent
20
+ from sage.categories.regular_supercrystals import RegularSuperCrystals
21
+ from sage.combinat.partition import _Partitions
22
+ from sage.combinat.root_system.cartan_type import CartanType
23
+ from sage.combinat.crystals.letters import CrystalOfBKKLetters
24
+ from sage.combinat.crystals.tensor_product import CrystalOfWords
25
+ from sage.combinat.crystals.tensor_product_element import CrystalOfBKKTableauxElement
26
+
27
+
28
+ class CrystalOfBKKTableaux(CrystalOfWords):
29
+ r"""
30
+ Crystal of tableaux for type `A(m|n)`.
31
+
32
+ This is an implementation of the tableaux model of the
33
+ Benkart-Kang-Kashiwara crystal [BKK2000]_ for the Lie
34
+ superalgebra `\mathfrak{gl}(m+1,n+1)`.
35
+
36
+ INPUT:
37
+
38
+ - ``ct`` -- a super Lie Cartan type of type `A(m|n)`
39
+ - ``shape`` -- shape specifying the highest weight; this should be
40
+ a partition contained in a hook of height `n+1` and width `m+1`
41
+
42
+ EXAMPLES::
43
+
44
+ sage: T = crystals.Tableaux(['A', [1,1]], shape = [2,1])
45
+ sage: T.cardinality()
46
+ 20
47
+ """
48
+ @staticmethod
49
+ def __classcall_private__(cls, ct, shape):
50
+ """
51
+ Normalize input to ensure a unique representation.
52
+
53
+ TESTS::
54
+
55
+ sage: crystals.Tableaux(['A', [1, 2]], shape=[2,1])
56
+ Crystal of BKK tableaux of shape [2, 1] of gl(2|3)
57
+ sage: crystals.Tableaux(['A', [1, 1]], shape=[3,3,3])
58
+ Traceback (most recent call last):
59
+ ...
60
+ ValueError: invalid hook shape
61
+ """
62
+ ct = CartanType(ct)
63
+ shape = _Partitions(shape)
64
+ if len(shape) > ct.m + 1 and shape[ct.m + 1] > ct.n + 1:
65
+ raise ValueError("invalid hook shape")
66
+ return super().__classcall__(cls, ct, shape)
67
+
68
+ def __init__(self, ct, shape):
69
+ r"""
70
+ Initialize ``self``.
71
+
72
+ TESTS::
73
+
74
+ sage: T = crystals.Tableaux(['A', [1,1]], shape = [2,1]); T
75
+ Crystal of BKK tableaux of shape [2, 1] of gl(2|2)
76
+ sage: TestSuite(T).run()
77
+ """
78
+ self._shape = shape
79
+ self._cartan_type = ct
80
+ m = ct.m + 1
81
+ C = CrystalOfBKKLetters(ct)
82
+ tr = shape.conjugate()
83
+ mg = []
84
+ for i, col_len in enumerate(tr, start=1):
85
+ mg.extend(C(i) for j in range(col_len - m))
86
+ mg.extend(C(-j - 1) for j in range(max(0, m - col_len), m))
87
+ mg = list(reversed(mg))
88
+ Parent.__init__(self, category=RegularSuperCrystals())
89
+ self.module_generators = (self.element_class(self, mg),)
90
+
91
+ def _repr_(self) -> str:
92
+ """
93
+ Return a string representation of ``self``.
94
+
95
+ TESTS::
96
+
97
+ sage: crystals.Tableaux(['A', [1, 2]], shape=[2,1])
98
+ Crystal of BKK tableaux of shape [2, 1] of gl(2|3)
99
+ """
100
+ m = self._cartan_type.m + 1
101
+ n = self._cartan_type.n + 1
102
+ return "Crystal of BKK tableaux of shape {} of gl({}|{})".format(self.shape(), m, n)
103
+
104
+ def shape(self):
105
+ r"""
106
+ Return the shape of ``self``.
107
+
108
+ EXAMPLES::
109
+
110
+ sage: T = crystals.Tableaux(['A', [1, 2]], shape=[2,1])
111
+ sage: T.shape()
112
+ [2, 1]
113
+ """
114
+ return self._shape
115
+
116
+ def genuine_highest_weight_vectors(self, index_set=None):
117
+ """
118
+ Return a tuple of genuine highest weight elements.
119
+
120
+ A *fake highest weight vector* is one which is annihilated by
121
+ `e_i` for all `i` in the index set, but whose weight is not
122
+ bigger in dominance order than all other elements in the
123
+ crystal. A *genuine highest weight vector* is a highest
124
+ weight element that is not fake.
125
+
126
+ EXAMPLES::
127
+
128
+ sage: B = crystals.Tableaux(['A', [1,1]], shape=[3,2,1])
129
+ sage: B.genuine_highest_weight_vectors()
130
+ ([[-2, -2, -2], [-1, -1], [1]],)
131
+ sage: B.highest_weight_vectors()
132
+ ([[-2, -2, -2], [-1, -1], [1]],
133
+ [[-2, -2, -2], [-1, 2], [1]],
134
+ [[-2, -2, 2], [-1, -1], [1]])
135
+ """
136
+ if index_set is None or index_set == self.index_set():
137
+ return self.module_generators
138
+ return super().genuine_highest_weight_vectors(index_set)
139
+
140
+ class Element(CrystalOfBKKTableauxElement):
141
+ pass
@@ -0,0 +1,115 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ r"""
3
+ Catalog of crystals
4
+
5
+ Let `I` be an index set and let `(A,\Pi,\Pi^\vee,P,P^\vee)` be a Cartan datum
6
+ associated with generalized Cartan matrix `A = (a_{ij})_{i,j\in I}`. An
7
+ *abstract crystal* associated to this Cartan datum is a set `B` together with
8
+ maps
9
+
10
+ .. MATH::
11
+
12
+ e_i,f_i \colon B \to B \cup \{0\}, \qquad
13
+ \varepsilon_i,\varphi_i\colon B \to \ZZ \cup \{-\infty\}, \qquad
14
+ \mathrm{wt}\colon B \to P,
15
+
16
+ subject to the following conditions:
17
+
18
+ 1. `\varphi_i(b) = \varepsilon_i(b) + \langle h_i, \mathrm{wt}(b) \rangle` for all `b \in B` and `i \in I`;
19
+ 2. `\mathrm{wt}(e_ib) = \mathrm{wt}(b) + \alpha_i` if `e_ib \in B`;
20
+ 3. `\mathrm{wt}(f_ib) = \mathrm{wt}(b) - \alpha_i` if `f_ib \in B`;
21
+ 4. `\varepsilon_i(e_ib) = \varepsilon_i(b) - 1`, `\varphi_i(e_ib) = \varphi_i(b) + 1` if `e_ib \in B`;
22
+ 5. `\varepsilon_i(f_ib) = \varepsilon_i(b) + 1`, `\varphi_i(f_ib) = \varphi_i(b) - 1` if `f_ib \in B`;
23
+ 6. `f_ib = b'` if and only if `b = e_ib'` for `b,b' \in B` and `i\in I`;
24
+ 7. if `\varphi_i(b) = -\infty` for `b\in B`, then `e_ib = f_ib = 0`.
25
+
26
+ .. SEEALSO::
27
+
28
+ - :mod:`sage.categories.crystals`
29
+ - :mod:`sage.combinat.crystals.crystals`
30
+
31
+ Catalog
32
+ -------
33
+
34
+ This is a catalog of crystals that are currently implemented in Sage:
35
+
36
+ * :class:`~sage.combinat.crystals.affine.AffineCrystalFromClassical`
37
+ * :class:`~sage.combinat.crystals.affine.AffineCrystalFromClassicalAndPromotion`
38
+ * :class:`AffineFactorization <sage.combinat.crystals.affine_factorization.AffineFactorizationCrystal>`
39
+ * :class:`AffinizationOf <sage.combinat.crystals.affinization.AffinizationOfCrystal>`
40
+ * :class:`AlcovePaths <sage.combinat.crystals.alcove_path.CrystalOfAlcovePaths>`
41
+ * :class:`FastRankTwo <sage.combinat.crystals.fast_crystals.FastCrystal>`
42
+ * :class:`FullyCommutativeStableGrothendieck
43
+ <sage.combinat.crystals.fully_commutative_stable_grothendieck.FullyCommutativeStableGrothendieckCrystal>`
44
+ * :class:`GeneralizedYoungWalls
45
+ <sage.combinat.crystals.generalized_young_walls.CrystalOfGeneralizedYoungWalls>`
46
+ * :func:`HighestWeight <sage.combinat.crystals.highest_weight_crystals.HighestWeightCrystal>`
47
+ * :class:`Induced <sage.combinat.crystals.induced_structure.InducedCrystal>`
48
+ * :class:`KacModule <sage.combinat.crystals.kac_modules.CrystalOfKacModule>`
49
+ * :func:`KirillovReshetikhin <sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinCrystal>`
50
+ * :class:`KleshchevPartitions <sage.combinat.partition_kleshchev.KleshchevPartitions_all>`
51
+ * :class:`KyotoPathModel <sage.combinat.crystals.kyoto_path_model.KyotoPathModel>`
52
+ * :class:`Letters <sage.combinat.crystals.letters.CrystalOfLetters>`
53
+ * :class:`LSPaths <sage.combinat.crystals.littelmann_path.CrystalOfLSPaths>`
54
+ * :class:`Minimaj <sage.combinat.multiset_partition_into_sets_ordered.MinimajCrystal>`
55
+ * :class:`NakajimaMonomials <sage.combinat.crystals.monomial_crystals.CrystalOfNakajimaMonomials>`
56
+ * :class:`OddNegativeRoots <sage.combinat.crystals.kac_modules.CrystalOfOddNegativeRoots>`
57
+ * :class:`ProjectedLevelZeroLSPaths
58
+ <sage.combinat.crystals.littelmann_path.CrystalOfProjectedLevelZeroLSPaths>`
59
+ * :class:`RiggedConfigurations
60
+ <sage.combinat.rigged_configurations.rc_crystal.CrystalOfRiggedConfigurations>`
61
+ * :class:`ShiftedPrimedTableaux
62
+ <sage.combinat.shifted_primed_tableau.ShiftedPrimedTableaux_shape>`
63
+ * :class:`Spins <sage.combinat.crystals.spins.CrystalOfSpins>`
64
+ * :class:`SpinsPlus <sage.combinat.crystals.spins.CrystalOfSpinsPlus>`
65
+ * :class:`SpinsMinus <sage.combinat.crystals.spins.CrystalOfSpinsMinus>`
66
+ * :class:`Tableaux <sage.combinat.crystals.tensor_product.CrystalOfTableaux>`
67
+
68
+ Subcatalogs:
69
+
70
+ * :ref:`sage.combinat.crystals.catalog_infinity_crystals`
71
+ * :ref:`sage.combinat.crystals.catalog_elementary_crystals`
72
+ * :ref:`sage.combinat.crystals.catalog_kirillov_reshetikhin`
73
+
74
+ Functorial constructions:
75
+
76
+ * :class:`DirectSum <sage.combinat.crystals.direct_sum.DirectSumOfCrystals>`
77
+ * :class:`TensorProduct <sage.combinat.crystals.tensor_product.TensorProductOfCrystals>`
78
+ """
79
+
80
+ from .letters import CrystalOfLetters as Letters
81
+ from .spins import CrystalOfSpins as Spins
82
+ from .spins import CrystalOfSpinsPlus as SpinsPlus
83
+ from .spins import CrystalOfSpinsMinus as SpinsMinus
84
+ from .tensor_product import CrystalOfTableaux as Tableaux
85
+ from .fast_crystals import FastCrystal as FastRankTwo
86
+ from .affine import AffineCrystalFromClassical as AffineFromClassical
87
+ from .affine import AffineCrystalFromClassicalAndPromotion as AffineFromClassicalAndPromotion
88
+ from .affine_factorization import AffineFactorizationCrystal as AffineFactorization
89
+ from .fully_commutative_stable_grothendieck import FullyCommutativeStableGrothendieckCrystal as FullyCommutativeStableGrothendieck
90
+ from sage.combinat.crystals.affinization import AffinizationOfCrystal as AffinizationOf
91
+ from .highest_weight_crystals import HighestWeightCrystal as HighestWeight
92
+ from .alcove_path import CrystalOfAlcovePaths as AlcovePaths
93
+ from .littelmann_path import CrystalOfLSPaths as LSPaths
94
+ from .littelmann_path import CrystalOfProjectedLevelZeroLSPaths as ProjectedLevelZeroLSPaths
95
+ from .kyoto_path_model import KyotoPathModel
96
+ from .generalized_young_walls import CrystalOfGeneralizedYoungWalls as GeneralizedYoungWalls
97
+ from .monomial_crystals import CrystalOfNakajimaMonomials as NakajimaMonomials
98
+ from sage.combinat.rigged_configurations.tensor_product_kr_tableaux import TensorProductOfKirillovReshetikhinTableaux
99
+ from sage.combinat.crystals.kirillov_reshetikhin import KirillovReshetikhinCrystal as KirillovReshetikhin
100
+ from sage.combinat.rigged_configurations.rc_crystal import CrystalOfRiggedConfigurations as RiggedConfigurations
101
+ from sage.combinat.shifted_primed_tableau import ShiftedPrimedTableaux_shape as ShiftedPrimedTableaux
102
+ from sage.combinat.partition_kleshchev import KleshchevPartitions
103
+ from sage.combinat.multiset_partition_into_sets_ordered import MinimajCrystal as Minimaj
104
+
105
+ from sage.combinat.crystals.induced_structure import InducedCrystal as Induced
106
+
107
+ from sage.combinat.crystals.kac_modules import CrystalOfKacModule as KacModule
108
+ from sage.combinat.crystals.kac_modules import CrystalOfOddNegativeRoots as OddNegativeRoots
109
+
110
+ from .tensor_product import TensorProductOfCrystals as TensorProduct
111
+ from .direct_sum import DirectSumOfCrystals as DirectSum
112
+
113
+ from . import catalog_kirillov_reshetikhin as kirillov_reshetikhin
114
+ from . import catalog_infinity_crystals as infinity
115
+ from . import catalog_elementary_crystals as elementary
@@ -0,0 +1,18 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ """
3
+ Catalog of elementary crystals
4
+
5
+ See :mod:`~sage.combinat.crystals.elementary_crystals`.
6
+
7
+ * :class:`Component <sage.combinat.crystals.elementary_crystals.ComponentCrystal>`
8
+ * :class:`Elementary <sage.combinat.crystals.elementary_crystals.ElementaryCrystal>`
9
+ or :class:`B <sage.combinat.crystals.elementary_crystals.ElementaryCrystal>`
10
+ * :class:`R <sage.combinat.crystals.elementary_crystals.RCrystal>`
11
+ * :class:`T <sage.combinat.crystals.elementary_crystals.TCrystal>`
12
+ """
13
+
14
+ from .elementary_crystals import TCrystal as T
15
+ from .elementary_crystals import RCrystal as R
16
+ from .elementary_crystals import ElementaryCrystal as Elementary
17
+ from .elementary_crystals import ElementaryCrystal as B
18
+ from .elementary_crystals import ComponentCrystal as Component
@@ -0,0 +1,33 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ r"""
3
+ Catalog of crystal models For `B(\infty)`
4
+
5
+ We currently have the following models:
6
+
7
+ * :class:`AlcovePaths
8
+ <sage.combinat.crystals.alcove_path.InfinityCrystalOfAlcovePaths>`
9
+ * :class:`GeneralizedYoungWalls
10
+ <sage.combinat.crystals.generalized_young_walls.InfinityCrystalOfGeneralizedYoungWalls>`
11
+ * :class:`LSPaths <sage.combinat.crystals.littelmann_path.InfinityCrystalOfLSPaths>`
12
+ * :class:`Multisegments <sage.combinat.crystals.multisegments.InfinityCrystalOfMultisegments>`
13
+ * :class:`MVPolytopes <sage.combinat.crystals.mv_polytopes.MVPolytopes>`
14
+ * :class:`NakajimaMonomials <sage.combinat.crystals.monomial_crystals.InfinityCrystalOfNakajimaMonomials>`
15
+ * :class:`PBW <sage.combinat.crystals.pbw_crystal.PBWCrystal>`
16
+ * :class:`PolyhedralRealization <sage.combinat.crystals.polyhedral_realization.InfinityCrystalAsPolyhedralRealization>`
17
+ * :class:`RiggedConfigurations
18
+ <sage.combinat.rigged_configurations.rc_infinity.InfinityCrystalOfRiggedConfigurations>`
19
+ * :class:`Star <sage.combinat.crystals.star_crystal.StarCrystal>`
20
+ * :class:`Tableaux <sage.combinat.crystals.infinity_crystals.InfinityCrystalOfTableaux>`
21
+ """
22
+
23
+ from .generalized_young_walls import InfinityCrystalOfGeneralizedYoungWalls as GeneralizedYoungWalls
24
+ from .multisegments import InfinityCrystalOfMultisegments as Multisegments
25
+ from .monomial_crystals import InfinityCrystalOfNakajimaMonomials as NakajimaMonomials
26
+ from sage.combinat.rigged_configurations.rc_infinity import InfinityCrystalOfRiggedConfigurations as RiggedConfigurations
27
+ from .infinity_crystals import InfinityCrystalOfTableaux as Tableaux
28
+ from sage.combinat.crystals.polyhedral_realization import InfinityCrystalAsPolyhedralRealization as PolyhedralRealization
29
+ from sage.combinat.crystals.pbw_crystal import PBWCrystal as PBW
30
+ from sage.combinat.crystals.mv_polytopes import MVPolytopes
31
+ from sage.combinat.crystals.star_crystal import StarCrystal as Star
32
+ from sage.combinat.crystals.littelmann_path import InfinityCrystalOfLSPaths as LSPaths
33
+ from sage.combinat.crystals.alcove_path import InfinityCrystalOfAlcovePaths as AlcovePaths
@@ -0,0 +1,18 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ """
3
+ Catalog of crystal models for Kirillov-Reshetikhin crystals
4
+
5
+ We currently have the following models:
6
+
7
+ * :func:`KashiwaraNakashimaTableaux
8
+ <sage.combinat.crystals.kirillov_reshetikhin.KashiwaraNakashimaTableaux>`
9
+ * :class:`~sage.combinat.rigged_configurations.kr_tableaux.KirillovReshetikhinTableaux`
10
+ * :func:`LSPaths <sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinCrystalFromLSPaths>`
11
+ * :func:`RiggedConfigurations
12
+ <sage.combinat.rigged_configurations.rigged_configurations.KirillovReshetikhinCrystal>`
13
+ """
14
+
15
+ from .kirillov_reshetikhin import KashiwaraNakashimaTableaux
16
+ from .kirillov_reshetikhin import KirillovReshetikhinCrystalFromLSPaths as LSPaths
17
+ from sage.combinat.rigged_configurations.kr_tableaux import KirillovReshetikhinTableaux
18
+ from sage.combinat.rigged_configurations.rigged_configurations import KirillovReshetikhinCrystal as RiggedConfigurations
@@ -0,0 +1,257 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.combinat sage.graphs sage.modules
3
+ r"""
4
+ An introduction to crystals
5
+ ===========================
6
+
7
+ Informally, a crystal `\mathcal{B}` is an oriented graph with edges
8
+ colored in some set `I` such that, for each `i\in I`, each node `x`
9
+ has:
10
+
11
+ - at most one `i`-successor, denoted `f_i x`;
12
+
13
+ - at most one `i`-predecessor, denoted `e_i x`.
14
+
15
+ By convention, one writes `f_i x=\emptyset` and `e_i x=\emptyset` when
16
+ `x` has no successor resp. predecessor.
17
+
18
+ One may think of `\mathcal{B}` as essentially a deterministic
19
+ automaton whose dual is also deterministic; in this context, the
20
+ `f_i`'s and `e_i`'s are respectively the transition functions of the
21
+ automaton and of its dual, and `\emptyset` is the sink.
22
+
23
+ A crystal comes further endowed with a weight function
24
+ `\operatorname{wt} : \mathcal{B} \to L` which satisfies
25
+ appropriate conditions.
26
+
27
+ In combinatorial representation theory, crystals are used as
28
+ combinatorial data to model representations of Lie algebra.
29
+
30
+ Axiomatic definition
31
+ --------------------
32
+
33
+ Let `C` be a Cartan type (:class:`CartanType`) with index set `I`,
34
+ and `L` be a realization of the weight lattice of the type `C`.
35
+ Let `\alpha_i` and `\alpha^{\vee}_i` denote the simple roots and
36
+ coroots respectively.
37
+
38
+ A type `C` crystal is a non-empty set `\mathcal{B}` endowed with maps
39
+ `\operatorname{wt} : \mathcal{B} \to L`,
40
+ `e_i, f_i : \mathcal{B} \to \mathcal{B} \cup \{\emptyset\}`, and
41
+ `\varepsilon_i, \varphi_i : \mathcal{B} \to \ZZ \cup \{-\infty\}`
42
+ for `i \in I` satisfying the following properties for all `i \in I`:
43
+
44
+ - for `b, b^{\prime} \in \mathcal{B}`, we have
45
+ `f_i b^{\prime} = b` if and only if `e_i b = b^{\prime}`;
46
+
47
+ - if `e_i b \in \mathcal{B}`, then:
48
+
49
+ * `\operatorname{wt}(e_i b) = \operatorname{wt}(b) + \alpha_i`,
50
+ * `\varepsilon_i(e_i b) = \varepsilon_i(b) - 1`,
51
+ * `\varphi_i(e_i b) = \varphi_i(b) + 1`;
52
+
53
+ - if `f_i b \in \mathcal{B}`, then:
54
+
55
+ * `\operatorname{wt}(f_i b) = \operatorname{wt}(b) - \alpha_i`,
56
+ * `\varepsilon_i(f_i b) = \varepsilon_i(b) + 1`,
57
+ * `\varphi_i(f_i b) = \varphi_i(b) - 1`;
58
+
59
+ - `\varphi_i(b) = \varepsilon_i(b) + \langle \alpha^{\vee}_i,
60
+ \operatorname{wt}(b) \rangle`,
61
+
62
+ - if `\varphi_i(b) = -\infty` for `b \in \mathcal{B}`,
63
+ then `e_i b = f_i b = \emptyset`.
64
+
65
+ Some further conditions are required to guarantee that this data
66
+ indeed models a representation of a Lie algebra. For finite simply
67
+ laced types a complete characterization is given by Stembridge's local
68
+ axioms [Ste2003]_.
69
+
70
+ EXAMPLES:
71
+
72
+ We construct the type `A_5` crystal on letters (or in representation
73
+ theoretic terms, the highest weight crystal of type `A_5`
74
+ corresponding to the highest weight `\Lambda_1`)::
75
+
76
+ sage: C = crystals.Letters(['A',5]); C
77
+ The crystal of letters for type ['A', 5]
78
+
79
+ It has a single highest weight element::
80
+
81
+ sage: C.highest_weight_vectors()
82
+ (1,)
83
+
84
+ A crystal is an enumerated set (see :class:`EnumeratedSets`); and we
85
+ can count and list its elements in the usual way::
86
+
87
+ sage: C.cardinality()
88
+ 6
89
+ sage: C.list()
90
+ [1, 2, 3, 4, 5, 6]
91
+
92
+ as well as use it in for loops::
93
+
94
+ sage: [x for x in C]
95
+ [1, 2, 3, 4, 5, 6]
96
+
97
+ Here are some more elaborate crystals (see their respective
98
+ documentations)::
99
+
100
+ sage: Tens = crystals.TensorProduct(C, C)
101
+ sage: Spin = crystals.Spins(['B', 3])
102
+ sage: Tab = crystals.Tableaux(['A', 3], shape = [2,1,1])
103
+ sage: Fast = crystals.FastRankTwo(['B', 2], shape = [3/2, 1/2])
104
+ sage: KR = crystals.KirillovReshetikhin(['A',2,1],1,1)
105
+
106
+ One can get (currently) crude plotting via::
107
+
108
+ sage: Tab.plot() # needs sage.plot
109
+ Graphics object consisting of 52 graphics primitives
110
+
111
+ If dot2tex is installed, one can obtain nice latex pictures via::
112
+
113
+ sage: K = crystals.KirillovReshetikhin(['A',3,1], 1,1)
114
+ sage: view(K, pdflatex=True) # optional - dot2tex graphviz, not tested (opens external window)
115
+
116
+ or with colored edges::
117
+
118
+ sage: K = crystals.KirillovReshetikhin(['A',3,1], 1,1)
119
+ sage: G = K.digraph()
120
+ sage: G.set_latex_options(color_by_label={0:"black", 1:"red", 2:"blue", 3:"green"})
121
+ sage: view(G, pdflatex=True) # optional - dot2tex graphviz, not tested (opens external window)
122
+
123
+ For rank two crystals, there is an alternative method of getting
124
+ metapost pictures. For more information see ``C.metapost?``.
125
+
126
+ .. SEEALSO:: :ref:`The overview of crystal features in Sage<sage.combinat.crystals.all>`
127
+
128
+ .. TODO::
129
+
130
+ - Vocabulary and conventions:
131
+
132
+ - For a classical crystal: connected / highest weight /
133
+ irreducible
134
+
135
+ - ...
136
+
137
+ - Layout instructions for plot() for rank 2 types
138
+
139
+ - RestrictionOfCrystal
140
+
141
+
142
+ The crystals library in Sage grew up from an initial implementation in
143
+ MuPAD-Combinat (see <MuPAD-Combinat>/lib/COMBINAT/crystals.mu).
144
+ """
145
+
146
+ #*****************************************************************************
147
+ # Copyright (C) 2007 Anne Schilling <anne at math.ucdavis.edu>
148
+ # Nicolas Thiery <nthiery at users.sf.net>
149
+ #
150
+ # Distributed under the terms of the GNU General Public License (GPL)
151
+ #
152
+ # This code is distributed in the hope that it will be useful,
153
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
154
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
155
+ # General Public License for more details.
156
+ #
157
+ # The full text of the GPL is available at:
158
+ #
159
+ # http://www.gnu.org/licenses/
160
+ # ***************************************************************************
161
+ # Acknowledgment: most of the design and implementation of this
162
+ # library is heavily inspired from MuPAD-Combinat.
163
+ # ***************************************************************************
164
+
165
+ from sage.combinat.backtrack import GenericBacktracker
166
+
167
+
168
+ class CrystalBacktracker(GenericBacktracker):
169
+ def __init__(self, crystal, index_set=None):
170
+ r"""
171
+ Time complexity: `O(nF)` amortized for each produced
172
+ element, where `n` is the size of the index set, and `F` is
173
+ the cost of computing `e` and `f` operators.
174
+
175
+ Memory complexity: `O(D)` where `D` is the depth of the crystal.
176
+
177
+ Principle of the algorithm:
178
+
179
+ Let `C` be a classical crystal. It's an acyclic graph where each
180
+ connected component has a unique element without predecessors (the
181
+ highest weight element for this component). Let's assume for
182
+ simplicity that `C` is irreducible (i.e. connected) with highest
183
+ weight element `u`.
184
+
185
+ One can define a natural spanning tree of `C` by taking
186
+ `u` as the root of the tree, and for any other element
187
+ `y` taking as ancestor the element `x` such that
188
+ there is an `i`-arrow from `x` to `y` with
189
+ `i` minimal. Then, a path from `u` to `y`
190
+ describes the lexicographically smallest sequence
191
+ `i_1,\dots,i_k` such that
192
+ `(f_{i_k} \circ f_{i_1})(u)=y`.
193
+
194
+ Morally, the iterator implemented below just does a depth first
195
+ search walk through this spanning tree. In practice, this can be
196
+ achieved recursively as follows: take an element `x`, and
197
+ consider in turn each successor `y = f_i(x)`, ignoring
198
+ those such that `y = f_j(x^{\prime})` for some `x^{\prime}` and
199
+ `j<i` (this can be tested by computing `e_j(y)`
200
+ for `j<i`).
201
+
202
+ EXAMPLES::
203
+
204
+ sage: from sage.combinat.crystals.crystals import CrystalBacktracker
205
+ sage: C = crystals.Tableaux(['B',3],shape=[3,2,1])
206
+ sage: CB = CrystalBacktracker(C)
207
+ sage: len(list(CB))
208
+ 1617
209
+ sage: CB = CrystalBacktracker(C, [1,2])
210
+ sage: len(list(CB))
211
+ 8
212
+ """
213
+ GenericBacktracker.__init__(self, None, None)
214
+ self._crystal = crystal
215
+ if index_set is None:
216
+ self._index_set = crystal.index_set()
217
+ else:
218
+ self._index_set = index_set
219
+
220
+ def _rec(self, x, state):
221
+ """
222
+ Return an iterator for the (immediate) children of ``x`` in the search
223
+ tree.
224
+
225
+ EXAMPLES::
226
+
227
+ sage: from sage.combinat.crystals.crystals import CrystalBacktracker
228
+ sage: C = crystals.Letters(['A', 5])
229
+ sage: CB = CrystalBacktracker(C)
230
+ sage: list(CB._rec(C(1), 'n/a'))
231
+ [(2, 'n/a', True)]
232
+ """
233
+ #We will signal the initial case by having a object and state
234
+ #of None and consider it separately.
235
+ if x is None and state is None:
236
+ for gen in self._crystal.highest_weight_vectors():
237
+ yield gen, "n/a", True
238
+ return
239
+
240
+ # Run through the children y of x
241
+ for i in self._index_set:
242
+ y = x.f(i)
243
+ if y is None:
244
+ continue
245
+ # Ignore those which can be reached by an arrow with smaller label
246
+ hasParent = False
247
+ for j in self._index_set:
248
+ if j == i:
249
+ break
250
+ if y.e(j) is not None:
251
+ hasParent = True
252
+ break
253
+ if hasParent:
254
+ continue
255
+
256
+ # yield y and all elements further below
257
+ yield y, "n/a", True