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,1076 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.combinat sage.graphs sage.modules
3
+ r"""
4
+ Crystals of generalized Young walls
5
+
6
+ Generalized Young walls are certain generalizations of Young tableaux
7
+ introduced in [KS2010]_ and designed to be a realization of the crystals
8
+ `\mathcal{B}(\infty)` and `\mathcal{B}(\lambda)` in type `A_n^{(1)}`.
9
+
10
+ REFERENCES:
11
+
12
+ - [KLRS2016]_
13
+ - [KS2010]_
14
+
15
+ AUTHORS:
16
+
17
+ - Lucas David-Roesler: initial version
18
+ - Ben Salisbury: initial version
19
+ - Travis Scrimshaw: initial version
20
+ """
21
+
22
+ # *****************************************************************************
23
+ # Copyright (C) 2013
24
+ #
25
+ # Lucas David-Roesler (roesler at lvc dot edu)
26
+ # Ben Salisbury (bsalisbury at ccny dot cuny dot edu)
27
+ # Travis Scrimshaw (tscrim at ucdavis dot edu)
28
+ #
29
+ # Distributed under the terms of the GNU General Public License (GPL)
30
+ # https://www.gnu.org/licenses/
31
+ # *****************************************************************************
32
+
33
+ import re
34
+ from copy import deepcopy
35
+ from sage.combinat.root_system.cartan_type import CartanType
36
+ from sage.structure.parent import Parent
37
+ from sage.structure.unique_representation import UniqueRepresentation
38
+ from sage.combinat.combinat import CombinatorialElement
39
+ from sage.categories.regular_crystals import RegularCrystals
40
+ from sage.categories.highest_weight_crystals import HighestWeightCrystals
41
+ from sage.categories.infinite_enumerated_sets import InfiniteEnumeratedSets
42
+ from sage.combinat.root_system.root_system import RootSystem
43
+
44
+
45
+ class GeneralizedYoungWall(CombinatorialElement):
46
+ r"""
47
+ A generalized Young wall.
48
+
49
+ For more information, see
50
+ :class:`~sage.combinat.crystals.generalized_young_walls.InfinityCrystalOfGeneralizedYoungWalls`.
51
+
52
+ EXAMPLES::
53
+
54
+ sage: Y = crystals.infinity.GeneralizedYoungWalls(4)
55
+ sage: mg = Y.module_generators[0]; mg.pp()
56
+ 0
57
+ sage: mg.f_string([1,2,0,1]).pp()
58
+ 1|2|
59
+ 0|1|
60
+ |
61
+ """
62
+
63
+ def __init__(self, parent, data):
64
+ r"""
65
+ EXAMPLES::
66
+
67
+ sage: Y = crystals.infinity.GeneralizedYoungWalls(2)
68
+ sage: mg = Y.module_generators[0]
69
+ sage: TestSuite(mg).run()
70
+ """
71
+ i = len(data) - 1
72
+ while i >= 0 and not data[i]:
73
+ data.pop()
74
+ i -= 1
75
+ self.rows = len(data)
76
+ if not data:
77
+ self.cols = 0
78
+ else:
79
+ self.cols = max(len(r) for r in data)
80
+ self.data = data
81
+ CombinatorialElement.__init__(self, parent, data)
82
+
83
+ def _repr_(self):
84
+ r"""
85
+ EXAMPLES::
86
+
87
+ sage: y = crystals.infinity.GeneralizedYoungWalls(3)([[0],[1,0,3,2],[2,1],[3,2,1,0,3,2],[0],[],[2]])
88
+ sage: y
89
+ [[0], [1, 0, 3, 2], [2, 1], [3, 2, 1, 0, 3, 2], [0], [], [2]]
90
+ """
91
+ return repr(self.data)
92
+
93
+ def _repr_diagram(self):
94
+ r"""
95
+ Return a string representation of the diagram of ``self``.
96
+
97
+ EXAMPLES::
98
+
99
+ sage: y = crystals.infinity.GeneralizedYoungWalls(2)([[0,2,1],[1,0,2,1,0],[],[0],[1,0,2],[],[],[1]])
100
+ sage: print(y._repr_diagram())
101
+ 1|
102
+ |
103
+ |
104
+ 2|0|1|
105
+ 0|
106
+ |
107
+ 0|1|2|0|1|
108
+ 1|2|0|
109
+ """
110
+ if not self.data:
111
+ return '0'
112
+ ret = ""
113
+ for row in reversed(self.data):
114
+ wall = ''
115
+ for elem in reversed(row):
116
+ wall += str(elem)
117
+ wall += '|'
118
+ if row == []:
119
+ wall += '|'
120
+ ret += wall.rjust(2 * self.cols + 1) + "\n"
121
+ return ret
122
+
123
+ def _ascii_art_(self):
124
+ r"""
125
+ Return an ascii art representation of ``self``.
126
+
127
+ EXAMPLES::
128
+
129
+ sage: y = crystals.infinity.GeneralizedYoungWalls(2)([[0,2,1],[1,0,2,1,0],[],[0],[1,0,2],[],[],[1]])
130
+ sage: ascii_art(y)
131
+ 1|
132
+ |
133
+ |
134
+ 2|0|1|
135
+ 0|
136
+ |
137
+ 0|1|2|0|1|
138
+ 1|2|0|
139
+ """
140
+ from sage.typeset.ascii_art import AsciiArt
141
+ return AsciiArt(self._repr_diagram().splitlines())
142
+
143
+ def _unicode_art_(self):
144
+ """
145
+ Return a unicode art representation of ``self``.
146
+
147
+ TESTS::
148
+
149
+ sage: y = crystals.infinity.GeneralizedYoungWalls(2)([[0,2,1],[1,0,2,1,0],[],[0],[1,0,2],[],[],[1]])
150
+ sage: unicode_art(y)
151
+ ┌───┐
152
+ │ 1 │
153
+ └───┘
154
+
155
+
156
+
157
+ ┌───┬───┬───┐
158
+ │ 2 │ 0 │ 1 │
159
+ └───┴───┼───┤
160
+ │ 0 │
161
+ └───┘
162
+
163
+ ┌───┬───┬───┬───┬───┐
164
+ │ 0 │ 1 │ 2 │ 0 │ 1 │
165
+ └───┴───┼───┼───┼───┤
166
+ │ 1 │ 2 │ 0 │
167
+ └───┴───┴───┘
168
+ """
169
+ from sage.typeset.unicode_art import UnicodeArt
170
+ if not self.data:
171
+ return UnicodeArt(["0"])
172
+
173
+ from sage.combinat.output import ascii_art_table
174
+ import unicodedata
175
+ v = unicodedata.lookup('BOX DRAWINGS LIGHT VERTICAL')
176
+ vl = unicodedata.lookup('BOX DRAWINGS LIGHT VERTICAL AND LEFT')
177
+ table = [[None] * (self.cols - len(row)) + list(reversed(row))
178
+ for row in reversed(self)]
179
+ ret = []
180
+ for i, row in enumerate(ascii_art_table(table, use_unicode=True).splitlines()):
181
+ if row[-1] == " ":
182
+ if i % 2 == 0:
183
+ ret.append(row[:-1] + vl)
184
+ else:
185
+ ret.append(row[:-1] + v)
186
+ else:
187
+ ret.append(row)
188
+ return UnicodeArt(ret)
189
+
190
+ def __eq__(self, other):
191
+ r"""
192
+ EXAMPLES::
193
+
194
+ sage: GYW = crystals.infinity.GeneralizedYoungWalls(2)
195
+ sage: y = GYW([[],[1,0],[2,1]])
196
+ sage: x = GYW([[],[1,0],[2,1]])
197
+ sage: z = GYW([[],[1],[2]])
198
+ sage: x == y
199
+ True
200
+ sage: x == z
201
+ False
202
+ """
203
+ if isinstance(other, GeneralizedYoungWall):
204
+ return self.data == other.data
205
+ return self.data == other
206
+
207
+ def __hash__(self):
208
+ """
209
+ Return the hash of ``self``.
210
+
211
+ EXAMPLES::
212
+
213
+ sage: GYW = crystals.infinity.GeneralizedYoungWalls(2)
214
+ sage: h = hash(GYW)
215
+ """
216
+ return hash(tuple(tuple(u) for u in self.data))
217
+
218
+ def raw_signature(self, i):
219
+ r"""
220
+ Return the sequence from `\{+,-\}` obtained from all `i`-admissible
221
+ slots and removable `i`-boxes without canceling any `(+,-)`-pairs.
222
+ The result also notes the row and column of the sign.
223
+
224
+ EXAMPLES::
225
+
226
+ sage: x = crystals.infinity.GeneralizedYoungWalls(3)([[],[1,0,3,2],[2,1],[3,2,1,0,3,2],[],[],[2]])
227
+ sage: x.raw_signature(2)
228
+ [['-', 3, 6], ['-', 1, 4], ['-', 6, 1]]
229
+ """
230
+ sig = []
231
+ rank = self.parent().cartan_type().rank() # n+1
232
+ for row in range(self.rows):
233
+ if self.data[row] == [] and i == (row % rank):
234
+ sig.append(['+', row, 0])
235
+ elif self.data[row] == []:
236
+ continue
237
+ elif self.data[row][-1] == ((i + 1) % rank):
238
+ sig.append(['+', row, len(self.data[row]) + 1])
239
+ elif self.data[row][-1] == i:
240
+ sig.append(['-', row, len(self.data[row])])
241
+ return sorted(sig, key=self._sig_sort)
242
+
243
+ def _sig_sort(self, a):
244
+ r"""
245
+ Internal command used to appropriately sort the output
246
+ from :meth:`raw_signature()`.
247
+
248
+ INPUT:
249
+
250
+ - ``a`` -- list of the form ``['s',j,k]`` where `s` is a string, `j` is
251
+ an integer and `k` is an integer
252
+
253
+ EXAMPLES::
254
+
255
+ sage: hw = crystals.infinity.GeneralizedYoungWalls(5)([])
256
+ sage: hw._sig_sort(['+',1,0])
257
+ (0, 1)
258
+ """
259
+ return (-a[2], a[1])
260
+
261
+ def generate_signature(self, i):
262
+ r"""
263
+ The `i`-signature of ``self`` (with whitespace where cancellation
264
+ occurs) together with the unreduced sequence from `\{+,-\}`. The
265
+ result also records to the row and column position of the sign.
266
+
267
+ EXAMPLES::
268
+
269
+ sage: y = crystals.infinity.GeneralizedYoungWalls(2)([[0],[1,0],[2,1,0,2],[],[1]])
270
+ sage: y.generate_signature(1)
271
+ ([['+', 2, 5], ['-', 4, 1]], ' ')
272
+ """
273
+ sig = []
274
+ rank = self.parent().cartan_type().classical().rank()
275
+ for row in range(self.rows):
276
+ if self.data[row] == [] and i == (row % (rank + 1)):
277
+ sig.append(['+', row, 0])
278
+ elif self.data[row] == []:
279
+ continue
280
+ elif self.data[row][-1] == ((i + 1) % (rank + 1)):
281
+ sig.append(['+', row, len(self.data[row]) + 1])
282
+ elif self.data[row][-1] == i:
283
+ sig.append(['-', row, len(self.data[row])])
284
+ sig = sorted(sig, key=self._sig_sort)
285
+ strsig = ''.join(x[0] for x in sig)
286
+ reducedsig = strsig
287
+ while re.search(r"\+\s*-", reducedsig):
288
+ reducedsig = re.sub(r"\+\s*-", lambda match: ''.ljust(len(match.group(0))), reducedsig)
289
+ return (sig, reducedsig)
290
+
291
+ def signature(self, i):
292
+ r"""
293
+ Return the `i`-signature of ``self``.
294
+
295
+ The signature is obtained by reading ``self`` in columns bottom to top starting from the left.
296
+ Then add a `-` at every `i`-box which may be removed from ``self`` and still obtain a legal
297
+ generalized Young wall, and add a `+` at each site for which an `i`-box may be added and still
298
+ obtain a valid generalized Young wall. Then successively cancel any `(+,-)`-pair to obtain a
299
+ sequence of the form `- \cdots -+ \cdots +`. This resulting sequence is the output.
300
+
301
+ EXAMPLES::
302
+
303
+ sage: y = crystals.infinity.GeneralizedYoungWalls(2)([[0],[1,0],[2,1,0,2],[],[1]])
304
+ sage: y.signature(1)
305
+ ''
306
+
307
+ sage: x = crystals.infinity.GeneralizedYoungWalls(3)([[],[1,0,3,2],[2,1],[3,2,1,0,3,2],[],[],[2]])
308
+ sage: x.signature(2)
309
+ '---'
310
+ """
311
+ return self.generate_signature(i)[1].strip()
312
+
313
+ def pp(self):
314
+ r"""
315
+ Pretty print ``self``.
316
+
317
+ EXAMPLES::
318
+
319
+ sage: y = crystals.infinity.GeneralizedYoungWalls(2)([[0,2,1],[1,0,2,1,0],[],[0],[1,0,2],[],[],[1]])
320
+ sage: y.pp()
321
+ 1|
322
+ |
323
+ |
324
+ 2|0|1|
325
+ 0|
326
+ |
327
+ 0|1|2|0|1|
328
+ 1|2|0|
329
+ """
330
+ print(self._repr_diagram())
331
+
332
+ def content(self):
333
+ r"""
334
+ Return total number of blocks in ``self``.
335
+
336
+ EXAMPLES::
337
+
338
+ sage: y = crystals.infinity.GeneralizedYoungWalls(2)([[0],[1,0],[2,1,0,2],[],[1]])
339
+ sage: y.content()
340
+ 8
341
+
342
+ sage: x = crystals.infinity.GeneralizedYoungWalls(3)([[],[1,0,3,2],[2,1],[3,2,1,0,3,2],[],[],[2]])
343
+ sage: x.content()
344
+ 13
345
+ """
346
+ return sum(len(r) for r in self.data)
347
+
348
+ def number_of_parts(self):
349
+ r"""
350
+ Return the value of `\mathscr{N}` on ``self``.
351
+
352
+ In [KLRS2016]_, the statistic `\mathscr{N}` was defined on elements in
353
+ `\mathcal{Y}(\infty)` which counts how many parts are in the
354
+ corresponding Kostant partition. Specifically, the computation of
355
+ `\mathscr{N}(Y)` is done using the following algorithm:
356
+
357
+ - If `Y` has no rows whose right-most box is colored `n` and such that
358
+ the length of this row is a multiple of `n+1`, then `\mathscr{N}(Y)`
359
+ is the total number of distinct rows in `Y`, not counting multiplicity.
360
+
361
+ - Otherwise, search `Y` for the longest row such that the right-most box
362
+ is colored `n` and such that the total number of boxes in the row is
363
+ `k(n+1)` for some `k\ge 1`. Replace this row by `n+1` distinct rows
364
+ of length `k`, reordering all rows, if necessary, so that the result
365
+ is a proper wall. (Note that the resulting wall may no longer be
366
+ reduced.) Repeat the search and replace process for all other rows of
367
+ the above form for each `k' < k`. Then `\mathscr{N}(Y)` is the number
368
+ of distinct rows, not counting multiplicity, in the wall resulting
369
+ from this process.
370
+
371
+ EXAMPLES::
372
+
373
+ sage: Y = crystals.infinity.GeneralizedYoungWalls(3)
374
+ sage: y = Y([[0],[],[],[],[0],[],[],[],[0]])
375
+ sage: y.number_of_parts()
376
+ 1
377
+
378
+ sage: Y = crystals.infinity.GeneralizedYoungWalls(3)
379
+ sage: y = Y([[0,3,2],[1,0],[],[],[0,3],[1,0],[],[],[0]])
380
+ sage: y.number_of_parts()
381
+ 4
382
+
383
+ sage: Y = crystals.infinity.GeneralizedYoungWalls(2)
384
+ sage: y = Y([[0,2,1],[1,0],[2,1,0,2,1,0,2,1,0],[],[2,1,0,2,1,0]])
385
+ sage: y.number_of_parts()
386
+ 8
387
+ """
388
+ n = self.parent().cartan_type().rank() - 1
389
+ new = self.data[:]
390
+ i = 0
391
+ while i < len(new):
392
+ r = new[i]
393
+ if not r or r in new[i + 1:]:
394
+ new.pop(i)
395
+ elif r[0] == n and not len(r) % (n + 1):
396
+ for j in range(n + 1):
397
+ temp = [k % (n + 1)
398
+ for k in range(j + len(r) // (n + 1) - 1, j - 1, -1)]
399
+ if temp not in new:
400
+ new.insert(i + 1, temp)
401
+ new.pop(i)
402
+ else:
403
+ i += 1
404
+ return len(new)
405
+
406
+ def sum_of_weighted_row_lengths(self):
407
+ r"""
408
+ Return the value of `\mathscr{M}` on ``self``.
409
+
410
+ Let `\mathcal{Y}_0 \subset \mathcal{Y}(\infty)` be the set of
411
+ generalized Young walls which have no rows whose right-most box is
412
+ colored `n`. For `Y \in \mathcal{Y}_0`,
413
+
414
+ .. MATH::
415
+
416
+ \mathscr{M}(Y) = \sum_{i=1}^n (i+1)M_i(Y),
417
+
418
+ where `M_i(Y)` is the number of nonempty rows in `Y` whose right-most
419
+ box is colored `i-1`.
420
+
421
+ EXAMPLES::
422
+
423
+ sage: Y = crystals.infinity.GeneralizedYoungWalls(2)
424
+ sage: y = Y([[0,2,1,0,2],[1,0,2],[],[0,2],[1,0],[],[0],[1,0]])
425
+ sage: y.sum_of_weighted_row_lengths()
426
+ 15
427
+ """
428
+ n = self.parent().cartan_type().rank() - 1
429
+
430
+ def m(i):
431
+ mod = (i - 1) % (n + 1)
432
+ return len([1 for r in self.data if r and r[0] == mod])
433
+
434
+ for r in self.data:
435
+ if r and r[0] == n:
436
+ raise ValueError('Statistic only valid for generalized Young walls in Y_0')
437
+ return sum((i + 1) * m(i) for i in range(1, n + 1))
438
+
439
+ def e(self, i):
440
+ r"""
441
+ Return the application of the Kashiwara raising operator
442
+ `e_i` on ``self``.
443
+
444
+ This will remove the `i`-colored box corresponding to the
445
+ rightmost `+` in ``self.signature(i)``.
446
+
447
+ EXAMPLES::
448
+
449
+ sage: x = crystals.infinity.GeneralizedYoungWalls(3)([[],[1,0,3,2],[2,1],[3,2,1,0,3,2],[],[],[2]])
450
+ sage: x.e(2)
451
+ [[], [1, 0, 3, 2], [2, 1], [3, 2, 1, 0, 3, 2]]
452
+ sage: _.e(2)
453
+ [[], [1, 0, 3], [2, 1], [3, 2, 1, 0, 3, 2]]
454
+ sage: _.e(2)
455
+ [[], [1, 0, 3], [2, 1], [3, 2, 1, 0, 3]]
456
+ sage: _.e(2)
457
+ """
458
+ signature = self.generate_signature(i)
459
+ raw_signature = signature[0]
460
+ lastminus = signature[1].rfind('-')
461
+ newdata = []
462
+ if lastminus > -1:
463
+ deletionrow = raw_signature[lastminus][1]
464
+ for r in range(self.rows):
465
+ if r == deletionrow:
466
+ newdata.append(list(self.data[r][:-1]))
467
+ else:
468
+ newdata.append(list(self.data[r]))
469
+ return self.__class__(self.parent(), newdata)
470
+ else:
471
+ return None
472
+
473
+ def f(self, i):
474
+ r"""
475
+ Return the application of the Kashiwara lowering operator
476
+ `f_i` on ``self``.
477
+
478
+ This will add an `i`-colored colored box to the site corresponding
479
+ to the leftmost plus in ``self.signature(i)``.
480
+
481
+ EXAMPLES::
482
+
483
+ sage: hw = crystals.infinity.GeneralizedYoungWalls(2)([])
484
+ sage: hw.f(1)
485
+ [[], [1]]
486
+ sage: _.f(2)
487
+ [[], [1], [2]]
488
+ sage: _.f(0)
489
+ [[], [1, 0], [2]]
490
+ sage: _.f(0)
491
+ [[0], [1, 0], [2]]
492
+ """
493
+ signature = self.generate_signature(i)
494
+ raw_signature = signature[0]
495
+ firstplus = signature[1].find('+')
496
+ newdata = deepcopy(self.data)
497
+ if firstplus > -1:
498
+ additionrow = raw_signature[firstplus][1]
499
+ newdata[additionrow].append(i)
500
+ else:
501
+ while len(newdata) % self.cartan_type().rank() != i:
502
+ newdata.append([])
503
+ newdata.append([i])
504
+ return self.__class__(self.parent(), newdata)
505
+
506
+ def latex_large(self) -> str:
507
+ r"""
508
+ Generate LaTeX code for ``self`` but the output is larger.
509
+
510
+ This requires TikZ.
511
+
512
+ EXAMPLES::
513
+
514
+ sage: x = crystals.infinity.GeneralizedYoungWalls(3)([[],[1,0,3,2],[2,1],[3,2,1,0,3,2],[],[],[2]])
515
+ sage: x.latex_large()
516
+ '\\begin{tikzpicture}[baseline=5,scale=.45] \n \\foreach \\x [count=\\s from 0] in \n{{},{1,0,3,2},{2,1},{3,2,1,0,3,2},{},{},{2}} \n{\\foreach \\y [count=\\t from 0] in \\x { \\node[font=\\scriptsize] at (-\\t,\\s) {$\\y$}; \n \\draw (-\\t+.5,\\s+.5) to (-\\t-.5,\\s+.5); \n \\draw (-\\t+.5,\\s-.5) to (-\\t-.5,\\s-.5); \n \\draw (-\\t-.5,\\s-.5) to (-\\t-.5,\\s+.5); } \n \\draw[-,thick] (.5,\\s+1) to (.5,-.5) to (-\\s-1,-.5); } \n \\end{tikzpicture} \n'
517
+ """
518
+ s = ""
519
+ if not self.data:
520
+ s += "\\emptyset"
521
+ else:
522
+ s += "\\begin{tikzpicture}[baseline=5,scale=.45] \n \\foreach \\x [count=\\s from 0] in \n"
523
+ s += "{" + ','.join("{" + ','.join(str(i) for i in r) + "}"
524
+ for r in self.data) + "} \n"
525
+ s += "{\\foreach \\y [count=\\t from 0] in \\x { \\node[font=\\scriptsize] at (-\\t,\\s) {$\\y$}; \n \\draw (-\\t+.5,\\s+.5) to (-\\t-.5,\\s+.5); \n \\draw (-\\t+.5,\\s-.5) to (-\\t-.5,\\s-.5); \n \\draw (-\\t-.5,\\s-.5) to (-\\t-.5,\\s+.5); } \n \\draw[-,thick] (.5,\\s+1) to (.5,-.5) to (-\\s-1,-.5); } \n \\end{tikzpicture} \n"
526
+ return s
527
+
528
+ def _latex_(self) -> str:
529
+ r"""
530
+ Generate LaTeX code for ``self``.
531
+
532
+ This requires TikZ.
533
+
534
+ EXAMPLES::
535
+
536
+ sage: x = crystals.infinity.GeneralizedYoungWalls(3)([[],[1,0,3,2],[2,1],[3,2,1,0,3,2],[],[],[2]])
537
+ sage: x._latex_()
538
+ '\\begin{tikzpicture}[baseline=5,scale=.25] \\foreach \\x [count=\\s from 0] in \n{{},{1,0,3,2},{2,1},{3,2,1,0,3,2},{},{},{2}} \n{\\foreach \\y [count=\\t from 0] in \\x { \\node[font=\\tiny] at (-\\t,\\s) {$\\y$}; \n \\draw (-\\t+.5,\\s+.5) to (-\\t-.5,\\s+.5); \n \\draw (-\\t+.5,\\s-.5) to (-\\t-.5,\\s-.5); \n \\draw (-\\t-.5,\\s-.5) to (-\\t-.5,\\s+.5); } \n \\draw[-] (.5,\\s+1) to (.5,-.5) to (-\\s-1,-.5); } \n \\end{tikzpicture} \n'
539
+ """
540
+ s = ""
541
+ if not self.data:
542
+ s += "\\emptyset"
543
+ else:
544
+ s += "\\begin{tikzpicture}[baseline=5,scale=.25] \\foreach \\x [count=\\s from 0] in \n"
545
+ s += "{" + ','.join("{" + ','.join(str(i) for i in r) + "}"
546
+ for r in self.data) + "} \n"
547
+ s += "{\\foreach \\y [count=\\t from 0] in \\x { \\node[font=\\tiny] at (-\\t,\\s) {$\\y$}; \n \\draw (-\\t+.5,\\s+.5) to (-\\t-.5,\\s+.5); \n \\draw (-\\t+.5,\\s-.5) to (-\\t-.5,\\s-.5); \n \\draw (-\\t-.5,\\s-.5) to (-\\t-.5,\\s+.5); } \n \\draw[-] (.5,\\s+1) to (.5,-.5) to (-\\s-1,-.5); } \n \\end{tikzpicture} \n"
548
+ return s
549
+
550
+ def weight(self, root_lattice=False):
551
+ r"""
552
+ Return the weight of ``self``.
553
+
554
+ INPUT:
555
+
556
+ - ``root_lattice`` -- boolean determining whether weight should appear
557
+ in root lattice or not in extended affine weight lattice
558
+
559
+ EXAMPLES::
560
+
561
+ sage: x = crystals.infinity.GeneralizedYoungWalls(3)([[],[1,0,3,2],[2,1],[3,2,1,0,3,2],[],[],[2]])
562
+ sage: x.weight()
563
+ 2*Lambda[0] + Lambda[1] - 4*Lambda[2] + Lambda[3] - 2*delta
564
+ sage: x.weight(root_lattice=True)
565
+ -2*alpha[0] - 3*alpha[1] - 5*alpha[2] - 3*alpha[3]
566
+ """
567
+ L = self.cartan_type().root_system().root_lattice()
568
+ alpha = L.simple_roots()
569
+ W = sum(-1 * alpha[i] for r in self.data for i in r)
570
+ if not root_lattice:
571
+ E = self.cartan_type().root_system().weight_lattice(extended=True)
572
+ return E(W)
573
+ return L(W)
574
+
575
+ def epsilon(self, i):
576
+ r"""
577
+ Return the number of `i`-colored arrows in the `i`-string above
578
+ ``self`` in the crystal graph.
579
+
580
+ EXAMPLES::
581
+
582
+ sage: y = crystals.infinity.GeneralizedYoungWalls(3)([[],[1,0,3,2],[2,1],[3,2,1,0,3,2],[],[],[2]])
583
+ sage: y.epsilon(1)
584
+ 0
585
+ sage: y.epsilon(2)
586
+ 3
587
+ sage: y.epsilon(0)
588
+ 0
589
+ """
590
+ if i not in self.index_set():
591
+ raise ValueError("i must be in the index set")
592
+ eps = 0
593
+ while True:
594
+ self = self.e(i)
595
+ if self is None:
596
+ break
597
+ eps += 1
598
+ return eps
599
+
600
+ def Epsilon(self):
601
+ r"""
602
+ Return `\sum_{i=0}^n \varepsilon_i(Y) \Lambda_i` where `Y` is ``self``.
603
+
604
+ EXAMPLES::
605
+
606
+ sage: y = crystals.infinity.GeneralizedYoungWalls(3)([[0],[1,0,3,2],[2,1],[3,2,1,0,3,2],[0],[],[2]])
607
+ sage: y.Epsilon()
608
+ Lambda[0] + 3*Lambda[2]
609
+ """
610
+ La = self.cartan_type().root_system().weight_lattice().fundamental_weights()
611
+ return sum(self.epsilon(i) * La[i] for i in self.index_set())
612
+
613
+ def phi(self, i):
614
+ r"""
615
+ Return the value `\varepsilon_i(Y) + \langle h_i,
616
+ \mathrm{wt}(Y)\rangle`, where `h_i` is the `i`-th simple
617
+ coroot and `Y` is ``self``.
618
+
619
+ EXAMPLES::
620
+
621
+ sage: y = crystals.infinity.GeneralizedYoungWalls(3)([[0],[1,0,3,2],[2,1],[3,2,1,0,3,2],[0],[],[2]])
622
+ sage: y.phi(1)
623
+ 3
624
+ sage: y.phi(2)
625
+ -1
626
+ """
627
+ h = self.parent().weight_lattice_realization().simple_coroots()
628
+ return self.epsilon(i) + self.weight(root_lattice=False).scalar(h[i])
629
+
630
+ def Phi(self):
631
+ r"""
632
+ Return `\sum_{i=0}^n \varphi_i(Y) \Lambda_i` where `Y` is ``self``.
633
+
634
+ EXAMPLES::
635
+
636
+ sage: y = crystals.infinity.GeneralizedYoungWalls(3)([[0],[1,0,3,2],[2,1],[3,2,1,0,3,2],[0],[],[2]])
637
+ sage: y.Phi()
638
+ -Lambda[0] + 3*Lambda[1] - Lambda[2] + 3*Lambda[3]
639
+
640
+ sage: x = crystals.infinity.GeneralizedYoungWalls(3)([[],[1,0,3,2],[2,1],[3,2,1,0,3,2],[],[],[2]])
641
+ sage: x.Phi()
642
+ 2*Lambda[0] + Lambda[1] - Lambda[2] + Lambda[3]
643
+ """
644
+ La = self.cartan_type().root_system().weight_lattice(extended=True).fundamental_weights()
645
+ return sum(self.phi(i) * La[i] for i in self.index_set())
646
+
647
+ def column(self, k):
648
+ r"""
649
+ Return the list of boxes from the ``k``-th column of ``self``.
650
+
651
+ EXAMPLES::
652
+
653
+ sage: y = crystals.infinity.GeneralizedYoungWalls(3)([[0],[1,0,3,2],[2,1],[3,2,1,0,3,2],[0],[],[2]])
654
+ sage: y.column(2)
655
+ [None, 0, 1, 2, None, None, None]
656
+
657
+ sage: hw = crystals.infinity.GeneralizedYoungWalls(5)([])
658
+ sage: hw.column(1)
659
+ []
660
+ """
661
+ return [row[k - 1] if k - 1 < len(row) else None
662
+ for row in self.data]
663
+
664
+ def a(self, i, k):
665
+ r"""
666
+ Return the number `a_i(k)` of `i`-colored boxes in the ``k``-th
667
+ column of ``self``.
668
+
669
+ EXAMPLES::
670
+
671
+ sage: y = crystals.infinity.GeneralizedYoungWalls(3)([[0],[1,0,3,2],[2,1],[3,2,1,0,3,2],[0],[],[2]])
672
+ sage: y.a(1,2)
673
+ 1
674
+ sage: y.a(0,2)
675
+ 1
676
+ sage: y.a(3,2)
677
+ 0
678
+ """
679
+ A = [1 for c in range(len(self.column(k)))
680
+ if self.column(k)[c] == i]
681
+ return len(A)
682
+
683
+ def in_highest_weight_crystal(self, La):
684
+ r"""
685
+ Return a boolean indicating if the generalized Young wall element
686
+ is in the highest weight crystal cut out by the given highest weight
687
+ ``La``.
688
+
689
+ By Theorem 4.1 of [KS2010]_, a generalized Young wall `Y` represents a
690
+ vertex in the highest weight crystal `Y(\lambda)`, with
691
+ `\lambda = \Lambda_{i_1} + \Lambda_{i_2} + \cdots + \Lambda_{i_\ell}`
692
+ a dominant integral weight of level `\ell > 0`, if it satisfies the
693
+ following condition. For each positive integer `k`, if there exists
694
+ `j \in I` such that `a_j(k) - a_{j-1}(k) > 0`, then for some
695
+ `p = 1, \ldots, \ell`,
696
+
697
+ .. MATH::
698
+
699
+ j + k \equiv i_p + 1 \bmod n+1 \text{ and } a_j(k) - a_{j-1}(k)
700
+ \le \lambda(h_{i_p}),
701
+
702
+ where `\{h_0, h_1, \ldots, h_n\}` is the set of simple coroots attached
703
+ to `A_n^{(1)}`.
704
+
705
+ EXAMPLES::
706
+
707
+ sage: La = RootSystem(['A',2,1]).weight_lattice(extended=True).fundamental_weights()[1]
708
+ sage: GYW = crystals.infinity.GeneralizedYoungWalls(2)
709
+ sage: y = GYW([[],[1,0],[2,1]])
710
+ sage: y.in_highest_weight_crystal(La)
711
+ True
712
+ sage: x = GYW([[],[1],[2],[],[],[2],[],[],[2]])
713
+ sage: x.in_highest_weight_crystal(La)
714
+ False
715
+ """
716
+ if La not in self.parent().weight_lattice_realization():
717
+ raise TypeError("Must be an element in the weight lattice realization")
718
+ ac = self.parent().weight_lattice_realization().simple_coroots()
719
+ n = self.cartan_type().classical().rank()
720
+ index_set = self.index_set()
721
+ for k in range(1, self.cols + 1):
722
+ for j in index_set:
723
+ if self.a(j, k) - self.a((j - 1) % (n + 1), k) <= 0:
724
+ continue
725
+ else:
726
+ p_not_found = True
727
+ for p in index_set:
728
+ if (j + k - p - 1) % (n + 1) == 0 and self.a(j, k) - self.a((j - 1) % (n + 1), k) <= La.scalar(ac[p]):
729
+ p_not_found = False
730
+ continue
731
+ else:
732
+ continue
733
+ if p_not_found:
734
+ return False
735
+ return True
736
+
737
+
738
+ class InfinityCrystalOfGeneralizedYoungWalls(UniqueRepresentation, Parent):
739
+ r"""
740
+ The crystal `\mathcal{Y}(\infty)` of generalized Young walls of
741
+ type `A_n^{(1)}` as defined in [KS2010]_.
742
+
743
+ A generalized Young wall is a collection of boxes stacked on a fixed board,
744
+ such that color of the box at the site located in the `j`-th row from the
745
+ bottom and the `i`-th column from the right is `j-1 \bmod n+1`. There are
746
+ several growth conditions on elements in `Y \in \mathcal{Y}(\infty)`:
747
+
748
+ - Walls grow in rows from right to left. That is, for every box `y\in Y`
749
+ that is not in the rightmost column, there must be a box immediately to
750
+ the right of `y`.
751
+
752
+ - For all `p>q` such that `p-q \equiv 0 \bmod n+1`, the `p`-th row has
753
+ most as many boxes as the `q`-th row.
754
+
755
+ - There does not exist a column in the wall such that if one `i`-colored
756
+ box, for every `i = 0,1,\ldots,n`, is removed from that column, then the
757
+ result satisfies the above conditions.
758
+
759
+ There is a crystal structure on `\mathcal{Y}(\infty)` defined as follows.
760
+ Define maps
761
+
762
+ .. MATH::
763
+
764
+ e_i,\ f_i \colon \mathcal{Y}(\infty)
765
+ \longrightarrow \mathcal{Y}(\infty) \sqcup \{0\}, \qquad
766
+ \varepsilon_i,\ \varphi_i \colon \mathcal{Y}(\infty)
767
+ \longrightarrow \ZZ, \qquad
768
+ \mathrm{wt}\colon \mathcal{Y}(\infty) \longrightarrow
769
+ \bigoplus_{i=0}^n \ZZ \Lambda_i \oplus \ZZ \delta,
770
+
771
+ by
772
+
773
+ .. MATH::
774
+
775
+ \mathrm{wt}(Y) = -\sum_{i=0}^n m_i(Y) \alpha_i,
776
+
777
+ where `m_i(Y)` is the number of `i`-boxes in `Y`, `\varepsilon_i(Y)`
778
+ is the number of `-` in the `i`-signature of `Y`, and
779
+
780
+ .. MATH::
781
+
782
+ \varphi_i(Y) = \varepsilon_i(Y) + \langle h_i, \mathrm{wt}(Y) \rangle.
783
+
784
+ See :meth:`GeneralizedYoungWall.e()`, :meth:`GeneralizedYoungWall.f()`,
785
+ and :meth:`GeneralizedYoungWall.signature()` for more about
786
+ `e_i`, `f_i`, and `i`-signatures.
787
+
788
+
789
+ INPUT:
790
+
791
+ - ``n`` -- type `A_n^{(1)}`
792
+
793
+ EXAMPLES::
794
+
795
+ sage: Yinf = crystals.infinity.GeneralizedYoungWalls(3)
796
+ sage: y = Yinf([[0],[1,0,3,2],[],[3,2,1],[0],[1,0]])
797
+ sage: y.pp()
798
+ 0|1|
799
+ 0|
800
+ 1|2|3|
801
+ |
802
+ 2|3|0|1|
803
+ 0|
804
+ sage: y.weight(root_lattice=True)
805
+ -4*alpha[0] - 3*alpha[1] - 2*alpha[2] - 2*alpha[3]
806
+ sage: y.f(0)
807
+ [[0], [1, 0, 3, 2], [], [3, 2, 1], [0], [1, 0], [], [], [0]]
808
+ sage: y.e(0).pp()
809
+ 0|1|
810
+ |
811
+ 1|2|3|
812
+ |
813
+ 2|3|0|1|
814
+ 0|
815
+
816
+ To display the crystal down to depth 3::
817
+
818
+ sage: S = Yinf.subcrystal(max_depth=3)
819
+ sage: G = Yinf.digraph(subset=S) # long time
820
+ sage: view(G) # not tested
821
+ """
822
+
823
+ @staticmethod
824
+ def __classcall_private__(cls, n, category=None):
825
+ r"""
826
+ Normalize input to ensure a unique representation.
827
+
828
+ INPUT:
829
+
830
+ - ``n`` -- type `A_n^{(1)}`
831
+
832
+ EXAMPLES::
833
+
834
+ sage: Yinf = crystals.infinity.GeneralizedYoungWalls(3)
835
+ sage: Yinf2 = crystals.infinity.GeneralizedYoungWalls(int(3))
836
+ sage: Yinf is Yinf2
837
+ True
838
+ """
839
+ return super().__classcall__(cls, n, category)
840
+
841
+ def __init__(self, n, category):
842
+ r"""
843
+ EXAMPLES::
844
+
845
+ sage: Yinf = crystals.infinity.GeneralizedYoungWalls(3)
846
+ sage: TestSuite(Yinf).run()
847
+ """
848
+ self._cartan_type = CartanType(['A', n, 1])
849
+ if category is None:
850
+ category = (HighestWeightCrystals(), InfiniteEnumeratedSets())
851
+ Parent.__init__(self, category=category)
852
+ self.module_generators = (self.element_class(self, []),)
853
+
854
+ Element = GeneralizedYoungWall
855
+
856
+ def _element_constructor_(self, data):
857
+ r"""
858
+ Construct an element of ``self`` from ``data``.
859
+
860
+ INPUT:
861
+
862
+ - ``data`` -- a multilist
863
+
864
+ EXAMPLES::
865
+
866
+ sage: GYW = crystals.infinity.GeneralizedYoungWalls(2)
867
+ sage: y = GYW([[],[1,0],[2,1]]) # indirect doctest
868
+ sage: y
869
+ [[], [1, 0], [2, 1]]
870
+ """
871
+ return self.element_class(self, data)
872
+
873
+ def _repr_(self):
874
+ r"""
875
+ EXAMPLES::
876
+
877
+ sage: Y = crystals.infinity.GeneralizedYoungWalls(4)
878
+ sage: Y
879
+ Crystal of generalized Young walls of type ['A', 4, 1]
880
+ """
881
+ return "Crystal of generalized Young walls of type {}".format(self._cartan_type)
882
+
883
+
884
+ ########################
885
+ # Highest weight GYW #
886
+ ########################
887
+
888
+ class CrystalOfGeneralizedYoungWallsElement(GeneralizedYoungWall):
889
+ r"""
890
+ Element of the highest weight crystal of generalized Young walls.
891
+ """
892
+
893
+ def e(self, i):
894
+ r"""
895
+ Compute the action of `e_i` restricted to the highest weight crystal.
896
+
897
+ EXAMPLES::
898
+
899
+ sage: La = RootSystem(['A',2,1]).weight_lattice(extended=True).fundamental_weights()[1]
900
+ sage: hwy = crystals.GeneralizedYoungWalls(2,La)([[],[1,0],[2,1]])
901
+ sage: hwy.e(1)
902
+ [[], [1, 0], [2]]
903
+ sage: hwy.e(2)
904
+ sage: hwy.e(3)
905
+ """
906
+ ret = GeneralizedYoungWall.e(self, i)
907
+ if ret is None:
908
+ return None
909
+ if ret.in_highest_weight_crystal(self.parent().hw):
910
+ return self.__class__(self.parent(), ret.data)
911
+ return None
912
+
913
+ def f(self, i):
914
+ r"""
915
+ Compute the action of `f_i` restricted to the highest weight crystal.
916
+
917
+ EXAMPLES::
918
+
919
+ sage: La = RootSystem(['A',2,1]).weight_lattice(extended=True).fundamental_weights()[1]
920
+ sage: GYW = crystals.infinity.GeneralizedYoungWalls(2)
921
+ sage: y = GYW([[],[1,0],[2,1]])
922
+ sage: y.f(1)
923
+ [[], [1, 0], [2, 1], [], [1]]
924
+ sage: hwy = crystals.GeneralizedYoungWalls(2,La)([[],[1,0],[2,1]])
925
+ sage: hwy.f(1)
926
+ """
927
+ ret = GeneralizedYoungWall.f(self, i)
928
+ if ret.in_highest_weight_crystal(self.parent().hw):
929
+ return self.__class__(self.parent(), ret.data)
930
+ return None
931
+
932
+ def weight(self):
933
+ r"""
934
+ Return the weight of ``self`` in the highest weight crystal as an
935
+ element of the weight lattice `\bigoplus_{i=0}^n \ZZ \Lambda_i`.
936
+
937
+ EXAMPLES::
938
+
939
+ sage: La = RootSystem(['A',2,1]).weight_lattice(extended=True).fundamental_weights()[1]
940
+ sage: hwy = crystals.GeneralizedYoungWalls(2,La)([[],[1,0],[2,1]])
941
+ sage: hwy.weight()
942
+ Lambda[0] - Lambda[1] + Lambda[2] - delta
943
+ """
944
+ return self.parent().weight_lattice_realization()(self.parent().hw + GeneralizedYoungWall.weight(self))
945
+
946
+ def phi(self, i):
947
+ r"""
948
+ Return the value `\varepsilon_i(Y) + \langle h_i,
949
+ \mathrm{wt}(Y)\rangle`, where `h_i` is the `i`-th simple
950
+ coroot and `Y` is ``self``.
951
+
952
+ EXAMPLES::
953
+
954
+ sage: La = RootSystem(['A',3,1]).weight_lattice(extended=True).fundamental_weights()
955
+ sage: y = crystals.GeneralizedYoungWalls(3,La[0])([])
956
+ sage: y.phi(1)
957
+ 0
958
+ sage: y.phi(2)
959
+ 0
960
+ """
961
+ h = self.parent().weight_lattice_realization().simple_coroots()
962
+ return self.epsilon(i) + self.weight().scalar(h[i])
963
+
964
+
965
+ class CrystalOfGeneralizedYoungWalls(InfinityCrystalOfGeneralizedYoungWalls):
966
+ r"""
967
+ The crystal `\mathcal{Y}(\lambda)` of generalized Young walls of the given
968
+ type with highest weight `\lambda`.
969
+
970
+ These were characterized in Theorem 4.1 of [KS2010]_.
971
+ See :meth:`GeneralizedYoungWall.in_highest_weight_crystal()`.
972
+
973
+ INPUT:
974
+
975
+ - ``n`` -- type `A_n^{(1)}`
976
+
977
+ - ``weight`` -- dominant integral weight
978
+
979
+ EXAMPLES::
980
+
981
+ sage: La = RootSystem(['A',3,1]).weight_lattice(extended=True).fundamental_weights()[1]
982
+ sage: YLa = crystals.GeneralizedYoungWalls(3,La)
983
+ sage: y = YLa([[0],[1,0,3,2,1],[2,1,0],[3]])
984
+ sage: y.pp()
985
+ 3|
986
+ 0|1|2|
987
+ 1|2|3|0|1|
988
+ 0|
989
+ sage: y.weight()
990
+ -Lambda[0] + Lambda[2] + Lambda[3] - 3*delta
991
+ sage: y.in_highest_weight_crystal(La)
992
+ True
993
+ sage: y.f(1)
994
+ [[0], [1, 0, 3, 2, 1], [2, 1, 0], [3], [], [1]]
995
+ sage: y.f(1).f(1)
996
+ sage: yy = crystals.infinity.GeneralizedYoungWalls(3)([[0], [1, 0, 3, 2, 1], [2, 1, 0], [3], [], [1]])
997
+ sage: yy.f(1)
998
+ [[0], [1, 0, 3, 2, 1], [2, 1, 0], [3], [], [1], [], [], [], [1]]
999
+ sage: yyy = yy.f(1)
1000
+ sage: yyy.in_highest_weight_crystal(La)
1001
+ False
1002
+
1003
+ sage: LS = crystals.LSPaths(['A',3,1],[1,0,0,0])
1004
+ sage: C = LS.subcrystal(max_depth=4)
1005
+ sage: G = LS.digraph(subset=C)
1006
+ sage: P = RootSystem(['A',3,1]).weight_lattice(extended=True)
1007
+ sage: La = P.fundamental_weights()
1008
+ sage: YW = crystals.GeneralizedYoungWalls(3,La[0])
1009
+ sage: CW = YW.subcrystal(max_depth=4)
1010
+ sage: GW = YW.digraph(subset=CW)
1011
+ sage: GW.is_isomorphic(G,edge_labels=True)
1012
+ True
1013
+
1014
+ To display the crystal down to a specified depth::
1015
+
1016
+ sage: S = YLa.subcrystal(max_depth=4)
1017
+ sage: G = YLa.digraph(subset=S)
1018
+ sage: view(G) # not tested
1019
+ """
1020
+ @staticmethod
1021
+ def __classcall_private__(cls, n, La):
1022
+ r"""
1023
+ EXAMPLES::
1024
+
1025
+ sage: La = RootSystem(['A',2,1]).weight_lattice(extended=True).fundamental_weights()[2]
1026
+ sage: Al = RootSystem(['A',2,1]).weight_lattice(extended=True).monomial(2)
1027
+ sage: Y = crystals.GeneralizedYoungWalls(2,La)
1028
+ sage: Y1 = crystals.GeneralizedYoungWalls(int(2),Al)
1029
+ sage: Y is Y1
1030
+ True
1031
+ """
1032
+ La = RootSystem(['A', n, 1]).weight_lattice(extended=True)(La)
1033
+ return super().__classcall__(cls, n, La)
1034
+
1035
+ def __init__(self, n, La):
1036
+ r"""
1037
+ EXAMPLES::
1038
+
1039
+ sage: La = RootSystem(['A',2,1]).weight_lattice(extended=True).fundamental_weights()[1]
1040
+ sage: YLa = crystals.GeneralizedYoungWalls(2,La)
1041
+
1042
+ We skip the two tests because they take a very long time::
1043
+
1044
+ sage: TestSuite(YLa).run(skip=["_test_enumerated_set_contains","_test_stembridge_local_axioms"]) # long time
1045
+ """
1046
+ cat = (RegularCrystals(), HighestWeightCrystals(),
1047
+ InfiniteEnumeratedSets())
1048
+ InfinityCrystalOfGeneralizedYoungWalls.__init__(self, n,
1049
+ category=cat)
1050
+ self.hw = La
1051
+
1052
+ Element = CrystalOfGeneralizedYoungWallsElement
1053
+
1054
+ def _repr_(self):
1055
+ r"""
1056
+ EXAMPLES::
1057
+
1058
+ sage: La = RootSystem(['A',5,1]).weight_lattice(extended=True).fundamental_weights()[2]
1059
+ sage: Y = crystals.GeneralizedYoungWalls(5,La)
1060
+ sage: Y
1061
+ Highest weight crystal of generalized Young walls of Cartan type ['A', 5, 1] and highest weight Lambda[2]
1062
+ """
1063
+ return "Highest weight crystal of generalized Young walls of Cartan type {1!s} and highest weight {0!s}".format(self.hw, self._cartan_type)
1064
+
1065
+ def __iter__(self):
1066
+ r"""
1067
+ EXAMPLES::
1068
+
1069
+ sage: y = crystals.infinity.GeneralizedYoungWalls(3)([[0],[1,0,3,2],[2,1],[3,2,1,0,3,2],[0],[],[2]])
1070
+ sage: x = y.__iter__()
1071
+ sage: next(x)
1072
+ [0]
1073
+ """
1074
+ for c in super().__iter__():
1075
+ if c.in_highest_weight_crystal(self.hw):
1076
+ yield c