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.
- passagemath_combinat/__init__.py +3 -0
- passagemath_combinat-10.6.42.dist-info/METADATA +160 -0
- passagemath_combinat-10.6.42.dist-info/RECORD +400 -0
- passagemath_combinat-10.6.42.dist-info/WHEEL +5 -0
- passagemath_combinat-10.6.42.dist-info/top_level.txt +3 -0
- passagemath_combinat.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
- passagemath_combinat.libs/libsymmetrica-81fe8739.so.3.0.0 +0 -0
- sage/algebras/affine_nil_temperley_lieb.py +263 -0
- sage/algebras/all.py +24 -0
- sage/algebras/all__sagemath_combinat.py +35 -0
- sage/algebras/askey_wilson.py +935 -0
- sage/algebras/associated_graded.py +345 -0
- sage/algebras/cellular_basis.py +350 -0
- sage/algebras/cluster_algebra.py +2766 -0
- sage/algebras/down_up_algebra.py +860 -0
- sage/algebras/free_algebra.py +1698 -0
- sage/algebras/free_algebra_element.py +345 -0
- sage/algebras/free_algebra_quotient.py +405 -0
- sage/algebras/free_algebra_quotient_element.py +295 -0
- sage/algebras/free_zinbiel_algebra.py +885 -0
- sage/algebras/hall_algebra.py +783 -0
- sage/algebras/hecke_algebras/all.py +4 -0
- sage/algebras/hecke_algebras/ariki_koike_algebra.py +1796 -0
- sage/algebras/hecke_algebras/ariki_koike_specht_modules.py +475 -0
- sage/algebras/hecke_algebras/cubic_hecke_algebra.py +3520 -0
- sage/algebras/hecke_algebras/cubic_hecke_base_ring.py +1473 -0
- sage/algebras/hecke_algebras/cubic_hecke_matrix_rep.py +1079 -0
- sage/algebras/iwahori_hecke_algebra.py +3095 -0
- sage/algebras/jordan_algebra.py +1773 -0
- sage/algebras/lie_conformal_algebras/abelian_lie_conformal_algebra.py +113 -0
- sage/algebras/lie_conformal_algebras/affine_lie_conformal_algebra.py +156 -0
- sage/algebras/lie_conformal_algebras/all.py +18 -0
- sage/algebras/lie_conformal_algebras/bosonic_ghosts_lie_conformal_algebra.py +134 -0
- sage/algebras/lie_conformal_algebras/examples.py +43 -0
- sage/algebras/lie_conformal_algebras/fermionic_ghosts_lie_conformal_algebra.py +131 -0
- sage/algebras/lie_conformal_algebras/finitely_freely_generated_lca.py +139 -0
- sage/algebras/lie_conformal_algebras/free_bosons_lie_conformal_algebra.py +174 -0
- sage/algebras/lie_conformal_algebras/free_fermions_lie_conformal_algebra.py +167 -0
- sage/algebras/lie_conformal_algebras/freely_generated_lie_conformal_algebra.py +107 -0
- sage/algebras/lie_conformal_algebras/graded_lie_conformal_algebra.py +135 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra.py +353 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra_element.py +236 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_basis.py +78 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_structure_coefs.py +328 -0
- sage/algebras/lie_conformal_algebras/n2_lie_conformal_algebra.py +117 -0
- sage/algebras/lie_conformal_algebras/neveu_schwarz_lie_conformal_algebra.py +86 -0
- sage/algebras/lie_conformal_algebras/virasoro_lie_conformal_algebra.py +82 -0
- sage/algebras/lie_conformal_algebras/weyl_lie_conformal_algebra.py +205 -0
- sage/algebras/nil_coxeter_algebra.py +191 -0
- sage/algebras/q_commuting_polynomials.py +673 -0
- sage/algebras/q_system.py +608 -0
- sage/algebras/quantum_clifford.py +959 -0
- sage/algebras/quantum_groups/ace_quantum_onsager.py +693 -0
- sage/algebras/quantum_groups/all.py +9 -0
- sage/algebras/quantum_groups/fock_space.py +2219 -0
- sage/algebras/quantum_groups/q_numbers.py +207 -0
- sage/algebras/quantum_groups/quantum_group_gap.py +2695 -0
- sage/algebras/quantum_groups/representations.py +591 -0
- sage/algebras/quantum_matrix_coordinate_algebra.py +1006 -0
- sage/algebras/quantum_oscillator.py +623 -0
- sage/algebras/quaternion_algebra.py +20 -0
- sage/algebras/quaternion_algebra_element.py +55 -0
- sage/algebras/rational_cherednik_algebra.py +525 -0
- sage/algebras/schur_algebra.py +670 -0
- sage/algebras/shuffle_algebra.py +1011 -0
- sage/algebras/splitting_algebra.py +779 -0
- sage/algebras/tensor_algebra.py +709 -0
- sage/algebras/yangian.py +1082 -0
- sage/algebras/yokonuma_hecke_algebra.py +1018 -0
- sage/all__sagemath_combinat.py +35 -0
- sage/combinat/SJT.py +255 -0
- sage/combinat/affine_permutation.py +2405 -0
- sage/combinat/algebraic_combinatorics.py +55 -0
- sage/combinat/all.py +53 -0
- sage/combinat/all__sagemath_combinat.py +195 -0
- sage/combinat/alternating_sign_matrix.py +2063 -0
- sage/combinat/baxter_permutations.py +346 -0
- sage/combinat/bijectionist.py +3220 -0
- sage/combinat/binary_recurrence_sequences.py +1180 -0
- sage/combinat/blob_algebra.py +685 -0
- sage/combinat/catalog_partitions.py +27 -0
- sage/combinat/chas/all.py +23 -0
- sage/combinat/chas/fsym.py +1180 -0
- sage/combinat/chas/wqsym.py +2601 -0
- sage/combinat/cluster_complex.py +326 -0
- sage/combinat/colored_permutations.py +2039 -0
- sage/combinat/colored_permutations_representations.py +964 -0
- sage/combinat/composition_signed.py +142 -0
- sage/combinat/composition_tableau.py +855 -0
- sage/combinat/constellation.py +1729 -0
- sage/combinat/core.py +751 -0
- sage/combinat/counting.py +12 -0
- sage/combinat/crystals/affine.py +742 -0
- sage/combinat/crystals/affine_factorization.py +518 -0
- sage/combinat/crystals/affinization.py +331 -0
- sage/combinat/crystals/alcove_path.py +2013 -0
- sage/combinat/crystals/all.py +22 -0
- sage/combinat/crystals/bkk_crystals.py +141 -0
- sage/combinat/crystals/catalog.py +115 -0
- sage/combinat/crystals/catalog_elementary_crystals.py +18 -0
- sage/combinat/crystals/catalog_infinity_crystals.py +33 -0
- sage/combinat/crystals/catalog_kirillov_reshetikhin.py +18 -0
- sage/combinat/crystals/crystals.py +257 -0
- sage/combinat/crystals/direct_sum.py +260 -0
- sage/combinat/crystals/elementary_crystals.py +1251 -0
- sage/combinat/crystals/fast_crystals.py +441 -0
- sage/combinat/crystals/fully_commutative_stable_grothendieck.py +1205 -0
- sage/combinat/crystals/generalized_young_walls.py +1076 -0
- sage/combinat/crystals/highest_weight_crystals.py +436 -0
- sage/combinat/crystals/induced_structure.py +695 -0
- sage/combinat/crystals/infinity_crystals.py +730 -0
- sage/combinat/crystals/kac_modules.py +863 -0
- sage/combinat/crystals/kirillov_reshetikhin.py +4196 -0
- sage/combinat/crystals/kyoto_path_model.py +497 -0
- sage/combinat/crystals/letters.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/crystals/letters.pxd +79 -0
- sage/combinat/crystals/letters.pyx +3056 -0
- sage/combinat/crystals/littelmann_path.py +1518 -0
- sage/combinat/crystals/monomial_crystals.py +1262 -0
- sage/combinat/crystals/multisegments.py +462 -0
- sage/combinat/crystals/mv_polytopes.py +467 -0
- sage/combinat/crystals/pbw_crystal.py +511 -0
- sage/combinat/crystals/pbw_datum.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/crystals/pbw_datum.pxd +4 -0
- sage/combinat/crystals/pbw_datum.pyx +487 -0
- sage/combinat/crystals/polyhedral_realization.py +372 -0
- sage/combinat/crystals/spins.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/crystals/spins.pxd +21 -0
- sage/combinat/crystals/spins.pyx +756 -0
- sage/combinat/crystals/star_crystal.py +290 -0
- sage/combinat/crystals/subcrystal.py +464 -0
- sage/combinat/crystals/tensor_product.py +1177 -0
- sage/combinat/crystals/tensor_product_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/crystals/tensor_product_element.pxd +35 -0
- sage/combinat/crystals/tensor_product_element.pyx +1870 -0
- sage/combinat/crystals/virtual_crystal.py +420 -0
- sage/combinat/cyclic_sieving_phenomenon.py +204 -0
- sage/combinat/debruijn_sequence.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/debruijn_sequence.pyx +355 -0
- sage/combinat/decorated_permutation.py +270 -0
- sage/combinat/degree_sequences.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/degree_sequences.pyx +588 -0
- sage/combinat/derangements.py +527 -0
- sage/combinat/descent_algebra.py +1008 -0
- sage/combinat/diagram.py +1551 -0
- sage/combinat/diagram_algebras.py +5886 -0
- sage/combinat/dyck_word.py +4349 -0
- sage/combinat/e_one_star.py +1623 -0
- sage/combinat/enumerated_sets.py +123 -0
- sage/combinat/expnums.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/expnums.pyx +148 -0
- sage/combinat/fast_vector_partitions.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/fast_vector_partitions.pyx +346 -0
- sage/combinat/fqsym.py +1977 -0
- sage/combinat/free_dendriform_algebra.py +954 -0
- sage/combinat/free_prelie_algebra.py +1141 -0
- sage/combinat/fully_commutative_elements.py +1077 -0
- sage/combinat/fully_packed_loop.py +1523 -0
- sage/combinat/gelfand_tsetlin_patterns.py +1409 -0
- sage/combinat/gray_codes.py +311 -0
- sage/combinat/grossman_larson_algebras.py +667 -0
- sage/combinat/growth.py +4352 -0
- sage/combinat/hall_polynomial.py +188 -0
- sage/combinat/hillman_grassl.py +866 -0
- sage/combinat/integer_matrices.py +329 -0
- sage/combinat/integer_vectors_mod_permgroup.py +1238 -0
- sage/combinat/k_tableau.py +4564 -0
- sage/combinat/kazhdan_lusztig.py +215 -0
- sage/combinat/key_polynomial.py +885 -0
- sage/combinat/knutson_tao_puzzles.py +2286 -0
- sage/combinat/lr_tableau.py +311 -0
- sage/combinat/matrices/all.py +24 -0
- sage/combinat/matrices/hadamard_matrix.py +3790 -0
- sage/combinat/matrices/latin.py +2912 -0
- sage/combinat/misc.py +401 -0
- sage/combinat/multiset_partition_into_sets_ordered.py +3541 -0
- sage/combinat/ncsf_qsym/all.py +21 -0
- sage/combinat/ncsf_qsym/combinatorics.py +317 -0
- sage/combinat/ncsf_qsym/generic_basis_code.py +1427 -0
- sage/combinat/ncsf_qsym/ncsf.py +5637 -0
- sage/combinat/ncsf_qsym/qsym.py +4053 -0
- sage/combinat/ncsf_qsym/tutorial.py +447 -0
- sage/combinat/ncsym/all.py +21 -0
- sage/combinat/ncsym/bases.py +855 -0
- sage/combinat/ncsym/dual.py +593 -0
- sage/combinat/ncsym/ncsym.py +2076 -0
- sage/combinat/necklace.py +551 -0
- sage/combinat/non_decreasing_parking_function.py +634 -0
- sage/combinat/nu_dyck_word.py +1474 -0
- sage/combinat/output.py +861 -0
- sage/combinat/parallelogram_polyomino.py +4326 -0
- sage/combinat/parking_functions.py +1602 -0
- sage/combinat/partition_algebra.py +1998 -0
- sage/combinat/partition_kleshchev.py +1982 -0
- sage/combinat/partition_shifting_algebras.py +584 -0
- sage/combinat/partition_tuple.py +3114 -0
- sage/combinat/path_tableaux/all.py +13 -0
- sage/combinat/path_tableaux/catalog.py +29 -0
- sage/combinat/path_tableaux/dyck_path.py +380 -0
- sage/combinat/path_tableaux/frieze.py +476 -0
- sage/combinat/path_tableaux/path_tableau.py +728 -0
- sage/combinat/path_tableaux/semistandard.py +510 -0
- sage/combinat/perfect_matching.py +779 -0
- sage/combinat/plane_partition.py +3300 -0
- sage/combinat/q_bernoulli.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/q_bernoulli.pyx +128 -0
- sage/combinat/quickref.py +81 -0
- sage/combinat/recognizable_series.py +2051 -0
- sage/combinat/regular_sequence.py +4316 -0
- sage/combinat/regular_sequence_bounded.py +543 -0
- sage/combinat/restricted_growth.py +81 -0
- sage/combinat/ribbon.py +20 -0
- sage/combinat/ribbon_shaped_tableau.py +489 -0
- sage/combinat/ribbon_tableau.py +1180 -0
- sage/combinat/rigged_configurations/all.py +46 -0
- sage/combinat/rigged_configurations/bij_abstract_class.py +548 -0
- sage/combinat/rigged_configurations/bij_infinity.py +370 -0
- sage/combinat/rigged_configurations/bij_type_A.py +163 -0
- sage/combinat/rigged_configurations/bij_type_A2_dual.py +338 -0
- sage/combinat/rigged_configurations/bij_type_A2_even.py +218 -0
- sage/combinat/rigged_configurations/bij_type_A2_odd.py +199 -0
- sage/combinat/rigged_configurations/bij_type_B.py +900 -0
- sage/combinat/rigged_configurations/bij_type_C.py +267 -0
- sage/combinat/rigged_configurations/bij_type_D.py +771 -0
- sage/combinat/rigged_configurations/bij_type_D_tri.py +392 -0
- sage/combinat/rigged_configurations/bij_type_D_twisted.py +576 -0
- sage/combinat/rigged_configurations/bij_type_E67.py +402 -0
- sage/combinat/rigged_configurations/bijection.py +143 -0
- sage/combinat/rigged_configurations/kleber_tree.py +1475 -0
- sage/combinat/rigged_configurations/kr_tableaux.py +1898 -0
- sage/combinat/rigged_configurations/rc_crystal.py +461 -0
- sage/combinat/rigged_configurations/rc_infinity.py +540 -0
- sage/combinat/rigged_configurations/rigged_configuration_element.py +2403 -0
- sage/combinat/rigged_configurations/rigged_configurations.py +1918 -0
- sage/combinat/rigged_configurations/rigged_partition.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/rigged_configurations/rigged_partition.pxd +15 -0
- sage/combinat/rigged_configurations/rigged_partition.pyx +680 -0
- sage/combinat/rigged_configurations/tensor_product_kr_tableaux.py +499 -0
- sage/combinat/rigged_configurations/tensor_product_kr_tableaux_element.py +428 -0
- sage/combinat/rsk.py +3438 -0
- sage/combinat/schubert_polynomial.py +508 -0
- sage/combinat/set_partition.py +3318 -0
- sage/combinat/set_partition_iterator.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/set_partition_iterator.pyx +136 -0
- sage/combinat/set_partition_ordered.py +1590 -0
- sage/combinat/sf/abreu_nigro.py +346 -0
- sage/combinat/sf/all.py +52 -0
- sage/combinat/sf/character.py +576 -0
- sage/combinat/sf/classical.py +319 -0
- sage/combinat/sf/dual.py +996 -0
- sage/combinat/sf/elementary.py +549 -0
- sage/combinat/sf/hall_littlewood.py +1028 -0
- sage/combinat/sf/hecke.py +336 -0
- sage/combinat/sf/homogeneous.py +464 -0
- sage/combinat/sf/jack.py +1428 -0
- sage/combinat/sf/k_dual.py +1458 -0
- sage/combinat/sf/kfpoly.py +447 -0
- sage/combinat/sf/llt.py +789 -0
- sage/combinat/sf/macdonald.py +2019 -0
- sage/combinat/sf/monomial.py +525 -0
- sage/combinat/sf/multiplicative.py +113 -0
- sage/combinat/sf/new_kschur.py +1786 -0
- sage/combinat/sf/ns_macdonald.py +964 -0
- sage/combinat/sf/orthogonal.py +246 -0
- sage/combinat/sf/orthotriang.py +355 -0
- sage/combinat/sf/powersum.py +963 -0
- sage/combinat/sf/schur.py +880 -0
- sage/combinat/sf/sf.py +1653 -0
- sage/combinat/sf/sfa.py +7053 -0
- sage/combinat/sf/symplectic.py +253 -0
- sage/combinat/sf/witt.py +721 -0
- sage/combinat/shifted_primed_tableau.py +2735 -0
- sage/combinat/shuffle.py +830 -0
- sage/combinat/sidon_sets.py +146 -0
- sage/combinat/similarity_class_type.py +1721 -0
- sage/combinat/sine_gordon.py +618 -0
- sage/combinat/six_vertex_model.py +784 -0
- sage/combinat/skew_partition.py +2053 -0
- sage/combinat/skew_tableau.py +2989 -0
- sage/combinat/sloane_functions.py +8935 -0
- sage/combinat/specht_module.py +1403 -0
- sage/combinat/species/all.py +48 -0
- sage/combinat/species/characteristic_species.py +321 -0
- sage/combinat/species/composition_species.py +273 -0
- sage/combinat/species/cycle_species.py +284 -0
- sage/combinat/species/empty_species.py +155 -0
- sage/combinat/species/functorial_composition_species.py +148 -0
- sage/combinat/species/generating_series.py +673 -0
- sage/combinat/species/library.py +148 -0
- sage/combinat/species/linear_order_species.py +169 -0
- sage/combinat/species/misc.py +83 -0
- sage/combinat/species/partition_species.py +290 -0
- sage/combinat/species/permutation_species.py +268 -0
- sage/combinat/species/product_species.py +423 -0
- sage/combinat/species/recursive_species.py +476 -0
- sage/combinat/species/set_species.py +192 -0
- sage/combinat/species/species.py +820 -0
- sage/combinat/species/structure.py +539 -0
- sage/combinat/species/subset_species.py +243 -0
- sage/combinat/species/sum_species.py +225 -0
- sage/combinat/subword.py +564 -0
- sage/combinat/subword_complex.py +2122 -0
- sage/combinat/subword_complex_c.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/subword_complex_c.pyx +119 -0
- sage/combinat/super_tableau.py +821 -0
- sage/combinat/superpartition.py +1154 -0
- sage/combinat/symmetric_group_algebra.py +3774 -0
- sage/combinat/symmetric_group_representations.py +1830 -0
- sage/combinat/t_sequences.py +877 -0
- sage/combinat/tableau.py +9506 -0
- sage/combinat/tableau_residues.py +860 -0
- sage/combinat/tableau_tuple.py +5353 -0
- sage/combinat/tiling.py +2432 -0
- sage/combinat/triangles_FHM.py +777 -0
- sage/combinat/tutorial.py +1857 -0
- sage/combinat/vector_partition.py +337 -0
- sage/combinat/words/abstract_word.py +1722 -0
- sage/combinat/words/all.py +59 -0
- sage/combinat/words/alphabet.py +268 -0
- sage/combinat/words/finite_word.py +7201 -0
- sage/combinat/words/infinite_word.py +113 -0
- sage/combinat/words/lyndon_word.py +652 -0
- sage/combinat/words/morphic.py +351 -0
- sage/combinat/words/morphism.py +3878 -0
- sage/combinat/words/paths.py +2932 -0
- sage/combinat/words/shuffle_product.py +278 -0
- sage/combinat/words/suffix_trees.py +1873 -0
- sage/combinat/words/word.py +769 -0
- sage/combinat/words/word_char.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/words/word_char.pyx +847 -0
- sage/combinat/words/word_datatypes.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/words/word_datatypes.pxd +4 -0
- sage/combinat/words/word_datatypes.pyx +1067 -0
- sage/combinat/words/word_generators.py +2026 -0
- sage/combinat/words/word_infinite_datatypes.py +1218 -0
- sage/combinat/words/word_options.py +99 -0
- sage/combinat/words/words.py +2396 -0
- sage/data_structures/all__sagemath_combinat.py +1 -0
- sage/databases/all__sagemath_combinat.py +13 -0
- sage/databases/findstat.py +4897 -0
- sage/databases/oeis.py +2058 -0
- sage/databases/sloane.py +393 -0
- sage/dynamics/all__sagemath_combinat.py +14 -0
- sage/dynamics/cellular_automata/all.py +7 -0
- sage/dynamics/cellular_automata/catalog.py +34 -0
- sage/dynamics/cellular_automata/elementary.py +612 -0
- sage/dynamics/cellular_automata/glca.py +477 -0
- sage/dynamics/cellular_automata/solitons.py +1463 -0
- sage/dynamics/finite_dynamical_system.py +1249 -0
- sage/dynamics/finite_dynamical_system_catalog.py +382 -0
- sage/games/all.py +7 -0
- sage/games/hexad.py +704 -0
- sage/games/quantumino.py +591 -0
- sage/games/sudoku.py +889 -0
- sage/games/sudoku_backtrack.cpython-314-x86_64-linux-musl.so +0 -0
- sage/games/sudoku_backtrack.pyx +189 -0
- sage/groups/all__sagemath_combinat.py +1 -0
- sage/groups/indexed_free_group.py +489 -0
- sage/libs/all__sagemath_combinat.py +6 -0
- sage/libs/lrcalc/__init__.py +1 -0
- sage/libs/lrcalc/lrcalc.py +525 -0
- sage/libs/symmetrica/__init__.py +7 -0
- sage/libs/symmetrica/all.py +101 -0
- sage/libs/symmetrica/kostka.pxi +168 -0
- sage/libs/symmetrica/part.pxi +193 -0
- sage/libs/symmetrica/plet.pxi +42 -0
- sage/libs/symmetrica/sab.pxi +196 -0
- sage/libs/symmetrica/sb.pxi +332 -0
- sage/libs/symmetrica/sc.pxi +192 -0
- sage/libs/symmetrica/schur.pxi +956 -0
- sage/libs/symmetrica/symmetrica.cpython-314-x86_64-linux-musl.so +0 -0
- sage/libs/symmetrica/symmetrica.pxi +1172 -0
- sage/libs/symmetrica/symmetrica.pyx +39 -0
- sage/monoids/all.py +13 -0
- sage/monoids/automatic_semigroup.py +1054 -0
- sage/monoids/free_abelian_monoid.py +315 -0
- sage/monoids/free_abelian_monoid_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/monoids/free_abelian_monoid_element.pxd +16 -0
- sage/monoids/free_abelian_monoid_element.pyx +397 -0
- sage/monoids/free_monoid.py +335 -0
- sage/monoids/free_monoid_element.py +431 -0
- sage/monoids/hecke_monoid.py +65 -0
- sage/monoids/string_monoid.py +817 -0
- sage/monoids/string_monoid_element.py +547 -0
- sage/monoids/string_ops.py +143 -0
- sage/monoids/trace_monoid.py +972 -0
- sage/rings/all__sagemath_combinat.py +2 -0
- sage/sat/all.py +4 -0
- sage/sat/boolean_polynomials.py +405 -0
- sage/sat/converters/__init__.py +6 -0
- sage/sat/converters/anf2cnf.py +14 -0
- sage/sat/converters/polybori.py +611 -0
- sage/sat/solvers/__init__.py +5 -0
- sage/sat/solvers/cryptominisat.py +287 -0
- sage/sat/solvers/dimacs.py +783 -0
- sage/sat/solvers/picosat.py +228 -0
- sage/sat/solvers/sat_lp.py +156 -0
- sage/sat/solvers/satsolver.cpython-314-x86_64-linux-musl.so +0 -0
- sage/sat/solvers/satsolver.pxd +3 -0
- sage/sat/solvers/satsolver.pyx +405 -0
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.graphs sage.modules
|
|
3
|
+
r"""
|
|
4
|
+
Bijection between rigged configurations for `B(\infty)` and marginally large tableaux
|
|
5
|
+
|
|
6
|
+
AUTHORS:
|
|
7
|
+
|
|
8
|
+
- Travis Scrimshaw (2015-07-01): Initial version
|
|
9
|
+
|
|
10
|
+
REFERENCES:
|
|
11
|
+
|
|
12
|
+
.. [RC-MLT] Ben Salisbury and Travis Scrimshaw. *Connecting marginally
|
|
13
|
+
large tableaux and rigged configurations via crystals*.
|
|
14
|
+
Preprint. :arxiv:`1505.07040`.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
# ****************************************************************************
|
|
18
|
+
# Copyright (C) 2015 Travis Scrimshaw <tscrim@ucdavis.edu>
|
|
19
|
+
#
|
|
20
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
21
|
+
#
|
|
22
|
+
# This code is distributed in the hope that it will be useful,
|
|
23
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
24
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
25
|
+
# General Public License for more details.
|
|
26
|
+
#
|
|
27
|
+
# The full text of the GPL is available at:
|
|
28
|
+
#
|
|
29
|
+
# https://www.gnu.org/licenses/
|
|
30
|
+
# ****************************************************************************
|
|
31
|
+
|
|
32
|
+
from sage.combinat.rigged_configurations.rigged_configurations import RiggedConfigurations
|
|
33
|
+
|
|
34
|
+
from sage.combinat.rigged_configurations.bij_type_B import (KRTToRCBijectionTypeB,
|
|
35
|
+
RCToKRTBijectionTypeB)
|
|
36
|
+
from sage.combinat.rigged_configurations.bij_type_D import (KRTToRCBijectionTypeD,
|
|
37
|
+
RCToKRTBijectionTypeD)
|
|
38
|
+
from sage.combinat.rigged_configurations.bij_type_A import (KRTToRCBijectionTypeA,
|
|
39
|
+
RCToKRTBijectionTypeA)
|
|
40
|
+
from sage.combinat.rigged_configurations.bij_type_C import (KRTToRCBijectionTypeC,
|
|
41
|
+
RCToKRTBijectionTypeC)
|
|
42
|
+
from sage.combinat.rigged_configurations.tensor_product_kr_tableaux import TensorProductOfKirillovReshetikhinTableaux
|
|
43
|
+
from sage.combinat.crystals.letters import CrystalOfLetters
|
|
44
|
+
from sage.categories.morphism import Morphism
|
|
45
|
+
from sage.categories.homset import Hom
|
|
46
|
+
from sage.misc.flatten import flatten
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class FromTableauIsomorphism(Morphism):
|
|
50
|
+
r"""
|
|
51
|
+
Crystal isomorphism of `B(\infty)` in the tableau model to the
|
|
52
|
+
rigged configuration model.
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
def _repr_type(self):
|
|
56
|
+
r"""
|
|
57
|
+
Return the type of morphism of ``self``.
|
|
58
|
+
|
|
59
|
+
EXAMPLES::
|
|
60
|
+
|
|
61
|
+
sage: RC = crystals.infinity.RiggedConfigurations(['A',3])
|
|
62
|
+
sage: T = crystals.infinity.Tableaux(['A',3])
|
|
63
|
+
sage: phi = RC.coerce_map_from(T)
|
|
64
|
+
sage: phi._repr_type()
|
|
65
|
+
'Crystal Isomorphism'
|
|
66
|
+
"""
|
|
67
|
+
return "Crystal Isomorphism"
|
|
68
|
+
|
|
69
|
+
def __invert__(self):
|
|
70
|
+
r"""
|
|
71
|
+
Return the inverse of ``self``.
|
|
72
|
+
|
|
73
|
+
EXAMPLES::
|
|
74
|
+
|
|
75
|
+
sage: RC = crystals.infinity.RiggedConfigurations(['A',3])
|
|
76
|
+
sage: T = crystals.infinity.Tableaux(['A',3])
|
|
77
|
+
sage: phi = RC.coerce_map_from(T)
|
|
78
|
+
sage: ~phi
|
|
79
|
+
Crystal Isomorphism morphism:
|
|
80
|
+
From: The infinity crystal of rigged configurations of type ['A', 3]
|
|
81
|
+
To: The infinity crystal of tableaux of type ['A', 3]
|
|
82
|
+
"""
|
|
83
|
+
return FromRCIsomorphism(Hom(self.codomain(), self.domain()))
|
|
84
|
+
|
|
85
|
+
def _call_(self, x):
|
|
86
|
+
r"""
|
|
87
|
+
Return the image of ``x`` in the rigged configuration model
|
|
88
|
+
of `B(\infty)`.
|
|
89
|
+
|
|
90
|
+
EXAMPLES::
|
|
91
|
+
|
|
92
|
+
sage: RC = crystals.infinity.RiggedConfigurations(['A',3])
|
|
93
|
+
sage: T = crystals.infinity.Tableaux(['A',3])
|
|
94
|
+
sage: phi = RC.coerce_map_from(T)
|
|
95
|
+
sage: x = T.an_element().f_string([2,2,1,1,3,2,1,2,1,3])
|
|
96
|
+
sage: y = phi(x); ascii_art(y)
|
|
97
|
+
-4[ ][ ][ ][ ]-2 -3[ ][ ][ ]-1 -1[ ][ ]-1
|
|
98
|
+
-2[ ]-1
|
|
99
|
+
sage: (~phi)(y) == x
|
|
100
|
+
True
|
|
101
|
+
"""
|
|
102
|
+
conj = x.to_tableau().conjugate()
|
|
103
|
+
ct = self.domain().cartan_type()
|
|
104
|
+
act = ct.affine()
|
|
105
|
+
TP = TensorProductOfKirillovReshetikhinTableaux(act, [[r,1] for r in conj.shape()])
|
|
106
|
+
elt = TP(pathlist=[reversed(row) for row in conj])
|
|
107
|
+
|
|
108
|
+
if ct.type() == 'A':
|
|
109
|
+
bij = KRTToRCBijectionTypeA(elt)
|
|
110
|
+
elif ct.type() == 'B':
|
|
111
|
+
bij = MLTToRCBijectionTypeB(elt)
|
|
112
|
+
elif ct.type() == 'C':
|
|
113
|
+
bij = KRTToRCBijectionTypeC(elt)
|
|
114
|
+
elif ct.type() == 'D':
|
|
115
|
+
bij = MLTToRCBijectionTypeD(elt)
|
|
116
|
+
else:
|
|
117
|
+
raise NotImplementedError("bijection of type {} not yet implemented".format(ct))
|
|
118
|
+
return self.codomain()(bij.run())
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
class FromRCIsomorphism(Morphism):
|
|
122
|
+
r"""
|
|
123
|
+
Crystal isomorphism of `B(\infty)` in the rigged configuration model
|
|
124
|
+
to the tableau model.
|
|
125
|
+
"""
|
|
126
|
+
|
|
127
|
+
def _repr_type(self):
|
|
128
|
+
r"""
|
|
129
|
+
Return the type of morphism of ``self``.
|
|
130
|
+
|
|
131
|
+
EXAMPLES::
|
|
132
|
+
|
|
133
|
+
sage: T = crystals.infinity.Tableaux(['A',3])
|
|
134
|
+
sage: RC = crystals.infinity.RiggedConfigurations(['A',3])
|
|
135
|
+
sage: phi = T.coerce_map_from(RC)
|
|
136
|
+
sage: phi._repr_type()
|
|
137
|
+
'Crystal Isomorphism'
|
|
138
|
+
"""
|
|
139
|
+
return "Crystal Isomorphism"
|
|
140
|
+
|
|
141
|
+
def __invert__(self):
|
|
142
|
+
r"""
|
|
143
|
+
Return the inverse of ``self``.
|
|
144
|
+
|
|
145
|
+
EXAMPLES::
|
|
146
|
+
|
|
147
|
+
sage: T = crystals.infinity.Tableaux(['A',3])
|
|
148
|
+
sage: RC = crystals.infinity.RiggedConfigurations(['A',3])
|
|
149
|
+
sage: phi = T.coerce_map_from(RC)
|
|
150
|
+
sage: ~phi
|
|
151
|
+
Crystal Isomorphism morphism:
|
|
152
|
+
From: The infinity crystal of tableaux of type ['A', 3]
|
|
153
|
+
To: The infinity crystal of rigged configurations of type ['A', 3]
|
|
154
|
+
"""
|
|
155
|
+
return FromTableauIsomorphism(Hom(self.codomain(), self.domain()))
|
|
156
|
+
|
|
157
|
+
def _call_(self, x):
|
|
158
|
+
r"""
|
|
159
|
+
Return the image of ``x`` in the tableau model of `B(\infty)`.
|
|
160
|
+
|
|
161
|
+
EXAMPLES::
|
|
162
|
+
|
|
163
|
+
sage: T = crystals.infinity.Tableaux(['A',3])
|
|
164
|
+
sage: RC = crystals.infinity.RiggedConfigurations(['A',3])
|
|
165
|
+
sage: phi = T.coerce_map_from(RC)
|
|
166
|
+
sage: x = RC.an_element().f_string([2,2,1,1,3,2,1,2,1,3])
|
|
167
|
+
sage: y = phi(x); y.pp()
|
|
168
|
+
1 1 1 1 1 2 2 3 4
|
|
169
|
+
2 2 3 4
|
|
170
|
+
3
|
|
171
|
+
sage: (~phi)(y) == x
|
|
172
|
+
True
|
|
173
|
+
"""
|
|
174
|
+
lam = [sum(nu)+1 for nu in x]
|
|
175
|
+
ct = self.domain().cartan_type()
|
|
176
|
+
I = ct.index_set()
|
|
177
|
+
if ct.type() == 'D':
|
|
178
|
+
lam[-2] = max(lam[-2], lam[-1])
|
|
179
|
+
lam.pop()
|
|
180
|
+
l = sum([[[r+1, 1]]*v for r, v in enumerate(lam[:-1])], [])
|
|
181
|
+
n = len(I)
|
|
182
|
+
l = l + sum([[[n,1], [n-1,1]] for k in range(lam[-1])], [])
|
|
183
|
+
else:
|
|
184
|
+
if ct.type() == 'B':
|
|
185
|
+
lam[-1] *= 2
|
|
186
|
+
l = sum([[[r, 1]]*lam[i] for i, r in enumerate(I)], [])
|
|
187
|
+
|
|
188
|
+
RC = RiggedConfigurations(ct.affine(), reversed(l))
|
|
189
|
+
elt = RC(x)
|
|
190
|
+
if ct.type() == 'A':
|
|
191
|
+
bij = RCToKRTBijectionTypeA(elt)
|
|
192
|
+
elif ct.type() == 'B':
|
|
193
|
+
bij = RCToMLTBijectionTypeB(elt)
|
|
194
|
+
elif ct.type() == 'C':
|
|
195
|
+
bij = RCToKRTBijectionTypeC(elt)
|
|
196
|
+
elif ct.type() == 'D':
|
|
197
|
+
bij = RCToMLTBijectionTypeD(elt)
|
|
198
|
+
else:
|
|
199
|
+
raise NotImplementedError("bijection of type {} not yet implemented".format(ct))
|
|
200
|
+
y = bij.run()
|
|
201
|
+
|
|
202
|
+
# Now make the result marginally large
|
|
203
|
+
y = [list(c) for c in y]
|
|
204
|
+
cur = []
|
|
205
|
+
L = CrystalOfLetters(ct)
|
|
206
|
+
for i in I:
|
|
207
|
+
cur.insert(0, L(i))
|
|
208
|
+
c = y.count(cur)
|
|
209
|
+
while c > 1:
|
|
210
|
+
y.remove(cur)
|
|
211
|
+
c -= 1
|
|
212
|
+
return self.codomain()(*flatten(y))
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
class MLTToRCBijectionTypeB(KRTToRCBijectionTypeB):
|
|
216
|
+
def run(self):
|
|
217
|
+
r"""
|
|
218
|
+
Run the bijection from a marginally large tableaux to a rigged
|
|
219
|
+
configuration.
|
|
220
|
+
|
|
221
|
+
EXAMPLES::
|
|
222
|
+
|
|
223
|
+
sage: vct = CartanType(['B',4]).as_folding()
|
|
224
|
+
sage: RC = crystals.infinity.RiggedConfigurations(vct)
|
|
225
|
+
sage: T = crystals.infinity.Tableaux(['B',4])
|
|
226
|
+
sage: Psi = T.crystal_morphism({T.module_generators[0]: RC.module_generators[0]})
|
|
227
|
+
sage: TS = [x.value for x in T.subcrystal(max_depth=4)]
|
|
228
|
+
sage: all(Psi(b) == RC(b) for b in TS) # long time # indirect doctest
|
|
229
|
+
True
|
|
230
|
+
"""
|
|
231
|
+
for cur_crystal in reversed(self.tp_krt):
|
|
232
|
+
cur_column = list(cur_crystal)
|
|
233
|
+
self.cur_path.insert(0, []) # Prepend an empty list
|
|
234
|
+
self.cur_dims.insert(0, [0, 1])
|
|
235
|
+
|
|
236
|
+
for letter in reversed(cur_column):
|
|
237
|
+
self.cur_dims[0][0] += 1
|
|
238
|
+
|
|
239
|
+
val = letter.value # Convert from a CrystalOfLetter to an Integer
|
|
240
|
+
|
|
241
|
+
# Build the next state
|
|
242
|
+
self.cur_path[0].insert(0, [letter]) # Prepend the value
|
|
243
|
+
if self.cur_dims[0][0] == self.n:
|
|
244
|
+
# Spinor case, we go from \Lambda_{n-1} -> 2\Lambda_n
|
|
245
|
+
self.cur_dims.insert(1, [self.n,1])
|
|
246
|
+
self.cur_path.insert(1, self.cur_path[0])
|
|
247
|
+
|
|
248
|
+
self.next_state(val)
|
|
249
|
+
|
|
250
|
+
self.ret_rig_con.set_immutable() # Return it to immutable
|
|
251
|
+
return self.ret_rig_con
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
class RCToMLTBijectionTypeB(RCToKRTBijectionTypeB):
|
|
255
|
+
def run(self):
|
|
256
|
+
r"""
|
|
257
|
+
Run the bijection from rigged configurations to a marginally large
|
|
258
|
+
tableau.
|
|
259
|
+
|
|
260
|
+
EXAMPLES::
|
|
261
|
+
|
|
262
|
+
sage: vct = CartanType(['B',4]).as_folding()
|
|
263
|
+
sage: RC = crystals.infinity.RiggedConfigurations(vct)
|
|
264
|
+
sage: T = crystals.infinity.Tableaux(['B',4])
|
|
265
|
+
sage: Psi = RC.crystal_morphism({RC.module_generators[0]: T.module_generators[0]})
|
|
266
|
+
sage: RCS = [x.value for x in RC.subcrystal(max_depth=4)]
|
|
267
|
+
sage: all(Psi(nu) == T(nu) for nu in RCS) # long time # indirect doctest
|
|
268
|
+
True
|
|
269
|
+
"""
|
|
270
|
+
letters = CrystalOfLetters(self.rigged_con.parent()._cartan_type.classical())
|
|
271
|
+
ret_crystal_path = []
|
|
272
|
+
|
|
273
|
+
while self.cur_dims:
|
|
274
|
+
dim = self.cur_dims[0]
|
|
275
|
+
ret_crystal_path.append([])
|
|
276
|
+
|
|
277
|
+
# Assumption: all factors are single columns
|
|
278
|
+
if dim[0] == self.n:
|
|
279
|
+
# Spinor case, since we've done 2\Lambda_n -> \Lambda_{n-1}
|
|
280
|
+
self.cur_dims.pop(1)
|
|
281
|
+
|
|
282
|
+
while dim[0] > 0:
|
|
283
|
+
dim[0] -= 1 # This takes care of the indexing
|
|
284
|
+
b = self.next_state(dim[0])
|
|
285
|
+
|
|
286
|
+
# Make sure we have a crystal letter
|
|
287
|
+
ret_crystal_path[-1].append(letters(b)) # Append the rank
|
|
288
|
+
|
|
289
|
+
self.cur_dims.pop(0) # Pop off the leading column
|
|
290
|
+
|
|
291
|
+
return ret_crystal_path
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
class MLTToRCBijectionTypeD(KRTToRCBijectionTypeD):
|
|
295
|
+
def run(self):
|
|
296
|
+
r"""
|
|
297
|
+
Run the bijection from a marginally large tableaux to a rigged
|
|
298
|
+
configuration.
|
|
299
|
+
|
|
300
|
+
EXAMPLES::
|
|
301
|
+
|
|
302
|
+
sage: RC = crystals.infinity.RiggedConfigurations(['D',4])
|
|
303
|
+
sage: T = crystals.infinity.Tableaux(['D',4])
|
|
304
|
+
sage: Psi = T.crystal_morphism({T.module_generators[0]: RC.module_generators[0]})
|
|
305
|
+
sage: TS = [x.value for x in T.subcrystal(max_depth=4)]
|
|
306
|
+
sage: all(Psi(b) == RC(b) for b in TS) # long time # indirect doctest
|
|
307
|
+
True
|
|
308
|
+
"""
|
|
309
|
+
for cur_crystal in reversed(self.tp_krt):
|
|
310
|
+
# Iterate through the columns
|
|
311
|
+
cur_column = list(cur_crystal)
|
|
312
|
+
self.cur_path.insert(0, []) # Prepend an empty list
|
|
313
|
+
|
|
314
|
+
self.cur_dims.insert(0, [0, 1])
|
|
315
|
+
|
|
316
|
+
for letter in reversed(cur_column):
|
|
317
|
+
self.cur_dims[0][0] += 1
|
|
318
|
+
|
|
319
|
+
val = letter.value # Convert from a CrystalOfLetter to an Integer
|
|
320
|
+
|
|
321
|
+
# Build the next state
|
|
322
|
+
self.cur_path[0].insert(0, [letter]) # Prepend the value
|
|
323
|
+
self.next_state(val)
|
|
324
|
+
|
|
325
|
+
if self.cur_dims[0][0] == self.n - 1:
|
|
326
|
+
# Spinor case, we go from \Lambda_{n-2} -> \Lambda_{n-1} + \Lambda_n
|
|
327
|
+
self.cur_dims.insert(1, [self.n,1])
|
|
328
|
+
self.cur_path.insert(1, self.cur_path[0] + [None])
|
|
329
|
+
|
|
330
|
+
self.ret_rig_con.set_immutable() # Return it to immutable
|
|
331
|
+
return self.ret_rig_con
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
class RCToMLTBijectionTypeD(RCToKRTBijectionTypeD):
|
|
335
|
+
def run(self):
|
|
336
|
+
r"""
|
|
337
|
+
Run the bijection from rigged configurations to a marginally large
|
|
338
|
+
tableau.
|
|
339
|
+
|
|
340
|
+
EXAMPLES::
|
|
341
|
+
|
|
342
|
+
sage: RC = crystals.infinity.RiggedConfigurations(['D',4])
|
|
343
|
+
sage: T = crystals.infinity.Tableaux(['D',4])
|
|
344
|
+
sage: Psi = RC.crystal_morphism({RC.module_generators[0]: T.module_generators[0]})
|
|
345
|
+
sage: RCS = [x.value for x in RC.subcrystal(max_depth=4)]
|
|
346
|
+
sage: all(Psi(nu) == T(nu) for nu in RCS) # long time # indirect doctest
|
|
347
|
+
True
|
|
348
|
+
"""
|
|
349
|
+
letters = CrystalOfLetters(self.rigged_con.parent()._cartan_type.classical())
|
|
350
|
+
ret_crystal_path = []
|
|
351
|
+
|
|
352
|
+
while self.cur_dims:
|
|
353
|
+
dim = self.cur_dims[0]
|
|
354
|
+
ret_crystal_path.append([])
|
|
355
|
+
|
|
356
|
+
# Assumption: all factors are single columns
|
|
357
|
+
if dim[0] == self.n - 1:
|
|
358
|
+
# Spinor case, since we've done \Lambda_n + \Lambda_{n-1} -> \Lambda_{n-2}
|
|
359
|
+
self.cur_dims.pop(1)
|
|
360
|
+
|
|
361
|
+
while dim[0] > 0:
|
|
362
|
+
dim[0] -= 1 # This takes care of the indexing
|
|
363
|
+
b = self.next_state(dim[0])
|
|
364
|
+
|
|
365
|
+
# Make sure we have a crystal letter
|
|
366
|
+
ret_crystal_path[-1].append(letters(b)) # Append the rank
|
|
367
|
+
|
|
368
|
+
self.cur_dims.pop(0) # Pop off the leading column
|
|
369
|
+
|
|
370
|
+
return ret_crystal_path
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.graphs sage.modules
|
|
3
|
+
r"""
|
|
4
|
+
Bijection classes for type `A_n^{(1)}`
|
|
5
|
+
|
|
6
|
+
Part of the (internal) classes which run the bijection between rigged
|
|
7
|
+
configurations and tensor products of Kirillov-Reshetikhin tableaux of
|
|
8
|
+
type `A_n^{(1)}`.
|
|
9
|
+
|
|
10
|
+
AUTHORS:
|
|
11
|
+
|
|
12
|
+
- Travis Scrimshaw (2011-04-15): Initial version
|
|
13
|
+
|
|
14
|
+
TESTS::
|
|
15
|
+
|
|
16
|
+
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A', 4, 1], [[2,1]])
|
|
17
|
+
sage: from sage.combinat.rigged_configurations.bij_type_A import KRTToRCBijectionTypeA
|
|
18
|
+
sage: bijection = KRTToRCBijectionTypeA(KRT(pathlist=[[5,2]]))
|
|
19
|
+
sage: TestSuite(bijection).run()
|
|
20
|
+
sage: RC = RiggedConfigurations(['A', 4, 1], [[2, 1]])
|
|
21
|
+
sage: from sage.combinat.rigged_configurations.bij_type_A import RCToKRTBijectionTypeA
|
|
22
|
+
sage: bijection = RCToKRTBijectionTypeA(RC(partition_list=[[],[],[],[]]))
|
|
23
|
+
sage: TestSuite(bijection).run()
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
# ****************************************************************************
|
|
27
|
+
# Copyright (C) 2011, 2012 Travis Scrimshaw <tscrim@ucdavis.edu>
|
|
28
|
+
#
|
|
29
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
30
|
+
#
|
|
31
|
+
# This code is distributed in the hope that it will be useful,
|
|
32
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
33
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
34
|
+
# General Public License for more details.
|
|
35
|
+
#
|
|
36
|
+
# The full text of the GPL is available at:
|
|
37
|
+
#
|
|
38
|
+
# https://www.gnu.org/licenses/
|
|
39
|
+
# ****************************************************************************
|
|
40
|
+
|
|
41
|
+
from sage.combinat.rigged_configurations.bij_abstract_class import KRTToRCBijectionAbstract
|
|
42
|
+
from sage.combinat.rigged_configurations.bij_abstract_class import RCToKRTBijectionAbstract
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class KRTToRCBijectionTypeA(KRTToRCBijectionAbstract):
|
|
46
|
+
r"""
|
|
47
|
+
Specific implementation of the bijection from KR tableaux to rigged
|
|
48
|
+
configurations for type `A_n^{(1)}`.
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
def next_state(self, val):
|
|
52
|
+
r"""
|
|
53
|
+
Build the next state for type `A_n^{(1)}`.
|
|
54
|
+
|
|
55
|
+
EXAMPLES::
|
|
56
|
+
|
|
57
|
+
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A', 4, 1], [[2,1]])
|
|
58
|
+
sage: from sage.combinat.rigged_configurations.bij_type_A import KRTToRCBijectionTypeA
|
|
59
|
+
sage: bijection = KRTToRCBijectionTypeA(KRT(pathlist=[[4,3]]))
|
|
60
|
+
sage: bijection.cur_path.insert(0, [])
|
|
61
|
+
sage: bijection.cur_dims.insert(0, [0, 1])
|
|
62
|
+
sage: bijection.cur_path[0].insert(0, [3])
|
|
63
|
+
sage: bijection.next_state(3)
|
|
64
|
+
"""
|
|
65
|
+
tableau_height = len(self.cur_path[0]) - 1
|
|
66
|
+
n = self.n
|
|
67
|
+
|
|
68
|
+
# Note first we subtract off for the n = max value (in the path) - 1,
|
|
69
|
+
# then we remove 1 to match the indices between math and programming.
|
|
70
|
+
if val - 1 > tableau_height:
|
|
71
|
+
# Always add a cell to the first singular value in the first
|
|
72
|
+
# tableau we are updating.
|
|
73
|
+
if len(self.ret_rig_con[val - 2]) > 0:
|
|
74
|
+
max_width = self.ret_rig_con[val - 2][0]
|
|
75
|
+
else:
|
|
76
|
+
max_width = 1
|
|
77
|
+
|
|
78
|
+
# Insert a cell into the rightmost rigged partition
|
|
79
|
+
max_width = self.ret_rig_con[val - 2].insert_cell(max_width)
|
|
80
|
+
|
|
81
|
+
# Move to the left and update values as we have finished modifying
|
|
82
|
+
# everything which affects its vacancy/partition values
|
|
83
|
+
for a in reversed(range(tableau_height, val - 2)):
|
|
84
|
+
max_width = self.ret_rig_con[a].insert_cell(max_width)
|
|
85
|
+
self._update_vacancy_nums(a + 1)
|
|
86
|
+
self._update_partition_values(a + 1)
|
|
87
|
+
|
|
88
|
+
# Update the final rigged tableau
|
|
89
|
+
# Note if tabelauHeight = n+1, then we must have val = n+1 (in order
|
|
90
|
+
# to be column strict increasing), but then tableau_height is never
|
|
91
|
+
# greater than val, so we don't enter into this statement.
|
|
92
|
+
self._update_vacancy_nums(tableau_height)
|
|
93
|
+
self._update_partition_values(tableau_height)
|
|
94
|
+
|
|
95
|
+
if val - 1 < n:
|
|
96
|
+
self._update_vacancy_nums(val - 1)
|
|
97
|
+
|
|
98
|
+
if tableau_height > 0:
|
|
99
|
+
self._update_vacancy_nums(tableau_height - 1)
|
|
100
|
+
elif tableau_height - 1 < n:
|
|
101
|
+
# Otherwise we just need to update the vacancy numbers that are affected
|
|
102
|
+
if tableau_height < n:
|
|
103
|
+
self._update_vacancy_nums(tableau_height)
|
|
104
|
+
|
|
105
|
+
if tableau_height > 0:
|
|
106
|
+
self._update_vacancy_nums(tableau_height - 1)
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
class RCToKRTBijectionTypeA(RCToKRTBijectionAbstract):
|
|
110
|
+
r"""
|
|
111
|
+
Specific implementation of the bijection from rigged configurations to
|
|
112
|
+
tensor products of KR tableaux for type `A_n^{(1)}`.
|
|
113
|
+
"""
|
|
114
|
+
|
|
115
|
+
def next_state(self, height):
|
|
116
|
+
r"""
|
|
117
|
+
Build the next state for type `A_n^{(1)}`.
|
|
118
|
+
|
|
119
|
+
EXAMPLES::
|
|
120
|
+
|
|
121
|
+
sage: RC = RiggedConfigurations(['A', 4, 1], [[2, 1]])
|
|
122
|
+
sage: from sage.combinat.rigged_configurations.bij_type_A import RCToKRTBijectionTypeA
|
|
123
|
+
sage: bijection = RCToKRTBijectionTypeA(RC(partition_list=[[1],[1],[1],[1]]))
|
|
124
|
+
sage: bijection.next_state(1)
|
|
125
|
+
5
|
|
126
|
+
"""
|
|
127
|
+
height -= 1 # indexing
|
|
128
|
+
n = self.n
|
|
129
|
+
ell = [None] * n
|
|
130
|
+
b = None
|
|
131
|
+
|
|
132
|
+
# Calculate the rank and ell values
|
|
133
|
+
last_size = 0
|
|
134
|
+
a = height
|
|
135
|
+
for partition in self.cur_partitions[height:]:
|
|
136
|
+
ell[a] = self._find_singular_string(partition, last_size)
|
|
137
|
+
|
|
138
|
+
if ell[a] is None:
|
|
139
|
+
b = a + 1
|
|
140
|
+
break
|
|
141
|
+
else:
|
|
142
|
+
last_size = partition[ell[a]]
|
|
143
|
+
a += 1
|
|
144
|
+
|
|
145
|
+
if b is None:
|
|
146
|
+
b = n + 1
|
|
147
|
+
|
|
148
|
+
# Determine the new rigged configuration by removing a box from the selected
|
|
149
|
+
# string and then making the new string singular
|
|
150
|
+
row_num = self.cur_partitions[0].remove_cell(ell[0])
|
|
151
|
+
for a in range(1, n):
|
|
152
|
+
row_num_next = self.cur_partitions[a].remove_cell(ell[a])
|
|
153
|
+
|
|
154
|
+
self._update_vacancy_numbers(a - 1)
|
|
155
|
+
if row_num is not None:
|
|
156
|
+
self.cur_partitions[a - 1].rigging[row_num] = self.cur_partitions[a - 1].vacancy_numbers[row_num]
|
|
157
|
+
row_num = row_num_next
|
|
158
|
+
|
|
159
|
+
self._update_vacancy_numbers(n - 1)
|
|
160
|
+
if row_num is not None:
|
|
161
|
+
self.cur_partitions[n - 1].rigging[row_num] = self.cur_partitions[n - 1].vacancy_numbers[row_num]
|
|
162
|
+
|
|
163
|
+
return b
|