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,246 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs lrcalc_python sage.combinat sage.modules
|
|
3
|
+
"""
|
|
4
|
+
Orthogonal symmetric functions
|
|
5
|
+
|
|
6
|
+
AUTHORS:
|
|
7
|
+
|
|
8
|
+
- Travis Scrimshaw (2013-11-10): 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
|
+
#
|
|
15
|
+
# This code is distributed in the hope that it will be useful,
|
|
16
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
17
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
18
|
+
# General Public License for more details.
|
|
19
|
+
#
|
|
20
|
+
# The full text of the GPL is available at:
|
|
21
|
+
#
|
|
22
|
+
# https://www.gnu.org/licenses/
|
|
23
|
+
# ****************************************************************************
|
|
24
|
+
|
|
25
|
+
from sage.combinat.partition import Partitions
|
|
26
|
+
from sage.libs.lrcalc import lrcalc
|
|
27
|
+
from sage.misc.cachefunc import cached_method
|
|
28
|
+
|
|
29
|
+
from . import sfa
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class SymmetricFunctionAlgebra_orthogonal(sfa.SymmetricFunctionAlgebra_generic):
|
|
33
|
+
r"""
|
|
34
|
+
The orthogonal symmetric function basis (or orthogonal basis, to be short).
|
|
35
|
+
|
|
36
|
+
The orthogonal basis `\{ o_{\lambda} \}` where `\lambda` is taken over
|
|
37
|
+
all partitions is defined by the following change of basis with the
|
|
38
|
+
Schur functions:
|
|
39
|
+
|
|
40
|
+
.. MATH::
|
|
41
|
+
|
|
42
|
+
s_{\lambda} = \sum_{\mu} \left( \sum_{\nu \in H} c^{\lambda}_{\mu\nu}
|
|
43
|
+
\right) o_{\mu}
|
|
44
|
+
|
|
45
|
+
where `H` is the set of all partitions with even-width rows and
|
|
46
|
+
`c^{\lambda}_{\mu\nu}` is the usual Littlewood-Richardson (LR)
|
|
47
|
+
coefficients. By the properties of LR coefficients, this can be shown to
|
|
48
|
+
be a upper unitriangular change of basis.
|
|
49
|
+
|
|
50
|
+
.. NOTE::
|
|
51
|
+
|
|
52
|
+
This is only a filtered basis, not a `\ZZ`-graded basis. However this
|
|
53
|
+
does respect the induced `(\ZZ/2\ZZ)`-grading.
|
|
54
|
+
|
|
55
|
+
INPUT:
|
|
56
|
+
|
|
57
|
+
- ``Sym`` -- an instance of the ring of the symmetric functions
|
|
58
|
+
|
|
59
|
+
REFERENCES:
|
|
60
|
+
|
|
61
|
+
- [ChariKleber2000]_
|
|
62
|
+
- [KoikeTerada1987]_
|
|
63
|
+
- [ShimozonoZabrocki2006]_
|
|
64
|
+
|
|
65
|
+
EXAMPLES:
|
|
66
|
+
|
|
67
|
+
Here are the first few orthogonal symmetric functions, in various bases::
|
|
68
|
+
|
|
69
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
70
|
+
sage: o = Sym.o()
|
|
71
|
+
sage: e = Sym.e()
|
|
72
|
+
sage: h = Sym.h()
|
|
73
|
+
sage: p = Sym.p()
|
|
74
|
+
sage: s = Sym.s()
|
|
75
|
+
sage: m = Sym.m()
|
|
76
|
+
|
|
77
|
+
sage: p(o([1]))
|
|
78
|
+
p[1]
|
|
79
|
+
sage: m(o([1]))
|
|
80
|
+
m[1]
|
|
81
|
+
sage: e(o([1]))
|
|
82
|
+
e[1]
|
|
83
|
+
sage: h(o([1]))
|
|
84
|
+
h[1]
|
|
85
|
+
sage: s(o([1]))
|
|
86
|
+
s[1]
|
|
87
|
+
|
|
88
|
+
sage: p(o([2]))
|
|
89
|
+
-p[] + 1/2*p[1, 1] + 1/2*p[2]
|
|
90
|
+
sage: m(o([2]))
|
|
91
|
+
-m[] + m[1, 1] + m[2]
|
|
92
|
+
sage: e(o([2]))
|
|
93
|
+
-e[] + e[1, 1] - e[2]
|
|
94
|
+
sage: h(o([2]))
|
|
95
|
+
-h[] + h[2]
|
|
96
|
+
sage: s(o([2]))
|
|
97
|
+
-s[] + s[2]
|
|
98
|
+
|
|
99
|
+
sage: p(o([3]))
|
|
100
|
+
-p[1] + 1/6*p[1, 1, 1] + 1/2*p[2, 1] + 1/3*p[3]
|
|
101
|
+
sage: m(o([3]))
|
|
102
|
+
-m[1] + m[1, 1, 1] + m[2, 1] + m[3]
|
|
103
|
+
sage: e(o([3]))
|
|
104
|
+
-e[1] + e[1, 1, 1] - 2*e[2, 1] + e[3]
|
|
105
|
+
sage: h(o([3]))
|
|
106
|
+
-h[1] + h[3]
|
|
107
|
+
sage: s(o([3]))
|
|
108
|
+
-s[1] + s[3]
|
|
109
|
+
|
|
110
|
+
sage: Sym = SymmetricFunctions(ZZ)
|
|
111
|
+
sage: o = Sym.o()
|
|
112
|
+
sage: e = Sym.e()
|
|
113
|
+
sage: h = Sym.h()
|
|
114
|
+
sage: s = Sym.s()
|
|
115
|
+
sage: m = Sym.m()
|
|
116
|
+
sage: p = Sym.p()
|
|
117
|
+
sage: m(o([4]))
|
|
118
|
+
-m[1, 1] + m[1, 1, 1, 1] - m[2] + m[2, 1, 1] + m[2, 2] + m[3, 1] + m[4]
|
|
119
|
+
sage: e(o([4]))
|
|
120
|
+
-e[1, 1] + e[1, 1, 1, 1] + e[2] - 3*e[2, 1, 1] + e[2, 2] + 2*e[3, 1] - e[4]
|
|
121
|
+
sage: h(o([4]))
|
|
122
|
+
-h[2] + h[4]
|
|
123
|
+
sage: s(o([4]))
|
|
124
|
+
-s[2] + s[4]
|
|
125
|
+
|
|
126
|
+
Some examples of conversions the other way::
|
|
127
|
+
|
|
128
|
+
sage: o(h[3])
|
|
129
|
+
o[1] + o[3]
|
|
130
|
+
sage: o(e[3])
|
|
131
|
+
o[1, 1, 1]
|
|
132
|
+
sage: o(m[2,1])
|
|
133
|
+
o[1] - 2*o[1, 1, 1] + o[2, 1]
|
|
134
|
+
sage: o(p[3])
|
|
135
|
+
o[1, 1, 1] - o[2, 1] + o[3]
|
|
136
|
+
|
|
137
|
+
Some multiplication::
|
|
138
|
+
|
|
139
|
+
sage: o([2]) * o([1,1])
|
|
140
|
+
o[1, 1] + o[2] + o[2, 1, 1] + o[3, 1]
|
|
141
|
+
sage: o([2,1,1]) * o([2])
|
|
142
|
+
o[1, 1] + o[1, 1, 1, 1] + 2*o[2, 1, 1] + o[2, 2] + o[2, 2, 1, 1]
|
|
143
|
+
+ o[3, 1] + o[3, 1, 1, 1] + o[3, 2, 1] + o[4, 1, 1]
|
|
144
|
+
sage: o([1,1]) * o([2,1])
|
|
145
|
+
o[1] + o[1, 1, 1] + 2*o[2, 1] + o[2, 1, 1, 1] + o[2, 2, 1]
|
|
146
|
+
+ o[3] + o[3, 1, 1] + o[3, 2]
|
|
147
|
+
|
|
148
|
+
Examples of the Hopf algebra structure::
|
|
149
|
+
|
|
150
|
+
sage: o([1]).antipode()
|
|
151
|
+
-o[1]
|
|
152
|
+
sage: o([2]).antipode()
|
|
153
|
+
-o[] + o[1, 1]
|
|
154
|
+
sage: o([1]).coproduct()
|
|
155
|
+
o[] # o[1] + o[1] # o[]
|
|
156
|
+
sage: o([2]).coproduct()
|
|
157
|
+
o[] # o[] + o[] # o[2] + o[1] # o[1] + o[2] # o[]
|
|
158
|
+
sage: o([1]).counit()
|
|
159
|
+
0
|
|
160
|
+
sage: o.one().counit()
|
|
161
|
+
1
|
|
162
|
+
"""
|
|
163
|
+
|
|
164
|
+
def __init__(self, Sym):
|
|
165
|
+
"""
|
|
166
|
+
Initialize ``self``.
|
|
167
|
+
|
|
168
|
+
TESTS::
|
|
169
|
+
|
|
170
|
+
sage: o = SymmetricFunctions(QQ).o()
|
|
171
|
+
sage: TestSuite(o).run()
|
|
172
|
+
"""
|
|
173
|
+
sfa.SymmetricFunctionAlgebra_generic.__init__(self, Sym, "orthogonal",
|
|
174
|
+
'o', graded=False)
|
|
175
|
+
|
|
176
|
+
# We make a strong reference since we use it for our computations
|
|
177
|
+
# and so we can define the coercion below (only codomains have
|
|
178
|
+
# strong references)
|
|
179
|
+
self._s = Sym.schur()
|
|
180
|
+
|
|
181
|
+
# Setup the coercions
|
|
182
|
+
M = self._s.module_morphism(self._s_to_o_on_basis, codomain=self,
|
|
183
|
+
triangular='upper', unitriangular=True)
|
|
184
|
+
M.register_as_coercion()
|
|
185
|
+
Mi = self.module_morphism(self._o_to_s_on_basis, codomain=self._s,
|
|
186
|
+
triangular='upper', unitriangular=True)
|
|
187
|
+
Mi.register_as_coercion()
|
|
188
|
+
|
|
189
|
+
@cached_method
|
|
190
|
+
def _o_to_s_on_basis(self, lam):
|
|
191
|
+
r"""
|
|
192
|
+
Return the orthogonal symmetric function ``o[lam]`` expanded in
|
|
193
|
+
the Schur basis, where ``lam`` is a partition.
|
|
194
|
+
|
|
195
|
+
TESTS:
|
|
196
|
+
|
|
197
|
+
Check that this is the inverse::
|
|
198
|
+
|
|
199
|
+
sage: o = SymmetricFunctions(QQ).o()
|
|
200
|
+
sage: s = SymmetricFunctions(QQ).s()
|
|
201
|
+
sage: all(o(s(o[la])) == o[la] for i in range(5) for la in Partitions(i))
|
|
202
|
+
True
|
|
203
|
+
sage: all(s(o(s[la])) == s[la] for i in range(5) for la in Partitions(i))
|
|
204
|
+
True
|
|
205
|
+
"""
|
|
206
|
+
R = self.base_ring()
|
|
207
|
+
n = sum(lam)
|
|
208
|
+
return self._s._from_dict({ mu: R.sum( (-1)**j * lrcalc.lrcoef_unsafe(lam, mu, nu)
|
|
209
|
+
for nu in Partitions(2*j)
|
|
210
|
+
if all(nu.arm_length(i,i) == nu.leg_length(i,i)+1
|
|
211
|
+
for i in range(nu.frobenius_rank()))
|
|
212
|
+
)
|
|
213
|
+
for j in range(n//2+1) # // 2 for horizontal dominoes
|
|
214
|
+
for mu in Partitions(n-2*j) })
|
|
215
|
+
|
|
216
|
+
@cached_method
|
|
217
|
+
def _s_to_o_on_basis(self, lam):
|
|
218
|
+
r"""
|
|
219
|
+
Return the Schur symmetric function ``s[lam]`` expanded in
|
|
220
|
+
the orthogonal basis, where ``lam`` is a partition.
|
|
221
|
+
|
|
222
|
+
INPUT:
|
|
223
|
+
|
|
224
|
+
- ``lam`` -- a partition
|
|
225
|
+
|
|
226
|
+
OUTPUT: the expansion of ``s[lam]`` in the orthogonal basis ``self``
|
|
227
|
+
|
|
228
|
+
EXAMPLES::
|
|
229
|
+
|
|
230
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
231
|
+
sage: s = Sym.schur()
|
|
232
|
+
sage: o = Sym.orthogonal()
|
|
233
|
+
sage: o._s_to_o_on_basis(Partition([]))
|
|
234
|
+
o[]
|
|
235
|
+
sage: o._s_to_o_on_basis(Partition([4,2,1]))
|
|
236
|
+
o[1] + 2*o[2, 1] + o[2, 2, 1] + o[3]
|
|
237
|
+
+ o[3, 1, 1] + o[3, 2] + o[4, 1] + o[4, 2, 1]
|
|
238
|
+
sage: s(o._s_to_o_on_basis(Partition([3,1]))) == s[3,1]
|
|
239
|
+
True
|
|
240
|
+
"""
|
|
241
|
+
R = self.base_ring()
|
|
242
|
+
n = sum(lam)
|
|
243
|
+
return self._from_dict({ mu: R.sum( lrcalc.lrcoef_unsafe(lam, mu, [2*x for x in nu])
|
|
244
|
+
for nu in Partitions(j) )
|
|
245
|
+
for j in range(n//2+1) # // 2 for horizontal dominoes
|
|
246
|
+
for mu in Partitions(n-2*j) })
|
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.modules
|
|
3
|
+
"""
|
|
4
|
+
Symmetric functions defined by orthogonality and triangularity
|
|
5
|
+
|
|
6
|
+
One characterization of Schur functions is that they are upper
|
|
7
|
+
triangularly related to the monomial symmetric functions and
|
|
8
|
+
orthogonal with respect to the Hall scalar product. We can use the
|
|
9
|
+
class SymmetricFunctionAlgebra_orthotriang to obtain the Schur
|
|
10
|
+
functions from this definition.
|
|
11
|
+
|
|
12
|
+
::
|
|
13
|
+
|
|
14
|
+
sage: from sage.combinat.sf.sfa import zee
|
|
15
|
+
sage: from sage.combinat.sf.orthotriang import SymmetricFunctionAlgebra_orthotriang
|
|
16
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
17
|
+
sage: m = Sym.m()
|
|
18
|
+
sage: s = SymmetricFunctionAlgebra_orthotriang(Sym, m, zee, 's', 'Schur functions')
|
|
19
|
+
sage: s([2,1])^2
|
|
20
|
+
s[2, 2, 1, 1] + s[2, 2, 2] + s[3, 1, 1, 1] + 2*s[3, 2, 1] + s[3, 3] + s[4, 1, 1] + s[4, 2]
|
|
21
|
+
|
|
22
|
+
::
|
|
23
|
+
|
|
24
|
+
sage: s2 = SymmetricFunctions(QQ).s()
|
|
25
|
+
sage: s2([2,1])^2 # needs lrcalc_python
|
|
26
|
+
s[2, 2, 1, 1] + s[2, 2, 2] + s[3, 1, 1, 1] + 2*s[3, 2, 1] + s[3, 3] + s[4, 1, 1] + s[4, 2]
|
|
27
|
+
"""
|
|
28
|
+
# ****************************************************************************
|
|
29
|
+
# Copyright (C) 2007 Mike Hansen <mhansen@gmail.com>
|
|
30
|
+
# 2012 Mike Zabrocki <mike.zabrocki@gmail.com>
|
|
31
|
+
#
|
|
32
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
33
|
+
#
|
|
34
|
+
# This code is distributed in the hope that it will be useful,
|
|
35
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
36
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
37
|
+
# General Public License for more details.
|
|
38
|
+
#
|
|
39
|
+
# The full text of the GPL is available at:
|
|
40
|
+
#
|
|
41
|
+
# https://www.gnu.org/licenses/
|
|
42
|
+
# ****************************************************************************
|
|
43
|
+
|
|
44
|
+
from sage.categories.homset import Hom
|
|
45
|
+
from sage.categories.morphism import SetMorphism
|
|
46
|
+
|
|
47
|
+
from . import sfa
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class SymmetricFunctionAlgebra_orthotriang(sfa.SymmetricFunctionAlgebra_generic):
|
|
51
|
+
|
|
52
|
+
class Element(sfa.SymmetricFunctionAlgebra_generic.Element):
|
|
53
|
+
pass
|
|
54
|
+
|
|
55
|
+
@staticmethod
|
|
56
|
+
def __classcall__(cls, Sym, base, scalar, prefix, basis_name, leading_coeff=None):
|
|
57
|
+
"""
|
|
58
|
+
Normalize the arguments.
|
|
59
|
+
|
|
60
|
+
TESTS::
|
|
61
|
+
|
|
62
|
+
sage: from sage.combinat.sf.sfa import zee
|
|
63
|
+
sage: from sage.combinat.sf.orthotriang import SymmetricFunctionAlgebra_orthotriang
|
|
64
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
65
|
+
sage: m = Sym.m()
|
|
66
|
+
sage: B1 = SymmetricFunctionAlgebra_orthotriang(Sym, m, zee, 's', 'Schur')
|
|
67
|
+
sage: B2 = SymmetricFunctionAlgebra_orthotriang(Sym, m, zee, 's', 'Schur', None)
|
|
68
|
+
sage: B1 is B2
|
|
69
|
+
True
|
|
70
|
+
"""
|
|
71
|
+
return super().__classcall__(cls, Sym, base, scalar, prefix, basis_name, leading_coeff)
|
|
72
|
+
|
|
73
|
+
def __init__(self, Sym, base, scalar, prefix, basis_name, leading_coeff):
|
|
74
|
+
r"""
|
|
75
|
+
Initialization of the symmetric function algebra defined via orthotriangular rules.
|
|
76
|
+
|
|
77
|
+
INPUT:
|
|
78
|
+
|
|
79
|
+
- ``self`` -- a basis determined by an orthotriangular definition
|
|
80
|
+
- ``Sym`` -- ring of symmetric functions
|
|
81
|
+
- ``base`` -- an instance of a basis of the ring of symmetric functions
|
|
82
|
+
(e.g. the Schur functions)
|
|
83
|
+
- ``scalar`` -- a function ``zee`` on partitions. The function
|
|
84
|
+
``zee`` determines the scalar product on the power sum basis
|
|
85
|
+
with normalization `\langle p_{\mu}, p_{\mu} \rangle =
|
|
86
|
+
\mathrm{zee}(\mu)`.
|
|
87
|
+
- ``prefix`` -- the prefix used to display the basis
|
|
88
|
+
- ``basis_name`` -- the name used for the basis
|
|
89
|
+
|
|
90
|
+
.. NOTE::
|
|
91
|
+
|
|
92
|
+
The base ring is required to be a `\QQ`-algebra for this
|
|
93
|
+
method to be usable, since the scalar product is defined by
|
|
94
|
+
its values on the power sum basis.
|
|
95
|
+
|
|
96
|
+
EXAMPLES::
|
|
97
|
+
|
|
98
|
+
sage: from sage.combinat.sf.sfa import zee
|
|
99
|
+
sage: from sage.combinat.sf.orthotriang import SymmetricFunctionAlgebra_orthotriang
|
|
100
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
101
|
+
sage: m = Sym.m()
|
|
102
|
+
sage: s = SymmetricFunctionAlgebra_orthotriang(Sym, m, zee, 's', 'Schur'); s
|
|
103
|
+
Symmetric Functions over Rational Field in the Schur basis
|
|
104
|
+
|
|
105
|
+
TESTS::
|
|
106
|
+
|
|
107
|
+
sage: # needs lrcalc_python
|
|
108
|
+
sage: TestSuite(s).run(elements=[s[1,1]+2*s[2], s[1]+3*s[1,1]])
|
|
109
|
+
sage: TestSuite(s).run(skip=["_test_associativity", "_test_prod"]) # long time (7s on sage.math, 2011)
|
|
110
|
+
|
|
111
|
+
Note: ``s.an_element()`` is of degree 4; so we skip
|
|
112
|
+
``_test_associativity`` and ``_test_prod`` which involve
|
|
113
|
+
(currently?) expensive calculations up to degree 12.
|
|
114
|
+
"""
|
|
115
|
+
self._sym = Sym
|
|
116
|
+
self._sf_base = base
|
|
117
|
+
self._scalar = scalar
|
|
118
|
+
self._leading_coeff = leading_coeff
|
|
119
|
+
sfa.SymmetricFunctionAlgebra_generic.__init__(self, Sym, prefix=prefix, basis_name=basis_name)
|
|
120
|
+
|
|
121
|
+
self._self_to_base_cache = {}
|
|
122
|
+
self._base_to_self_cache = {}
|
|
123
|
+
self.register_coercion(SetMorphism(Hom(base, self), self._base_to_self))
|
|
124
|
+
base.register_coercion(SetMorphism(Hom(self, base), self._self_to_base))
|
|
125
|
+
|
|
126
|
+
def construction(self):
|
|
127
|
+
"""
|
|
128
|
+
Return a pair ``(F, R)``, where ``F`` is a
|
|
129
|
+
:class:`SymmetricFunctionsFunctor` and `R` is a ring, such
|
|
130
|
+
that ``F(R)`` returns ``self``.
|
|
131
|
+
|
|
132
|
+
EXAMPLES::
|
|
133
|
+
|
|
134
|
+
sage: from sage.combinat.sf.sfa import zee
|
|
135
|
+
sage: from sage.combinat.sf.orthotriang import SymmetricFunctionAlgebra_orthotriang
|
|
136
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
137
|
+
sage: m = Sym.m()
|
|
138
|
+
sage: s = SymmetricFunctionAlgebra_orthotriang(Sym, m, zee, 's', 'Schur')
|
|
139
|
+
sage: s.construction()
|
|
140
|
+
(SymmetricFunctionsFunctor[Schur], Rational Field)
|
|
141
|
+
"""
|
|
142
|
+
return OrthotriangBasisFunctor(self), self.base_ring()
|
|
143
|
+
|
|
144
|
+
def _base_to_self(self, x):
|
|
145
|
+
"""
|
|
146
|
+
Coerce a symmetric function in base ``x`` into ``self``.
|
|
147
|
+
|
|
148
|
+
INPUT:
|
|
149
|
+
|
|
150
|
+
- ``self`` -- a basis determined by an orthotriangular definition
|
|
151
|
+
- ``x`` -- an element of the basis `base` to which ``self`` is triangularly related
|
|
152
|
+
|
|
153
|
+
OUTPUT: an element of ``self`` equivalent to ``x``
|
|
154
|
+
|
|
155
|
+
EXAMPLES::
|
|
156
|
+
|
|
157
|
+
sage: from sage.combinat.sf.sfa import zee
|
|
158
|
+
sage: from sage.combinat.sf.orthotriang import SymmetricFunctionAlgebra_orthotriang
|
|
159
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
160
|
+
sage: m = Sym.m()
|
|
161
|
+
sage: s = SymmetricFunctionAlgebra_orthotriang(Sym, m, zee, 's', 'Schur functions')
|
|
162
|
+
sage: s._base_to_self(m([2,1]))
|
|
163
|
+
-2*s[1, 1, 1] + s[2, 1]
|
|
164
|
+
"""
|
|
165
|
+
return self._from_cache(x, self._base_cache, self._base_to_self_cache)
|
|
166
|
+
|
|
167
|
+
def _self_to_base(self, x):
|
|
168
|
+
"""
|
|
169
|
+
Coerce a symmetric function in ``self`` into base ``x``.
|
|
170
|
+
|
|
171
|
+
INPUT:
|
|
172
|
+
|
|
173
|
+
- ``self`` -- a basis determined by an orthotriangular definition
|
|
174
|
+
- ``x`` -- an element of ``self`` as a basis of the ring of symmetric functions
|
|
175
|
+
|
|
176
|
+
OUTPUT: the element ``x`` expressed in the basis to which ``self`` is triangularly related
|
|
177
|
+
|
|
178
|
+
EXAMPLES::
|
|
179
|
+
|
|
180
|
+
sage: from sage.combinat.sf.sfa import zee
|
|
181
|
+
sage: from sage.combinat.sf.orthotriang import SymmetricFunctionAlgebra_orthotriang
|
|
182
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
183
|
+
sage: m = Sym.m()
|
|
184
|
+
sage: s = SymmetricFunctionAlgebra_orthotriang(Sym, m, zee, 's', 'Schur functions')
|
|
185
|
+
sage: s._self_to_base(s([2,1]))
|
|
186
|
+
2*m[1, 1, 1] + m[2, 1]
|
|
187
|
+
"""
|
|
188
|
+
return self._sf_base._from_cache(x, self._base_cache, self._self_to_base_cache)
|
|
189
|
+
|
|
190
|
+
def _base_cache(self, n):
|
|
191
|
+
"""
|
|
192
|
+
Compute the change of basis between ``self`` and base for the
|
|
193
|
+
homogeneous component of size ``n``
|
|
194
|
+
|
|
195
|
+
INPUT:
|
|
196
|
+
|
|
197
|
+
- ``self`` -- a basis determined by an orthotriangular definition
|
|
198
|
+
- ``n`` -- nonnegative integer
|
|
199
|
+
|
|
200
|
+
EXAMPLES::
|
|
201
|
+
|
|
202
|
+
sage: from sage.combinat.sf.sfa import zee
|
|
203
|
+
sage: from sage.combinat.sf.orthotriang import SymmetricFunctionAlgebra_orthotriang
|
|
204
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
205
|
+
sage: m = Sym.m()
|
|
206
|
+
sage: s = SymmetricFunctionAlgebra_orthotriang(Sym, m, zee, 's', 'Schur functions')
|
|
207
|
+
sage: s._base_cache(2)
|
|
208
|
+
sage: l = lambda c: [ (i[0],[j for j in sorted(i[1].items())]) for i in sorted(c.items())]
|
|
209
|
+
sage: l(s._base_to_self_cache[2])
|
|
210
|
+
[([1, 1], [([1, 1], 1)]), ([2], [([1, 1], -1), ([2], 1)])]
|
|
211
|
+
sage: l(s._self_to_base_cache[2])
|
|
212
|
+
[([1, 1], [([1, 1], 1)]), ([2], [([1, 1], 1), ([2], 1)])]
|
|
213
|
+
"""
|
|
214
|
+
if n in self._self_to_base_cache:
|
|
215
|
+
return
|
|
216
|
+
else:
|
|
217
|
+
self._self_to_base_cache[n] = {}
|
|
218
|
+
|
|
219
|
+
self._gram_schmidt(n, self._sf_base, self._scalar,
|
|
220
|
+
self._self_to_base_cache,
|
|
221
|
+
leading_coeff=self._leading_coeff,
|
|
222
|
+
upper_triangular=True)
|
|
223
|
+
self._invert_morphism(n, self.base_ring(), self._self_to_base_cache,
|
|
224
|
+
self._base_to_self_cache,
|
|
225
|
+
to_other_function=self._to_base)
|
|
226
|
+
|
|
227
|
+
def _to_base(self, part):
|
|
228
|
+
r"""
|
|
229
|
+
Return a function which takes in a partition `\mu` and returns the
|
|
230
|
+
coefficient of a partition in the expansion of ``self`` `(part)` in base.
|
|
231
|
+
|
|
232
|
+
INPUT:
|
|
233
|
+
|
|
234
|
+
- ``self`` -- a basis determined by an orthotriangular definition
|
|
235
|
+
- ``part`` -- a partition
|
|
236
|
+
|
|
237
|
+
.. NOTE::
|
|
238
|
+
|
|
239
|
+
We assume that self._gram_schmidt has been called before
|
|
240
|
+
self._to_base is called.
|
|
241
|
+
|
|
242
|
+
OUTPUT:
|
|
243
|
+
|
|
244
|
+
- a function which accepts a partition ``mu`` and returns the coefficients
|
|
245
|
+
in the expansion of ``self(part)`` in the triangularly related basis.
|
|
246
|
+
|
|
247
|
+
EXAMPLES::
|
|
248
|
+
|
|
249
|
+
sage: from sage.combinat.sf.sfa import zee
|
|
250
|
+
sage: from sage.combinat.sf.orthotriang import SymmetricFunctionAlgebra_orthotriang
|
|
251
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
252
|
+
sage: m = Sym.m()
|
|
253
|
+
sage: s = SymmetricFunctionAlgebra_orthotriang(Sym, m, zee, 's', 'Schur functions')
|
|
254
|
+
sage: m(s([2,1]))
|
|
255
|
+
2*m[1, 1, 1] + m[2, 1]
|
|
256
|
+
sage: f = s._to_base(Partition([2,1]))
|
|
257
|
+
sage: [f(p) for p in Partitions(3)]
|
|
258
|
+
[0, 1, 2]
|
|
259
|
+
"""
|
|
260
|
+
f = lambda mu: self._self_to_base_cache[part].get(mu, 0)
|
|
261
|
+
return f
|
|
262
|
+
|
|
263
|
+
def product(self, left, right):
|
|
264
|
+
"""
|
|
265
|
+
Return ``left`` * ``right`` by converting both to the base and then
|
|
266
|
+
converting back to ``self``.
|
|
267
|
+
|
|
268
|
+
INPUT:
|
|
269
|
+
|
|
270
|
+
- ``self`` -- a basis determined by an orthotriangular definition
|
|
271
|
+
- ``left``, ``right`` -- elements in ``self``
|
|
272
|
+
|
|
273
|
+
OUTPUT: the expansion of the product of ``left`` and ``right`` in the basis ``self``
|
|
274
|
+
|
|
275
|
+
EXAMPLES::
|
|
276
|
+
|
|
277
|
+
sage: from sage.combinat.sf.sfa import zee
|
|
278
|
+
sage: from sage.combinat.sf.orthotriang import SymmetricFunctionAlgebra_orthotriang
|
|
279
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
280
|
+
sage: m = Sym.m()
|
|
281
|
+
sage: s = SymmetricFunctionAlgebra_orthotriang(Sym, m, zee, 's', 'Schur functions')
|
|
282
|
+
sage: s([1])*s([2,1]) #indirect doctest
|
|
283
|
+
s[2, 1, 1] + s[2, 2] + s[3, 1]
|
|
284
|
+
"""
|
|
285
|
+
return self(self._sf_base(left) * self._sf_base(right))
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
from sage.combinat.sf.sfa import SymmetricFunctionsFunctor
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
class OrthotriangBasisFunctor(SymmetricFunctionsFunctor):
|
|
292
|
+
"""
|
|
293
|
+
A constructor for algebras of symmetric functions constructed by
|
|
294
|
+
orthogonality and triangularity.
|
|
295
|
+
|
|
296
|
+
EXAMPLES::
|
|
297
|
+
|
|
298
|
+
sage: from sage.combinat.sf.sfa import zee
|
|
299
|
+
sage: from sage.combinat.sf.orthotriang import SymmetricFunctionAlgebra_orthotriang
|
|
300
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
301
|
+
sage: m = Sym.m()
|
|
302
|
+
sage: s = SymmetricFunctionAlgebra_orthotriang(Sym, m, zee, 's', 'Schur')
|
|
303
|
+
sage: s.construction()
|
|
304
|
+
(SymmetricFunctionsFunctor[Schur], Rational Field)
|
|
305
|
+
"""
|
|
306
|
+
def __init__(self, basis):
|
|
307
|
+
r"""
|
|
308
|
+
Initialize the functor.
|
|
309
|
+
|
|
310
|
+
INPUT:
|
|
311
|
+
|
|
312
|
+
- ``basis`` -- the basis of the symmetric function algebra
|
|
313
|
+
|
|
314
|
+
TESTS::
|
|
315
|
+
|
|
316
|
+
sage: from sage.combinat.sf.sfa import zee
|
|
317
|
+
sage: from sage.combinat.sf.orthotriang import SymmetricFunctionAlgebra_orthotriang
|
|
318
|
+
sage: Sym = SymmetricFunctions(QQ)
|
|
319
|
+
sage: m = Sym.m()
|
|
320
|
+
sage: s = SymmetricFunctionAlgebra_orthotriang(Sym, m, zee, 's', 'Schur')
|
|
321
|
+
sage: F, R = s.construction()
|
|
322
|
+
sage: TestSuite(F).run()
|
|
323
|
+
"""
|
|
324
|
+
self._basis_name = basis.basis_name()
|
|
325
|
+
self._sf_base = basis._sf_base
|
|
326
|
+
self._scalar = basis._scalar
|
|
327
|
+
self._leading_coeff = basis._leading_coeff
|
|
328
|
+
self._prefix = basis._prefix
|
|
329
|
+
super().__init__(basis, self._basis_name)
|
|
330
|
+
|
|
331
|
+
def _apply_functor(self, R):
|
|
332
|
+
"""
|
|
333
|
+
Apply the functor to an object of ``self``'s domain.
|
|
334
|
+
|
|
335
|
+
EXAMPLES::
|
|
336
|
+
|
|
337
|
+
sage: from sage.combinat.sf.sfa import zee
|
|
338
|
+
sage: from sage.combinat.sf.orthotriang import SymmetricFunctionAlgebra_orthotriang
|
|
339
|
+
sage: Sym = SymmetricFunctions(ZZ)
|
|
340
|
+
sage: m = Sym.m()
|
|
341
|
+
sage: s = SymmetricFunctionAlgebra_orthotriang(Sym, m, zee, 's', 'Schur functions')
|
|
342
|
+
sage: F, R = s.construction() # indirect doctest
|
|
343
|
+
sage: F(QQbar) # needs sage.rings.number_field
|
|
344
|
+
Symmetric Functions over Algebraic Field in the Schur functions basis
|
|
345
|
+
"""
|
|
346
|
+
from sage.combinat.sf.sf import SymmetricFunctions
|
|
347
|
+
return self._basis(SymmetricFunctions(R), self._sf_base.change_ring(R),
|
|
348
|
+
self._scalar, self._prefix, self._basis_name,
|
|
349
|
+
self._leading_coeff)
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
# Backward compatibility for unpickling
|
|
353
|
+
from sage.misc.persist import register_unpickle_override
|
|
354
|
+
|
|
355
|
+
register_unpickle_override('sage.combinat.sf.orthotriang', 'SymmetricFunctionAlgebraElement_orthotriang', SymmetricFunctionAlgebra_orthotriang.Element)
|