passagemath-combinat 10.6.42__cp314-cp314-musllinux_1_2_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- passagemath_combinat/__init__.py +3 -0
- passagemath_combinat-10.6.42.dist-info/METADATA +160 -0
- passagemath_combinat-10.6.42.dist-info/RECORD +400 -0
- passagemath_combinat-10.6.42.dist-info/WHEEL +5 -0
- passagemath_combinat-10.6.42.dist-info/top_level.txt +3 -0
- passagemath_combinat.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
- passagemath_combinat.libs/libsymmetrica-81fe8739.so.3.0.0 +0 -0
- sage/algebras/affine_nil_temperley_lieb.py +263 -0
- sage/algebras/all.py +24 -0
- sage/algebras/all__sagemath_combinat.py +35 -0
- sage/algebras/askey_wilson.py +935 -0
- sage/algebras/associated_graded.py +345 -0
- sage/algebras/cellular_basis.py +350 -0
- sage/algebras/cluster_algebra.py +2766 -0
- sage/algebras/down_up_algebra.py +860 -0
- sage/algebras/free_algebra.py +1698 -0
- sage/algebras/free_algebra_element.py +345 -0
- sage/algebras/free_algebra_quotient.py +405 -0
- sage/algebras/free_algebra_quotient_element.py +295 -0
- sage/algebras/free_zinbiel_algebra.py +885 -0
- sage/algebras/hall_algebra.py +783 -0
- sage/algebras/hecke_algebras/all.py +4 -0
- sage/algebras/hecke_algebras/ariki_koike_algebra.py +1796 -0
- sage/algebras/hecke_algebras/ariki_koike_specht_modules.py +475 -0
- sage/algebras/hecke_algebras/cubic_hecke_algebra.py +3520 -0
- sage/algebras/hecke_algebras/cubic_hecke_base_ring.py +1473 -0
- sage/algebras/hecke_algebras/cubic_hecke_matrix_rep.py +1079 -0
- sage/algebras/iwahori_hecke_algebra.py +3095 -0
- sage/algebras/jordan_algebra.py +1773 -0
- sage/algebras/lie_conformal_algebras/abelian_lie_conformal_algebra.py +113 -0
- sage/algebras/lie_conformal_algebras/affine_lie_conformal_algebra.py +156 -0
- sage/algebras/lie_conformal_algebras/all.py +18 -0
- sage/algebras/lie_conformal_algebras/bosonic_ghosts_lie_conformal_algebra.py +134 -0
- sage/algebras/lie_conformal_algebras/examples.py +43 -0
- sage/algebras/lie_conformal_algebras/fermionic_ghosts_lie_conformal_algebra.py +131 -0
- sage/algebras/lie_conformal_algebras/finitely_freely_generated_lca.py +139 -0
- sage/algebras/lie_conformal_algebras/free_bosons_lie_conformal_algebra.py +174 -0
- sage/algebras/lie_conformal_algebras/free_fermions_lie_conformal_algebra.py +167 -0
- sage/algebras/lie_conformal_algebras/freely_generated_lie_conformal_algebra.py +107 -0
- sage/algebras/lie_conformal_algebras/graded_lie_conformal_algebra.py +135 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra.py +353 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra_element.py +236 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_basis.py +78 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_structure_coefs.py +328 -0
- sage/algebras/lie_conformal_algebras/n2_lie_conformal_algebra.py +117 -0
- sage/algebras/lie_conformal_algebras/neveu_schwarz_lie_conformal_algebra.py +86 -0
- sage/algebras/lie_conformal_algebras/virasoro_lie_conformal_algebra.py +82 -0
- sage/algebras/lie_conformal_algebras/weyl_lie_conformal_algebra.py +205 -0
- sage/algebras/nil_coxeter_algebra.py +191 -0
- sage/algebras/q_commuting_polynomials.py +673 -0
- sage/algebras/q_system.py +608 -0
- sage/algebras/quantum_clifford.py +959 -0
- sage/algebras/quantum_groups/ace_quantum_onsager.py +693 -0
- sage/algebras/quantum_groups/all.py +9 -0
- sage/algebras/quantum_groups/fock_space.py +2219 -0
- sage/algebras/quantum_groups/q_numbers.py +207 -0
- sage/algebras/quantum_groups/quantum_group_gap.py +2695 -0
- sage/algebras/quantum_groups/representations.py +591 -0
- sage/algebras/quantum_matrix_coordinate_algebra.py +1006 -0
- sage/algebras/quantum_oscillator.py +623 -0
- sage/algebras/quaternion_algebra.py +20 -0
- sage/algebras/quaternion_algebra_element.py +55 -0
- sage/algebras/rational_cherednik_algebra.py +525 -0
- sage/algebras/schur_algebra.py +670 -0
- sage/algebras/shuffle_algebra.py +1011 -0
- sage/algebras/splitting_algebra.py +779 -0
- sage/algebras/tensor_algebra.py +709 -0
- sage/algebras/yangian.py +1082 -0
- sage/algebras/yokonuma_hecke_algebra.py +1018 -0
- sage/all__sagemath_combinat.py +35 -0
- sage/combinat/SJT.py +255 -0
- sage/combinat/affine_permutation.py +2405 -0
- sage/combinat/algebraic_combinatorics.py +55 -0
- sage/combinat/all.py +53 -0
- sage/combinat/all__sagemath_combinat.py +195 -0
- sage/combinat/alternating_sign_matrix.py +2063 -0
- sage/combinat/baxter_permutations.py +346 -0
- sage/combinat/bijectionist.py +3220 -0
- sage/combinat/binary_recurrence_sequences.py +1180 -0
- sage/combinat/blob_algebra.py +685 -0
- sage/combinat/catalog_partitions.py +27 -0
- sage/combinat/chas/all.py +23 -0
- sage/combinat/chas/fsym.py +1180 -0
- sage/combinat/chas/wqsym.py +2601 -0
- sage/combinat/cluster_complex.py +326 -0
- sage/combinat/colored_permutations.py +2039 -0
- sage/combinat/colored_permutations_representations.py +964 -0
- sage/combinat/composition_signed.py +142 -0
- sage/combinat/composition_tableau.py +855 -0
- sage/combinat/constellation.py +1729 -0
- sage/combinat/core.py +751 -0
- sage/combinat/counting.py +12 -0
- sage/combinat/crystals/affine.py +742 -0
- sage/combinat/crystals/affine_factorization.py +518 -0
- sage/combinat/crystals/affinization.py +331 -0
- sage/combinat/crystals/alcove_path.py +2013 -0
- sage/combinat/crystals/all.py +22 -0
- sage/combinat/crystals/bkk_crystals.py +141 -0
- sage/combinat/crystals/catalog.py +115 -0
- sage/combinat/crystals/catalog_elementary_crystals.py +18 -0
- sage/combinat/crystals/catalog_infinity_crystals.py +33 -0
- sage/combinat/crystals/catalog_kirillov_reshetikhin.py +18 -0
- sage/combinat/crystals/crystals.py +257 -0
- sage/combinat/crystals/direct_sum.py +260 -0
- sage/combinat/crystals/elementary_crystals.py +1251 -0
- sage/combinat/crystals/fast_crystals.py +441 -0
- sage/combinat/crystals/fully_commutative_stable_grothendieck.py +1205 -0
- sage/combinat/crystals/generalized_young_walls.py +1076 -0
- sage/combinat/crystals/highest_weight_crystals.py +436 -0
- sage/combinat/crystals/induced_structure.py +695 -0
- sage/combinat/crystals/infinity_crystals.py +730 -0
- sage/combinat/crystals/kac_modules.py +863 -0
- sage/combinat/crystals/kirillov_reshetikhin.py +4196 -0
- sage/combinat/crystals/kyoto_path_model.py +497 -0
- sage/combinat/crystals/letters.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/crystals/letters.pxd +79 -0
- sage/combinat/crystals/letters.pyx +3056 -0
- sage/combinat/crystals/littelmann_path.py +1518 -0
- sage/combinat/crystals/monomial_crystals.py +1262 -0
- sage/combinat/crystals/multisegments.py +462 -0
- sage/combinat/crystals/mv_polytopes.py +467 -0
- sage/combinat/crystals/pbw_crystal.py +511 -0
- sage/combinat/crystals/pbw_datum.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/crystals/pbw_datum.pxd +4 -0
- sage/combinat/crystals/pbw_datum.pyx +487 -0
- sage/combinat/crystals/polyhedral_realization.py +372 -0
- sage/combinat/crystals/spins.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/crystals/spins.pxd +21 -0
- sage/combinat/crystals/spins.pyx +756 -0
- sage/combinat/crystals/star_crystal.py +290 -0
- sage/combinat/crystals/subcrystal.py +464 -0
- sage/combinat/crystals/tensor_product.py +1177 -0
- sage/combinat/crystals/tensor_product_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/crystals/tensor_product_element.pxd +35 -0
- sage/combinat/crystals/tensor_product_element.pyx +1870 -0
- sage/combinat/crystals/virtual_crystal.py +420 -0
- sage/combinat/cyclic_sieving_phenomenon.py +204 -0
- sage/combinat/debruijn_sequence.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/debruijn_sequence.pyx +355 -0
- sage/combinat/decorated_permutation.py +270 -0
- sage/combinat/degree_sequences.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/degree_sequences.pyx +588 -0
- sage/combinat/derangements.py +527 -0
- sage/combinat/descent_algebra.py +1008 -0
- sage/combinat/diagram.py +1551 -0
- sage/combinat/diagram_algebras.py +5886 -0
- sage/combinat/dyck_word.py +4349 -0
- sage/combinat/e_one_star.py +1623 -0
- sage/combinat/enumerated_sets.py +123 -0
- sage/combinat/expnums.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/expnums.pyx +148 -0
- sage/combinat/fast_vector_partitions.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/fast_vector_partitions.pyx +346 -0
- sage/combinat/fqsym.py +1977 -0
- sage/combinat/free_dendriform_algebra.py +954 -0
- sage/combinat/free_prelie_algebra.py +1141 -0
- sage/combinat/fully_commutative_elements.py +1077 -0
- sage/combinat/fully_packed_loop.py +1523 -0
- sage/combinat/gelfand_tsetlin_patterns.py +1409 -0
- sage/combinat/gray_codes.py +311 -0
- sage/combinat/grossman_larson_algebras.py +667 -0
- sage/combinat/growth.py +4352 -0
- sage/combinat/hall_polynomial.py +188 -0
- sage/combinat/hillman_grassl.py +866 -0
- sage/combinat/integer_matrices.py +329 -0
- sage/combinat/integer_vectors_mod_permgroup.py +1238 -0
- sage/combinat/k_tableau.py +4564 -0
- sage/combinat/kazhdan_lusztig.py +215 -0
- sage/combinat/key_polynomial.py +885 -0
- sage/combinat/knutson_tao_puzzles.py +2286 -0
- sage/combinat/lr_tableau.py +311 -0
- sage/combinat/matrices/all.py +24 -0
- sage/combinat/matrices/hadamard_matrix.py +3790 -0
- sage/combinat/matrices/latin.py +2912 -0
- sage/combinat/misc.py +401 -0
- sage/combinat/multiset_partition_into_sets_ordered.py +3541 -0
- sage/combinat/ncsf_qsym/all.py +21 -0
- sage/combinat/ncsf_qsym/combinatorics.py +317 -0
- sage/combinat/ncsf_qsym/generic_basis_code.py +1427 -0
- sage/combinat/ncsf_qsym/ncsf.py +5637 -0
- sage/combinat/ncsf_qsym/qsym.py +4053 -0
- sage/combinat/ncsf_qsym/tutorial.py +447 -0
- sage/combinat/ncsym/all.py +21 -0
- sage/combinat/ncsym/bases.py +855 -0
- sage/combinat/ncsym/dual.py +593 -0
- sage/combinat/ncsym/ncsym.py +2076 -0
- sage/combinat/necklace.py +551 -0
- sage/combinat/non_decreasing_parking_function.py +634 -0
- sage/combinat/nu_dyck_word.py +1474 -0
- sage/combinat/output.py +861 -0
- sage/combinat/parallelogram_polyomino.py +4326 -0
- sage/combinat/parking_functions.py +1602 -0
- sage/combinat/partition_algebra.py +1998 -0
- sage/combinat/partition_kleshchev.py +1982 -0
- sage/combinat/partition_shifting_algebras.py +584 -0
- sage/combinat/partition_tuple.py +3114 -0
- sage/combinat/path_tableaux/all.py +13 -0
- sage/combinat/path_tableaux/catalog.py +29 -0
- sage/combinat/path_tableaux/dyck_path.py +380 -0
- sage/combinat/path_tableaux/frieze.py +476 -0
- sage/combinat/path_tableaux/path_tableau.py +728 -0
- sage/combinat/path_tableaux/semistandard.py +510 -0
- sage/combinat/perfect_matching.py +779 -0
- sage/combinat/plane_partition.py +3300 -0
- sage/combinat/q_bernoulli.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/q_bernoulli.pyx +128 -0
- sage/combinat/quickref.py +81 -0
- sage/combinat/recognizable_series.py +2051 -0
- sage/combinat/regular_sequence.py +4316 -0
- sage/combinat/regular_sequence_bounded.py +543 -0
- sage/combinat/restricted_growth.py +81 -0
- sage/combinat/ribbon.py +20 -0
- sage/combinat/ribbon_shaped_tableau.py +489 -0
- sage/combinat/ribbon_tableau.py +1180 -0
- sage/combinat/rigged_configurations/all.py +46 -0
- sage/combinat/rigged_configurations/bij_abstract_class.py +548 -0
- sage/combinat/rigged_configurations/bij_infinity.py +370 -0
- sage/combinat/rigged_configurations/bij_type_A.py +163 -0
- sage/combinat/rigged_configurations/bij_type_A2_dual.py +338 -0
- sage/combinat/rigged_configurations/bij_type_A2_even.py +218 -0
- sage/combinat/rigged_configurations/bij_type_A2_odd.py +199 -0
- sage/combinat/rigged_configurations/bij_type_B.py +900 -0
- sage/combinat/rigged_configurations/bij_type_C.py +267 -0
- sage/combinat/rigged_configurations/bij_type_D.py +771 -0
- sage/combinat/rigged_configurations/bij_type_D_tri.py +392 -0
- sage/combinat/rigged_configurations/bij_type_D_twisted.py +576 -0
- sage/combinat/rigged_configurations/bij_type_E67.py +402 -0
- sage/combinat/rigged_configurations/bijection.py +143 -0
- sage/combinat/rigged_configurations/kleber_tree.py +1475 -0
- sage/combinat/rigged_configurations/kr_tableaux.py +1898 -0
- sage/combinat/rigged_configurations/rc_crystal.py +461 -0
- sage/combinat/rigged_configurations/rc_infinity.py +540 -0
- sage/combinat/rigged_configurations/rigged_configuration_element.py +2403 -0
- sage/combinat/rigged_configurations/rigged_configurations.py +1918 -0
- sage/combinat/rigged_configurations/rigged_partition.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/rigged_configurations/rigged_partition.pxd +15 -0
- sage/combinat/rigged_configurations/rigged_partition.pyx +680 -0
- sage/combinat/rigged_configurations/tensor_product_kr_tableaux.py +499 -0
- sage/combinat/rigged_configurations/tensor_product_kr_tableaux_element.py +428 -0
- sage/combinat/rsk.py +3438 -0
- sage/combinat/schubert_polynomial.py +508 -0
- sage/combinat/set_partition.py +3318 -0
- sage/combinat/set_partition_iterator.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/set_partition_iterator.pyx +136 -0
- sage/combinat/set_partition_ordered.py +1590 -0
- sage/combinat/sf/abreu_nigro.py +346 -0
- sage/combinat/sf/all.py +52 -0
- sage/combinat/sf/character.py +576 -0
- sage/combinat/sf/classical.py +319 -0
- sage/combinat/sf/dual.py +996 -0
- sage/combinat/sf/elementary.py +549 -0
- sage/combinat/sf/hall_littlewood.py +1028 -0
- sage/combinat/sf/hecke.py +336 -0
- sage/combinat/sf/homogeneous.py +464 -0
- sage/combinat/sf/jack.py +1428 -0
- sage/combinat/sf/k_dual.py +1458 -0
- sage/combinat/sf/kfpoly.py +447 -0
- sage/combinat/sf/llt.py +789 -0
- sage/combinat/sf/macdonald.py +2019 -0
- sage/combinat/sf/monomial.py +525 -0
- sage/combinat/sf/multiplicative.py +113 -0
- sage/combinat/sf/new_kschur.py +1786 -0
- sage/combinat/sf/ns_macdonald.py +964 -0
- sage/combinat/sf/orthogonal.py +246 -0
- sage/combinat/sf/orthotriang.py +355 -0
- sage/combinat/sf/powersum.py +963 -0
- sage/combinat/sf/schur.py +880 -0
- sage/combinat/sf/sf.py +1653 -0
- sage/combinat/sf/sfa.py +7053 -0
- sage/combinat/sf/symplectic.py +253 -0
- sage/combinat/sf/witt.py +721 -0
- sage/combinat/shifted_primed_tableau.py +2735 -0
- sage/combinat/shuffle.py +830 -0
- sage/combinat/sidon_sets.py +146 -0
- sage/combinat/similarity_class_type.py +1721 -0
- sage/combinat/sine_gordon.py +618 -0
- sage/combinat/six_vertex_model.py +784 -0
- sage/combinat/skew_partition.py +2053 -0
- sage/combinat/skew_tableau.py +2989 -0
- sage/combinat/sloane_functions.py +8935 -0
- sage/combinat/specht_module.py +1403 -0
- sage/combinat/species/all.py +48 -0
- sage/combinat/species/characteristic_species.py +321 -0
- sage/combinat/species/composition_species.py +273 -0
- sage/combinat/species/cycle_species.py +284 -0
- sage/combinat/species/empty_species.py +155 -0
- sage/combinat/species/functorial_composition_species.py +148 -0
- sage/combinat/species/generating_series.py +673 -0
- sage/combinat/species/library.py +148 -0
- sage/combinat/species/linear_order_species.py +169 -0
- sage/combinat/species/misc.py +83 -0
- sage/combinat/species/partition_species.py +290 -0
- sage/combinat/species/permutation_species.py +268 -0
- sage/combinat/species/product_species.py +423 -0
- sage/combinat/species/recursive_species.py +476 -0
- sage/combinat/species/set_species.py +192 -0
- sage/combinat/species/species.py +820 -0
- sage/combinat/species/structure.py +539 -0
- sage/combinat/species/subset_species.py +243 -0
- sage/combinat/species/sum_species.py +225 -0
- sage/combinat/subword.py +564 -0
- sage/combinat/subword_complex.py +2122 -0
- sage/combinat/subword_complex_c.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/subword_complex_c.pyx +119 -0
- sage/combinat/super_tableau.py +821 -0
- sage/combinat/superpartition.py +1154 -0
- sage/combinat/symmetric_group_algebra.py +3774 -0
- sage/combinat/symmetric_group_representations.py +1830 -0
- sage/combinat/t_sequences.py +877 -0
- sage/combinat/tableau.py +9506 -0
- sage/combinat/tableau_residues.py +860 -0
- sage/combinat/tableau_tuple.py +5353 -0
- sage/combinat/tiling.py +2432 -0
- sage/combinat/triangles_FHM.py +777 -0
- sage/combinat/tutorial.py +1857 -0
- sage/combinat/vector_partition.py +337 -0
- sage/combinat/words/abstract_word.py +1722 -0
- sage/combinat/words/all.py +59 -0
- sage/combinat/words/alphabet.py +268 -0
- sage/combinat/words/finite_word.py +7201 -0
- sage/combinat/words/infinite_word.py +113 -0
- sage/combinat/words/lyndon_word.py +652 -0
- sage/combinat/words/morphic.py +351 -0
- sage/combinat/words/morphism.py +3878 -0
- sage/combinat/words/paths.py +2932 -0
- sage/combinat/words/shuffle_product.py +278 -0
- sage/combinat/words/suffix_trees.py +1873 -0
- sage/combinat/words/word.py +769 -0
- sage/combinat/words/word_char.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/words/word_char.pyx +847 -0
- sage/combinat/words/word_datatypes.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/words/word_datatypes.pxd +4 -0
- sage/combinat/words/word_datatypes.pyx +1067 -0
- sage/combinat/words/word_generators.py +2026 -0
- sage/combinat/words/word_infinite_datatypes.py +1218 -0
- sage/combinat/words/word_options.py +99 -0
- sage/combinat/words/words.py +2396 -0
- sage/data_structures/all__sagemath_combinat.py +1 -0
- sage/databases/all__sagemath_combinat.py +13 -0
- sage/databases/findstat.py +4897 -0
- sage/databases/oeis.py +2058 -0
- sage/databases/sloane.py +393 -0
- sage/dynamics/all__sagemath_combinat.py +14 -0
- sage/dynamics/cellular_automata/all.py +7 -0
- sage/dynamics/cellular_automata/catalog.py +34 -0
- sage/dynamics/cellular_automata/elementary.py +612 -0
- sage/dynamics/cellular_automata/glca.py +477 -0
- sage/dynamics/cellular_automata/solitons.py +1463 -0
- sage/dynamics/finite_dynamical_system.py +1249 -0
- sage/dynamics/finite_dynamical_system_catalog.py +382 -0
- sage/games/all.py +7 -0
- sage/games/hexad.py +704 -0
- sage/games/quantumino.py +591 -0
- sage/games/sudoku.py +889 -0
- sage/games/sudoku_backtrack.cpython-314-x86_64-linux-musl.so +0 -0
- sage/games/sudoku_backtrack.pyx +189 -0
- sage/groups/all__sagemath_combinat.py +1 -0
- sage/groups/indexed_free_group.py +489 -0
- sage/libs/all__sagemath_combinat.py +6 -0
- sage/libs/lrcalc/__init__.py +1 -0
- sage/libs/lrcalc/lrcalc.py +525 -0
- sage/libs/symmetrica/__init__.py +7 -0
- sage/libs/symmetrica/all.py +101 -0
- sage/libs/symmetrica/kostka.pxi +168 -0
- sage/libs/symmetrica/part.pxi +193 -0
- sage/libs/symmetrica/plet.pxi +42 -0
- sage/libs/symmetrica/sab.pxi +196 -0
- sage/libs/symmetrica/sb.pxi +332 -0
- sage/libs/symmetrica/sc.pxi +192 -0
- sage/libs/symmetrica/schur.pxi +956 -0
- sage/libs/symmetrica/symmetrica.cpython-314-x86_64-linux-musl.so +0 -0
- sage/libs/symmetrica/symmetrica.pxi +1172 -0
- sage/libs/symmetrica/symmetrica.pyx +39 -0
- sage/monoids/all.py +13 -0
- sage/monoids/automatic_semigroup.py +1054 -0
- sage/monoids/free_abelian_monoid.py +315 -0
- sage/monoids/free_abelian_monoid_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/monoids/free_abelian_monoid_element.pxd +16 -0
- sage/monoids/free_abelian_monoid_element.pyx +397 -0
- sage/monoids/free_monoid.py +335 -0
- sage/monoids/free_monoid_element.py +431 -0
- sage/monoids/hecke_monoid.py +65 -0
- sage/monoids/string_monoid.py +817 -0
- sage/monoids/string_monoid_element.py +547 -0
- sage/monoids/string_ops.py +143 -0
- sage/monoids/trace_monoid.py +972 -0
- sage/rings/all__sagemath_combinat.py +2 -0
- sage/sat/all.py +4 -0
- sage/sat/boolean_polynomials.py +405 -0
- sage/sat/converters/__init__.py +6 -0
- sage/sat/converters/anf2cnf.py +14 -0
- sage/sat/converters/polybori.py +611 -0
- sage/sat/solvers/__init__.py +5 -0
- sage/sat/solvers/cryptominisat.py +287 -0
- sage/sat/solvers/dimacs.py +783 -0
- sage/sat/solvers/picosat.py +228 -0
- sage/sat/solvers/sat_lp.py +156 -0
- sage/sat/solvers/satsolver.cpython-314-x86_64-linux-musl.so +0 -0
- sage/sat/solvers/satsolver.pxd +3 -0
- sage/sat/solvers/satsolver.pyx +405 -0
|
@@ -0,0 +1,576 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.libs.pari sage.modules
|
|
3
|
+
r"""
|
|
4
|
+
Characters of the symmetric group as bases of the symmetric functions
|
|
5
|
+
|
|
6
|
+
Just as the Schur functions are the irreducible characters of `Gl_n`
|
|
7
|
+
and form a basis of the symmetric functions, the irreducible
|
|
8
|
+
symmetric group character basis are the irreducible characters of
|
|
9
|
+
of `S_n` when the group is realized as the permutation matrices.
|
|
10
|
+
|
|
11
|
+
REFERENCES:
|
|
12
|
+
|
|
13
|
+
.. [OZ2015] \R. Orellana, M. Zabrocki, *Symmetric group characters
|
|
14
|
+
as symmetric functions*, :arxiv:`1510.00438`.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
# ****************************************************************************
|
|
18
|
+
# Copyright (C) 2015 Mike Zabrocki <zabrocki@mathstat.yorku.ca
|
|
19
|
+
#
|
|
20
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
21
|
+
#
|
|
22
|
+
# This code is distributed in the hope that it will be useful,
|
|
23
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
24
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
25
|
+
# General Public License for more details.
|
|
26
|
+
#
|
|
27
|
+
# The full text of the GPL is available at:
|
|
28
|
+
#
|
|
29
|
+
# https://www.gnu.org/licenses/
|
|
30
|
+
# ****************************************************************************
|
|
31
|
+
|
|
32
|
+
from sage.arith.misc import binomial, divisors, moebius
|
|
33
|
+
from sage.categories.homset import Hom
|
|
34
|
+
from sage.categories.morphism import SetMorphism
|
|
35
|
+
from sage.combinat.sf.sfa import SymmetricFunctionAlgebra_generic as SFA_generic
|
|
36
|
+
from sage.misc.cachefunc import cached_method
|
|
37
|
+
from sage.rings.integer import Integer
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class Character_generic(SFA_generic):
|
|
41
|
+
|
|
42
|
+
def _my_key(self, la):
|
|
43
|
+
r"""
|
|
44
|
+
A rank function for partitions.
|
|
45
|
+
|
|
46
|
+
The leading term of a homogeneous expression will
|
|
47
|
+
be the partition with the largest key value.
|
|
48
|
+
|
|
49
|
+
This key value is `|\lambda|^2 + \lambda_0` and
|
|
50
|
+
using the ``max`` function on a list of Partitions.
|
|
51
|
+
|
|
52
|
+
Of course it is possible that this rank function
|
|
53
|
+
is equal for some partitions, but the leading
|
|
54
|
+
term should be any one of these partitions.
|
|
55
|
+
|
|
56
|
+
INPUT:
|
|
57
|
+
|
|
58
|
+
- ``la`` -- a partition
|
|
59
|
+
|
|
60
|
+
OUTPUT: integer
|
|
61
|
+
|
|
62
|
+
EXAMPLES::
|
|
63
|
+
|
|
64
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
65
|
+
sage: ht = SymmetricFunctions(QQ).ht()
|
|
66
|
+
sage: ht._my_key(Partition([2,1,1]))
|
|
67
|
+
18
|
|
68
|
+
sage: ht._my_key(Partition([2,2]))
|
|
69
|
+
18
|
|
70
|
+
sage: ht._my_key(Partition([3,1]))
|
|
71
|
+
19
|
|
72
|
+
sage: ht._my_key(Partition([1,1,1,1]))
|
|
73
|
+
17
|
|
74
|
+
"""
|
|
75
|
+
if la:
|
|
76
|
+
return la.size()**2 + la[0]
|
|
77
|
+
else:
|
|
78
|
+
return 0
|
|
79
|
+
|
|
80
|
+
def _other_to_self(self, sexpr):
|
|
81
|
+
r"""
|
|
82
|
+
Convert an expression the target basis to the character-basis.
|
|
83
|
+
|
|
84
|
+
We use triangularity to determine the expansion
|
|
85
|
+
by subtracting off the leading term. The target basis
|
|
86
|
+
is specified by the method ``self._other``.
|
|
87
|
+
|
|
88
|
+
INPUT:
|
|
89
|
+
|
|
90
|
+
- ``sexpr`` -- an element of ``self._other`` basis
|
|
91
|
+
|
|
92
|
+
EXAMPLES::
|
|
93
|
+
|
|
94
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
95
|
+
sage: ht = SymmetricFunctions(QQ).ht()
|
|
96
|
+
sage: h = Sym.h()
|
|
97
|
+
sage: ht._other_to_self(h[2] + h([]))
|
|
98
|
+
ht[] + ht[1] + ht[2]
|
|
99
|
+
sage: st = SymmetricFunctions(QQ).st()
|
|
100
|
+
sage: s = Sym.s()
|
|
101
|
+
sage: st._other_to_self(s[1] + s([]))
|
|
102
|
+
2*st[] + st[1]
|
|
103
|
+
sage: 7 * st[[]] * st[[]] # needs lrcalc_python
|
|
104
|
+
7*st[]
|
|
105
|
+
"""
|
|
106
|
+
if sexpr == 0:
|
|
107
|
+
return self(0)
|
|
108
|
+
if list(sexpr.support()) == [[]]:
|
|
109
|
+
return self._from_dict({self.one_basis(): sexpr.coefficient([])},
|
|
110
|
+
remove_zeros=False)
|
|
111
|
+
out = self.zero()
|
|
112
|
+
while sexpr:
|
|
113
|
+
mup = max(sexpr.support(), key=self._my_key)
|
|
114
|
+
out += sexpr.coefficient(mup) * self(mup)
|
|
115
|
+
sexpr -= sexpr.coefficient(mup) * self._self_to_other_on_basis(mup)
|
|
116
|
+
return out
|
|
117
|
+
|
|
118
|
+
def _b_power_k(self, k):
|
|
119
|
+
r"""
|
|
120
|
+
An expression involving Moebius inversion in the powersum generators.
|
|
121
|
+
|
|
122
|
+
For a positive value of ``k``, this expression is
|
|
123
|
+
|
|
124
|
+
.. MATH::
|
|
125
|
+
|
|
126
|
+
\frac{1}{k} \sum_{d|k} \mu(d/k) p_d.
|
|
127
|
+
|
|
128
|
+
INPUT:
|
|
129
|
+
|
|
130
|
+
- ``k`` -- positive integer
|
|
131
|
+
|
|
132
|
+
OUTPUT: an expression in the powersum basis of the symmetric functions
|
|
133
|
+
|
|
134
|
+
EXAMPLES::
|
|
135
|
+
|
|
136
|
+
sage: st = SymmetricFunctions(QQ).st()
|
|
137
|
+
sage: st._b_power_k(1)
|
|
138
|
+
p[1]
|
|
139
|
+
sage: st._b_power_k(2)
|
|
140
|
+
-1/2*p[1] + 1/2*p[2]
|
|
141
|
+
sage: st._b_power_k(6)
|
|
142
|
+
1/6*p[1] - 1/6*p[2] - 1/6*p[3] + 1/6*p[6]
|
|
143
|
+
"""
|
|
144
|
+
if k == 1:
|
|
145
|
+
return self._p([1])
|
|
146
|
+
if k > 0:
|
|
147
|
+
return ~k * self._p.linear_combination((self._p([d]),moebius(k//d))
|
|
148
|
+
for d in divisors(k))
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
class InducedTrivialCharacterBasis(Character_generic):
|
|
152
|
+
r"""
|
|
153
|
+
The induced trivial symmetric group character basis of
|
|
154
|
+
the symmetric functions.
|
|
155
|
+
|
|
156
|
+
This is a basis of the symmetric functions that has the
|
|
157
|
+
property that ``self(la).character_to_frobenius_image(n)``
|
|
158
|
+
is equal to ``h([n-sum(la)]+la)``.
|
|
159
|
+
|
|
160
|
+
It has the property that the (outer) structure
|
|
161
|
+
constants are the analogue of the stable Kronecker
|
|
162
|
+
coefficients on the complete basis.
|
|
163
|
+
|
|
164
|
+
This basis is introduced in [OZ2015]_.
|
|
165
|
+
|
|
166
|
+
EXAMPLES::
|
|
167
|
+
|
|
168
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
169
|
+
sage: s = Sym.s()
|
|
170
|
+
sage: h = Sym.h()
|
|
171
|
+
sage: ht = SymmetricFunctions(QQ).ht()
|
|
172
|
+
sage: st = SymmetricFunctions(QQ).st()
|
|
173
|
+
sage: ht(s[2,1])
|
|
174
|
+
ht[1, 1] + ht[2, 1] - ht[3]
|
|
175
|
+
sage: s(ht[2,1])
|
|
176
|
+
s[1] - 2*s[1, 1] - 2*s[2] + s[2, 1] + s[3]
|
|
177
|
+
sage: ht(h[2,1])
|
|
178
|
+
ht[1] + 2*ht[1, 1] + ht[2, 1]
|
|
179
|
+
sage: h(ht[2,1])
|
|
180
|
+
h[1] - 2*h[1, 1] + h[2, 1]
|
|
181
|
+
sage: st(ht[2,1])
|
|
182
|
+
st[] + 2*st[1] + st[1, 1] + 2*st[2] + st[2, 1] + st[3]
|
|
183
|
+
sage: ht(st[2,1])
|
|
184
|
+
ht[1] - ht[1, 1] + ht[2, 1] - ht[3]
|
|
185
|
+
sage: ht[2]*ht[1,1] # needs lrcalc_python
|
|
186
|
+
ht[1, 1] + 2*ht[1, 1, 1] + ht[2, 1, 1]
|
|
187
|
+
sage: h[4,2].kronecker_product(h[4,1,1])
|
|
188
|
+
h[2, 2, 1, 1] + 2*h[3, 1, 1, 1] + h[4, 1, 1]
|
|
189
|
+
sage: s(st[2,1])
|
|
190
|
+
3*s[1] - 2*s[1, 1] - 2*s[2] + s[2, 1]
|
|
191
|
+
sage: st(s[2,1])
|
|
192
|
+
st[] + 3*st[1] + 2*st[1, 1] + 2*st[2] + st[2, 1]
|
|
193
|
+
sage: st[2]*st[1] # needs lrcalc_python
|
|
194
|
+
st[1] + st[1, 1] + st[2] + st[2, 1] + st[3]
|
|
195
|
+
sage: s[4,2].kronecker_product(s[5,1])
|
|
196
|
+
s[3, 2, 1] + s[3, 3] + s[4, 1, 1] + s[4, 2] + s[5, 1]
|
|
197
|
+
|
|
198
|
+
TESTS::
|
|
199
|
+
|
|
200
|
+
sage: TestSuite(ht).run() # needs lrcalc_python
|
|
201
|
+
"""
|
|
202
|
+
|
|
203
|
+
def __init__(self, Sym):
|
|
204
|
+
r"""
|
|
205
|
+
Initialize the basis and register coercions.
|
|
206
|
+
|
|
207
|
+
The coercions are set up between the ``other_basis``.
|
|
208
|
+
|
|
209
|
+
INPUT:
|
|
210
|
+
|
|
211
|
+
- ``Sym`` -- an instance of the symmetric function algebra
|
|
212
|
+
- ``pfix`` -- a prefix to use for the basis
|
|
213
|
+
|
|
214
|
+
EXAMPLES::
|
|
215
|
+
|
|
216
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
217
|
+
sage: ht = SymmetricFunctions(QQ).ht(); ht
|
|
218
|
+
Symmetric Functions over Rational Field in the induced trivial
|
|
219
|
+
symmetric group character basis
|
|
220
|
+
"""
|
|
221
|
+
SFA_generic.__init__(self, Sym,
|
|
222
|
+
basis_name="induced trivial symmetric group character",
|
|
223
|
+
prefix='ht', graded=False)
|
|
224
|
+
self._other = Sym.complete()
|
|
225
|
+
self._p = Sym.powersum()
|
|
226
|
+
|
|
227
|
+
self.module_morphism(self._self_to_power_on_basis,
|
|
228
|
+
codomain=Sym.powersum()).register_as_coercion()
|
|
229
|
+
self.register_coercion(SetMorphism(Hom(self._other, self),
|
|
230
|
+
self._other_to_self))
|
|
231
|
+
|
|
232
|
+
def _b_bar_power_k_r(self, k, r):
|
|
233
|
+
r"""
|
|
234
|
+
An expression involving Moebius inversion in the powersum generators.
|
|
235
|
+
|
|
236
|
+
For a positive value of ``k``, this expression is
|
|
237
|
+
|
|
238
|
+
.. MATH::
|
|
239
|
+
|
|
240
|
+
\sum_{j=0}^r (-1)^{r-j}k^j\binom{r,j}
|
|
241
|
+
\left( \frac{1}{k} \sum_{d|k} \mu(d/k) p_d \right)_k.
|
|
242
|
+
|
|
243
|
+
INPUT:
|
|
244
|
+
|
|
245
|
+
- ``k``, ``r`` -- positive integers
|
|
246
|
+
|
|
247
|
+
OUTPUT: an expression in the powersum basis of the symmetric functions
|
|
248
|
+
|
|
249
|
+
EXAMPLES::
|
|
250
|
+
|
|
251
|
+
sage: ht = SymmetricFunctions(QQ).ht()
|
|
252
|
+
sage: ht._b_bar_power_k_r(1,1)
|
|
253
|
+
p[1]
|
|
254
|
+
sage: ht._b_bar_power_k_r(2,2)
|
|
255
|
+
2*p[1] + p[1, 1] - 2*p[2] - 2*p[2, 1] + p[2, 2]
|
|
256
|
+
sage: ht._b_bar_power_k_r(3,2)
|
|
257
|
+
3*p[1] + p[1, 1] - 3*p[3] - 2*p[3, 1] + p[3, 3]
|
|
258
|
+
"""
|
|
259
|
+
p = self._p
|
|
260
|
+
return k**r * p.prod( self._b_power_k(k)-j for j in range(r) )
|
|
261
|
+
|
|
262
|
+
def _b_bar_power_gamma(self, gamma):
|
|
263
|
+
r"""
|
|
264
|
+
An expression involving Moebius inversion in the powersum generators.
|
|
265
|
+
|
|
266
|
+
For a partition `\gamma = (1^{m_1}, 2^{m_2}, \ldots, r^{m_r})`,
|
|
267
|
+
this expression is
|
|
268
|
+
|
|
269
|
+
.. MATH::
|
|
270
|
+
|
|
271
|
+
{\mathbf p}_{\ga} = \sum_{k \geq 1} {\mathbf p}_{k^{m_k}},
|
|
272
|
+
|
|
273
|
+
where
|
|
274
|
+
|
|
275
|
+
.. MATH::
|
|
276
|
+
|
|
277
|
+
{\mathbf p}_{k^r} = \sum_{j=0}^r (-1)^{r-j}k^j\binom{r,j}
|
|
278
|
+
\left( \frac{1}{k} \sum_{d|k} \mu(d/k) p_d \right)_k.
|
|
279
|
+
|
|
280
|
+
INPUT:
|
|
281
|
+
|
|
282
|
+
- ``gamma`` -- a partition
|
|
283
|
+
|
|
284
|
+
OUTPUT: an expression in the powersum basis of the symmetric functions
|
|
285
|
+
|
|
286
|
+
EXAMPLES::
|
|
287
|
+
|
|
288
|
+
sage: ht = SymmetricFunctions(QQ).ht()
|
|
289
|
+
sage: ht._b_bar_power_gamma(Partition([2,2,1]))
|
|
290
|
+
2*p[1, 1] + p[1, 1, 1] - 2*p[2, 1] - 2*p[2, 1, 1] + p[2, 2, 1]
|
|
291
|
+
sage: ht._b_bar_power_gamma(Partition([1,1,1]))
|
|
292
|
+
2*p[1] - 3*p[1, 1] + p[1, 1, 1]
|
|
293
|
+
sage: ht._b_bar_power_gamma(Partition([3,3,1]))
|
|
294
|
+
3*p[1, 1] + p[1, 1, 1] - 3*p[3, 1] - 2*p[3, 1, 1] + p[3, 3, 1]
|
|
295
|
+
"""
|
|
296
|
+
return self._p.prod(self._b_bar_power_k_r(Integer(k), Integer(r))
|
|
297
|
+
for k, r in gamma.to_exp_dict().items())
|
|
298
|
+
|
|
299
|
+
def _self_to_power_on_basis(self, lam):
|
|
300
|
+
r"""
|
|
301
|
+
An expansion of the induced trivial character in the powersum basis.
|
|
302
|
+
|
|
303
|
+
The formula for the induced trivial character basis indexed by the
|
|
304
|
+
partition ``lam`` is given by the formula
|
|
305
|
+
|
|
306
|
+
.. MATH::
|
|
307
|
+
|
|
308
|
+
\sum_{\gamma} \left\langle h_\lambda, p_\gamma \right\rangle
|
|
309
|
+
\frac{{\overline {\mathbf p}}_\gamma}{z_\gamma},
|
|
310
|
+
|
|
311
|
+
where `{\overline {\mathbf p}}_\gamma` is the
|
|
312
|
+
power sum expression calculated in the method
|
|
313
|
+
:meth:`_b_bar_power_gamma`.
|
|
314
|
+
|
|
315
|
+
INPUT:
|
|
316
|
+
|
|
317
|
+
- ``lam`` -- a partition
|
|
318
|
+
|
|
319
|
+
OUTPUT: an expression in the power sum basis
|
|
320
|
+
|
|
321
|
+
EXAMPLES::
|
|
322
|
+
|
|
323
|
+
sage: ht = SymmetricFunctions(QQ).ht()
|
|
324
|
+
sage: ht._self_to_power_on_basis([2,1])
|
|
325
|
+
p[1] - 2*p[1, 1] + 1/2*p[1, 1, 1] + 1/2*p[2, 1]
|
|
326
|
+
sage: ht._self_to_power_on_basis([1,1,1])
|
|
327
|
+
2*p[1] - 3*p[1, 1] + p[1, 1, 1]
|
|
328
|
+
"""
|
|
329
|
+
return self._p.sum( c*self._b_bar_power_gamma(ga)
|
|
330
|
+
for (ga, c) in self._p(self._other(lam)) )
|
|
331
|
+
|
|
332
|
+
@cached_method
|
|
333
|
+
def _self_to_other_on_basis(self, lam):
|
|
334
|
+
r"""
|
|
335
|
+
An expansion of the induced trivial character basis in complete basis.
|
|
336
|
+
|
|
337
|
+
Compute the complete expansion by first computing it in the
|
|
338
|
+
powersum basis and the coercing to the complete basis.
|
|
339
|
+
|
|
340
|
+
INPUT:
|
|
341
|
+
|
|
342
|
+
- ``lam`` -- a partition
|
|
343
|
+
|
|
344
|
+
OUTPUT:
|
|
345
|
+
|
|
346
|
+
- an expression in the complete (other) basis
|
|
347
|
+
|
|
348
|
+
EXAMPLES::
|
|
349
|
+
|
|
350
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
351
|
+
sage: ht = SymmetricFunctions(QQ).ht()
|
|
352
|
+
sage: ht._self_to_other_on_basis(Partition([2,1]))
|
|
353
|
+
h[1] - 2*h[1, 1] + h[2, 1]
|
|
354
|
+
|
|
355
|
+
TESTS::
|
|
356
|
+
|
|
357
|
+
sage: h = SymmetricFunctions(QQ).h()
|
|
358
|
+
sage: ht = SymmetricFunctions(QQ).ht()
|
|
359
|
+
sage: st = SymmetricFunctions(QQ).st()
|
|
360
|
+
sage: all(ht(h(ht[la])) == ht[la] for i in range(5) for la in Partitions(i))
|
|
361
|
+
True
|
|
362
|
+
sage: all(h(ht(h[la])) == h[la] for i in range(5) for la in Partitions(i))
|
|
363
|
+
True
|
|
364
|
+
sage: all(st(h(st[la])) == st[la] for i in range(5) for la in Partitions(i))
|
|
365
|
+
True
|
|
366
|
+
sage: all(h(st(h[la])) == h[la] for i in range(5) for la in Partitions(i))
|
|
367
|
+
True
|
|
368
|
+
"""
|
|
369
|
+
return self._other(self._self_to_power_on_basis(lam))
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
class IrreducibleCharacterBasis(Character_generic):
|
|
373
|
+
r"""
|
|
374
|
+
The irreducible symmetric group character basis of
|
|
375
|
+
the symmetric functions.
|
|
376
|
+
|
|
377
|
+
This is a basis of the symmetric functions that has the
|
|
378
|
+
property that ``self(la).character_to_frobenius_image(n)``
|
|
379
|
+
is equal to ``s([n-sum(la)]+la)``.
|
|
380
|
+
|
|
381
|
+
It should also have the property that the (outer) structure
|
|
382
|
+
constants are the analogue of the stable Kronecker
|
|
383
|
+
coefficients on the Schur basis.
|
|
384
|
+
|
|
385
|
+
This basis is introduced in [OZ2015]_.
|
|
386
|
+
|
|
387
|
+
EXAMPLES::
|
|
388
|
+
|
|
389
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
390
|
+
sage: s = Sym.s()
|
|
391
|
+
sage: h = Sym.h()
|
|
392
|
+
sage: ht = SymmetricFunctions(QQ).ht()
|
|
393
|
+
sage: st = SymmetricFunctions(QQ).st()
|
|
394
|
+
sage: st(ht[2,1])
|
|
395
|
+
st[] + 2*st[1] + st[1, 1] + 2*st[2] + st[2, 1] + st[3]
|
|
396
|
+
sage: ht(st[2,1])
|
|
397
|
+
ht[1] - ht[1, 1] + ht[2, 1] - ht[3]
|
|
398
|
+
sage: s(st[2,1])
|
|
399
|
+
3*s[1] - 2*s[1, 1] - 2*s[2] + s[2, 1]
|
|
400
|
+
sage: st(s[2,1])
|
|
401
|
+
st[] + 3*st[1] + 2*st[1, 1] + 2*st[2] + st[2, 1]
|
|
402
|
+
sage: st[2]*st[1] # needs lrcalc_python
|
|
403
|
+
st[1] + st[1, 1] + st[2] + st[2, 1] + st[3]
|
|
404
|
+
sage: s[4,2].kronecker_product(s[5,1])
|
|
405
|
+
s[3, 2, 1] + s[3, 3] + s[4, 1, 1] + s[4, 2] + s[5, 1]
|
|
406
|
+
sage: st[1,1,1].counit()
|
|
407
|
+
-1
|
|
408
|
+
sage: all(sum(c*st(la)*st(mu).antipode() for # needs lrcalc_python
|
|
409
|
+
....: ((la,mu),c) in st(ga).coproduct())==st(st(ga).counit())
|
|
410
|
+
....: for ga in Partitions(3))
|
|
411
|
+
True
|
|
412
|
+
|
|
413
|
+
TESTS::
|
|
414
|
+
|
|
415
|
+
sage: TestSuite(st).run() # needs lrcalc_python
|
|
416
|
+
"""
|
|
417
|
+
|
|
418
|
+
def __init__(self, Sym):
|
|
419
|
+
r"""
|
|
420
|
+
Initialize the basis and register coercions.
|
|
421
|
+
|
|
422
|
+
The coercions are set up between the ``other_basis``
|
|
423
|
+
|
|
424
|
+
INPUT:
|
|
425
|
+
|
|
426
|
+
- ``Sym`` -- an instance of the symmetric function algebra
|
|
427
|
+
- ``pfix`` -- a prefix to use for the basis
|
|
428
|
+
|
|
429
|
+
EXAMPLES::
|
|
430
|
+
|
|
431
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
432
|
+
sage: ht = SymmetricFunctions(QQ).ht(); ht
|
|
433
|
+
Symmetric Functions over Rational Field in the induced trivial
|
|
434
|
+
symmetric group character basis
|
|
435
|
+
sage: st = SymmetricFunctions(QQ).st(); st
|
|
436
|
+
Symmetric Functions over Rational Field in the irreducible
|
|
437
|
+
symmetric group character basis
|
|
438
|
+
"""
|
|
439
|
+
SFA_generic.__init__(self, Sym,
|
|
440
|
+
basis_name="irreducible symmetric group character",
|
|
441
|
+
prefix='st', graded=False)
|
|
442
|
+
self._other = Sym.Schur()
|
|
443
|
+
self._p = Sym.powersum()
|
|
444
|
+
|
|
445
|
+
self.module_morphism(self._self_to_power_on_basis,
|
|
446
|
+
codomain=Sym.powersum()).register_as_coercion()
|
|
447
|
+
self.register_coercion(SetMorphism(Hom(self._other, self),
|
|
448
|
+
self._other_to_self))
|
|
449
|
+
|
|
450
|
+
def _b_power_k_r(self, k, r):
|
|
451
|
+
r"""
|
|
452
|
+
An expression involving Moebius inversion in the powersum generators.
|
|
453
|
+
|
|
454
|
+
For a positive value of ``k``, this expression is
|
|
455
|
+
|
|
456
|
+
.. MATH::
|
|
457
|
+
|
|
458
|
+
\sum_{j=0}^r (-1)^{r-j}k^j\binom{r,j} \left(
|
|
459
|
+
\frac{1}{k} \sum_{d|k} \mu(d/k) p_d \right)_k.
|
|
460
|
+
|
|
461
|
+
INPUT:
|
|
462
|
+
|
|
463
|
+
- ``k``, ``r`` -- positive integers
|
|
464
|
+
|
|
465
|
+
OUTPUT: an expression in the powersum basis of the symmetric functions
|
|
466
|
+
|
|
467
|
+
EXAMPLES::
|
|
468
|
+
|
|
469
|
+
sage: st = SymmetricFunctions(QQ).st()
|
|
470
|
+
sage: st._b_power_k_r(1,1)
|
|
471
|
+
-p[] + p[1]
|
|
472
|
+
sage: st._b_power_k_r(2,2)
|
|
473
|
+
p[] + 4*p[1] + p[1, 1] - 4*p[2] - 2*p[2, 1] + p[2, 2]
|
|
474
|
+
sage: st._b_power_k_r(3,2)
|
|
475
|
+
p[] + 5*p[1] + p[1, 1] - 5*p[3] - 2*p[3, 1] + p[3, 3]
|
|
476
|
+
"""
|
|
477
|
+
p = self._p
|
|
478
|
+
return p.sum( (-1)**(r-j) * k**j * binomial(r,j)
|
|
479
|
+
* p.prod(self._b_power_k(k) - i*p.one() for i in range(j))
|
|
480
|
+
for j in range(r+1) )
|
|
481
|
+
|
|
482
|
+
def _b_power_gamma(self, gamma):
|
|
483
|
+
r"""
|
|
484
|
+
An expression involving Moebius inversion in the powersum generators.
|
|
485
|
+
|
|
486
|
+
For a partition `\gamma = (1^{m_1}, 2^{m_2}, \ldots, r^{m_r})`,
|
|
487
|
+
this expression is
|
|
488
|
+
|
|
489
|
+
.. MATH::
|
|
490
|
+
|
|
491
|
+
{\mathbf p}_{\ga} = \sum_{k \geq 1} {\mathbf p}_{k^{m_k}},
|
|
492
|
+
|
|
493
|
+
where
|
|
494
|
+
|
|
495
|
+
.. MATH::
|
|
496
|
+
|
|
497
|
+
{\mathbf p}_{k^r} = \sum_{j=0}^r (-1)^{r-j}k^j\binom{r,j}
|
|
498
|
+
\left( \frac{1}{k} \sum_{d|k} \mu(d/k) p_d \right)_k.
|
|
499
|
+
|
|
500
|
+
INPUT:
|
|
501
|
+
|
|
502
|
+
- ``gamma`` -- a partition
|
|
503
|
+
|
|
504
|
+
OUTPUT: an expression in the powersum basis of the symmetric functions
|
|
505
|
+
|
|
506
|
+
EXAMPLES::
|
|
507
|
+
|
|
508
|
+
sage: st = SymmetricFunctions(QQ).st()
|
|
509
|
+
sage: st._b_power_gamma(Partition([2,2]))
|
|
510
|
+
p[] + 4*p[1] + p[1, 1] - 4*p[2] - 2*p[2, 1] + p[2, 2]
|
|
511
|
+
sage: st._b_power_gamma(Partition([1,1,1]))
|
|
512
|
+
-p[] + 8*p[1] - 6*p[1, 1] + p[1, 1, 1]
|
|
513
|
+
sage: st._b_power_gamma(Partition([3,1]))
|
|
514
|
+
p[] - p[1, 1] - p[3] + p[3, 1]
|
|
515
|
+
"""
|
|
516
|
+
return self._p.prod(self._b_power_k_r(Integer(k), Integer(r))
|
|
517
|
+
for k, r in gamma.to_exp_dict().items())
|
|
518
|
+
|
|
519
|
+
def _self_to_power_on_basis(self, lam):
|
|
520
|
+
r"""
|
|
521
|
+
An expansion of the irreducible character in the powersum basis.
|
|
522
|
+
|
|
523
|
+
The formula for the irreducible character basis indexed by the
|
|
524
|
+
partition ``lam`` is given by the formula
|
|
525
|
+
|
|
526
|
+
.. MATH::
|
|
527
|
+
|
|
528
|
+
\sum_{\gamma} \chi^{\lambda}(\gamma)
|
|
529
|
+
\frac{{\mathbf p}_\gamma}{z_\gamma},
|
|
530
|
+
|
|
531
|
+
where `\chi^{\lambda}(\gamma)` is the irreducible character
|
|
532
|
+
indexed by the partition `\lambda` and evaluated at an element
|
|
533
|
+
of cycle structure `\gamma` and `{\mathbf p}_\gamma` is the
|
|
534
|
+
power sum expression calculated in the method
|
|
535
|
+
:meth:`_b_power_gamma`.
|
|
536
|
+
|
|
537
|
+
INPUT:
|
|
538
|
+
|
|
539
|
+
- ``lam`` -- a partition
|
|
540
|
+
|
|
541
|
+
OUTPUT: an expression in the power sum basis
|
|
542
|
+
|
|
543
|
+
EXAMPLES::
|
|
544
|
+
|
|
545
|
+
sage: st = SymmetricFunctions(QQ).st()
|
|
546
|
+
sage: st._self_to_power_on_basis([2,1])
|
|
547
|
+
3*p[1] - 2*p[1, 1] + 1/3*p[1, 1, 1] - 1/3*p[3]
|
|
548
|
+
sage: st._self_to_power_on_basis([1,1])
|
|
549
|
+
p[] - p[1] + 1/2*p[1, 1] - 1/2*p[2]
|
|
550
|
+
"""
|
|
551
|
+
return self._p.sum( c*self._b_power_gamma(ga)
|
|
552
|
+
for (ga, c) in self._p(self._other(lam)) )
|
|
553
|
+
|
|
554
|
+
@cached_method
|
|
555
|
+
def _self_to_other_on_basis(self, lam):
|
|
556
|
+
r"""
|
|
557
|
+
An expansion of the irreducible character basis in the Schur basis.
|
|
558
|
+
|
|
559
|
+
Compute the Schur expansion by first computing it in the
|
|
560
|
+
powersum basis and the coercing to the Schur basis.
|
|
561
|
+
|
|
562
|
+
INPUT:
|
|
563
|
+
|
|
564
|
+
- ``lam`` -- a partition
|
|
565
|
+
|
|
566
|
+
OUTPUT: an expression in the Schur basis
|
|
567
|
+
|
|
568
|
+
EXAMPLES::
|
|
569
|
+
|
|
570
|
+
sage: st = SymmetricFunctions(QQ).st()
|
|
571
|
+
sage: st._self_to_other_on_basis(Partition([1,1]))
|
|
572
|
+
s[] - s[1] + s[1, 1]
|
|
573
|
+
sage: st._self_to_other_on_basis(Partition([2,1]))
|
|
574
|
+
3*s[1] - 2*s[1, 1] - 2*s[2] + s[2, 1]
|
|
575
|
+
"""
|
|
576
|
+
return self._other(self._self_to_power_on_basis(lam))
|