passagemath-combinat 10.6.42__cp314-cp314t-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- passagemath_combinat/__init__.py +3 -0
- passagemath_combinat-10.6.42.dist-info/DELVEWHEEL +2 -0
- passagemath_combinat-10.6.42.dist-info/METADATA +160 -0
- passagemath_combinat-10.6.42.dist-info/RECORD +401 -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-10-3a5f019e2510aeaad918cab2b57a689d.dll +0 -0
- passagemath_combinat.libs/libsymmetrica-3-7dcf900932804d0df5fd0919b4668720.dll +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 +44 -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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +0 -0
- sage/combinat/debruijn_sequence.pyx +355 -0
- sage/combinat/decorated_permutation.py +270 -0
- sage/combinat/degree_sequences.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +0 -0
- sage/combinat/expnums.pyx +148 -0
- sage/combinat/fast_vector_partitions.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +0 -0
- sage/combinat/words/word_char.pyx +847 -0
- sage/combinat/words/word_datatypes.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +0 -0
- sage/sat/solvers/satsolver.pxd +3 -0
- sage/sat/solvers/satsolver.pyx +405 -0
|
@@ -0,0 +1,821 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
r"""
|
|
3
|
+
Super tableaux
|
|
4
|
+
|
|
5
|
+
AUTHORS:
|
|
6
|
+
|
|
7
|
+
- Matthew Lancellotti (2007): initial version
|
|
8
|
+
- Chaman Agrawal (2019-07-23): modify standard and semistandard tableaux for
|
|
9
|
+
super tableaux
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
# ****************************************************************************
|
|
13
|
+
# Copyright (C) 2019 Matthew Lancellotti <mareoraft at gmail.com>
|
|
14
|
+
# 2019 Chaman Agrawal <chaman.ag at gmail.com>
|
|
15
|
+
#
|
|
16
|
+
# This program is free software: you can redistribute it and/or modify
|
|
17
|
+
# it under the terms of the GNU General Public License as published by
|
|
18
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
19
|
+
# (at your option) any later version.
|
|
20
|
+
# https://www.gnu.org/licenses/
|
|
21
|
+
# ****************************************************************************
|
|
22
|
+
from __future__ import annotations
|
|
23
|
+
|
|
24
|
+
from sage.sets.disjoint_union_enumerated_sets import DisjointUnionEnumeratedSets
|
|
25
|
+
from sage.sets.non_negative_integers import NonNegativeIntegers
|
|
26
|
+
from sage.rings.integer_ring import ZZ
|
|
27
|
+
from sage.sets.family import Family
|
|
28
|
+
from sage.structure.parent import Parent
|
|
29
|
+
from sage.rings.integer import Integer
|
|
30
|
+
from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets
|
|
31
|
+
from sage.categories.infinite_enumerated_sets import InfiniteEnumeratedSets
|
|
32
|
+
from sage.combinat.shifted_primed_tableau import PrimedEntry
|
|
33
|
+
from sage.combinat.tableau import (Tableau, Tableaux, SemistandardTableaux,
|
|
34
|
+
StandardTableaux)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class SemistandardSuperTableau(Tableau):
|
|
38
|
+
"""
|
|
39
|
+
A semistandard super tableau.
|
|
40
|
+
|
|
41
|
+
A semistandard super tableau is a tableau with primed positive integer entries.
|
|
42
|
+
As defined in [Muth2019]_, a semistandard super tableau weakly increases along
|
|
43
|
+
the rows and down the columns. Also, the letters of even parity (unprimed)
|
|
44
|
+
strictly increases down the columns, and letters of oddd parity (primed)
|
|
45
|
+
strictly increases along the rows. Note that Sage uses the English convention
|
|
46
|
+
for partitions and tableaux; the longer rows are displayed on top.
|
|
47
|
+
|
|
48
|
+
INPUT:
|
|
49
|
+
|
|
50
|
+
- ``t`` -- a tableau, a list of iterables, or an empty list
|
|
51
|
+
|
|
52
|
+
EXAMPLES::
|
|
53
|
+
|
|
54
|
+
sage: t = SemistandardSuperTableau([['1p',2,"3'"],[2,3]]); t
|
|
55
|
+
[[1', 2, 3'], [2, 3]]
|
|
56
|
+
sage: t.shape()
|
|
57
|
+
[3, 2]
|
|
58
|
+
sage: t.pp() # pretty printing
|
|
59
|
+
1' 2 3'
|
|
60
|
+
2 3
|
|
61
|
+
sage: t = Tableau([["1p",2],[2]])
|
|
62
|
+
sage: s = SemistandardSuperTableau(t); s
|
|
63
|
+
[[1', 2], [2]]
|
|
64
|
+
sage: SemistandardSuperTableau([]) # The empty tableau
|
|
65
|
+
[]
|
|
66
|
+
|
|
67
|
+
TESTS::
|
|
68
|
+
|
|
69
|
+
sage: from sage.combinat.shifted_primed_tableau import PrimedEntry
|
|
70
|
+
sage: t = Tableaux()([[1,1],[2]])
|
|
71
|
+
sage: s = SemistandardSuperTableaux()([[PrimedEntry(1),PrimedEntry(1)],
|
|
72
|
+
....: [PrimedEntry(2)]])
|
|
73
|
+
sage: s == t
|
|
74
|
+
True
|
|
75
|
+
sage: s.parent()
|
|
76
|
+
Semistandard super tableaux
|
|
77
|
+
sage: r = SemistandardSuperTableaux()(t); r.parent()
|
|
78
|
+
Semistandard super tableaux
|
|
79
|
+
sage: isinstance(r, Tableau)
|
|
80
|
+
True
|
|
81
|
+
sage: s2 = SemistandardSuperTableaux()([[PrimedEntry(1),
|
|
82
|
+
....: PrimedEntry(1)], [PrimedEntry(2)]])
|
|
83
|
+
sage: s2 == s
|
|
84
|
+
True
|
|
85
|
+
sage: s2.parent()
|
|
86
|
+
Semistandard super tableaux
|
|
87
|
+
"""
|
|
88
|
+
@staticmethod
|
|
89
|
+
def __classcall_private__(cls, t):
|
|
90
|
+
r"""
|
|
91
|
+
This ensures that a SemistandardSuperTableau is only ever constructed
|
|
92
|
+
as an element_class call of an appropriate parent.
|
|
93
|
+
|
|
94
|
+
TESTS::
|
|
95
|
+
|
|
96
|
+
sage: t = SemistandardSuperTableau([[1,1],[2]])
|
|
97
|
+
sage: TestSuite(t).run()
|
|
98
|
+
sage: t.parent()
|
|
99
|
+
Semistandard super tableaux
|
|
100
|
+
sage: t.category()
|
|
101
|
+
Category of elements of Semistandard super tableaux
|
|
102
|
+
sage: type(t)
|
|
103
|
+
<class 'sage.combinat.super_tableau.SemistandardSuperTableaux_all_with_category.element_class'>
|
|
104
|
+
"""
|
|
105
|
+
if isinstance(t, cls):
|
|
106
|
+
return t
|
|
107
|
+
|
|
108
|
+
# We must verify ``t`` is a list of iterables, and also
|
|
109
|
+
# normalize it to be a list of tuples.
|
|
110
|
+
try:
|
|
111
|
+
t = [tuple(it) for it in t]
|
|
112
|
+
except TypeError:
|
|
113
|
+
raise ValueError("a tableau must be a list of iterables")
|
|
114
|
+
SST = SemistandardSuperTableaux_all()
|
|
115
|
+
return SST.element_class(SST, t)
|
|
116
|
+
|
|
117
|
+
def __init__(self, parent, t, check=True, preprocessed=False):
|
|
118
|
+
r"""
|
|
119
|
+
Initialize a semistandard super tableau for given tableau ``t``.
|
|
120
|
+
|
|
121
|
+
TESTS::
|
|
122
|
+
|
|
123
|
+
sage: s = SemistandardSuperTableau([[1,"2'","3'",3], [2,"3'"]])
|
|
124
|
+
sage: t = SemistandardSuperTableaux()([[1,"2p","3p",3], [2,"3p"]])
|
|
125
|
+
sage: s == t
|
|
126
|
+
True
|
|
127
|
+
sage: s.parent()
|
|
128
|
+
Semistandard super tableaux
|
|
129
|
+
sage: TestSuite(t).run()
|
|
130
|
+
sage: r = SemistandardSuperTableaux()(s); r.parent()
|
|
131
|
+
Semistandard super tableaux
|
|
132
|
+
sage: s is t # identical super tableaux are distinct objects
|
|
133
|
+
False
|
|
134
|
+
"""
|
|
135
|
+
if not preprocessed:
|
|
136
|
+
t = self._preprocess(t)
|
|
137
|
+
super().__init__(parent, t, check=check)
|
|
138
|
+
|
|
139
|
+
@staticmethod
|
|
140
|
+
def _preprocess(t):
|
|
141
|
+
"""
|
|
142
|
+
Preprocessing list ``T`` to initialize the tableau.
|
|
143
|
+
|
|
144
|
+
The output is a list of rows as tuples, with entries being
|
|
145
|
+
``PrimedEntry`` instances.
|
|
146
|
+
|
|
147
|
+
TESTS::
|
|
148
|
+
|
|
149
|
+
sage: SemistandardSuperTableau._preprocess([["2'", "3p", 3.5]])
|
|
150
|
+
[[2', 3', 4']]
|
|
151
|
+
sage: SemistandardSuperTableau._preprocess([[None]])
|
|
152
|
+
[[None]]
|
|
153
|
+
sage: SemistandardSuperTableau._preprocess([])
|
|
154
|
+
[]
|
|
155
|
+
"""
|
|
156
|
+
if isinstance(t, SemistandardSuperTableau):
|
|
157
|
+
return t
|
|
158
|
+
# Preprocessing list t for primes and other symbols
|
|
159
|
+
t = [[PrimedEntry(entry) if entry is not None else entry for entry in row]
|
|
160
|
+
for row in t]
|
|
161
|
+
while t and not t[-1]:
|
|
162
|
+
t = t[:-1]
|
|
163
|
+
return t
|
|
164
|
+
|
|
165
|
+
def check(self):
|
|
166
|
+
"""
|
|
167
|
+
Check that ``self`` is a valid semistandard super tableau.
|
|
168
|
+
|
|
169
|
+
TESTS::
|
|
170
|
+
|
|
171
|
+
sage: SemistandardSuperTableau([[1,2,3],[1]]) # indirect doctest
|
|
172
|
+
Traceback (most recent call last):
|
|
173
|
+
...
|
|
174
|
+
ValueError: the unprimed entries of each column must
|
|
175
|
+
be strictly increasing
|
|
176
|
+
|
|
177
|
+
sage: SemistandardSuperTableau([[1,2,1]]) # indirect doctest
|
|
178
|
+
Traceback (most recent call last):
|
|
179
|
+
...
|
|
180
|
+
ValueError: the entries in each row of a semistandard super
|
|
181
|
+
tableau must be weakly increasing
|
|
182
|
+
|
|
183
|
+
sage: SemistandardSuperTableau([[0,1]]) # indirect doctest
|
|
184
|
+
Traceback (most recent call last):
|
|
185
|
+
...
|
|
186
|
+
ValueError: the entries of a semistandard super tableau must be
|
|
187
|
+
nonnegative primed integers
|
|
188
|
+
"""
|
|
189
|
+
super().check()
|
|
190
|
+
for row in self:
|
|
191
|
+
if not all(isinstance(c, PrimedEntry) and c > 0 for c in row):
|
|
192
|
+
raise ValueError("the entries of a semistandard super tableau"
|
|
193
|
+
" must be nonnegative primed integers")
|
|
194
|
+
if any(row[c] > row[c + 1] for c in range(len(row) - 1)):
|
|
195
|
+
raise ValueError("the entries in each row of a semistandard"
|
|
196
|
+
" super tableau must be weakly increasing")
|
|
197
|
+
|
|
198
|
+
if self:
|
|
199
|
+
for row, next in zip(self, self[1:]):
|
|
200
|
+
# Check that letters are weakly increasing down columns
|
|
201
|
+
if any(row[c] > next[c] for c in range(len(next))):
|
|
202
|
+
raise ValueError("the entries of each column of a "
|
|
203
|
+
"semistandard super tableau must be "
|
|
204
|
+
"weakly increasing")
|
|
205
|
+
# Check that unprimed letters are column strict
|
|
206
|
+
if not all(row[c] < next[c]
|
|
207
|
+
for c in range(len(next))
|
|
208
|
+
if (row[c].is_unprimed() or next[c].is_unprimed())):
|
|
209
|
+
raise ValueError("the unprimed entries of each column"
|
|
210
|
+
" must be strictly increasing")
|
|
211
|
+
|
|
212
|
+
# Check that primed letters are row strict
|
|
213
|
+
for row in self:
|
|
214
|
+
if not all(row[c] < row[c + 1]
|
|
215
|
+
for c in range(len(row) - 1)
|
|
216
|
+
if (row[c].is_primed() or row[c + 1].is_primed())):
|
|
217
|
+
raise ValueError("the primed entries in each row must be"
|
|
218
|
+
" strictly increasing")
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
class StandardSuperTableau(SemistandardSuperTableau):
|
|
222
|
+
r"""
|
|
223
|
+
A standard super tableau.
|
|
224
|
+
|
|
225
|
+
A standard super tableau is a semistandard super tableau whose entries
|
|
226
|
+
are in bijection with positive primed integers `1', 1, 2' \ldots n`.
|
|
227
|
+
|
|
228
|
+
For more information refer [Muth2019]_.
|
|
229
|
+
|
|
230
|
+
INPUT:
|
|
231
|
+
|
|
232
|
+
- ``t`` -- a Tableau, a list of iterables, or an empty list
|
|
233
|
+
|
|
234
|
+
EXAMPLES::
|
|
235
|
+
|
|
236
|
+
sage: t = StandardSuperTableau([["1'",1,"2'",2,"3'"],[3,"4'"]]); t
|
|
237
|
+
[[1', 1, 2', 2, 3'], [3, 4']]
|
|
238
|
+
sage: t.shape()
|
|
239
|
+
[5, 2]
|
|
240
|
+
sage: t.pp() # pretty printing
|
|
241
|
+
1' 1 2' 2 3'
|
|
242
|
+
3 4'
|
|
243
|
+
sage: t.is_standard()
|
|
244
|
+
True
|
|
245
|
+
sage: StandardSuperTableau([]) # The empty tableau
|
|
246
|
+
[]
|
|
247
|
+
|
|
248
|
+
TESTS::
|
|
249
|
+
|
|
250
|
+
sage: from sage.combinat.shifted_primed_tableau import PrimedEntry
|
|
251
|
+
sage: t = Tableaux()([[PrimedEntry('1p'), PrimedEntry('2p')],
|
|
252
|
+
....: [PrimedEntry(1)]])
|
|
253
|
+
sage: s = StandardSuperTableaux()([['1p','2p'],[1]])
|
|
254
|
+
sage: s == t
|
|
255
|
+
True
|
|
256
|
+
sage: s.parent()
|
|
257
|
+
Standard super tableaux
|
|
258
|
+
sage: r = StandardSuperTableaux()([]); r.parent()
|
|
259
|
+
Standard super tableaux
|
|
260
|
+
sage: isinstance(r, Tableau)
|
|
261
|
+
True
|
|
262
|
+
"""
|
|
263
|
+
@staticmethod
|
|
264
|
+
def __classcall_private__(self, t):
|
|
265
|
+
r"""
|
|
266
|
+
This ensures that a :class:`StandardSuperTableau` is only ever
|
|
267
|
+
constructed as an ``element_class`` call of an appropriate parent.
|
|
268
|
+
|
|
269
|
+
TESTS::
|
|
270
|
+
|
|
271
|
+
sage: t = StandardSuperTableau([['1p','2p'],[1]])
|
|
272
|
+
sage: TestSuite(t).run()
|
|
273
|
+
sage: t.parent()
|
|
274
|
+
Standard super tableaux
|
|
275
|
+
sage: type(t)
|
|
276
|
+
<class 'sage.combinat.super_tableau.StandardSuperTableaux_all_with_category.element_class'>
|
|
277
|
+
"""
|
|
278
|
+
if isinstance(t, StandardSuperTableau):
|
|
279
|
+
return t
|
|
280
|
+
|
|
281
|
+
SST = StandardSuperTableaux_all()
|
|
282
|
+
return SST.element_class(SST, t)
|
|
283
|
+
|
|
284
|
+
def check(self):
|
|
285
|
+
r"""
|
|
286
|
+
Check that ``self`` is a standard tableau.
|
|
287
|
+
|
|
288
|
+
TESTS::
|
|
289
|
+
|
|
290
|
+
sage: StandardSuperTableau([[1,2,3],[4,5]]) # indirect doctest
|
|
291
|
+
Traceback (most recent call last):
|
|
292
|
+
...
|
|
293
|
+
ValueError: the entries in a standard tableau must be in
|
|
294
|
+
bijection with 1',1,2',2,...,n
|
|
295
|
+
|
|
296
|
+
sage: StandardSuperTableau([[1,3,2]]) # indirect doctest
|
|
297
|
+
Traceback (most recent call last):
|
|
298
|
+
...
|
|
299
|
+
ValueError: the entries in each row of a semistandard super
|
|
300
|
+
tableau must be weakly increasing
|
|
301
|
+
"""
|
|
302
|
+
super().check()
|
|
303
|
+
# t is semistandard so we only need to check
|
|
304
|
+
# that its entries are in bijection with {1',1,2', 2, ..., n}
|
|
305
|
+
flattened_list = [i for row in self for i in row]
|
|
306
|
+
a = PrimedEntry('1p')
|
|
307
|
+
primed_list = []
|
|
308
|
+
for i in range(len(flattened_list)):
|
|
309
|
+
primed_list.append(a)
|
|
310
|
+
a = a.increase_half()
|
|
311
|
+
|
|
312
|
+
if sorted(flattened_list) != primed_list:
|
|
313
|
+
raise ValueError("the entries in a standard tableau must be in"
|
|
314
|
+
" bijection with 1',1,2',2,...,n")
|
|
315
|
+
|
|
316
|
+
def is_standard(self) -> bool:
|
|
317
|
+
"""
|
|
318
|
+
Return ``True`` since ``self`` is a standard super tableau.
|
|
319
|
+
|
|
320
|
+
EXAMPLES::
|
|
321
|
+
|
|
322
|
+
sage: StandardSuperTableau([['1p', 1], ['2p', 2]]).is_standard()
|
|
323
|
+
True
|
|
324
|
+
"""
|
|
325
|
+
return True
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
################################
|
|
329
|
+
# Semi-standard Super tableaux #
|
|
330
|
+
################################
|
|
331
|
+
class SemistandardSuperTableaux(SemistandardTableaux):
|
|
332
|
+
r"""
|
|
333
|
+
The set of semistandard super tableaux.
|
|
334
|
+
|
|
335
|
+
A semistandard super tableau is a tableau with primed positive integer entries.
|
|
336
|
+
As defined in [Muth2019]_, a semistandard super tableau weakly increases along
|
|
337
|
+
the rows and down the columns. Also, the letters of even parity (unprimed)
|
|
338
|
+
strictly increases down the columns, and letters of oddd parity (primed)
|
|
339
|
+
strictly increases along the rows. Note that Sage uses the English convention
|
|
340
|
+
for partitions and tableaux; the longer rows are displayed on top.
|
|
341
|
+
|
|
342
|
+
EXAMPLES::
|
|
343
|
+
|
|
344
|
+
sage: SST = SemistandardSuperTableaux(); SST
|
|
345
|
+
Semistandard super tableaux
|
|
346
|
+
"""
|
|
347
|
+
@staticmethod
|
|
348
|
+
def __classcall_private__(cls):
|
|
349
|
+
r"""
|
|
350
|
+
Normalize and process input to return the correct parent and
|
|
351
|
+
ensure a unique representation.
|
|
352
|
+
|
|
353
|
+
TESTS::
|
|
354
|
+
|
|
355
|
+
sage: SemistandardSuperTableaux()
|
|
356
|
+
Semistandard super tableaux
|
|
357
|
+
"""
|
|
358
|
+
return SemistandardSuperTableaux_all()
|
|
359
|
+
|
|
360
|
+
Element = SemistandardSuperTableau
|
|
361
|
+
|
|
362
|
+
def __contains__(self, x) -> bool:
|
|
363
|
+
"""
|
|
364
|
+
Return ``True`` if ``t`` can be interpreted as a
|
|
365
|
+
:class:`SemistandardSuperTableau`.
|
|
366
|
+
|
|
367
|
+
TESTS::
|
|
368
|
+
|
|
369
|
+
sage: from sage.combinat.shifted_primed_tableau import PrimedEntry
|
|
370
|
+
sage: T = sage.combinat.super_tableau.SemistandardSuperTableaux_all()
|
|
371
|
+
sage: [[1,2],[2]] in T
|
|
372
|
+
True
|
|
373
|
+
sage: [[PrimedEntry('1p'),PrimedEntry(2)],[PrimedEntry(2)]] in T
|
|
374
|
+
True
|
|
375
|
+
sage: [] in T
|
|
376
|
+
True
|
|
377
|
+
sage: Tableau([[1]]) in T
|
|
378
|
+
True
|
|
379
|
+
sage: StandardSuperTableau([[1]]) in T
|
|
380
|
+
Traceback (most recent call last):
|
|
381
|
+
...
|
|
382
|
+
ValueError: the entries in a standard tableau must be in bijection
|
|
383
|
+
with 1',1,2',2,...,n
|
|
384
|
+
|
|
385
|
+
sage: [[1,2],[1]] in T
|
|
386
|
+
False
|
|
387
|
+
sage: [[1,1],[5]] in T
|
|
388
|
+
True
|
|
389
|
+
sage: [[1,3,2]] in T
|
|
390
|
+
False
|
|
391
|
+
"""
|
|
392
|
+
if isinstance(x, SemistandardSuperTableau):
|
|
393
|
+
return True
|
|
394
|
+
elif Tableaux.__contains__(self, x):
|
|
395
|
+
x = SemistandardSuperTableau._preprocess(x)
|
|
396
|
+
for row in x:
|
|
397
|
+
if any(row[c] > row[c + 1] for c in range(len(row) - 1)):
|
|
398
|
+
return False
|
|
399
|
+
if not all(row[c] < row[c + 1]
|
|
400
|
+
for c in range(len(row) - 1)
|
|
401
|
+
if (row[c].is_primed() or row[c + 1].is_primed())):
|
|
402
|
+
return False
|
|
403
|
+
for row, next in zip(x, x[1:]):
|
|
404
|
+
if any(row[c] > next[c] for c in range(len(next))):
|
|
405
|
+
return False
|
|
406
|
+
if not all(row[c] < next[c]
|
|
407
|
+
for c in range(len(next))
|
|
408
|
+
if (row[c].is_unprimed() or next[c].is_unprimed())):
|
|
409
|
+
return False
|
|
410
|
+
return True
|
|
411
|
+
else:
|
|
412
|
+
return False
|
|
413
|
+
|
|
414
|
+
|
|
415
|
+
class SemistandardSuperTableaux_all(SemistandardSuperTableaux):
|
|
416
|
+
"""
|
|
417
|
+
All semistandard super tableaux.
|
|
418
|
+
"""
|
|
419
|
+
|
|
420
|
+
def __init__(self):
|
|
421
|
+
r"""
|
|
422
|
+
Initialize the class of all semistandard super tableaux.
|
|
423
|
+
|
|
424
|
+
TESTS::
|
|
425
|
+
|
|
426
|
+
sage: from sage.combinat.super_tableau import SemistandardSuperTableaux_all
|
|
427
|
+
sage: SST = SemistandardSuperTableaux_all(); SST
|
|
428
|
+
Semistandard super tableaux
|
|
429
|
+
"""
|
|
430
|
+
Parent.__init__(self, category=InfiniteEnumeratedSets())
|
|
431
|
+
SemistandardSuperTableaux.__init__(self)
|
|
432
|
+
|
|
433
|
+
def _repr_(self) -> str:
|
|
434
|
+
"""
|
|
435
|
+
TESTS::
|
|
436
|
+
|
|
437
|
+
sage: repr(SemistandardSuperTableaux())
|
|
438
|
+
'Semistandard super tableaux'
|
|
439
|
+
"""
|
|
440
|
+
return "Semistandard super tableaux"
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
################################
|
|
444
|
+
# Standard Super tableaux #
|
|
445
|
+
################################
|
|
446
|
+
class StandardSuperTableaux(SemistandardSuperTableaux, Parent):
|
|
447
|
+
r"""
|
|
448
|
+
The set of standard super tableaux.
|
|
449
|
+
|
|
450
|
+
A standard super tableau is a tableau whose entries are primed positive
|
|
451
|
+
integers, which are strictly increasing in rows and down columns and
|
|
452
|
+
contains each letters from 1',1,2'...n exactly once.
|
|
453
|
+
|
|
454
|
+
For more information refer [Muth2019]_.
|
|
455
|
+
|
|
456
|
+
INPUT:
|
|
457
|
+
|
|
458
|
+
- ``n`` -- a nonnegative integer or a partition
|
|
459
|
+
|
|
460
|
+
EXAMPLES::
|
|
461
|
+
|
|
462
|
+
sage: SST = StandardSuperTableaux()
|
|
463
|
+
sage: SST
|
|
464
|
+
Standard super tableaux
|
|
465
|
+
sage: SST([["1'",1,"2'",2,"3'"],[3,"4'"]])
|
|
466
|
+
[[1', 1, 2', 2, 3'], [3, 4']]
|
|
467
|
+
sage: SST = StandardSuperTableaux(3)
|
|
468
|
+
sage: SST
|
|
469
|
+
Standard super tableaux of size 3
|
|
470
|
+
sage: SST.first()
|
|
471
|
+
[[1', 1, 2']]
|
|
472
|
+
sage: SST.last()
|
|
473
|
+
[[1'], [1], [2']]
|
|
474
|
+
sage: SST.cardinality()
|
|
475
|
+
4
|
|
476
|
+
sage: SST.list()
|
|
477
|
+
[[[1', 1, 2']], [[1', 2'], [1]], [[1', 1], [2']], [[1'], [1], [2']]]
|
|
478
|
+
sage: SST = StandardSuperTableaux([3,2])
|
|
479
|
+
sage: SST
|
|
480
|
+
Standard super tableaux of shape [3, 2]
|
|
481
|
+
|
|
482
|
+
TESTS::
|
|
483
|
+
|
|
484
|
+
sage: StandardSuperTableaux()([])
|
|
485
|
+
[]
|
|
486
|
+
sage: SST = StandardSuperTableaux([3,2]); SST
|
|
487
|
+
Standard super tableaux of shape [3, 2]
|
|
488
|
+
sage: SST.first()
|
|
489
|
+
[[1', 2', 3'], [1, 2]]
|
|
490
|
+
sage: SST.last()
|
|
491
|
+
[[1', 1, 2'], [2, 3']]
|
|
492
|
+
sage: SST.cardinality()
|
|
493
|
+
5
|
|
494
|
+
sage: SST.cardinality() == StandardTableaux([3,2]).cardinality()
|
|
495
|
+
True
|
|
496
|
+
sage: SST.list()
|
|
497
|
+
[[[1', 2', 3'], [1, 2]],
|
|
498
|
+
[[1', 1, 3'], [2', 2]],
|
|
499
|
+
[[1', 2', 2], [1, 3']],
|
|
500
|
+
[[1', 1, 2], [2', 3']],
|
|
501
|
+
[[1', 1, 2'], [2, 3']]]
|
|
502
|
+
sage: TestSuite(SST).run()
|
|
503
|
+
"""
|
|
504
|
+
@staticmethod
|
|
505
|
+
def __classcall_private__(cls, n=None):
|
|
506
|
+
r"""
|
|
507
|
+
This class returns the appropriate parent based on arguments.
|
|
508
|
+
See the documentation for :class:`StandardTableaux` for more
|
|
509
|
+
information.
|
|
510
|
+
|
|
511
|
+
TESTS::
|
|
512
|
+
|
|
513
|
+
sage: SST = StandardSuperTableaux(); SST
|
|
514
|
+
Standard super tableaux
|
|
515
|
+
sage: StandardSuperTableaux(3)
|
|
516
|
+
Standard super tableaux of size 3
|
|
517
|
+
sage: StandardSuperTableaux([2,2])
|
|
518
|
+
Standard super tableaux of shape [2, 2]
|
|
519
|
+
sage: StandardSuperTableaux(-1)
|
|
520
|
+
Traceback (most recent call last):
|
|
521
|
+
...
|
|
522
|
+
ValueError: the argument must be a nonnegative integer or a
|
|
523
|
+
partition
|
|
524
|
+
sage: StandardSuperTableaux([[1]])
|
|
525
|
+
Traceback (most recent call last):
|
|
526
|
+
...
|
|
527
|
+
ValueError: the argument must be a nonnegative integer or a
|
|
528
|
+
partition
|
|
529
|
+
"""
|
|
530
|
+
from sage.combinat.partition import _Partitions
|
|
531
|
+
from sage.combinat.skew_partition import SkewPartitions
|
|
532
|
+
|
|
533
|
+
if n is None:
|
|
534
|
+
return StandardSuperTableaux_all()
|
|
535
|
+
|
|
536
|
+
elif n in _Partitions:
|
|
537
|
+
return StandardSuperTableaux_shape(_Partitions(n))
|
|
538
|
+
|
|
539
|
+
elif n in SkewPartitions():
|
|
540
|
+
raise NotImplementedError("standard super tableau for skew "
|
|
541
|
+
"partitions is not implemented yet")
|
|
542
|
+
|
|
543
|
+
if not isinstance(n, (int, Integer)) or n < 0:
|
|
544
|
+
raise ValueError("the argument must be a nonnegative integer"
|
|
545
|
+
" or a partition")
|
|
546
|
+
|
|
547
|
+
return StandardSuperTableaux_size(n)
|
|
548
|
+
|
|
549
|
+
Element = StandardSuperTableau
|
|
550
|
+
|
|
551
|
+
def __contains__(self, x) -> bool:
|
|
552
|
+
"""
|
|
553
|
+
Return ``True`` if ``t`` can be interpreted as a
|
|
554
|
+
:class:`StandardSuperTableau`.
|
|
555
|
+
|
|
556
|
+
TESTS::
|
|
557
|
+
|
|
558
|
+
sage: from sage.combinat.shifted_primed_tableau import PrimedEntry
|
|
559
|
+
sage: T = sage.combinat.super_tableau.StandardSuperTableaux_all()
|
|
560
|
+
sage: [[0.5,1],[1.5]] in T
|
|
561
|
+
True
|
|
562
|
+
sage: [[PrimedEntry('1p'),PrimedEntry('2p')],[PrimedEntry(1)]] in T
|
|
563
|
+
True
|
|
564
|
+
sage: [] in T
|
|
565
|
+
True
|
|
566
|
+
sage: Tableau([['1p']]) in T
|
|
567
|
+
True
|
|
568
|
+
sage: StandardSuperTableau([['1p']]) in T
|
|
569
|
+
True
|
|
570
|
+
sage: [[1,2],[1]] in T
|
|
571
|
+
False
|
|
572
|
+
sage: [[1,1],[5]] in T
|
|
573
|
+
False
|
|
574
|
+
sage: [[1,3,2]] in T
|
|
575
|
+
False
|
|
576
|
+
"""
|
|
577
|
+
if isinstance(x, StandardSuperTableau):
|
|
578
|
+
return True
|
|
579
|
+
elif Tableaux.__contains__(self, x):
|
|
580
|
+
x = SemistandardSuperTableau._preprocess(x)
|
|
581
|
+
flattened_list = [i for row in x for i in row]
|
|
582
|
+
a = PrimedEntry('1p')
|
|
583
|
+
primed_list = []
|
|
584
|
+
for i in range(len(flattened_list)):
|
|
585
|
+
primed_list.append(a)
|
|
586
|
+
a = a.increase_half()
|
|
587
|
+
# return True
|
|
588
|
+
return sorted(flattened_list) == primed_list and (x or
|
|
589
|
+
(all(row[i] < row[i + 1] for row in x for i in range(len(row) - 1)) and
|
|
590
|
+
all(x[r][c] < x[r + 1][c] for r in range(len(x) - 1)
|
|
591
|
+
for c in range(len(x[r + 1])))))
|
|
592
|
+
else:
|
|
593
|
+
return False
|
|
594
|
+
|
|
595
|
+
|
|
596
|
+
class StandardSuperTableaux_all(StandardSuperTableaux,
|
|
597
|
+
DisjointUnionEnumeratedSets):
|
|
598
|
+
"""
|
|
599
|
+
All standard super tableaux.
|
|
600
|
+
"""
|
|
601
|
+
|
|
602
|
+
def __init__(self):
|
|
603
|
+
r"""
|
|
604
|
+
Initialize the class of all standard super tableaux.
|
|
605
|
+
|
|
606
|
+
TESTS::
|
|
607
|
+
|
|
608
|
+
sage: from sage.combinat.super_tableau import StandardSuperTableaux_all
|
|
609
|
+
sage: SST = StandardSuperTableaux_all(); SST
|
|
610
|
+
Standard super tableaux
|
|
611
|
+
sage: TestSuite(SST).run()
|
|
612
|
+
"""
|
|
613
|
+
StandardSuperTableaux.__init__(self)
|
|
614
|
+
DisjointUnionEnumeratedSets.__init__(self,
|
|
615
|
+
Family(NonNegativeIntegers(),
|
|
616
|
+
StandardSuperTableaux_size),
|
|
617
|
+
facade=True, keepkey=False)
|
|
618
|
+
|
|
619
|
+
def _repr_(self) -> str:
|
|
620
|
+
"""
|
|
621
|
+
TESTS::
|
|
622
|
+
|
|
623
|
+
sage: repr(StandardSuperTableaux())
|
|
624
|
+
'Standard super tableaux'
|
|
625
|
+
"""
|
|
626
|
+
return "Standard super tableaux"
|
|
627
|
+
|
|
628
|
+
|
|
629
|
+
class StandardSuperTableaux_size(StandardSuperTableaux,
|
|
630
|
+
DisjointUnionEnumeratedSets):
|
|
631
|
+
"""
|
|
632
|
+
Standard super tableaux of fixed size `n`.
|
|
633
|
+
|
|
634
|
+
EXAMPLES::
|
|
635
|
+
|
|
636
|
+
sage: [ t for t in StandardSuperTableaux(1) ]
|
|
637
|
+
[[[1']]]
|
|
638
|
+
sage: [ t for t in StandardSuperTableaux(2) ]
|
|
639
|
+
[[[1', 1]], [[1'], [1]]]
|
|
640
|
+
sage: [ t for t in StandardSuperTableaux(3) ]
|
|
641
|
+
[[[1', 1, 2']], [[1', 2'], [1]], [[1', 1], [2']], [[1'], [1], [2']]]
|
|
642
|
+
sage: StandardSuperTableaux(4)[:]
|
|
643
|
+
[[[1', 1, 2', 2]],
|
|
644
|
+
[[1', 2', 2], [1]],
|
|
645
|
+
[[1', 1, 2], [2']],
|
|
646
|
+
[[1', 1, 2'], [2]],
|
|
647
|
+
[[1', 2'], [1, 2]],
|
|
648
|
+
[[1', 1], [2', 2]],
|
|
649
|
+
[[1', 2], [1], [2']],
|
|
650
|
+
[[1', 2'], [1], [2]],
|
|
651
|
+
[[1', 1], [2'], [2]],
|
|
652
|
+
[[1'], [1], [2'], [2]]]
|
|
653
|
+
"""
|
|
654
|
+
|
|
655
|
+
def __init__(self, n):
|
|
656
|
+
r"""
|
|
657
|
+
Initialize the class of all standard super tableaux of size ``n``.
|
|
658
|
+
|
|
659
|
+
TESTS::
|
|
660
|
+
|
|
661
|
+
sage: TestSuite( StandardSuperTableaux(4) ).run()
|
|
662
|
+
"""
|
|
663
|
+
StandardSuperTableaux.__init__(self)
|
|
664
|
+
from sage.combinat.partition import Partitions_n
|
|
665
|
+
DisjointUnionEnumeratedSets.__init__(self,
|
|
666
|
+
Family(Partitions_n(n),
|
|
667
|
+
StandardSuperTableaux_shape),
|
|
668
|
+
category=FiniteEnumeratedSets(),
|
|
669
|
+
facade=True, keepkey=False)
|
|
670
|
+
self.size = Integer(n)
|
|
671
|
+
|
|
672
|
+
def _repr_(self) -> str:
|
|
673
|
+
"""
|
|
674
|
+
TESTS::
|
|
675
|
+
|
|
676
|
+
sage: StandardSuperTableaux(3)
|
|
677
|
+
Standard super tableaux of size 3
|
|
678
|
+
"""
|
|
679
|
+
return "Standard super tableaux of size %s" % self.size
|
|
680
|
+
|
|
681
|
+
def __contains__(self, x) -> bool:
|
|
682
|
+
"""
|
|
683
|
+
TESTS::
|
|
684
|
+
|
|
685
|
+
sage: SST3 = StandardSuperTableaux(3)
|
|
686
|
+
sage: all(st in SST3 for st in SST3)
|
|
687
|
+
True
|
|
688
|
+
sage: SST4 = StandardSuperTableaux(4)
|
|
689
|
+
sage: [x for x in SST4 if x in SST3]
|
|
690
|
+
[]
|
|
691
|
+
sage: 1 in StandardSuperTableaux(4)
|
|
692
|
+
False
|
|
693
|
+
"""
|
|
694
|
+
return (StandardSuperTableaux.__contains__(self, x) and
|
|
695
|
+
sum(map(len, x)) == self.size)
|
|
696
|
+
|
|
697
|
+
def cardinality(self):
|
|
698
|
+
r"""
|
|
699
|
+
Return the number of all standard super tableaux of size ``n``.
|
|
700
|
+
|
|
701
|
+
The standard super tableaux of size `n` are in bijection with the
|
|
702
|
+
corresponding standard tableaux (under the alphabet relabeling). Refer
|
|
703
|
+
:class:`sage.combinat.tableau.StandardTableaux_size` for more details.
|
|
704
|
+
|
|
705
|
+
EXAMPLES::
|
|
706
|
+
|
|
707
|
+
sage: StandardSuperTableaux(3).cardinality()
|
|
708
|
+
4
|
|
709
|
+
sage: ns = [1,2,3,4,5,6]
|
|
710
|
+
sage: sts = [StandardSuperTableaux(n) for n in ns]
|
|
711
|
+
sage: all(st.cardinality() == len(st.list()) for st in sts)
|
|
712
|
+
True
|
|
713
|
+
sage: StandardSuperTableaux(50).cardinality() # long time
|
|
714
|
+
27886995605342342839104615869259776
|
|
715
|
+
|
|
716
|
+
TESTS::
|
|
717
|
+
|
|
718
|
+
sage: def cardinality_using_hook_formula(n):
|
|
719
|
+
....: c = 0
|
|
720
|
+
....: for p in Partitions(n):
|
|
721
|
+
....: c += StandardSuperTableaux(p).cardinality()
|
|
722
|
+
....: return c
|
|
723
|
+
sage: all(cardinality_using_hook_formula(i) ==
|
|
724
|
+
....: StandardSuperTableaux(i).cardinality()
|
|
725
|
+
....: for i in range(10))
|
|
726
|
+
True
|
|
727
|
+
"""
|
|
728
|
+
return StandardTableaux(self.size).cardinality()
|
|
729
|
+
|
|
730
|
+
|
|
731
|
+
class StandardSuperTableaux_shape(StandardSuperTableaux):
|
|
732
|
+
"""
|
|
733
|
+
Standard super tableaux of a fixed shape `p`.
|
|
734
|
+
"""
|
|
735
|
+
|
|
736
|
+
def __init__(self, p):
|
|
737
|
+
r"""
|
|
738
|
+
Initialize the class of all standard super tableaux of a given shape.
|
|
739
|
+
|
|
740
|
+
TESTS::
|
|
741
|
+
|
|
742
|
+
sage: TestSuite( StandardSuperTableaux([2,2,1]) ).run()
|
|
743
|
+
"""
|
|
744
|
+
super().__init__(category=FiniteEnumeratedSets())
|
|
745
|
+
StandardSuperTableaux.__init__(self)
|
|
746
|
+
self.shape = p
|
|
747
|
+
|
|
748
|
+
def __contains__(self, x) -> bool:
|
|
749
|
+
"""
|
|
750
|
+
EXAMPLES::
|
|
751
|
+
|
|
752
|
+
sage: ST = StandardSuperTableaux([2,1,1])
|
|
753
|
+
sage: all(st in ST for st in ST)
|
|
754
|
+
True
|
|
755
|
+
sage: len([x for x in StandardSuperTableaux(4) if x in ST])
|
|
756
|
+
3
|
|
757
|
+
sage: ST.cardinality()
|
|
758
|
+
3
|
|
759
|
+
sage: 1 in StandardSuperTableaux([2,1,1])
|
|
760
|
+
False
|
|
761
|
+
"""
|
|
762
|
+
return (StandardSuperTableaux.__contains__(self, x) and
|
|
763
|
+
[len(w) for w in x] == self.shape)
|
|
764
|
+
|
|
765
|
+
def _repr_(self) -> str:
|
|
766
|
+
"""
|
|
767
|
+
TESTS::
|
|
768
|
+
|
|
769
|
+
sage: repr(StandardSuperTableaux([2,1,1]))
|
|
770
|
+
'Standard super tableaux of shape [2, 1, 1]'
|
|
771
|
+
"""
|
|
772
|
+
return "Standard super tableaux of shape %s" % str(self.shape)
|
|
773
|
+
|
|
774
|
+
def cardinality(self):
|
|
775
|
+
r"""
|
|
776
|
+
Return the number of standard super tableaux of given shape.
|
|
777
|
+
|
|
778
|
+
The standard super tableaux of a fixed shape `p` are in bijection with
|
|
779
|
+
the corresponding standard tableaux (under the alphabet relabeling).
|
|
780
|
+
Refer :class:`sage.combinat.tableau.StandardTableaux_shape` for more
|
|
781
|
+
details.
|
|
782
|
+
|
|
783
|
+
EXAMPLES::
|
|
784
|
+
|
|
785
|
+
sage: StandardSuperTableaux([3,2,1]).cardinality()
|
|
786
|
+
16
|
|
787
|
+
sage: StandardSuperTableaux([2,2]).cardinality()
|
|
788
|
+
2
|
|
789
|
+
sage: StandardSuperTableaux([5]).cardinality()
|
|
790
|
+
1
|
|
791
|
+
sage: StandardSuperTableaux([6,5,5,3]).cardinality()
|
|
792
|
+
6651216
|
|
793
|
+
sage: StandardSuperTableaux([]).cardinality()
|
|
794
|
+
1
|
|
795
|
+
"""
|
|
796
|
+
pi = self.shape
|
|
797
|
+
return StandardTableaux(pi).cardinality()
|
|
798
|
+
|
|
799
|
+
def __iter__(self):
|
|
800
|
+
r"""
|
|
801
|
+
An iterator for the standard super tableaux associated to the
|
|
802
|
+
shape `p` of ``self``.
|
|
803
|
+
|
|
804
|
+
EXAMPLES::
|
|
805
|
+
|
|
806
|
+
sage: [t for t in StandardSuperTableaux([2,2])]
|
|
807
|
+
[[[1', 2'], [1, 2]], [[1', 1], [2', 2]]]
|
|
808
|
+
sage: [t for t in StandardSuperTableaux([3,2])]
|
|
809
|
+
[[[1', 2', 3'], [1, 2]],
|
|
810
|
+
[[1', 1, 3'], [2', 2]],
|
|
811
|
+
[[1', 2', 2], [1, 3']],
|
|
812
|
+
[[1', 1, 2], [2', 3']],
|
|
813
|
+
[[1', 1, 2'], [2, 3']]]
|
|
814
|
+
sage: st = StandardSuperTableaux([2,1])
|
|
815
|
+
sage: st[0].parent() is st
|
|
816
|
+
True
|
|
817
|
+
"""
|
|
818
|
+
pi = self.shape
|
|
819
|
+
for tableau in StandardTableaux(pi):
|
|
820
|
+
yield self.element_class(self, [[PrimedEntry(ZZ(val) / 2) for val in row]
|
|
821
|
+
for row in tableau])
|