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,464 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.modules
|
|
3
|
+
r"""
|
|
4
|
+
Homogeneous symmetric functions
|
|
5
|
+
|
|
6
|
+
By this we mean the basis formed of the complete homogeneous
|
|
7
|
+
symmetric functions `h_\lambda`, not an arbitrary graded basis.
|
|
8
|
+
"""
|
|
9
|
+
#*****************************************************************************
|
|
10
|
+
# Copyright (C) 2007 Mike Hansen <mhansen@gmail.com>
|
|
11
|
+
# 2012 Mike Zabrocki <mike.zabrocki@gmail.com>
|
|
12
|
+
#
|
|
13
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
14
|
+
#
|
|
15
|
+
# This code is distributed in the hope that it will be useful,
|
|
16
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
17
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
18
|
+
# General Public License for more details.
|
|
19
|
+
#
|
|
20
|
+
# The full text of the GPL is available at:
|
|
21
|
+
#
|
|
22
|
+
# http://www.gnu.org/licenses/
|
|
23
|
+
#*****************************************************************************
|
|
24
|
+
|
|
25
|
+
####################################
|
|
26
|
+
# #
|
|
27
|
+
# Homogeneous Symmetric Functions #
|
|
28
|
+
# #
|
|
29
|
+
####################################
|
|
30
|
+
from sage.arith.misc import binomial, factorial
|
|
31
|
+
from sage.combinat.partition import Partition
|
|
32
|
+
from sage.combinat.sf import classical, multiplicative
|
|
33
|
+
from sage.misc.misc_c import prod
|
|
34
|
+
from sage.rings.infinity import infinity
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class SymmetricFunctionAlgebra_homogeneous(multiplicative.SymmetricFunctionAlgebra_multiplicative):
|
|
38
|
+
def __init__(self, Sym):
|
|
39
|
+
"""
|
|
40
|
+
A class of methods specific to the homogeneous basis of
|
|
41
|
+
symmetric functions.
|
|
42
|
+
|
|
43
|
+
INPUT:
|
|
44
|
+
|
|
45
|
+
- ``self`` -- a homogeneous basis of symmetric functions
|
|
46
|
+
- ``Sym`` -- an instance of the ring of symmetric functions
|
|
47
|
+
|
|
48
|
+
TESTS::
|
|
49
|
+
|
|
50
|
+
sage: h = SymmetricFunctions(QQ).e()
|
|
51
|
+
sage: h == loads(dumps(h))
|
|
52
|
+
True
|
|
53
|
+
sage: TestSuite(h).run(skip=['_test_associativity', '_test_distributivity', '_test_prod'])
|
|
54
|
+
sage: TestSuite(h).run(elements = [h[1,1]+h[2], h[1]+2*h[1,1]])
|
|
55
|
+
"""
|
|
56
|
+
classical.SymmetricFunctionAlgebra_classical.__init__(self, Sym, "homogeneous", 'h')
|
|
57
|
+
|
|
58
|
+
def _dual_basis_default(self):
|
|
59
|
+
r"""
|
|
60
|
+
Return the dual basis to ``self``.
|
|
61
|
+
|
|
62
|
+
INPUT:
|
|
63
|
+
|
|
64
|
+
- ``self`` -- a homogeneous basis of symmetric functions
|
|
65
|
+
- ``scalar`` -- (optional) input which specifies a function ``zee``
|
|
66
|
+
on partitions. The function ``zee`` determines the scalar
|
|
67
|
+
product on the power sum basis with normalization
|
|
68
|
+
`\langle p_\mu, p_\mu \rangle = \mathrm{zee}(mu)`.
|
|
69
|
+
(default: uses standard ``zee`` function)
|
|
70
|
+
- ``scalar_name`` -- specifies the name of the scalar function
|
|
71
|
+
(optional)
|
|
72
|
+
- ``prefix`` -- (optional) input which specifies the prefix to be
|
|
73
|
+
used to display the basis
|
|
74
|
+
|
|
75
|
+
OUTPUT:
|
|
76
|
+
|
|
77
|
+
The dual basis of the homogeneous basis with respect to the
|
|
78
|
+
standard scalar product (the monomial basis). If a function
|
|
79
|
+
``zee`` is specified, the dual basis is with respect to the
|
|
80
|
+
modified scalar product.
|
|
81
|
+
|
|
82
|
+
EXAMPLES::
|
|
83
|
+
|
|
84
|
+
sage: m = SymmetricFunctions(QQ).m()
|
|
85
|
+
sage: h = SymmetricFunctions(QQ).h()
|
|
86
|
+
sage: h.dual_basis() == m
|
|
87
|
+
True
|
|
88
|
+
|
|
89
|
+
sage: zee = lambda x : 2
|
|
90
|
+
sage: hh = h.dual_basis(zee); hh
|
|
91
|
+
Dual basis to Symmetric Functions over Rational Field in the homogeneous basis
|
|
92
|
+
sage: hh[2,1].scalar(h[2,1])
|
|
93
|
+
1
|
|
94
|
+
sage: hh[2,2].scalar(h[2,2])
|
|
95
|
+
4
|
|
96
|
+
|
|
97
|
+
TESTS::
|
|
98
|
+
|
|
99
|
+
sage: h._dual_basis_default() is h.dual_basis()
|
|
100
|
+
True
|
|
101
|
+
"""
|
|
102
|
+
return self.realization_of().m()
|
|
103
|
+
|
|
104
|
+
def coproduct_on_generators(self, i):
|
|
105
|
+
r"""
|
|
106
|
+
Return the coproduct on `h_i`.
|
|
107
|
+
|
|
108
|
+
INPUT:
|
|
109
|
+
|
|
110
|
+
- ``self`` -- a homogeneous basis of symmetric functions
|
|
111
|
+
- ``i`` -- nonnegative integer
|
|
112
|
+
|
|
113
|
+
OUTPUT: the sum `\sum_{r=0}^i h_r \otimes h_{i-r}`
|
|
114
|
+
|
|
115
|
+
EXAMPLES::
|
|
116
|
+
|
|
117
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
118
|
+
sage: h = Sym.homogeneous()
|
|
119
|
+
sage: h.coproduct_on_generators(2)
|
|
120
|
+
h[] # h[2] + h[1] # h[1] + h[2] # h[]
|
|
121
|
+
sage: h.coproduct_on_generators(0)
|
|
122
|
+
h[] # h[]
|
|
123
|
+
"""
|
|
124
|
+
def P(i):
|
|
125
|
+
return Partition([i]) if i else Partition([])
|
|
126
|
+
T = self.tensor_square()
|
|
127
|
+
return T.sum_of_monomials( (P(j), P(i-j)) for j in range(i+1) )
|
|
128
|
+
|
|
129
|
+
def _magma_init_(self, magma):
|
|
130
|
+
"""
|
|
131
|
+
Used in converting this ring to the corresponding ring in MAGMA.
|
|
132
|
+
|
|
133
|
+
EXAMPLES::
|
|
134
|
+
|
|
135
|
+
sage: # optional - magma
|
|
136
|
+
sage: H = SymmetricFunctions(QQ).h()
|
|
137
|
+
sage: t = 4*H[3,2]+9
|
|
138
|
+
sage: mt = magma(t); mt
|
|
139
|
+
9 + 4*$.[3,2]
|
|
140
|
+
sage: mt.sage()
|
|
141
|
+
9*h[] + 4*h[3, 2]
|
|
142
|
+
"""
|
|
143
|
+
B = magma(self.base_ring())
|
|
144
|
+
Bref = B._ref()
|
|
145
|
+
return f"SymmetricFunctionAlgebraHomogeneous({Bref})"
|
|
146
|
+
|
|
147
|
+
class Element(classical.SymmetricFunctionAlgebra_classical.Element):
|
|
148
|
+
def omega(self):
|
|
149
|
+
r"""
|
|
150
|
+
Return the image of ``self`` under the omega automorphism.
|
|
151
|
+
|
|
152
|
+
The *omega automorphism* is defined to be the unique algebra
|
|
153
|
+
endomorphism `\omega` of the ring of symmetric functions that
|
|
154
|
+
satisfies `\omega(e_k) = h_k` for all positive integers `k`
|
|
155
|
+
(where `e_k` stands for the `k`-th elementary symmetric
|
|
156
|
+
function, and `h_k` stands for the `k`-th complete homogeneous
|
|
157
|
+
symmetric function). It furthermore is a Hopf algebra
|
|
158
|
+
endomorphism and an involution, and it is also known as the
|
|
159
|
+
*omega involution*. It sends the power-sum symmetric function
|
|
160
|
+
`p_k` to `(-1)^{k-1} p_k` for every positive integer `k`.
|
|
161
|
+
|
|
162
|
+
The images of some bases under the omega automorphism are given by
|
|
163
|
+
|
|
164
|
+
.. MATH::
|
|
165
|
+
|
|
166
|
+
\omega(e_{\lambda}) = h_{\lambda}, \qquad
|
|
167
|
+
\omega(h_{\lambda}) = e_{\lambda}, \qquad
|
|
168
|
+
\omega(p_{\lambda}) = (-1)^{|\lambda| - \ell(\lambda)}
|
|
169
|
+
p_{\lambda}, \qquad
|
|
170
|
+
\omega(s_{\lambda}) = s_{\lambda^{\prime}},
|
|
171
|
+
|
|
172
|
+
where `\lambda` is any partition, where `\ell(\lambda)` denotes
|
|
173
|
+
the length (:meth:`~sage.combinat.partition.Partition.length`)
|
|
174
|
+
of the partition `\lambda`, where `\lambda^{\prime}` denotes the
|
|
175
|
+
conjugate partition
|
|
176
|
+
(:meth:`~sage.combinat.partition.Partition.conjugate`) of
|
|
177
|
+
`\lambda`, and where the usual notations for bases are used
|
|
178
|
+
(`e` = elementary, `h` = complete homogeneous, `p` = powersum,
|
|
179
|
+
`s` = Schur).
|
|
180
|
+
|
|
181
|
+
:meth:`omega_involution()` is a synonym for the :meth:`omega()`
|
|
182
|
+
method.
|
|
183
|
+
|
|
184
|
+
OUTPUT: the image of ``self`` under the omega automorphism
|
|
185
|
+
|
|
186
|
+
EXAMPLES::
|
|
187
|
+
|
|
188
|
+
sage: h = SymmetricFunctions(QQ).h()
|
|
189
|
+
sage: a = h([2,1]); a
|
|
190
|
+
h[2, 1]
|
|
191
|
+
sage: a.omega()
|
|
192
|
+
h[1, 1, 1] - h[2, 1]
|
|
193
|
+
sage: e = SymmetricFunctions(QQ).e()
|
|
194
|
+
sage: e(h([2,1]).omega())
|
|
195
|
+
e[2, 1]
|
|
196
|
+
"""
|
|
197
|
+
e = self.parent().realization_of().e()
|
|
198
|
+
return self.parent()(e._from_element(self))
|
|
199
|
+
|
|
200
|
+
omega_involution = omega
|
|
201
|
+
|
|
202
|
+
def expand(self, n, alphabet='x'):
|
|
203
|
+
"""
|
|
204
|
+
Expand the symmetric function ``self`` as a symmetric polynomial
|
|
205
|
+
in ``n`` variables.
|
|
206
|
+
|
|
207
|
+
INPUT:
|
|
208
|
+
|
|
209
|
+
- ``n`` -- nonnegative integer
|
|
210
|
+
|
|
211
|
+
- ``alphabet`` -- (default: ``'x'``) a variable for the expansion
|
|
212
|
+
|
|
213
|
+
OUTPUT:
|
|
214
|
+
|
|
215
|
+
A monomial expansion of ``self`` in the `n` variables
|
|
216
|
+
labelled by ``alphabet``.
|
|
217
|
+
|
|
218
|
+
EXAMPLES::
|
|
219
|
+
|
|
220
|
+
sage: h = SymmetricFunctions(QQ).h()
|
|
221
|
+
sage: h([3]).expand(2)
|
|
222
|
+
x0^3 + x0^2*x1 + x0*x1^2 + x1^3
|
|
223
|
+
sage: h([1,1,1]).expand(2)
|
|
224
|
+
x0^3 + 3*x0^2*x1 + 3*x0*x1^2 + x1^3
|
|
225
|
+
sage: h([2,1]).expand(3)
|
|
226
|
+
x0^3 + 2*x0^2*x1 + 2*x0*x1^2 + x1^3 + 2*x0^2*x2 + 3*x0*x1*x2 + 2*x1^2*x2 + 2*x0*x2^2 + 2*x1*x2^2 + x2^3
|
|
227
|
+
sage: h([3]).expand(2,alphabet='y')
|
|
228
|
+
y0^3 + y0^2*y1 + y0*y1^2 + y1^3
|
|
229
|
+
sage: h([3]).expand(2,alphabet='x,y')
|
|
230
|
+
x^3 + x^2*y + x*y^2 + y^3
|
|
231
|
+
sage: h([3]).expand(3,alphabet='x,y,z')
|
|
232
|
+
x^3 + x^2*y + x*y^2 + y^3 + x^2*z + x*y*z + y^2*z + x*z^2 + y*z^2 + z^3
|
|
233
|
+
sage: (h([]) + 2*h([1])).expand(3)
|
|
234
|
+
2*x0 + 2*x1 + 2*x2 + 1
|
|
235
|
+
sage: h([1]).expand(0)
|
|
236
|
+
0
|
|
237
|
+
sage: (3*h([])).expand(0)
|
|
238
|
+
3
|
|
239
|
+
"""
|
|
240
|
+
if n == 0: # Symmetrica crashes otherwise...
|
|
241
|
+
return self.counit()
|
|
242
|
+
condition = lambda part: False
|
|
243
|
+
return self._expand(condition, n, alphabet)
|
|
244
|
+
|
|
245
|
+
def principal_specialization(self, n=infinity, q=None):
|
|
246
|
+
r"""
|
|
247
|
+
Return the principal specialization of a symmetric function.
|
|
248
|
+
|
|
249
|
+
The *principal specialization* of order `n` at `q`
|
|
250
|
+
is the ring homomorphism `ps_{n,q}` from the ring of
|
|
251
|
+
symmetric functions to another commutative ring `R`
|
|
252
|
+
given by `x_i \mapsto q^{i-1}` for `i \in \{1,\dots,n\}`
|
|
253
|
+
and `x_i \mapsto 0` for `i > n`.
|
|
254
|
+
Here, `q` is a given element of `R`, and we assume that
|
|
255
|
+
the variables of our symmetric functions are
|
|
256
|
+
`x_1, x_2, x_3, \ldots`.
|
|
257
|
+
(To be more precise, `ps_{n,q}` is a `K`-algebra
|
|
258
|
+
homomorphism, where `K` is the base ring.)
|
|
259
|
+
See Section 7.8 of [EnumComb2]_.
|
|
260
|
+
|
|
261
|
+
The *stable principal specialization* at `q` is the ring
|
|
262
|
+
homomorphism `ps_q` from the ring of symmetric functions
|
|
263
|
+
to another commutative ring `R` given by
|
|
264
|
+
`x_i \mapsto q^{i-1}` for all `i`.
|
|
265
|
+
This is well-defined only if the resulting infinite sums
|
|
266
|
+
converge; thus, in particular, setting `q = 1` in the
|
|
267
|
+
stable principal specialization is an invalid operation.
|
|
268
|
+
|
|
269
|
+
INPUT:
|
|
270
|
+
|
|
271
|
+
- ``n`` -- (default: ``infinity``) a nonnegative integer or
|
|
272
|
+
``infinity``, specifying whether to compute the principal
|
|
273
|
+
specialization of order ``n`` or the stable principal
|
|
274
|
+
specialization.
|
|
275
|
+
|
|
276
|
+
- ``q`` -- (default: ``None``) the value to use for `q`; the
|
|
277
|
+
default is to create a ring of polynomials in ``q``
|
|
278
|
+
(or a field of rational functions in ``q``) over the
|
|
279
|
+
given coefficient ring.
|
|
280
|
+
|
|
281
|
+
We use the formulas from Proposition 7.8.3 of [EnumComb2]_
|
|
282
|
+
(using Gaussian binomial coefficients `\binom{u}{v}_q`):
|
|
283
|
+
|
|
284
|
+
.. MATH::
|
|
285
|
+
|
|
286
|
+
ps_{n,q}(h_\lambda) = \prod_i \binom{n+\lambda_i-1}{\lambda_i}_q,
|
|
287
|
+
|
|
288
|
+
ps_{n,1}(h_\lambda) = \prod_i \binom{n+\lambda_i-1}{\lambda_i},
|
|
289
|
+
|
|
290
|
+
ps_q(h_\lambda) = 1 / \prod_i \prod_{j=1}^{\lambda_i} (1-q^j).
|
|
291
|
+
|
|
292
|
+
EXAMPLES::
|
|
293
|
+
|
|
294
|
+
sage: h = SymmetricFunctions(QQ).h()
|
|
295
|
+
sage: x = h[2,1]
|
|
296
|
+
sage: x.principal_specialization(3)
|
|
297
|
+
q^6 + 2*q^5 + 4*q^4 + 4*q^3 + 4*q^2 + 2*q + 1
|
|
298
|
+
sage: x = 3*h[2] + 2*h[1] + 1
|
|
299
|
+
sage: x.principal_specialization(3, q=var("q")) # needs sage.symbolic
|
|
300
|
+
2*(q^3 - 1)/(q - 1) + 3*(q^4 - 1)*(q^3 - 1)/((q^2 - 1)*(q - 1)) + 1
|
|
301
|
+
|
|
302
|
+
TESTS::
|
|
303
|
+
|
|
304
|
+
sage: x = h.zero()
|
|
305
|
+
sage: s = x.principal_specialization(3); s
|
|
306
|
+
0
|
|
307
|
+
"""
|
|
308
|
+
from sage.combinat.q_analogues import q_binomial
|
|
309
|
+
|
|
310
|
+
def get_variable(ring, name):
|
|
311
|
+
try:
|
|
312
|
+
ring(name)
|
|
313
|
+
except TypeError:
|
|
314
|
+
from sage.rings.polynomial.polynomial_ring_constructor import (
|
|
315
|
+
PolynomialRing,
|
|
316
|
+
)
|
|
317
|
+
return PolynomialRing(ring, name).gen()
|
|
318
|
+
else:
|
|
319
|
+
raise ValueError("the variable %s is in the base ring, pass it explicitly" % name)
|
|
320
|
+
|
|
321
|
+
if q is None:
|
|
322
|
+
q = get_variable(self.base_ring(), 'q')
|
|
323
|
+
|
|
324
|
+
if q == 1:
|
|
325
|
+
if n == infinity:
|
|
326
|
+
raise ValueError("the stable principal specialization at q=1 is not defined")
|
|
327
|
+
f = lambda partition: prod(binomial(n+part-1, part) for part in partition)
|
|
328
|
+
elif n == infinity:
|
|
329
|
+
f = lambda partition: prod(1/prod((1-q**i) for i in range(1, part+1)) for part in partition)
|
|
330
|
+
else:
|
|
331
|
+
f = lambda partition: prod(q_binomial(n+part-1, part, q=q) for part in partition)
|
|
332
|
+
|
|
333
|
+
return self.parent()._apply_module_morphism(self, f, q.parent())
|
|
334
|
+
|
|
335
|
+
def exponential_specialization(self, t=None, q=1):
|
|
336
|
+
r"""
|
|
337
|
+
Return the exponential specialization of a
|
|
338
|
+
symmetric function (when `q = 1`), or the
|
|
339
|
+
`q`-exponential specialization (when `q \neq 1`).
|
|
340
|
+
|
|
341
|
+
The *exponential specialization* `ex` at `t` is a
|
|
342
|
+
`K`-algebra homomorphism from the `K`-algebra of
|
|
343
|
+
symmetric functions to another `K`-algebra `R`.
|
|
344
|
+
It is defined whenever the base ring `K` is a
|
|
345
|
+
`\QQ`-algebra and `t` is an element of `R`.
|
|
346
|
+
The easiest way to define it is by specifying its
|
|
347
|
+
values on the powersum symmetric functions to be
|
|
348
|
+
`p_1 = t` and `p_n = 0` for `n > 1`.
|
|
349
|
+
Equivalently, on the homogeneous functions it is
|
|
350
|
+
given by `ex(h_n) = t^n / n!`; see Proposition 7.8.4 of
|
|
351
|
+
[EnumComb2]_.
|
|
352
|
+
|
|
353
|
+
By analogy, the `q`-exponential specialization is a
|
|
354
|
+
`K`-algebra homomorphism from the `K`-algebra of
|
|
355
|
+
symmetric functions to another `K`-algebra `R` that
|
|
356
|
+
depends on two elements `t` and `q` of `R` for which
|
|
357
|
+
the elements `1 - q^i` for all positive integers `i`
|
|
358
|
+
are invertible.
|
|
359
|
+
It can be defined by specifying its values on the
|
|
360
|
+
complete homogeneous symmetric functions to be
|
|
361
|
+
|
|
362
|
+
.. MATH::
|
|
363
|
+
|
|
364
|
+
ex_q(h_n) = t^n / [n]_q!,
|
|
365
|
+
|
|
366
|
+
where `[n]_q!` is the `q`-factorial. Equivalently, for
|
|
367
|
+
`q \neq 1` and a homogeneous symmetric function `f` of
|
|
368
|
+
degree `n`, we have
|
|
369
|
+
|
|
370
|
+
.. MATH::
|
|
371
|
+
|
|
372
|
+
ex_q(f) = (1-q)^n t^n ps_q(f),
|
|
373
|
+
|
|
374
|
+
where `ps_q(f)` is the stable principal specialization of `f`
|
|
375
|
+
(see :meth:`principal_specialization`).
|
|
376
|
+
(See (7.29) in [EnumComb2]_.)
|
|
377
|
+
|
|
378
|
+
The limit of `ex_q` as `q \to 1` is `ex`.
|
|
379
|
+
|
|
380
|
+
INPUT:
|
|
381
|
+
|
|
382
|
+
- ``t`` -- (default: ``None``) the value to use for `t`;
|
|
383
|
+
the default is to create a ring of polynomials in ``t``
|
|
384
|
+
|
|
385
|
+
- ``q`` -- (default: `1`) the value to use for `q`; if
|
|
386
|
+
``q`` is ``None``, then a ring (or fraction field) of
|
|
387
|
+
polynomials in ``q`` is created
|
|
388
|
+
|
|
389
|
+
EXAMPLES::
|
|
390
|
+
|
|
391
|
+
sage: h = SymmetricFunctions(QQ).h()
|
|
392
|
+
sage: x = h[5,3]
|
|
393
|
+
sage: x.exponential_specialization()
|
|
394
|
+
1/720*t^8
|
|
395
|
+
sage: factorial(5)*factorial(3)
|
|
396
|
+
720
|
|
397
|
+
|
|
398
|
+
sage: x = 5*h[1,1,1] + 3*h[2,1] + 1
|
|
399
|
+
sage: x.exponential_specialization()
|
|
400
|
+
13/2*t^3 + 1
|
|
401
|
+
|
|
402
|
+
We also support the `q`-exponential_specialization::
|
|
403
|
+
|
|
404
|
+
sage: factor(h[3].exponential_specialization(q=var("q"), t=var("t"))) # needs sage.symbolic
|
|
405
|
+
t^3/((q^2 + q + 1)*(q + 1))
|
|
406
|
+
|
|
407
|
+
TESTS::
|
|
408
|
+
|
|
409
|
+
sage: x = h.zero()
|
|
410
|
+
sage: s = x.exponential_specialization(); s
|
|
411
|
+
0
|
|
412
|
+
"""
|
|
413
|
+
from sage.combinat.q_analogues import q_factorial
|
|
414
|
+
|
|
415
|
+
def get_variable(ring, name):
|
|
416
|
+
try:
|
|
417
|
+
ring(name)
|
|
418
|
+
except TypeError:
|
|
419
|
+
from sage.rings.polynomial.polynomial_ring_constructor import (
|
|
420
|
+
PolynomialRing,
|
|
421
|
+
)
|
|
422
|
+
return PolynomialRing(ring, name).gen()
|
|
423
|
+
else:
|
|
424
|
+
raise ValueError("the variable %s is in the base ring, pass it explicitly" % name)
|
|
425
|
+
|
|
426
|
+
if q == 1:
|
|
427
|
+
if t is None:
|
|
428
|
+
t = get_variable(self.base_ring(), 't')
|
|
429
|
+
|
|
430
|
+
def f(partition):
|
|
431
|
+
n = 0
|
|
432
|
+
m = 1
|
|
433
|
+
for part in partition:
|
|
434
|
+
n += part
|
|
435
|
+
m *= factorial(part)
|
|
436
|
+
return t**n/m
|
|
437
|
+
|
|
438
|
+
return self.parent()._apply_module_morphism(self, f, t.parent())
|
|
439
|
+
|
|
440
|
+
if q is None and t is None:
|
|
441
|
+
q = get_variable(self.base_ring(), 'q')
|
|
442
|
+
t = get_variable(q.parent(), 't')
|
|
443
|
+
elif q is None:
|
|
444
|
+
q = get_variable(t.parent(), 'q')
|
|
445
|
+
elif t is None:
|
|
446
|
+
t = get_variable(q.parent(), 't')
|
|
447
|
+
|
|
448
|
+
def f(partition):
|
|
449
|
+
n = 0
|
|
450
|
+
m = 1
|
|
451
|
+
for part in partition:
|
|
452
|
+
n += part
|
|
453
|
+
m *= q_factorial(part, q=q)
|
|
454
|
+
return t**n/m
|
|
455
|
+
|
|
456
|
+
return self.parent()._apply_module_morphism(self, f, t.parent())
|
|
457
|
+
|
|
458
|
+
|
|
459
|
+
# Backward compatibility for unpickling
|
|
460
|
+
from sage.misc.persist import register_unpickle_override
|
|
461
|
+
|
|
462
|
+
register_unpickle_override('sage.combinat.sf.homogeneous',
|
|
463
|
+
'SymmetricFunctionAlgebraElement_homogeneous',
|
|
464
|
+
SymmetricFunctionAlgebra_homogeneous.Element)
|