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,510 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
r"""
|
|
3
|
+
Semistandard tableaux
|
|
4
|
+
|
|
5
|
+
This is an implementation of the abstract base class
|
|
6
|
+
:class:`sage.combinat.path_tableaux.path_tableau.PathTableau`.
|
|
7
|
+
|
|
8
|
+
This implementation is for semistandard tableaux, represented as a chain of partitions
|
|
9
|
+
(essentially, the Gelfand-Tsetlin pattern).
|
|
10
|
+
This generalises the jeu de taquin operations of rectification, promotion, evacuation from
|
|
11
|
+
standard tableaux to semistandard tableaux. The local rule is the Bender-Knuth involution.
|
|
12
|
+
|
|
13
|
+
EXAMPLES::
|
|
14
|
+
|
|
15
|
+
sage: pt = path_tableaux.SemistandardPathTableau([[], [3], [3,2], [3,3,1],
|
|
16
|
+
....: [3,3,2,1], [4,3,3,1,0]])
|
|
17
|
+
sage: pt.promotion()
|
|
18
|
+
[(), (2,), (3, 1), (3, 2, 1), (4, 3, 1, 0), (4, 3, 3, 1, 0)]
|
|
19
|
+
sage: pt.evacuation()
|
|
20
|
+
[(), (2,), (4, 0), (4, 2, 0), (4, 3, 1, 0), (4, 3, 3, 1, 0)]
|
|
21
|
+
|
|
22
|
+
sage: pt = path_tableaux.SemistandardPathTableau([[], [3], [3,2], [3,3,1],
|
|
23
|
+
....: [3,3,2,1], [9/2,3,3,1,0]])
|
|
24
|
+
sage: pt.promotion()
|
|
25
|
+
[(), (2,), (3, 1), (3, 2, 1), (9/2, 3, 1, 0), (9/2, 3, 3, 1, 0)]
|
|
26
|
+
sage: pt.evacuation()
|
|
27
|
+
[(), (5/2,), (9/2, 0), (9/2, 2, 0), (9/2, 3, 1, 0), (9/2, 3, 3, 1, 0)]
|
|
28
|
+
|
|
29
|
+
sage: pt = path_tableaux.SemistandardPathTableau([[], [3], [4,2], [5,4,1]])
|
|
30
|
+
sage: path_tableaux.CylindricalDiagram(pt)
|
|
31
|
+
[ (), (3,), (4, 2), (5, 4, 1)]
|
|
32
|
+
[ , (), (3,), (5, 2), (5, 4, 1)]
|
|
33
|
+
[ , , (), (4,), (4, 3), (5, 4, 1)]
|
|
34
|
+
[ , , , (), (3,), (5, 1), (5, 4, 1)]
|
|
35
|
+
|
|
36
|
+
sage: pt2 = path_tableaux.SemistandardPathTableau([[3,2], [3,3,1],
|
|
37
|
+
....: [3,3,2,1], [4,3,3,1,0]])
|
|
38
|
+
sage: pt1 = path_tableaux.SemistandardPathTableau([[], [3], [3,2]])
|
|
39
|
+
sage: pt1.commutor(pt2)
|
|
40
|
+
([(), (2,), (2, 2), (4, 2, 0)], [(4, 2, 0), (4, 3, 2, 0), (4, 3, 3, 1, 0)])
|
|
41
|
+
sage: pt1.commutor(pt2,verbose=True)
|
|
42
|
+
[(3, 2), (3, 3, 1), (3, 3, 2, 1), (4, 3, 3, 1, 0)]
|
|
43
|
+
[(3,), (3, 2), (3, 2, 2), (4, 3, 2, 0)]
|
|
44
|
+
[(), (2,), (2, 2), (4, 2, 0)]
|
|
45
|
+
([(), (2,), (2, 2), (4, 2, 0)], [(4, 2, 0), (4, 3, 2, 0), (4, 3, 3, 1, 0)])
|
|
46
|
+
|
|
47
|
+
sage: st = SkewTableau([[None, None, None, 4, 4, 5, 6, 7], [None, 2, 4, 6, 7, 7, 7],
|
|
48
|
+
....: [None, 4, 5, 8, 8, 9], [None, 6, 7, 10], [None, 8, 8, 11],
|
|
49
|
+
....: [None], [4]])
|
|
50
|
+
sage: pt = path_tableaux.SemistandardPathTableau(st)
|
|
51
|
+
sage: bk = [SkewTableau(st.bender_knuth_involution(i+1)) for i in range(10)]
|
|
52
|
+
sage: lr = [pt.local_rule(i+1) for i in range(10)]
|
|
53
|
+
sage: [r.to_tableau() for r in lr] == bk
|
|
54
|
+
True
|
|
55
|
+
|
|
56
|
+
TESTS::
|
|
57
|
+
|
|
58
|
+
sage: pt = path_tableaux.SemistandardPathTableau([[], [3], [3,2], [3,3,1], [3,3,2,1], [4,3,3,1,0]])
|
|
59
|
+
sage: TestSuite(pt).run()
|
|
60
|
+
|
|
61
|
+
sage: pt = path_tableaux.SemistandardPathTableau([[], [3], [3,2], [3,3,1], [7/2,3,2,1], [4,3,3,1,0]])
|
|
62
|
+
sage: TestSuite(pt).run()
|
|
63
|
+
Failure in _test_jdt_promotion:
|
|
64
|
+
Traceback (most recent call last):
|
|
65
|
+
...
|
|
66
|
+
The following tests failed: _test_jdt_promotion
|
|
67
|
+
|
|
68
|
+
sage: pt = path_tableaux.SemistandardPathTableau([[3,2], [3,3,1], [3,3,2,1], [4,3,3,1,0]])
|
|
69
|
+
sage: pt.promotion()
|
|
70
|
+
[(3, 2), (3, 2, 2), (4, 3, 2, 0), (4, 3, 3, 1, 0)]
|
|
71
|
+
|
|
72
|
+
AUTHORS:
|
|
73
|
+
|
|
74
|
+
- Bruce Westbury (2020): initial version
|
|
75
|
+
"""
|
|
76
|
+
|
|
77
|
+
#*****************************************************************************
|
|
78
|
+
# Copyright (C) 2020 Bruce Westbury <bruce.westbury@gmail.com>,
|
|
79
|
+
#
|
|
80
|
+
# This program is free software: you can redistribute it and/or modify
|
|
81
|
+
# it under the terms of the GNU General Public License as published by
|
|
82
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
83
|
+
# (at your option) any later version.
|
|
84
|
+
# https://www.gnu.org/licenses/
|
|
85
|
+
# ****************************************************************************
|
|
86
|
+
|
|
87
|
+
from sage.combinat.path_tableaux.path_tableau import PathTableau, PathTableaux
|
|
88
|
+
from sage.combinat.combinatorial_map import combinatorial_map
|
|
89
|
+
from sage.combinat.skew_tableau import SkewTableau, SkewTableaux
|
|
90
|
+
from sage.combinat.tableau import Tableau
|
|
91
|
+
from sage.combinat.gelfand_tsetlin_patterns import GelfandTsetlinPattern
|
|
92
|
+
from sage.combinat.partition import _Partitions
|
|
93
|
+
from sage.rings.semirings.non_negative_integer_semiring import NN
|
|
94
|
+
|
|
95
|
+
###############################################################################
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
class SemistandardPathTableau(PathTableau):
|
|
99
|
+
r"""
|
|
100
|
+
An instance is a sequence of lists. Usually the entries will be nonnegative integers
|
|
101
|
+
in which case this is the chain of partitions of a (skew) semistandard tableau.
|
|
102
|
+
In general the entries are elements of an ordered abelian group; each list is weakly
|
|
103
|
+
decreasing and successive lists are interleaved.
|
|
104
|
+
|
|
105
|
+
INPUT:
|
|
106
|
+
|
|
107
|
+
Can be any of the following
|
|
108
|
+
|
|
109
|
+
* a sequence of partitions
|
|
110
|
+
* a sequence of lists/tuples
|
|
111
|
+
* a semistandard tableau
|
|
112
|
+
* a semistandard skew tableau
|
|
113
|
+
* a Gelfand-Tsetlin pattern
|
|
114
|
+
|
|
115
|
+
EXAMPLES::
|
|
116
|
+
|
|
117
|
+
sage: path_tableaux.SemistandardPathTableau([[], [2], [2,1]])
|
|
118
|
+
[(), (2,), (2, 1)]
|
|
119
|
+
|
|
120
|
+
sage: gt = GelfandTsetlinPattern([[2,1], [2]])
|
|
121
|
+
sage: path_tableaux.SemistandardPathTableau(gt)
|
|
122
|
+
[(), (2,), (2, 1)]
|
|
123
|
+
|
|
124
|
+
sage: st = SemistandardTableau([[1,1], [2]])
|
|
125
|
+
sage: path_tableaux.SemistandardPathTableau(st)
|
|
126
|
+
[(), (2,), (2, 1)]
|
|
127
|
+
|
|
128
|
+
sage: st = SkewTableau([[1,1], [2]])
|
|
129
|
+
sage: path_tableaux.SemistandardPathTableau(st)
|
|
130
|
+
[(), (2,), (2, 1)]
|
|
131
|
+
|
|
132
|
+
sage: st = SkewTableau([[None,1,1], [2]])
|
|
133
|
+
sage: path_tableaux.SemistandardPathTableau(st)
|
|
134
|
+
[(1,), (3, 0), (3, 1, 0)]
|
|
135
|
+
|
|
136
|
+
sage: path_tableaux.SemistandardPathTableau([[], [5/2], [7/2,2]])
|
|
137
|
+
[(), (5/2,), (7/2, 2)]
|
|
138
|
+
|
|
139
|
+
sage: path_tableaux.SemistandardPathTableau([[], [2.5], [3.5,2]])
|
|
140
|
+
[(), (2.5...,), (3.5..., 2)]
|
|
141
|
+
"""
|
|
142
|
+
|
|
143
|
+
@staticmethod
|
|
144
|
+
def __classcall_private__(cls, st, check=True):
|
|
145
|
+
r"""
|
|
146
|
+
Ensure that a tableau is only ever constructed as an
|
|
147
|
+
``element_class`` call of an appropriate parent.
|
|
148
|
+
|
|
149
|
+
EXAMPLES::
|
|
150
|
+
|
|
151
|
+
sage: t = path_tableaux.SemistandardPathTableau([[], [2]])
|
|
152
|
+
sage: t.parent()
|
|
153
|
+
<sage.combinat.path_tableaux.semistandard.SemistandardPathTableaux_with_category object at ...>
|
|
154
|
+
"""
|
|
155
|
+
return SemistandardPathTableaux()(st, check=check)
|
|
156
|
+
|
|
157
|
+
def __init__(self, parent, st, check=True):
|
|
158
|
+
r"""
|
|
159
|
+
Initialize a semistandard tableau.
|
|
160
|
+
|
|
161
|
+
TESTS::
|
|
162
|
+
|
|
163
|
+
sage: path_tableaux.SemistandardPathTableau([(), 3, (3, 2)])
|
|
164
|
+
Traceback (most recent call last):
|
|
165
|
+
...
|
|
166
|
+
ValueError: [(), 3, (3, 2)] is not a sequence of lists
|
|
167
|
+
"""
|
|
168
|
+
w = None
|
|
169
|
+
|
|
170
|
+
if isinstance(st, SemistandardPathTableau):
|
|
171
|
+
w = list(st)
|
|
172
|
+
|
|
173
|
+
elif isinstance(st, GelfandTsetlinPattern):
|
|
174
|
+
w = list(st)
|
|
175
|
+
w.reverse()
|
|
176
|
+
w = [(), *w]
|
|
177
|
+
|
|
178
|
+
elif isinstance(st, (Tableau,SkewTableau)):
|
|
179
|
+
w = st.to_chain()
|
|
180
|
+
|
|
181
|
+
elif isinstance(st, (list,tuple)):
|
|
182
|
+
if any(not isinstance(a,(list,tuple)) for a in st):
|
|
183
|
+
raise ValueError(f"{st} is not a sequence of lists")
|
|
184
|
+
w = st
|
|
185
|
+
|
|
186
|
+
else:
|
|
187
|
+
raise ValueError(f"invalid input {st} is of type {type(st)}")
|
|
188
|
+
|
|
189
|
+
# Pad with zeroes, if necessary
|
|
190
|
+
m = max(len(a)-i for i,a in enumerate(w))
|
|
191
|
+
w = [list(a)+[0]*(m+i-len(a)) for i,a in enumerate(w)]
|
|
192
|
+
# Convert to immutable
|
|
193
|
+
w = tuple([tuple(a) for a in w])
|
|
194
|
+
|
|
195
|
+
PathTableau.__init__(self, parent, w, check=check)
|
|
196
|
+
|
|
197
|
+
def check(self):
|
|
198
|
+
"""
|
|
199
|
+
Check that ``self`` is a valid path.
|
|
200
|
+
|
|
201
|
+
EXAMPLES::
|
|
202
|
+
|
|
203
|
+
sage: path_tableaux.SemistandardPathTableau([[], [3], [2,2]]) # indirect doctest
|
|
204
|
+
Traceback (most recent call last):
|
|
205
|
+
...
|
|
206
|
+
ValueError: [(), (3,), (2, 2)] does not satisfy
|
|
207
|
+
the required inequalities in row 1
|
|
208
|
+
|
|
209
|
+
sage: path_tableaux.SemistandardPathTableau([[], [3/2], [2,5/2]]) # indirect doctest
|
|
210
|
+
Traceback (most recent call last):
|
|
211
|
+
...
|
|
212
|
+
ValueError: [(), (3/2,), (2, 5/2)] does not satisfy
|
|
213
|
+
the required inequalities in row 1
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
TESTS::
|
|
217
|
+
|
|
218
|
+
sage: path_tableaux.SemistandardPathTableau([[], [2], [1,2]])
|
|
219
|
+
Traceback (most recent call last):
|
|
220
|
+
...
|
|
221
|
+
ValueError: [(), (2,), (1, 2)] does not satisfy the required inequalities in row 1
|
|
222
|
+
|
|
223
|
+
sage: path_tableaux.SemistandardPathTableau([[], [2], [1,2]], check=False)
|
|
224
|
+
[(), (2,), (1, 2)]
|
|
225
|
+
"""
|
|
226
|
+
for i in range(1,len(self)-1):
|
|
227
|
+
if not all(r >= s for r,s in zip(self[i+1],self[i])):
|
|
228
|
+
raise ValueError(f"{self} does not satisfy the required inequalities in row {i}")
|
|
229
|
+
if not all(r >= s for r,s in zip(self[i],self[i+1][1:])):
|
|
230
|
+
raise ValueError(f"{self} does not satisfy the required inequalities in row {i}")
|
|
231
|
+
|
|
232
|
+
def size(self):
|
|
233
|
+
r"""
|
|
234
|
+
Return the size or length of ``self``.
|
|
235
|
+
|
|
236
|
+
EXAMPLES::
|
|
237
|
+
|
|
238
|
+
sage: path_tableaux.SemistandardPathTableau([[], [3], [3,2], [3,3,1], [3,3,2,1]]).size()
|
|
239
|
+
5
|
|
240
|
+
"""
|
|
241
|
+
return len(self)
|
|
242
|
+
|
|
243
|
+
def is_skew(self):
|
|
244
|
+
"""
|
|
245
|
+
Return ``True`` if ``self`` is skew.
|
|
246
|
+
|
|
247
|
+
EXAMPLES::
|
|
248
|
+
|
|
249
|
+
sage: path_tableaux.SemistandardPathTableau([[], [2]]).is_skew()
|
|
250
|
+
False
|
|
251
|
+
sage: path_tableaux.SemistandardPathTableau([[2,1]]).is_skew()
|
|
252
|
+
True
|
|
253
|
+
"""
|
|
254
|
+
return bool(self[0])
|
|
255
|
+
|
|
256
|
+
def is_integral(self) -> bool:
|
|
257
|
+
"""
|
|
258
|
+
Return ``True`` if all entries are nonnegative integers.
|
|
259
|
+
|
|
260
|
+
EXAMPLES::
|
|
261
|
+
|
|
262
|
+
sage: path_tableaux.SemistandardPathTableau([[], [3], [3,2]]).is_integral()
|
|
263
|
+
True
|
|
264
|
+
sage: path_tableaux.SemistandardPathTableau([[], [5/2], [7/2,2]]).is_integral()
|
|
265
|
+
False
|
|
266
|
+
sage: path_tableaux.SemistandardPathTableau([[], [3], [3,-2]]).is_integral()
|
|
267
|
+
False
|
|
268
|
+
"""
|
|
269
|
+
return all(i in NN for a in self for i in a)
|
|
270
|
+
|
|
271
|
+
def local_rule(self, i):
|
|
272
|
+
r"""
|
|
273
|
+
This is the Bender-Knuth involution.
|
|
274
|
+
|
|
275
|
+
This is implemented by toggling the entries of the `i`-th list.
|
|
276
|
+
The allowed range for ``i`` is ``0 < i < len(self)-1`` so any row except
|
|
277
|
+
the first and last can be changed.
|
|
278
|
+
|
|
279
|
+
EXAMPLES::
|
|
280
|
+
|
|
281
|
+
sage: pt = path_tableaux.SemistandardPathTableau([[], [3], [3,2],
|
|
282
|
+
....: [3,3,1], [3,3,2,1]])
|
|
283
|
+
sage: pt.local_rule(1)
|
|
284
|
+
[(), (2,), (3, 2), (3, 3, 1), (3, 3, 2, 1)]
|
|
285
|
+
sage: pt.local_rule(2)
|
|
286
|
+
[(), (3,), (3, 2), (3, 3, 1), (3, 3, 2, 1)]
|
|
287
|
+
sage: pt.local_rule(3)
|
|
288
|
+
[(), (3,), (3, 2), (3, 2, 2), (3, 3, 2, 1)]
|
|
289
|
+
|
|
290
|
+
TESTS::
|
|
291
|
+
|
|
292
|
+
sage: pt = path_tableaux.SemistandardPathTableau([[], [3], [3,2],
|
|
293
|
+
....: [3,3,1], [3,3,2,1]])
|
|
294
|
+
sage: pt.local_rule(0)
|
|
295
|
+
Traceback (most recent call last):
|
|
296
|
+
...
|
|
297
|
+
ValueError: 0 is not defined on [(), (3,), (3, 2), (3, 3, 1), (3, 3, 2, 1)]
|
|
298
|
+
sage: pt.local_rule(4)
|
|
299
|
+
Traceback (most recent call last):
|
|
300
|
+
...
|
|
301
|
+
ValueError: 4 is not defined on [(), (3,), (3, 2), (3, 3, 1), (3, 3, 2, 1)]
|
|
302
|
+
"""
|
|
303
|
+
def toggle(i, j):
|
|
304
|
+
"""
|
|
305
|
+
Return the toggle of entry 'self[i][j]'.
|
|
306
|
+
"""
|
|
307
|
+
|
|
308
|
+
if j == 0:
|
|
309
|
+
left = self[i+1][0]
|
|
310
|
+
else:
|
|
311
|
+
left = min(self[i+1][j], self[i-1][j-1])
|
|
312
|
+
if j == len(self[i])-1:
|
|
313
|
+
right = self[i+1][j+1]
|
|
314
|
+
else:
|
|
315
|
+
right = max(self[i+1][j+1], self[i-1][j])
|
|
316
|
+
|
|
317
|
+
return left + right - self[i][j]
|
|
318
|
+
|
|
319
|
+
if not 0 < i < self.size()-1:
|
|
320
|
+
raise ValueError(f"{i} is not defined on {self}")
|
|
321
|
+
|
|
322
|
+
with self.clone() as result:
|
|
323
|
+
result[i] = tuple([toggle(i,k) for k in range(len(self[i]))])
|
|
324
|
+
|
|
325
|
+
return result
|
|
326
|
+
|
|
327
|
+
def rectify(self, inner=None, verbose=False):
|
|
328
|
+
"""
|
|
329
|
+
Rectify ``self``.
|
|
330
|
+
|
|
331
|
+
This gives the usual rectification of a skew standard tableau and gives a
|
|
332
|
+
generalisation to skew semistandard tableaux. The usual construction uses
|
|
333
|
+
jeu de taquin but here we use the Bender-Knuth involutions.
|
|
334
|
+
|
|
335
|
+
EXAMPLES::
|
|
336
|
+
|
|
337
|
+
sage: st = SkewTableau([[None, None, None, 4], [None, None, 1, 6],
|
|
338
|
+
....: [None, None, 5], [2, 3]])
|
|
339
|
+
sage: path_tableaux.SemistandardPathTableau(st).rectify()
|
|
340
|
+
[(), (1,), (1, 1), (2, 1, 0), (3, 1, 0, 0), (3, 2, 0, 0, 0), (4, 2, 0, 0, 0, 0)]
|
|
341
|
+
sage: path_tableaux.SemistandardPathTableau(st).rectify(verbose=True)
|
|
342
|
+
[[(3, 2, 2), (3, 3, 2, 0), (3, 3, 2, 1, 0), (3, 3, 2, 2, 0, 0),
|
|
343
|
+
(4, 3, 2, 2, 0, 0, 0), (4, 3, 3, 2, 0, 0, 0, 0), (4, 4, 3, 2, 0, 0, 0, 0, 0)],
|
|
344
|
+
[(3, 2), (3, 3, 0), (3, 3, 1, 0), (3, 3, 2, 0, 0), (4, 3, 2, 0, 0, 0),
|
|
345
|
+
(4, 3, 3, 0, 0, 0, 0), (4, 4, 3, 0, 0, 0, 0, 0)],
|
|
346
|
+
[(3,), (3, 1), (3, 1, 1), (3, 2, 1, 0), (4, 2, 1, 0, 0), (4, 3, 1, 0, 0, 0),
|
|
347
|
+
(4, 4, 1, 0, 0, 0, 0)],
|
|
348
|
+
[(), (1,), (1, 1), (2, 1, 0), (3, 1, 0, 0), (3, 2, 0, 0, 0), (4, 2, 0, 0, 0, 0)]]
|
|
349
|
+
|
|
350
|
+
TESTS::
|
|
351
|
+
|
|
352
|
+
sage: S = SemistandardSkewTableaux([[5,3,3], [3,1]], [3,2,2])
|
|
353
|
+
sage: LHS = [path_tableaux.SemistandardPathTableau(st.rectify()) for st in S]
|
|
354
|
+
sage: RHS = [path_tableaux.SemistandardPathTableau(st).rectify() for st in S]
|
|
355
|
+
sage: LHS == RHS
|
|
356
|
+
True
|
|
357
|
+
|
|
358
|
+
sage: st = SkewTableau([[None, None, None, 4], [None, None, 1, 6],
|
|
359
|
+
....: [None, None, 5], [2, 3]])
|
|
360
|
+
sage: pt = path_tableaux.SemistandardPathTableau(st)
|
|
361
|
+
sage: SP = [path_tableaux.SemistandardPathTableau(it)
|
|
362
|
+
....: for it in StandardTableaux([3,2,2])]
|
|
363
|
+
sage: len(set(pt.rectify(inner=ip) for ip in SP))
|
|
364
|
+
1
|
|
365
|
+
"""
|
|
366
|
+
if not self.is_skew():
|
|
367
|
+
return self
|
|
368
|
+
|
|
369
|
+
n = len(self)
|
|
370
|
+
pp = self[0]
|
|
371
|
+
P = self.parent()
|
|
372
|
+
|
|
373
|
+
if inner is None:
|
|
374
|
+
initial = [pp[:r] for r in range(len(pp))]
|
|
375
|
+
elif _Partitions(inner[-1]) == _Partitions(pp):
|
|
376
|
+
initial = list(inner)[:-1]
|
|
377
|
+
else:
|
|
378
|
+
raise ValueError(f"the final shape{inner[-1]} must agree with the initial shape {pp}")
|
|
379
|
+
|
|
380
|
+
r = len(initial)
|
|
381
|
+
path = P.element_class(P, initial + list(self))
|
|
382
|
+
if verbose:
|
|
383
|
+
rect = [self]
|
|
384
|
+
|
|
385
|
+
for i in range(r):
|
|
386
|
+
for j in range(n-1):
|
|
387
|
+
path = path.local_rule(r+j-i)
|
|
388
|
+
if verbose:
|
|
389
|
+
rect.append(P.element_class(P, list(path)[r-i-1:r+n-i-1]))
|
|
390
|
+
|
|
391
|
+
if verbose:
|
|
392
|
+
return rect
|
|
393
|
+
else:
|
|
394
|
+
return P.element_class(P, list(path)[:n])
|
|
395
|
+
|
|
396
|
+
@combinatorial_map(name='to semistandard tableau')
|
|
397
|
+
def to_tableau(self):
|
|
398
|
+
r"""
|
|
399
|
+
Convert ``self`` to a :class:`SemistandardTableau`.
|
|
400
|
+
|
|
401
|
+
The :class:`SemistandardSkewTableau` is not implemented so this returns a :class:`SkewTableau`
|
|
402
|
+
|
|
403
|
+
EXAMPLES::
|
|
404
|
+
|
|
405
|
+
sage: pt = path_tableaux.SemistandardPathTableau([[], [3], [3,2], [3,3,1],
|
|
406
|
+
....: [3,3,2,1], [4,3,3,1,0]])
|
|
407
|
+
sage: pt.to_tableau()
|
|
408
|
+
[[1, 1, 1, 5], [2, 2, 3], [3, 4, 5], [4]]
|
|
409
|
+
|
|
410
|
+
TESTS::
|
|
411
|
+
|
|
412
|
+
sage: SST = SemistandardTableaux(shape=[5,5,3], eval=[2,2,3,4,2])
|
|
413
|
+
sage: all(st == path_tableaux.SemistandardPathTableau(st).to_tableau() # needs sage.modules
|
|
414
|
+
....: for st in SST)
|
|
415
|
+
True
|
|
416
|
+
"""
|
|
417
|
+
from sage.combinat.tableau import from_chain
|
|
418
|
+
|
|
419
|
+
if not self.is_integral():
|
|
420
|
+
raise ValueError(f"{self} must have all entries nonnegative integers")
|
|
421
|
+
|
|
422
|
+
lt = [[i for i in a if i > 0] for a in self]
|
|
423
|
+
if self.is_skew():
|
|
424
|
+
return SkewTableaux().from_chain(lt)
|
|
425
|
+
else:
|
|
426
|
+
return from_chain(lt)
|
|
427
|
+
|
|
428
|
+
@combinatorial_map(name='to Gelfand-Tsetlin pattern')
|
|
429
|
+
def to_pattern(self):
|
|
430
|
+
r"""
|
|
431
|
+
Convert ``self`` to a Gelfand-Tsetlin pattern.
|
|
432
|
+
|
|
433
|
+
EXAMPLES::
|
|
434
|
+
|
|
435
|
+
sage: pt = path_tableaux.SemistandardPathTableau([[], [3], [3,2], [3,3,1],
|
|
436
|
+
....: [3,3,2,1], [4,3,3,1]])
|
|
437
|
+
sage: pt.to_pattern()
|
|
438
|
+
[[4, 3, 3, 1, 0], [3, 3, 2, 1], [3, 3, 1], [3, 2], [3]]
|
|
439
|
+
|
|
440
|
+
TESTS::
|
|
441
|
+
|
|
442
|
+
sage: pt = path_tableaux.SemistandardPathTableau([[3,2], [3,3,1], [3,3,2,1], [4,3,3,1]])
|
|
443
|
+
sage: pt.to_pattern()
|
|
444
|
+
Traceback (most recent call last):
|
|
445
|
+
...
|
|
446
|
+
ValueError: [(3, 2), (3, 3, 1), (3, 3, 2, 1), (4, 3, 3, 1, 0)] cannot be a skew tableau
|
|
447
|
+
|
|
448
|
+
sage: GT = GelfandTsetlinPatterns(top_row=[5,5,3])
|
|
449
|
+
sage: all(gt == path_tableaux.SemistandardPathTableau(gt).to_pattern() for gt in GT)
|
|
450
|
+
True
|
|
451
|
+
|
|
452
|
+
sage: GT = GelfandTsetlinPatterns(top_row=[5,5,3])
|
|
453
|
+
sage: all(gt.to_tableau() == path_tableaux.SemistandardPathTableau(gt).to_tableau() for gt in GT)
|
|
454
|
+
True
|
|
455
|
+
"""
|
|
456
|
+
if self.is_skew():
|
|
457
|
+
raise ValueError(f"{self} cannot be a skew tableau")
|
|
458
|
+
|
|
459
|
+
lt = list(self)
|
|
460
|
+
lt.reverse()
|
|
461
|
+
if not lt[-1]:
|
|
462
|
+
lt.pop()
|
|
463
|
+
|
|
464
|
+
return GelfandTsetlinPattern([list(a) for a in lt])
|
|
465
|
+
|
|
466
|
+
def _test_jdt_promotion(self, **options):
|
|
467
|
+
"""
|
|
468
|
+
Check that promotion agrees with :meth:`Tableau.promotion_inverse`
|
|
469
|
+
constructed using jeu de taquin.
|
|
470
|
+
|
|
471
|
+
TESTS::
|
|
472
|
+
|
|
473
|
+
sage: pt = path_tableaux.SemistandardPathTableau([(), (1,), (2,1), (4,2),
|
|
474
|
+
....: (4,3,1), (4,3,3)])
|
|
475
|
+
sage: pt._test_jdt_promotion()
|
|
476
|
+
|
|
477
|
+
sage: pt = path_tableaux.SemistandardPathTableau([(), (1,), (2,1), (4,2),
|
|
478
|
+
....: (4,3,1), (9/2,3,3)])
|
|
479
|
+
sage: pt._test_jdt_promotion()
|
|
480
|
+
Traceback (most recent call last):
|
|
481
|
+
...
|
|
482
|
+
ValueError: [(), (1,), (2, 1), (4, 2, 0), (4, 3, 1, 0), (9/2, 3, 3, 0, 0)]
|
|
483
|
+
must have all entries nonnegative integers
|
|
484
|
+
"""
|
|
485
|
+
if not self.is_integral():
|
|
486
|
+
raise ValueError(f"{self} must have all entries nonnegative integers")
|
|
487
|
+
|
|
488
|
+
tester = self._tester(**options)
|
|
489
|
+
LHS = self.promotion().to_tableau()
|
|
490
|
+
RHS = self.to_tableau().promotion_inverse(len(self)-2)
|
|
491
|
+
tester.assertEqual(LHS,RHS)
|
|
492
|
+
|
|
493
|
+
|
|
494
|
+
class SemistandardPathTableaux(PathTableaux):
|
|
495
|
+
"""
|
|
496
|
+
The parent class for :class:`SemistandardPathTableau`.
|
|
497
|
+
"""
|
|
498
|
+
|
|
499
|
+
def _an_element_(self):
|
|
500
|
+
"""
|
|
501
|
+
Return an element of ``self``.
|
|
502
|
+
|
|
503
|
+
EXAMPLES::
|
|
504
|
+
|
|
505
|
+
sage: path_tableaux.SemistandardPathTableaux()._an_element_()
|
|
506
|
+
[(), (2,), (2, 1)]
|
|
507
|
+
"""
|
|
508
|
+
return SemistandardPathTableau([[], [2], [2,1]])
|
|
509
|
+
|
|
510
|
+
Element = SemistandardPathTableau
|