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
sage/combinat/sf/witt.py
ADDED
|
@@ -0,0 +1,721 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.modules
|
|
3
|
+
"""
|
|
4
|
+
Witt symmetric functions
|
|
5
|
+
"""
|
|
6
|
+
# ****************************************************************************
|
|
7
|
+
# Copyright (C) 2007 Mike Hansen <mhansen@gmail.com>
|
|
8
|
+
# 2012 Mike Zabrocki <mike.zabrocki@gmail.com>
|
|
9
|
+
# 2013 Darij Grinberg <darijgrinberg@gmail.com>
|
|
10
|
+
# 2024 Travis Scrimshaw <tcscrims at gmail.com>
|
|
11
|
+
#
|
|
12
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
13
|
+
#
|
|
14
|
+
# This code is distributed in the hope that it will be useful,
|
|
15
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
16
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
17
|
+
# General Public License for more details.
|
|
18
|
+
#
|
|
19
|
+
# The full text of the GPL is available at:
|
|
20
|
+
#
|
|
21
|
+
# https://www.gnu.org/licenses/
|
|
22
|
+
# ****************************************************************************
|
|
23
|
+
from sage.arith.misc import divisors
|
|
24
|
+
from sage.combinat.integer_lists.invlex import IntegerListsLex
|
|
25
|
+
from sage.combinat.partitions import ZS1_iterator
|
|
26
|
+
from sage.misc.cachefunc import cached_method
|
|
27
|
+
|
|
28
|
+
from . import multiplicative
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class SymmetricFunctionAlgebra_witt(multiplicative.SymmetricFunctionAlgebra_multiplicative):
|
|
32
|
+
r"""
|
|
33
|
+
The Witt symmetric function basis (or Witt basis, to be short).
|
|
34
|
+
|
|
35
|
+
The Witt basis of the ring of symmetric functions is
|
|
36
|
+
denoted by `(x_{\lambda})` in [HazWitt1]_, section 9.63, and by
|
|
37
|
+
`(q_{\lambda})` in [DoranIV1996]_. We will denote this basis by
|
|
38
|
+
`(w_{\lambda})` (which is precisely how it is denoted in
|
|
39
|
+
[GriRei18]_, Exercise 2.9.3(d)). It is a multiplicative basis
|
|
40
|
+
(meaning that `w_{\emptyset} = 1` and that every partition
|
|
41
|
+
`\lambda` satisfies
|
|
42
|
+
`w_{\lambda} = w_{\lambda_1} w_{\lambda_2} w_{\lambda_3} \cdots`,
|
|
43
|
+
where `w_i` means `w_{(i)}` for every nonnegative integer `i`).
|
|
44
|
+
|
|
45
|
+
This basis can be defined in various ways. Probably the most
|
|
46
|
+
well-known one is using the equation
|
|
47
|
+
|
|
48
|
+
.. MATH::
|
|
49
|
+
|
|
50
|
+
\prod_{d=1}^{\infty} (1 - w_d t^d)^{-1} = \sum_{n=0}^{\infty} h_n t^n
|
|
51
|
+
|
|
52
|
+
where `t` is a formal variable and `h_n` are the complete
|
|
53
|
+
homogeneous symmetric functions, extended to `0` by `h_0 = 1`.
|
|
54
|
+
This equation allows one to uniquely determine the functions
|
|
55
|
+
`w_1, w_2, w_3, \ldots` by recursion; one consequently extends the
|
|
56
|
+
definition to all `w_{\lambda}` by requiring multiplicativity.
|
|
57
|
+
|
|
58
|
+
A way to rewrite the above equation without power series is:
|
|
59
|
+
|
|
60
|
+
.. MATH::
|
|
61
|
+
|
|
62
|
+
h_n = \sum_{\lambda \vdash n} w_{\lambda}
|
|
63
|
+
|
|
64
|
+
for all nonnegative integers `n`, where `\lambda \vdash n` means
|
|
65
|
+
that `\lambda` is a partition of `n`.
|
|
66
|
+
|
|
67
|
+
A similar equation (which is easily seen to be equivalent to the
|
|
68
|
+
former) is
|
|
69
|
+
|
|
70
|
+
.. MATH::
|
|
71
|
+
|
|
72
|
+
e_n = \sum_{\lambda} (-1)^{n - \ell(\lambda)} w_{\lambda},
|
|
73
|
+
|
|
74
|
+
with the sum running only over *strict* partitions `\lambda` of
|
|
75
|
+
`n` this time. This equation can also be used to recursively
|
|
76
|
+
define the `w_n`. Furthermore, every positive integer `n`
|
|
77
|
+
satisfies
|
|
78
|
+
|
|
79
|
+
.. MATH::
|
|
80
|
+
|
|
81
|
+
p_n = \sum_{d\mid n} d w_d^{n/d},
|
|
82
|
+
|
|
83
|
+
and this can be used to define the `w_n` recursively over any
|
|
84
|
+
ring which is torsion-free as a `\ZZ`-module. While these
|
|
85
|
+
equations all yield easy formulas for classical bases of the
|
|
86
|
+
ring of symmetric functions in terms of the Witt symmetric
|
|
87
|
+
functions, it seems difficult to obtain explicit formulas in
|
|
88
|
+
the other direction.
|
|
89
|
+
|
|
90
|
+
The Witt symmetric functions owe their name to the fact that
|
|
91
|
+
the ring of symmetric functions can be viewed as the coordinate
|
|
92
|
+
ring of the group scheme of Witt vectors, and the Witt
|
|
93
|
+
symmetric functions are the functions that send a Witt vector
|
|
94
|
+
to its components (whereas the powersum symmetric functions
|
|
95
|
+
send a Witt vector to its ghost components). Details can be
|
|
96
|
+
found in [HazWitt1]_ or section 3.2 of [BorWi2004]_.
|
|
97
|
+
|
|
98
|
+
INPUT:
|
|
99
|
+
|
|
100
|
+
- ``Sym`` -- an instance of the ring of the symmetric functions
|
|
101
|
+
|
|
102
|
+
REFERENCES:
|
|
103
|
+
|
|
104
|
+
.. [HazWitt1] Michiel Hazewinkel. *Witt vectors. Part 1*.
|
|
105
|
+
:arxiv:`0804.3888v1`
|
|
106
|
+
|
|
107
|
+
.. [DoranIV1996] William F. Doran IV.
|
|
108
|
+
*A Proof of Reutenauer's `-q_{(n)}` Conjecture*.
|
|
109
|
+
Journal of combinatorial theory, Series A 74, pp. 342-344 (1996),
|
|
110
|
+
article no. 0056. :doi:`10.1006/jcta.1996.0056`
|
|
111
|
+
|
|
112
|
+
.. [BorWi2004] James Borger, Ben Wieland.
|
|
113
|
+
*Plethystic algebra*.
|
|
114
|
+
:arxiv:`math/0407227v1`
|
|
115
|
+
|
|
116
|
+
.. [GriRei18]_
|
|
117
|
+
|
|
118
|
+
EXAMPLES:
|
|
119
|
+
|
|
120
|
+
Here are the first few Witt symmetric functions, in various bases::
|
|
121
|
+
|
|
122
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
123
|
+
sage: w = Sym.w()
|
|
124
|
+
sage: e = Sym.e()
|
|
125
|
+
sage: h = Sym.h()
|
|
126
|
+
sage: p = Sym.p()
|
|
127
|
+
sage: s = Sym.s()
|
|
128
|
+
sage: m = Sym.m()
|
|
129
|
+
|
|
130
|
+
sage: p(w([1]))
|
|
131
|
+
p[1]
|
|
132
|
+
sage: m(w([1]))
|
|
133
|
+
m[1]
|
|
134
|
+
sage: e(w([1]))
|
|
135
|
+
e[1]
|
|
136
|
+
sage: h(w([1]))
|
|
137
|
+
h[1]
|
|
138
|
+
sage: s(w([1]))
|
|
139
|
+
s[1]
|
|
140
|
+
|
|
141
|
+
sage: p(w([2]))
|
|
142
|
+
-1/2*p[1, 1] + 1/2*p[2]
|
|
143
|
+
sage: m(w([2]))
|
|
144
|
+
-m[1, 1]
|
|
145
|
+
sage: e(w([2]))
|
|
146
|
+
-e[2]
|
|
147
|
+
sage: h(w([2]))
|
|
148
|
+
-h[1, 1] + h[2]
|
|
149
|
+
sage: s(w([2]))
|
|
150
|
+
-s[1, 1]
|
|
151
|
+
|
|
152
|
+
sage: p(w([3]))
|
|
153
|
+
-1/3*p[1, 1, 1] + 1/3*p[3]
|
|
154
|
+
sage: m(w([3]))
|
|
155
|
+
-2*m[1, 1, 1] - m[2, 1]
|
|
156
|
+
sage: e(w([3]))
|
|
157
|
+
-e[2, 1] + e[3]
|
|
158
|
+
sage: h(w([3]))
|
|
159
|
+
-h[2, 1] + h[3]
|
|
160
|
+
sage: s(w([3]))
|
|
161
|
+
-s[2, 1]
|
|
162
|
+
|
|
163
|
+
sage: Sym = SymmetricFunctions(ZZ)
|
|
164
|
+
sage: w = Sym.w()
|
|
165
|
+
sage: e = Sym.e()
|
|
166
|
+
sage: h = Sym.h()
|
|
167
|
+
sage: s = Sym.s()
|
|
168
|
+
sage: m = Sym.m()
|
|
169
|
+
sage: p = Sym.p()
|
|
170
|
+
sage: m(w([4]))
|
|
171
|
+
-9*m[1, 1, 1, 1] - 4*m[2, 1, 1] - 2*m[2, 2] - m[3, 1]
|
|
172
|
+
sage: e(w([4]))
|
|
173
|
+
-e[2, 1, 1] + e[3, 1] - e[4]
|
|
174
|
+
sage: h(w([4]))
|
|
175
|
+
-h[1, 1, 1, 1] + 2*h[2, 1, 1] - h[2, 2] - h[3, 1] + h[4]
|
|
176
|
+
sage: s(w([4]))
|
|
177
|
+
-s[1, 1, 1, 1] - s[2, 1, 1] - s[2, 2] - s[3, 1]
|
|
178
|
+
|
|
179
|
+
Some examples of conversions the other way::
|
|
180
|
+
|
|
181
|
+
sage: w(h[3])
|
|
182
|
+
w[1, 1, 1] + w[2, 1] + w[3]
|
|
183
|
+
sage: w(e[3])
|
|
184
|
+
-w[2, 1] + w[3]
|
|
185
|
+
sage: w(m[2,1])
|
|
186
|
+
2*w[2, 1] - 3*w[3]
|
|
187
|
+
sage: w(p[3])
|
|
188
|
+
w[1, 1, 1] + 3*w[3]
|
|
189
|
+
|
|
190
|
+
Antipodes::
|
|
191
|
+
|
|
192
|
+
sage: w([1]).antipode()
|
|
193
|
+
-w[1]
|
|
194
|
+
sage: w([2]).antipode()
|
|
195
|
+
-w[1, 1] - w[2]
|
|
196
|
+
|
|
197
|
+
The following holds for all odd `i` and is easily proven by
|
|
198
|
+
induction::
|
|
199
|
+
|
|
200
|
+
sage: all(w([i]).antipode() == -w([i]) for i in range(1, 10, 2))
|
|
201
|
+
True
|
|
202
|
+
|
|
203
|
+
The Witt basis does not allow for simple expressions for
|
|
204
|
+
comultiplication and antipode in general (this is related to the
|
|
205
|
+
fact that the sum of two Witt vectors isn't easily described in
|
|
206
|
+
terms of the components). Therefore, a number of computations with
|
|
207
|
+
Witt symmetric functions pass through the complete homogeneous
|
|
208
|
+
symmetric functions by default.
|
|
209
|
+
"""
|
|
210
|
+
def __init__(self, Sym):
|
|
211
|
+
r"""
|
|
212
|
+
Initialize ``self``.
|
|
213
|
+
|
|
214
|
+
TESTS::
|
|
215
|
+
|
|
216
|
+
sage: w = SymmetricFunctions(QQ).w()
|
|
217
|
+
sage: TestSuite(w).run(skip=['_test_associativity', '_test_distributivity', '_test_prod'])
|
|
218
|
+
sage: TestSuite(w).run(elements=[w[1,1]+w[2], w[1]+2*w[1,1]])
|
|
219
|
+
"""
|
|
220
|
+
multiplicative.SymmetricFunctionAlgebra_multiplicative.__init__(self, Sym, "Witt", 'w')
|
|
221
|
+
|
|
222
|
+
self._h = Sym.h()
|
|
223
|
+
self.register_coercion(self._h._module_morphism(self._h_to_w_on_basis, codomain=self))
|
|
224
|
+
self._h.register_coercion(self._module_morphism(self._w_to_h_on_basis, codomain=self._h))
|
|
225
|
+
|
|
226
|
+
self._e = Sym.e()
|
|
227
|
+
self.register_coercion(self._e._module_morphism(self._e_to_w_on_basis, codomain=self))
|
|
228
|
+
self._e.register_coercion(self._module_morphism(self._w_to_e_on_basis, codomain=self._e))
|
|
229
|
+
|
|
230
|
+
self._p = Sym.p()
|
|
231
|
+
self.register_coercion(self._p._module_morphism(self._p_to_w_on_basis, codomain=self))
|
|
232
|
+
self._p.register_coercion(self._module_morphism(self._w_to_p_on_basis, codomain=self._p))
|
|
233
|
+
|
|
234
|
+
@cached_method
|
|
235
|
+
def _h_to_w_on_basis(self, lam):
|
|
236
|
+
r"""
|
|
237
|
+
Return the complete homogeneous symmetric function ``h[lam]``
|
|
238
|
+
expanded in the Witt basis, where ``lam`` is a partition.
|
|
239
|
+
|
|
240
|
+
INPUT:
|
|
241
|
+
|
|
242
|
+
- ``lam`` -- a partition
|
|
243
|
+
|
|
244
|
+
OUTPUT: the expansion of ``h[lam]`` in the Witt basis ``self``
|
|
245
|
+
|
|
246
|
+
EXAMPLES::
|
|
247
|
+
|
|
248
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
249
|
+
sage: h = Sym.homogeneous()
|
|
250
|
+
sage: w = Sym.w()
|
|
251
|
+
sage: w._h_to_w_on_basis(Partition([]))
|
|
252
|
+
w[]
|
|
253
|
+
sage: w._h_to_w_on_basis(Partition([4,2,1]))
|
|
254
|
+
w[1, 1, 1, 1, 1, 1, 1] + 2*w[2, 1, 1, 1, 1, 1] + 2*w[2, 2, 1, 1, 1]
|
|
255
|
+
+ w[2, 2, 2, 1] + w[3, 1, 1, 1, 1] + w[3, 2, 1, 1]
|
|
256
|
+
+ w[4, 1, 1, 1] + w[4, 2, 1]
|
|
257
|
+
sage: h(w._h_to_w_on_basis(Partition([3,1]))) == h[3,1]
|
|
258
|
+
True
|
|
259
|
+
"""
|
|
260
|
+
if not lam:
|
|
261
|
+
return self.one()
|
|
262
|
+
P = self._indices
|
|
263
|
+
if len(lam) == 1:
|
|
264
|
+
one = self.base_ring().one()
|
|
265
|
+
n = lam[0]
|
|
266
|
+
return self.element_class(self, {P(mu): one for mu in ZS1_iterator(n)})
|
|
267
|
+
# Multiply by the smallest part to minimize the number of products
|
|
268
|
+
return self._h_to_w_on_basis(P(lam[:-1])) * self._h_to_w_on_basis(P([lam[-1]]))
|
|
269
|
+
|
|
270
|
+
@cached_method
|
|
271
|
+
def _w_to_h_on_basis(self, lam):
|
|
272
|
+
r"""
|
|
273
|
+
Return the Witt symmetric function ``w[lam]`` expanded in the
|
|
274
|
+
complete homogeneous basis, where ``lam`` is a partition.
|
|
275
|
+
|
|
276
|
+
INPUT:
|
|
277
|
+
|
|
278
|
+
- ``lam`` -- a partition
|
|
279
|
+
|
|
280
|
+
OUTPUT:
|
|
281
|
+
|
|
282
|
+
- the expansion of ``w[lam]`` in the complete
|
|
283
|
+
homogeneous basis of ``self.realization_of()``
|
|
284
|
+
|
|
285
|
+
EXAMPLES::
|
|
286
|
+
|
|
287
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
288
|
+
sage: h = Sym.homogeneous()
|
|
289
|
+
sage: w = Sym.w()
|
|
290
|
+
sage: w._w_to_h_on_basis(Partition([]))
|
|
291
|
+
h[]
|
|
292
|
+
sage: w._w_to_h_on_basis(Partition([4,2,1]))
|
|
293
|
+
h[1, 1, 1, 1, 1, 1, 1] - 3*h[2, 1, 1, 1, 1, 1] + 3*h[2, 2, 1, 1, 1]
|
|
294
|
+
- h[2, 2, 2, 1] + h[3, 1, 1, 1, 1] - h[3, 2, 1, 1]
|
|
295
|
+
- h[4, 1, 1, 1] + h[4, 2, 1]
|
|
296
|
+
sage: w(w._w_to_h_on_basis(Partition([3,1]))) == w[3,1]
|
|
297
|
+
True
|
|
298
|
+
"""
|
|
299
|
+
if not lam:
|
|
300
|
+
return self._h.one()
|
|
301
|
+
P = self._indices
|
|
302
|
+
if len(lam) == 1:
|
|
303
|
+
n = lam[0]
|
|
304
|
+
it = ZS1_iterator(n)
|
|
305
|
+
next(it) # skip the first partition, which is [n]
|
|
306
|
+
return self._h[n] - self._h.sum(self._w_to_h_on_basis(P(mu)) for mu in it)
|
|
307
|
+
# Multiply by the smallest part to minimize the number of products
|
|
308
|
+
return self._w_to_h_on_basis(P(lam[:-1])) * self._w_to_h_on_basis(P([lam[-1]]))
|
|
309
|
+
|
|
310
|
+
@cached_method
|
|
311
|
+
def _e_to_w_on_basis(self, lam):
|
|
312
|
+
r"""
|
|
313
|
+
Return the elementary symmetric function ``e[lam]`` expanded in
|
|
314
|
+
the Witt basis, where ``lam`` is a partition.
|
|
315
|
+
|
|
316
|
+
INPUT:
|
|
317
|
+
|
|
318
|
+
- ``lam`` -- a partition
|
|
319
|
+
|
|
320
|
+
OUTPUT: the expansion of ``e[lam]`` in the Witt basis ``self``
|
|
321
|
+
|
|
322
|
+
EXAMPLES::
|
|
323
|
+
|
|
324
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
325
|
+
sage: e = Sym.elementary()
|
|
326
|
+
sage: w = Sym.w()
|
|
327
|
+
sage: w._e_to_w_on_basis(Partition([]))
|
|
328
|
+
w[]
|
|
329
|
+
sage: w._e_to_w_on_basis(Partition([4,2,1]))
|
|
330
|
+
-w[3, 2, 1, 1] + w[4, 2, 1]
|
|
331
|
+
sage: e(w._e_to_w_on_basis(Partition([3,1]))) == e[3,1]
|
|
332
|
+
True
|
|
333
|
+
"""
|
|
334
|
+
if not lam:
|
|
335
|
+
return self.one()
|
|
336
|
+
P = self._indices
|
|
337
|
+
if len(lam) == 1:
|
|
338
|
+
R = self.base_ring()
|
|
339
|
+
n = lam[0]
|
|
340
|
+
index_set = IntegerListsLex(n, min_part=1, max_slope=-1, element_constructor=P)
|
|
341
|
+
return self.element_class(self, {mu: R((-1)**(n-len(mu))) for mu in index_set})
|
|
342
|
+
# Multiply by the smallest part to minimize the number of products
|
|
343
|
+
return self._e_to_w_on_basis(P(lam[:-1])) * self._e_to_w_on_basis(P([lam[-1]]))
|
|
344
|
+
|
|
345
|
+
@cached_method
|
|
346
|
+
def _w_to_e_on_basis(self, lam):
|
|
347
|
+
r"""
|
|
348
|
+
Return the Witt symmetric function ``w[lam]``
|
|
349
|
+
expanded in the elementary symmetric basis, where
|
|
350
|
+
``lam`` is a partition.
|
|
351
|
+
|
|
352
|
+
INPUT:
|
|
353
|
+
|
|
354
|
+
- ``lam`` -- a partition
|
|
355
|
+
|
|
356
|
+
OUTPUT:
|
|
357
|
+
|
|
358
|
+
- the expansion of ``w[lam]`` in the elementary
|
|
359
|
+
symmetric basis of ``self.realization_of()``
|
|
360
|
+
|
|
361
|
+
EXAMPLES::
|
|
362
|
+
|
|
363
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
364
|
+
sage: e = Sym.elementary()
|
|
365
|
+
sage: w = Sym.w()
|
|
366
|
+
sage: w._w_to_e_on_basis(Partition([]))
|
|
367
|
+
e[]
|
|
368
|
+
sage: w._w_to_e_on_basis(Partition([4,2,1]))
|
|
369
|
+
e[2, 2, 1, 1, 1] - e[3, 2, 1, 1] + e[4, 2, 1]
|
|
370
|
+
sage: w(w._w_to_e_on_basis(Partition([3,1]))) == w[3,1]
|
|
371
|
+
True
|
|
372
|
+
"""
|
|
373
|
+
if not lam:
|
|
374
|
+
return self._e.one()
|
|
375
|
+
P = self._indices
|
|
376
|
+
if len(lam) == 1:
|
|
377
|
+
R = self.base_ring()
|
|
378
|
+
n = lam[0]
|
|
379
|
+
index_set = IntegerListsLex(n, min_part=1, min_length=2, max_slope=-1, element_constructor=P)
|
|
380
|
+
return R((-1)**(n-1)) * self._e[n] + self._e.linear_combination((self._w_to_e_on_basis(mu), R((-1)**len(mu)))
|
|
381
|
+
for mu in index_set)
|
|
382
|
+
# Multiply by the smallest part to minimize the number of products
|
|
383
|
+
return self._w_to_e_on_basis(P(lam[:-1])) * self._w_to_e_on_basis(P([lam[-1]]))
|
|
384
|
+
|
|
385
|
+
@cached_method
|
|
386
|
+
def _p_to_w_on_basis(self, lam):
|
|
387
|
+
r"""
|
|
388
|
+
Return the powersum symmetric function ``p[lam]`` expanded in
|
|
389
|
+
the Witt basis, where ``lam`` is a partition.
|
|
390
|
+
|
|
391
|
+
INPUT:
|
|
392
|
+
|
|
393
|
+
- ``lam`` -- a partition
|
|
394
|
+
|
|
395
|
+
OUTPUT: the expansion of ``p[lam]`` in the Witt basis ``self``
|
|
396
|
+
|
|
397
|
+
EXAMPLES::
|
|
398
|
+
|
|
399
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
400
|
+
sage: p = Sym.power()
|
|
401
|
+
sage: w = Sym.w()
|
|
402
|
+
sage: w._p_to_w_on_basis(Partition([]))
|
|
403
|
+
w[]
|
|
404
|
+
sage: w._p_to_w_on_basis(Partition([4,2,1]))
|
|
405
|
+
w[1, 1, 1, 1, 1, 1, 1] + 2*w[2, 1, 1, 1, 1, 1] + 2*w[2, 2, 1, 1, 1]
|
|
406
|
+
+ 4*w[2, 2, 2, 1] + 4*w[4, 1, 1, 1] + 8*w[4, 2, 1]
|
|
407
|
+
sage: p(w._p_to_w_on_basis(Partition([3,1]))) == p[3,1]
|
|
408
|
+
True
|
|
409
|
+
"""
|
|
410
|
+
if not lam:
|
|
411
|
+
return self.one()
|
|
412
|
+
P = self._indices
|
|
413
|
+
if len(lam) == 1:
|
|
414
|
+
R = self.base_ring()
|
|
415
|
+
n = lam[0]
|
|
416
|
+
return self.element_class(self, {P([d] * (n // d)): R(d) for d in divisors(n)})
|
|
417
|
+
# Multiply by the smallest part to minimize the number of products
|
|
418
|
+
return self._p_to_w_on_basis(P(lam[:-1])) * self._p_to_w_on_basis(P([lam[-1]]))
|
|
419
|
+
|
|
420
|
+
@cached_method
|
|
421
|
+
def _w_to_p_on_basis(self, lam):
|
|
422
|
+
r"""
|
|
423
|
+
Return the Witt symmetric function ``w[lam]`` expanded in the
|
|
424
|
+
powersum basis, where ``lam`` is a partition.
|
|
425
|
+
|
|
426
|
+
This assumes that the ``coerce_p`` keyword has been set to ``True`` in
|
|
427
|
+
the initialization of ``self`` (otherwise the cache does not exist).
|
|
428
|
+
|
|
429
|
+
INPUT:
|
|
430
|
+
|
|
431
|
+
- ``lam`` -- a partition
|
|
432
|
+
|
|
433
|
+
OUTPUT:
|
|
434
|
+
|
|
435
|
+
- the expansion of ``w[lam]`` in the powersum
|
|
436
|
+
basis of ``self.realization_of()``
|
|
437
|
+
|
|
438
|
+
EXAMPLES::
|
|
439
|
+
|
|
440
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
441
|
+
sage: p = Sym.power()
|
|
442
|
+
sage: w = Sym.w()
|
|
443
|
+
sage: w._w_to_p_on_basis(Partition([]))
|
|
444
|
+
p[]
|
|
445
|
+
sage: w._w_to_p_on_basis(Partition([4,2,1]))
|
|
446
|
+
3/16*p[1, 1, 1, 1, 1, 1, 1] - 5/16*p[2, 1, 1, 1, 1, 1]
|
|
447
|
+
+ 3/16*p[2, 2, 1, 1, 1] - 1/16*p[2, 2, 2, 1]
|
|
448
|
+
- 1/8*p[4, 1, 1, 1] + 1/8*p[4, 2, 1]
|
|
449
|
+
sage: w(w._w_to_p_on_basis(Partition([3,1]))) == w[3,1]
|
|
450
|
+
True
|
|
451
|
+
"""
|
|
452
|
+
if not lam:
|
|
453
|
+
return self._p.one()
|
|
454
|
+
P = self._indices
|
|
455
|
+
if len(lam) == 1:
|
|
456
|
+
R = self.base_ring()
|
|
457
|
+
n = lam[0]
|
|
458
|
+
return ~R(n) * self._p[n] - self._p.linear_combination((self._w_to_p_on_basis(P([d] * (n // d))), R(d) / R(n))
|
|
459
|
+
for d in divisors(n) if d != n)
|
|
460
|
+
# Multiply by the smallest part to minimize the number of products
|
|
461
|
+
return self._w_to_p_on_basis(P(lam[:-1])) * self._w_to_p_on_basis(P([lam[-1]]))
|
|
462
|
+
|
|
463
|
+
def coproduct(self, elt):
|
|
464
|
+
r"""
|
|
465
|
+
Return the coproduct of the element ``elt``.
|
|
466
|
+
|
|
467
|
+
INPUT:
|
|
468
|
+
|
|
469
|
+
- ``elt`` -- a symmetric function written in this basis
|
|
470
|
+
|
|
471
|
+
OUTPUT:
|
|
472
|
+
|
|
473
|
+
The coproduct acting on ``elt``; the result is an element of the
|
|
474
|
+
tensor squared of the basis ``self``.
|
|
475
|
+
|
|
476
|
+
EXAMPLES::
|
|
477
|
+
|
|
478
|
+
sage: w = SymmetricFunctions(QQ).w()
|
|
479
|
+
sage: w[2].coproduct()
|
|
480
|
+
w[] # w[2] - w[1] # w[1] + w[2] # w[]
|
|
481
|
+
sage: w.coproduct(w[2])
|
|
482
|
+
w[] # w[2] - w[1] # w[1] + w[2] # w[]
|
|
483
|
+
sage: w[2,1].coproduct()
|
|
484
|
+
w[] # w[2, 1] - w[1] # w[1, 1] + w[1] # w[2] - w[1, 1] # w[1] + w[2] # w[1] + w[2, 1] # w[]
|
|
485
|
+
sage: w.coproduct(w[2,1])
|
|
486
|
+
w[] # w[2, 1] - w[1] # w[1, 1] + w[1] # w[2] - w[1, 1] # w[1] + w[2] # w[1] + w[2, 1] # w[]
|
|
487
|
+
"""
|
|
488
|
+
from sage.categories.tensor import tensor
|
|
489
|
+
return self.tensor_square().sum(coeff * tensor([self(self._h[x]), self(self._h[y])])
|
|
490
|
+
for ((x, y), coeff) in self._h(elt).coproduct())
|
|
491
|
+
|
|
492
|
+
def verschiebung(self, n):
|
|
493
|
+
r"""
|
|
494
|
+
Return the image of the symmetric function ``self`` under the
|
|
495
|
+
`n`-th Verschiebung operator.
|
|
496
|
+
|
|
497
|
+
The `n`-th Verschiebung operator `\mathbf{V}_n` is defined to be
|
|
498
|
+
the unique algebra endomorphism `V` of the ring of symmetric
|
|
499
|
+
functions that satisfies `V(h_r) = h_{r/n}` for every positive
|
|
500
|
+
integer `r` divisible by `n`, and satisfies `V(h_r) = 0` for
|
|
501
|
+
every positive integer `r` not divisible by `n`. This operator
|
|
502
|
+
`\mathbf{V}_n` is a Hopf algebra endomorphism. For every
|
|
503
|
+
nonnegative integer `r` with `n \mid r`, it satisfies
|
|
504
|
+
|
|
505
|
+
.. MATH::
|
|
506
|
+
|
|
507
|
+
\mathbf{V}_n(h_r) = h_{r/n},
|
|
508
|
+
\quad \mathbf{V}_n(p_r) = n p_{r/n},
|
|
509
|
+
\quad \mathbf{V}_n(e_r) = (-1)^{r - r/n} e_{r/n},
|
|
510
|
+
\quad \mathbf{V}_n(w_r) = w_{r/n},
|
|
511
|
+
|
|
512
|
+
(where `h` is the complete homogeneous basis, `p` is the
|
|
513
|
+
powersum basis, `e` is the elementary basis, and `w` is the
|
|
514
|
+
Witt basis). For every nonnegative integer `r` with `n \nmid r`,
|
|
515
|
+
it satisfes
|
|
516
|
+
|
|
517
|
+
.. MATH::
|
|
518
|
+
|
|
519
|
+
\mathbf{V}_n(h_r) = \mathbf{V}_n(p_r) = \mathbf{V}_n(e_r)
|
|
520
|
+
= \mathbf{V}_n(w_r) = 0.
|
|
521
|
+
|
|
522
|
+
The `n`-th Verschiebung operator is also called the `n`-th
|
|
523
|
+
Verschiebung endomorphism. Its name derives from the Verschiebung
|
|
524
|
+
(German for "shift") endomorphism of the Witt vectors.
|
|
525
|
+
|
|
526
|
+
The `n`-th Verschiebung operator is adjoint to the `n`-th
|
|
527
|
+
Frobenius operator (see :meth:`frobenius` for its definition)
|
|
528
|
+
with respect to the Hall scalar product (:meth:`scalar`).
|
|
529
|
+
|
|
530
|
+
The action of the `n`-th Verschiebung operator on the Schur basis
|
|
531
|
+
can also be computed explicitly. The following (probably clumsier
|
|
532
|
+
than necessary) description can be obtained by solving exercise
|
|
533
|
+
7.61 in Stanley's [STA]_.
|
|
534
|
+
|
|
535
|
+
Let `\lambda` be a partition. Let `n` be a positive integer. If
|
|
536
|
+
the `n`-core of `\lambda` is nonempty, then
|
|
537
|
+
`\mathbf{V}_n(s_\lambda) = 0`. Otherwise, the following method
|
|
538
|
+
computes `\mathbf{V}_n(s_\lambda)`: Write the partition `\lambda`
|
|
539
|
+
in the form `(\lambda_1, \lambda_2, \ldots, \lambda_{ns})` for some
|
|
540
|
+
nonnegative integer `s`. (If `n` does not divide the length of
|
|
541
|
+
`\lambda`, then this is achieved by adding trailing zeroes to
|
|
542
|
+
`\lambda`.) Set `\beta_i = \lambda_i + ns - i` for every
|
|
543
|
+
`s \in \{ 1, 2, \ldots, ns \}`. Then,
|
|
544
|
+
`(\beta_1, \beta_2, \ldots, \beta_{ns})` is a strictly decreasing
|
|
545
|
+
sequence of nonnegative integers. Stably sort the list
|
|
546
|
+
`(1, 2, \ldots, ns)` in order of (weakly) increasing remainder of
|
|
547
|
+
`-1 - \beta_i` modulo `n`. Let `\xi` be the sign of the
|
|
548
|
+
permutation that is used for this sorting. Let `\psi` be the sign
|
|
549
|
+
of the permutation that is used to stably sort the list
|
|
550
|
+
`(1, 2, \ldots, ns)` in order of (weakly) increasing remainder of
|
|
551
|
+
`i - 1` modulo `n`. (Notice that `\psi = (-1)^{n(n-1)s(s-1)/4}`.)
|
|
552
|
+
Then, `\mathbf{V}_n(s_\lambda) = \xi \psi \prod_{i = 0}^{n - 1}
|
|
553
|
+
s_{\lambda^{(i)}}`, where
|
|
554
|
+
`(\lambda^{(0)}, \lambda^{(1)}, \ldots, \lambda^{(n - 1)})`
|
|
555
|
+
is the `n`-quotient of `\lambda`.
|
|
556
|
+
|
|
557
|
+
INPUT:
|
|
558
|
+
|
|
559
|
+
- ``n`` -- positive integer
|
|
560
|
+
|
|
561
|
+
OUTPUT:
|
|
562
|
+
|
|
563
|
+
The result of applying the `n`-th Verschiebung operator (on the
|
|
564
|
+
ring of symmetric functions) to ``self``.
|
|
565
|
+
|
|
566
|
+
EXAMPLES::
|
|
567
|
+
|
|
568
|
+
sage: Sym = SymmetricFunctions(ZZ)
|
|
569
|
+
sage: w = Sym.w()
|
|
570
|
+
sage: w[3].verschiebung(2)
|
|
571
|
+
0
|
|
572
|
+
sage: w[4].verschiebung(4)
|
|
573
|
+
w[1]
|
|
574
|
+
|
|
575
|
+
TESTS:
|
|
576
|
+
|
|
577
|
+
Let us check that this method on the Witt basis gives the
|
|
578
|
+
same result as the implementation in sfa.py on the complete
|
|
579
|
+
homogeneous basis::
|
|
580
|
+
|
|
581
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
582
|
+
sage: w = Sym.w(); h = Sym.h()
|
|
583
|
+
sage: all( w(h(lam)).verschiebung(3) == w(h(lam).verschiebung(3))
|
|
584
|
+
....: for lam in Partitions(6) )
|
|
585
|
+
True
|
|
586
|
+
sage: all( h(w(lam)).verschiebung(2) == h(w(lam).verschiebung(2))
|
|
587
|
+
....: for lam in Partitions(4) )
|
|
588
|
+
True
|
|
589
|
+
"""
|
|
590
|
+
parent = self.parent()
|
|
591
|
+
w_coords_of_self = self._monomial_coefficients.items()
|
|
592
|
+
P = self._indices
|
|
593
|
+
dct = {P([i // n for i in lam]): coeff
|
|
594
|
+
for lam, coeff in w_coords_of_self
|
|
595
|
+
if all(i % n == 0 for i in lam)}
|
|
596
|
+
return parent._from_dict(dct)
|
|
597
|
+
|
|
598
|
+
def _omega_on_basis(self, lam):
|
|
599
|
+
r"""
|
|
600
|
+
Return the omega involution on the basis element indexed
|
|
601
|
+
by ``lam``.
|
|
602
|
+
|
|
603
|
+
ALGORITHM:
|
|
604
|
+
|
|
605
|
+
We use that `\omega` is an algebra involution to split the
|
|
606
|
+
computation into the even and odd parts. It is easy to prove
|
|
607
|
+
that `\omega w_i = w_i` for odd `i > 0`. For the even parts,
|
|
608
|
+
we convert to the `h` basis and pull back from the `e` basis.
|
|
609
|
+
|
|
610
|
+
EXAMPLES::
|
|
611
|
+
|
|
612
|
+
sage: w = SymmetricFunctions(QQ).w()
|
|
613
|
+
sage: w._omega_on_basis([2])
|
|
614
|
+
-w[1, 1] - w[2]
|
|
615
|
+
sage: w._omega_on_basis([3])
|
|
616
|
+
w[3]
|
|
617
|
+
sage: w._omega_on_basis([2,2])
|
|
618
|
+
w[1, 1, 1, 1] + 2*w[2, 1, 1] + w[2, 2]
|
|
619
|
+
sage: w._omega_on_basis([329,125,2,2,1,1,1,1,1])
|
|
620
|
+
w[329, 125, 1, 1, 1, 1, 1, 1, 1, 1, 1]
|
|
621
|
+
+ 2*w[329, 125, 2, 1, 1, 1, 1, 1, 1, 1]
|
|
622
|
+
+ w[329, 125, 2, 2, 1, 1, 1, 1, 1]
|
|
623
|
+
sage: w._omega_on_basis([])
|
|
624
|
+
w[]
|
|
625
|
+
"""
|
|
626
|
+
lam_even = []
|
|
627
|
+
lam_odd = []
|
|
628
|
+
for i in lam:
|
|
629
|
+
if i % 2:
|
|
630
|
+
lam_odd.append(i)
|
|
631
|
+
else:
|
|
632
|
+
lam_even.append(i)
|
|
633
|
+
if not lam_even:
|
|
634
|
+
if not lam_odd:
|
|
635
|
+
return self.one()
|
|
636
|
+
return self.monomial(self._indices(lam_odd))
|
|
637
|
+
ret_even = self._omega_even(self._indices(lam_even))
|
|
638
|
+
if not lam_odd:
|
|
639
|
+
return ret_even
|
|
640
|
+
return ret_even * self.monomial(self._indices(lam_odd))
|
|
641
|
+
|
|
642
|
+
@cached_method
|
|
643
|
+
def _omega_even(self, lam_even):
|
|
644
|
+
r"""
|
|
645
|
+
Return the omega involution on the basis element given by
|
|
646
|
+
a partition with only even parts.
|
|
647
|
+
|
|
648
|
+
EXAMPLES::
|
|
649
|
+
|
|
650
|
+
sage: w = SymmetricFunctions(QQ).w()
|
|
651
|
+
sage: P = w.indices()
|
|
652
|
+
sage: Sw422 = w._omega_even(P([4,2,2])); Sw422
|
|
653
|
+
-w[1, 1, 1, 1, 1, 1, 1, 1] - 3*w[2, 1, 1, 1, 1, 1, 1]
|
|
654
|
+
- 4*w[2, 2, 1, 1, 1, 1] - 3*w[2, 2, 2, 1, 1] - w[2, 2, 2, 2]
|
|
655
|
+
- w[4, 1, 1, 1, 1] - 2*w[4, 2, 1, 1] - w[4, 2, 2]
|
|
656
|
+
sage: Sw2 = w._omega_even(P([2])); Sw2
|
|
657
|
+
-w[1, 1] - w[2]
|
|
658
|
+
sage: Sw4 = w._omega_even(P([4])); Sw4
|
|
659
|
+
-w[1, 1, 1, 1] - w[2, 1, 1] - w[2, 2] - w[4]
|
|
660
|
+
sage: Sw422 == Sw4 * Sw2^2
|
|
661
|
+
True
|
|
662
|
+
"""
|
|
663
|
+
dct = self._h(self.monomial(lam_even)).monomial_coefficients(copy=False)
|
|
664
|
+
eelt = self._e.element_class(self._e, dict(dct.items()))
|
|
665
|
+
return self(eelt)
|
|
666
|
+
|
|
667
|
+
class Element(multiplicative.SymmetricFunctionAlgebra_multiplicative.Element):
|
|
668
|
+
def omega(self):
|
|
669
|
+
r"""
|
|
670
|
+
Return the image of ``self`` under the omega automorphism.
|
|
671
|
+
|
|
672
|
+
The *omega automorphism* is defined to be the unique algebra
|
|
673
|
+
endomorphism `\omega` of the ring of symmetric functions that
|
|
674
|
+
satisfies `\omega(e_k) = h_k` for all positive integers `k`
|
|
675
|
+
(where `e_k` stands for the `k`-th elementary symmetric
|
|
676
|
+
function, and `h_k` stands for the `k`-th complete homogeneous
|
|
677
|
+
symmetric function). It furthermore is a Hopf algebra
|
|
678
|
+
endomorphism and an involution, and it is also known as the
|
|
679
|
+
*omega involution*. It sends the power-sum symmetric function
|
|
680
|
+
`p_k` to `(-1)^{k-1} p_k` for every positive integer `k`.
|
|
681
|
+
|
|
682
|
+
The images of some bases under the omega automorphism are given by
|
|
683
|
+
|
|
684
|
+
.. MATH::
|
|
685
|
+
|
|
686
|
+
\omega(e_{\lambda}) = h_{\lambda}, \qquad
|
|
687
|
+
\omega(h_{\lambda}) = e_{\lambda}, \qquad
|
|
688
|
+
\omega(p_{\lambda}) = (-1)^{|\lambda| - \ell(\lambda)}
|
|
689
|
+
p_{\lambda}, \qquad
|
|
690
|
+
\omega(s_{\lambda}) = s_{\lambda^{\prime}},
|
|
691
|
+
|
|
692
|
+
where `\lambda` is any partition, where `\ell(\lambda)` denotes
|
|
693
|
+
the length (:meth:`~sage.combinat.partition.Partition.length`)
|
|
694
|
+
of the partition `\lambda`, where `\lambda^{\prime}` denotes the
|
|
695
|
+
conjugate partition
|
|
696
|
+
(:meth:`~sage.combinat.partition.Partition.conjugate`) of
|
|
697
|
+
`\lambda`, and where the usual notations for bases are used
|
|
698
|
+
(`e` = elementary, `h` = complete homogeneous, `p` = powersum,
|
|
699
|
+
`s` = Schur).
|
|
700
|
+
|
|
701
|
+
:meth:`omega_involution` is a synonym for the :meth:`omega`
|
|
702
|
+
method.
|
|
703
|
+
|
|
704
|
+
EXAMPLES::
|
|
705
|
+
|
|
706
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
707
|
+
sage: w = Sym.w()
|
|
708
|
+
sage: a = w([4,3,1,1]); a
|
|
709
|
+
w[4, 3, 1, 1]
|
|
710
|
+
sage: a.omega()
|
|
711
|
+
-w[3, 1, 1, 1, 1, 1, 1] - w[3, 2, 1, 1, 1, 1]
|
|
712
|
+
- w[3, 2, 2, 1, 1] - w[4, 3, 1, 1]
|
|
713
|
+
|
|
714
|
+
sage: h = Sym.h()
|
|
715
|
+
sage: all(w(h(w[la]).omega()) == w[la].omega()
|
|
716
|
+
....: for n in range(6) for la in Partitions(n))
|
|
717
|
+
True
|
|
718
|
+
"""
|
|
719
|
+
P = self.parent()
|
|
720
|
+
return P.linear_combination((P._omega_on_basis(lam), coeff)
|
|
721
|
+
for lam, coeff in self._monomial_coefficients.items())
|