passagemath-combinat 10.6.42__cp314-cp314t-win_amd64.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 (401) hide show
  1. passagemath_combinat/__init__.py +3 -0
  2. passagemath_combinat-10.6.42.dist-info/DELVEWHEEL +2 -0
  3. passagemath_combinat-10.6.42.dist-info/METADATA +160 -0
  4. passagemath_combinat-10.6.42.dist-info/RECORD +401 -0
  5. passagemath_combinat-10.6.42.dist-info/WHEEL +5 -0
  6. passagemath_combinat-10.6.42.dist-info/top_level.txt +3 -0
  7. passagemath_combinat.libs/libgmp-10-3a5f019e2510aeaad918cab2b57a689d.dll +0 -0
  8. passagemath_combinat.libs/libsymmetrica-3-7dcf900932804d0df5fd0919b4668720.dll +0 -0
  9. sage/algebras/affine_nil_temperley_lieb.py +263 -0
  10. sage/algebras/all.py +24 -0
  11. sage/algebras/all__sagemath_combinat.py +35 -0
  12. sage/algebras/askey_wilson.py +935 -0
  13. sage/algebras/associated_graded.py +345 -0
  14. sage/algebras/cellular_basis.py +350 -0
  15. sage/algebras/cluster_algebra.py +2766 -0
  16. sage/algebras/down_up_algebra.py +860 -0
  17. sage/algebras/free_algebra.py +1698 -0
  18. sage/algebras/free_algebra_element.py +345 -0
  19. sage/algebras/free_algebra_quotient.py +405 -0
  20. sage/algebras/free_algebra_quotient_element.py +295 -0
  21. sage/algebras/free_zinbiel_algebra.py +885 -0
  22. sage/algebras/hall_algebra.py +783 -0
  23. sage/algebras/hecke_algebras/all.py +4 -0
  24. sage/algebras/hecke_algebras/ariki_koike_algebra.py +1796 -0
  25. sage/algebras/hecke_algebras/ariki_koike_specht_modules.py +475 -0
  26. sage/algebras/hecke_algebras/cubic_hecke_algebra.py +3520 -0
  27. sage/algebras/hecke_algebras/cubic_hecke_base_ring.py +1473 -0
  28. sage/algebras/hecke_algebras/cubic_hecke_matrix_rep.py +1079 -0
  29. sage/algebras/iwahori_hecke_algebra.py +3095 -0
  30. sage/algebras/jordan_algebra.py +1773 -0
  31. sage/algebras/lie_conformal_algebras/abelian_lie_conformal_algebra.py +113 -0
  32. sage/algebras/lie_conformal_algebras/affine_lie_conformal_algebra.py +156 -0
  33. sage/algebras/lie_conformal_algebras/all.py +18 -0
  34. sage/algebras/lie_conformal_algebras/bosonic_ghosts_lie_conformal_algebra.py +134 -0
  35. sage/algebras/lie_conformal_algebras/examples.py +43 -0
  36. sage/algebras/lie_conformal_algebras/fermionic_ghosts_lie_conformal_algebra.py +131 -0
  37. sage/algebras/lie_conformal_algebras/finitely_freely_generated_lca.py +139 -0
  38. sage/algebras/lie_conformal_algebras/free_bosons_lie_conformal_algebra.py +174 -0
  39. sage/algebras/lie_conformal_algebras/free_fermions_lie_conformal_algebra.py +167 -0
  40. sage/algebras/lie_conformal_algebras/freely_generated_lie_conformal_algebra.py +107 -0
  41. sage/algebras/lie_conformal_algebras/graded_lie_conformal_algebra.py +135 -0
  42. sage/algebras/lie_conformal_algebras/lie_conformal_algebra.py +353 -0
  43. sage/algebras/lie_conformal_algebras/lie_conformal_algebra_element.py +236 -0
  44. sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_basis.py +78 -0
  45. sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_structure_coefs.py +328 -0
  46. sage/algebras/lie_conformal_algebras/n2_lie_conformal_algebra.py +117 -0
  47. sage/algebras/lie_conformal_algebras/neveu_schwarz_lie_conformal_algebra.py +86 -0
  48. sage/algebras/lie_conformal_algebras/virasoro_lie_conformal_algebra.py +82 -0
  49. sage/algebras/lie_conformal_algebras/weyl_lie_conformal_algebra.py +205 -0
  50. sage/algebras/nil_coxeter_algebra.py +191 -0
  51. sage/algebras/q_commuting_polynomials.py +673 -0
  52. sage/algebras/q_system.py +608 -0
  53. sage/algebras/quantum_clifford.py +959 -0
  54. sage/algebras/quantum_groups/ace_quantum_onsager.py +693 -0
  55. sage/algebras/quantum_groups/all.py +9 -0
  56. sage/algebras/quantum_groups/fock_space.py +2219 -0
  57. sage/algebras/quantum_groups/q_numbers.py +207 -0
  58. sage/algebras/quantum_groups/quantum_group_gap.py +2695 -0
  59. sage/algebras/quantum_groups/representations.py +591 -0
  60. sage/algebras/quantum_matrix_coordinate_algebra.py +1006 -0
  61. sage/algebras/quantum_oscillator.py +623 -0
  62. sage/algebras/quaternion_algebra.py +20 -0
  63. sage/algebras/quaternion_algebra_element.py +55 -0
  64. sage/algebras/rational_cherednik_algebra.py +525 -0
  65. sage/algebras/schur_algebra.py +670 -0
  66. sage/algebras/shuffle_algebra.py +1011 -0
  67. sage/algebras/splitting_algebra.py +779 -0
  68. sage/algebras/tensor_algebra.py +709 -0
  69. sage/algebras/yangian.py +1082 -0
  70. sage/algebras/yokonuma_hecke_algebra.py +1018 -0
  71. sage/all__sagemath_combinat.py +44 -0
  72. sage/combinat/SJT.py +255 -0
  73. sage/combinat/affine_permutation.py +2405 -0
  74. sage/combinat/algebraic_combinatorics.py +55 -0
  75. sage/combinat/all.py +53 -0
  76. sage/combinat/all__sagemath_combinat.py +195 -0
  77. sage/combinat/alternating_sign_matrix.py +2063 -0
  78. sage/combinat/baxter_permutations.py +346 -0
  79. sage/combinat/bijectionist.py +3220 -0
  80. sage/combinat/binary_recurrence_sequences.py +1180 -0
  81. sage/combinat/blob_algebra.py +685 -0
  82. sage/combinat/catalog_partitions.py +27 -0
  83. sage/combinat/chas/all.py +23 -0
  84. sage/combinat/chas/fsym.py +1180 -0
  85. sage/combinat/chas/wqsym.py +2601 -0
  86. sage/combinat/cluster_complex.py +326 -0
  87. sage/combinat/colored_permutations.py +2039 -0
  88. sage/combinat/colored_permutations_representations.py +964 -0
  89. sage/combinat/composition_signed.py +142 -0
  90. sage/combinat/composition_tableau.py +855 -0
  91. sage/combinat/constellation.py +1729 -0
  92. sage/combinat/core.py +751 -0
  93. sage/combinat/counting.py +12 -0
  94. sage/combinat/crystals/affine.py +742 -0
  95. sage/combinat/crystals/affine_factorization.py +518 -0
  96. sage/combinat/crystals/affinization.py +331 -0
  97. sage/combinat/crystals/alcove_path.py +2013 -0
  98. sage/combinat/crystals/all.py +22 -0
  99. sage/combinat/crystals/bkk_crystals.py +141 -0
  100. sage/combinat/crystals/catalog.py +115 -0
  101. sage/combinat/crystals/catalog_elementary_crystals.py +18 -0
  102. sage/combinat/crystals/catalog_infinity_crystals.py +33 -0
  103. sage/combinat/crystals/catalog_kirillov_reshetikhin.py +18 -0
  104. sage/combinat/crystals/crystals.py +257 -0
  105. sage/combinat/crystals/direct_sum.py +260 -0
  106. sage/combinat/crystals/elementary_crystals.py +1251 -0
  107. sage/combinat/crystals/fast_crystals.py +441 -0
  108. sage/combinat/crystals/fully_commutative_stable_grothendieck.py +1205 -0
  109. sage/combinat/crystals/generalized_young_walls.py +1076 -0
  110. sage/combinat/crystals/highest_weight_crystals.py +436 -0
  111. sage/combinat/crystals/induced_structure.py +695 -0
  112. sage/combinat/crystals/infinity_crystals.py +730 -0
  113. sage/combinat/crystals/kac_modules.py +863 -0
  114. sage/combinat/crystals/kirillov_reshetikhin.py +4196 -0
  115. sage/combinat/crystals/kyoto_path_model.py +497 -0
  116. sage/combinat/crystals/letters.cp314t-win_amd64.pyd +0 -0
  117. sage/combinat/crystals/letters.pxd +79 -0
  118. sage/combinat/crystals/letters.pyx +3056 -0
  119. sage/combinat/crystals/littelmann_path.py +1518 -0
  120. sage/combinat/crystals/monomial_crystals.py +1262 -0
  121. sage/combinat/crystals/multisegments.py +462 -0
  122. sage/combinat/crystals/mv_polytopes.py +467 -0
  123. sage/combinat/crystals/pbw_crystal.py +511 -0
  124. sage/combinat/crystals/pbw_datum.cp314t-win_amd64.pyd +0 -0
  125. sage/combinat/crystals/pbw_datum.pxd +4 -0
  126. sage/combinat/crystals/pbw_datum.pyx +487 -0
  127. sage/combinat/crystals/polyhedral_realization.py +372 -0
  128. sage/combinat/crystals/spins.cp314t-win_amd64.pyd +0 -0
  129. sage/combinat/crystals/spins.pxd +21 -0
  130. sage/combinat/crystals/spins.pyx +756 -0
  131. sage/combinat/crystals/star_crystal.py +290 -0
  132. sage/combinat/crystals/subcrystal.py +464 -0
  133. sage/combinat/crystals/tensor_product.py +1177 -0
  134. sage/combinat/crystals/tensor_product_element.cp314t-win_amd64.pyd +0 -0
  135. sage/combinat/crystals/tensor_product_element.pxd +35 -0
  136. sage/combinat/crystals/tensor_product_element.pyx +1870 -0
  137. sage/combinat/crystals/virtual_crystal.py +420 -0
  138. sage/combinat/cyclic_sieving_phenomenon.py +204 -0
  139. sage/combinat/debruijn_sequence.cp314t-win_amd64.pyd +0 -0
  140. sage/combinat/debruijn_sequence.pyx +355 -0
  141. sage/combinat/decorated_permutation.py +270 -0
  142. sage/combinat/degree_sequences.cp314t-win_amd64.pyd +0 -0
  143. sage/combinat/degree_sequences.pyx +588 -0
  144. sage/combinat/derangements.py +527 -0
  145. sage/combinat/descent_algebra.py +1008 -0
  146. sage/combinat/diagram.py +1551 -0
  147. sage/combinat/diagram_algebras.py +5886 -0
  148. sage/combinat/dyck_word.py +4349 -0
  149. sage/combinat/e_one_star.py +1623 -0
  150. sage/combinat/enumerated_sets.py +123 -0
  151. sage/combinat/expnums.cp314t-win_amd64.pyd +0 -0
  152. sage/combinat/expnums.pyx +148 -0
  153. sage/combinat/fast_vector_partitions.cp314t-win_amd64.pyd +0 -0
  154. sage/combinat/fast_vector_partitions.pyx +346 -0
  155. sage/combinat/fqsym.py +1977 -0
  156. sage/combinat/free_dendriform_algebra.py +954 -0
  157. sage/combinat/free_prelie_algebra.py +1141 -0
  158. sage/combinat/fully_commutative_elements.py +1077 -0
  159. sage/combinat/fully_packed_loop.py +1523 -0
  160. sage/combinat/gelfand_tsetlin_patterns.py +1409 -0
  161. sage/combinat/gray_codes.py +311 -0
  162. sage/combinat/grossman_larson_algebras.py +667 -0
  163. sage/combinat/growth.py +4352 -0
  164. sage/combinat/hall_polynomial.py +188 -0
  165. sage/combinat/hillman_grassl.py +866 -0
  166. sage/combinat/integer_matrices.py +329 -0
  167. sage/combinat/integer_vectors_mod_permgroup.py +1238 -0
  168. sage/combinat/k_tableau.py +4564 -0
  169. sage/combinat/kazhdan_lusztig.py +215 -0
  170. sage/combinat/key_polynomial.py +885 -0
  171. sage/combinat/knutson_tao_puzzles.py +2286 -0
  172. sage/combinat/lr_tableau.py +311 -0
  173. sage/combinat/matrices/all.py +24 -0
  174. sage/combinat/matrices/hadamard_matrix.py +3790 -0
  175. sage/combinat/matrices/latin.py +2912 -0
  176. sage/combinat/misc.py +401 -0
  177. sage/combinat/multiset_partition_into_sets_ordered.py +3541 -0
  178. sage/combinat/ncsf_qsym/all.py +21 -0
  179. sage/combinat/ncsf_qsym/combinatorics.py +317 -0
  180. sage/combinat/ncsf_qsym/generic_basis_code.py +1427 -0
  181. sage/combinat/ncsf_qsym/ncsf.py +5637 -0
  182. sage/combinat/ncsf_qsym/qsym.py +4053 -0
  183. sage/combinat/ncsf_qsym/tutorial.py +447 -0
  184. sage/combinat/ncsym/all.py +21 -0
  185. sage/combinat/ncsym/bases.py +855 -0
  186. sage/combinat/ncsym/dual.py +593 -0
  187. sage/combinat/ncsym/ncsym.py +2076 -0
  188. sage/combinat/necklace.py +551 -0
  189. sage/combinat/non_decreasing_parking_function.py +634 -0
  190. sage/combinat/nu_dyck_word.py +1474 -0
  191. sage/combinat/output.py +861 -0
  192. sage/combinat/parallelogram_polyomino.py +4326 -0
  193. sage/combinat/parking_functions.py +1602 -0
  194. sage/combinat/partition_algebra.py +1998 -0
  195. sage/combinat/partition_kleshchev.py +1982 -0
  196. sage/combinat/partition_shifting_algebras.py +584 -0
  197. sage/combinat/partition_tuple.py +3114 -0
  198. sage/combinat/path_tableaux/all.py +13 -0
  199. sage/combinat/path_tableaux/catalog.py +29 -0
  200. sage/combinat/path_tableaux/dyck_path.py +380 -0
  201. sage/combinat/path_tableaux/frieze.py +476 -0
  202. sage/combinat/path_tableaux/path_tableau.py +728 -0
  203. sage/combinat/path_tableaux/semistandard.py +510 -0
  204. sage/combinat/perfect_matching.py +779 -0
  205. sage/combinat/plane_partition.py +3300 -0
  206. sage/combinat/q_bernoulli.cp314t-win_amd64.pyd +0 -0
  207. sage/combinat/q_bernoulli.pyx +128 -0
  208. sage/combinat/quickref.py +81 -0
  209. sage/combinat/recognizable_series.py +2051 -0
  210. sage/combinat/regular_sequence.py +4316 -0
  211. sage/combinat/regular_sequence_bounded.py +543 -0
  212. sage/combinat/restricted_growth.py +81 -0
  213. sage/combinat/ribbon.py +20 -0
  214. sage/combinat/ribbon_shaped_tableau.py +489 -0
  215. sage/combinat/ribbon_tableau.py +1180 -0
  216. sage/combinat/rigged_configurations/all.py +46 -0
  217. sage/combinat/rigged_configurations/bij_abstract_class.py +548 -0
  218. sage/combinat/rigged_configurations/bij_infinity.py +370 -0
  219. sage/combinat/rigged_configurations/bij_type_A.py +163 -0
  220. sage/combinat/rigged_configurations/bij_type_A2_dual.py +338 -0
  221. sage/combinat/rigged_configurations/bij_type_A2_even.py +218 -0
  222. sage/combinat/rigged_configurations/bij_type_A2_odd.py +199 -0
  223. sage/combinat/rigged_configurations/bij_type_B.py +900 -0
  224. sage/combinat/rigged_configurations/bij_type_C.py +267 -0
  225. sage/combinat/rigged_configurations/bij_type_D.py +771 -0
  226. sage/combinat/rigged_configurations/bij_type_D_tri.py +392 -0
  227. sage/combinat/rigged_configurations/bij_type_D_twisted.py +576 -0
  228. sage/combinat/rigged_configurations/bij_type_E67.py +402 -0
  229. sage/combinat/rigged_configurations/bijection.py +143 -0
  230. sage/combinat/rigged_configurations/kleber_tree.py +1475 -0
  231. sage/combinat/rigged_configurations/kr_tableaux.py +1898 -0
  232. sage/combinat/rigged_configurations/rc_crystal.py +461 -0
  233. sage/combinat/rigged_configurations/rc_infinity.py +540 -0
  234. sage/combinat/rigged_configurations/rigged_configuration_element.py +2403 -0
  235. sage/combinat/rigged_configurations/rigged_configurations.py +1918 -0
  236. sage/combinat/rigged_configurations/rigged_partition.cp314t-win_amd64.pyd +0 -0
  237. sage/combinat/rigged_configurations/rigged_partition.pxd +15 -0
  238. sage/combinat/rigged_configurations/rigged_partition.pyx +680 -0
  239. sage/combinat/rigged_configurations/tensor_product_kr_tableaux.py +499 -0
  240. sage/combinat/rigged_configurations/tensor_product_kr_tableaux_element.py +428 -0
  241. sage/combinat/rsk.py +3438 -0
  242. sage/combinat/schubert_polynomial.py +508 -0
  243. sage/combinat/set_partition.py +3318 -0
  244. sage/combinat/set_partition_iterator.cp314t-win_amd64.pyd +0 -0
  245. sage/combinat/set_partition_iterator.pyx +136 -0
  246. sage/combinat/set_partition_ordered.py +1590 -0
  247. sage/combinat/sf/abreu_nigro.py +346 -0
  248. sage/combinat/sf/all.py +52 -0
  249. sage/combinat/sf/character.py +576 -0
  250. sage/combinat/sf/classical.py +319 -0
  251. sage/combinat/sf/dual.py +996 -0
  252. sage/combinat/sf/elementary.py +549 -0
  253. sage/combinat/sf/hall_littlewood.py +1028 -0
  254. sage/combinat/sf/hecke.py +336 -0
  255. sage/combinat/sf/homogeneous.py +464 -0
  256. sage/combinat/sf/jack.py +1428 -0
  257. sage/combinat/sf/k_dual.py +1458 -0
  258. sage/combinat/sf/kfpoly.py +447 -0
  259. sage/combinat/sf/llt.py +789 -0
  260. sage/combinat/sf/macdonald.py +2019 -0
  261. sage/combinat/sf/monomial.py +525 -0
  262. sage/combinat/sf/multiplicative.py +113 -0
  263. sage/combinat/sf/new_kschur.py +1786 -0
  264. sage/combinat/sf/ns_macdonald.py +964 -0
  265. sage/combinat/sf/orthogonal.py +246 -0
  266. sage/combinat/sf/orthotriang.py +355 -0
  267. sage/combinat/sf/powersum.py +963 -0
  268. sage/combinat/sf/schur.py +880 -0
  269. sage/combinat/sf/sf.py +1653 -0
  270. sage/combinat/sf/sfa.py +7053 -0
  271. sage/combinat/sf/symplectic.py +253 -0
  272. sage/combinat/sf/witt.py +721 -0
  273. sage/combinat/shifted_primed_tableau.py +2735 -0
  274. sage/combinat/shuffle.py +830 -0
  275. sage/combinat/sidon_sets.py +146 -0
  276. sage/combinat/similarity_class_type.py +1721 -0
  277. sage/combinat/sine_gordon.py +618 -0
  278. sage/combinat/six_vertex_model.py +784 -0
  279. sage/combinat/skew_partition.py +2053 -0
  280. sage/combinat/skew_tableau.py +2989 -0
  281. sage/combinat/sloane_functions.py +8935 -0
  282. sage/combinat/specht_module.py +1403 -0
  283. sage/combinat/species/all.py +48 -0
  284. sage/combinat/species/characteristic_species.py +321 -0
  285. sage/combinat/species/composition_species.py +273 -0
  286. sage/combinat/species/cycle_species.py +284 -0
  287. sage/combinat/species/empty_species.py +155 -0
  288. sage/combinat/species/functorial_composition_species.py +148 -0
  289. sage/combinat/species/generating_series.py +673 -0
  290. sage/combinat/species/library.py +148 -0
  291. sage/combinat/species/linear_order_species.py +169 -0
  292. sage/combinat/species/misc.py +83 -0
  293. sage/combinat/species/partition_species.py +290 -0
  294. sage/combinat/species/permutation_species.py +268 -0
  295. sage/combinat/species/product_species.py +423 -0
  296. sage/combinat/species/recursive_species.py +476 -0
  297. sage/combinat/species/set_species.py +192 -0
  298. sage/combinat/species/species.py +820 -0
  299. sage/combinat/species/structure.py +539 -0
  300. sage/combinat/species/subset_species.py +243 -0
  301. sage/combinat/species/sum_species.py +225 -0
  302. sage/combinat/subword.py +564 -0
  303. sage/combinat/subword_complex.py +2122 -0
  304. sage/combinat/subword_complex_c.cp314t-win_amd64.pyd +0 -0
  305. sage/combinat/subword_complex_c.pyx +119 -0
  306. sage/combinat/super_tableau.py +821 -0
  307. sage/combinat/superpartition.py +1154 -0
  308. sage/combinat/symmetric_group_algebra.py +3774 -0
  309. sage/combinat/symmetric_group_representations.py +1830 -0
  310. sage/combinat/t_sequences.py +877 -0
  311. sage/combinat/tableau.py +9506 -0
  312. sage/combinat/tableau_residues.py +860 -0
  313. sage/combinat/tableau_tuple.py +5353 -0
  314. sage/combinat/tiling.py +2432 -0
  315. sage/combinat/triangles_FHM.py +777 -0
  316. sage/combinat/tutorial.py +1857 -0
  317. sage/combinat/vector_partition.py +337 -0
  318. sage/combinat/words/abstract_word.py +1722 -0
  319. sage/combinat/words/all.py +59 -0
  320. sage/combinat/words/alphabet.py +268 -0
  321. sage/combinat/words/finite_word.py +7201 -0
  322. sage/combinat/words/infinite_word.py +113 -0
  323. sage/combinat/words/lyndon_word.py +652 -0
  324. sage/combinat/words/morphic.py +351 -0
  325. sage/combinat/words/morphism.py +3878 -0
  326. sage/combinat/words/paths.py +2932 -0
  327. sage/combinat/words/shuffle_product.py +278 -0
  328. sage/combinat/words/suffix_trees.py +1873 -0
  329. sage/combinat/words/word.py +769 -0
  330. sage/combinat/words/word_char.cp314t-win_amd64.pyd +0 -0
  331. sage/combinat/words/word_char.pyx +847 -0
  332. sage/combinat/words/word_datatypes.cp314t-win_amd64.pyd +0 -0
  333. sage/combinat/words/word_datatypes.pxd +4 -0
  334. sage/combinat/words/word_datatypes.pyx +1067 -0
  335. sage/combinat/words/word_generators.py +2026 -0
  336. sage/combinat/words/word_infinite_datatypes.py +1218 -0
  337. sage/combinat/words/word_options.py +99 -0
  338. sage/combinat/words/words.py +2396 -0
  339. sage/data_structures/all__sagemath_combinat.py +1 -0
  340. sage/databases/all__sagemath_combinat.py +13 -0
  341. sage/databases/findstat.py +4897 -0
  342. sage/databases/oeis.py +2058 -0
  343. sage/databases/sloane.py +393 -0
  344. sage/dynamics/all__sagemath_combinat.py +14 -0
  345. sage/dynamics/cellular_automata/all.py +7 -0
  346. sage/dynamics/cellular_automata/catalog.py +34 -0
  347. sage/dynamics/cellular_automata/elementary.py +612 -0
  348. sage/dynamics/cellular_automata/glca.py +477 -0
  349. sage/dynamics/cellular_automata/solitons.py +1463 -0
  350. sage/dynamics/finite_dynamical_system.py +1249 -0
  351. sage/dynamics/finite_dynamical_system_catalog.py +382 -0
  352. sage/games/all.py +7 -0
  353. sage/games/hexad.py +704 -0
  354. sage/games/quantumino.py +591 -0
  355. sage/games/sudoku.py +889 -0
  356. sage/games/sudoku_backtrack.cp314t-win_amd64.pyd +0 -0
  357. sage/games/sudoku_backtrack.pyx +189 -0
  358. sage/groups/all__sagemath_combinat.py +1 -0
  359. sage/groups/indexed_free_group.py +489 -0
  360. sage/libs/all__sagemath_combinat.py +6 -0
  361. sage/libs/lrcalc/__init__.py +1 -0
  362. sage/libs/lrcalc/lrcalc.py +525 -0
  363. sage/libs/symmetrica/__init__.py +7 -0
  364. sage/libs/symmetrica/all.py +101 -0
  365. sage/libs/symmetrica/kostka.pxi +168 -0
  366. sage/libs/symmetrica/part.pxi +193 -0
  367. sage/libs/symmetrica/plet.pxi +42 -0
  368. sage/libs/symmetrica/sab.pxi +196 -0
  369. sage/libs/symmetrica/sb.pxi +332 -0
  370. sage/libs/symmetrica/sc.pxi +192 -0
  371. sage/libs/symmetrica/schur.pxi +956 -0
  372. sage/libs/symmetrica/symmetrica.cp314t-win_amd64.pyd +0 -0
  373. sage/libs/symmetrica/symmetrica.pxi +1172 -0
  374. sage/libs/symmetrica/symmetrica.pyx +39 -0
  375. sage/monoids/all.py +13 -0
  376. sage/monoids/automatic_semigroup.py +1054 -0
  377. sage/monoids/free_abelian_monoid.py +315 -0
  378. sage/monoids/free_abelian_monoid_element.cp314t-win_amd64.pyd +0 -0
  379. sage/monoids/free_abelian_monoid_element.pxd +16 -0
  380. sage/monoids/free_abelian_monoid_element.pyx +397 -0
  381. sage/monoids/free_monoid.py +335 -0
  382. sage/monoids/free_monoid_element.py +431 -0
  383. sage/monoids/hecke_monoid.py +65 -0
  384. sage/monoids/string_monoid.py +817 -0
  385. sage/monoids/string_monoid_element.py +547 -0
  386. sage/monoids/string_ops.py +143 -0
  387. sage/monoids/trace_monoid.py +972 -0
  388. sage/rings/all__sagemath_combinat.py +2 -0
  389. sage/sat/all.py +4 -0
  390. sage/sat/boolean_polynomials.py +405 -0
  391. sage/sat/converters/__init__.py +6 -0
  392. sage/sat/converters/anf2cnf.py +14 -0
  393. sage/sat/converters/polybori.py +611 -0
  394. sage/sat/solvers/__init__.py +5 -0
  395. sage/sat/solvers/cryptominisat.py +287 -0
  396. sage/sat/solvers/dimacs.py +783 -0
  397. sage/sat/solvers/picosat.py +228 -0
  398. sage/sat/solvers/sat_lp.py +156 -0
  399. sage/sat/solvers/satsolver.cp314t-win_amd64.pyd +0 -0
  400. sage/sat/solvers/satsolver.pxd +3 -0
  401. sage/sat/solvers/satsolver.pyx +405 -0
@@ -0,0 +1,742 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.combinat sage.graphs sage.modules
3
+ r"""
4
+ Affine crystals
5
+ """
6
+ # ****************************************************************************
7
+ # Copyright (C) 2008 Brant Jones <brant at math.ucdavis.edu>
8
+ # Anne Schilling <anne at math.ucdavis.edu>
9
+ #
10
+ # Distributed under the terms of the GNU General Public License (GPL)
11
+ # https://www.gnu.org/licenses/
12
+ # ***************************************************************************
13
+ # Acknowledgment: most of the design and implementation of this
14
+ # library is heavily inspired from MuPAD-Combinat.
15
+ # ***************************************************************************
16
+
17
+ from sage.misc.abstract_method import abstract_method
18
+ from sage.categories.loop_crystals import RegularLoopCrystals
19
+ from sage.structure.parent import Parent
20
+ from sage.structure.unique_representation import UniqueRepresentation
21
+ from sage.structure.element_wrapper import ElementWrapper
22
+ from sage.combinat.root_system.cartan_type import CartanType
23
+ from sage.structure.richcmp import richcmp
24
+
25
+
26
+ class AffineCrystalFromClassical(UniqueRepresentation, Parent):
27
+ r"""
28
+ This abstract class can be used for affine crystals that are constructed
29
+ from a classical crystal. The zero arrows can be implemented using
30
+ different methods (for example using a Dynkin diagram automorphisms or
31
+ virtual crystals).
32
+
33
+ This is a helper class, mostly used to implement Kirillov-Reshetikhin
34
+ crystals (see:
35
+ :func:`~sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinCrystal`).
36
+
37
+ For general information about crystals see :mod:`sage.combinat.crystals`.
38
+
39
+ INPUT:
40
+
41
+ - ``cartan_type`` -- the Cartan type of the resulting affine crystal
42
+
43
+ - ``classical_crystal`` -- instance of a classical crystal
44
+
45
+ EXAMPLES::
46
+
47
+ sage: n = 2
48
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
49
+ sage: pr = attrcall("promotion")
50
+ sage: pr_inverse = attrcall("promotion_inverse")
51
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
52
+ sage: A.list()
53
+ [[[1]], [[2]], [[3]]]
54
+ sage: A.cartan_type()
55
+ ['A', 2, 1]
56
+ sage: A.index_set()
57
+ (0, 1, 2)
58
+ sage: b = A(rows=[[1]])
59
+ sage: b.weight()
60
+ -Lambda[0] + Lambda[1]
61
+ sage: b.classical_weight()
62
+ (1, 0, 0)
63
+ sage: [x.s(0) for x in A.list()]
64
+ [[[3]], [[2]], [[1]]]
65
+ sage: [x.s(1) for x in A.list()]
66
+ [[[2]], [[1]], [[3]]]
67
+ """
68
+ @staticmethod
69
+ def __classcall__(cls, cartan_type, *args, **options):
70
+ """
71
+ TESTS::
72
+
73
+ sage: n = 1
74
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
75
+ sage: pr = attrcall("promotion")
76
+ sage: pr_inverse = attrcall("promotion_inverse")
77
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) # indirect doctest
78
+ sage: B = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) # indirect doctest
79
+ sage: A is B
80
+ True
81
+ """
82
+ ct = CartanType(cartan_type)
83
+ return super().__classcall__(cls, ct, *args, **options)
84
+
85
+ def __init__(self, cartan_type, classical_crystal, category=None):
86
+ """
87
+ Input is an affine Cartan type ``cartan_type``, a classical crystal
88
+ ``classical_crystal``, and automorphism and its inverse
89
+ ``automorphism`` and ``inverse_automorphism``, and the Dynkin node
90
+ ``dynkin_node``.
91
+
92
+ EXAMPLES::
93
+
94
+ sage: n = 1
95
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
96
+ sage: pr = attrcall("promotion")
97
+ sage: pr_inverse = attrcall("promotion_inverse")
98
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) # indirect doctest
99
+ sage: A.list()
100
+ [[[1]], [[2]]]
101
+ sage: A.cartan_type()
102
+ ['A', 1, 1]
103
+ sage: A.index_set()
104
+ (0, 1)
105
+
106
+ .. NOTE::
107
+
108
+ :class:`~sage.combinat.crystals.affine.AffineCrystalFromClassical`
109
+ is an abstract class, so we can't test it directly.
110
+
111
+ TESTS::
112
+
113
+ sage: TestSuite(A).run()
114
+ """
115
+ if category is None:
116
+ category = RegularLoopCrystals()
117
+ self._cartan_type = cartan_type
118
+ Parent.__init__(self, category=category)
119
+ self.classical_crystal = classical_crystal
120
+ self.module_generators = [self.retract(gen)
121
+ for gen in self.classical_crystal.module_generators]
122
+ self.element_class._latex_ = lambda x: x.lift()._latex_()
123
+
124
+ def _repr_(self):
125
+ """
126
+ EXAMPLES::
127
+
128
+ sage: n = 1
129
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
130
+ sage: pr = attrcall("promotion")
131
+ sage: pr_inverse = attrcall("promotion_inverse")
132
+ sage: crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) # indirect doctest
133
+ An affine crystal for type ['A', 1, 1]
134
+ """
135
+ return "An affine crystal for type {}".format(self.cartan_type())
136
+
137
+ def cardinality(self):
138
+ """
139
+ Return the cardinality of ``self``.
140
+
141
+ EXAMPLES::
142
+
143
+ sage: C = crystals.Tableaux(['A',3],shape=[1])
144
+ sage: pr = attrcall("promotion")
145
+ sage: pr_inverse = attrcall("promotion_inverse")
146
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',3,1],C,pr,pr_inverse,1)
147
+ sage: A.cardinality() == C.cardinality()
148
+ True
149
+ """
150
+ return self.classical_crystal.cardinality()
151
+
152
+ def __iter__(self):
153
+ r"""
154
+ Construct the iterator from the underlying classical crystal.
155
+
156
+ TESTS::
157
+
158
+ sage: n = 1
159
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
160
+ sage: pr = attrcall("promotion")
161
+ sage: pr_inverse = attrcall("promotion_inverse")
162
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) # indirect doctest
163
+ sage: A.list() # indirect doctest
164
+ [[[1]], [[2]]]
165
+ """
166
+ for x in self.classical_crystal:
167
+ yield self.retract(x)
168
+
169
+ def lift(self, affine_elt):
170
+ """
171
+ Lift an affine crystal element to the corresponding classical
172
+ crystal element.
173
+
174
+ EXAMPLES::
175
+
176
+ sage: n = 2
177
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
178
+ sage: pr = attrcall("promotion")
179
+ sage: pr_inverse = attrcall("promotion_inverse")
180
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
181
+ sage: b = A.list()[0]
182
+ sage: A.lift(b)
183
+ [[1]]
184
+ sage: A.lift(b).parent()
185
+ The crystal of tableaux of type ['A', 2] and shape(s) [[1]]
186
+ """
187
+ return affine_elt.lift()
188
+
189
+ def retract(self, classical_elt):
190
+ """
191
+ Transform a classical crystal element to the corresponding
192
+ affine crystal element.
193
+
194
+ EXAMPLES::
195
+
196
+ sage: n = 2
197
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
198
+ sage: pr = attrcall("promotion")
199
+ sage: pr_inverse = attrcall("promotion_inverse")
200
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
201
+ sage: t = C(rows=[[1]])
202
+ sage: t.parent()
203
+ The crystal of tableaux of type ['A', 2] and shape(s) [[1]]
204
+ sage: A.retract(t)
205
+ [[1]]
206
+ sage: A.retract(t).parent() is A
207
+ True
208
+ """
209
+ return self.element_class(self, classical_elt)
210
+
211
+ def _element_constructor_(self, *value, **options):
212
+ r"""
213
+ Coerces ``value`` into ``self``.
214
+
215
+ EXAMPLES::
216
+
217
+ sage: n = 2
218
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
219
+ sage: pr = attrcall("promotion")
220
+ sage: pr_inverse = attrcall("promotion_inverse")
221
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
222
+ sage: b = A(rows=[[1]]) # indirect doctest
223
+ sage: b
224
+ [[1]]
225
+ sage: b.parent()
226
+ An affine crystal for type ['A', 2, 1]
227
+ sage: A(b) is b
228
+ True
229
+ """
230
+ if len(value) == 1 and isinstance(value[0], self.element_class) and value[0].parent() == self:
231
+ return value[0]
232
+ else: # Should do sanity checks! (Including check for inconsistent parent.)
233
+ return self.retract(self.classical_crystal(*value, **options))
234
+
235
+ def __contains__(self, x):
236
+ r"""
237
+ Check whether `x` is an element of ``self``.
238
+
239
+ EXAMPLES::
240
+
241
+ sage: n = 2
242
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
243
+ sage: pr = attrcall("promotion")
244
+ sage: pr_inverse = attrcall("promotion_inverse")
245
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
246
+ sage: b = A(rows=[[1]])
247
+ sage: A.__contains__(b)
248
+ True
249
+ """
250
+ return x.parent() is self
251
+
252
+
253
+ class AffineCrystalFromClassicalElement(ElementWrapper):
254
+ r"""
255
+ Elements of crystals that are constructed from a classical crystal.
256
+
257
+ The elements inherit many of their methods from the classical crystal
258
+ using lift and retract.
259
+
260
+ This class is not instantiated directly but rather ``__call__``-ed from
261
+ :class:`~sage.combinat.crystals.affine.AffineCrystalFromClassical`.
262
+ The syntax of this is governed by the (classical) crystal.
263
+
264
+ EXAMPLES::
265
+
266
+ sage: n = 2
267
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
268
+ sage: pr = attrcall("promotion")
269
+ sage: pr_inverse = attrcall("promotion_inverse")
270
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
271
+ sage: b = A(rows=[[1]])
272
+ sage: b._repr_()
273
+ '[[1]]'
274
+ """
275
+
276
+ def classical_weight(self):
277
+ """
278
+ Return the classical weight corresponding to ``self``.
279
+
280
+ EXAMPLES::
281
+
282
+ sage: n = 2
283
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
284
+ sage: pr = attrcall("promotion")
285
+ sage: pr_inverse = attrcall("promotion_inverse")
286
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
287
+ sage: b = A(rows=[[1]])
288
+ sage: b.classical_weight()
289
+ (1, 0, 0)
290
+ """
291
+ return self.lift().weight()
292
+
293
+ def lift(self):
294
+ """
295
+ Lift an affine crystal element to the corresponding classical
296
+ crystal element.
297
+
298
+ EXAMPLES::
299
+
300
+ sage: n = 2
301
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
302
+ sage: pr = attrcall("promotion")
303
+ sage: pr_inverse = attrcall("promotion_inverse")
304
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
305
+ sage: b = A.list()[0]
306
+ sage: b.lift()
307
+ [[1]]
308
+ sage: b.lift().parent()
309
+ The crystal of tableaux of type ['A', 2] and shape(s) [[1]]
310
+ """
311
+ return self.value
312
+
313
+ def pp(self):
314
+ """
315
+ Method for pretty printing.
316
+
317
+ EXAMPLES::
318
+
319
+ sage: K = crystals.KirillovReshetikhin(['D',3,2],1,1)
320
+ sage: t=K(rows=[[1]])
321
+ sage: t.pp()
322
+ 1
323
+ """
324
+ return self.lift().pp()
325
+
326
+ @abstract_method
327
+ def e0(self):
328
+ r"""
329
+ Assumes that `e_0` is implemented separately.
330
+ """
331
+
332
+ @abstract_method
333
+ def f0(self):
334
+ r"""
335
+ Assumes that `f_0` is implemented separately.
336
+ """
337
+
338
+ def e(self, i):
339
+ r"""
340
+ Return the action of `e_i` on ``self``.
341
+
342
+ EXAMPLES::
343
+
344
+ sage: n = 2
345
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
346
+ sage: pr = attrcall("promotion")
347
+ sage: pr_inverse = attrcall("promotion_inverse")
348
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
349
+ sage: b = A(rows=[[1]])
350
+ sage: b.e(0)
351
+ [[3]]
352
+ sage: b.e(1)
353
+ """
354
+ if i == self.parent()._cartan_type.special_node():
355
+ return self.e0()
356
+ else:
357
+ x = self.lift().e(i)
358
+ if (x is None):
359
+ return None
360
+ else:
361
+ return self.parent().retract(x)
362
+
363
+ def f(self, i):
364
+ r"""
365
+ Return the action of `f_i` on ``self``.
366
+
367
+ EXAMPLES::
368
+
369
+ sage: n = 2
370
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
371
+ sage: pr = attrcall("promotion")
372
+ sage: pr_inverse = attrcall("promotion_inverse")
373
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
374
+ sage: b = A(rows=[[3]])
375
+ sage: b.f(0)
376
+ [[1]]
377
+ sage: b.f(2)
378
+ """
379
+ if i == self.parent()._cartan_type.special_node():
380
+ return self.f0()
381
+ else:
382
+ x = self.lift().f(i)
383
+ if (x is None):
384
+ return None
385
+ else:
386
+ return self.parent().retract(x)
387
+
388
+ def epsilon0(self):
389
+ r"""
390
+ Uses `\varepsilon_0` from the super class, but should be implemented
391
+ if a faster implementation exists.
392
+
393
+ EXAMPLES::
394
+
395
+ sage: n = 2
396
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
397
+ sage: pr = attrcall("promotion")
398
+ sage: pr_inverse = attrcall("promotion_inverse")
399
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
400
+ sage: [x.epsilon0() for x in A.list()]
401
+ [1, 0, 0]
402
+ """
403
+ return super().epsilon(0)
404
+
405
+ def epsilon(self, i):
406
+ """
407
+ Return the maximal time the crystal operator `e_i`
408
+ can be applied to ``self``.
409
+
410
+ EXAMPLES::
411
+
412
+ sage: n = 2
413
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
414
+ sage: pr = attrcall("promotion")
415
+ sage: pr_inverse = attrcall("promotion_inverse")
416
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
417
+ sage: [x.epsilon(0) for x in A.list()]
418
+ [1, 0, 0]
419
+ sage: [x.epsilon(1) for x in A.list()]
420
+ [0, 1, 0]
421
+ """
422
+ if i == self.parent()._cartan_type.special_node():
423
+ return self.epsilon0()
424
+ else:
425
+ return self.lift().epsilon(i)
426
+
427
+ def phi0(self):
428
+ r"""
429
+ Uses `\varphi_0` from the super class, but should be implemented
430
+ if a faster implementation exists.
431
+
432
+ EXAMPLES::
433
+
434
+ sage: n = 2
435
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
436
+ sage: pr = attrcall("promotion")
437
+ sage: pr_inverse = attrcall("promotion_inverse")
438
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
439
+ sage: [x.phi0() for x in A.list()]
440
+ [0, 0, 1]
441
+ """
442
+ return super().phi(0)
443
+
444
+ def phi(self, i):
445
+ r"""
446
+ Return the maximal time the crystal operator `f_i` can be applied to ``self``.
447
+
448
+ EXAMPLES::
449
+
450
+ sage: n = 2
451
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
452
+ sage: pr = attrcall("promotion")
453
+ sage: pr_inverse = attrcall("promotion_inverse")
454
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
455
+ sage: [x.phi(0) for x in A.list()]
456
+ [0, 0, 1]
457
+ sage: [x.phi(1) for x in A.list()]
458
+ [1, 0, 0]
459
+ """
460
+ if i == self.parent()._cartan_type.special_node():
461
+ return self.phi0()
462
+ else:
463
+ return self.lift().phi(i)
464
+
465
+ def _richcmp_(self, other, op):
466
+ """
467
+ Elements of this crystal are compared using the comparison in
468
+ the underlying classical crystal.
469
+
470
+ Non elements of the crystal are not comparable with elements of the
471
+ crystal, so we return ``NotImplemented``.
472
+
473
+ EXAMPLES::
474
+
475
+ sage: K = crystals.KirillovReshetikhin(['A',2,1],1,1)
476
+ sage: b = K(rows=[[1]])
477
+ sage: c = K(rows=[[2]])
478
+
479
+ sage: b == c
480
+ False
481
+ sage: b == b
482
+ True
483
+
484
+ sage: b != c
485
+ True
486
+ sage: b != b
487
+ False
488
+
489
+ sage: c < b
490
+ False
491
+ sage: b < b
492
+ False
493
+ sage: b < c
494
+ True
495
+
496
+ sage: b > c
497
+ False
498
+ sage: b > b
499
+ False
500
+ sage: c > b
501
+ True
502
+
503
+ sage: b <= c
504
+ True
505
+ sage: b <= b
506
+ True
507
+ sage: c <= b
508
+ False
509
+
510
+ sage: c >= b
511
+ True
512
+ sage: b >= b
513
+ True
514
+ sage: b >= c
515
+ False
516
+ """
517
+ return richcmp(self.value, other.value, op)
518
+
519
+
520
+ AffineCrystalFromClassical.Element = AffineCrystalFromClassicalElement
521
+
522
+
523
+ class AffineCrystalFromClassicalAndPromotion(AffineCrystalFromClassical):
524
+ r"""
525
+ Crystals that are constructed from a classical crystal and a
526
+ Dynkin diagram automorphism `\sigma`. In type `A_n`, the Dynkin
527
+ diagram automorphism is `i \to i+1 \pmod n+1` and the
528
+ corresponding map on the crystal is the promotion operation
529
+ `\mathrm{pr}` on tableaux. The affine crystal operators are given
530
+ by `f_0= \mathrm{pr}^{-1} f_{\sigma(0)} \mathrm{pr}`.
531
+
532
+ INPUT:
533
+
534
+ - ``cartan_type`` -- the Cartan type of the resulting affine crystal
535
+
536
+ - ``classical_crystal`` -- instance of a classical crystal
537
+
538
+ - ``automorphism, inverse_automorphism`` -- a function on the
539
+ elements of the ``classical_crystal``
540
+
541
+ - ``dynkin_node`` -- integer specifying the classical node in the
542
+ image of the zero node under the automorphism sigma
543
+
544
+ EXAMPLES::
545
+
546
+ sage: n = 2
547
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
548
+ sage: pr = attrcall("promotion")
549
+ sage: pr_inverse = attrcall("promotion_inverse")
550
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
551
+ sage: A.list()
552
+ [[[1]], [[2]], [[3]]]
553
+ sage: A.cartan_type()
554
+ ['A', 2, 1]
555
+ sage: A.index_set()
556
+ (0, 1, 2)
557
+ sage: b = A(rows=[[1]])
558
+ sage: b.weight()
559
+ -Lambda[0] + Lambda[1]
560
+ sage: b.classical_weight()
561
+ (1, 0, 0)
562
+ sage: [x.s(0) for x in A.list()]
563
+ [[[3]], [[2]], [[1]]]
564
+ sage: [x.s(1) for x in A.list()]
565
+ [[[2]], [[1]], [[3]]]
566
+ """
567
+
568
+ def __init__(self, cartan_type, classical_crystal, p_automorphism, p_inverse_automorphism, dynkin_node, category=None):
569
+ """
570
+ Input is an affine Cartan type ``cartan_type``, a classical crystal
571
+ ``classical_crystal``, and promotion automorphism and its inverse
572
+ ``p_automorphism`` and ``p_inverse_automorphism``, and the Dynkin
573
+ node ``dynkin_node``.
574
+
575
+ EXAMPLES::
576
+
577
+ sage: n = 1
578
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
579
+ sage: pr = attrcall("promotion")
580
+ sage: pr_inverse = attrcall("promotion_inverse")
581
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
582
+ sage: A.list()
583
+ [[[1]], [[2]]]
584
+ sage: A.cartan_type()
585
+ ['A', 1, 1]
586
+ sage: A.index_set()
587
+ (0, 1)
588
+
589
+ TESTS::
590
+
591
+ sage: TestSuite(A).run()
592
+ """
593
+ AffineCrystalFromClassical.__init__(self, cartan_type, classical_crystal, category)
594
+ self.p_automorphism = p_automorphism
595
+ self.p_inverse_automorphism = p_inverse_automorphism
596
+ self.dynkin_node = dynkin_node
597
+
598
+ def automorphism(self, x):
599
+ """
600
+ Give the analogue of the affine Dynkin diagram automorphism on
601
+ the level of crystals.
602
+
603
+ EXAMPLES::
604
+
605
+ sage: n = 2
606
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
607
+ sage: pr = attrcall("promotion")
608
+ sage: pr_inverse = attrcall("promotion_inverse")
609
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
610
+ sage: b = A.list()[0]
611
+ sage: A.automorphism(b)
612
+ [[2]]
613
+ """
614
+ return self.retract(self.p_automorphism(x.lift()))
615
+
616
+ def inverse_automorphism(self, x):
617
+ """
618
+ Give the analogue of the inverse of the affine Dynkin diagram
619
+ automorphism on the level of crystals.
620
+
621
+ EXAMPLES::
622
+
623
+ sage: n = 2
624
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
625
+ sage: pr = attrcall("promotion")
626
+ sage: pr_inverse = attrcall("promotion_inverse")
627
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
628
+ sage: b = A.list()[0]
629
+ sage: A.inverse_automorphism(b)
630
+ [[3]]
631
+ """
632
+ return self.retract(self.p_inverse_automorphism(x.lift()))
633
+
634
+
635
+ class AffineCrystalFromClassicalAndPromotionElement(AffineCrystalFromClassicalElement):
636
+ r"""
637
+ Elements of crystals that are constructed from a classical crystal
638
+ and a Dynkin diagram automorphism. In type `A`, the automorphism is
639
+ the promotion operation on tableaux.
640
+
641
+ This class is not instantiated directly but rather ``__call__``-ed from
642
+ :class:`~sage.combinat.crystals.affine.AffineCrystalFromClassicalAndPromotion`.
643
+ The syntax of this is governed by the (classical) crystal.
644
+
645
+ Since this class inherits from
646
+ :class:`~sage.combinat.crystals.affine.AffineCrystalFromClassicalElement`,
647
+ the methods that need to be implemented are :meth:`e0`, :meth:`f0` and
648
+ possibly :meth:`epsilon0` and :meth:`phi0` if more efficient
649
+ algorithms exist.
650
+
651
+ EXAMPLES::
652
+
653
+ sage: n = 2
654
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
655
+ sage: pr = attrcall("promotion")
656
+ sage: pr_inverse = attrcall("promotion_inverse")
657
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
658
+ sage: b = A(rows=[[1]])
659
+ sage: b._repr_()
660
+ '[[1]]'
661
+ """
662
+
663
+ def e0(self):
664
+ r"""
665
+ Implement `e_0` using the automorphism as
666
+ `e_0 = \operatorname{pr}^{-1} e_{dynkin_node} \operatorname{pr}`
667
+
668
+ EXAMPLES::
669
+
670
+ sage: n = 2
671
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
672
+ sage: pr = attrcall("promotion")
673
+ sage: pr_inverse = attrcall("promotion_inverse")
674
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
675
+ sage: b = A(rows=[[1]])
676
+ sage: b.e0()
677
+ [[3]]
678
+ """
679
+ x = self.parent().automorphism(self).e(self.parent().dynkin_node)
680
+ if (x is None):
681
+ return None
682
+ else:
683
+ return self.parent().inverse_automorphism(x)
684
+
685
+ def f0(self):
686
+ r"""
687
+ Implement `f_0` using the automorphism as
688
+ `f_0 = \operatorname{pr}^{-1} f_{dynkin_node} \operatorname{pr}`
689
+
690
+ EXAMPLES::
691
+
692
+ sage: n = 2
693
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
694
+ sage: pr = attrcall("promotion")
695
+ sage: pr_inverse = attrcall("promotion_inverse")
696
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
697
+ sage: b = A(rows=[[3]])
698
+ sage: b.f0()
699
+ [[1]]
700
+ """
701
+ x = self.parent().automorphism(self).f(self.parent().dynkin_node)
702
+ if (x is None):
703
+ return None
704
+ else:
705
+ return self.parent().inverse_automorphism(x)
706
+
707
+ def epsilon0(self):
708
+ r"""
709
+ Implement `epsilon_0` using the automorphism.
710
+
711
+ EXAMPLES::
712
+
713
+ sage: n = 2
714
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
715
+ sage: pr = attrcall("promotion")
716
+ sage: pr_inverse = attrcall("promotion_inverse")
717
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
718
+ sage: [x.epsilon0() for x in A.list()]
719
+ [1, 0, 0]
720
+ """
721
+ x = self.parent().automorphism(self)
722
+ return x.lift().epsilon(self.parent().dynkin_node)
723
+
724
+ def phi0(self):
725
+ r"""
726
+ Implement `phi_0` using the automorphism.
727
+
728
+ EXAMPLES::
729
+
730
+ sage: n = 2
731
+ sage: C = crystals.Tableaux(['A',n],shape=[1])
732
+ sage: pr = attrcall("promotion")
733
+ sage: pr_inverse = attrcall("promotion_inverse")
734
+ sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
735
+ sage: [x.phi0() for x in A.list()]
736
+ [0, 0, 1]
737
+ """
738
+ x = self.parent().automorphism(self)
739
+ return x.lift().phi(self.parent().dynkin_node)
740
+
741
+
742
+ AffineCrystalFromClassicalAndPromotion.Element = AffineCrystalFromClassicalAndPromotionElement