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,549 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.modules
|
|
3
|
+
"""
|
|
4
|
+
Elementary symmetric functions
|
|
5
|
+
"""
|
|
6
|
+
#*****************************************************************************
|
|
7
|
+
# Copyright (C) 2007 Mike Hansen <mhansen@gmail.com>
|
|
8
|
+
# 2012 Mike Zabrocki <mike.zabrocki@gmail.com>
|
|
9
|
+
# 2012 Anne Schilling <anne@math.ucdavis.edu>
|
|
10
|
+
#
|
|
11
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
12
|
+
#
|
|
13
|
+
# This code is distributed in the hope that it will be useful,
|
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
16
|
+
# General Public License for more details.
|
|
17
|
+
#
|
|
18
|
+
# The full text of the GPL is available at:
|
|
19
|
+
#
|
|
20
|
+
# http://www.gnu.org/licenses/
|
|
21
|
+
#*****************************************************************************
|
|
22
|
+
from sage.arith.misc import binomial, factorial
|
|
23
|
+
from sage.combinat.partition import Partition
|
|
24
|
+
from sage.combinat.sf import classical, multiplicative
|
|
25
|
+
from sage.misc.misc_c import prod
|
|
26
|
+
from sage.rings.infinity import infinity
|
|
27
|
+
|
|
28
|
+
###################################
|
|
29
|
+
# #
|
|
30
|
+
# Elementary Symmetric Functions #
|
|
31
|
+
# #
|
|
32
|
+
###################################
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class SymmetricFunctionAlgebra_elementary(multiplicative.SymmetricFunctionAlgebra_multiplicative):
|
|
36
|
+
def __init__(self, Sym):
|
|
37
|
+
"""
|
|
38
|
+
A class for methods for the elementary basis of the symmetric functions.
|
|
39
|
+
|
|
40
|
+
INPUT:
|
|
41
|
+
|
|
42
|
+
- ``self`` -- an elementary basis of the symmetric functions
|
|
43
|
+
- ``Sym`` -- an instance of the ring of symmetric functions
|
|
44
|
+
|
|
45
|
+
TESTS::
|
|
46
|
+
|
|
47
|
+
sage: e = SymmetricFunctions(QQ).e()
|
|
48
|
+
sage: e == loads(dumps(e))
|
|
49
|
+
True
|
|
50
|
+
sage: TestSuite(e).run(skip=['_test_associativity', '_test_distributivity', '_test_prod'])
|
|
51
|
+
sage: TestSuite(e).run(elements = [e[1,1]+e[2], e[1]+2*e[1,1]])
|
|
52
|
+
"""
|
|
53
|
+
classical.SymmetricFunctionAlgebra_classical.__init__(self, Sym, "elementary", 'e')
|
|
54
|
+
|
|
55
|
+
def _dual_basis_default(self):
|
|
56
|
+
"""
|
|
57
|
+
Return the default value for ``self.dual_basis()``.
|
|
58
|
+
|
|
59
|
+
This method returns the dual basis to the elementary basis
|
|
60
|
+
with respect to the standard scalar product, that is the
|
|
61
|
+
forgotten basis.
|
|
62
|
+
|
|
63
|
+
EXAMPLES::
|
|
64
|
+
|
|
65
|
+
sage: e = SymmetricFunctions(QQ).e()
|
|
66
|
+
sage: e.dual_basis()
|
|
67
|
+
Symmetric Functions over Rational Field in the forgotten basis
|
|
68
|
+
|
|
69
|
+
TESTS::
|
|
70
|
+
|
|
71
|
+
sage: e._dual_basis_default() is e.dual_basis()
|
|
72
|
+
True
|
|
73
|
+
"""
|
|
74
|
+
return self.dual_basis(scalar=None, prefix='f', basis_name='forgotten')
|
|
75
|
+
|
|
76
|
+
def coproduct_on_generators(self, i):
|
|
77
|
+
r"""
|
|
78
|
+
Return the coproduct on ``self[i]``.
|
|
79
|
+
|
|
80
|
+
INPUT:
|
|
81
|
+
|
|
82
|
+
- ``self`` -- an elementary basis of the symmetric functions
|
|
83
|
+
- ``i`` -- nonnegative integer
|
|
84
|
+
|
|
85
|
+
OUTPUT: the coproduct on the elementary generator `e(i)`
|
|
86
|
+
|
|
87
|
+
EXAMPLES::
|
|
88
|
+
|
|
89
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
90
|
+
sage: e = Sym.elementary()
|
|
91
|
+
sage: e.coproduct_on_generators(2)
|
|
92
|
+
e[] # e[2] + e[1] # e[1] + e[2] # e[]
|
|
93
|
+
sage: e.coproduct_on_generators(0)
|
|
94
|
+
e[] # e[]
|
|
95
|
+
"""
|
|
96
|
+
def P(i):
|
|
97
|
+
return Partition([i]) if i else Partition([])
|
|
98
|
+
T = self.tensor_square()
|
|
99
|
+
return T.sum_of_monomials( (P(j), P(i-j)) for j in range(i+1) )
|
|
100
|
+
|
|
101
|
+
def _magma_init_(self, magma):
|
|
102
|
+
"""
|
|
103
|
+
Used in converting this ring to the corresponding ring in MAGMA.
|
|
104
|
+
|
|
105
|
+
EXAMPLES::
|
|
106
|
+
|
|
107
|
+
sage: # optional - magma
|
|
108
|
+
sage: E = SymmetricFunctions(QQ).e()
|
|
109
|
+
sage: t = 4*E[3,2]+9
|
|
110
|
+
sage: mt = magma(t); mt
|
|
111
|
+
9 + 4*$.[3,2]
|
|
112
|
+
sage: mt.sage()
|
|
113
|
+
9*e[] + 4*e[3, 2]
|
|
114
|
+
"""
|
|
115
|
+
B = magma(self.base_ring())
|
|
116
|
+
Bref = B._ref()
|
|
117
|
+
return f"SymmetricFunctionAlgebraElementary({Bref})"
|
|
118
|
+
|
|
119
|
+
class Element(classical.SymmetricFunctionAlgebra_classical.Element):
|
|
120
|
+
def omega(self):
|
|
121
|
+
r"""
|
|
122
|
+
Return the image of ``self`` under the omega automorphism.
|
|
123
|
+
|
|
124
|
+
The *omega automorphism* is defined to be the unique algebra
|
|
125
|
+
endomorphism `\omega` of the ring of symmetric functions that
|
|
126
|
+
satisfies `\omega(e_k) = h_k` for all positive integers `k`
|
|
127
|
+
(where `e_k` stands for the `k`-th elementary symmetric
|
|
128
|
+
function, and `h_k` stands for the `k`-th complete homogeneous
|
|
129
|
+
symmetric function). It furthermore is a Hopf algebra
|
|
130
|
+
endomorphism and an involution, and it is also known as the
|
|
131
|
+
*omega involution*. It sends the power-sum symmetric function
|
|
132
|
+
`p_k` to `(-1)^{k-1} p_k` for every positive integer `k`.
|
|
133
|
+
|
|
134
|
+
The images of some bases under the omega automorphism are given by
|
|
135
|
+
|
|
136
|
+
.. MATH::
|
|
137
|
+
|
|
138
|
+
\omega(e_{\lambda}) = h_{\lambda}, \qquad
|
|
139
|
+
\omega(h_{\lambda}) = e_{\lambda}, \qquad
|
|
140
|
+
\omega(p_{\lambda}) = (-1)^{|\lambda| - \ell(\lambda)}
|
|
141
|
+
p_{\lambda}, \qquad
|
|
142
|
+
\omega(s_{\lambda}) = s_{\lambda^{\prime}},
|
|
143
|
+
|
|
144
|
+
where `\lambda` is any partition, where `\ell(\lambda)` denotes
|
|
145
|
+
the length (:meth:`~sage.combinat.partition.Partition.length`)
|
|
146
|
+
of the partition `\lambda`, where `\lambda^{\prime}` denotes the
|
|
147
|
+
conjugate partition
|
|
148
|
+
(:meth:`~sage.combinat.partition.Partition.conjugate`) of
|
|
149
|
+
`\lambda`, and where the usual notations for bases are used
|
|
150
|
+
(`e` = elementary, `h` = complete homogeneous, `p` = powersum,
|
|
151
|
+
`s` = Schur).
|
|
152
|
+
|
|
153
|
+
:meth:`omega_involution` is a synonym for the :meth:`omega`
|
|
154
|
+
method.
|
|
155
|
+
|
|
156
|
+
EXAMPLES::
|
|
157
|
+
|
|
158
|
+
sage: e = SymmetricFunctions(QQ).e()
|
|
159
|
+
sage: a = e([2,1]); a
|
|
160
|
+
e[2, 1]
|
|
161
|
+
sage: a.omega()
|
|
162
|
+
e[1, 1, 1] - e[2, 1]
|
|
163
|
+
|
|
164
|
+
::
|
|
165
|
+
|
|
166
|
+
sage: h = SymmetricFunctions(QQ).h()
|
|
167
|
+
sage: h(e([2,1]).omega())
|
|
168
|
+
h[2, 1]
|
|
169
|
+
"""
|
|
170
|
+
e = self.parent()
|
|
171
|
+
h = e.realization_of().h()
|
|
172
|
+
return e( h._from_element(self) )
|
|
173
|
+
|
|
174
|
+
omega_involution = omega
|
|
175
|
+
|
|
176
|
+
def verschiebung(self, n):
|
|
177
|
+
r"""
|
|
178
|
+
Return the image of the symmetric function ``self`` under the
|
|
179
|
+
`n`-th Verschiebung operator.
|
|
180
|
+
|
|
181
|
+
The `n`-th Verschiebung operator `\mathbf{V}_n` is defined to be
|
|
182
|
+
the unique algebra endomorphism `V` of the ring of symmetric
|
|
183
|
+
functions that satisfies `V(h_r) = h_{r/n}` for every positive
|
|
184
|
+
integer `r` divisible by `n`, and satisfies `V(h_r) = 0` for
|
|
185
|
+
every positive integer `r` not divisible by `n`. This operator
|
|
186
|
+
`\mathbf{V}_n` is a Hopf algebra endomorphism. For every
|
|
187
|
+
nonnegative integer `r` with `n \mid r`, it satisfies
|
|
188
|
+
|
|
189
|
+
.. MATH::
|
|
190
|
+
|
|
191
|
+
\mathbf{V}_n(h_r) = h_{r/n},
|
|
192
|
+
\quad \mathbf{V}_n(p_r) = n p_{r/n},
|
|
193
|
+
\quad \mathbf{V}_n(e_r) = (-1)^{r - r/n} e_{r/n}
|
|
194
|
+
|
|
195
|
+
(where `h` is the complete homogeneous basis, `p` is the
|
|
196
|
+
powersum basis, and `e` is the elementary basis). For every
|
|
197
|
+
nonnegative integer `r` with `n \nmid r`, it satisfes
|
|
198
|
+
|
|
199
|
+
.. MATH::
|
|
200
|
+
|
|
201
|
+
\mathbf{V}_n(h_r) = \mathbf{V}_n(p_r) = \mathbf{V}_n(e_r) = 0.
|
|
202
|
+
|
|
203
|
+
The `n`-th Verschiebung operator is also called the `n`-th
|
|
204
|
+
Verschiebung endomorphism. Its name derives from the Verschiebung
|
|
205
|
+
(German for "shift") endomorphism of the Witt vectors.
|
|
206
|
+
|
|
207
|
+
The `n`-th Verschiebung operator is adjoint to the `n`-th
|
|
208
|
+
Frobenius operator (see :meth:`~sage.combinat.sf.sfa.SymmetricFunctionAlgebra_generic_Element.frobenius`
|
|
209
|
+
for its definition) with respect to the Hall scalar product
|
|
210
|
+
(:meth:`~sage.combinat.sf.sfa.SymmetricFunctionAlgebra_generic_Element.scalar`).
|
|
211
|
+
|
|
212
|
+
The action of the `n`-th Verschiebung operator on the Schur basis
|
|
213
|
+
can also be computed explicitly. The following (probably clumsier
|
|
214
|
+
than necessary) description can be obtained by solving exercise
|
|
215
|
+
7.61 in Stanley [STA]_.
|
|
216
|
+
|
|
217
|
+
Let `\lambda` be a partition. Let `n` be a positive integer. If
|
|
218
|
+
the `n`-core of `\lambda` is nonempty, then
|
|
219
|
+
`\mathbf{V}_n(s_\lambda) = 0`. Otherwise, the following method
|
|
220
|
+
computes `\mathbf{V}_n(s_\lambda)`: Write the partition `\lambda`
|
|
221
|
+
in the form `(\lambda_1, \lambda_2, ..., \lambda_{ns})` for some
|
|
222
|
+
nonnegative integer `s`. (If `n` does not divide the length of
|
|
223
|
+
`\lambda`, then this is achieved by adding trailing zeroes to
|
|
224
|
+
`\lambda`.) Set `\beta_i = \lambda_i + ns - i` for every
|
|
225
|
+
`s \in \{ 1, 2, \ldots, ns \}`. Then,
|
|
226
|
+
`(\beta_1, \beta_2, ..., \beta_{ns})` is a strictly decreasing
|
|
227
|
+
sequence of nonnegative integers. Stably sort the list
|
|
228
|
+
`(1, 2, \ldots, ns)` in order of (weakly) increasing remainder of
|
|
229
|
+
`-1 - \beta_i` modulo `n`. Let `\xi` be the sign of the
|
|
230
|
+
permutation that is used for this sorting. Let `\psi` be the sign
|
|
231
|
+
of the permutation that is used to stably sort the list
|
|
232
|
+
`(1, 2, \ldots, ns)` in order of (weakly) increasing remainder of
|
|
233
|
+
`i - 1` modulo `n`. (Notice that `\psi = (-1)^{n(n-1)s(s-1)/4}`.)
|
|
234
|
+
Then, `\mathbf{V}_n(s_\lambda) = \xi \psi \prod_{i=0}^{n-1}
|
|
235
|
+
s_{\lambda^{(i)}}`, where
|
|
236
|
+
`(\lambda^{(0)}, \lambda^{(1)}, \ldots, \lambda^{(n - 1)})`
|
|
237
|
+
is the `n`-quotient of `\lambda`.
|
|
238
|
+
|
|
239
|
+
INPUT:
|
|
240
|
+
|
|
241
|
+
- ``n`` -- positive integer
|
|
242
|
+
|
|
243
|
+
OUTPUT:
|
|
244
|
+
|
|
245
|
+
The result of applying the `n`-th Verschiebung operator (on the
|
|
246
|
+
ring of symmetric functions) to ``self``.
|
|
247
|
+
|
|
248
|
+
EXAMPLES::
|
|
249
|
+
|
|
250
|
+
sage: Sym = SymmetricFunctions(ZZ)
|
|
251
|
+
sage: e = Sym.e()
|
|
252
|
+
sage: e[3].verschiebung(2)
|
|
253
|
+
0
|
|
254
|
+
sage: e[4].verschiebung(4)
|
|
255
|
+
-e[1]
|
|
256
|
+
|
|
257
|
+
The Verschiebung endomorphisms are multiplicative::
|
|
258
|
+
|
|
259
|
+
sage: all( all( e(lam).verschiebung(2) * e(mu).verschiebung(2)
|
|
260
|
+
....: == (e(lam) * e(mu)).verschiebung(2)
|
|
261
|
+
....: for mu in Partitions(4) )
|
|
262
|
+
....: for lam in Partitions(4) )
|
|
263
|
+
True
|
|
264
|
+
|
|
265
|
+
TESTS:
|
|
266
|
+
|
|
267
|
+
Let us check that this method on the elementary basis gives the
|
|
268
|
+
same result as the implementation in :mod:`sage.combinat.sf.sfa`
|
|
269
|
+
on the complete homogeneous basis::
|
|
270
|
+
|
|
271
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
272
|
+
sage: e = Sym.e(); h = Sym.h()
|
|
273
|
+
sage: all( h(e(lam)).verschiebung(3) == h(e(lam).verschiebung(3))
|
|
274
|
+
....: for lam in Partitions(6) )
|
|
275
|
+
True
|
|
276
|
+
sage: all( e(h(lam)).verschiebung(2) == e(h(lam).verschiebung(2))
|
|
277
|
+
....: for lam in Partitions(4) )
|
|
278
|
+
True
|
|
279
|
+
"""
|
|
280
|
+
parent = self.parent()
|
|
281
|
+
e_coords_of_self = self.monomial_coefficients().items()
|
|
282
|
+
dct = {Partition([i // n for i in lam]):
|
|
283
|
+
(-1) ** (sum(lam) - (sum(lam) // n)) * coeff
|
|
284
|
+
for (lam, coeff) in e_coords_of_self
|
|
285
|
+
if all( i % n == 0 for i in lam )}
|
|
286
|
+
result_in_e_basis = parent._from_dict(dct)
|
|
287
|
+
return parent(result_in_e_basis)
|
|
288
|
+
|
|
289
|
+
def expand(self, n, alphabet='x'):
|
|
290
|
+
"""
|
|
291
|
+
Expand the symmetric function ``self`` as a symmetric polynomial
|
|
292
|
+
in ``n`` variables.
|
|
293
|
+
|
|
294
|
+
INPUT:
|
|
295
|
+
|
|
296
|
+
- ``n`` -- nonnegative integer
|
|
297
|
+
|
|
298
|
+
- ``alphabet`` -- (default: ``'x'``) a variable for the expansion
|
|
299
|
+
|
|
300
|
+
OUTPUT:
|
|
301
|
+
|
|
302
|
+
A monomial expansion of ``self`` in the `n` variables
|
|
303
|
+
labelled by ``alphabet``.
|
|
304
|
+
|
|
305
|
+
EXAMPLES::
|
|
306
|
+
|
|
307
|
+
sage: e = SymmetricFunctions(QQ).e()
|
|
308
|
+
sage: e([2,1]).expand(3)
|
|
309
|
+
x0^2*x1 + x0*x1^2 + x0^2*x2 + 3*x0*x1*x2 + x1^2*x2 + x0*x2^2 + x1*x2^2
|
|
310
|
+
sage: e([1,1,1]).expand(2)
|
|
311
|
+
x0^3 + 3*x0^2*x1 + 3*x0*x1^2 + x1^3
|
|
312
|
+
sage: e([3]).expand(2)
|
|
313
|
+
0
|
|
314
|
+
sage: e([2]).expand(3)
|
|
315
|
+
x0*x1 + x0*x2 + x1*x2
|
|
316
|
+
sage: e([3]).expand(4,alphabet='x,y,z,t')
|
|
317
|
+
x*y*z + x*y*t + x*z*t + y*z*t
|
|
318
|
+
sage: e([3]).expand(4,alphabet='y')
|
|
319
|
+
y0*y1*y2 + y0*y1*y3 + y0*y2*y3 + y1*y2*y3
|
|
320
|
+
sage: e([]).expand(2)
|
|
321
|
+
1
|
|
322
|
+
sage: e([]).expand(0)
|
|
323
|
+
1
|
|
324
|
+
sage: (3*e([])).expand(0)
|
|
325
|
+
3
|
|
326
|
+
"""
|
|
327
|
+
condition = lambda part: max(part) > n
|
|
328
|
+
return self._expand(condition, n, alphabet)
|
|
329
|
+
|
|
330
|
+
def principal_specialization(self, n=infinity, q=None):
|
|
331
|
+
r"""
|
|
332
|
+
Return the principal specialization of a symmetric function.
|
|
333
|
+
|
|
334
|
+
The *principal specialization* of order `n` at `q`
|
|
335
|
+
is the ring homomorphism `ps_{n,q}` from the ring of
|
|
336
|
+
symmetric functions to another commutative ring `R`
|
|
337
|
+
given by `x_i \mapsto q^{i-1}` for `i \in \{1,\dots,n\}`
|
|
338
|
+
and `x_i \mapsto 0` for `i > n`.
|
|
339
|
+
Here, `q` is a given element of `R`, and we assume that
|
|
340
|
+
the variables of our symmetric functions are
|
|
341
|
+
`x_1, x_2, x_3, \ldots`.
|
|
342
|
+
(To be more precise, `ps_{n,q}` is a `K`-algebra
|
|
343
|
+
homomorphism, where `K` is the base ring.)
|
|
344
|
+
See Section 7.8 of [EnumComb2]_.
|
|
345
|
+
|
|
346
|
+
The *stable principal specialization* at `q` is the ring
|
|
347
|
+
homomorphism `ps_q` from the ring of symmetric functions
|
|
348
|
+
to another commutative ring `R` given by
|
|
349
|
+
`x_i \mapsto q^{i-1}` for all `i`.
|
|
350
|
+
This is well-defined only if the resulting infinite sums
|
|
351
|
+
converge; thus, in particular, setting `q = 1` in the
|
|
352
|
+
stable principal specialization is an invalid operation.
|
|
353
|
+
|
|
354
|
+
INPUT:
|
|
355
|
+
|
|
356
|
+
- ``n`` -- (default: ``infinity``) a nonnegative integer or
|
|
357
|
+
``infinity``, specifying whether to compute the principal
|
|
358
|
+
specialization of order ``n`` or the stable principal
|
|
359
|
+
specialization.
|
|
360
|
+
|
|
361
|
+
- ``q`` -- (default: ``None``) the value to use for `q`; the
|
|
362
|
+
default is to create a ring of polynomials in ``q``
|
|
363
|
+
(or a field of rational functions in ``q``) over the
|
|
364
|
+
given coefficient ring.
|
|
365
|
+
|
|
366
|
+
We use the formulas from Proposition 7.8.3 of [EnumComb2]_
|
|
367
|
+
(using Gaussian binomial coefficients `\binom{u}{v}_q`):
|
|
368
|
+
|
|
369
|
+
.. MATH::
|
|
370
|
+
|
|
371
|
+
ps_{n,q}(e_\lambda) = \prod_i q^{\binom{\lambda_i}{2}} \binom{n}{\lambda_i}_q,
|
|
372
|
+
|
|
373
|
+
ps_{n,1}(e_\lambda) = \prod_i \binom{n}{\lambda_i},
|
|
374
|
+
|
|
375
|
+
ps_q(e_\lambda) = \prod_i q^{\binom{\lambda_i}{2}} / \prod_{j=1}^{\lambda_i} (1-q^j).
|
|
376
|
+
|
|
377
|
+
EXAMPLES::
|
|
378
|
+
|
|
379
|
+
sage: e = SymmetricFunctions(QQ).e()
|
|
380
|
+
sage: x = e[3,1]
|
|
381
|
+
sage: x.principal_specialization(3)
|
|
382
|
+
q^5 + q^4 + q^3
|
|
383
|
+
sage: x = 5*e[1,1,1] + 3*e[2,1] + 1
|
|
384
|
+
sage: x.principal_specialization(3)
|
|
385
|
+
5*q^6 + 18*q^5 + 36*q^4 + 44*q^3 + 36*q^2 + 18*q + 6
|
|
386
|
+
|
|
387
|
+
By default, we return a rational functions in `q`. Sometimes
|
|
388
|
+
it is better to obtain an element of the symbolic ring::
|
|
389
|
+
|
|
390
|
+
sage: x.principal_specialization(q=var("q")) # needs sage.symbolic
|
|
391
|
+
-3*q/((q^2 - 1)*(q - 1)^2) - 5/(q - 1)^3 + 1
|
|
392
|
+
|
|
393
|
+
TESTS::
|
|
394
|
+
|
|
395
|
+
sage: e.zero().principal_specialization(3)
|
|
396
|
+
0
|
|
397
|
+
"""
|
|
398
|
+
from sage.combinat.q_analogues import q_binomial
|
|
399
|
+
|
|
400
|
+
def get_variable(ring, name):
|
|
401
|
+
try:
|
|
402
|
+
ring(name)
|
|
403
|
+
except TypeError:
|
|
404
|
+
from sage.rings.polynomial.polynomial_ring_constructor import (
|
|
405
|
+
PolynomialRing,
|
|
406
|
+
)
|
|
407
|
+
return PolynomialRing(ring, name).gen()
|
|
408
|
+
else:
|
|
409
|
+
raise ValueError("the variable %s is in the base ring, pass it explicitly" % name)
|
|
410
|
+
|
|
411
|
+
if q is None:
|
|
412
|
+
q = get_variable(self.base_ring(), "q")
|
|
413
|
+
|
|
414
|
+
if q == 1:
|
|
415
|
+
if n == infinity:
|
|
416
|
+
raise ValueError("the stable principal specialization at q=1 is not defined")
|
|
417
|
+
f = lambda partition: prod(binomial(n, part) for part in partition)
|
|
418
|
+
elif n == infinity:
|
|
419
|
+
f = lambda partition: prod(q**binomial(part, 2)/prod((1-q**i)
|
|
420
|
+
for i in range(1,part+1))
|
|
421
|
+
for part in partition)
|
|
422
|
+
else:
|
|
423
|
+
f = lambda partition: prod(q**binomial(part, 2)*q_binomial(n, part, q=q)
|
|
424
|
+
for part in partition)
|
|
425
|
+
|
|
426
|
+
return self.parent()._apply_module_morphism(self, f, q.parent())
|
|
427
|
+
|
|
428
|
+
def exponential_specialization(self, t=None, q=1):
|
|
429
|
+
r"""
|
|
430
|
+
Return the exponential specialization of a
|
|
431
|
+
symmetric function (when `q = 1`), or the
|
|
432
|
+
`q`-exponential specialization (when `q \neq 1`).
|
|
433
|
+
|
|
434
|
+
The *exponential specialization* `ex` at `t` is a
|
|
435
|
+
`K`-algebra homomorphism from the `K`-algebra of
|
|
436
|
+
symmetric functions to another `K`-algebra `R`.
|
|
437
|
+
It is defined whenever the base ring `K` is a
|
|
438
|
+
`\QQ`-algebra and `t` is an element of `R`.
|
|
439
|
+
The easiest way to define it is by specifying its
|
|
440
|
+
values on the powersum symmetric functions to be
|
|
441
|
+
`p_1 = t` and `p_n = 0` for `n > 1`.
|
|
442
|
+
Equivalently, on the homogeneous functions it is
|
|
443
|
+
given by `ex(h_n) = t^n / n!`; see Proposition 7.8.4 of
|
|
444
|
+
[EnumComb2]_.
|
|
445
|
+
|
|
446
|
+
By analogy, the `q`-exponential specialization is a
|
|
447
|
+
`K`-algebra homomorphism from the `K`-algebra of
|
|
448
|
+
symmetric functions to another `K`-algebra `R` that
|
|
449
|
+
depends on two elements `t` and `q` of `R` for which
|
|
450
|
+
the elements `1 - q^i` for all positive integers `i`
|
|
451
|
+
are invertible.
|
|
452
|
+
It can be defined by specifying its values on the
|
|
453
|
+
complete homogeneous symmetric functions to be
|
|
454
|
+
|
|
455
|
+
.. MATH::
|
|
456
|
+
|
|
457
|
+
ex_q(h_n) = t^n / [n]_q!,
|
|
458
|
+
|
|
459
|
+
where `[n]_q!` is the `q`-factorial. Equivalently, for
|
|
460
|
+
`q \neq 1` and a homogeneous symmetric function `f` of
|
|
461
|
+
degree `n`, we have
|
|
462
|
+
|
|
463
|
+
.. MATH::
|
|
464
|
+
|
|
465
|
+
ex_q(f) = (1-q)^n t^n ps_q(f),
|
|
466
|
+
|
|
467
|
+
where `ps_q(f)` is the stable principal specialization of `f`
|
|
468
|
+
(see :meth:`principal_specialization`).
|
|
469
|
+
(See (7.29) in [EnumComb2]_.)
|
|
470
|
+
|
|
471
|
+
The limit of `ex_q` as `q \to 1` is `ex`.
|
|
472
|
+
|
|
473
|
+
INPUT:
|
|
474
|
+
|
|
475
|
+
- ``t`` -- (default: ``None``) the value to use for `t`.
|
|
476
|
+
The default is to create a ring of polynomials in `t`.
|
|
477
|
+
|
|
478
|
+
- ``q`` -- (default: `1`) the value to use for `q`. If
|
|
479
|
+
``q`` is ``None``, then a ring (or fraction field) of
|
|
480
|
+
polynomials in ``q`` is created.
|
|
481
|
+
|
|
482
|
+
EXAMPLES::
|
|
483
|
+
|
|
484
|
+
sage: e = SymmetricFunctions(QQ).e()
|
|
485
|
+
sage: x = e[3,2]
|
|
486
|
+
sage: x.exponential_specialization()
|
|
487
|
+
1/12*t^5
|
|
488
|
+
sage: x = 5*e[2] + 3*e[1] + 1
|
|
489
|
+
sage: x.exponential_specialization(t=var("t"), q=var("q")) # needs sage.symbolic
|
|
490
|
+
5*q*t^2/(q + 1) + 3*t + 1
|
|
491
|
+
|
|
492
|
+
TESTS::
|
|
493
|
+
|
|
494
|
+
sage: e.zero().exponential_specialization()
|
|
495
|
+
0
|
|
496
|
+
"""
|
|
497
|
+
from sage.combinat.q_analogues import q_factorial
|
|
498
|
+
|
|
499
|
+
def get_variable(ring, name):
|
|
500
|
+
try:
|
|
501
|
+
ring(name)
|
|
502
|
+
except TypeError:
|
|
503
|
+
from sage.rings.polynomial.polynomial_ring_constructor import (
|
|
504
|
+
PolynomialRing,
|
|
505
|
+
)
|
|
506
|
+
return PolynomialRing(ring, name).gen()
|
|
507
|
+
else:
|
|
508
|
+
raise ValueError("the variable %s is in the base ring, pass it explicitly" % name)
|
|
509
|
+
|
|
510
|
+
if q == 1:
|
|
511
|
+
if t is None:
|
|
512
|
+
t = get_variable(self.base_ring(), 't')
|
|
513
|
+
|
|
514
|
+
def f(partition):
|
|
515
|
+
n = 0
|
|
516
|
+
m = 1
|
|
517
|
+
for part in partition:
|
|
518
|
+
n += part
|
|
519
|
+
m *= factorial(part)
|
|
520
|
+
return t**n/m
|
|
521
|
+
|
|
522
|
+
return self.parent()._apply_module_morphism(self, f, t.parent())
|
|
523
|
+
|
|
524
|
+
if q is None and t is None:
|
|
525
|
+
q = get_variable(self.base_ring(), 'q')
|
|
526
|
+
t = get_variable(q.parent(), 't')
|
|
527
|
+
elif q is None:
|
|
528
|
+
q = get_variable(t.parent(), 'q')
|
|
529
|
+
elif t is None:
|
|
530
|
+
t = get_variable(q.parent(), 't')
|
|
531
|
+
|
|
532
|
+
def f(partition):
|
|
533
|
+
n = 0
|
|
534
|
+
m = 1
|
|
535
|
+
for part in partition:
|
|
536
|
+
n += part
|
|
537
|
+
m *= q**binomial(part, 2)/q_factorial(part, q=q)
|
|
538
|
+
|
|
539
|
+
return t**n * m
|
|
540
|
+
|
|
541
|
+
return self.parent()._apply_module_morphism(self, f, t.parent())
|
|
542
|
+
|
|
543
|
+
|
|
544
|
+
# Backward compatibility for unpickling
|
|
545
|
+
from sage.misc.persist import register_unpickle_override
|
|
546
|
+
|
|
547
|
+
register_unpickle_override('sage.combinat.sf.elementary',
|
|
548
|
+
'SymmetricFunctionAlgebraElement_elementary',
|
|
549
|
+
SymmetricFunctionAlgebra_elementary.Element)
|