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,46 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ r"""
3
+ Rigged configurations
4
+
5
+ .. TODO:: Proofread / point to the main classes rather than the modules?
6
+
7
+ - :ref:`sage.combinat.rigged_configurations.rc_crystal`
8
+ - :ref:`sage.combinat.rigged_configurations.rc_infinity`
9
+
10
+ - :ref:`sage.combinat.rigged_configurations.rigged_configurations`
11
+ - :ref:`sage.combinat.rigged_configurations.rigged_configuration_element`
12
+
13
+ - :ref:`sage.combinat.rigged_configurations.tensor_product_kr_tableaux`
14
+ - :ref:`sage.combinat.rigged_configurations.tensor_product_kr_tableaux_element`
15
+ - :ref:`sage.combinat.rigged_configurations.kr_tableaux`
16
+
17
+ - :ref:`sage.combinat.rigged_configurations.kleber_tree`
18
+
19
+ - :ref:`sage.combinat.rigged_configurations.rigged_partition`
20
+
21
+ Bijections
22
+ ----------
23
+
24
+ - :ref:`sage.combinat.rigged_configurations.bijection`
25
+ - :ref:`sage.combinat.rigged_configurations.bij_abstract_class`
26
+ - :ref:`sage.combinat.rigged_configurations.bij_type_A`
27
+ - :ref:`sage.combinat.rigged_configurations.bij_type_B`
28
+ - :ref:`sage.combinat.rigged_configurations.bij_type_C`
29
+ - :ref:`sage.combinat.rigged_configurations.bij_type_D`
30
+ - :ref:`sage.combinat.rigged_configurations.bij_type_A2_odd`
31
+ - :ref:`sage.combinat.rigged_configurations.bij_type_A2_even`
32
+ - :ref:`sage.combinat.rigged_configurations.bij_type_A2_dual`
33
+ - :ref:`sage.combinat.rigged_configurations.bij_type_D_twisted`
34
+ - :ref:`sage.combinat.rigged_configurations.bij_type_D_tri`
35
+ - :ref:`sage.combinat.rigged_configurations.bij_infinity`
36
+ """
37
+ # install the docstring of this module to the containing package
38
+ from sage.misc.namespace_package import install_doc
39
+ install_doc(__package__, __doc__)
40
+
41
+ from sage.misc.lazy_import import lazy_import
42
+
43
+ lazy_import('sage.combinat.rigged_configurations.rigged_configurations',
44
+ 'RiggedConfigurations')
45
+ del lazy_import
46
+ del install_doc
@@ -0,0 +1,548 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.combinat sage.graphs sage.modules
3
+ r"""
4
+ Abstract classes for the rigged configuration bijections
5
+
6
+ This file contains two sets of classes, one for the bijection from KR tableaux to
7
+ rigged configurations and the other for the reverse bijection. We do this for
8
+ two reasons, one is because we can store a state in the bijection locally, so
9
+ we do not have to constantly pass it around between functions. The other is because
10
+ it makes the code easier to read in the \*_element.py files.
11
+
12
+ These classes are not meant to be used by the user and are only supposed to be
13
+ used internally to perform the bijections between
14
+ :class:`~sage.combinat.rigged_configurations.tensor_product_kr_tableaux.TensorProductOfKirillovReshetikhinTableaux`
15
+ and :class:`RiggedConfigurations`.
16
+
17
+ AUTHORS:
18
+
19
+ - Travis Scrimshaw (2011-04-15): Initial version
20
+ """
21
+
22
+ # ****************************************************************************
23
+ # Copyright (C) 2011, 2012 Travis Scrimshaw <tscrim@ucdavis.edu>
24
+ #
25
+ # Distributed under the terms of the GNU General Public License (GPL)
26
+ #
27
+ # This code is distributed in the hope that it will be useful,
28
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
29
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
30
+ # General Public License for more details.
31
+ #
32
+ # The full text of the GPL is available at:
33
+ #
34
+ # https://www.gnu.org/licenses/
35
+ # ****************************************************************************
36
+
37
+ from copy import deepcopy
38
+ from sage.misc.abstract_method import abstract_method
39
+
40
+
41
+ class KRTToRCBijectionAbstract:
42
+ """
43
+ Root abstract class for the bijection from KR tableaux to rigged configurations.
44
+
45
+ This class holds the state of the bijection and generates the next state.
46
+ This class should never be created directly.
47
+ """
48
+
49
+ def __init__(self, tp_krt):
50
+ """
51
+ Initialize the bijection by obtaining the important information from
52
+ the KR tableaux.
53
+
54
+ INPUT:
55
+
56
+ - ``parent`` -- the parent of tensor product of KR tableaux
57
+
58
+ EXAMPLES::
59
+
60
+ sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A', 4, 1], [[2,1]])
61
+ sage: from sage.combinat.rigged_configurations.bij_type_A import KRTToRCBijectionTypeA
62
+ sage: bijection = KRTToRCBijectionTypeA(KRT(pathlist=[[3,1]]))
63
+ sage: TestSuite(bijection).run()
64
+ """
65
+ self.tp_krt = tp_krt
66
+ self.n = tp_krt.parent().cartan_type().classical().rank()
67
+ self.ret_rig_con = tp_krt.parent().rigged_configurations()(partition_list=[[]] * self.n)
68
+ # We allow this to be mutable to make the bijection easier to program.
69
+ # Upon completing the bijection, this will be set to immutable.
70
+ # Do not call this, the object could be in a mutable state and ultimately
71
+ # be placed in an unstable state.
72
+ # The user will (and should) never know about this temporary mutable state.
73
+ self.ret_rig_con._set_mutable()
74
+ self.cur_dims = []
75
+ self.cur_path = []
76
+ # self.L = {}
77
+
78
+ def __eq__(self, rhs):
79
+ r"""
80
+ Check equality.
81
+
82
+ This is only here for pickling check. This is a temporary placeholder
83
+ class, and as such, should never be compared.
84
+
85
+ TESTS::
86
+
87
+ sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A', 4, 1], [[2,1]])
88
+ sage: from sage.combinat.rigged_configurations.bij_type_A import KRTToRCBijectionTypeA
89
+ sage: bijection = KRTToRCBijectionTypeA(KRT(pathlist=[[5,3]]))
90
+ sage: bijection2 = KRTToRCBijectionTypeA(KRT(pathlist=[[5,3]]))
91
+ sage: bijection == bijection2
92
+ True
93
+ """
94
+ return isinstance(rhs, KRTToRCBijectionAbstract)
95
+
96
+ def run(self, verbose=False):
97
+ """
98
+ Run the bijection from a tensor product of KR tableaux to a rigged
99
+ configuration.
100
+
101
+ INPUT:
102
+
103
+ - ``tp_krt`` -- a tensor product of KR tableaux
104
+
105
+ - ``verbose`` -- (default: ``False``) display each step in the
106
+ bijection
107
+
108
+ EXAMPLES::
109
+
110
+ sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A', 4, 1], [[2, 1]])
111
+ sage: from sage.combinat.rigged_configurations.bij_type_A import KRTToRCBijectionTypeA
112
+ sage: KRTToRCBijectionTypeA(KRT(pathlist=[[5,2]])).run()
113
+ <BLANKLINE>
114
+ -1[ ]-1
115
+ <BLANKLINE>
116
+ 1[ ]1
117
+ <BLANKLINE>
118
+ 0[ ]0
119
+ <BLANKLINE>
120
+ -1[ ]-1
121
+ <BLANKLINE>
122
+ """
123
+ if verbose:
124
+ from sage.combinat.rigged_configurations.tensor_product_kr_tableaux_element \
125
+ import TensorProductOfKirillovReshetikhinTableauxElement
126
+
127
+ for cur_crystal in reversed(self.tp_krt):
128
+ target = cur_crystal.parent()._r
129
+ # Iterate through the columns
130
+ for col_number, cur_column in enumerate(reversed(cur_crystal.to_array(False))):
131
+ self.cur_path.insert(0, []) # Prepend an empty list
132
+
133
+ self.cur_dims.insert(0, [0, 1])
134
+
135
+ for letter in reversed(cur_column):
136
+ self.cur_dims[0][0] = self._next_index(self.cur_dims[0][0], target)
137
+ val = letter.value # Convert from a CrystalOfLetter to an Integer
138
+
139
+ if verbose:
140
+ print("====================")
141
+ print(repr(TensorProductOfKirillovReshetikhinTableauxElement(self.tp_krt.parent(), self.cur_path)))
142
+ print("--------------------")
143
+ print(repr(self.ret_rig_con))
144
+ print("--------------------\n")
145
+
146
+ # Build the next state
147
+ self.cur_path[0].insert(0, [letter]) # Prepend the value
148
+ self.next_state(val)
149
+
150
+ # If we've split off a column, we need to merge the current column
151
+ # to the current crystal tableau
152
+ if col_number > 0:
153
+ if verbose:
154
+ print("====================")
155
+ print(repr(TensorProductOfKirillovReshetikhinTableauxElement(self.tp_krt.parent(), self.cur_path)))
156
+ print("--------------------")
157
+ print(repr(self.ret_rig_con))
158
+ print("--------------------\n")
159
+ print("Applying column merge")
160
+
161
+ for i, letter_singleton in enumerate(self.cur_path[0]):
162
+ self.cur_path[1][i].insert(0, letter_singleton[0])
163
+ self.cur_dims[1][1] += 1
164
+ self.cur_path.pop(0)
165
+ self.cur_dims.pop(0)
166
+
167
+ # And perform the inverse column splitting map on the RC
168
+ for a in range(self.n):
169
+ self._update_vacancy_nums(a)
170
+
171
+ self.ret_rig_con.set_immutable() # Return it to immutable
172
+ return self.ret_rig_con
173
+
174
+ @abstract_method
175
+ def next_state(self, val):
176
+ r"""
177
+ Build the next state in the bijection.
178
+
179
+ INPUT:
180
+
181
+ - ``val`` -- the value we are adding
182
+
183
+ TESTS::
184
+
185
+ sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A', 4, 1], [[2,1]])
186
+ sage: from sage.combinat.rigged_configurations.bij_type_A import KRTToRCBijectionTypeA
187
+ sage: bijection = KRTToRCBijectionTypeA(KRT(pathlist=[[5,3]]))
188
+ sage: bijection.cur_path.insert(0, [])
189
+ sage: bijection.cur_dims.insert(0, [0, 1])
190
+ sage: bijection.cur_path[0].insert(0, [3])
191
+ sage: bijection.next_state(3)
192
+ sage: bijection.ret_rig_con
193
+ <BLANKLINE>
194
+ -1[ ]-1
195
+ <BLANKLINE>
196
+ -1[ ]-1
197
+ <BLANKLINE>
198
+ (/)
199
+ <BLANKLINE>
200
+ (/)
201
+ <BLANKLINE>
202
+ """
203
+
204
+ def _update_vacancy_nums(self, a):
205
+ r"""
206
+ Update the vacancy numbers of a rigged partition.
207
+
208
+ Helper function to (batch) update the vacancy numbers of the rigged
209
+ partition at position `a` in the rigged configuration stored by this
210
+ bijection.
211
+
212
+ INPUT:
213
+
214
+ - ``a`` -- the index of the partition to update
215
+
216
+ TESTS::
217
+
218
+ sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A', 4, 1], [[2,1]])
219
+ sage: from sage.combinat.rigged_configurations.bij_abstract_class import KRTToRCBijectionAbstract
220
+ sage: bijection = KRTToRCBijectionAbstract(KRT(pathlist=[[3,2]]))
221
+ sage: bijection._update_vacancy_nums(2)
222
+ """
223
+ # Check to make sure we have a valid index (currently removed)
224
+ # If the current tableau is empty, there is nothing to do
225
+ if not self.ret_rig_con[a]: # Check to see if we have vacancy numbers
226
+ return
227
+
228
+ # Setup the first block
229
+ block_len = self.ret_rig_con[a][0]
230
+ nu = self.ret_rig_con.nu()
231
+ vac_num = self.ret_rig_con.parent()._calc_vacancy_number(nu, a, nu[a][0],
232
+ dims=self.cur_dims)
233
+
234
+ for i, row_len in enumerate(self.ret_rig_con[a]):
235
+ # If we've gone to a different sized block, then update the
236
+ # values which change when moving to a new block size
237
+ if block_len != row_len:
238
+ vac_num = self.ret_rig_con.parent()._calc_vacancy_number(nu, a, row_len,
239
+ dims=self.cur_dims)
240
+ block_len = row_len
241
+ self.ret_rig_con[a].vacancy_numbers[i] = vac_num
242
+
243
+ def _update_partition_values(self, a):
244
+ r"""
245
+ Update the partition values of a rigged partition.
246
+
247
+ Helper function to update the partition values of a given rigged
248
+ partition row. This will go through all of our partition values and set
249
+ them to our vacancy number if the corresponding row has been changed
250
+ (indicated by being set to ``None``).
251
+
252
+ INPUT:
253
+
254
+ - ``a`` -- the index of the partition to update
255
+
256
+ TESTS::
257
+
258
+ sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A', 4, 1], [[2,1]])
259
+ sage: from sage.combinat.rigged_configurations.bij_abstract_class import KRTToRCBijectionAbstract
260
+ sage: bijection = KRTToRCBijectionAbstract(KRT(pathlist=[[5,2]]))
261
+ sage: bijection._update_partition_values(2)
262
+ """
263
+ rigged_partition = self.ret_rig_con[a]
264
+ for index, value in enumerate(rigged_partition.rigging):
265
+ if value is None:
266
+ rigged_partition.rigging[index] = rigged_partition.vacancy_numbers[index]
267
+ if index > 0 and rigged_partition[index - 1] == rigged_partition[index] \
268
+ and rigged_partition.rigging[index - 1] < rigged_partition.rigging[index]:
269
+ # If we need to reorder
270
+ pos = 0
271
+ width = rigged_partition[index]
272
+ val = rigged_partition.rigging[index]
273
+ for i in reversed(range(index - 1)):
274
+ if rigged_partition[i] > width or rigged_partition.rigging[i] >= val:
275
+ pos = i + 1
276
+ break
277
+
278
+ rigged_partition.rigging.pop(index)
279
+ rigged_partition.rigging.insert(pos, val)
280
+
281
+ def _next_index(self, r, target):
282
+ """
283
+ Return the next index after ``r`` when performing a step
284
+ in the bijection going towards ``target``.
285
+
286
+ TESTS::
287
+
288
+ sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A', 4, 1], [[2,1]])
289
+ sage: from sage.combinat.rigged_configurations.bij_abstract_class import KRTToRCBijectionAbstract
290
+ sage: bijection = KRTToRCBijectionAbstract(KRT(pathlist=[[5,2]]))
291
+ sage: bijection._next_index(1, 2)
292
+ 2
293
+ """
294
+ return r + 1
295
+
296
+
297
+ class RCToKRTBijectionAbstract:
298
+ """
299
+ Root abstract class for the bijection from rigged configurations to
300
+ tensor product of Kirillov-Reshetikhin tableaux.
301
+
302
+ This class holds the state of the bijection and generates the next state.
303
+ This class should never be created directly.
304
+ """
305
+
306
+ def __init__(self, RC_element):
307
+ """
308
+ Initialize the bijection helper.
309
+
310
+ INPUT:
311
+
312
+ - ``RC_element`` -- the rigged configuration
313
+
314
+ EXAMPLES::
315
+
316
+ sage: RC = RiggedConfigurations(['A', 4, 1], [[2, 1]])
317
+ sage: from sage.combinat.rigged_configurations.bij_abstract_class import RCToKRTBijectionAbstract
318
+ sage: bijection = RCToKRTBijectionAbstract(RC(partition_list=[[1],[1],[1],[1]]))
319
+ sage: TestSuite(bijection).run()
320
+ """
321
+ # Make a mutable clone of the rigged configuration for the bijection
322
+ # This will be deleted when the bijection is completed
323
+ self.rigged_con = RC_element.__copy__()
324
+ self.n = RC_element.parent().cartan_type().classical().rank()
325
+ self.KRT = RC_element.parent().tensor_product_of_kirillov_reshetikhin_tableaux()
326
+
327
+ # Make a (deep) copy of the dimensions for the bijection
328
+ self.cur_dims = [list(x[:]) for x in self.rigged_con.parent().dims]
329
+
330
+ # Note that this implementation of the bijection is destructive to cur_partitions,
331
+ # therefore we will make a (deep) copy of the partitions.
332
+ # TODO: Convert from cur_partitions to rigged_con
333
+ self.cur_partitions = deepcopy(list(self.rigged_con)[:])
334
+
335
+ # This is a dummy edge to start the process
336
+ cp = RC_element.__copy__()
337
+ cp.set_immutable()
338
+ self._graph = [[[], (cp, 0)]]
339
+
340
+ def __eq__(self, rhs):
341
+ r"""
342
+ Check equality.
343
+
344
+ This is only here for pickling check. This is a temporary placeholder
345
+ class, and as such, should never be compared.
346
+
347
+ TESTS::
348
+
349
+ sage: RC = RiggedConfigurations(['A', 4, 1], [[2, 1]])
350
+ sage: from sage.combinat.rigged_configurations.bij_type_A import RCToKRTBijectionTypeA
351
+ sage: bijection = RCToKRTBijectionTypeA(RC(partition_list=[[1],[1],[1],[1]]))
352
+ sage: bijection2 = RCToKRTBijectionTypeA(RC(partition_list=[[1],[1],[1],[1]]))
353
+ sage: bijection == bijection2
354
+ True
355
+ """
356
+ return isinstance(rhs, RCToKRTBijectionAbstract)
357
+
358
+ def run(self, verbose=False, build_graph=False):
359
+ """
360
+ Run the bijection from rigged configurations to tensor product of KR
361
+ tableaux.
362
+
363
+ INPUT:
364
+
365
+ - ``verbose`` -- boolean (default: ``False``); display each step in the
366
+ bijection
367
+ - ``build_graph`` -- boolean (default: ``False``); build the graph of each
368
+ step of the bijection
369
+
370
+ EXAMPLES::
371
+
372
+ sage: RC = RiggedConfigurations(['A', 4, 1], [[2, 1]])
373
+ sage: x = RC(partition_list=[[1],[1],[1],[1]])
374
+ sage: from sage.combinat.rigged_configurations.bij_type_A import RCToKRTBijectionTypeA
375
+ sage: RCToKRTBijectionTypeA(x).run()
376
+ [[2], [5]]
377
+ sage: bij = RCToKRTBijectionTypeA(x)
378
+ sage: bij.run(build_graph=True)
379
+ [[2], [5]]
380
+ sage: bij._graph
381
+ Digraph on 3 vertices
382
+ """
383
+ from sage.combinat.crystals.letters import CrystalOfLetters
384
+ letters = CrystalOfLetters(self.rigged_con.parent()._cartan_type.classical())
385
+
386
+ # This is technically bad, but because the first thing we do is append
387
+ # an empty list to ret_crystal_path, we correct this. We do it this
388
+ # way so that we do not have to remove an empty list after the
389
+ # bijection has been performed.
390
+ ret_crystal_path = []
391
+
392
+ for dim in self.rigged_con.parent().dims:
393
+ ret_crystal_path.append([])
394
+
395
+ # Iterate over each column
396
+ for dummy_var in range(dim[1]):
397
+ # Split off a new column if necessary
398
+ if self.cur_dims[0][1] > 1:
399
+ if verbose:
400
+ print("====================")
401
+ print(repr(self.rigged_con.parent()(*self.cur_partitions, use_vacancy_numbers=True)))
402
+ print("--------------------")
403
+ print(ret_crystal_path)
404
+ print("--------------------\n")
405
+ print("Applying column split")
406
+
407
+ self.cur_dims[0][1] -= 1
408
+ self.cur_dims.insert(0, [dim[0], 1])
409
+
410
+ # Perform the corresponding splitting map on rigged configurations
411
+ # All it does is update the vacancy numbers on the RC side
412
+ for a in range(self.n):
413
+ self._update_vacancy_numbers(a)
414
+
415
+ if build_graph:
416
+ y = self.rigged_con.parent()(*[x._clone() for x in self.cur_partitions], use_vacancy_numbers=True)
417
+ self._graph.append([self._graph[-1][1], (y, len(self._graph)), 'ls'])
418
+
419
+ while self.cur_dims[0][0]: # > 0:
420
+ if verbose:
421
+ print("====================")
422
+ print(repr(self.rigged_con.parent()(*self.cur_partitions, use_vacancy_numbers=True)))
423
+ print("--------------------")
424
+ print(ret_crystal_path)
425
+ print("--------------------\n")
426
+
427
+ ht = self.cur_dims[0][0]
428
+ self.cur_dims[0][0] = self._next_index(ht)
429
+ b = self.next_state(ht)
430
+
431
+ # Make sure we have a crystal letter
432
+ ret_crystal_path[-1].append(letters(b)) # Append the rank
433
+
434
+ if build_graph:
435
+ y = self.rigged_con.parent()(*[x._clone() for x in self.cur_partitions], use_vacancy_numbers=True)
436
+ self._graph.append([self._graph[-1][1], (y, len(self._graph)), letters(b)])
437
+
438
+ self.cur_dims.pop(0) # Pop off the leading column
439
+
440
+ if build_graph:
441
+ self._graph.pop(0) # Remove the dummy at the start
442
+ from sage.graphs.digraph import DiGraph
443
+ from sage.graphs.dot2tex_utils import have_dot2tex
444
+ self._graph = DiGraph(self._graph, format='list_of_edges')
445
+ if have_dot2tex():
446
+ self._graph.set_latex_options(format='dot2tex', edge_labels=True)
447
+ return self.KRT(pathlist=ret_crystal_path)
448
+
449
+ @abstract_method
450
+ def next_state(self, height):
451
+ """
452
+ Build the next state in the bijection.
453
+
454
+ TESTS::
455
+
456
+ sage: RC = RiggedConfigurations(['A', 4, 1], [[2, 1]])
457
+ sage: from sage.combinat.rigged_configurations.bij_type_A import RCToKRTBijectionTypeA
458
+ sage: bijection = RCToKRTBijectionTypeA(RC(partition_list=[[1],[1],[1],[1]]))
459
+ sage: bijection.next_state(1)
460
+ 5
461
+ sage: bijection.cur_partitions
462
+ [(/)
463
+ , (/)
464
+ , (/)
465
+ , (/)
466
+ ]
467
+ """
468
+
469
+ def _update_vacancy_numbers(self, a):
470
+ r"""
471
+ Update the vacancy numbers during the bijection.
472
+
473
+ INPUT:
474
+
475
+ - ``a`` -- the index of the partition to update
476
+
477
+ TESTS::
478
+
479
+ sage: RC = RiggedConfigurations(['A', 4, 1], [[2, 1]])
480
+ sage: from sage.combinat.rigged_configurations.bij_abstract_class import RCToKRTBijectionAbstract
481
+ sage: bijection = RCToKRTBijectionAbstract(RC(partition_list=[[1],[1],[1],[1]]))
482
+ sage: bijection._update_vacancy_numbers(2)
483
+ """
484
+
485
+ # Nothing to do if there the rigged partition is empty
486
+ if not self.cur_partitions[a]:
487
+ return
488
+
489
+ partition = self.cur_partitions[a]
490
+
491
+ # Setup the first block
492
+ block_len = partition[0]
493
+ vac_num = self.rigged_con.parent()._calc_vacancy_number(self.cur_partitions,
494
+ a, partition[0],
495
+ dims=self.cur_dims)
496
+
497
+ for i, row_len in enumerate(self.cur_partitions[a]):
498
+ # If we've gone to a different sized block, then update the
499
+ # values which change when moving to a new block size
500
+ if block_len != row_len:
501
+ vac_num = self.rigged_con.parent()._calc_vacancy_number(self.cur_partitions,
502
+ a, row_len,
503
+ dims=self.cur_dims)
504
+ block_len = row_len
505
+
506
+ partition.vacancy_numbers[i] = vac_num
507
+
508
+ def _find_singular_string(self, partition, last_size):
509
+ r"""
510
+ Return the index of the singular string or ``None`` if not found.
511
+
512
+ Helper method to find a singular string at least as long as
513
+ ``last_size``.
514
+
515
+ INPUT:
516
+
517
+ - ``partition`` -- the partition to look in
518
+
519
+ - ``last_size`` -- the last size found
520
+
521
+ TESTS::
522
+
523
+ sage: RC = RiggedConfigurations(['A', 4, 1], [[2, 1]])
524
+ sage: from sage.combinat.rigged_configurations.bij_abstract_class import RCToKRTBijectionAbstract
525
+ sage: bijection = RCToKRTBijectionAbstract(RC(partition_list=[[1],[1],[1],[1]]))
526
+ sage: bijection._find_singular_string(bijection.cur_partitions[2], 2)
527
+ sage: bijection._find_singular_string(bijection.cur_partitions[2], 0)
528
+ 0
529
+ """
530
+ for i in reversed(range(len(partition))):
531
+ if (partition[i] >= last_size
532
+ and partition.vacancy_numbers[i] == partition.rigging[i]):
533
+ return i
534
+
535
+ def _next_index(self, r):
536
+ """
537
+ Return the next index after ``r`` when performing a step
538
+ in the bijection.
539
+
540
+ TESTS::
541
+
542
+ sage: RC = RiggedConfigurations(['A', 4, 1], [[2, 1]])
543
+ sage: from sage.combinat.rigged_configurations.bij_abstract_class import RCToKRTBijectionAbstract
544
+ sage: bijection = RCToKRTBijectionAbstract(RC(partition_list=[[1],[1],[1],[1]]))
545
+ sage: bijection._next_index(2)
546
+ 1
547
+ """
548
+ return r - 1