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,338 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.combinat sage.graphs sage.modules
3
+ r"""
4
+ Bijection classes for type `A_{2n}^{(2)\dagger}`
5
+
6
+ Part of the (internal) classes which runs the bijection between rigged
7
+ configurations and KR tableaux of type `A_{2n}^{(2)\dagger}`.
8
+
9
+ AUTHORS:
10
+
11
+ - Travis Scrimshaw (2012-12-21): Initial version
12
+
13
+ TESTS::
14
+
15
+ sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(CartanType(['A', 4, 2]).dual(), [[2, 1]])
16
+ sage: from sage.combinat.rigged_configurations.bij_type_A2_dual import KRTToRCBijectionTypeA2Dual
17
+ sage: bijection = KRTToRCBijectionTypeA2Dual(KRT(pathlist=[[2,1]]))
18
+ sage: TestSuite(bijection).run()
19
+ sage: RC = RiggedConfigurations(CartanType(['A', 4, 2]).dual(), [[2, 1]])
20
+ sage: from sage.combinat.rigged_configurations.bij_type_A2_dual import RCToKRTBijectionTypeA2Dual
21
+ sage: bijection = RCToKRTBijectionTypeA2Dual(RC(partition_list=[[],[]]))
22
+ sage: TestSuite(bijection).run()
23
+ """
24
+
25
+ # ****************************************************************************
26
+ # Copyright (C) 2012 Travis Scrimshaw <tscrim@ucdavis.edu>
27
+ #
28
+ # Distributed under the terms of the GNU General Public License (GPL)
29
+ #
30
+ # This code is distributed in the hope that it will be useful,
31
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
32
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
33
+ # General Public License for more details.
34
+ #
35
+ # The full text of the GPL is available at:
36
+ #
37
+ # https://www.gnu.org/licenses/
38
+ # ****************************************************************************
39
+
40
+ from sage.combinat.rigged_configurations.bij_type_C import KRTToRCBijectionTypeC
41
+ from sage.combinat.rigged_configurations.bij_type_C import RCToKRTBijectionTypeC
42
+ from sage.combinat.rigged_configurations.bij_type_A import KRTToRCBijectionTypeA
43
+
44
+ from sage.rings.rational_field import QQ
45
+
46
+
47
+ class KRTToRCBijectionTypeA2Dual(KRTToRCBijectionTypeC):
48
+ r"""
49
+ Specific implementation of the bijection from KR tableaux to rigged
50
+ configurations for type `A_{2n}^{(2)\dagger}`.
51
+
52
+ This inherits from type `C_n^{(1)}` because we use the same methods in
53
+ some places.
54
+ """
55
+
56
+ def next_state(self, val):
57
+ r"""
58
+ Build the next state for type `A_{2n}^{(2)\dagger}`.
59
+
60
+ TESTS::
61
+
62
+ sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(CartanType(['A', 4, 2]).dual(), [[2,1]])
63
+ sage: from sage.combinat.rigged_configurations.bij_type_A2_dual import KRTToRCBijectionTypeA2Dual
64
+ sage: bijection = KRTToRCBijectionTypeA2Dual(KRT(pathlist=[[-1,2]]))
65
+ sage: bijection.cur_path.insert(0, [])
66
+ sage: bijection.cur_dims.insert(0, [0, 1])
67
+ sage: bijection.cur_path[0].insert(0, [2])
68
+ sage: bijection.next_state(2)
69
+ """
70
+ n = self.n
71
+ tableau_height = len(self.cur_path[0]) - 1
72
+
73
+ if val > 0:
74
+ # If it is a regular value, we follow the A_n rules
75
+ KRTToRCBijectionTypeA.next_state(self, val)
76
+ return
77
+
78
+ pos_val = -val
79
+
80
+ if pos_val == 0:
81
+ if len(self.ret_rig_con[pos_val - 1]) > 0:
82
+ max_width = self.ret_rig_con[n-1][0]
83
+ else:
84
+ max_width = 1
85
+ max_width = self.ret_rig_con[n-1].insert_cell(max_width)
86
+ width_n = max_width + 1
87
+
88
+ # Follow regular A_n rules
89
+ for a in reversed(range(tableau_height, n-1)):
90
+ max_width = self.ret_rig_con[a].insert_cell(max_width)
91
+ self._update_vacancy_nums(a + 1)
92
+ self._update_partition_values(a + 1)
93
+ self._update_vacancy_nums(tableau_height)
94
+ self._update_partition_values(tableau_height)
95
+ if tableau_height > 0:
96
+ self._update_vacancy_nums(tableau_height-1)
97
+ self._update_partition_values(tableau_height-1)
98
+
99
+ # Make the new string at n quasi-singular
100
+ p = self.ret_rig_con[n-1]
101
+ for i in range(len(p)):
102
+ if p._list[i] == width_n:
103
+ p.rigging[i] = p.rigging[i] - QQ(1)/QQ(2)
104
+ break
105
+ return
106
+
107
+ case_S = [None] * n
108
+ pos_val = -val
109
+
110
+ # Always add a cell to the first singular value in the first
111
+ # tableau we are updating.
112
+ if len(self.ret_rig_con[pos_val - 1]) > 0:
113
+ max_width = self.ret_rig_con[pos_val - 1][0]
114
+ else:
115
+ max_width = 1
116
+
117
+ # Add cells similar to type A_n but we move to the right until we
118
+ # reach the value of n-1
119
+ for a in range(pos_val - 1, n-1):
120
+ max_width = self.ret_rig_con[a].insert_cell(max_width)
121
+ case_S[a] = max_width
122
+
123
+ # Special case for n
124
+ # If we find a quasi-singular string first, then we are in case (Q, S)
125
+ # otherwise we will find a singular string and insert 2 cells
126
+ partition = self.ret_rig_con[n-1]
127
+ num_rows = len(partition)
128
+ case_QS = False
129
+ for i in range(num_rows + 1):
130
+ if i == num_rows:
131
+ max_width = 0
132
+ if case_QS:
133
+ partition._list.append(1)
134
+ partition.vacancy_numbers.append(None)
135
+ # Go through our partition until we find a length of greater than 1
136
+ j = len(partition._list) - 1
137
+ while j >= 0 and partition._list[j] == 1:
138
+ j -= 1
139
+ partition.rigging.insert(j + 1, None)
140
+ width_n = 1
141
+ else:
142
+ # Go through our partition until we find a length of greater than 2
143
+ j = len(partition._list) - 1
144
+ while j >= 0 and partition._list[j] <= 2:
145
+ j -= 1
146
+ partition._list.insert(j+1, 2)
147
+ partition.vacancy_numbers.insert(j+1, None)
148
+ partition.rigging.insert(j+1, None)
149
+ break
150
+ elif partition._list[i] <= max_width:
151
+ if partition.vacancy_numbers[i] == partition.rigging[i]:
152
+ max_width = partition._list[i]
153
+ if case_QS:
154
+ partition._list[i] += 1
155
+ width_n = partition._list[i]
156
+ partition.rigging[i] = None
157
+ else:
158
+ j = i - 1
159
+ while j >= 0 and partition._list[j] <= max_width + 2:
160
+ partition.rigging[j+1] = partition.rigging[j] # Shuffle it along
161
+ j -= 1
162
+ partition._list.pop(i)
163
+ partition._list.insert(j+1, max_width + 2)
164
+ partition.rigging[j+1] = None
165
+ break
166
+ elif partition.vacancy_numbers[i] - QQ(1)/QQ(2) == partition.rigging[i] and not case_QS:
167
+ case_QS = True
168
+ partition._list[i] += 1
169
+ partition.rigging[i] = None
170
+ # No need to set max_width here since we will find a singular string
171
+
172
+ # Now go back following the regular C_n (ish) rules
173
+ for a in reversed(range(tableau_height, n-1)):
174
+ if case_S[a] == max_width:
175
+ self._insert_cell_case_S(self.ret_rig_con[a])
176
+ else:
177
+ max_width = self.ret_rig_con[a].insert_cell(max_width)
178
+ self._update_vacancy_nums(a + 1)
179
+ self._update_partition_values(a + 1)
180
+
181
+ # Update the final rigged partitions
182
+ if tableau_height < n:
183
+ self._update_vacancy_nums(tableau_height)
184
+ self._update_partition_values(tableau_height)
185
+
186
+ if pos_val <= tableau_height:
187
+ for a in range(pos_val-1, tableau_height):
188
+ self._update_vacancy_nums(a)
189
+ self._update_partition_values(a)
190
+ if pos_val > 1:
191
+ self._update_vacancy_nums(pos_val - 2)
192
+ self._update_partition_values(pos_val - 2)
193
+ elif tableau_height > 0:
194
+ self._update_vacancy_nums(tableau_height - 1)
195
+ self._update_partition_values(tableau_height - 1)
196
+
197
+ if case_QS:
198
+ # Make the new string quasi-singular
199
+ num_rows = len(partition)
200
+ for i in range(num_rows):
201
+ if partition._list[i] == width_n:
202
+ partition.rigging[i] = partition.rigging[i] - QQ(1)/QQ(2)
203
+ break
204
+
205
+
206
+ class RCToKRTBijectionTypeA2Dual(RCToKRTBijectionTypeC):
207
+ r"""
208
+ Specific implementation of the bijection from rigged configurations to
209
+ tensor products of KR tableaux for type `A_{2n}^{(2)\dagger}`.
210
+ """
211
+
212
+ def next_state(self, height):
213
+ r"""
214
+ Build the next state for type `A_{2n}^{(2)\dagger}`.
215
+
216
+ TESTS::
217
+
218
+ sage: RC = RiggedConfigurations(CartanType(['A', 4, 2]).dual(), [[2,1]])
219
+ sage: from sage.combinat.rigged_configurations.bij_type_A2_dual import RCToKRTBijectionTypeA2Dual
220
+ sage: bijection = RCToKRTBijectionTypeA2Dual(RC(partition_list=[[2],[2,2]]))
221
+ sage: bijection.next_state(2)
222
+ -1
223
+ """
224
+ height -= 1 # indexing
225
+ n = self.n
226
+ ell = [None] * (2*n)
227
+ case_S = [False] * n
228
+ case_Q = False
229
+ b = None
230
+
231
+ # Calculate the rank and ell values
232
+
233
+ last_size = 0
234
+ for a in range(height, n-1):
235
+ ell[a] = self._find_singular_string(self.cur_partitions[a], last_size)
236
+
237
+ if ell[a] is None:
238
+ b = a + 1
239
+ break
240
+ else:
241
+ last_size = self.cur_partitions[a][ell[a]]
242
+
243
+ if b is None:
244
+ partition = self.cur_partitions[n-1]
245
+ # Special case for n
246
+ for i in reversed(range(len(partition))):
247
+ if partition[i] >= last_size:
248
+ if partition.vacancy_numbers[i] == partition.rigging[i]:
249
+ last_size = partition[i]
250
+ case_S[n-1] = True
251
+ ell[2*n-1] = i
252
+ break
253
+ elif partition.vacancy_numbers[i] - QQ(1)/QQ(2) == partition.rigging[i] and not case_Q:
254
+ case_Q = True
255
+ # This will never be singular
256
+ last_size = partition[i] + 1
257
+ ell[n-1] = i
258
+
259
+ if ell[2*n-1] is None:
260
+ if not case_Q:
261
+ b = n
262
+ else:
263
+ b = 0
264
+
265
+ if b is None:
266
+ # Now go back
267
+ for a in reversed(range(n-1)):
268
+ if a >= height and self.cur_partitions[a][ell[a]] == last_size:
269
+ ell[n+a] = ell[a]
270
+ case_S[a] = True
271
+ else:
272
+ ell[n+a] = self._find_singular_string(self.cur_partitions[a], last_size)
273
+
274
+ if ell[n + a] is None:
275
+ b = -(a + 2)
276
+ break
277
+ else:
278
+ last_size = self.cur_partitions[a][ell[n + a]]
279
+
280
+ if b is None:
281
+ b = -1
282
+
283
+ # Determine the new rigged configuration by removing boxes from the
284
+ # selected string and then making the new string singular
285
+ if n > 1:
286
+ if case_S[0]:
287
+ row_num = None
288
+ row_num_bar = self.cur_partitions[0].remove_cell(ell[n], 2)
289
+ else:
290
+ row_num = self.cur_partitions[0].remove_cell(ell[0])
291
+ row_num_bar = self.cur_partitions[0].remove_cell(ell[n])
292
+ for a in range(1, n-1):
293
+ if case_S[a]:
294
+ row_num_next = None
295
+ row_num_bar_next = self.cur_partitions[a].remove_cell(ell[n+a], 2)
296
+ else:
297
+ row_num_next = self.cur_partitions[a].remove_cell(ell[a])
298
+ row_num_bar_next = self.cur_partitions[a].remove_cell(ell[n+a])
299
+
300
+ self._update_vacancy_numbers(a - 1)
301
+ if row_num is not None:
302
+ self.cur_partitions[a-1].rigging[row_num] = self.cur_partitions[a-1].vacancy_numbers[row_num]
303
+ if row_num_bar is not None:
304
+ self.cur_partitions[a-1].rigging[row_num_bar] = self.cur_partitions[a-1].vacancy_numbers[row_num_bar]
305
+ row_num = row_num_next
306
+ row_num_bar = row_num_bar_next
307
+
308
+ if case_Q:
309
+ row_num_next = self.cur_partitions[n-1].remove_cell(ell[n-1])
310
+ if case_S[n-1]:
311
+ row_num_bar_next = self.cur_partitions[n-1].remove_cell(ell[2*n-1])
312
+ else:
313
+ row_num_bar_next = None
314
+ elif case_S[n-1]:
315
+ row_num_next = None
316
+ row_num_bar_next = self.cur_partitions[n-1].remove_cell(ell[2*n-1], 2)
317
+ else:
318
+ row_num_next = None
319
+ row_num_bar_next = None
320
+
321
+ if n > 1:
322
+ self._update_vacancy_numbers(n - 2)
323
+ if row_num is not None:
324
+ self.cur_partitions[n-2].rigging[row_num] = self.cur_partitions[n-2].vacancy_numbers[row_num]
325
+ if row_num_bar is not None:
326
+ self.cur_partitions[n-2].rigging[row_num_bar] = self.cur_partitions[n-2].vacancy_numbers[row_num_bar]
327
+
328
+ self._update_vacancy_numbers(n - 1)
329
+ if row_num_next is not None:
330
+ self.cur_partitions[n-1].rigging[row_num_next] = self.cur_partitions[n-1].vacancy_numbers[row_num_next]
331
+ if row_num_bar_next is not None:
332
+ if case_Q:
333
+ # This will always be the largest value
334
+ self.cur_partitions[n-1].rigging[row_num_bar_next] = self.cur_partitions[n-1].vacancy_numbers[row_num_bar_next] - QQ(1)/QQ(2)
335
+ else:
336
+ self.cur_partitions[n-1].rigging[row_num_bar_next] = self.cur_partitions[n-1].vacancy_numbers[row_num_bar_next]
337
+
338
+ return b
@@ -0,0 +1,218 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.combinat sage.graphs sage.modules
3
+ r"""
4
+ Bijection classes for type `A_{2n}^{(2)}`
5
+
6
+ Part of the (internal) classes which runs the bijection between rigged
7
+ configurations and KR tableaux of type `A_{2n}^{(2)}`.
8
+
9
+ AUTHORS:
10
+
11
+ - Travis Scrimshaw (2012-12-21): Initial version
12
+
13
+ TESTS::
14
+
15
+ sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A', 4, 2], [[2, 1]])
16
+ sage: from sage.combinat.rigged_configurations.bij_type_A2_even import KRTToRCBijectionTypeA2Even
17
+ sage: bijection = KRTToRCBijectionTypeA2Even(KRT(pathlist=[[-1,2]]))
18
+ sage: TestSuite(bijection).run()
19
+ sage: RC = RiggedConfigurations(['A', 4, 2], [[2, 1]])
20
+ sage: from sage.combinat.rigged_configurations.bij_type_A2_even import RCToKRTBijectionTypeA2Even
21
+ sage: bijection = RCToKRTBijectionTypeA2Even(RC(partition_list=[[],[]]))
22
+ sage: TestSuite(bijection).run()
23
+ """
24
+
25
+ # ****************************************************************************
26
+ # Copyright (C) 2012 Travis Scrimshaw <tscrim@ucdavis.edu>
27
+ #
28
+ # Distributed under the terms of the GNU General Public License (GPL)
29
+ #
30
+ # This code is distributed in the hope that it will be useful,
31
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
32
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
33
+ # General Public License for more details.
34
+ #
35
+ # The full text of the GPL is available at:
36
+ #
37
+ # https://www.gnu.org/licenses/
38
+ # ****************************************************************************
39
+
40
+ from sage.combinat.rigged_configurations.bij_type_A import KRTToRCBijectionTypeA
41
+ from sage.combinat.rigged_configurations.bij_type_C import KRTToRCBijectionTypeC
42
+ from sage.combinat.rigged_configurations.bij_type_C import RCToKRTBijectionTypeC
43
+
44
+
45
+ class KRTToRCBijectionTypeA2Even(KRTToRCBijectionTypeC):
46
+ r"""
47
+ Specific implementation of the bijection from KR tableaux to rigged
48
+ configurations for type `A_{2n}^{(2)}`.
49
+
50
+ This inherits from type `C_n^{(1)}` because we use the same methods in
51
+ some places.
52
+ """
53
+
54
+ def next_state(self, val):
55
+ r"""
56
+ Build the next state for type `A_{2n}^{(2)}`.
57
+
58
+ TESTS::
59
+
60
+ sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A', 4, 2], [[2,1]])
61
+ sage: from sage.combinat.rigged_configurations.bij_type_A2_even import KRTToRCBijectionTypeA2Even
62
+ sage: bijection = KRTToRCBijectionTypeA2Even(KRT(pathlist=[[-1,-2]]))
63
+ sage: bijection.cur_path.insert(0, [])
64
+ sage: bijection.cur_dims.insert(0, [0, 1])
65
+ sage: bijection.cur_path[0].insert(0, [-2])
66
+ sage: bijection.next_state(-2)
67
+ """
68
+ # Note that we must subtract 1 from n to match the indices.
69
+ n = self.n
70
+ tableau_height = len(self.cur_path[0]) - 1
71
+
72
+ # If it is a regular value, we follow the A_n rules
73
+ if val != 'E' and val > 0:
74
+ KRTToRCBijectionTypeA.next_state(self, val)
75
+ return
76
+
77
+ case_S = [None] * n
78
+ if val == 'E':
79
+ pos_val = n
80
+ max_width = self.ret_rig_con[n-1].insert_cell(0)
81
+ else:
82
+ pos_val = -val
83
+
84
+ # Always add a cell to the first singular value in the first
85
+ # tableau we are updating.
86
+ if len(self.ret_rig_con[pos_val - 1]) > 0:
87
+ max_width = self.ret_rig_con[pos_val - 1][0]
88
+ else:
89
+ max_width = 1
90
+
91
+ # Add cells similar to type A_n but we move to the right until we
92
+ # reach the value of n
93
+ for a in range(pos_val - 1, n):
94
+ max_width = self.ret_rig_con[a].insert_cell(max_width)
95
+ case_S[a] = max_width
96
+
97
+ # Special case for n
98
+ self._insert_cell_case_S(self.ret_rig_con[n-1])
99
+
100
+ # Now go back following the regular C_n (ish) rules
101
+ for a in reversed(range(tableau_height, n-1)):
102
+ if case_S[a] == max_width:
103
+ self._insert_cell_case_S(self.ret_rig_con[a])
104
+ else:
105
+ max_width = self.ret_rig_con[a].insert_cell(max_width)
106
+ self._update_vacancy_nums(a + 1)
107
+ self._update_partition_values(a + 1)
108
+
109
+ # Update the final rigged partitions
110
+ if tableau_height < n:
111
+ self._update_vacancy_nums(tableau_height)
112
+ self._update_partition_values(tableau_height)
113
+
114
+ if pos_val <= tableau_height:
115
+ for a in range(pos_val-1, tableau_height):
116
+ self._update_vacancy_nums(a)
117
+ self._update_partition_values(a)
118
+ if pos_val > 1:
119
+ self._update_vacancy_nums(pos_val - 2)
120
+ self._update_partition_values(pos_val - 2)
121
+ elif tableau_height > 0:
122
+ self._update_vacancy_nums(tableau_height - 1)
123
+ self._update_partition_values(tableau_height - 1)
124
+
125
+
126
+ class RCToKRTBijectionTypeA2Even(RCToKRTBijectionTypeC):
127
+ r"""
128
+ Specific implementation of the bijection from rigged configurations to
129
+ tensor products of KR tableaux for type `A_{2n}^{(2)}`.
130
+ """
131
+
132
+ def next_state(self, height):
133
+ r"""
134
+ Build the next state for type `A_{2n}^{(2)}`.
135
+
136
+ TESTS::
137
+
138
+ sage: RC = RiggedConfigurations(['A', 4, 2], [[2,1]])
139
+ sage: from sage.combinat.rigged_configurations.bij_type_A2_even import RCToKRTBijectionTypeA2Even
140
+ sage: bijection = RCToKRTBijectionTypeA2Even(RC(partition_list=[[2],[2,2]]))
141
+ sage: bijection.next_state(2)
142
+ -1
143
+ """
144
+ height -= 1 # indexing
145
+ n = self.n
146
+ ell = [None] * (2*n)
147
+ case_S = [False] * n
148
+ b = None
149
+
150
+ # Calculate the rank and ell values
151
+
152
+ last_size = 0
153
+ for a in range(height, n):
154
+ ell[a] = self._find_singular_string(self.cur_partitions[a], last_size)
155
+
156
+ if ell[a] is None:
157
+ b = a + 1
158
+ break
159
+ else:
160
+ last_size = self.cur_partitions[a][ell[a]]
161
+
162
+ if b is None and last_size == 1:
163
+ b = 'E'
164
+ # This is a slight hack since remove_cell() will just delete the
165
+ # appropriate row
166
+ case_S[n-1] = True
167
+
168
+ if b is None:
169
+ # Now go back
170
+ ell[2*n-1] = ell[n-1]
171
+ case_S[n-1] = True
172
+ for a in reversed(range(n-1)):
173
+ if a >= height and self.cur_partitions[a][ell[a]] == last_size:
174
+ ell[n+a] = ell[a]
175
+ case_S[a] = True
176
+ else:
177
+ ell[n+a] = self._find_singular_string(self.cur_partitions[a], last_size)
178
+
179
+ if ell[n + a] is None:
180
+ b = -(a + 2)
181
+ break
182
+ else:
183
+ last_size = self.cur_partitions[a][ell[n + a]]
184
+
185
+ if b is None:
186
+ b = -1
187
+
188
+ # Determine the new rigged configuration by removing boxes from the
189
+ # selected string and then making the new string singular
190
+ if case_S[0]:
191
+ row_num = self.cur_partitions[0].remove_cell(ell[0], 2)
192
+ row_num_bar = None
193
+ else:
194
+ row_num = self.cur_partitions[0].remove_cell(ell[0])
195
+ row_num_bar = self.cur_partitions[0].remove_cell(ell[n])
196
+ for a in range(1, n):
197
+ if case_S[a]:
198
+ row_num_next = self.cur_partitions[a].remove_cell(ell[a], 2)
199
+ row_num_bar_next = None
200
+ else:
201
+ row_num_next = self.cur_partitions[a].remove_cell(ell[a])
202
+ row_num_bar_next = self.cur_partitions[a].remove_cell(ell[n+a])
203
+
204
+ self._update_vacancy_numbers(a - 1)
205
+ if row_num is not None:
206
+ self.cur_partitions[a-1].rigging[row_num] = self.cur_partitions[a-1].vacancy_numbers[row_num]
207
+ if row_num_bar is not None:
208
+ self.cur_partitions[a-1].rigging[row_num_bar] = self.cur_partitions[a-1].vacancy_numbers[row_num_bar]
209
+ row_num = row_num_next
210
+ row_num_bar = row_num_bar_next
211
+
212
+ self._update_vacancy_numbers(n - 1)
213
+ if row_num is not None:
214
+ self.cur_partitions[n-1].rigging[row_num] = self.cur_partitions[n-1].vacancy_numbers[row_num]
215
+ if row_num_bar is not None:
216
+ self.cur_partitions[n-1].rigging[row_num_bar] = self.cur_partitions[n-1].vacancy_numbers[row_num_bar]
217
+
218
+ return b