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,525 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs lrcalc_python
|
|
3
|
+
r"""
|
|
4
|
+
An interface to Anders Buch's Littlewood-Richardson Calculator ``lrcalc``
|
|
5
|
+
|
|
6
|
+
The "Littlewood-Richardson Calculator" is a C library for fast
|
|
7
|
+
computation of Littlewood-Richardson (LR) coefficients and products of
|
|
8
|
+
Schubert polynomials. It handles single LR coefficients, products of
|
|
9
|
+
and coproducts of Schur functions, skew Schur functions, and
|
|
10
|
+
fusion products. All of the above are achieved by counting LR
|
|
11
|
+
(skew)-tableaux (also called Yamanouchi (skew)-tableaux) of
|
|
12
|
+
appropriate shape and content by iterating through them.
|
|
13
|
+
Additionally, ``lrcalc`` handles products of Schubert polynomials.
|
|
14
|
+
|
|
15
|
+
The web page of ``lrcalc`` is
|
|
16
|
+
`<http://sites.math.rutgers.edu/~asbuch/lrcalc/>`_.
|
|
17
|
+
|
|
18
|
+
The following describes the Sage interface to this library.
|
|
19
|
+
|
|
20
|
+
EXAMPLES::
|
|
21
|
+
|
|
22
|
+
sage: import sage.libs.lrcalc.lrcalc as lrcalc
|
|
23
|
+
|
|
24
|
+
Compute a single Littlewood-Richardson coefficient::
|
|
25
|
+
|
|
26
|
+
sage: lrcalc.lrcoef([3,2,1],[2,1],[2,1])
|
|
27
|
+
2
|
|
28
|
+
|
|
29
|
+
Compute a product of Schur functions; return the coefficients in the
|
|
30
|
+
Schur expansion::
|
|
31
|
+
|
|
32
|
+
sage: lrcalc.mult([2,1], [2,1])
|
|
33
|
+
{[2, 2, 1, 1]: 1,
|
|
34
|
+
[2, 2, 2]: 1,
|
|
35
|
+
[3, 1, 1, 1]: 1,
|
|
36
|
+
[3, 2, 1]: 2,
|
|
37
|
+
[3, 3]: 1,
|
|
38
|
+
[4, 1, 1]: 1,
|
|
39
|
+
[4, 2]: 1}
|
|
40
|
+
|
|
41
|
+
Same product, but include only partitions with at most 3 rows. This
|
|
42
|
+
corresponds to computing in the representation ring of `\mathfrak{gl}(3)`::
|
|
43
|
+
|
|
44
|
+
sage: lrcalc.mult([2,1], [2,1], 3)
|
|
45
|
+
{[2, 2, 2]: 1, [3, 2, 1]: 2, [3, 3]: 1, [4, 1, 1]: 1, [4, 2]: 1}
|
|
46
|
+
|
|
47
|
+
We can also compute the fusion product, here for `\mathfrak{sl}(3)`
|
|
48
|
+
and level 2::
|
|
49
|
+
|
|
50
|
+
sage: lrcalc.mult([3,2,1], [3,2,1], 3,2)
|
|
51
|
+
{[4, 4, 4]: 1, [5, 4, 3]: 1}
|
|
52
|
+
|
|
53
|
+
Compute the expansion of a skew Schur function::
|
|
54
|
+
|
|
55
|
+
sage: lrcalc.skew([3,2,1],[2,1])
|
|
56
|
+
{[1, 1, 1]: 1, [2, 1]: 2, [3]: 1}
|
|
57
|
+
|
|
58
|
+
Compute the coproduct of a Schur function::
|
|
59
|
+
|
|
60
|
+
sage: lrcalc.coprod([3,2,1])
|
|
61
|
+
{([1, 1, 1], [2, 1]): 1,
|
|
62
|
+
([2, 1], [2, 1]): 2,
|
|
63
|
+
([2, 1], [3]): 1,
|
|
64
|
+
([2, 1, 1], [1, 1]): 1,
|
|
65
|
+
([2, 1, 1], [2]): 1,
|
|
66
|
+
([2, 2], [1, 1]): 1,
|
|
67
|
+
([2, 2], [2]): 1,
|
|
68
|
+
([2, 2, 1], [1]): 1,
|
|
69
|
+
([3, 1], [1, 1]): 1,
|
|
70
|
+
([3, 1], [2]): 1,
|
|
71
|
+
([3, 1, 1], [1]): 1,
|
|
72
|
+
([3, 2], [1]): 1,
|
|
73
|
+
([3, 2, 1], []): 1}
|
|
74
|
+
|
|
75
|
+
Multiply two Schubert polynomials::
|
|
76
|
+
|
|
77
|
+
sage: lrcalc.mult_schubert([4,2,1,3], [1,4,2,5,3])
|
|
78
|
+
{[4, 5, 1, 3, 2]: 1,
|
|
79
|
+
[5, 3, 1, 4, 2]: 1,
|
|
80
|
+
[5, 4, 1, 2, 3]: 1,
|
|
81
|
+
[6, 2, 1, 4, 3, 5]: 1}
|
|
82
|
+
|
|
83
|
+
Same product, but include only permutations of 5 elements in the result.
|
|
84
|
+
This corresponds to computing in the cohomology ring of `Fl(5)`::
|
|
85
|
+
|
|
86
|
+
sage: lrcalc.mult_schubert([4,2,1,3], [1,4,2,5,3], 5)
|
|
87
|
+
{[4, 5, 1, 3, 2]: 1, [5, 3, 1, 4, 2]: 1, [5, 4, 1, 2, 3]: 1}
|
|
88
|
+
|
|
89
|
+
List all Littlewood-Richardson tableaux of skew shape `\mu/\nu`; in
|
|
90
|
+
this example `\mu=[3,2,1]` and `\nu=[2,1]`. Specifying a third entry
|
|
91
|
+
`M' = ``maxrows`` restricts the alphabet to `\{1,2,\ldots,M\}`::
|
|
92
|
+
|
|
93
|
+
sage: list(lrcalc.lrskew([3,2,1],[2,1]))
|
|
94
|
+
[[[None, None, 1], [None, 1], [1]], [[None, None, 1], [None, 1], [2]],
|
|
95
|
+
[[None, None, 1], [None, 2], [1]], [[None, None, 1], [None, 2], [3]]]
|
|
96
|
+
|
|
97
|
+
sage: list(lrcalc.lrskew([3,2,1],[2,1],maxrows=2))
|
|
98
|
+
[[[None, None, 1], [None, 1], [1]], [[None, None, 1], [None, 1], [2]],
|
|
99
|
+
[[None, None, 1], [None, 2], [1]]]
|
|
100
|
+
|
|
101
|
+
.. TODO::
|
|
102
|
+
|
|
103
|
+
Use this library in the :class:`SymmetricFunctions` code, to
|
|
104
|
+
make it easy to apply it to linear combinations of Schur functions.
|
|
105
|
+
|
|
106
|
+
.. SEEALSO::
|
|
107
|
+
|
|
108
|
+
- :func:`lrcoef`
|
|
109
|
+
- :func:`mult`
|
|
110
|
+
- :func:`coprod`
|
|
111
|
+
- :func:`skew`
|
|
112
|
+
- :func:`lrskew`
|
|
113
|
+
- :func:`mult_schubert`
|
|
114
|
+
|
|
115
|
+
.. RUBRIC:: Underlying algorithmic in lrcalc
|
|
116
|
+
|
|
117
|
+
Here is some additional information regarding the main low-level
|
|
118
|
+
C-functions in `lrcalc`. Given two partitions ``outer`` and ``inner``
|
|
119
|
+
with ``inner`` contained in ``outer``, the function::
|
|
120
|
+
|
|
121
|
+
skewtab *st_new(vector *outer, vector *inner, vector *conts, int maxrows)
|
|
122
|
+
|
|
123
|
+
constructs and returns the (lexicographically) first LR skew tableau
|
|
124
|
+
of shape ``outer / inner``. Further restrictions can be imposed using
|
|
125
|
+
``conts`` and ``maxrows``.
|
|
126
|
+
|
|
127
|
+
Namely, the integer ``maxrows`` is a bound on the integers that can be
|
|
128
|
+
put in the tableau. The name is chosen because this will limit the
|
|
129
|
+
partitions in the output of :func:`skew` or :func:`mult` to partitions
|
|
130
|
+
with at most this number of rows.
|
|
131
|
+
|
|
132
|
+
The vector ``conts`` is the content of an empty tableau(!!). More
|
|
133
|
+
precisely, this vector is added to the usual content of a tableau
|
|
134
|
+
whenever the content is needed. This affects which tableaux are
|
|
135
|
+
considered LR tableaux (see :func:`mult` below). ``conts`` may also
|
|
136
|
+
be the ``NULL`` pointer, in which case nothing is added.
|
|
137
|
+
|
|
138
|
+
The other function::
|
|
139
|
+
|
|
140
|
+
int *st_next(skewtab *st)
|
|
141
|
+
|
|
142
|
+
computes in place the (lexicographically) next skew tableau with the
|
|
143
|
+
same constraints, or returns 0 if ``st`` is the last one.
|
|
144
|
+
|
|
145
|
+
For a first example, see the :func:`skew` function code in the
|
|
146
|
+
``lrcalc`` source code. We want to compute a skew Schur function, so
|
|
147
|
+
create a skew LR tableau of the appropriate shape with ``st_new``
|
|
148
|
+
(with ``conts = NULL``), then iterate through all the LR tableaux with
|
|
149
|
+
``st_next()``. For each skew tableau, we use that ``st->conts`` is the
|
|
150
|
+
content of the skew tableau, find this shape in the ``res`` hash table
|
|
151
|
+
and add one to the value.
|
|
152
|
+
|
|
153
|
+
For a second example, see ``mult(vector *sh1, vector *sh2, maxrows)``.
|
|
154
|
+
Here we call ``st_new()`` with the shape ``sh1 / (0)`` and use ``sh2``
|
|
155
|
+
as the ``conts`` argument. The effect of using ``sh2`` in this way is
|
|
156
|
+
that ``st_next`` will iterate through semistandard tableaux `T` of
|
|
157
|
+
shape ``sh1`` such that the following tableau::
|
|
158
|
+
|
|
159
|
+
111111
|
|
160
|
+
22222 <--- minimal tableau of shape sh2
|
|
161
|
+
333
|
|
162
|
+
*****
|
|
163
|
+
**T**
|
|
164
|
+
****
|
|
165
|
+
**
|
|
166
|
+
|
|
167
|
+
is a LR skew tableau, and ``st->conts`` contains the content of the
|
|
168
|
+
combined tableaux.
|
|
169
|
+
|
|
170
|
+
More generally, ``st_new(outer, inner, conts, maxrows)`` and
|
|
171
|
+
``st_next`` can be used to compute the Schur expansion of the product
|
|
172
|
+
``S_{outer/inner} * S_conts``, restricted to partitions with at most
|
|
173
|
+
``maxrows`` rows.
|
|
174
|
+
|
|
175
|
+
AUTHORS:
|
|
176
|
+
|
|
177
|
+
- Mike Hansen (2010): core of the interface
|
|
178
|
+
|
|
179
|
+
- Anne Schilling, Nicolas M. Thiéry, and Anders Buch (2011): fusion
|
|
180
|
+
product, iterating through LR tableaux, finalization, documentation
|
|
181
|
+
"""
|
|
182
|
+
# ****************************************************************************
|
|
183
|
+
# Copyright (C) 2010 Mike Hansen <mhansen@gmail.com>
|
|
184
|
+
#
|
|
185
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
186
|
+
# https://www.gnu.org/licenses/
|
|
187
|
+
# ****************************************************************************
|
|
188
|
+
|
|
189
|
+
from sage.combinat.partition import _Partitions
|
|
190
|
+
from sage.combinat.permutation import Permutation
|
|
191
|
+
from sage.combinat.skew_tableau import SemistandardSkewTableaux
|
|
192
|
+
from sage.combinat.skew_partition import SkewPartition
|
|
193
|
+
from sage.rings.integer import Integer
|
|
194
|
+
import lrcalc
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
def _lrcalc_dict_to_sage(result) -> dict:
|
|
198
|
+
r"""
|
|
199
|
+
Translate from lrcalc output format to Sage expected format.
|
|
200
|
+
|
|
201
|
+
TESTS::
|
|
202
|
+
|
|
203
|
+
sage: from sage.libs.lrcalc.lrcalc import mult
|
|
204
|
+
sage: mult([2,1],[3,2,1],3) # indirect doctest
|
|
205
|
+
{[3, 3, 3]: 1, [4, 3, 2]: 2, [4, 4, 1]: 1, [5, 2, 2]: 1, [5, 3, 1]: 1}
|
|
206
|
+
"""
|
|
207
|
+
return {_Partitions.element_class(_Partitions, [Integer(p) for p in la]):
|
|
208
|
+
Integer(k) for la, k in result.items()}
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
def lrcoef_unsafe(outer, inner1, inner2):
|
|
212
|
+
r"""
|
|
213
|
+
Compute a single Littlewood-Richardson coefficient.
|
|
214
|
+
|
|
215
|
+
Return the coefficient of ``outer`` in the product of the Schur
|
|
216
|
+
functions indexed by ``inner1`` and ``inner2``.
|
|
217
|
+
|
|
218
|
+
INPUT:
|
|
219
|
+
|
|
220
|
+
- ``outer`` -- a partition (weakly decreasing list of nonnegative integers)
|
|
221
|
+
- ``inner1`` -- a partition
|
|
222
|
+
- ``inner2`` -- a partition
|
|
223
|
+
|
|
224
|
+
.. WARNING::
|
|
225
|
+
|
|
226
|
+
This function does not do any check on its input. If you want
|
|
227
|
+
to use a safer version, use :func:`lrcoef`.
|
|
228
|
+
|
|
229
|
+
EXAMPLES::
|
|
230
|
+
|
|
231
|
+
sage: from sage.libs.lrcalc.lrcalc import lrcoef_unsafe
|
|
232
|
+
sage: lrcoef_unsafe([3,2,1], [2,1], [2,1])
|
|
233
|
+
2
|
|
234
|
+
sage: lrcoef_unsafe([3,3], [2,1], [2,1])
|
|
235
|
+
1
|
|
236
|
+
sage: lrcoef_unsafe([2,1,1,1,1], [2,1], [2,1])
|
|
237
|
+
0
|
|
238
|
+
"""
|
|
239
|
+
return Integer(lrcalc.lrcoef(outer, inner1, inner2))
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
def lrcoef(outer, inner1, inner2):
|
|
243
|
+
"""
|
|
244
|
+
Compute a single Littlewood-Richardson coefficient.
|
|
245
|
+
|
|
246
|
+
Return the coefficient of ``outer`` in the product of the Schur
|
|
247
|
+
functions indexed by ``inner1`` and ``inner2``.
|
|
248
|
+
|
|
249
|
+
INPUT:
|
|
250
|
+
|
|
251
|
+
- ``outer`` -- a partition (weakly decreasing list of nonnegative integers)
|
|
252
|
+
- ``inner1`` -- a partition
|
|
253
|
+
- ``inner2`` -- a partition
|
|
254
|
+
|
|
255
|
+
.. NOTE::
|
|
256
|
+
|
|
257
|
+
This function converts its inputs into :func:`Partition`'s. If
|
|
258
|
+
you don't need these checks and your inputs are valid, then you
|
|
259
|
+
can use :func:`lrcoef_unsafe`.
|
|
260
|
+
|
|
261
|
+
EXAMPLES::
|
|
262
|
+
|
|
263
|
+
sage: from sage.libs.lrcalc.lrcalc import lrcoef
|
|
264
|
+
sage: lrcoef([3,2,1], [2,1], [2,1])
|
|
265
|
+
2
|
|
266
|
+
sage: lrcoef([3,3], [2,1], [2,1])
|
|
267
|
+
1
|
|
268
|
+
sage: lrcoef([2,1,1,1,1], [2,1], [2,1])
|
|
269
|
+
0
|
|
270
|
+
"""
|
|
271
|
+
return lrcoef_unsafe(_Partitions(outer), _Partitions(inner1), _Partitions(inner2))
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
def mult(part1, part2, maxrows=None, level=None, quantum=None) -> dict:
|
|
275
|
+
r"""
|
|
276
|
+
Compute a product of two Schur functions.
|
|
277
|
+
|
|
278
|
+
Return the product of the Schur functions indexed by the
|
|
279
|
+
partitions ``part1`` and ``part2``.
|
|
280
|
+
|
|
281
|
+
INPUT:
|
|
282
|
+
|
|
283
|
+
- ``part1`` -- a partition
|
|
284
|
+
- ``part2`` -- a partition
|
|
285
|
+
- ``maxrows`` -- integer (optional)
|
|
286
|
+
- ``level`` -- integer (optional)
|
|
287
|
+
- ``quantum`` -- an element of a ring (optional)
|
|
288
|
+
|
|
289
|
+
If ``maxrows`` is specified, then only partitions with at most
|
|
290
|
+
this number of rows are included in the result.
|
|
291
|
+
|
|
292
|
+
If both ``maxrows`` and ``level`` are specified, then the function
|
|
293
|
+
calculates the fusion product for `\mathfrak{sl}(\mathrm{maxrows})`
|
|
294
|
+
of the given level.
|
|
295
|
+
|
|
296
|
+
If ``quantum`` is set, then this returns the product in the quantum
|
|
297
|
+
cohomology ring of the Grassmannian. In particular, both ``maxrows``
|
|
298
|
+
and ``level`` need to be specified.
|
|
299
|
+
|
|
300
|
+
EXAMPLES::
|
|
301
|
+
|
|
302
|
+
sage: from sage.libs.lrcalc.lrcalc import mult
|
|
303
|
+
sage: mult([2],[])
|
|
304
|
+
{[2]: 1}
|
|
305
|
+
sage: sorted(mult([2],[2]).items())
|
|
306
|
+
[([2, 2], 1), ([3, 1], 1), ([4], 1)]
|
|
307
|
+
sage: sorted(mult([2,1],[2,1]).items())
|
|
308
|
+
[([2, 2, 1, 1], 1), ([2, 2, 2], 1), ([3, 1, 1, 1], 1),
|
|
309
|
+
([3, 2, 1], 2), ([3, 3], 1), ([4, 1, 1], 1), ([4, 2], 1)]
|
|
310
|
+
sage: sorted(mult([2,1],[2,1],maxrows=2).items())
|
|
311
|
+
[([3, 3], 1), ([4, 2], 1)]
|
|
312
|
+
sage: mult([2,1],[3,2,1],3)
|
|
313
|
+
{[3, 3, 3]: 1, [4, 3, 2]: 2, [4, 4, 1]: 1, [5, 2, 2]: 1, [5, 3, 1]: 1}
|
|
314
|
+
sage: mult([2,1],[2,1],3,3)
|
|
315
|
+
{[2, 2, 2]: 1, [3, 2, 1]: 2, [3, 3]: 1, [4, 1, 1]: 1}
|
|
316
|
+
sage: mult([2,1],[2,1],None,3)
|
|
317
|
+
Traceback (most recent call last):
|
|
318
|
+
...
|
|
319
|
+
ValueError: maxrows needs to be specified if you specify the level
|
|
320
|
+
|
|
321
|
+
The quantum product::
|
|
322
|
+
|
|
323
|
+
sage: q = polygen(QQ, 'q')
|
|
324
|
+
sage: sorted(mult([1],[2,1], 2, 2, quantum=q).items())
|
|
325
|
+
[([], q), ([2, 2], 1)]
|
|
326
|
+
sage: sorted(mult([2,1],[2,1], 2, 2, quantum=q).items())
|
|
327
|
+
[([1, 1], q), ([2], q)]
|
|
328
|
+
|
|
329
|
+
sage: mult([2,1],[2,1], quantum=q)
|
|
330
|
+
Traceback (most recent call last):
|
|
331
|
+
...
|
|
332
|
+
ValueError: missing parameters maxrows or level
|
|
333
|
+
"""
|
|
334
|
+
if maxrows is None and level is not None:
|
|
335
|
+
raise ValueError('maxrows needs to be specified if you specify'
|
|
336
|
+
' the level')
|
|
337
|
+
if quantum is not None and (level is None or maxrows is None):
|
|
338
|
+
raise ValueError('missing parameters maxrows or level')
|
|
339
|
+
|
|
340
|
+
if quantum is None:
|
|
341
|
+
if level is not None:
|
|
342
|
+
return _lrcalc_dict_to_sage(lrcalc.mult_fusion(part1, part2, maxrows, level))
|
|
343
|
+
if maxrows is None:
|
|
344
|
+
maxrows = -1
|
|
345
|
+
return _lrcalc_dict_to_sage(lrcalc.mult(part1, part2, maxrows))
|
|
346
|
+
|
|
347
|
+
# Otherwise do quantum multiplication
|
|
348
|
+
result = lrcalc.mult_quantum(part1, part2, maxrows, level, degrees=True)
|
|
349
|
+
P = quantum.parent()
|
|
350
|
+
output = {}
|
|
351
|
+
for i, k in result.items():
|
|
352
|
+
la = _Partitions(i[0])
|
|
353
|
+
output[la] = output.get(la, P.zero()) + k * quantum**(i[1])
|
|
354
|
+
return output
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
def skew(outer, inner, maxrows=-1) -> dict:
|
|
358
|
+
"""
|
|
359
|
+
Compute the Schur expansion of a skew Schur function.
|
|
360
|
+
|
|
361
|
+
Return a linear combination of partitions representing the Schur
|
|
362
|
+
function of the skew Young diagram ``outer / inner``, consisting
|
|
363
|
+
of boxes in the partition ``outer`` that are not in ``inner``.
|
|
364
|
+
|
|
365
|
+
INPUT:
|
|
366
|
+
|
|
367
|
+
- ``outer`` -- a partition
|
|
368
|
+
- ``inner`` -- a partition
|
|
369
|
+
- ``maxrows`` -- integer or ``None``
|
|
370
|
+
|
|
371
|
+
If ``maxrows`` is specified, then only partitions with at most
|
|
372
|
+
this number of rows are included in the result.
|
|
373
|
+
|
|
374
|
+
EXAMPLES::
|
|
375
|
+
|
|
376
|
+
sage: from sage.libs.lrcalc.lrcalc import skew
|
|
377
|
+
sage: sorted(skew([2,1],[1]).items())
|
|
378
|
+
[([1, 1], 1), ([2], 1)]
|
|
379
|
+
"""
|
|
380
|
+
return _lrcalc_dict_to_sage(lrcalc.skew(outer, inner, maxrows))
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
def coprod(part, all=0) -> dict:
|
|
384
|
+
"""
|
|
385
|
+
Compute the coproduct of a Schur function.
|
|
386
|
+
|
|
387
|
+
Return a linear combination of pairs of partitions representing
|
|
388
|
+
the coproduct of the Schur function given by the partition
|
|
389
|
+
``part``.
|
|
390
|
+
|
|
391
|
+
INPUT:
|
|
392
|
+
|
|
393
|
+
- ``part`` -- a partition
|
|
394
|
+
- ``all`` -- integer
|
|
395
|
+
|
|
396
|
+
If ``all`` is nonzero then all terms are included in the result.
|
|
397
|
+
If ``all`` is zero, then only pairs of partitions ``(part1,
|
|
398
|
+
part2)`` for which the weight of ``part1`` is greater than or
|
|
399
|
+
equal to the weight of ``part2`` are included; the rest of the
|
|
400
|
+
coefficients are redundant because Littlewood-Richardson
|
|
401
|
+
coefficients are symmetric.
|
|
402
|
+
|
|
403
|
+
EXAMPLES::
|
|
404
|
+
|
|
405
|
+
sage: from sage.libs.lrcalc.lrcalc import coprod
|
|
406
|
+
sage: sorted(coprod([2,1]).items())
|
|
407
|
+
[(([1, 1], [1]), 1), (([2], [1]), 1), (([2, 1], []), 1)]
|
|
408
|
+
"""
|
|
409
|
+
result = lrcalc.coprod(part, all)
|
|
410
|
+
return {tuple([_Partitions.element_class(_Partitions,
|
|
411
|
+
[Integer(p) for p in mu])
|
|
412
|
+
for mu in la]): Integer(k)
|
|
413
|
+
for la, k in result.items()}
|
|
414
|
+
|
|
415
|
+
|
|
416
|
+
def mult_schubert(w1, w2, rank=0) -> dict:
|
|
417
|
+
r"""
|
|
418
|
+
Compute a product of two Schubert polynomials.
|
|
419
|
+
|
|
420
|
+
Return a linear combination of permutations representing the
|
|
421
|
+
product of the Schubert polynomials indexed by the permutations
|
|
422
|
+
``w1`` and ``w2``.
|
|
423
|
+
|
|
424
|
+
INPUT:
|
|
425
|
+
|
|
426
|
+
- ``w1`` -- a permutation
|
|
427
|
+
- ``w2`` -- a permutation
|
|
428
|
+
- ``rank`` -- integer
|
|
429
|
+
|
|
430
|
+
If ``rank`` is nonzero, then only permutations from the symmetric
|
|
431
|
+
group `S(\mathrm{rank})` are included in the result.
|
|
432
|
+
|
|
433
|
+
EXAMPLES::
|
|
434
|
+
|
|
435
|
+
sage: from sage.libs.lrcalc.lrcalc import mult_schubert
|
|
436
|
+
sage: result = mult_schubert([3, 1, 5, 2, 4], [3, 5, 2, 1, 4])
|
|
437
|
+
sage: sorted(result.items())
|
|
438
|
+
[([5, 4, 6, 1, 2, 3], 1), ([5, 6, 3, 1, 2, 4], 1),
|
|
439
|
+
([5, 7, 2, 1, 3, 4, 6], 1), ([6, 3, 5, 1, 2, 4], 1),
|
|
440
|
+
([6, 4, 3, 1, 2, 5], 1), ([6, 5, 2, 1, 3, 4], 1),
|
|
441
|
+
([7, 3, 4, 1, 2, 5, 6], 1), ([7, 4, 2, 1, 3, 5, 6], 1)]
|
|
442
|
+
"""
|
|
443
|
+
result = lrcalc.schubmult(w1, w2, rank)
|
|
444
|
+
return {Permutation(list(la)): Integer(k) for la, k in result.items()}
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
def lrskew(outer, inner, weight=None, maxrows=-1):
|
|
448
|
+
r"""
|
|
449
|
+
Iterate over the skew LR tableaux of shape ``outer / inner``.
|
|
450
|
+
|
|
451
|
+
INPUT:
|
|
452
|
+
|
|
453
|
+
- ``outer`` -- a partition
|
|
454
|
+
- ``inner`` -- a partition
|
|
455
|
+
- ``weight`` -- a partition (optional)
|
|
456
|
+
- ``maxrows`` -- positive integer (optional)
|
|
457
|
+
|
|
458
|
+
OUTPUT: an iterator of :class:`SkewTableau`
|
|
459
|
+
|
|
460
|
+
Specifying ``maxrows`` = `M` restricts the alphabet to `\{1,2,\ldots,M\}`.
|
|
461
|
+
|
|
462
|
+
Specifying ``weight`` returns only those tableaux of given content/weight.
|
|
463
|
+
|
|
464
|
+
EXAMPLES::
|
|
465
|
+
|
|
466
|
+
sage: from sage.libs.lrcalc.lrcalc import lrskew
|
|
467
|
+
sage: for st in lrskew([3,2,1],[2]):
|
|
468
|
+
....: st.pp()
|
|
469
|
+
. . 1
|
|
470
|
+
1 1
|
|
471
|
+
2
|
|
472
|
+
. . 1
|
|
473
|
+
1 2
|
|
474
|
+
2
|
|
475
|
+
. . 1
|
|
476
|
+
1 2
|
|
477
|
+
3
|
|
478
|
+
|
|
479
|
+
sage: for st in lrskew([3,2,1],[2], maxrows=2):
|
|
480
|
+
....: st.pp()
|
|
481
|
+
. . 1
|
|
482
|
+
1 1
|
|
483
|
+
2
|
|
484
|
+
. . 1
|
|
485
|
+
1 2
|
|
486
|
+
2
|
|
487
|
+
|
|
488
|
+
sage: list(lrskew([3,2,1],[2], weight=[3,1]))
|
|
489
|
+
[[[None, None, 1], [1, 1], [2]]]
|
|
490
|
+
|
|
491
|
+
TESTS::
|
|
492
|
+
|
|
493
|
+
sage: from sage.libs.lrcalc.lrcalc import lrskew
|
|
494
|
+
sage: list(lrskew([3,2,1],[2], weight=[]))
|
|
495
|
+
[]
|
|
496
|
+
sage: list(lrskew([3,2,1],[2], weight=[0]))
|
|
497
|
+
[]
|
|
498
|
+
sage: list(lrskew([3,2,1],[3,2,1], weight=[]))
|
|
499
|
+
[[[None, None, None], [None, None], [None]]]
|
|
500
|
+
sage: list(lrskew([3,2,1],[3,2,1], weight=[0]))
|
|
501
|
+
[[[None, None, None], [None, None], [None]]]
|
|
502
|
+
sage: list(lrskew([3,2,1],[3,2,1], weight=[1]))
|
|
503
|
+
[]
|
|
504
|
+
"""
|
|
505
|
+
iterator = lrcalc.lr_iterator(outer, inner, maxrows)
|
|
506
|
+
shape = SkewPartition([outer, inner])
|
|
507
|
+
|
|
508
|
+
if weight is None:
|
|
509
|
+
ST = SemistandardSkewTableaux(shape)
|
|
510
|
+
for data in iterator:
|
|
511
|
+
yield ST.from_shape_and_word(shape, [i + 1 for i in data])
|
|
512
|
+
else:
|
|
513
|
+
wt = _Partitions(weight)
|
|
514
|
+
ST = SemistandardSkewTableaux(shape, wt)
|
|
515
|
+
m = len(wt)
|
|
516
|
+
for data in iterator:
|
|
517
|
+
w = [0] * m
|
|
518
|
+
for j in data:
|
|
519
|
+
if j >= m:
|
|
520
|
+
# We know they are not equal, so make the check below quick
|
|
521
|
+
w = None
|
|
522
|
+
break
|
|
523
|
+
w[j] += 1
|
|
524
|
+
if w == wt:
|
|
525
|
+
yield ST.from_shape_and_word(shape, [i + 1 for i in data])
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# from symmetrica import *
|
|
3
|
+
|
|
4
|
+
from sage.libs.symmetrica.symmetrica import start
|
|
5
|
+
|
|
6
|
+
# kostka
|
|
7
|
+
from sage.libs.symmetrica.symmetrica import kostka_number_symmetrica as kostka_number
|
|
8
|
+
from sage.libs.symmetrica.symmetrica import kostka_tab_symmetrica as kostka_tab
|
|
9
|
+
from sage.libs.symmetrica.symmetrica import kostka_tafel_symmetrica as kostka_tafel
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
# sab
|
|
13
|
+
from sage.libs.symmetrica.symmetrica import dimension_symmetrization_symmetrica as dimension_symmetrization
|
|
14
|
+
from sage.libs.symmetrica.symmetrica import bdg_symmetrica as bdg
|
|
15
|
+
from sage.libs.symmetrica.symmetrica import sdg_symmetrica as sdg
|
|
16
|
+
from sage.libs.symmetrica.symmetrica import odg_symmetrica as odg
|
|
17
|
+
from sage.libs.symmetrica.symmetrica import specht_dg_symmetrica as specht_dg
|
|
18
|
+
from sage.libs.symmetrica.symmetrica import ndg_symmetrica as ndg
|
|
19
|
+
# from symmetrica import glmndg_symmetrica as glmndg
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
# sc
|
|
23
|
+
from sage.libs.symmetrica.symmetrica import chartafel_symmetrica as chartafel
|
|
24
|
+
from sage.libs.symmetrica.symmetrica import charvalue_symmetrica as charvalue
|
|
25
|
+
from sage.libs.symmetrica.symmetrica import kranztafel_symmetrica as kranztafel
|
|
26
|
+
# from symmetrica import c_ijk_sn_symmetrica as c_ijk_sn
|
|
27
|
+
|
|
28
|
+
# part
|
|
29
|
+
from sage.libs.symmetrica.symmetrica import strict_to_odd_part_symmetrica as strict_to_odd_part
|
|
30
|
+
from sage.libs.symmetrica.symmetrica import odd_to_strict_part_symmetrica as odd_to_strict
|
|
31
|
+
from sage.libs.symmetrica.symmetrica import q_core_symmetrica as q_core
|
|
32
|
+
from sage.libs.symmetrica.symmetrica import gupta_nm_symmetrica as gupta_nm
|
|
33
|
+
from sage.libs.symmetrica.symmetrica import gupta_tafel_symmetrica as gupta_tafel
|
|
34
|
+
from sage.libs.symmetrica.symmetrica import random_partition_symmetrica as random_partition
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
# schur
|
|
38
|
+
from sage.libs.symmetrica.symmetrica import outerproduct_schur_symmetrica as outerproduct_schur
|
|
39
|
+
from sage.libs.symmetrica.symmetrica import dimension_schur_symmetrica as dimension_schur
|
|
40
|
+
from sage.libs.symmetrica.symmetrica import part_part_skewschur_symmetrica as part_part_skewschur
|
|
41
|
+
from sage.libs.symmetrica.symmetrica import newtrans_symmetrica as newtrans
|
|
42
|
+
from sage.libs.symmetrica.symmetrica import compute_schur_with_alphabet_symmetrica as compute_schur_with_alphabet
|
|
43
|
+
from sage.libs.symmetrica.symmetrica import compute_homsym_with_alphabet_symmetrica as compute_homsym_with_alphabet
|
|
44
|
+
from sage.libs.symmetrica.symmetrica import compute_elmsym_with_alphabet_symmetrica as compute_elmsym_with_alphabet
|
|
45
|
+
from sage.libs.symmetrica.symmetrica import compute_monomial_with_alphabet_symmetrica as compute_monomial_with_alphabet
|
|
46
|
+
from sage.libs.symmetrica.symmetrica import compute_powsym_with_alphabet_symmetrica as compute_powsym_with_alphabet
|
|
47
|
+
from sage.libs.symmetrica.symmetrica import compute_schur_with_alphabet_det_symmetrica as compute_schur_with_alphabet_det
|
|
48
|
+
|
|
49
|
+
from sage.libs.symmetrica.symmetrica import t_SCHUR_MONOMIAL_symmetrica as t_SCHUR_MONOMIAL
|
|
50
|
+
from sage.libs.symmetrica.symmetrica import t_SCHUR_HOMSYM_symmetrica as t_SCHUR_HOMSYM
|
|
51
|
+
from sage.libs.symmetrica.symmetrica import t_SCHUR_POWSYM_symmetrica as t_SCHUR_POWSYM
|
|
52
|
+
from sage.libs.symmetrica.symmetrica import t_SCHUR_ELMSYM_symmetrica as t_SCHUR_ELMSYM
|
|
53
|
+
|
|
54
|
+
from sage.libs.symmetrica.symmetrica import t_MONOMIAL_SCHUR_symmetrica as t_MONOMIAL_SCHUR
|
|
55
|
+
from sage.libs.symmetrica.symmetrica import t_MONOMIAL_HOMSYM_symmetrica as t_MONOMIAL_HOMSYM
|
|
56
|
+
from sage.libs.symmetrica.symmetrica import t_MONOMIAL_POWSYM_symmetrica as t_MONOMIAL_POWSYM
|
|
57
|
+
from sage.libs.symmetrica.symmetrica import t_MONOMIAL_ELMSYM_symmetrica as t_MONOMIAL_ELMSYM
|
|
58
|
+
|
|
59
|
+
from sage.libs.symmetrica.symmetrica import t_ELMSYM_SCHUR_symmetrica as t_ELMSYM_SCHUR
|
|
60
|
+
from sage.libs.symmetrica.symmetrica import t_ELMSYM_MONOMIAL_symmetrica as t_ELMSYM_MONOMIAL
|
|
61
|
+
from sage.libs.symmetrica.symmetrica import t_ELMSYM_HOMSYM_symmetrica as t_ELMSYM_HOMSYM
|
|
62
|
+
from sage.libs.symmetrica.symmetrica import t_ELMSYM_POWSYM_symmetrica as t_ELMSYM_POWSYM
|
|
63
|
+
|
|
64
|
+
from sage.libs.symmetrica.symmetrica import t_HOMSYM_SCHUR_symmetrica as t_HOMSYM_SCHUR
|
|
65
|
+
from sage.libs.symmetrica.symmetrica import t_HOMSYM_MONOMIAL_symmetrica as t_HOMSYM_MONOMIAL
|
|
66
|
+
from sage.libs.symmetrica.symmetrica import t_HOMSYM_POWSYM_symmetrica as t_HOMSYM_POWSYM
|
|
67
|
+
from sage.libs.symmetrica.symmetrica import t_HOMSYM_ELMSYM_symmetrica as t_HOMSYM_ELMSYM
|
|
68
|
+
|
|
69
|
+
from sage.libs.symmetrica.symmetrica import t_POWSYM_SCHUR_symmetrica as t_POWSYM_SCHUR
|
|
70
|
+
from sage.libs.symmetrica.symmetrica import t_POWSYM_HOMSYM_symmetrica as t_POWSYM_HOMSYM
|
|
71
|
+
from sage.libs.symmetrica.symmetrica import t_POWSYM_ELMSYM_symmetrica as t_POWSYM_ELMSYM
|
|
72
|
+
from sage.libs.symmetrica.symmetrica import t_POWSYM_MONOMIAL_symmetrica as t_POWSYM_MONOMIAL
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
from sage.libs.symmetrica.symmetrica import mult_schur_schur_symmetrica as mult_schur_schur
|
|
76
|
+
from sage.libs.symmetrica.symmetrica import mult_monomial_monomial_symmetrica as mult_monomial_monomial
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
from sage.libs.symmetrica.symmetrica import hall_littlewood_symmetrica as hall_littlewood
|
|
80
|
+
|
|
81
|
+
from sage.libs.symmetrica.symmetrica import t_POLYNOM_POWER_symmetrica as t_POLYNOM_POWER
|
|
82
|
+
from sage.libs.symmetrica.symmetrica import t_POLYNOM_SCHUR_symmetrica as t_POLYNOM_SCHUR
|
|
83
|
+
from sage.libs.symmetrica.symmetrica import t_POLYNOM_ELMSYM_symmetrica as t_POLYNOM_ELMSYM
|
|
84
|
+
from sage.libs.symmetrica.symmetrica import t_POLYNOM_MONOMIAL_symmetrica as t_POLYNOM_MONOMIAL
|
|
85
|
+
|
|
86
|
+
from sage.libs.symmetrica.symmetrica import scalarproduct_schur_symmetrica as scalarproduct_schur
|
|
87
|
+
|
|
88
|
+
# plet
|
|
89
|
+
from sage.libs.symmetrica.symmetrica import plethysm_symmetrica as plethysm
|
|
90
|
+
from sage.libs.symmetrica.symmetrica import schur_schur_plet_symmetrica as schur_schur_plet
|
|
91
|
+
|
|
92
|
+
# sb
|
|
93
|
+
from sage.libs.symmetrica.symmetrica import mult_schubert_schubert_symmetrica as mult_schubert_schubert
|
|
94
|
+
from sage.libs.symmetrica.symmetrica import t_SCHUBERT_POLYNOM_symmetrica as t_SCHUBERT_POLYNOM
|
|
95
|
+
from sage.libs.symmetrica.symmetrica import t_POLYNOM_SCHUBERT_symmetrica as t_POLYNOM_SCHUBERT
|
|
96
|
+
from sage.libs.symmetrica.symmetrica import mult_schubert_variable_symmetrica as mult_schubert_variable
|
|
97
|
+
from sage.libs.symmetrica.symmetrica import divdiff_perm_schubert_symmetrica as divdiff_perm_schubert
|
|
98
|
+
from sage.libs.symmetrica.symmetrica import scalarproduct_schubert_symmetrica as scalarproduct_schubert
|
|
99
|
+
from sage.libs.symmetrica.symmetrica import divdiff_schubert_symmetrica as divdiff_schubert
|
|
100
|
+
|
|
101
|
+
start()
|