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,1028 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.modules
|
|
3
|
+
r"""
|
|
4
|
+
Hall-Littlewood polynomials
|
|
5
|
+
|
|
6
|
+
Notation used in the definitions follows mainly [Mac1995]_.
|
|
7
|
+
"""
|
|
8
|
+
#*****************************************************************************
|
|
9
|
+
# Copyright (C) 2007 Mike Hansen <mhansen@gmail.com>,
|
|
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
|
+
|
|
23
|
+
import sage.combinat.partition
|
|
24
|
+
from sage.categories.homset import Hom
|
|
25
|
+
from sage.categories.morphism import SetMorphism
|
|
26
|
+
from sage.misc.lazy_import import lazy_import
|
|
27
|
+
from sage.rings.rational_field import QQ
|
|
28
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
29
|
+
|
|
30
|
+
from . import sfa
|
|
31
|
+
|
|
32
|
+
lazy_import('sage.libs.symmetrica.all', 'hall_littlewood')
|
|
33
|
+
lazy_import('sage.matrix.constructor', 'matrix')
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
# P basis cache
|
|
37
|
+
p_to_s_cache = {}
|
|
38
|
+
s_to_p_cache = {}
|
|
39
|
+
# Qp basis cache
|
|
40
|
+
qp_to_s_cache = {}
|
|
41
|
+
s_to_qp_cache = {}
|
|
42
|
+
|
|
43
|
+
QQt = QQ['t'].fraction_field()
|
|
44
|
+
|
|
45
|
+
# TODO: optimize! which is the fastest way of computing HL's and kostka-polynomials?
|
|
46
|
+
# Qp basis is computed using symmetrica, while P basis is computed using rigged
|
|
47
|
+
# configurations
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class HallLittlewood(UniqueRepresentation):
|
|
51
|
+
r"""
|
|
52
|
+
The family of Hall-Littlewood symmetric function bases.
|
|
53
|
+
|
|
54
|
+
The Hall-Littlewood symmetric functions are a family of symmetric
|
|
55
|
+
functions that depend on a parameter `t`.
|
|
56
|
+
|
|
57
|
+
INPUT:
|
|
58
|
+
|
|
59
|
+
By default the parameter for these functions is `t`, and
|
|
60
|
+
whatever the parameter is, it must be in the base ring.
|
|
61
|
+
|
|
62
|
+
EXAMPLES::
|
|
63
|
+
|
|
64
|
+
sage: SymmetricFunctions(QQ).hall_littlewood(1)
|
|
65
|
+
Hall-Littlewood polynomials with t=1 over Rational Field
|
|
66
|
+
sage: SymmetricFunctions(QQ['t'].fraction_field()).hall_littlewood()
|
|
67
|
+
Hall-Littlewood polynomials over Fraction Field of Univariate Polynomial Ring in t over Rational Field
|
|
68
|
+
"""
|
|
69
|
+
|
|
70
|
+
def __repr__(self):
|
|
71
|
+
r"""
|
|
72
|
+
A string representing the family of Hall-Littlewood symmetric function bases.
|
|
73
|
+
|
|
74
|
+
OUTPUT: string representing the class
|
|
75
|
+
|
|
76
|
+
EXAMPLES::
|
|
77
|
+
|
|
78
|
+
sage: SymmetricFunctions(QQ).hall_littlewood(1)
|
|
79
|
+
Hall-Littlewood polynomials with t=1 over Rational Field
|
|
80
|
+
"""
|
|
81
|
+
return self._name + " over %s" % self._sym.base_ring()
|
|
82
|
+
|
|
83
|
+
@staticmethod
|
|
84
|
+
def __classcall__(cls, Sym, t='t'):
|
|
85
|
+
"""
|
|
86
|
+
Normalize the arguments.
|
|
87
|
+
|
|
88
|
+
TESTS::
|
|
89
|
+
|
|
90
|
+
sage: R.<q, t> = QQ[]
|
|
91
|
+
sage: B1 = SymmetricFunctions(R).hall_littlewood()
|
|
92
|
+
sage: B2 = SymmetricFunctions(R).hall_littlewood(t)
|
|
93
|
+
sage: B3 = SymmetricFunctions(R).hall_littlewood(q)
|
|
94
|
+
sage: B1 is B2
|
|
95
|
+
True
|
|
96
|
+
sage: B1 == B3
|
|
97
|
+
False
|
|
98
|
+
"""
|
|
99
|
+
return super().__classcall__(cls, Sym, Sym.base_ring()(t))
|
|
100
|
+
|
|
101
|
+
def __init__(self, Sym, t):
|
|
102
|
+
"""
|
|
103
|
+
Initialize ``self``.
|
|
104
|
+
|
|
105
|
+
EXAMPLES::
|
|
106
|
+
|
|
107
|
+
sage: HL = SymmetricFunctions(FractionField(QQ['t'])).hall_littlewood()
|
|
108
|
+
sage: TestSuite(HL).run()
|
|
109
|
+
"""
|
|
110
|
+
self._sym = Sym
|
|
111
|
+
self.t = Sym.base_ring()(t)
|
|
112
|
+
self._name_suffix = ""
|
|
113
|
+
if str(t) != 't':
|
|
114
|
+
self._name_suffix += " with t=%s" % t
|
|
115
|
+
self._name = "Hall-Littlewood polynomials"+self._name_suffix
|
|
116
|
+
|
|
117
|
+
def symmetric_function_ring( self ):
|
|
118
|
+
r"""
|
|
119
|
+
Return the ring of symmetric functions associated to the class of
|
|
120
|
+
Hall-Littlewood symmetric functions.
|
|
121
|
+
|
|
122
|
+
INPUT:
|
|
123
|
+
|
|
124
|
+
- ``self`` -- a class of Hall-Littlewood symmetric function bases
|
|
125
|
+
|
|
126
|
+
EXAMPLES::
|
|
127
|
+
|
|
128
|
+
sage: HL = SymmetricFunctions(FractionField(QQ['t'])).hall_littlewood()
|
|
129
|
+
sage: HL.symmetric_function_ring()
|
|
130
|
+
Symmetric Functions over Fraction Field of Univariate Polynomial Ring in t over Rational Field
|
|
131
|
+
"""
|
|
132
|
+
return self._sym
|
|
133
|
+
|
|
134
|
+
def base_ring( self ):
|
|
135
|
+
r"""
|
|
136
|
+
Return the base ring of the symmetric functions where the
|
|
137
|
+
Hall-Littlewood symmetric functions live.
|
|
138
|
+
|
|
139
|
+
INPUT:
|
|
140
|
+
|
|
141
|
+
- ``self`` -- a class of Hall-Littlewood symmetric function bases
|
|
142
|
+
|
|
143
|
+
EXAMPLES::
|
|
144
|
+
|
|
145
|
+
sage: HL = SymmetricFunctions(QQ['t'].fraction_field()).hall_littlewood(t=1)
|
|
146
|
+
sage: HL.base_ring()
|
|
147
|
+
Fraction Field of Univariate Polynomial Ring in t over Rational Field
|
|
148
|
+
"""
|
|
149
|
+
return self._sym.base_ring()
|
|
150
|
+
|
|
151
|
+
def P(self):
|
|
152
|
+
r"""
|
|
153
|
+
Return the algebra of symmetric functions in the Hall-Littlewood
|
|
154
|
+
`P` basis. This is the same as the `HL` basis in John Stembridge's
|
|
155
|
+
SF examples file.
|
|
156
|
+
|
|
157
|
+
INPUT:
|
|
158
|
+
|
|
159
|
+
- ``self`` -- a class of Hall-Littlewood symmetric function bases
|
|
160
|
+
|
|
161
|
+
OUTPUT: the class of the Hall-Littlewood `P` basis
|
|
162
|
+
|
|
163
|
+
EXAMPLES::
|
|
164
|
+
|
|
165
|
+
sage: Sym = SymmetricFunctions(FractionField(QQ['t']))
|
|
166
|
+
sage: HLP = Sym.hall_littlewood().P(); HLP
|
|
167
|
+
Symmetric Functions over Fraction Field of Univariate Polynomial Ring in t over Rational Field in the Hall-Littlewood P basis
|
|
168
|
+
sage: SP = Sym.hall_littlewood(t=-1).P(); SP
|
|
169
|
+
Symmetric Functions over Fraction Field of Univariate Polynomial Ring in t over Rational Field in the Hall-Littlewood P with t=-1 basis
|
|
170
|
+
sage: s = Sym.schur()
|
|
171
|
+
sage: s(HLP([2,1]))
|
|
172
|
+
(-t^2-t)*s[1, 1, 1] + s[2, 1]
|
|
173
|
+
|
|
174
|
+
The Hall-Littlewood polynomials in the `P` basis at `t = 0` are the
|
|
175
|
+
Schur functions::
|
|
176
|
+
|
|
177
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
178
|
+
sage: HLP = Sym.hall_littlewood(t=0).P()
|
|
179
|
+
sage: s = Sym.schur()
|
|
180
|
+
sage: s(HLP([2,1])) == s([2,1])
|
|
181
|
+
True
|
|
182
|
+
|
|
183
|
+
The Hall-Littlewood polynomials in the `P` basis at `t = 1` are the
|
|
184
|
+
monomial symmetric functions::
|
|
185
|
+
|
|
186
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
187
|
+
sage: HLP = Sym.hall_littlewood(t=1).P()
|
|
188
|
+
sage: m = Sym.monomial()
|
|
189
|
+
sage: m(HLP([2,2,1])) == m([2,2,1])
|
|
190
|
+
True
|
|
191
|
+
|
|
192
|
+
We end with some examples of coercions between:
|
|
193
|
+
|
|
194
|
+
1. Hall-Littlewood `P` basis.
|
|
195
|
+
|
|
196
|
+
2. Hall-Littlewood polynomials in the `Q` basis
|
|
197
|
+
|
|
198
|
+
3. Hall-Littlewood polynomials in the `Q^\prime` basis (via the Schurs)
|
|
199
|
+
|
|
200
|
+
4. Classical symmetric functions
|
|
201
|
+
|
|
202
|
+
::
|
|
203
|
+
|
|
204
|
+
sage: Sym = SymmetricFunctions(FractionField(QQ['t']))
|
|
205
|
+
sage: HLP = Sym.hall_littlewood().P()
|
|
206
|
+
sage: HLQ = Sym.hall_littlewood().Q()
|
|
207
|
+
sage: HLQp = Sym.hall_littlewood().Qp()
|
|
208
|
+
sage: s = Sym.schur()
|
|
209
|
+
sage: p = Sym.power()
|
|
210
|
+
sage: HLP(HLQ([2])) # indirect doctest
|
|
211
|
+
(-t+1)*HLP[2]
|
|
212
|
+
sage: HLP(HLQp([2]))
|
|
213
|
+
t*HLP[1, 1] + HLP[2]
|
|
214
|
+
sage: HLP(s([2]))
|
|
215
|
+
t*HLP[1, 1] + HLP[2]
|
|
216
|
+
sage: HLP(p([2]))
|
|
217
|
+
(t-1)*HLP[1, 1] + HLP[2]
|
|
218
|
+
sage: s = HLQp.symmetric_function_ring().s()
|
|
219
|
+
sage: HLQp.transition_matrix(s,3)
|
|
220
|
+
[ 1 0 0]
|
|
221
|
+
[ t 1 0]
|
|
222
|
+
[ t^3 t^2 + t 1]
|
|
223
|
+
sage: s.transition_matrix(HLP,3)
|
|
224
|
+
[ 1 t t^3]
|
|
225
|
+
[ 0 1 t^2 + t]
|
|
226
|
+
[ 0 0 1]
|
|
227
|
+
|
|
228
|
+
The method :meth:`sage.combinat.sf.sfa.SymmetricFunctionAlgebra_generic_Element.hl_creation_operator`
|
|
229
|
+
is a creation operator for the `Q` basis::
|
|
230
|
+
|
|
231
|
+
sage: HLQp[1].hl_creation_operator([3]).hl_creation_operator([3]) # needs lrcalc_python
|
|
232
|
+
HLQp[3, 3, 1]
|
|
233
|
+
|
|
234
|
+
Transitions between bases with the parameter `t` specialized::
|
|
235
|
+
|
|
236
|
+
sage: Sym = SymmetricFunctions(FractionField(QQ['y','z']))
|
|
237
|
+
sage: (y,z) = Sym.base_ring().gens()
|
|
238
|
+
sage: HLy = Sym.hall_littlewood(t=y)
|
|
239
|
+
sage: HLz = Sym.hall_littlewood(t=z)
|
|
240
|
+
sage: Qpy = HLy.Qp()
|
|
241
|
+
sage: Qpz = HLz.Qp()
|
|
242
|
+
sage: s = Sym.schur()
|
|
243
|
+
sage: s( Qpy[3,1] + z*Qpy[2,2] )
|
|
244
|
+
z*s[2, 2] + (y*z+1)*s[3, 1] + (y^2*z+y)*s[4]
|
|
245
|
+
sage: s( Qpy[3,1] + y*Qpz[2,2] )
|
|
246
|
+
y*s[2, 2] + (y*z+1)*s[3, 1] + (y*z^2+y)*s[4]
|
|
247
|
+
sage: s( Qpy[3,1] + y*Qpy[2,2] )
|
|
248
|
+
y*s[2, 2] + (y^2+1)*s[3, 1] + (y^3+y)*s[4]
|
|
249
|
+
|
|
250
|
+
sage: Qy = HLy.Q()
|
|
251
|
+
sage: Qz = HLz.Q()
|
|
252
|
+
sage: Py = HLy.P()
|
|
253
|
+
sage: Pz = HLz.P()
|
|
254
|
+
sage: Pz(Qpy[2,1])
|
|
255
|
+
(y*z^3+z^2+z)*HLP[1, 1, 1] + (y*z+1)*HLP[2, 1] + y*HLP[3]
|
|
256
|
+
sage: Pz(Qz[2,1])
|
|
257
|
+
(z^2-2*z+1)*HLP[2, 1]
|
|
258
|
+
sage: Qz(Py[2])
|
|
259
|
+
-((y-z)/(z^3-z^2-z+1))*HLQ[1, 1] + (1/(-z+1))*HLQ[2]
|
|
260
|
+
sage: Qy(Pz[2])
|
|
261
|
+
((y-z)/(y^3-y^2-y+1))*HLQ[1, 1] + (1/(-y+1))*HLQ[2]
|
|
262
|
+
sage: Qy.hall_littlewood_family() == HLy
|
|
263
|
+
True
|
|
264
|
+
sage: Qy.hall_littlewood_family() == HLz
|
|
265
|
+
False
|
|
266
|
+
sage: Qz.symmetric_function_ring() == Qy.symmetric_function_ring()
|
|
267
|
+
True
|
|
268
|
+
|
|
269
|
+
sage: Sym = SymmetricFunctions(FractionField(QQ['q']))
|
|
270
|
+
sage: q = Sym.base_ring().gen()
|
|
271
|
+
sage: HL = Sym.hall_littlewood(t=q)
|
|
272
|
+
sage: HLQp = HL.Qp()
|
|
273
|
+
sage: HLQ = HL.Q()
|
|
274
|
+
sage: HLP = HL.P()
|
|
275
|
+
sage: s = Sym.schur()
|
|
276
|
+
sage: s(HLQp[3,2].plethysm((1-q)*s[1]))/(1-q)^2
|
|
277
|
+
(-q^5-q^4)*s[1, 1, 1, 1, 1] + (q^3+q^2)*s[2, 1, 1, 1] - q*s[2, 2, 1] - q*s[3, 1, 1] + s[3, 2]
|
|
278
|
+
sage: s(HLP[3,2])
|
|
279
|
+
(-q^5-q^4)*s[1, 1, 1, 1, 1] + (q^3+q^2)*s[2, 1, 1, 1] - q*s[2, 2, 1] - q*s[3, 1, 1] + s[3, 2]
|
|
280
|
+
|
|
281
|
+
The `P` and `Q`-Schur at `t=-1` indexed by strict partitions are a basis for
|
|
282
|
+
the space algebraically generated by the odd power sum symmetric functions::
|
|
283
|
+
|
|
284
|
+
sage: Sym = SymmetricFunctions(FractionField(QQ['q']))
|
|
285
|
+
sage: SP = Sym.hall_littlewood(t=-1).P()
|
|
286
|
+
sage: SQ = Sym.hall_littlewood(t=-1).Q()
|
|
287
|
+
sage: p = Sym.power()
|
|
288
|
+
sage: SP(SQ[3,2,1])
|
|
289
|
+
8*HLP[3, 2, 1]
|
|
290
|
+
sage: SP(SQ[2,2,1])
|
|
291
|
+
0
|
|
292
|
+
sage: p(SP[3,2,1])
|
|
293
|
+
1/45*p[1, 1, 1, 1, 1, 1] - 1/9*p[3, 1, 1, 1] - 1/9*p[3, 3] + 1/5*p[5, 1]
|
|
294
|
+
sage: SP(p[3,3])
|
|
295
|
+
-4*HLP[3, 2, 1] + 2*HLP[4, 2] - 2*HLP[5, 1] + HLP[6]
|
|
296
|
+
sage: SQ( SQ[1]*SQ[3] -2*(1-q)*SQ[4] ) # needs lrcalc_python
|
|
297
|
+
HLQ[3, 1] + 2*q*HLQ[4]
|
|
298
|
+
|
|
299
|
+
TESTS::
|
|
300
|
+
|
|
301
|
+
sage: HLP(s[[]])
|
|
302
|
+
HLP[]
|
|
303
|
+
sage: HLQ(s[[]])
|
|
304
|
+
HLQ[]
|
|
305
|
+
sage: HLQp(s[[]])
|
|
306
|
+
HLQp[]
|
|
307
|
+
"""
|
|
308
|
+
return HallLittlewood_p(self)
|
|
309
|
+
|
|
310
|
+
def Q(self):
|
|
311
|
+
r"""
|
|
312
|
+
Return the algebra of symmetric functions in Hall-Littlewood `Q`
|
|
313
|
+
basis. This is the same as the `Q` basis in John Stembridge's SF
|
|
314
|
+
examples file.
|
|
315
|
+
|
|
316
|
+
More extensive examples can be found in the documentation for the
|
|
317
|
+
Hall-Littlewood `P` basis.
|
|
318
|
+
|
|
319
|
+
INPUT:
|
|
320
|
+
|
|
321
|
+
- ``self`` -- a class of Hall-Littlewood symmetric function bases
|
|
322
|
+
|
|
323
|
+
OUTPUT: the class of the Hall-Littlewood `Q` basis
|
|
324
|
+
|
|
325
|
+
EXAMPLES::
|
|
326
|
+
|
|
327
|
+
sage: Sym = SymmetricFunctions(FractionField(QQ['t']))
|
|
328
|
+
sage: HLQ = Sym.hall_littlewood().Q(); HLQ
|
|
329
|
+
Symmetric Functions over Fraction Field of Univariate Polynomial Ring in t over Rational Field in the Hall-Littlewood Q basis
|
|
330
|
+
sage: SQ = SymmetricFunctions(QQ).hall_littlewood(t=-1).Q(); SQ
|
|
331
|
+
Symmetric Functions over Rational Field in the Hall-Littlewood Q with t=-1 basis
|
|
332
|
+
"""
|
|
333
|
+
return HallLittlewood_q(self)
|
|
334
|
+
|
|
335
|
+
def Qp(self):
|
|
336
|
+
r"""
|
|
337
|
+
Return the algebra of symmetric functions in Hall-Littlewood `Q^\prime` (Qp)
|
|
338
|
+
basis. This is dual to the Hall-Littlewood `P` basis with respect to
|
|
339
|
+
the standard scalar product.
|
|
340
|
+
|
|
341
|
+
More extensive examples can be found in the documentation for the
|
|
342
|
+
Hall-Littlewood P basis.
|
|
343
|
+
|
|
344
|
+
INPUT:
|
|
345
|
+
|
|
346
|
+
- ``self`` -- a class of Hall-Littlewood symmetric function bases
|
|
347
|
+
|
|
348
|
+
OUTPUT: the class of the Hall-Littlewood `Qp`-basis
|
|
349
|
+
|
|
350
|
+
EXAMPLES::
|
|
351
|
+
|
|
352
|
+
sage: Sym = SymmetricFunctions(FractionField(QQ['t']))
|
|
353
|
+
sage: HLQp = Sym.hall_littlewood().Qp(); HLQp
|
|
354
|
+
Symmetric Functions over Fraction Field of Univariate Polynomial Ring in t over Rational Field in the Hall-Littlewood Qp basis
|
|
355
|
+
"""
|
|
356
|
+
return HallLittlewood_qp(self)
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
class HallLittlewood_generic(sfa.SymmetricFunctionAlgebra_generic):
|
|
360
|
+
def __init__(self, hall_littlewood):
|
|
361
|
+
r"""
|
|
362
|
+
A class with methods for working with Hall-Littlewood symmetric functions which
|
|
363
|
+
are common to all bases.
|
|
364
|
+
|
|
365
|
+
INPUT:
|
|
366
|
+
|
|
367
|
+
- ``self`` -- a Hall-Littlewood symmetric function basis
|
|
368
|
+
- ``hall_littlewood`` -- a class of Hall-Littlewood bases
|
|
369
|
+
|
|
370
|
+
TESTS::
|
|
371
|
+
|
|
372
|
+
sage: SymmetricFunctions(QQ['t'].fraction_field()).hall_littlewood().P()
|
|
373
|
+
Symmetric Functions over Fraction Field of Univariate Polynomial Ring in t over Rational Field in the Hall-Littlewood P basis
|
|
374
|
+
sage: SymmetricFunctions(QQ).hall_littlewood(t=2).P()
|
|
375
|
+
Symmetric Functions over Rational Field in the Hall-Littlewood P with t=2 basis
|
|
376
|
+
"""
|
|
377
|
+
s = self.__class__.__name__[15:].capitalize()
|
|
378
|
+
sfa.SymmetricFunctionAlgebra_generic.__init__(
|
|
379
|
+
self, hall_littlewood._sym,
|
|
380
|
+
basis_name="Hall-Littlewood " + s + hall_littlewood._name_suffix,
|
|
381
|
+
prefix="HL" + s)
|
|
382
|
+
self.t = hall_littlewood.t
|
|
383
|
+
self._sym = hall_littlewood._sym
|
|
384
|
+
self._hall_littlewood = hall_littlewood
|
|
385
|
+
self._s = self._sym.schur()
|
|
386
|
+
|
|
387
|
+
# This coercion is broken: HLP = HallLittlewoodP(QQ); HLP(HLP._s[1])
|
|
388
|
+
|
|
389
|
+
# Bases defined by orthotriangularity should inherit from some
|
|
390
|
+
# common category BasesByOrthotriangularity (shared with Jack, HL, orthotriang, Mcdo)
|
|
391
|
+
if hasattr(self, "_s_cache"):
|
|
392
|
+
# temporary until Hom(GradedHopfAlgebrasWithBasis work better)
|
|
393
|
+
category = sage.categories.all.ModulesWithBasis(self._sym.base_ring())
|
|
394
|
+
self .register_coercion(SetMorphism(Hom(self._s, self, category), self._s_to_self))
|
|
395
|
+
self._s.register_coercion(SetMorphism(Hom(self, self._s, category), self._self_to_s))
|
|
396
|
+
|
|
397
|
+
def construction(self):
|
|
398
|
+
"""
|
|
399
|
+
Return a pair ``(F, R)``, where ``F`` is a
|
|
400
|
+
:class:`SymmetricFunctionsFunctor` and `R` is a ring, such
|
|
401
|
+
that ``F(R)`` returns ``self``.
|
|
402
|
+
|
|
403
|
+
EXAMPLES::
|
|
404
|
+
|
|
405
|
+
sage: P = SymmetricFunctions(QQ).hall_littlewood(t=2).P()
|
|
406
|
+
sage: P.construction()
|
|
407
|
+
(SymmetricFunctionsFunctor[Hall-Littlewood P with t=2], Rational Field)
|
|
408
|
+
"""
|
|
409
|
+
|
|
410
|
+
return (sfa.SymmetricFunctionsFamilyFunctor(self,
|
|
411
|
+
HallLittlewood,
|
|
412
|
+
self.basis_name(),
|
|
413
|
+
self.t),
|
|
414
|
+
self.base_ring())
|
|
415
|
+
|
|
416
|
+
def _s_to_self(self, x):
|
|
417
|
+
r"""
|
|
418
|
+
Isomorphism from the Schur basis into ``self``.
|
|
419
|
+
|
|
420
|
+
INPUT:
|
|
421
|
+
|
|
422
|
+
- ``self`` -- a Hall-Littlewood symmetric function basis
|
|
423
|
+
- ``x`` -- an element of the Schur basis
|
|
424
|
+
|
|
425
|
+
OUTPUT: an element of ``self`` equivalent to ``x``
|
|
426
|
+
|
|
427
|
+
EXAMPLES::
|
|
428
|
+
|
|
429
|
+
sage: P = SymmetricFunctions(QQ).hall_littlewood(t=2).P()
|
|
430
|
+
sage: s = SymmetricFunctions(QQ).schur()
|
|
431
|
+
sage: P._s_to_self(s[2,1])
|
|
432
|
+
6*HLP[1, 1, 1] + HLP[2, 1]
|
|
433
|
+
|
|
434
|
+
This is for internal use only. Please use instead::
|
|
435
|
+
|
|
436
|
+
sage: P(s[2,1])
|
|
437
|
+
6*HLP[1, 1, 1] + HLP[2, 1]
|
|
438
|
+
"""
|
|
439
|
+
return self._from_cache(x, self._s_cache, self._s_to_self_cache,
|
|
440
|
+
t=self.t)
|
|
441
|
+
|
|
442
|
+
def _self_to_s(self, x):
|
|
443
|
+
r"""
|
|
444
|
+
Isomorphism from ``self`` to the Schur basis.
|
|
445
|
+
|
|
446
|
+
INPUT:
|
|
447
|
+
|
|
448
|
+
- ``self`` -- a Hall-Littlewood symmetric function basis
|
|
449
|
+
- ``x`` -- an element of the basis ``self``
|
|
450
|
+
|
|
451
|
+
OUTPUT: an element of the Schur basis equivalent to ``x``
|
|
452
|
+
|
|
453
|
+
EXAMPLES::
|
|
454
|
+
|
|
455
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
456
|
+
sage: P = Sym.hall_littlewood(t=2).P()
|
|
457
|
+
sage: s = Sym.schur()
|
|
458
|
+
sage: P._self_to_s(P[2,1])
|
|
459
|
+
-6*s[1, 1, 1] + s[2, 1]
|
|
460
|
+
|
|
461
|
+
This is for internal use only. Please use instead::
|
|
462
|
+
|
|
463
|
+
sage: s(P[2,1])
|
|
464
|
+
-6*s[1, 1, 1] + s[2, 1]
|
|
465
|
+
"""
|
|
466
|
+
return self._s._from_cache(x, self._s_cache, self._self_to_s_cache,
|
|
467
|
+
t=self.t)
|
|
468
|
+
|
|
469
|
+
def transition_matrix(self, basis, n):
|
|
470
|
+
r"""
|
|
471
|
+
Return the transitions matrix between ``self`` and ``basis`` for the
|
|
472
|
+
homogeneous component of degree ``n``.
|
|
473
|
+
|
|
474
|
+
INPUT:
|
|
475
|
+
|
|
476
|
+
- ``self`` -- a Hall-Littlewood symmetric function basis
|
|
477
|
+
- ``basis`` -- another symmetric function basis
|
|
478
|
+
- ``n`` -- nonnegative integer representing the degree
|
|
479
|
+
|
|
480
|
+
OUTPUT:
|
|
481
|
+
|
|
482
|
+
- Returns a `r \times r` matrix of elements of the base ring of ``self``
|
|
483
|
+
where `r` is the number of partitions of ``n``.
|
|
484
|
+
The entry corresponding to row `\mu`, column `\nu` is the
|
|
485
|
+
coefficient of ``basis`` `(\nu)` in ``self`` `(\mu)`
|
|
486
|
+
|
|
487
|
+
EXAMPLES::
|
|
488
|
+
|
|
489
|
+
sage: Sym = SymmetricFunctions(FractionField(QQ['t']))
|
|
490
|
+
sage: HLP = Sym.hall_littlewood().P()
|
|
491
|
+
sage: s = Sym.schur()
|
|
492
|
+
sage: HLP.transition_matrix(s, 4)
|
|
493
|
+
[ 1 -t 0 t^2 -t^3]
|
|
494
|
+
[ 0 1 -t -t t^3 + t^2]
|
|
495
|
+
[ 0 0 1 -t t^3]
|
|
496
|
+
[ 0 0 0 1 -t^3 - t^2 - t]
|
|
497
|
+
[ 0 0 0 0 1]
|
|
498
|
+
sage: HLQ = Sym.hall_littlewood().Q()
|
|
499
|
+
sage: HLQ.transition_matrix(s,3)
|
|
500
|
+
[ -t + 1 t^2 - t -t^3 + t^2]
|
|
501
|
+
[ 0 t^2 - 2*t + 1 -t^4 + t^3 + t^2 - t]
|
|
502
|
+
[ 0 0 -t^6 + t^5 + t^4 - t^2 - t + 1]
|
|
503
|
+
sage: HLQp = Sym.hall_littlewood().Qp()
|
|
504
|
+
sage: HLQp.transition_matrix(s,3)
|
|
505
|
+
[ 1 0 0]
|
|
506
|
+
[ t 1 0]
|
|
507
|
+
[ t^3 t^2 + t 1]
|
|
508
|
+
"""
|
|
509
|
+
P = sage.combinat.partition.Partitions_n(n)
|
|
510
|
+
Plist = P.list()
|
|
511
|
+
m = []
|
|
512
|
+
for row_part in Plist:
|
|
513
|
+
z = basis(self(row_part))
|
|
514
|
+
m.append( [z.coefficient(col_part) for col_part in Plist] )
|
|
515
|
+
return matrix(m)
|
|
516
|
+
|
|
517
|
+
def product(self, left, right):
|
|
518
|
+
r"""
|
|
519
|
+
Multiply an element of the Hall-Littlewood symmetric function
|
|
520
|
+
basis ``self`` and another symmetric function
|
|
521
|
+
|
|
522
|
+
Convert to the Schur basis, do the multiplication there, and
|
|
523
|
+
convert back to ``self`` basis.
|
|
524
|
+
|
|
525
|
+
INPUT:
|
|
526
|
+
|
|
527
|
+
- ``self`` -- a Hall-Littlewood symmetric function basis
|
|
528
|
+
- ``left`` -- an element of the basis ``self``
|
|
529
|
+
- ``right`` -- another symmetric function
|
|
530
|
+
|
|
531
|
+
OUTPUT: the product of ``left`` and ``right`` expanded in the basis ``self``
|
|
532
|
+
|
|
533
|
+
EXAMPLES::
|
|
534
|
+
|
|
535
|
+
sage: Sym = SymmetricFunctions(FractionField(QQ['t']))
|
|
536
|
+
sage: HLP = Sym.hall_littlewood().P()
|
|
537
|
+
sage: HLP([2])^2 # indirect doctest # needs lrcalc_python
|
|
538
|
+
(t+1)*HLP[2, 2] + (-t+1)*HLP[3, 1] + HLP[4]
|
|
539
|
+
|
|
540
|
+
sage: HLQ = Sym.hall_littlewood().Q()
|
|
541
|
+
sage: HLQ([2])^2 # indirect doctest # needs lrcalc_python
|
|
542
|
+
HLQ[2, 2] + (-t+1)*HLQ[3, 1] + (-t+1)*HLQ[4]
|
|
543
|
+
|
|
544
|
+
sage: HLQp = Sym.hall_littlewood().Qp()
|
|
545
|
+
sage: HLQp([2])^2 # indirect doctest # needs lrcalc_python
|
|
546
|
+
HLQp[2, 2] + (-t+1)*HLQp[3, 1] + (-t+1)*HLQp[4]
|
|
547
|
+
"""
|
|
548
|
+
return self(self._s(left) * self._s(right))
|
|
549
|
+
|
|
550
|
+
def hall_littlewood_family(self):
|
|
551
|
+
r"""
|
|
552
|
+
The family of Hall-Littlewood bases associated to ``self``.
|
|
553
|
+
|
|
554
|
+
INPUT:
|
|
555
|
+
|
|
556
|
+
- ``self`` -- a Hall-Littlewood symmetric function basis
|
|
557
|
+
|
|
558
|
+
OUTPUT: the class of Hall-Littlewood bases
|
|
559
|
+
|
|
560
|
+
EXAMPLES::
|
|
561
|
+
|
|
562
|
+
sage: HLP = SymmetricFunctions(FractionField(QQ['t'])).hall_littlewood(1).P()
|
|
563
|
+
sage: HLP.hall_littlewood_family()
|
|
564
|
+
Hall-Littlewood polynomials with t=1 over Fraction Field of Univariate Polynomial Ring in t over Rational Field
|
|
565
|
+
"""
|
|
566
|
+
return self._hall_littlewood
|
|
567
|
+
|
|
568
|
+
class Element(sfa.SymmetricFunctionAlgebra_generic.Element):
|
|
569
|
+
r"""
|
|
570
|
+
Methods for elements of a Hall-Littlewood basis that are common to all bases.
|
|
571
|
+
"""
|
|
572
|
+
|
|
573
|
+
def expand(self, n, alphabet='x'):
|
|
574
|
+
r"""
|
|
575
|
+
Expand the symmetric function as a symmetric polynomial in ``n`` variables.
|
|
576
|
+
|
|
577
|
+
INPUT:
|
|
578
|
+
|
|
579
|
+
- ``self`` -- an element of a Hall-Littlewood basis
|
|
580
|
+
- ``n`` -- positive integer
|
|
581
|
+
- ``alphabet`` -- string representing a variable name (default: ``'x'``)
|
|
582
|
+
|
|
583
|
+
OUTPUT: a symmetric polynomial of ``self`` in ``n`` variables
|
|
584
|
+
|
|
585
|
+
EXAMPLES::
|
|
586
|
+
|
|
587
|
+
sage: Sym = SymmetricFunctions(FractionField(QQ['t']))
|
|
588
|
+
sage: HLP = Sym.hall_littlewood().P()
|
|
589
|
+
sage: HLQ = Sym.hall_littlewood().Q()
|
|
590
|
+
sage: HLQp = Sym.hall_littlewood().Qp()
|
|
591
|
+
sage: HLP([2]).expand(2)
|
|
592
|
+
x0^2 + (-t + 1)*x0*x1 + x1^2
|
|
593
|
+
sage: HLQ([2]).expand(2)
|
|
594
|
+
(-t + 1)*x0^2 + (t^2 - 2*t + 1)*x0*x1 + (-t + 1)*x1^2
|
|
595
|
+
sage: HLQp([2]).expand(2)
|
|
596
|
+
x0^2 + x0*x1 + x1^2
|
|
597
|
+
sage: HLQp([2]).expand(2, 'y')
|
|
598
|
+
y0^2 + y0*y1 + y1^2
|
|
599
|
+
sage: HLQp([2]).expand(1)
|
|
600
|
+
x^2
|
|
601
|
+
"""
|
|
602
|
+
s = self.parent().realization_of().schur()
|
|
603
|
+
return s(self).expand(n, alphabet=alphabet)
|
|
604
|
+
|
|
605
|
+
def scalar(self, x, zee=None):
|
|
606
|
+
r"""
|
|
607
|
+
Return standard scalar product between ``self`` and ``x``.
|
|
608
|
+
|
|
609
|
+
This is the default implementation that converts both ``self`` and ``x``
|
|
610
|
+
into Schur functions and performs the scalar product that basis.
|
|
611
|
+
|
|
612
|
+
The Hall-Littlewood `P` basis is dual to the `Qp` basis with respect to
|
|
613
|
+
this scalar product.
|
|
614
|
+
|
|
615
|
+
INPUT:
|
|
616
|
+
|
|
617
|
+
- ``self`` -- an element of a Hall-Littlewood basis
|
|
618
|
+
- ``x`` -- another symmetric element of the symmetric functions
|
|
619
|
+
|
|
620
|
+
OUTPUT: the scalar product between ``self`` and ``x``
|
|
621
|
+
|
|
622
|
+
EXAMPLES::
|
|
623
|
+
|
|
624
|
+
sage: Sym = SymmetricFunctions(FractionField(QQ['t']))
|
|
625
|
+
sage: HLP = Sym.hall_littlewood().P()
|
|
626
|
+
sage: HLQ = Sym.hall_littlewood().Q()
|
|
627
|
+
sage: HLQp = Sym.hall_littlewood().Qp()
|
|
628
|
+
sage: HLP([2]).scalar(HLQp([2]))
|
|
629
|
+
1
|
|
630
|
+
sage: HLP([2]).scalar(HLQp([1,1]))
|
|
631
|
+
0
|
|
632
|
+
sage: HLP([2]).scalar(HLQ([2]), lambda mu: mu.centralizer_size(t = HLP.t))
|
|
633
|
+
1
|
|
634
|
+
sage: HLP([2]).scalar(HLQ([1,1]), lambda mu: mu.centralizer_size(t = HLP.t))
|
|
635
|
+
0
|
|
636
|
+
"""
|
|
637
|
+
s = self.parent().realization_of().schur()
|
|
638
|
+
s_self = s(self)
|
|
639
|
+
s_x = s(x)
|
|
640
|
+
return s_self.scalar(s_x, zee)
|
|
641
|
+
|
|
642
|
+
def scalar_hl(self, x, t=None):
|
|
643
|
+
r"""
|
|
644
|
+
Return the Hall-Littlewood (with parameter ``t``) scalar product
|
|
645
|
+
of ``self`` and ``x``.
|
|
646
|
+
|
|
647
|
+
The Hall-Littlewood scalar product is defined in Macdonald's
|
|
648
|
+
book [Mac1995]_. The power sum basis is orthogonal and
|
|
649
|
+
`\langle p_\mu, p_\mu \rangle = z_\mu \prod_{i} 1/(1-t^{\mu_i})`
|
|
650
|
+
|
|
651
|
+
The Hall-Littlewood `P` basis is dual to the `Q` basis with respect to
|
|
652
|
+
this scalar product.
|
|
653
|
+
|
|
654
|
+
INPUT:
|
|
655
|
+
|
|
656
|
+
- ``self`` -- an element of a Hall-Littlewood basis
|
|
657
|
+
- ``x`` -- another symmetric element of the symmetric functions
|
|
658
|
+
- ``t`` -- an optional parameter, if this parameter is not specified then
|
|
659
|
+
the value of the ``t`` from the basis is used in the calculation
|
|
660
|
+
|
|
661
|
+
OUTPUT: the Hall-Littlewood scalar product between ``self`` and ``x``
|
|
662
|
+
|
|
663
|
+
EXAMPLES::
|
|
664
|
+
|
|
665
|
+
sage: Sym = SymmetricFunctions(FractionField(QQ['t']))
|
|
666
|
+
sage: HLP = Sym.hall_littlewood().P()
|
|
667
|
+
sage: HLQ = Sym.hall_littlewood().Q()
|
|
668
|
+
sage: HLP([2]).scalar_hl(HLQ([2]))
|
|
669
|
+
1
|
|
670
|
+
sage: HLP([2]).scalar_hl(HLQ([1,1]))
|
|
671
|
+
0
|
|
672
|
+
sage: HLQ([2]).scalar_hl(HLQ([2]))
|
|
673
|
+
-t + 1
|
|
674
|
+
sage: HLQ([2]).scalar_hl(HLQ([1,1]))
|
|
675
|
+
0
|
|
676
|
+
sage: HLP([2]).scalar_hl(HLP([2]))
|
|
677
|
+
-1/(t - 1)
|
|
678
|
+
"""
|
|
679
|
+
parent = self.parent()
|
|
680
|
+
if t is None:
|
|
681
|
+
t = parent.t
|
|
682
|
+
p = parent.realization_of().power()
|
|
683
|
+
f = lambda part1, part2: part1.centralizer_size(t=t)
|
|
684
|
+
return parent._apply_multi_module_morphism(p(self), p(x), f,
|
|
685
|
+
orthogonal=True)
|
|
686
|
+
|
|
687
|
+
|
|
688
|
+
###########
|
|
689
|
+
# P basis #
|
|
690
|
+
###########
|
|
691
|
+
|
|
692
|
+
class HallLittlewood_p(HallLittlewood_generic):
|
|
693
|
+
r"""
|
|
694
|
+
A class representing the Hall-Littlewood `P` basis of symmetric functions
|
|
695
|
+
"""
|
|
696
|
+
|
|
697
|
+
class Element(HallLittlewood_generic.Element):
|
|
698
|
+
pass
|
|
699
|
+
|
|
700
|
+
def __init__(self, hall_littlewood):
|
|
701
|
+
r"""
|
|
702
|
+
A class with methods for working with the Hall-Littlewood `P` basis.
|
|
703
|
+
|
|
704
|
+
The `P` basis is calculated from the Schur basis using the functions
|
|
705
|
+
in :meth:`sage.combinat.sf.kfpoly`. These functions calculate Kostka-Foulkes polynomials
|
|
706
|
+
using rigged configuration formulas.
|
|
707
|
+
|
|
708
|
+
This change of basis is inverted to convert to the Schur basis.
|
|
709
|
+
|
|
710
|
+
INPUT:
|
|
711
|
+
|
|
712
|
+
- ``self`` -- an instance of the Hall-Littlewood `P` basis
|
|
713
|
+
- ``hall_littlewood`` -- a class for the family of Hall-Littlewood bases
|
|
714
|
+
|
|
715
|
+
EXAMPLES::
|
|
716
|
+
|
|
717
|
+
sage: # needs lrcalc_python
|
|
718
|
+
sage: Sym = SymmetricFunctions(FractionField(QQ['t']))
|
|
719
|
+
sage: P = Sym.hall_littlewood().P()
|
|
720
|
+
sage: TestSuite(P).run(skip=['_test_associativity', '_test_distributivity', '_test_prod']) # products are too expensive
|
|
721
|
+
sage: TestSuite(P).run(elements = [P.t*P[1,1]+P[2], P[1]+(1+P.t)*P[1,1]])
|
|
722
|
+
"""
|
|
723
|
+
HallLittlewood_generic.__init__(self, hall_littlewood)
|
|
724
|
+
self._self_to_s_cache = p_to_s_cache
|
|
725
|
+
self._s_to_self_cache = s_to_p_cache
|
|
726
|
+
|
|
727
|
+
def _q_to_p_normalization(self, m):
|
|
728
|
+
r"""
|
|
729
|
+
The coefficient relating the `Q` and the `P` bases.
|
|
730
|
+
|
|
731
|
+
Returns the scalar coefficient that is used when converting from the
|
|
732
|
+
`Q` basis to the `P` basis. Note that this assumes that ``m`` is a
|
|
733
|
+
Partition object.
|
|
734
|
+
|
|
735
|
+
INPUT:
|
|
736
|
+
|
|
737
|
+
- ``self`` -- an instance of the Hall-Littlewood `P` basis
|
|
738
|
+
- ``m`` -- a partition
|
|
739
|
+
|
|
740
|
+
OUTPUT:
|
|
741
|
+
|
|
742
|
+
- returns the coefficient equal to `Q(m)/P(m)`
|
|
743
|
+
|
|
744
|
+
EXAMPLES::
|
|
745
|
+
|
|
746
|
+
sage: Sym = SymmetricFunctions(FractionField(QQ['t']))
|
|
747
|
+
sage: HLP = Sym.hall_littlewood().P()
|
|
748
|
+
sage: HLP._q_to_p_normalization(Partition([2,1]))
|
|
749
|
+
t^2 - 2*t + 1
|
|
750
|
+
"""
|
|
751
|
+
t = self.t
|
|
752
|
+
coeff = (1-t)**len(m)
|
|
753
|
+
for i in m.to_exp():
|
|
754
|
+
for j in range(1,i+1):
|
|
755
|
+
coeff *= (1-t**j)/(1-t)
|
|
756
|
+
return coeff
|
|
757
|
+
|
|
758
|
+
def _s_to_self_base(self, part):
|
|
759
|
+
r"""
|
|
760
|
+
Return a function which gives the coefficient of a partition
|
|
761
|
+
in the expansion of the Schur functions ``s(part)`` in the Hall-Littlewood
|
|
762
|
+
`P` basis.
|
|
763
|
+
|
|
764
|
+
INPUT:
|
|
765
|
+
|
|
766
|
+
- ``self`` -- an instance of the Hall-Littlewood `P` basis
|
|
767
|
+
- ``part`` -- a partition
|
|
768
|
+
|
|
769
|
+
OUTPUT:
|
|
770
|
+
|
|
771
|
+
- returns a function which accepts a partition ``part2`` and returns
|
|
772
|
+
the coefficient of ``P(part2)`` in ``s(part)``
|
|
773
|
+
This coefficient is the t-Kostka-Foulkes polynomial `K_{part,part2}(t)`
|
|
774
|
+
|
|
775
|
+
EXAMPLES::
|
|
776
|
+
|
|
777
|
+
sage: Sym = SymmetricFunctions(FractionField(QQ['t']))
|
|
778
|
+
sage: HLP = Sym.hall_littlewood().P()
|
|
779
|
+
sage: f21 = HLP._s_to_self_base(Partition([2,1]))
|
|
780
|
+
sage: [f21(p) for p in Partitions(3)]
|
|
781
|
+
[0, 1, t^2 + t]
|
|
782
|
+
"""
|
|
783
|
+
from sage.combinat.sf.kfpoly import schur_to_hl
|
|
784
|
+
t = QQt.gen()
|
|
785
|
+
zero = self.base_ring().zero()
|
|
786
|
+
res_dict = schur_to_hl(part, t)
|
|
787
|
+
f = lambda part2: res_dict.get(part2,zero)
|
|
788
|
+
return f
|
|
789
|
+
|
|
790
|
+
def _s_cache(self, n):
|
|
791
|
+
r"""
|
|
792
|
+
Compute the change of basis between the `P` polynomials and the
|
|
793
|
+
Schur functions for partitions of size ``n``.
|
|
794
|
+
|
|
795
|
+
Uses the fact that the transformation matrix is upper-triangular in
|
|
796
|
+
order to obtain the inverse transformation.
|
|
797
|
+
|
|
798
|
+
INPUT:
|
|
799
|
+
|
|
800
|
+
- ``self`` -- an instance of the Hall-Littlewood `P` basis
|
|
801
|
+
- ``n`` -- positive integer
|
|
802
|
+
|
|
803
|
+
EXAMPLES::
|
|
804
|
+
|
|
805
|
+
sage: Sym = SymmetricFunctions(FractionField(QQ['t']))
|
|
806
|
+
sage: HLP = Sym.hall_littlewood().P()
|
|
807
|
+
sage: HLP._s_cache(2)
|
|
808
|
+
sage: l = lambda c: [ (i[0],[j for j in sorted(i[1].items())]) for i in sorted(c.items())]
|
|
809
|
+
sage: l(HLP._s_to_self_cache[2])
|
|
810
|
+
[([1, 1], [([1, 1], 1)]), ([2], [([1, 1], t), ([2], 1)])]
|
|
811
|
+
sage: l(HLP._self_to_s_cache[2])
|
|
812
|
+
[([1, 1], [([1, 1], 1)]), ([2], [([1, 1], -t), ([2], 1)])]
|
|
813
|
+
sage: HLP = Sym.hall_littlewood(10).P()
|
|
814
|
+
sage: HLP._s_cache(2)
|
|
815
|
+
sage: l(HLP._s_to_self_cache[2])
|
|
816
|
+
[([1, 1], [([1, 1], 1)]), ([2], [([1, 1], t), ([2], 1)])]
|
|
817
|
+
"""
|
|
818
|
+
self._invert_morphism(n, QQt, self._self_to_s_cache,
|
|
819
|
+
self._s_to_self_cache, to_self_function=self._s_to_self_base,
|
|
820
|
+
upper_triangular=True, ones_on_diagonal=True)
|
|
821
|
+
|
|
822
|
+
|
|
823
|
+
###########
|
|
824
|
+
# Q basis #
|
|
825
|
+
###########
|
|
826
|
+
|
|
827
|
+
class HallLittlewood_q(HallLittlewood_generic):
|
|
828
|
+
class Element(HallLittlewood_generic.Element):
|
|
829
|
+
pass
|
|
830
|
+
|
|
831
|
+
def __init__(self, hall_littlewood):
|
|
832
|
+
r"""
|
|
833
|
+
The `Q` basis is defined as a normalization of the `P` basis.
|
|
834
|
+
|
|
835
|
+
INPUT:
|
|
836
|
+
|
|
837
|
+
- ``self`` -- an instance of the Hall-Littlewood `P` basis
|
|
838
|
+
- ``hall_littlewood`` -- a class for the family of Hall-Littlewood bases
|
|
839
|
+
|
|
840
|
+
EXAMPLES::
|
|
841
|
+
|
|
842
|
+
sage: Sym = SymmetricFunctions(FractionField(QQ['t']))
|
|
843
|
+
sage: Q = Sym.hall_littlewood().Q()
|
|
844
|
+
sage: TestSuite(Q).run(skip=['_test_associativity', '_test_distributivity', '_test_prod']) # products are too expensive, long time (3s on sage.math, 2012)
|
|
845
|
+
sage: TestSuite(Q).run(elements = [Q.t*Q[1,1]+Q[2], Q[1]+(1+Q.t)*Q[1,1]]) # long time (depends on previous)
|
|
846
|
+
|
|
847
|
+
sage: Sym = SymmetricFunctions(FractionField(QQ['t']))
|
|
848
|
+
sage: HLP = Sym.hall_littlewood().P()
|
|
849
|
+
sage: HLQ = Sym.hall_littlewood().Q()
|
|
850
|
+
sage: HLQp = Sym.hall_littlewood().Qp()
|
|
851
|
+
sage: s = Sym.schur(); p = Sym.power()
|
|
852
|
+
sage: HLQ( HLP([2,1]) + HLP([3]) )
|
|
853
|
+
(1/(t^2-2*t+1))*HLQ[2, 1] - (1/(t-1))*HLQ[3]
|
|
854
|
+
sage: HLQ(HLQp([2])) # indirect doctest
|
|
855
|
+
(t/(t^3-t^2-t+1))*HLQ[1, 1] - (1/(t-1))*HLQ[2]
|
|
856
|
+
sage: HLQ(s([2]))
|
|
857
|
+
(t/(t^3-t^2-t+1))*HLQ[1, 1] - (1/(t-1))*HLQ[2]
|
|
858
|
+
sage: HLQ(p([2]))
|
|
859
|
+
(1/(t^2-1))*HLQ[1, 1] - (1/(t-1))*HLQ[2]
|
|
860
|
+
"""
|
|
861
|
+
HallLittlewood_generic.__init__(self, hall_littlewood)
|
|
862
|
+
|
|
863
|
+
self._P = self._hall_littlewood.P()
|
|
864
|
+
# temporary until Hom(GradedHopfAlgebrasWithBasis work better)
|
|
865
|
+
category = sage.categories.all.ModulesWithBasis(self.base_ring())
|
|
866
|
+
|
|
867
|
+
phi = self.module_morphism(diagonal=self._P._q_to_p_normalization,
|
|
868
|
+
codomain=self._P, category=category)
|
|
869
|
+
self._P.register_coercion(phi)
|
|
870
|
+
self.register_coercion(~phi)
|
|
871
|
+
|
|
872
|
+
def _p_to_q_normalization(self, m):
|
|
873
|
+
r"""
|
|
874
|
+
Return the scalar coefficient on self(m) when converting from the
|
|
875
|
+
`Q` basis to the `P` basis. Note that this assumes that ``m`` is a
|
|
876
|
+
Partition object.
|
|
877
|
+
|
|
878
|
+
Note: this is not used anymore!
|
|
879
|
+
|
|
880
|
+
Returns the scalar coefficient that is used when converting from the
|
|
881
|
+
`P` basis to the `Q` basis. Note that this assumes that ``m`` is a
|
|
882
|
+
Partition object.
|
|
883
|
+
|
|
884
|
+
INPUT:
|
|
885
|
+
|
|
886
|
+
- ``self`` -- an instance of the Hall-Littlewood `P` basis
|
|
887
|
+
- ``m`` -- a partition
|
|
888
|
+
|
|
889
|
+
OUTPUT:
|
|
890
|
+
|
|
891
|
+
- returns the coefficient equal to `P(m)/Q(m)`
|
|
892
|
+
|
|
893
|
+
EXAMPLES::
|
|
894
|
+
|
|
895
|
+
sage: Sym = SymmetricFunctions(FractionField(QQ['t']))
|
|
896
|
+
sage: HLQ = Sym.hall_littlewood().Q()
|
|
897
|
+
sage: HLQ._p_to_q_normalization(Partition([2,1]))
|
|
898
|
+
1/(t^2 - 2*t + 1)
|
|
899
|
+
"""
|
|
900
|
+
t = self.t
|
|
901
|
+
coeff = 1/(1-t)**len(m)
|
|
902
|
+
for i in m.to_exp():
|
|
903
|
+
for j in range(1,i+1):
|
|
904
|
+
coeff *= (1-t)/(1-t**j)
|
|
905
|
+
return coeff
|
|
906
|
+
|
|
907
|
+
|
|
908
|
+
############
|
|
909
|
+
# Qp basis #
|
|
910
|
+
############
|
|
911
|
+
|
|
912
|
+
class HallLittlewood_qp(HallLittlewood_generic):
|
|
913
|
+
|
|
914
|
+
class Element(HallLittlewood_generic.Element):
|
|
915
|
+
pass
|
|
916
|
+
|
|
917
|
+
def __init__(self, hall_littlewood):
|
|
918
|
+
r"""
|
|
919
|
+
The Hall-Littlewood `Qp` basis is calculated through the symmetrica
|
|
920
|
+
library (see the function :meth:`HallLittlewood_qp._to_s`).
|
|
921
|
+
|
|
922
|
+
INPUT:
|
|
923
|
+
|
|
924
|
+
- ``self`` -- an instance of the Hall-Littlewood `P` basis
|
|
925
|
+
- ``hall_littlewood`` -- a class for the family of Hall-Littlewood bases
|
|
926
|
+
|
|
927
|
+
EXAMPLES::
|
|
928
|
+
|
|
929
|
+
sage: Sym = SymmetricFunctions(FractionField(QQ['t']))
|
|
930
|
+
sage: Qp = Sym.hall_littlewood().Q()
|
|
931
|
+
sage: TestSuite(Qp).run(skip=['_test_passociativity', '_test_distributivity', '_test_prod']) # products are too expensive, long time (3s on sage.math, 2012)
|
|
932
|
+
sage: TestSuite(Qp).run(elements = [Qp.t*Qp[1,1]+Qp[2], Qp[1]+(1+Qp.t)*Qp[1,1]]) # long time (depends on previous)
|
|
933
|
+
|
|
934
|
+
sage: Sym = SymmetricFunctions(FractionField(QQ['t']))
|
|
935
|
+
sage: HLP = Sym.hall_littlewood().P()
|
|
936
|
+
sage: HLQ = Sym.hall_littlewood().Q()
|
|
937
|
+
sage: HLQp = Sym.hall_littlewood().Qp()
|
|
938
|
+
sage: s = Sym.schur(); p = Sym.power()
|
|
939
|
+
sage: HLQp(HLP([2])) # indirect doctest
|
|
940
|
+
-t*HLQp[1, 1] + (t^2+1)*HLQp[2]
|
|
941
|
+
sage: HLQp(s(HLQ([2]))) # work around bug reported in issue #12969
|
|
942
|
+
(t^2-t)*HLQp[1, 1] + (-t^3+t^2-t+1)*HLQp[2]
|
|
943
|
+
sage: HLQp(s([2]))
|
|
944
|
+
HLQp[2]
|
|
945
|
+
sage: HLQp(p([2]))
|
|
946
|
+
-HLQp[1, 1] + (t+1)*HLQp[2]
|
|
947
|
+
sage: s = HLQp.symmetric_function_ring().s()
|
|
948
|
+
sage: HLQp.transition_matrix(s,3)
|
|
949
|
+
[ 1 0 0]
|
|
950
|
+
[ t 1 0]
|
|
951
|
+
[ t^3 t^2 + t 1]
|
|
952
|
+
sage: s.transition_matrix(HLP,3)
|
|
953
|
+
[ 1 t t^3]
|
|
954
|
+
[ 0 1 t^2 + t]
|
|
955
|
+
[ 0 0 1]
|
|
956
|
+
"""
|
|
957
|
+
HallLittlewood_generic.__init__(self, hall_littlewood)
|
|
958
|
+
self._self_to_s_cache = qp_to_s_cache
|
|
959
|
+
self._s_to_self_cache = s_to_qp_cache
|
|
960
|
+
|
|
961
|
+
def _to_s(self, part):
|
|
962
|
+
r"""
|
|
963
|
+
Return a function which gives the coefficient of a partition
|
|
964
|
+
in the Schur expansion of ``self(part)``.
|
|
965
|
+
|
|
966
|
+
INPUT:
|
|
967
|
+
|
|
968
|
+
- ``self`` -- an instance of the Hall-Littlewood `P` basis
|
|
969
|
+
- ``part`` -- a partition
|
|
970
|
+
|
|
971
|
+
OUTPUT:
|
|
972
|
+
|
|
973
|
+
- returns a function which accepts a second partition ``part2``
|
|
974
|
+
and returns the coefficient of the expansion of the `Qp`
|
|
975
|
+
in the Schur basis. This is the `t`-Kostka-Foulkes polynomial
|
|
976
|
+
`K_{part2,part}(t)`
|
|
977
|
+
|
|
978
|
+
EXAMPLES::
|
|
979
|
+
|
|
980
|
+
sage: Sym = SymmetricFunctions(FractionField(QQ['t']))
|
|
981
|
+
sage: HLQp = Sym.hall_littlewood().Qp()
|
|
982
|
+
sage: f21 = HLQp._to_s(Partition([2,1]))
|
|
983
|
+
sage: [f21(p) for p in Partitions(3)]
|
|
984
|
+
[t, 1, 0]
|
|
985
|
+
"""
|
|
986
|
+
t = QQt.gen()
|
|
987
|
+
|
|
988
|
+
if not part:
|
|
989
|
+
return lambda part2: QQt.one()
|
|
990
|
+
|
|
991
|
+
res = hall_littlewood(part) # call to symmetrica (returns in variable x)
|
|
992
|
+
f = lambda part2: res.coefficient(part2).subs(x=t)
|
|
993
|
+
return f
|
|
994
|
+
|
|
995
|
+
def _s_cache(self, n):
|
|
996
|
+
r"""
|
|
997
|
+
Compute the change of basis between the `Q^\prime` polynomials and the
|
|
998
|
+
Schur functions for partitions of size ``n``.
|
|
999
|
+
|
|
1000
|
+
Uses the fact that the transformation matrix is lower-triangular in
|
|
1001
|
+
order to obtain the inverse transformation.
|
|
1002
|
+
|
|
1003
|
+
INPUT:
|
|
1004
|
+
|
|
1005
|
+
- ``self`` -- an instance of the Hall-Littlewood `P` basis
|
|
1006
|
+
- ``n`` -- positive integer
|
|
1007
|
+
|
|
1008
|
+
EXAMPLES::
|
|
1009
|
+
|
|
1010
|
+
sage: Sym = SymmetricFunctions(FractionField(QQ['t']))
|
|
1011
|
+
sage: HLQp = Sym.hall_littlewood().Qp()
|
|
1012
|
+
sage: HLQp._s_cache(2)
|
|
1013
|
+
sage: l = lambda c: [ (i[0],[j for j in sorted(i[1].items())]) for i in sorted(c.items())]
|
|
1014
|
+
sage: l(HLQp._s_to_self_cache[2])
|
|
1015
|
+
[([1, 1], [([1, 1], 1), ([2], -t)]), ([2], [([2], 1)])]
|
|
1016
|
+
sage: l(HLQp._self_to_s_cache[2])
|
|
1017
|
+
[([1, 1], [([1, 1], 1), ([2], t)]), ([2], [([2], 1)])]
|
|
1018
|
+
"""
|
|
1019
|
+
self._invert_morphism(n, QQt, self._self_to_s_cache,
|
|
1020
|
+
self._s_to_self_cache,
|
|
1021
|
+
to_other_function=self._to_s,
|
|
1022
|
+
lower_triangular=True, ones_on_diagonal=True)
|
|
1023
|
+
|
|
1024
|
+
|
|
1025
|
+
# Unpickling backward compatibility
|
|
1026
|
+
sage.misc.persist.register_unpickle_override('sage.combinat.sf.hall_littlewood', 'HallLittlewoodElement_p', HallLittlewood_p.Element)
|
|
1027
|
+
sage.misc.persist.register_unpickle_override('sage.combinat.sf.hall_littlewood', 'HallLittlewoodElement_q', HallLittlewood_q.Element)
|
|
1028
|
+
sage.misc.persist.register_unpickle_override('sage.combinat.sf.hall_littlewood', 'HallLittlewoodElement_qp', HallLittlewood_qp.Element)
|