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,855 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.modules
|
|
3
|
+
r"""
|
|
4
|
+
Bases for ``NCSym``
|
|
5
|
+
|
|
6
|
+
AUTHORS:
|
|
7
|
+
|
|
8
|
+
- Travis Scrimshaw (08-04-2013): initial version
|
|
9
|
+
"""
|
|
10
|
+
# ****************************************************************************
|
|
11
|
+
# Copyright (C) 2013 Travis Scrimshaw <tscrim at ucdavis.edu>
|
|
12
|
+
#
|
|
13
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
14
|
+
# https://www.gnu.org/licenses/
|
|
15
|
+
# ****************************************************************************
|
|
16
|
+
|
|
17
|
+
from sage.misc.abstract_method import abstract_method
|
|
18
|
+
from sage.misc.lazy_attribute import lazy_attribute
|
|
19
|
+
from sage.misc.cachefunc import cached_method
|
|
20
|
+
from sage.misc.bindable_class import BindableClass
|
|
21
|
+
from sage.categories.graded_hopf_algebras import GradedHopfAlgebras
|
|
22
|
+
from sage.categories.realizations import Category_realization_of_parent
|
|
23
|
+
from sage.categories.modules_with_basis import ModulesWithBasis
|
|
24
|
+
from sage.categories.tensor import tensor
|
|
25
|
+
from sage.categories.homset import Hom
|
|
26
|
+
from sage.combinat.set_partition import SetPartition, SetPartitions
|
|
27
|
+
from sage.combinat.free_module import CombinatorialFreeModule
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class NCSymBasis_abstract(CombinatorialFreeModule, BindableClass):
|
|
31
|
+
"""
|
|
32
|
+
Abstract base class for a basis of `NCSym` or its dual.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
def _element_constructor_(self, x):
|
|
36
|
+
"""
|
|
37
|
+
Construct an element of ``self``.
|
|
38
|
+
|
|
39
|
+
INPUT:
|
|
40
|
+
|
|
41
|
+
- ``x`` -- set partition or list of lists of integers
|
|
42
|
+
|
|
43
|
+
EXAMPLES::
|
|
44
|
+
|
|
45
|
+
sage: m = SymmetricFunctionsNonCommutingVariables(QQ).m()
|
|
46
|
+
sage: m([[1,3],[2]])
|
|
47
|
+
m{{1, 3}, {2}}
|
|
48
|
+
sage: m(SetPartition([[1,3],[2]]))
|
|
49
|
+
m{{1, 3}, {2}}
|
|
50
|
+
"""
|
|
51
|
+
if isinstance(x, (list, tuple)):
|
|
52
|
+
x = SetPartition(x)
|
|
53
|
+
return super()._element_constructor_(x)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class NCSymOrNCSymDualBases(Category_realization_of_parent):
|
|
57
|
+
r"""
|
|
58
|
+
Base category for the category of bases of symmetric functions
|
|
59
|
+
in non-commuting variables or its Hopf dual for the common code.
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
def super_categories(self):
|
|
63
|
+
r"""
|
|
64
|
+
Return the super categories of bases of (the Hopf dual of) the
|
|
65
|
+
symmetric functions in non-commuting variables.
|
|
66
|
+
|
|
67
|
+
OUTPUT: list of categories
|
|
68
|
+
|
|
69
|
+
TESTS::
|
|
70
|
+
|
|
71
|
+
sage: from sage.combinat.ncsym.bases import NCSymOrNCSymDualBases
|
|
72
|
+
sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
|
|
73
|
+
sage: NCSymOrNCSymDualBases(NCSym).super_categories()
|
|
74
|
+
[Category of realizations of Symmetric functions in
|
|
75
|
+
non-commuting variables over the Rational Field,
|
|
76
|
+
Category of graded Hopf algebras with basis over Rational Field,
|
|
77
|
+
Join of Category of realizations of Hopf algebras over Rational Field
|
|
78
|
+
and Category of graded algebras over Rational Field
|
|
79
|
+
and Category of graded coalgebras over Rational Field]
|
|
80
|
+
"""
|
|
81
|
+
R = self.base().base_ring()
|
|
82
|
+
from sage.categories.graded_hopf_algebras_with_basis import GradedHopfAlgebrasWithBasis
|
|
83
|
+
return [self.base().Realizations(),
|
|
84
|
+
GradedHopfAlgebrasWithBasis(R),
|
|
85
|
+
GradedHopfAlgebras(R).Realizations()]
|
|
86
|
+
|
|
87
|
+
def _repr_(self):
|
|
88
|
+
r"""
|
|
89
|
+
Return a string representation of ``self``.
|
|
90
|
+
|
|
91
|
+
TESTS::
|
|
92
|
+
|
|
93
|
+
sage: from sage.combinat.ncsym.bases import NCSymOrNCSymDualBases
|
|
94
|
+
sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
|
|
95
|
+
sage: NCSymOrNCSymDualBases(NCSym)
|
|
96
|
+
Category of bases of NCSym or NCSym^* over the Rational Field
|
|
97
|
+
"""
|
|
98
|
+
return "Category of bases of NCSym or NCSym^* over the {}".format(self.base().base_ring())
|
|
99
|
+
|
|
100
|
+
class ParentMethods:
|
|
101
|
+
def _repr_(self):
|
|
102
|
+
"""
|
|
103
|
+
TESTS::
|
|
104
|
+
|
|
105
|
+
sage: SymmetricFunctionsNonCommutingVariables(QQ).m()
|
|
106
|
+
Symmetric functions in non-commuting variables over the Rational Field in the monomial basis
|
|
107
|
+
sage: SymmetricFunctionsNonCommutingVariables(QQ).m().dual_basis()
|
|
108
|
+
Dual symmetric functions in non-commuting variables over the Rational Field in the w basis
|
|
109
|
+
sage: SymmetricFunctionsNonCommutingVariables(QQ).chi()
|
|
110
|
+
Symmetric functions in non-commuting variables over the Rational Field in the
|
|
111
|
+
supercharacter basis with parameter q=2
|
|
112
|
+
sage: SymmetricFunctionsNonCommutingVariables(QQ['q'].fraction_field()).rho('q')
|
|
113
|
+
Symmetric functions in non-commuting variables over the Fraction Field
|
|
114
|
+
of Univariate Polynomial Ring in q over Rational Field in the
|
|
115
|
+
deformed_coarse_powersum basis with parameter q
|
|
116
|
+
"""
|
|
117
|
+
str = "{} in the {} basis".format(self.realization_of(), self._realization_name())
|
|
118
|
+
if hasattr(self, '_q'):
|
|
119
|
+
str += " with parameter q"
|
|
120
|
+
if repr(self._q) != 'q':
|
|
121
|
+
str += "=" + repr(self._q)
|
|
122
|
+
return str
|
|
123
|
+
|
|
124
|
+
def __getitem__(self, i):
|
|
125
|
+
"""
|
|
126
|
+
Return the basis element indexed by `i`.
|
|
127
|
+
|
|
128
|
+
INPUT:
|
|
129
|
+
|
|
130
|
+
- ``i`` -- set partition or a list of list of integers
|
|
131
|
+
|
|
132
|
+
EXAMPLES::
|
|
133
|
+
|
|
134
|
+
sage: w = SymmetricFunctionsNonCommutingVariables(QQ).dual().w()
|
|
135
|
+
sage: w[[1], [2,3]]
|
|
136
|
+
w{{1}, {2, 3}}
|
|
137
|
+
sage: w[{1}, (2,3)]
|
|
138
|
+
w{{1}, {2, 3}}
|
|
139
|
+
sage: w[[]]
|
|
140
|
+
w{}
|
|
141
|
+
"""
|
|
142
|
+
if isinstance(i, SetPartition):
|
|
143
|
+
return self.monomial(i)
|
|
144
|
+
if i == []:
|
|
145
|
+
return self.one()
|
|
146
|
+
if not isinstance(i, tuple):
|
|
147
|
+
i = (i,)
|
|
148
|
+
return self.monomial(SetPartition(i))
|
|
149
|
+
|
|
150
|
+
@cached_method
|
|
151
|
+
def one_basis(self):
|
|
152
|
+
r"""
|
|
153
|
+
Return the index of the basis element containing `1`.
|
|
154
|
+
|
|
155
|
+
OUTPUT: the empty set partition
|
|
156
|
+
|
|
157
|
+
EXAMPLES::
|
|
158
|
+
|
|
159
|
+
sage: m = SymmetricFunctionsNonCommutingVariables(QQ).m()
|
|
160
|
+
sage: m.one_basis()
|
|
161
|
+
{}
|
|
162
|
+
sage: w = SymmetricFunctionsNonCommutingVariables(QQ).dual().w()
|
|
163
|
+
sage: w.one_basis()
|
|
164
|
+
{}
|
|
165
|
+
"""
|
|
166
|
+
return SetPartition([])
|
|
167
|
+
|
|
168
|
+
def counit_on_basis(self, A):
|
|
169
|
+
r"""
|
|
170
|
+
The counit is defined by sending all elements of positive degree
|
|
171
|
+
to zero.
|
|
172
|
+
|
|
173
|
+
INPUT:
|
|
174
|
+
|
|
175
|
+
- ``A`` -- set partition
|
|
176
|
+
|
|
177
|
+
OUTPUT: either the `0` or the `1` of the base ring of ``self``
|
|
178
|
+
|
|
179
|
+
EXAMPLES::
|
|
180
|
+
|
|
181
|
+
sage: m = SymmetricFunctionsNonCommutingVariables(QQ).m()
|
|
182
|
+
sage: m.counit_on_basis(SetPartition([[1,3], [2]]))
|
|
183
|
+
0
|
|
184
|
+
sage: m.counit_on_basis(SetPartition([]))
|
|
185
|
+
1
|
|
186
|
+
sage: w = SymmetricFunctionsNonCommutingVariables(QQ).dual().w()
|
|
187
|
+
sage: w.counit_on_basis(SetPartition([[1,3], [2]]))
|
|
188
|
+
0
|
|
189
|
+
sage: w.counit_on_basis(SetPartition([]))
|
|
190
|
+
1
|
|
191
|
+
"""
|
|
192
|
+
if len(A) != 0:
|
|
193
|
+
return self.base_ring().zero()
|
|
194
|
+
return self.base_ring().one()
|
|
195
|
+
|
|
196
|
+
def duality_pairing(self, x, y):
|
|
197
|
+
r"""
|
|
198
|
+
Compute the pairing between an element of ``self`` and an element
|
|
199
|
+
of the dual.
|
|
200
|
+
|
|
201
|
+
Carry out this computation by converting ``x`` to the `\mathbf{m}`
|
|
202
|
+
basis and ``y`` to the `\mathbf{w}` basis.
|
|
203
|
+
|
|
204
|
+
INPUT:
|
|
205
|
+
|
|
206
|
+
- ``x`` -- an element of symmetric functions in non-commuting
|
|
207
|
+
variables
|
|
208
|
+
- ``y`` -- an element of the dual of symmetric functions in
|
|
209
|
+
non-commuting variables
|
|
210
|
+
|
|
211
|
+
OUTPUT: an element of the base ring of ``self``
|
|
212
|
+
|
|
213
|
+
EXAMPLES::
|
|
214
|
+
|
|
215
|
+
sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
|
|
216
|
+
sage: h = NCSym.h()
|
|
217
|
+
sage: w = NCSym.m().dual_basis()
|
|
218
|
+
sage: matrix([[h(A).duality_pairing(w(B)) for A in SetPartitions(3)] for B in SetPartitions(3)])
|
|
219
|
+
[6 2 2 2 1]
|
|
220
|
+
[2 2 1 1 1]
|
|
221
|
+
[2 1 2 1 1]
|
|
222
|
+
[2 1 1 2 1]
|
|
223
|
+
[1 1 1 1 1]
|
|
224
|
+
sage: (h[[1,2],[3]] + 3*h[[1,3],[2]]).duality_pairing(2*w[[1,3],[2]] + w[[1,2,3]] + 2*w[[1,2],[3]])
|
|
225
|
+
32
|
|
226
|
+
"""
|
|
227
|
+
m = self.realization_of().m()
|
|
228
|
+
x = m(x)
|
|
229
|
+
y = m.dual_basis()(y)
|
|
230
|
+
return sum(coeff * y[I] for (I, coeff) in x)
|
|
231
|
+
|
|
232
|
+
def duality_pairing_matrix(self, basis, degree):
|
|
233
|
+
r"""
|
|
234
|
+
The matrix of scalar products between elements of `NCSym` and
|
|
235
|
+
elements of `NCSym^*`.
|
|
236
|
+
|
|
237
|
+
INPUT:
|
|
238
|
+
|
|
239
|
+
- ``basis`` -- a basis of the dual Hopf algebra
|
|
240
|
+
- ``degree`` -- nonnegative integer
|
|
241
|
+
|
|
242
|
+
OUTPUT:
|
|
243
|
+
|
|
244
|
+
The matrix of scalar products between the basis ``self`` and the
|
|
245
|
+
basis ``basis`` in the dual Hopf algebra of degree ``degree``.
|
|
246
|
+
|
|
247
|
+
EXAMPLES:
|
|
248
|
+
|
|
249
|
+
The matrix between the `\mathbf{m}` basis and the
|
|
250
|
+
`\mathbf{w}` basis::
|
|
251
|
+
|
|
252
|
+
sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
|
|
253
|
+
sage: m = NCSym.m()
|
|
254
|
+
sage: w = NCSym.dual().w()
|
|
255
|
+
sage: m.duality_pairing_matrix(w, 3)
|
|
256
|
+
[1 0 0 0 0]
|
|
257
|
+
[0 1 0 0 0]
|
|
258
|
+
[0 0 1 0 0]
|
|
259
|
+
[0 0 0 1 0]
|
|
260
|
+
[0 0 0 0 1]
|
|
261
|
+
|
|
262
|
+
Similarly for some of the other basis of `NCSym` and the `\mathbf{w}`
|
|
263
|
+
basis::
|
|
264
|
+
|
|
265
|
+
sage: e = NCSym.e()
|
|
266
|
+
sage: e.duality_pairing_matrix(w, 3)
|
|
267
|
+
[0 0 0 0 1]
|
|
268
|
+
[0 0 1 1 1]
|
|
269
|
+
[0 1 0 1 1]
|
|
270
|
+
[0 1 1 0 1]
|
|
271
|
+
[1 1 1 1 1]
|
|
272
|
+
sage: p = NCSym.p()
|
|
273
|
+
sage: p.duality_pairing_matrix(w, 3)
|
|
274
|
+
[1 0 0 0 0]
|
|
275
|
+
[1 1 0 0 0]
|
|
276
|
+
[1 0 1 0 0]
|
|
277
|
+
[1 0 0 1 0]
|
|
278
|
+
[1 1 1 1 1]
|
|
279
|
+
sage: cp = NCSym.cp()
|
|
280
|
+
sage: cp.duality_pairing_matrix(w, 3)
|
|
281
|
+
[1 0 0 0 0]
|
|
282
|
+
[1 1 0 0 0]
|
|
283
|
+
[0 0 1 0 0]
|
|
284
|
+
[1 0 0 1 0]
|
|
285
|
+
[1 1 1 1 1]
|
|
286
|
+
sage: x = NCSym.x()
|
|
287
|
+
sage: w.duality_pairing_matrix(x, 3)
|
|
288
|
+
[ 0 0 0 0 1]
|
|
289
|
+
[ 1 0 -1 -1 1]
|
|
290
|
+
[ 1 -1 0 -1 1]
|
|
291
|
+
[ 1 -1 -1 0 1]
|
|
292
|
+
[ 2 -1 -1 -1 1]
|
|
293
|
+
|
|
294
|
+
A base case test::
|
|
295
|
+
|
|
296
|
+
sage: m.duality_pairing_matrix(w, 0)
|
|
297
|
+
[1]
|
|
298
|
+
"""
|
|
299
|
+
from sage.matrix.constructor import matrix
|
|
300
|
+
# TODO: generalize to keys indexing the basis of the graded component
|
|
301
|
+
return matrix(self.base_ring(),
|
|
302
|
+
[[self.duality_pairing(self[I], basis[J])
|
|
303
|
+
for J in SetPartitions(degree)]
|
|
304
|
+
for I in SetPartitions(degree)])
|
|
305
|
+
|
|
306
|
+
class ElementMethods:
|
|
307
|
+
def duality_pairing(self, other):
|
|
308
|
+
r"""
|
|
309
|
+
Compute the pairing between ``self`` and an element ``other`` of the dual.
|
|
310
|
+
|
|
311
|
+
EXAMPLES::
|
|
312
|
+
|
|
313
|
+
sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
|
|
314
|
+
sage: m = NCSym.m()
|
|
315
|
+
sage: w = m.dual_basis()
|
|
316
|
+
sage: elt = m[[1,3],[2]] - 3*m[[1,2],[3]]
|
|
317
|
+
sage: elt.duality_pairing(w[[1,3],[2]])
|
|
318
|
+
1
|
|
319
|
+
sage: elt.duality_pairing(w[[1,2],[3]])
|
|
320
|
+
-3
|
|
321
|
+
sage: elt.duality_pairing(w[[1,2]])
|
|
322
|
+
0
|
|
323
|
+
sage: e = NCSym.e()
|
|
324
|
+
sage: w[[1,3],[2]].duality_pairing(e[[1,3],[2]])
|
|
325
|
+
0
|
|
326
|
+
"""
|
|
327
|
+
return self.parent().duality_pairing(self, other)
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
class NCSymBases(Category_realization_of_parent):
|
|
331
|
+
r"""
|
|
332
|
+
Category of bases of symmetric functions in non-commuting variables.
|
|
333
|
+
|
|
334
|
+
EXAMPLES::
|
|
335
|
+
|
|
336
|
+
sage: from sage.combinat.ncsym.bases import NCSymBases
|
|
337
|
+
sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
|
|
338
|
+
sage: NCSymBases(NCSym)
|
|
339
|
+
Category of bases of symmetric functions in non-commuting variables over the Rational Field
|
|
340
|
+
"""
|
|
341
|
+
|
|
342
|
+
def super_categories(self):
|
|
343
|
+
r"""
|
|
344
|
+
Return the super categories of bases of the Hopf dual of the
|
|
345
|
+
symmetric functions in non-commuting variables.
|
|
346
|
+
|
|
347
|
+
OUTPUT: list of categories
|
|
348
|
+
|
|
349
|
+
TESTS::
|
|
350
|
+
|
|
351
|
+
sage: from sage.combinat.ncsym.bases import NCSymBases
|
|
352
|
+
sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
|
|
353
|
+
sage: NCSymBases(NCSym).super_categories()
|
|
354
|
+
[Category of bases of NCSym or NCSym^* over the Rational Field]
|
|
355
|
+
"""
|
|
356
|
+
return [NCSymOrNCSymDualBases(self.base())]
|
|
357
|
+
|
|
358
|
+
def _repr_(self):
|
|
359
|
+
r"""
|
|
360
|
+
Return a string representation of ``self``.
|
|
361
|
+
|
|
362
|
+
TESTS::
|
|
363
|
+
|
|
364
|
+
sage: from sage.combinat.ncsym.bases import NCSymBases
|
|
365
|
+
sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
|
|
366
|
+
sage: NCSymBases(NCSym)
|
|
367
|
+
Category of bases of symmetric functions in non-commuting variables over the Rational Field
|
|
368
|
+
"""
|
|
369
|
+
return "Category of bases of symmetric functions in non-commuting"\
|
|
370
|
+
" variables over the {}".format(self.base().base_ring())
|
|
371
|
+
|
|
372
|
+
class ParentMethods:
|
|
373
|
+
def from_symmetric_function(self, f):
|
|
374
|
+
"""
|
|
375
|
+
Return the image of the symmetric function ``f`` in ``self``.
|
|
376
|
+
|
|
377
|
+
This is performed by converting to the monomial basis and
|
|
378
|
+
extending the method :meth:`sum_of_partitions` linearly. This is a
|
|
379
|
+
linear map from the symmetric functions to the symmetric functions
|
|
380
|
+
in non-commuting variables that does not preserve the product or
|
|
381
|
+
coproduct structure of the Hopf algebra.
|
|
382
|
+
|
|
383
|
+
.. SEEALSO:: :meth:`to_symmetric_function`
|
|
384
|
+
|
|
385
|
+
INPUT:
|
|
386
|
+
|
|
387
|
+
- ``f`` -- a symmetric function
|
|
388
|
+
|
|
389
|
+
OUTPUT: an element of ``self``
|
|
390
|
+
|
|
391
|
+
EXAMPLES::
|
|
392
|
+
|
|
393
|
+
sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
|
|
394
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
395
|
+
sage: e = NCSym.e()
|
|
396
|
+
sage: elem = Sym.e()
|
|
397
|
+
sage: elt = e.from_symmetric_function(elem[2,1,1]); elt
|
|
398
|
+
1/12*e{{1}, {2}, {3, 4}} + 1/12*e{{1}, {2, 3}, {4}} + 1/12*e{{1}, {2, 4}, {3}}
|
|
399
|
+
+ 1/12*e{{1, 2}, {3}, {4}} + 1/12*e{{1, 3}, {2}, {4}} + 1/12*e{{1, 4}, {2}, {3}}
|
|
400
|
+
sage: elem(elt.to_symmetric_function())
|
|
401
|
+
e[2, 1, 1]
|
|
402
|
+
sage: e.from_symmetric_function(elem[4])
|
|
403
|
+
1/24*e{{1, 2, 3, 4}}
|
|
404
|
+
sage: p = NCSym.p()
|
|
405
|
+
sage: pow = Sym.p()
|
|
406
|
+
sage: elt = p.from_symmetric_function(pow[2,1,1]); elt
|
|
407
|
+
1/6*p{{1}, {2}, {3, 4}} + 1/6*p{{1}, {2, 3}, {4}} + 1/6*p{{1}, {2, 4}, {3}}
|
|
408
|
+
+ 1/6*p{{1, 2}, {3}, {4}} + 1/6*p{{1, 3}, {2}, {4}} + 1/6*p{{1, 4}, {2}, {3}}
|
|
409
|
+
sage: pow(elt.to_symmetric_function())
|
|
410
|
+
p[2, 1, 1]
|
|
411
|
+
sage: p.from_symmetric_function(pow[4])
|
|
412
|
+
p{{1, 2, 3, 4}}
|
|
413
|
+
sage: h = NCSym.h()
|
|
414
|
+
sage: comp = Sym.complete()
|
|
415
|
+
sage: elt = h.from_symmetric_function(comp[2,1,1]); elt
|
|
416
|
+
1/12*h{{1}, {2}, {3, 4}} + 1/12*h{{1}, {2, 3}, {4}} + 1/12*h{{1}, {2, 4}, {3}}
|
|
417
|
+
+ 1/12*h{{1, 2}, {3}, {4}} + 1/12*h{{1, 3}, {2}, {4}} + 1/12*h{{1, 4}, {2}, {3}}
|
|
418
|
+
sage: comp(elt.to_symmetric_function())
|
|
419
|
+
h[2, 1, 1]
|
|
420
|
+
sage: h.from_symmetric_function(comp[4])
|
|
421
|
+
1/24*h{{1, 2, 3, 4}}
|
|
422
|
+
"""
|
|
423
|
+
m = self.realization_of().m()
|
|
424
|
+
return self(m.from_symmetric_function(f))
|
|
425
|
+
|
|
426
|
+
def primitive(self, A, i=1):
|
|
427
|
+
r"""
|
|
428
|
+
Return the primitive associated to ``A`` in ``self``.
|
|
429
|
+
|
|
430
|
+
.. SEEALSO::
|
|
431
|
+
|
|
432
|
+
:meth:`~sage.combinat.ncsym.ncsym.SymmetricFunctionsNonCommutingVariables.powersum.primitive`
|
|
433
|
+
|
|
434
|
+
INPUT:
|
|
435
|
+
|
|
436
|
+
- ``A`` -- set partition
|
|
437
|
+
- ``i`` -- positive integer
|
|
438
|
+
|
|
439
|
+
OUTPUT: an element of ``self``
|
|
440
|
+
|
|
441
|
+
EXAMPLES::
|
|
442
|
+
|
|
443
|
+
sage: e = SymmetricFunctionsNonCommutingVariables(QQ).e()
|
|
444
|
+
sage: elt = e.primitive(SetPartition([[1,3],[2]])); elt
|
|
445
|
+
e{{1, 2}, {3}} - e{{1, 3}, {2}}
|
|
446
|
+
sage: elt.coproduct()
|
|
447
|
+
e{} # e{{1, 2}, {3}} - e{} # e{{1, 3}, {2}} + e{{1, 2}, {3}} # e{} - e{{1, 3}, {2}} # e{}
|
|
448
|
+
"""
|
|
449
|
+
p = self.realization_of().p()
|
|
450
|
+
return self(p.primitive(A, i))
|
|
451
|
+
|
|
452
|
+
@abstract_method(optional=True)
|
|
453
|
+
def internal_coproduct_on_basis(self, i):
|
|
454
|
+
"""
|
|
455
|
+
The internal coproduct of the algebra on the basis (optional).
|
|
456
|
+
|
|
457
|
+
INPUT:
|
|
458
|
+
|
|
459
|
+
- ``i`` -- the indices of an element of the basis of ``self``
|
|
460
|
+
|
|
461
|
+
OUTPUT: an element of the tensor squared of ``self``
|
|
462
|
+
|
|
463
|
+
EXAMPLES::
|
|
464
|
+
|
|
465
|
+
sage: m = SymmetricFunctionsNonCommutingVariables(QQ).m()
|
|
466
|
+
sage: m.internal_coproduct_on_basis(SetPartition([[1,2]]))
|
|
467
|
+
m{{1, 2}} # m{{1, 2}}
|
|
468
|
+
"""
|
|
469
|
+
|
|
470
|
+
@lazy_attribute
|
|
471
|
+
def internal_coproduct(self):
|
|
472
|
+
r"""
|
|
473
|
+
Compute the internal coproduct of ``self``.
|
|
474
|
+
|
|
475
|
+
If :meth:`internal_coproduct_on_basis()` is available, construct
|
|
476
|
+
the internal coproduct morphism from ``self`` to ``self``
|
|
477
|
+
`\otimes` ``self`` by extending it by linearity. Otherwise, this uses
|
|
478
|
+
:meth:`internal_coproduct_by_coercion()`, if available.
|
|
479
|
+
|
|
480
|
+
OUTPUT: an element of the tensor squared of ``self``
|
|
481
|
+
|
|
482
|
+
EXAMPLES::
|
|
483
|
+
|
|
484
|
+
sage: cp = SymmetricFunctionsNonCommutingVariables(QQ).cp()
|
|
485
|
+
sage: cp.internal_coproduct(cp[[1,3],[2]] - 2*cp[[1]])
|
|
486
|
+
-2*cp{{1}} # cp{{1}} + cp{{1, 2, 3}} # cp{{1, 3}, {2}} + cp{{1, 3}, {2}} # cp{{1, 2, 3}}
|
|
487
|
+
+ cp{{1, 3}, {2}} # cp{{1, 3}, {2}}
|
|
488
|
+
"""
|
|
489
|
+
if self.internal_coproduct_on_basis is not NotImplemented:
|
|
490
|
+
return Hom(self, tensor([self, self]),
|
|
491
|
+
ModulesWithBasis(self.base_ring()))(on_basis=self.internal_coproduct_on_basis)
|
|
492
|
+
elif hasattr(self, "internal_coproduct_by_coercion"):
|
|
493
|
+
return self.internal_coproduct_by_coercion
|
|
494
|
+
|
|
495
|
+
def internal_coproduct_by_coercion(self, x):
|
|
496
|
+
r"""
|
|
497
|
+
Return the internal coproduct by coercing the element to the powersum basis.
|
|
498
|
+
|
|
499
|
+
INPUT:
|
|
500
|
+
|
|
501
|
+
- ``x`` -- an element of ``self``
|
|
502
|
+
|
|
503
|
+
OUTPUT: an element of the tensor squared of ``self``
|
|
504
|
+
|
|
505
|
+
EXAMPLES::
|
|
506
|
+
|
|
507
|
+
sage: h = SymmetricFunctionsNonCommutingVariables(QQ).h()
|
|
508
|
+
sage: h[[1,3],[2]].internal_coproduct() # indirect doctest
|
|
509
|
+
2*h{{1}, {2}, {3}} # h{{1}, {2}, {3}} - h{{1}, {2}, {3}} # h{{1, 3}, {2}}
|
|
510
|
+
- h{{1, 3}, {2}} # h{{1}, {2}, {3}} + h{{1, 3}, {2}} # h{{1, 3}, {2}}
|
|
511
|
+
"""
|
|
512
|
+
R = self.realization_of().a_realization()
|
|
513
|
+
return self.tensor_square().sum(coeff * tensor([self(R[A]), self(R[B])])
|
|
514
|
+
for ((A, B), coeff) in R(x).internal_coproduct())
|
|
515
|
+
|
|
516
|
+
class ElementMethods:
|
|
517
|
+
def expand(self, n, alphabet='x'):
|
|
518
|
+
r"""
|
|
519
|
+
Expand the symmetric function into ``n`` non-commuting
|
|
520
|
+
variables in an alphabet, which by default is ``'x'``.
|
|
521
|
+
|
|
522
|
+
This computation is completed by coercing the element ``self``
|
|
523
|
+
into the monomial basis and computing the expansion in
|
|
524
|
+
the ``alphabet`` there.
|
|
525
|
+
|
|
526
|
+
INPUT:
|
|
527
|
+
|
|
528
|
+
- ``n`` -- the number of variables in the expansion
|
|
529
|
+
- ``alphabet`` -- (default: ``'x'``) the alphabet in which
|
|
530
|
+
``self`` is to be expanded
|
|
531
|
+
|
|
532
|
+
OUTPUT:
|
|
533
|
+
|
|
534
|
+
- an expansion of ``self`` into the ``n`` non-commuting
|
|
535
|
+
variables specified by ``alphabet``
|
|
536
|
+
|
|
537
|
+
EXAMPLES::
|
|
538
|
+
|
|
539
|
+
sage: h = SymmetricFunctionsNonCommutingVariables(QQ).h()
|
|
540
|
+
sage: h[[1,3],[2]].expand(3)
|
|
541
|
+
2*x0^3 + x0^2*x1 + x0^2*x2 + 2*x0*x1*x0 + x0*x1^2 + x0*x1*x2 + 2*x0*x2*x0
|
|
542
|
+
+ x0*x2*x1 + x0*x2^2 + x1*x0^2 + 2*x1*x0*x1 + x1*x0*x2 + x1^2*x0 + 2*x1^3
|
|
543
|
+
+ x1^2*x2 + x1*x2*x0 + 2*x1*x2*x1 + x1*x2^2 + x2*x0^2 + x2*x0*x1 + 2*x2*x0*x2
|
|
544
|
+
+ x2*x1*x0 + x2*x1^2 + 2*x2*x1*x2 + x2^2*x0 + x2^2*x1 + 2*x2^3
|
|
545
|
+
sage: x = SymmetricFunctionsNonCommutingVariables(QQ).x()
|
|
546
|
+
sage: x[[1,3],[2]].expand(3)
|
|
547
|
+
-x0^2*x1 - x0^2*x2 - x0*x1^2 - x0*x1*x2 - x0*x2*x1 - x0*x2^2 - x1*x0^2
|
|
548
|
+
- x1*x0*x2 - x1^2*x0 - x1^2*x2 - x1*x2*x0 - x1*x2^2 - x2*x0^2 - x2*x0*x1
|
|
549
|
+
- x2*x1*x0 - x2*x1^2 - x2^2*x0 - x2^2*x1
|
|
550
|
+
"""
|
|
551
|
+
m = self.parent().realization_of().monomial()
|
|
552
|
+
return m(self).expand(n, alphabet)
|
|
553
|
+
|
|
554
|
+
def to_symmetric_function(self):
|
|
555
|
+
r"""
|
|
556
|
+
Compute the projection of an element of symmetric function in
|
|
557
|
+
non-commuting variables to the symmetric functions.
|
|
558
|
+
|
|
559
|
+
The projection of a monomial symmetric function in non-commuting
|
|
560
|
+
variables indexed by the set partition ``A`` is defined as
|
|
561
|
+
|
|
562
|
+
.. MATH::
|
|
563
|
+
|
|
564
|
+
\mathbf{m}_A \mapsto m_{\lambda(A)} \prod_i n_i(\lambda(A))!
|
|
565
|
+
|
|
566
|
+
where `\lambda(A)` is the partition associated with `A` by
|
|
567
|
+
taking the sizes of the parts and `n_i(\mu)` is the
|
|
568
|
+
multiplicity of `i` in `\mu`. For other bases this map is extended
|
|
569
|
+
linearly.
|
|
570
|
+
|
|
571
|
+
OUTPUT: an element of the symmetric functions in the monomial basis
|
|
572
|
+
|
|
573
|
+
EXAMPLES::
|
|
574
|
+
|
|
575
|
+
sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
|
|
576
|
+
sage: e = NCSym.e()
|
|
577
|
+
sage: h = NCSym.h()
|
|
578
|
+
sage: p = NCSym.p()
|
|
579
|
+
sage: cp = NCSym.cp()
|
|
580
|
+
sage: x = NCSym.x()
|
|
581
|
+
sage: cp[[1,3],[2]].to_symmetric_function()
|
|
582
|
+
m[2, 1]
|
|
583
|
+
sage: x[[1,3],[2]].to_symmetric_function()
|
|
584
|
+
-6*m[1, 1, 1] - 2*m[2, 1]
|
|
585
|
+
sage: e[[1,3],[2]].to_symmetric_function()
|
|
586
|
+
2*e[2, 1]
|
|
587
|
+
sage: h[[1,3],[2]].to_symmetric_function()
|
|
588
|
+
2*h[2, 1]
|
|
589
|
+
sage: p[[1,3],[2]].to_symmetric_function()
|
|
590
|
+
p[2, 1]
|
|
591
|
+
"""
|
|
592
|
+
m = self.parent().realization_of().monomial()
|
|
593
|
+
return m(self).to_symmetric_function()
|
|
594
|
+
|
|
595
|
+
def to_wqsym(self):
|
|
596
|
+
r"""
|
|
597
|
+
Return the image of ``self`` under the canonical
|
|
598
|
+
inclusion map `NCSym \to WQSym`.
|
|
599
|
+
|
|
600
|
+
The canonical inclusion map `NCSym \to WQSym` is
|
|
601
|
+
an injective homomorphism of algebras. It sends a
|
|
602
|
+
basis element `\mathbf{m}_A` of `NCSym` to the sum of
|
|
603
|
+
basis elements `\mathbf{M}_P` of `WQSym`, where `P`
|
|
604
|
+
ranges over all ordered set partitions that become
|
|
605
|
+
`A` when the ordering is forgotten.
|
|
606
|
+
This map is denoted by `\theta` in [BZ05]_ (17).
|
|
607
|
+
|
|
608
|
+
.. SEEALSO::
|
|
609
|
+
|
|
610
|
+
:class:`WordQuasiSymmetricFunctions` for a
|
|
611
|
+
definition of `WQSym`.
|
|
612
|
+
|
|
613
|
+
EXAMPLES::
|
|
614
|
+
|
|
615
|
+
sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
|
|
616
|
+
sage: e = NCSym.e()
|
|
617
|
+
sage: h = NCSym.h()
|
|
618
|
+
sage: p = NCSym.p()
|
|
619
|
+
sage: cp = NCSym.cp()
|
|
620
|
+
sage: x = NCSym.x()
|
|
621
|
+
sage: m = NCSym.m()
|
|
622
|
+
sage: m[[1,3],[2]].to_wqsym()
|
|
623
|
+
M[{1, 3}, {2}] + M[{2}, {1, 3}]
|
|
624
|
+
sage: x[[1,3],[2]].to_wqsym()
|
|
625
|
+
-M[{1}, {2}, {3}] - M[{1}, {2, 3}] - M[{1}, {3}, {2}]
|
|
626
|
+
- M[{1, 2}, {3}] - M[{2}, {1}, {3}] - M[{2}, {3}, {1}]
|
|
627
|
+
- M[{2, 3}, {1}] - M[{3}, {1}, {2}] - M[{3}, {1, 2}]
|
|
628
|
+
- M[{3}, {2}, {1}]
|
|
629
|
+
sage: (4*p[[1,3],[2]]-p[[1]]).to_wqsym()
|
|
630
|
+
-M[{1}] + 4*M[{1, 2, 3}] + 4*M[{1, 3}, {2}] + 4*M[{2}, {1, 3}]
|
|
631
|
+
"""
|
|
632
|
+
parent = self.parent()
|
|
633
|
+
NCSym = parent.realization_of()
|
|
634
|
+
R = parent.base_ring()
|
|
635
|
+
m = NCSym.monomial()
|
|
636
|
+
from sage.combinat.chas.wqsym import WordQuasiSymmetricFunctions
|
|
637
|
+
M = WordQuasiSymmetricFunctions(R).M()
|
|
638
|
+
from itertools import permutations
|
|
639
|
+
OSP = M.basis().keys()
|
|
640
|
+
|
|
641
|
+
def to_wqsym_on_m_basis(A):
|
|
642
|
+
# Return the image of `\mathbf{m}_A` under the inclusion
|
|
643
|
+
# map `NCSym \to WQSym`.
|
|
644
|
+
l = len(A)
|
|
645
|
+
return M.sum_of_terms(((OSP([A[ui] for ui in u]), 1)
|
|
646
|
+
for u in permutations(range(l))),
|
|
647
|
+
distinct=True)
|
|
648
|
+
return M.linear_combination((to_wqsym_on_m_basis(A), coeff)
|
|
649
|
+
for A, coeff in m(self))
|
|
650
|
+
|
|
651
|
+
def internal_coproduct(self):
|
|
652
|
+
r"""
|
|
653
|
+
Return the internal coproduct of ``self``.
|
|
654
|
+
|
|
655
|
+
The internal coproduct is defined on the power sum basis as
|
|
656
|
+
|
|
657
|
+
.. MATH::
|
|
658
|
+
|
|
659
|
+
\mathbf{p}_A \mapsto \mathbf{p}_A \otimes \mathbf{p}_A
|
|
660
|
+
|
|
661
|
+
and the map is extended linearly.
|
|
662
|
+
|
|
663
|
+
OUTPUT: an element of the tensor square of the basis of ``self``
|
|
664
|
+
|
|
665
|
+
EXAMPLES::
|
|
666
|
+
|
|
667
|
+
sage: x = SymmetricFunctionsNonCommutingVariables(QQ).x()
|
|
668
|
+
sage: x[[1,3],[2]].internal_coproduct()
|
|
669
|
+
x{{1}, {2}, {3}} # x{{1, 3}, {2}} + x{{1, 3}, {2}} # x{{1}, {2}, {3}}
|
|
670
|
+
+ x{{1, 3}, {2}} # x{{1, 3}, {2}}
|
|
671
|
+
"""
|
|
672
|
+
return self.parent().internal_coproduct(self)
|
|
673
|
+
|
|
674
|
+
def omega(self):
|
|
675
|
+
r"""
|
|
676
|
+
Return the involution `\omega` applied to ``self``.
|
|
677
|
+
|
|
678
|
+
The involution `\omega` is defined by
|
|
679
|
+
|
|
680
|
+
.. MATH::
|
|
681
|
+
|
|
682
|
+
\mathbf{e}_A \mapsto \mathbf{h}_A
|
|
683
|
+
|
|
684
|
+
and the result is extended linearly.
|
|
685
|
+
|
|
686
|
+
OUTPUT: an element in the same basis as ``self``
|
|
687
|
+
|
|
688
|
+
EXAMPLES::
|
|
689
|
+
|
|
690
|
+
sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
|
|
691
|
+
sage: m = NCSym.m()
|
|
692
|
+
sage: m[[1,3],[2]].omega()
|
|
693
|
+
-2*m{{1, 2, 3}} - m{{1, 3}, {2}}
|
|
694
|
+
sage: p = NCSym.p()
|
|
695
|
+
sage: p[[1,3],[2]].omega()
|
|
696
|
+
-p{{1, 3}, {2}}
|
|
697
|
+
sage: cp = NCSym.cp()
|
|
698
|
+
sage: cp[[1,3],[2]].omega()
|
|
699
|
+
-2*cp{{1, 2, 3}} - cp{{1, 3}, {2}}
|
|
700
|
+
sage: x = NCSym.x()
|
|
701
|
+
sage: x[[1,3],[2]].omega()
|
|
702
|
+
-2*x{{1}, {2}, {3}} - x{{1, 3}, {2}}
|
|
703
|
+
"""
|
|
704
|
+
P = self.parent()
|
|
705
|
+
e = P.realization_of().e()
|
|
706
|
+
h = P.realization_of().h()
|
|
707
|
+
return P(h.sum_of_terms(e(self)))
|
|
708
|
+
|
|
709
|
+
|
|
710
|
+
class MultiplicativeNCSymBases(Category_realization_of_parent):
|
|
711
|
+
r"""
|
|
712
|
+
Category of multiplicative bases of symmetric functions in non-commuting variables.
|
|
713
|
+
|
|
714
|
+
A multiplicative basis is one for which `\mathbf{b}_A \mathbf{b}_B = \mathbf{b}_{A|B}`
|
|
715
|
+
where `A|B` is the :meth:`~sage.combinat.set_partition.SetPartition.pipe` operation
|
|
716
|
+
on set partitions.
|
|
717
|
+
|
|
718
|
+
EXAMPLES::
|
|
719
|
+
|
|
720
|
+
sage: from sage.combinat.ncsym.bases import MultiplicativeNCSymBases
|
|
721
|
+
sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
|
|
722
|
+
sage: MultiplicativeNCSymBases(NCSym)
|
|
723
|
+
Category of multiplicative bases of symmetric functions in non-commuting variables over the Rational Field
|
|
724
|
+
"""
|
|
725
|
+
|
|
726
|
+
def super_categories(self):
|
|
727
|
+
r"""
|
|
728
|
+
Return the super categories of bases of the Hopf dual of the
|
|
729
|
+
symmetric functions in non-commuting variables.
|
|
730
|
+
|
|
731
|
+
OUTPUT: list of categories
|
|
732
|
+
|
|
733
|
+
TESTS::
|
|
734
|
+
|
|
735
|
+
sage: from sage.combinat.ncsym.bases import MultiplicativeNCSymBases
|
|
736
|
+
sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
|
|
737
|
+
sage: MultiplicativeNCSymBases(NCSym).super_categories()
|
|
738
|
+
[Category of bases of symmetric functions in non-commuting variables over the Rational Field]
|
|
739
|
+
"""
|
|
740
|
+
return [NCSymBases(self.base())]
|
|
741
|
+
|
|
742
|
+
def _repr_(self):
|
|
743
|
+
r"""
|
|
744
|
+
Return a string representation of ``self``.
|
|
745
|
+
|
|
746
|
+
TESTS::
|
|
747
|
+
|
|
748
|
+
sage: from sage.combinat.ncsym.bases import MultiplicativeNCSymBases
|
|
749
|
+
sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
|
|
750
|
+
sage: MultiplicativeNCSymBases(NCSym)
|
|
751
|
+
Category of multiplicative bases of symmetric functions in non-commuting variables over the Rational Field
|
|
752
|
+
"""
|
|
753
|
+
return "Category of multiplicative bases of symmetric functions in non-commuting"\
|
|
754
|
+
" variables over the {}".format(self.base().base_ring())
|
|
755
|
+
|
|
756
|
+
class ParentMethods:
|
|
757
|
+
def product_on_basis(self, A, B):
|
|
758
|
+
r"""
|
|
759
|
+
The product on basis elements.
|
|
760
|
+
|
|
761
|
+
The product on a multiplicative basis is given by
|
|
762
|
+
`\mathbf{b}_A \cdot \mathbf{b}_B = \mathbf{b}_{A | B}`.
|
|
763
|
+
|
|
764
|
+
The bases `\{ \mathbf{e}, \mathbf{h}, \mathbf{x}, \mathbf{cp}, \mathbf{p},
|
|
765
|
+
\mathbf{chi}, \mathbf{rho} \}` are all multiplicative.
|
|
766
|
+
|
|
767
|
+
INPUT:
|
|
768
|
+
|
|
769
|
+
- ``A``, ``B`` -- set partitions
|
|
770
|
+
|
|
771
|
+
OUTPUT: an element in the basis ``self``
|
|
772
|
+
|
|
773
|
+
EXAMPLES::
|
|
774
|
+
|
|
775
|
+
sage: e = SymmetricFunctionsNonCommutingVariables(QQ).e()
|
|
776
|
+
sage: h = SymmetricFunctionsNonCommutingVariables(QQ).h()
|
|
777
|
+
sage: x = SymmetricFunctionsNonCommutingVariables(QQ).x()
|
|
778
|
+
sage: cp = SymmetricFunctionsNonCommutingVariables(QQ).cp()
|
|
779
|
+
sage: p = SymmetricFunctionsNonCommutingVariables(QQ).p()
|
|
780
|
+
sage: chi = SymmetricFunctionsNonCommutingVariables(QQ).chi()
|
|
781
|
+
sage: rho = SymmetricFunctionsNonCommutingVariables(QQ).rho()
|
|
782
|
+
sage: A = SetPartition([[1], [2, 3]])
|
|
783
|
+
sage: B = SetPartition([[1], [3], [2,4]])
|
|
784
|
+
sage: e.product_on_basis(A, B)
|
|
785
|
+
e{{1}, {2, 3}, {4}, {5, 7}, {6}}
|
|
786
|
+
sage: h.product_on_basis(A, B)
|
|
787
|
+
h{{1}, {2, 3}, {4}, {5, 7}, {6}}
|
|
788
|
+
sage: x.product_on_basis(A, B)
|
|
789
|
+
x{{1}, {2, 3}, {4}, {5, 7}, {6}}
|
|
790
|
+
sage: cp.product_on_basis(A, B)
|
|
791
|
+
cp{{1}, {2, 3}, {4}, {5, 7}, {6}}
|
|
792
|
+
sage: p.product_on_basis(A, B)
|
|
793
|
+
p{{1}, {2, 3}, {4}, {5, 7}, {6}}
|
|
794
|
+
sage: chi.product_on_basis(A, B)
|
|
795
|
+
chi{{1}, {2, 3}, {4}, {5, 7}, {6}}
|
|
796
|
+
sage: rho.product_on_basis(A, B)
|
|
797
|
+
rho{{1}, {2, 3}, {4}, {5, 7}, {6}}
|
|
798
|
+
sage: e.product_on_basis(A,B)==e(h(e(A))*h(e(B)))
|
|
799
|
+
True
|
|
800
|
+
sage: h.product_on_basis(A,B)==h(x(h(A))*x(h(B)))
|
|
801
|
+
True
|
|
802
|
+
sage: x.product_on_basis(A,B)==x(h(x(A))*h(x(B)))
|
|
803
|
+
True
|
|
804
|
+
sage: cp.product_on_basis(A,B)==cp(p(cp(A))*p(cp(B)))
|
|
805
|
+
True
|
|
806
|
+
sage: p.product_on_basis(A,B)==p(e(p(A))*e(p(B)))
|
|
807
|
+
True
|
|
808
|
+
"""
|
|
809
|
+
return self.monomial(A.pipe(B))
|
|
810
|
+
|
|
811
|
+
class ElementMethods:
|
|
812
|
+
pass
|
|
813
|
+
|
|
814
|
+
|
|
815
|
+
class NCSymDualBases(Category_realization_of_parent):
|
|
816
|
+
r"""
|
|
817
|
+
Category of bases of dual symmetric functions in non-commuting variables.
|
|
818
|
+
|
|
819
|
+
EXAMPLES::
|
|
820
|
+
|
|
821
|
+
sage: from sage.combinat.ncsym.bases import NCSymDualBases
|
|
822
|
+
sage: DNCSym = SymmetricFunctionsNonCommutingVariables(QQ).dual()
|
|
823
|
+
sage: NCSymDualBases(DNCSym)
|
|
824
|
+
Category of bases of dual symmetric functions in non-commuting variables over the Rational Field
|
|
825
|
+
"""
|
|
826
|
+
|
|
827
|
+
def super_categories(self):
|
|
828
|
+
r"""
|
|
829
|
+
Return the super categories of bases of the Hopf dual of the
|
|
830
|
+
symmetric functions in non-commuting variables.
|
|
831
|
+
|
|
832
|
+
OUTPUT: list of categories
|
|
833
|
+
|
|
834
|
+
TESTS::
|
|
835
|
+
|
|
836
|
+
sage: from sage.combinat.ncsym.bases import NCSymBases
|
|
837
|
+
sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
|
|
838
|
+
sage: NCSymBases(NCSym).super_categories()
|
|
839
|
+
[Category of bases of NCSym or NCSym^* over the Rational Field]
|
|
840
|
+
"""
|
|
841
|
+
return [NCSymOrNCSymDualBases(self.base())]
|
|
842
|
+
|
|
843
|
+
def _repr_(self):
|
|
844
|
+
r"""
|
|
845
|
+
Return a string representation of ``self``.
|
|
846
|
+
|
|
847
|
+
TESTS::
|
|
848
|
+
|
|
849
|
+
sage: from sage.combinat.ncsym.bases import NCSymDualBases
|
|
850
|
+
sage: DNCSym = SymmetricFunctionsNonCommutingVariables(QQ).dual()
|
|
851
|
+
sage: NCSymDualBases(DNCSym)
|
|
852
|
+
Category of bases of dual symmetric functions in non-commuting variables over the Rational Field
|
|
853
|
+
"""
|
|
854
|
+
return "Category of bases of dual symmetric functions in non-commuting"\
|
|
855
|
+
" variables over the {}".format(self.base().base_ring())
|