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,13 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
r"""
|
|
3
|
+
Path tableaux
|
|
4
|
+
|
|
5
|
+
- :ref:`sage.combinat.path_tableaux.path_tableau`
|
|
6
|
+
- :ref:`sage.combinat.path_tableaux.dyck_path`
|
|
7
|
+
- :ref:`sage.combinat.path_tableaux.frieze`
|
|
8
|
+
- :ref:`sage.combinat.path_tableaux.semistandard`
|
|
9
|
+
"""
|
|
10
|
+
# install the docstring of this module to the containing package
|
|
11
|
+
from sage.misc.namespace_package import install_doc
|
|
12
|
+
install_doc(__package__, __doc__)
|
|
13
|
+
del install_doc
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
r"""
|
|
3
|
+
Catalog of path tableaux
|
|
4
|
+
|
|
5
|
+
The ``path_tableaux`` object may be used to access examples of various path
|
|
6
|
+
tableau objects currently implemented in Sage. Using tab-completion on this
|
|
7
|
+
object is an easy way to discover and quickly create the path tableaux that
|
|
8
|
+
are available (as listed here).
|
|
9
|
+
|
|
10
|
+
Let ``<tab>`` indicate pressing the :kbd:`Tab` key. So begin by typing
|
|
11
|
+
``path_tableaux.<tab>`` to the see the currently implemented path tableaux.
|
|
12
|
+
|
|
13
|
+
- :class:`~sage.combinat.path_tableaux.path_tableau.CylindricalDiagram`
|
|
14
|
+
- :class:`~sage.combinat.path_tableaux.dyck_path.DyckPath`
|
|
15
|
+
- :class:`~sage.combinat.path_tableaux.dyck_path.DyckPaths`
|
|
16
|
+
- :class:`~sage.combinat.path_tableaux.frieze.FriezePattern`
|
|
17
|
+
- :class:`~sage.combinat.path_tableaux.frieze.FriezePatterns`
|
|
18
|
+
- :class:`~sage.combinat.path_tableaux.semistandard.SemistandardPathTableau`
|
|
19
|
+
- :class:`~sage.combinat.path_tableaux.semistandard.SemistandardPathTableaux`
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
from sage.misc.lazy_import import lazy_import
|
|
23
|
+
|
|
24
|
+
lazy_import('sage.combinat.path_tableaux.path_tableau', ['CylindricalDiagram'])
|
|
25
|
+
lazy_import('sage.combinat.path_tableaux.dyck_path', ['DyckPath', 'DyckPaths'])
|
|
26
|
+
lazy_import('sage.combinat.path_tableaux.frieze', ['FriezePattern','FriezePatterns'])
|
|
27
|
+
lazy_import('sage.combinat.path_tableaux.semistandard', ['SemistandardPathTableau','SemistandardPathTableaux'])
|
|
28
|
+
|
|
29
|
+
del lazy_import
|
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
r"""
|
|
3
|
+
Dyck paths
|
|
4
|
+
|
|
5
|
+
This is an implementation of the abstract base class
|
|
6
|
+
:class:`sage.combinat.path_tableaux.path_tableau.PathTableau`.
|
|
7
|
+
This is the simplest implementation of a path tableau and is included
|
|
8
|
+
to provide a convenient test case and for pedagogical purposes.
|
|
9
|
+
|
|
10
|
+
In this implementation we have sequences of nonnegative integers. These
|
|
11
|
+
are required to be the heights Dyck words (except that we do not require
|
|
12
|
+
the sequence to start or end at height zero). These are in bijection
|
|
13
|
+
with skew standard tableaux with at most two rows. Sequences which start
|
|
14
|
+
and end at height zero are in bijection with noncrossing perfect matchings.
|
|
15
|
+
|
|
16
|
+
AUTHORS:
|
|
17
|
+
|
|
18
|
+
- Bruce Westbury (2018): initial version
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
#*****************************************************************************
|
|
22
|
+
# Copyright (C) 2018 Bruce Westbury <bruce.westbury@gmail.com>,
|
|
23
|
+
#
|
|
24
|
+
# This program is free software: you can redistribute it and/or modify
|
|
25
|
+
# it under the terms of the GNU General Public License as published by
|
|
26
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
27
|
+
# (at your option) any later version.
|
|
28
|
+
# https://www.gnu.org/licenses/
|
|
29
|
+
# ****************************************************************************
|
|
30
|
+
|
|
31
|
+
from sage.combinat.path_tableaux.path_tableau import PathTableau, PathTableaux
|
|
32
|
+
from sage.combinat.combinatorial_map import combinatorial_map
|
|
33
|
+
from sage.combinat.dyck_word import DyckWord
|
|
34
|
+
from sage.combinat.perfect_matching import PerfectMatching
|
|
35
|
+
from sage.combinat.skew_tableau import SkewTableau
|
|
36
|
+
from sage.combinat.tableau import Tableau, StandardTableau
|
|
37
|
+
from sage.rings.integer import Integer
|
|
38
|
+
|
|
39
|
+
###############################################################################
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class DyckPath(PathTableau):
|
|
43
|
+
r"""
|
|
44
|
+
An instance is the sequence of nonnegative
|
|
45
|
+
integers given by the heights of a Dyck word.
|
|
46
|
+
|
|
47
|
+
INPUT:
|
|
48
|
+
|
|
49
|
+
- a sequence of nonnegative integers
|
|
50
|
+
- a two row standard skew tableau
|
|
51
|
+
- a Dyck word
|
|
52
|
+
- a noncrossing perfect matching
|
|
53
|
+
|
|
54
|
+
EXAMPLES::
|
|
55
|
+
|
|
56
|
+
sage: path_tableaux.DyckPath([0,1,2,1,0])
|
|
57
|
+
[0, 1, 2, 1, 0]
|
|
58
|
+
|
|
59
|
+
sage: w = DyckWord([1,1,0,0])
|
|
60
|
+
sage: path_tableaux.DyckPath(w)
|
|
61
|
+
[0, 1, 2, 1, 0]
|
|
62
|
+
|
|
63
|
+
sage: p = PerfectMatching([(1,2), (3,4)])
|
|
64
|
+
sage: path_tableaux.DyckPath(p)
|
|
65
|
+
[0, 1, 0, 1, 0]
|
|
66
|
+
|
|
67
|
+
sage: t = Tableau([[1,2,4],[3,5,6]])
|
|
68
|
+
sage: path_tableaux.DyckPath(t)
|
|
69
|
+
[0, 1, 2, 1, 2, 1, 0]
|
|
70
|
+
|
|
71
|
+
sage: st = SkewTableau([[None, 1,4],[2,3]])
|
|
72
|
+
sage: path_tableaux.DyckPath(st)
|
|
73
|
+
[1, 2, 1, 0, 1]
|
|
74
|
+
|
|
75
|
+
Here we illustrate the slogan that promotion = rotation::
|
|
76
|
+
|
|
77
|
+
sage: t = path_tableaux.DyckPath([0,1,2,3,2,1,0])
|
|
78
|
+
sage: t.to_perfect_matching()
|
|
79
|
+
[(0, 5), (1, 4), (2, 3)]
|
|
80
|
+
|
|
81
|
+
sage: t = t.promotion()
|
|
82
|
+
sage: t.to_perfect_matching()
|
|
83
|
+
[(0, 3), (1, 2), (4, 5)]
|
|
84
|
+
|
|
85
|
+
sage: t = t.promotion()
|
|
86
|
+
sage: t.to_perfect_matching()
|
|
87
|
+
[(0, 1), (2, 5), (3, 4)]
|
|
88
|
+
|
|
89
|
+
sage: t = t.promotion()
|
|
90
|
+
sage: t.to_perfect_matching()
|
|
91
|
+
[(0, 5), (1, 4), (2, 3)]
|
|
92
|
+
"""
|
|
93
|
+
@staticmethod
|
|
94
|
+
def __classcall_private__(cls, ot):
|
|
95
|
+
r"""
|
|
96
|
+
This ensures that a tableau is only ever constructed as an
|
|
97
|
+
``element_class`` call of an appropriate parent.
|
|
98
|
+
|
|
99
|
+
TESTS::
|
|
100
|
+
|
|
101
|
+
sage: t = path_tableaux.DyckPath([0,1,2,1,0])
|
|
102
|
+
|
|
103
|
+
sage: t.parent()
|
|
104
|
+
<sage.combinat.path_tableaux.dyck_path.DyckPaths_with_category object at ...>
|
|
105
|
+
"""
|
|
106
|
+
return DyckPaths()(ot)
|
|
107
|
+
|
|
108
|
+
def __init__(self, parent, ot, check=True):
|
|
109
|
+
r"""
|
|
110
|
+
Initialize a Dyck path.
|
|
111
|
+
|
|
112
|
+
TESTS::
|
|
113
|
+
|
|
114
|
+
sage: D = path_tableaux.DyckPath(Tableau([[1,2], [3,4]]))
|
|
115
|
+
sage: TestSuite(D).run()
|
|
116
|
+
|
|
117
|
+
sage: D = path_tableaux.DyckPath(PerfectMatching([(1,4), (2,3), (5,6)]))
|
|
118
|
+
sage: TestSuite(D).run()
|
|
119
|
+
|
|
120
|
+
sage: t = path_tableaux.DyckPath([0,1,2,3,2,1,0])
|
|
121
|
+
sage: TestSuite(t).run()
|
|
122
|
+
|
|
123
|
+
sage: path_tableaux.DyckPath(PerfectMatching([(1, 3), (2, 4), (5, 6)]))
|
|
124
|
+
Traceback (most recent call last):
|
|
125
|
+
...
|
|
126
|
+
ValueError: the perfect matching must be non crossing
|
|
127
|
+
sage: path_tableaux.DyckPath(Tableau([[1,2,5],[3,5,6]]))
|
|
128
|
+
Traceback (most recent call last):
|
|
129
|
+
...
|
|
130
|
+
ValueError: the tableau must be standard
|
|
131
|
+
sage: path_tableaux.DyckPath(Tableau([[1,2,4],[3,5,6],[7]]))
|
|
132
|
+
Traceback (most recent call last):
|
|
133
|
+
...
|
|
134
|
+
ValueError: the tableau must have at most two rows
|
|
135
|
+
sage: path_tableaux.DyckPath(SkewTableau([[None, 1,4],[2,3],[5]]))
|
|
136
|
+
Traceback (most recent call last):
|
|
137
|
+
...
|
|
138
|
+
ValueError: the skew tableau must have at most two rows
|
|
139
|
+
sage: path_tableaux.DyckPath([0,1,2.5,1,0])
|
|
140
|
+
Traceback (most recent call last):
|
|
141
|
+
...
|
|
142
|
+
ValueError: [0, 1, 2.5..., 1, 0] is not a sequence of integers
|
|
143
|
+
sage: path_tableaux.DyckPath(Partition([3,2,1]))
|
|
144
|
+
Traceback (most recent call last):
|
|
145
|
+
...
|
|
146
|
+
ValueError: invalid input [3, 2, 1]
|
|
147
|
+
"""
|
|
148
|
+
w = None
|
|
149
|
+
|
|
150
|
+
if isinstance(ot, DyckWord):
|
|
151
|
+
w = ot.heights()
|
|
152
|
+
|
|
153
|
+
elif isinstance(ot, PerfectMatching):
|
|
154
|
+
if ot.is_noncrossing():
|
|
155
|
+
u = [1]*ot.size()
|
|
156
|
+
for a in ot.arcs():
|
|
157
|
+
u[a[1]-1] = 0
|
|
158
|
+
w = DyckWord(u).heights()
|
|
159
|
+
else:
|
|
160
|
+
raise ValueError("the perfect matching must be non crossing")
|
|
161
|
+
|
|
162
|
+
elif isinstance(ot, Tableau):
|
|
163
|
+
if len(ot) > 2:
|
|
164
|
+
raise ValueError("the tableau must have at most two rows")
|
|
165
|
+
if ot.is_standard():
|
|
166
|
+
u = [1] * ot.size()
|
|
167
|
+
for i in ot[1]:
|
|
168
|
+
u[i-1] = 0
|
|
169
|
+
w = DyckWord(u).heights()
|
|
170
|
+
else:
|
|
171
|
+
raise ValueError("the tableau must be standard")
|
|
172
|
+
|
|
173
|
+
elif isinstance(ot, SkewTableau):
|
|
174
|
+
if len(ot) > 2:
|
|
175
|
+
raise ValueError("the skew tableau must have at most two rows")
|
|
176
|
+
# The check that ot is standard is not implemented
|
|
177
|
+
c = ot.to_chain()
|
|
178
|
+
w = [0]*len(c)
|
|
179
|
+
for i,a in enumerate(c):
|
|
180
|
+
if len(a) == 1:
|
|
181
|
+
w[i] = a[0]
|
|
182
|
+
else:
|
|
183
|
+
w[i] = a[0] - a[1]
|
|
184
|
+
|
|
185
|
+
elif isinstance(ot, (list, tuple)):
|
|
186
|
+
try:
|
|
187
|
+
w = tuple([Integer(a) for a in ot])
|
|
188
|
+
except TypeError:
|
|
189
|
+
raise ValueError("%s is not a sequence of integers" % ot)
|
|
190
|
+
|
|
191
|
+
if w is None:
|
|
192
|
+
raise ValueError("invalid input %s" % ot)
|
|
193
|
+
|
|
194
|
+
PathTableau.__init__(self, parent, w, check=check)
|
|
195
|
+
|
|
196
|
+
def check(self):
|
|
197
|
+
"""
|
|
198
|
+
Check that ``self`` is a valid path.
|
|
199
|
+
|
|
200
|
+
EXAMPLES::
|
|
201
|
+
|
|
202
|
+
sage: path_tableaux.DyckPath([0,1,0,-1,0]) # indirect doctest
|
|
203
|
+
Traceback (most recent call last):
|
|
204
|
+
...
|
|
205
|
+
ValueError: [0, 1, 0, -1, 0] has a negative entry
|
|
206
|
+
|
|
207
|
+
sage: path_tableaux.DyckPath([0,1,3,1,0]) # indirect doctest
|
|
208
|
+
Traceback (most recent call last):
|
|
209
|
+
...
|
|
210
|
+
ValueError: [0, 1, 3, 1, 0] is not a Dyck path
|
|
211
|
+
"""
|
|
212
|
+
if any(a < 0 for a in self):
|
|
213
|
+
raise ValueError("%s has a negative entry" % (str(self)))
|
|
214
|
+
for i in range(len(self) - 1):
|
|
215
|
+
if abs(self[i + 1] - self[i]) != 1:
|
|
216
|
+
raise ValueError("%s is not a Dyck path" % str(self))
|
|
217
|
+
|
|
218
|
+
def local_rule(self, i):
|
|
219
|
+
r"""
|
|
220
|
+
This has input a list of objects. This method first takes
|
|
221
|
+
the list of objects of length three consisting of the `(i-1)`-st,
|
|
222
|
+
`i`-th and `(i+1)`-term and applies the rule. It then replaces
|
|
223
|
+
the `i`-th object by the object returned by the rule.
|
|
224
|
+
|
|
225
|
+
EXAMPLES::
|
|
226
|
+
|
|
227
|
+
sage: t = path_tableaux.DyckPath([0,1,2,3,2,1,0])
|
|
228
|
+
sage: t.local_rule(3)
|
|
229
|
+
[0, 1, 2, 1, 2, 1, 0]
|
|
230
|
+
|
|
231
|
+
TESTS::
|
|
232
|
+
|
|
233
|
+
sage: t = path_tableaux.DyckPath([0,1,2,3,2,1,0])
|
|
234
|
+
sage: t.local_rule(0)
|
|
235
|
+
Traceback (most recent call last):
|
|
236
|
+
...
|
|
237
|
+
ValueError: 0 is not a valid integer
|
|
238
|
+
sage: t.local_rule(5)
|
|
239
|
+
[0, 1, 2, 3, 2, 1, 0]
|
|
240
|
+
sage: t.local_rule(6)
|
|
241
|
+
Traceback (most recent call last):
|
|
242
|
+
...
|
|
243
|
+
ValueError: 6 is not a valid integer
|
|
244
|
+
"""
|
|
245
|
+
def _rule(x):
|
|
246
|
+
"""
|
|
247
|
+
This is the rule on a sequence of three letters.
|
|
248
|
+
"""
|
|
249
|
+
return abs(x[0]-x[1]+x[2])
|
|
250
|
+
|
|
251
|
+
if not (i > 0 and i < len(self)-1):
|
|
252
|
+
raise ValueError("%d is not a valid integer" % i)
|
|
253
|
+
|
|
254
|
+
with self.clone() as result:
|
|
255
|
+
result[i] = _rule(self[i-1:i+2])
|
|
256
|
+
|
|
257
|
+
return result
|
|
258
|
+
|
|
259
|
+
def is_skew(self):
|
|
260
|
+
r"""
|
|
261
|
+
Return ``True`` if ``self`` is skew and ``False`` if not.
|
|
262
|
+
|
|
263
|
+
EXAMPLES::
|
|
264
|
+
|
|
265
|
+
sage: path_tableaux.DyckPath([0,1,2,1]).is_skew()
|
|
266
|
+
False
|
|
267
|
+
|
|
268
|
+
sage: path_tableaux.DyckPath([1,0,1,2,1]).is_skew()
|
|
269
|
+
True
|
|
270
|
+
"""
|
|
271
|
+
return self[0] != 0
|
|
272
|
+
|
|
273
|
+
@combinatorial_map(name='to Dyck word')
|
|
274
|
+
def to_DyckWord(self):
|
|
275
|
+
r"""
|
|
276
|
+
Convert ``self`` to a Dyck word.
|
|
277
|
+
|
|
278
|
+
EXAMPLES::
|
|
279
|
+
|
|
280
|
+
sage: c = path_tableaux.DyckPath([0,1,2,1,0])
|
|
281
|
+
sage: c.to_DyckWord()
|
|
282
|
+
[1, 1, 0, 0]
|
|
283
|
+
"""
|
|
284
|
+
return DyckWord(heights_sequence=list(self))
|
|
285
|
+
|
|
286
|
+
def descents(self):
|
|
287
|
+
r"""
|
|
288
|
+
Return the descent set of ``self``.
|
|
289
|
+
|
|
290
|
+
EXAMPLES::
|
|
291
|
+
|
|
292
|
+
sage: path_tableaux.DyckPath([0,1,2,1,2,1,0,1,0]).descents()
|
|
293
|
+
{3, 6}
|
|
294
|
+
"""
|
|
295
|
+
result = set()
|
|
296
|
+
|
|
297
|
+
for i in range(1,len(self)-1):
|
|
298
|
+
if self[i] < self[i-1] and self[i] < self[i+1]:
|
|
299
|
+
result.add(i)
|
|
300
|
+
|
|
301
|
+
return result
|
|
302
|
+
|
|
303
|
+
def to_word(self):
|
|
304
|
+
r"""
|
|
305
|
+
Return the word in the alphabet `\{0,1\}` associated to ``self``.
|
|
306
|
+
|
|
307
|
+
EXAMPLES::
|
|
308
|
+
|
|
309
|
+
sage: path_tableaux.DyckPath([1,0,1,2,1]).to_word()
|
|
310
|
+
[0, 1, 1, 0]
|
|
311
|
+
"""
|
|
312
|
+
return [(self[i+1] - self[i] + 1) // 2 for i in range(self.size()-1)]
|
|
313
|
+
|
|
314
|
+
def to_perfect_matching(self):
|
|
315
|
+
r"""
|
|
316
|
+
Return the perfect matching associated to ``self``.
|
|
317
|
+
|
|
318
|
+
EXAMPLES::
|
|
319
|
+
|
|
320
|
+
sage: path_tableaux.DyckPath([0,1,2,1,2,1,0,1,0]).to_perfect_matching()
|
|
321
|
+
[(0, 5), (1, 2), (3, 4), (6, 7)]
|
|
322
|
+
|
|
323
|
+
TESTS::
|
|
324
|
+
|
|
325
|
+
sage: path_tableaux.DyckPath([1,2,1,2,1,0,1]).to_perfect_matching()
|
|
326
|
+
Traceback (most recent call last):
|
|
327
|
+
...
|
|
328
|
+
ValueError: [1, 2, 1, 2, 1, 0, 1] does not start at 0
|
|
329
|
+
"""
|
|
330
|
+
if self.is_skew():
|
|
331
|
+
raise ValueError( "%s does not start at 0" % (str(self)) )
|
|
332
|
+
w = self.to_word()
|
|
333
|
+
y = DyckWord(w)
|
|
334
|
+
pairs = set()
|
|
335
|
+
for i, a in enumerate(y):
|
|
336
|
+
c = y.associated_parenthesis(i)
|
|
337
|
+
if i < c:
|
|
338
|
+
pairs.add((i,c))
|
|
339
|
+
return PerfectMatching(pairs)
|
|
340
|
+
|
|
341
|
+
def to_tableau(self):
|
|
342
|
+
r"""
|
|
343
|
+
Return the skew tableau associated to ``self``.
|
|
344
|
+
|
|
345
|
+
EXAMPLES::
|
|
346
|
+
|
|
347
|
+
sage: T = path_tableaux.DyckPath([0,1,2,3,2,3])
|
|
348
|
+
sage: T.to_tableau()
|
|
349
|
+
[[1, 2, 3, 5], [4]]
|
|
350
|
+
|
|
351
|
+
sage: U = path_tableaux.DyckPath([2,3,2,3])
|
|
352
|
+
sage: U.to_tableau()
|
|
353
|
+
[[None, None, 1, 3], [2]]
|
|
354
|
+
"""
|
|
355
|
+
w = self.to_word()
|
|
356
|
+
top = [i + 1 for i, a in enumerate(w) if a == 1]
|
|
357
|
+
bot = [i + 1 for i, a in enumerate(w) if a == 0]
|
|
358
|
+
if self.is_skew():
|
|
359
|
+
return SkewTableau([[None]*self[0]+top, bot])
|
|
360
|
+
else:
|
|
361
|
+
return StandardTableau([top, bot])
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
class DyckPaths(PathTableaux):
|
|
365
|
+
"""
|
|
366
|
+
The parent class for DyckPath.
|
|
367
|
+
"""
|
|
368
|
+
|
|
369
|
+
def _an_element_(self):
|
|
370
|
+
"""
|
|
371
|
+
Return an element of ``self``.
|
|
372
|
+
|
|
373
|
+
EXAMPLES::
|
|
374
|
+
|
|
375
|
+
sage: path_tableaux.DyckPaths()._an_element_()
|
|
376
|
+
[0, 1, 2, 1, 0]
|
|
377
|
+
"""
|
|
378
|
+
return DyckPath([0,1,2,1,0])
|
|
379
|
+
|
|
380
|
+
Element = DyckPath
|