passagemath-combinat 10.6.42__cp314-cp314t-win_amd64.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/DELVEWHEEL +2 -0
- passagemath_combinat-10.6.42.dist-info/METADATA +160 -0
- passagemath_combinat-10.6.42.dist-info/RECORD +401 -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-10-3a5f019e2510aeaad918cab2b57a689d.dll +0 -0
- passagemath_combinat.libs/libsymmetrica-3-7dcf900932804d0df5fd0919b4668720.dll +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 +44 -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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +0 -0
- sage/combinat/debruijn_sequence.pyx +355 -0
- sage/combinat/decorated_permutation.py +270 -0
- sage/combinat/degree_sequences.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +0 -0
- sage/combinat/expnums.pyx +148 -0
- sage/combinat/fast_vector_partitions.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +0 -0
- sage/combinat/words/word_char.pyx +847 -0
- sage/combinat/words/word_datatypes.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +0 -0
- sage/sat/solvers/satsolver.pxd +3 -0
- sage/sat/solvers/satsolver.pyx +405 -0
|
@@ -0,0 +1,447 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.modules
|
|
3
|
+
r"""
|
|
4
|
+
Kostka-Foulkes polynomials
|
|
5
|
+
|
|
6
|
+
Based on the algorithms in John Stembridge's SF package for Maple
|
|
7
|
+
which can be found at http://www.math.lsa.umich.edu/~jrs/maple.html
|
|
8
|
+
.
|
|
9
|
+
"""
|
|
10
|
+
# ****************************************************************************
|
|
11
|
+
# Copyright (C) 2007 Mike Hansen <mhansen@gmail.com>,
|
|
12
|
+
# 2007 John Stembridge
|
|
13
|
+
#
|
|
14
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
15
|
+
#
|
|
16
|
+
# This code is distributed in the hope that it will be useful,
|
|
17
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
18
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
19
|
+
# General Public License for more details.
|
|
20
|
+
#
|
|
21
|
+
# The full text of the GPL is available at:
|
|
22
|
+
#
|
|
23
|
+
# https://www.gnu.org/licenses/
|
|
24
|
+
# ****************************************************************************
|
|
25
|
+
|
|
26
|
+
from sage.combinat.partition import _Partitions
|
|
27
|
+
from sage.combinat.partitions import ZS1_iterator
|
|
28
|
+
from sage.combinat.skew_partition import SkewPartitions
|
|
29
|
+
from sage.combinat.skew_tableau import SemistandardSkewTableaux
|
|
30
|
+
from sage.rings.integer_ring import ZZ
|
|
31
|
+
from sage.rings.polynomial.polynomial_ring import polygen
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def KostkaFoulkesPolynomial(mu, nu, t=None):
|
|
35
|
+
r"""
|
|
36
|
+
Return the Kostka-Foulkes polynomial `K_{\mu, \nu}(t)`.
|
|
37
|
+
Here, `\mu` is a partition or a skew partition, whereas
|
|
38
|
+
`\nu` is a partition of the same size.
|
|
39
|
+
|
|
40
|
+
The Kostka-Foulkes polynomial is defined to be the sum
|
|
41
|
+
of the monomials `t^{\operatorname{charge}(T)}` over all
|
|
42
|
+
semistandard tableaux `T` of shape `\lambda / \mu``,
|
|
43
|
+
where `\operatorname{charge}(T)` denotes the charge
|
|
44
|
+
of the reading word of `T`
|
|
45
|
+
(see :meth:`sage.combinat.words.finite_word.FiniteWord_class.charge`).
|
|
46
|
+
|
|
47
|
+
INPUT:
|
|
48
|
+
|
|
49
|
+
- ``mu`` -- partition or skew partition
|
|
50
|
+
- ``nu`` -- partition
|
|
51
|
+
- ``t`` -- an optional parameter (default: ``None``)
|
|
52
|
+
|
|
53
|
+
OUTPUT:
|
|
54
|
+
|
|
55
|
+
- the Kostka-Foulkes polynomial indexed by ``mu`` and ``nu`` and
|
|
56
|
+
evaluated at the parameter ``t``. If ``t`` is ``None`` the resulting
|
|
57
|
+
polynomial is in the polynomial ring `\ZZ[t]`.
|
|
58
|
+
|
|
59
|
+
EXAMPLES::
|
|
60
|
+
|
|
61
|
+
sage: KostkaFoulkesPolynomial([2,2],[2,2])
|
|
62
|
+
1
|
|
63
|
+
sage: KostkaFoulkesPolynomial([2,2],[4])
|
|
64
|
+
0
|
|
65
|
+
sage: KostkaFoulkesPolynomial([2,2],[1,1,1,1])
|
|
66
|
+
t^4 + t^2
|
|
67
|
+
sage: KostkaFoulkesPolynomial([2,2],[2,1,1])
|
|
68
|
+
t
|
|
69
|
+
sage: q = PolynomialRing(QQ,'q').gen()
|
|
70
|
+
sage: KostkaFoulkesPolynomial([2,2],[2,1,1],q)
|
|
71
|
+
q
|
|
72
|
+
sage: KostkaFoulkesPolynomial([[3,2],[1]],[2,2],q)
|
|
73
|
+
q + 1
|
|
74
|
+
|
|
75
|
+
TESTS::
|
|
76
|
+
|
|
77
|
+
sage: KostkaFoulkesPolynomial([2,4],[2,2])
|
|
78
|
+
Traceback (most recent call last):
|
|
79
|
+
...
|
|
80
|
+
ValueError: mu must be a partition or a skew partition
|
|
81
|
+
sage: KostkaFoulkesPolynomial([2,2],[2,4])
|
|
82
|
+
Traceback (most recent call last):
|
|
83
|
+
...
|
|
84
|
+
ValueError: nu must be a partition
|
|
85
|
+
sage: KostkaFoulkesPolynomial([3,2],[2,1])
|
|
86
|
+
Traceback (most recent call last):
|
|
87
|
+
...
|
|
88
|
+
ValueError: mu and nu must be partitions of the same size
|
|
89
|
+
"""
|
|
90
|
+
if mu not in _Partitions:
|
|
91
|
+
if mu in SkewPartitions():
|
|
92
|
+
return kfpoly_skew(mu, nu, t)
|
|
93
|
+
raise ValueError("mu must be a partition or a skew partition")
|
|
94
|
+
if nu not in _Partitions:
|
|
95
|
+
raise ValueError("nu must be a partition")
|
|
96
|
+
if sum(mu) != sum(nu):
|
|
97
|
+
raise ValueError("mu and nu must be partitions of the same size")
|
|
98
|
+
return kfpoly(mu, nu, t)
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def kfpoly(mu, nu, t=None):
|
|
102
|
+
r"""
|
|
103
|
+
Return the Kostka-Foulkes polynomial `K_{\mu, \nu}(t)`
|
|
104
|
+
by generating all rigging sequences for the shape `\mu`, and then
|
|
105
|
+
selecting those of content `\nu`.
|
|
106
|
+
|
|
107
|
+
INPUT:
|
|
108
|
+
|
|
109
|
+
- ``mu``, ``nu`` -- partitions
|
|
110
|
+
- ``t`` -- an optional parameter (default: ``None``)
|
|
111
|
+
|
|
112
|
+
OUTPUT:
|
|
113
|
+
|
|
114
|
+
- the Kostka-Foulkes polynomial indexed by partitions ``mu`` and ``nu`` and
|
|
115
|
+
evaluated at the parameter ``t``. If ``t`` is ``None`` the resulting polynomial
|
|
116
|
+
is in the polynomial ring `\ZZ['t']`.
|
|
117
|
+
|
|
118
|
+
EXAMPLES::
|
|
119
|
+
|
|
120
|
+
sage: from sage.combinat.sf.kfpoly import kfpoly
|
|
121
|
+
sage: kfpoly([2,2], [2,1,1])
|
|
122
|
+
t
|
|
123
|
+
sage: kfpoly([4], [2,1,1])
|
|
124
|
+
t^3
|
|
125
|
+
sage: kfpoly([4], [2,2])
|
|
126
|
+
t^2
|
|
127
|
+
sage: kfpoly([1,1,1,1], [2,2])
|
|
128
|
+
0
|
|
129
|
+
|
|
130
|
+
TESTS::
|
|
131
|
+
|
|
132
|
+
sage: kfpoly([], [])
|
|
133
|
+
1
|
|
134
|
+
"""
|
|
135
|
+
if mu == nu:
|
|
136
|
+
return 1
|
|
137
|
+
|
|
138
|
+
if t is None:
|
|
139
|
+
t = polygen(ZZ, 't')
|
|
140
|
+
|
|
141
|
+
nuc = _Partitions(nu).conjugate()
|
|
142
|
+
|
|
143
|
+
f = lambda x: weight(x, t) if x[0] == nuc else 0
|
|
144
|
+
|
|
145
|
+
return sum(f(rg) for rg in riggings(mu))
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
def kfpoly_skew(lamu, nu, t=None):
|
|
149
|
+
r"""
|
|
150
|
+
Return the Kostka-Foulkes polynomial `K_{\lambda / \mu, \nu}(t)`
|
|
151
|
+
by summing `t^{\operatorname{charge}(T)}` over all semistandard
|
|
152
|
+
tableaux `T` of shape `\lambda / \mu``.
|
|
153
|
+
|
|
154
|
+
INPUT:
|
|
155
|
+
|
|
156
|
+
- ``lamu`` -- skew partition `\lambda / \mu`
|
|
157
|
+
- ``nu`` -- partition `\nu`
|
|
158
|
+
- ``t`` -- an optional parameter (default: ``None``)
|
|
159
|
+
|
|
160
|
+
OUTPUT:
|
|
161
|
+
|
|
162
|
+
- the Kostka-Foulkes polynomial indexed by ``mu`` and ``nu`` and
|
|
163
|
+
evaluated at the parameter ``t``. If ``t`` is ``None`` the
|
|
164
|
+
resulting polynomial is in the polynomial ring `\ZZ['t']`.
|
|
165
|
+
|
|
166
|
+
EXAMPLES::
|
|
167
|
+
|
|
168
|
+
sage: from sage.combinat.sf.kfpoly import kfpoly_skew
|
|
169
|
+
sage: kfpoly_skew([[3,3], [1,1]], [2,1,1])
|
|
170
|
+
t
|
|
171
|
+
sage: kfpoly_skew([[3,3], [1,1]], [2,1,1], 5)
|
|
172
|
+
5
|
|
173
|
+
sage: kfpoly_skew([[5], [1]], [2,2])
|
|
174
|
+
t^2
|
|
175
|
+
|
|
176
|
+
TESTS::
|
|
177
|
+
|
|
178
|
+
sage: from sage.combinat.sf.kfpoly import kfpoly, kfpoly_skew
|
|
179
|
+
sage: all(kfpoly_skew(SkewPartition([b,[]]), c) == kfpoly(b,c)
|
|
180
|
+
....: for n in range(6) for b in Partitions(n)
|
|
181
|
+
....: for c in Partitions(n))
|
|
182
|
+
True
|
|
183
|
+
"""
|
|
184
|
+
if t is None:
|
|
185
|
+
t = polygen(ZZ, 't')
|
|
186
|
+
|
|
187
|
+
return t.parent().sum(t ** T.to_word().charge()
|
|
188
|
+
for T in SemistandardSkewTableaux(lamu, nu))
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def schur_to_hl(mu, t=None):
|
|
192
|
+
r"""
|
|
193
|
+
Return a dictionary corresponding to `s_\mu` in Hall-Littlewood `P` basis.
|
|
194
|
+
|
|
195
|
+
INPUT:
|
|
196
|
+
|
|
197
|
+
- ``mu`` -- a partition
|
|
198
|
+
- ``t`` -- an optional parameter (default: the generator from `\ZZ['t']` )
|
|
199
|
+
|
|
200
|
+
OUTPUT:
|
|
201
|
+
|
|
202
|
+
- a dictionary with the coefficients `K_{\mu\nu}(t)` for `\nu` smaller
|
|
203
|
+
in dominance order than `\mu`
|
|
204
|
+
|
|
205
|
+
EXAMPLES::
|
|
206
|
+
|
|
207
|
+
sage: from sage.combinat.sf.kfpoly import *
|
|
208
|
+
sage: schur_to_hl([1,1,1])
|
|
209
|
+
{[1, 1, 1]: 1}
|
|
210
|
+
sage: a = schur_to_hl([2,1])
|
|
211
|
+
sage: for mc in sorted(a.items()): print(mc)
|
|
212
|
+
([1, 1, 1], t^2 + t)
|
|
213
|
+
([2, 1], 1)
|
|
214
|
+
sage: a = schur_to_hl([3])
|
|
215
|
+
sage: for mc in sorted(a.items()): print(mc)
|
|
216
|
+
([1, 1, 1], t^3)
|
|
217
|
+
([2, 1], t)
|
|
218
|
+
([3], 1)
|
|
219
|
+
sage: a = schur_to_hl([4])
|
|
220
|
+
sage: for mc in sorted(a.items()): print(mc)
|
|
221
|
+
([1, 1, 1, 1], t^6)
|
|
222
|
+
([2, 1, 1], t^3)
|
|
223
|
+
([2, 2], t^2)
|
|
224
|
+
([3, 1], t)
|
|
225
|
+
([4], 1)
|
|
226
|
+
sage: a = schur_to_hl([3,1])
|
|
227
|
+
sage: for mc in sorted(a.items()): print(mc)
|
|
228
|
+
([1, 1, 1, 1], t^5 + t^4 + t^3)
|
|
229
|
+
([2, 1, 1], t^2 + t)
|
|
230
|
+
([2, 2], t)
|
|
231
|
+
([3, 1], 1)
|
|
232
|
+
sage: a = schur_to_hl([2,2])
|
|
233
|
+
sage: for mc in sorted(a.items()): print(mc)
|
|
234
|
+
([1, 1, 1, 1], t^4 + t^2)
|
|
235
|
+
([2, 1, 1], t)
|
|
236
|
+
([2, 2], 1)
|
|
237
|
+
sage: a = schur_to_hl([2,1,1])
|
|
238
|
+
sage: for mc in sorted(a.items()): print(mc)
|
|
239
|
+
([1, 1, 1, 1], t^3 + t^2 + t)
|
|
240
|
+
([2, 1, 1], 1)
|
|
241
|
+
sage: a = schur_to_hl([1,1,1,1])
|
|
242
|
+
sage: for mc in sorted(a.items()): print(mc)
|
|
243
|
+
([1, 1, 1, 1], 1)
|
|
244
|
+
sage: a = schur_to_hl([2,2,2])
|
|
245
|
+
sage: for mc in sorted(a.items()): print(mc)
|
|
246
|
+
([1, 1, 1, 1, 1, 1], t^9 + t^7 + t^6 + t^5 + t^3)
|
|
247
|
+
([2, 1, 1, 1, 1], t^4 + t^2)
|
|
248
|
+
([2, 2, 1, 1], t)
|
|
249
|
+
([2, 2, 2], 1)
|
|
250
|
+
"""
|
|
251
|
+
if mu == []:
|
|
252
|
+
return {mu: 1}
|
|
253
|
+
if t is None:
|
|
254
|
+
t = polygen(ZZ, 't')
|
|
255
|
+
|
|
256
|
+
res = {}
|
|
257
|
+
for rg in riggings(mu):
|
|
258
|
+
res[rg[0]] = res.get(rg[0], 0) + weight(rg, t)
|
|
259
|
+
|
|
260
|
+
return {key.conjugate(): value for key, value in res.items()}
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
def riggings(part):
|
|
264
|
+
r"""
|
|
265
|
+
Generate all possible rigging sequences for a fixed partition ``part``.
|
|
266
|
+
|
|
267
|
+
INPUT:
|
|
268
|
+
|
|
269
|
+
- ``part`` -- a partition
|
|
270
|
+
|
|
271
|
+
OUTPUT: list of riggings associated to the partition ``part``
|
|
272
|
+
|
|
273
|
+
EXAMPLES::
|
|
274
|
+
|
|
275
|
+
sage: from sage.combinat.sf.kfpoly import *
|
|
276
|
+
sage: riggings([3])
|
|
277
|
+
[[[1, 1, 1]], [[2, 1]], [[3]]]
|
|
278
|
+
sage: riggings([2,1])
|
|
279
|
+
[[[2, 1], [1]], [[3], [1]]]
|
|
280
|
+
sage: riggings([1,1,1])
|
|
281
|
+
[[[3], [2], [1]]]
|
|
282
|
+
sage: riggings([2,2])
|
|
283
|
+
[[[2, 2], [1, 1]], [[3, 1], [1, 1]], [[4], [1, 1]], [[4], [2]]]
|
|
284
|
+
sage: riggings([2,2,2])
|
|
285
|
+
[[[3, 3], [2, 2], [1, 1]],
|
|
286
|
+
[[4, 2], [2, 2], [1, 1]],
|
|
287
|
+
[[5, 1], [2, 2], [1, 1]],
|
|
288
|
+
[[6], [2, 2], [1, 1]],
|
|
289
|
+
[[5, 1], [3, 1], [1, 1]],
|
|
290
|
+
[[6], [3, 1], [1, 1]],
|
|
291
|
+
[[6], [4], [2]]]
|
|
292
|
+
"""
|
|
293
|
+
l = len(part)
|
|
294
|
+
res = [ [[],[]] ]
|
|
295
|
+
sa = 0
|
|
296
|
+
for i in sorted(part):
|
|
297
|
+
sa += i
|
|
298
|
+
res = [[new] + nu for nu in res for new in compat(sa, nu[0], nu[1])]
|
|
299
|
+
|
|
300
|
+
return [x[:l] for x in res]
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
def compat(n, mu, nu):
|
|
304
|
+
r"""
|
|
305
|
+
Generate all possible partitions of `n` that can precede `\mu, \nu`
|
|
306
|
+
in a rigging sequence.
|
|
307
|
+
|
|
308
|
+
INPUT:
|
|
309
|
+
|
|
310
|
+
- ``n`` -- positive integer
|
|
311
|
+
- ``mu``, ``nu`` -- partitions
|
|
312
|
+
|
|
313
|
+
OUTPUT: list of partitions
|
|
314
|
+
|
|
315
|
+
EXAMPLES::
|
|
316
|
+
|
|
317
|
+
sage: from sage.combinat.sf.kfpoly import *
|
|
318
|
+
sage: compat(4, [1], [2,1])
|
|
319
|
+
[[1, 1, 1, 1], [2, 1, 1], [2, 2], [3, 1], [4]]
|
|
320
|
+
sage: compat(3, [1], [2,1])
|
|
321
|
+
[[1, 1, 1], [2, 1], [3]]
|
|
322
|
+
sage: compat(2, [1], [])
|
|
323
|
+
[[2]]
|
|
324
|
+
sage: compat(3, [1], [])
|
|
325
|
+
[[2, 1], [3]]
|
|
326
|
+
sage: compat(3, [2], [1])
|
|
327
|
+
[[3]]
|
|
328
|
+
sage: compat(4, [1,1], [])
|
|
329
|
+
[[2, 2], [3, 1], [4]]
|
|
330
|
+
sage: compat(4, [2], [])
|
|
331
|
+
[[4]]
|
|
332
|
+
"""
|
|
333
|
+
l = max(len(mu), len(nu))
|
|
334
|
+
mmu = list(mu) + [0]*(l-len(mu))
|
|
335
|
+
nnu = list(nu) + [0]*(l-len(nu))
|
|
336
|
+
|
|
337
|
+
bd = []
|
|
338
|
+
sa = 0
|
|
339
|
+
for i in range(l):
|
|
340
|
+
sa += 2*mmu[i] - nnu[i]
|
|
341
|
+
bd.append(sa)
|
|
342
|
+
|
|
343
|
+
for la in ZS1_iterator(n):
|
|
344
|
+
if dom(la, bd):
|
|
345
|
+
return [x.conjugate() for x in _Partitions(la).dominated_partitions()]
|
|
346
|
+
|
|
347
|
+
return [] # _Partitions([])
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
def dom(mup, snu):
|
|
351
|
+
"""
|
|
352
|
+
Return ``True`` if ``sum(mu[:i+1]) >= snu[i]`` for all
|
|
353
|
+
``0 <= i < len(snu)``; otherwise, it returns ``False``.
|
|
354
|
+
|
|
355
|
+
INPUT:
|
|
356
|
+
|
|
357
|
+
- ``mup`` -- a partition conjugate to ``mu``
|
|
358
|
+
- ``snu`` -- a sequence of positive integers
|
|
359
|
+
|
|
360
|
+
OUTPUT: boolean
|
|
361
|
+
|
|
362
|
+
EXAMPLES::
|
|
363
|
+
|
|
364
|
+
sage: from sage.combinat.sf.kfpoly import *
|
|
365
|
+
sage: dom([3,2,1],[2,4,5])
|
|
366
|
+
True
|
|
367
|
+
sage: dom([3,2,1],[2,4,7])
|
|
368
|
+
False
|
|
369
|
+
sage: dom([3,2,1],[2,6,5])
|
|
370
|
+
False
|
|
371
|
+
sage: dom([3,2,1],[4,4,4])
|
|
372
|
+
False
|
|
373
|
+
|
|
374
|
+
TESTS::
|
|
375
|
+
|
|
376
|
+
sage: dom([],[])
|
|
377
|
+
True
|
|
378
|
+
"""
|
|
379
|
+
if not mup: # mup is empty:
|
|
380
|
+
return not snu # True if and only if snu is empty
|
|
381
|
+
|
|
382
|
+
l = len(snu)
|
|
383
|
+
lmup = len(mup)
|
|
384
|
+
# Special case for the largest columns
|
|
385
|
+
if any((k+1)*lmup < snu[k] for k in range(min(mup[-1],l))):
|
|
386
|
+
return False
|
|
387
|
+
|
|
388
|
+
pos = mup[-1]
|
|
389
|
+
sa = mup[-1] * lmup
|
|
390
|
+
for i in range(lmup-1, 0, -1):
|
|
391
|
+
for k in range(mup[i-1] - mup[i]):
|
|
392
|
+
if pos >= l: # We've reached the end of snu
|
|
393
|
+
return True
|
|
394
|
+
sa += i
|
|
395
|
+
if sa < snu[pos]:
|
|
396
|
+
return False
|
|
397
|
+
pos += 1
|
|
398
|
+
return all(sa >= snu[j] for j in range(pos, l))
|
|
399
|
+
|
|
400
|
+
|
|
401
|
+
def weight(rg, t=None):
|
|
402
|
+
r"""
|
|
403
|
+
Return the weight of a rigging.
|
|
404
|
+
|
|
405
|
+
INPUT:
|
|
406
|
+
|
|
407
|
+
- ``rg`` -- a rigging, a list of partitions
|
|
408
|
+
- ``t`` -- an optional parameter, (default: the generator from `\ZZ['t']`)
|
|
409
|
+
|
|
410
|
+
OUTPUT: a polynomial in the parameter `t`
|
|
411
|
+
|
|
412
|
+
EXAMPLES::
|
|
413
|
+
|
|
414
|
+
sage: from sage.combinat.sf.kfpoly import weight
|
|
415
|
+
sage: weight([[2,1], [1]])
|
|
416
|
+
1
|
|
417
|
+
sage: weight([[3], [1]])
|
|
418
|
+
t^2 + t
|
|
419
|
+
sage: weight([[2,1], [3]])
|
|
420
|
+
t^4
|
|
421
|
+
sage: weight([[2, 2], [1, 1]])
|
|
422
|
+
1
|
|
423
|
+
sage: weight([[3, 1], [1, 1]])
|
|
424
|
+
t
|
|
425
|
+
sage: weight([[4], [1, 1]], 2)
|
|
426
|
+
16
|
|
427
|
+
sage: weight([[4], [2]], t=2)
|
|
428
|
+
4
|
|
429
|
+
"""
|
|
430
|
+
from sage.combinat.q_analogues import q_binomial
|
|
431
|
+
if t is None:
|
|
432
|
+
t = polygen(ZZ, 't')
|
|
433
|
+
|
|
434
|
+
nu = rg + [ [] ]
|
|
435
|
+
l = 1 + max( map(len, nu) )
|
|
436
|
+
nu = [ list(mu) + [0]*l for mu in nu ]
|
|
437
|
+
res = t**int(sum(i * (i-1) // 2 for i in rg[-1]))
|
|
438
|
+
for k in range(1, len(nu)-1):
|
|
439
|
+
sa = 0
|
|
440
|
+
mid = nu[k]
|
|
441
|
+
for i in range( max(len(rg[k]), len(rg[k-1])) ):
|
|
442
|
+
sa += nu[k-1][i] - 2*mid[i] + nu[k+1][i]
|
|
443
|
+
if mid[i] - mid[i+1] + sa >= 0:
|
|
444
|
+
res *= q_binomial(mid[i]-mid[i+1]+sa, sa, t)
|
|
445
|
+
mu = nu[k-1][i] - mid[i]
|
|
446
|
+
res *= t**int(mu * (mu-1) // 2)
|
|
447
|
+
return res
|