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,346 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
"""
|
|
3
|
+
Baxter permutations
|
|
4
|
+
"""
|
|
5
|
+
from sage.combinat.permutation import Permutations
|
|
6
|
+
from sage.rings.integer import Integer
|
|
7
|
+
from sage.rings.integer_ring import ZZ
|
|
8
|
+
from sage.sets.disjoint_union_enumerated_sets import DisjointUnionEnumeratedSets
|
|
9
|
+
from sage.structure.parent import Parent
|
|
10
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class BaxterPermutations(UniqueRepresentation, Parent):
|
|
14
|
+
r"""
|
|
15
|
+
The combinatorial class of Baxter permutations.
|
|
16
|
+
|
|
17
|
+
A Baxter permutation is a permutation avoiding the generalized
|
|
18
|
+
permutation patterns `2-41-3` and `3-14-2`. In other words, a
|
|
19
|
+
permutation `\sigma` is a Baxter permutation if for any subword `u
|
|
20
|
+
:= u_1u_2u_3u_4` of `\sigma` such that the letters `u_2` and `u_3`
|
|
21
|
+
are adjacent in `\sigma`, the standardized version of `u` is
|
|
22
|
+
neither `2413` nor `3142`.
|
|
23
|
+
|
|
24
|
+
See [Gir2012]_ for a study of Baxter permutations.
|
|
25
|
+
|
|
26
|
+
INPUT:
|
|
27
|
+
|
|
28
|
+
- ``n`` -- nonnegative integer (default: ``None``); the size of
|
|
29
|
+
the permutations
|
|
30
|
+
|
|
31
|
+
OUTPUT:
|
|
32
|
+
|
|
33
|
+
Return the combinatorial class of the Baxter permutations of size ``n``
|
|
34
|
+
if ``n`` is not ``None``. Otherwise, return the combinatorial class
|
|
35
|
+
of all Baxter permutations.
|
|
36
|
+
|
|
37
|
+
EXAMPLES::
|
|
38
|
+
|
|
39
|
+
sage: BaxterPermutations(5)
|
|
40
|
+
Baxter permutations of size 5
|
|
41
|
+
sage: BaxterPermutations()
|
|
42
|
+
Baxter permutations
|
|
43
|
+
"""
|
|
44
|
+
@staticmethod
|
|
45
|
+
def __classcall_private__(classe, n=None):
|
|
46
|
+
"""
|
|
47
|
+
EXAMPLES::
|
|
48
|
+
|
|
49
|
+
sage: BaxterPermutations(5)
|
|
50
|
+
Baxter permutations of size 5
|
|
51
|
+
sage: BaxterPermutations()
|
|
52
|
+
Baxter permutations
|
|
53
|
+
"""
|
|
54
|
+
if n is None:
|
|
55
|
+
return BaxterPermutations_all()
|
|
56
|
+
return BaxterPermutations_size(n)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class BaxterPermutations_size(BaxterPermutations):
|
|
60
|
+
r"""
|
|
61
|
+
The enumerated set of Baxter permutations of a given size.
|
|
62
|
+
|
|
63
|
+
See :class:`BaxterPermutations` for the definition of Baxter
|
|
64
|
+
permutations.
|
|
65
|
+
|
|
66
|
+
EXAMPLES::
|
|
67
|
+
|
|
68
|
+
sage: from sage.combinat.baxter_permutations import BaxterPermutations_size
|
|
69
|
+
sage: BaxterPermutations_size(5)
|
|
70
|
+
Baxter permutations of size 5
|
|
71
|
+
"""
|
|
72
|
+
|
|
73
|
+
def __init__(self, n):
|
|
74
|
+
"""
|
|
75
|
+
EXAMPLES::
|
|
76
|
+
|
|
77
|
+
sage: from sage.combinat.baxter_permutations import BaxterPermutations_size
|
|
78
|
+
sage: BaxterPermutations_size(5)
|
|
79
|
+
Baxter permutations of size 5
|
|
80
|
+
"""
|
|
81
|
+
self.element_class = Permutations(n).element_class
|
|
82
|
+
self._n = Integer(n)
|
|
83
|
+
from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets
|
|
84
|
+
super().__init__(category=FiniteEnumeratedSets())
|
|
85
|
+
|
|
86
|
+
def _repr_(self) -> str:
|
|
87
|
+
"""
|
|
88
|
+
Return a string representation of ``self``.
|
|
89
|
+
|
|
90
|
+
EXAMPLES::
|
|
91
|
+
|
|
92
|
+
sage: from sage.combinat.baxter_permutations import BaxterPermutations_size
|
|
93
|
+
sage: BaxterPermutations_size(5)
|
|
94
|
+
Baxter permutations of size 5
|
|
95
|
+
"""
|
|
96
|
+
return f"Baxter permutations of size {self._n}"
|
|
97
|
+
|
|
98
|
+
def __contains__(self, x) -> bool:
|
|
99
|
+
r"""
|
|
100
|
+
Return ``True`` if and only if ``x`` is a Baxter permutation of
|
|
101
|
+
size ``self._n``.
|
|
102
|
+
|
|
103
|
+
INPUT:
|
|
104
|
+
|
|
105
|
+
- ``x`` -- a permutation
|
|
106
|
+
|
|
107
|
+
EXAMPLES::
|
|
108
|
+
|
|
109
|
+
sage: Permutation([2, 1, 4, 3]) in BaxterPermutations(4)
|
|
110
|
+
True
|
|
111
|
+
sage: Permutation([2, 1, 4, 3]) in BaxterPermutations(5)
|
|
112
|
+
False
|
|
113
|
+
sage: Permutation([3, 1, 4, 2]) in BaxterPermutations(4)
|
|
114
|
+
False
|
|
115
|
+
sage: [len([p for p in Permutations(n) if p in BaxterPermutations(n)]) for n in range(7)]
|
|
116
|
+
[1, 1, 2, 6, 22, 92, 422]
|
|
117
|
+
sage: sorted([p for p in Permutations(6) if p in BaxterPermutations(6)]) == sorted(BaxterPermutations(6).list())
|
|
118
|
+
True
|
|
119
|
+
"""
|
|
120
|
+
if x not in Permutations(self._n):
|
|
121
|
+
return False
|
|
122
|
+
for i in range(1, len(x) - 1):
|
|
123
|
+
a = x[i]
|
|
124
|
+
b = x[i + 1]
|
|
125
|
+
if a < b: # Hunting pattern 3-14-2.
|
|
126
|
+
max_l = 0
|
|
127
|
+
for x_j in x[:i]:
|
|
128
|
+
if x_j > a and x_j < b and x_j > max_l:
|
|
129
|
+
max_l = x_j
|
|
130
|
+
min_r = len(x) + 1
|
|
131
|
+
for x_j in x[i + 2:]:
|
|
132
|
+
if x_j > a and x_j < b and x_j < min_r:
|
|
133
|
+
min_r = x_j
|
|
134
|
+
if max_l > min_r:
|
|
135
|
+
return False
|
|
136
|
+
else: # Hunting pattern 2-41-3.
|
|
137
|
+
min_l = len(x) + 1
|
|
138
|
+
for x_j in x[:i]:
|
|
139
|
+
if x_j < a and x_j > b and x_j < min_l:
|
|
140
|
+
min_l = x_j
|
|
141
|
+
max_r = 0
|
|
142
|
+
for x_j in x[i + 2:]:
|
|
143
|
+
if x_j < a and x_j > b and x_j > max_r:
|
|
144
|
+
max_r = x_j
|
|
145
|
+
if min_l < max_r:
|
|
146
|
+
return False
|
|
147
|
+
return True
|
|
148
|
+
|
|
149
|
+
def __iter__(self):
|
|
150
|
+
r"""
|
|
151
|
+
Efficient generation of Baxter permutations.
|
|
152
|
+
|
|
153
|
+
OUTPUT: an iterator over the Baxter permutations of size ``self._n``
|
|
154
|
+
|
|
155
|
+
EXAMPLES::
|
|
156
|
+
|
|
157
|
+
sage: BaxterPermutations(4).list()
|
|
158
|
+
[[4, 3, 2, 1], [3, 4, 2, 1], [3, 2, 4, 1], [3, 2, 1, 4], [2, 4, 3, 1],
|
|
159
|
+
[4, 2, 3, 1], [2, 3, 4, 1], [2, 3, 1, 4], [2, 1, 4, 3], [4, 2, 1, 3],
|
|
160
|
+
[2, 1, 3, 4], [1, 4, 3, 2], [4, 1, 3, 2], [1, 3, 4, 2], [1, 3, 2, 4],
|
|
161
|
+
[4, 3, 1, 2], [3, 4, 1, 2], [3, 1, 2, 4], [1, 2, 4, 3], [1, 4, 2, 3],
|
|
162
|
+
[4, 1, 2, 3], [1, 2, 3, 4]]
|
|
163
|
+
sage: [len(BaxterPermutations(n)) for n in range(9)]
|
|
164
|
+
[1, 1, 2, 6, 22, 92, 422, 2074, 10754]
|
|
165
|
+
|
|
166
|
+
TESTS::
|
|
167
|
+
|
|
168
|
+
sage: all(a in BaxterPermutations(n) for n in range(7)
|
|
169
|
+
....: for a in BaxterPermutations(n))
|
|
170
|
+
True
|
|
171
|
+
|
|
172
|
+
ALGORITHM:
|
|
173
|
+
|
|
174
|
+
The algorithm using generating trees described in [BBMF2008]_ is used.
|
|
175
|
+
The idea is that all Baxter permutations of size `n + 1` can be
|
|
176
|
+
obtained by inserting the letter `n + 1` either just before a left
|
|
177
|
+
to right maximum or just after a right to left maximum of a Baxter
|
|
178
|
+
permutation of size `n`.
|
|
179
|
+
"""
|
|
180
|
+
if self._n == 0:
|
|
181
|
+
yield Permutations(0)([])
|
|
182
|
+
elif self._n == 1:
|
|
183
|
+
yield Permutations(1)([1])
|
|
184
|
+
else:
|
|
185
|
+
for b in BaxterPermutations(self._n - 1):
|
|
186
|
+
# Left to right maxima.
|
|
187
|
+
for j in b.reverse().saliances():
|
|
188
|
+
i = self._n - 2 - j
|
|
189
|
+
yield Permutations(self._n)(b[:i] + [self._n] + b[i:])
|
|
190
|
+
# Right to left maxima.
|
|
191
|
+
for i in b.saliances():
|
|
192
|
+
yield Permutations(self._n)(b[:i + 1] + [self._n] + b[i + 1:])
|
|
193
|
+
|
|
194
|
+
def _an_element_(self):
|
|
195
|
+
"""
|
|
196
|
+
Return an element of ``self``.
|
|
197
|
+
|
|
198
|
+
EXAMPLES::
|
|
199
|
+
|
|
200
|
+
sage: BaxterPermutations(4)._an_element_()
|
|
201
|
+
[4, 3, 2, 1]
|
|
202
|
+
"""
|
|
203
|
+
return self.first()
|
|
204
|
+
|
|
205
|
+
def cardinality(self):
|
|
206
|
+
r"""
|
|
207
|
+
Return the number of Baxter permutations of size ``self._n``.
|
|
208
|
+
|
|
209
|
+
For any positive integer `n`, the number of Baxter
|
|
210
|
+
permutations of size `n` equals
|
|
211
|
+
|
|
212
|
+
.. MATH::
|
|
213
|
+
|
|
214
|
+
\sum_{k=1}^n \dfrac
|
|
215
|
+
{\binom{n+1}{k-1} \binom{n+1}{k} \binom{n+1}{k+1}}
|
|
216
|
+
{\binom{n+1}{1} \binom{n+1}{2}} .
|
|
217
|
+
|
|
218
|
+
This is :oeis:`A001181`.
|
|
219
|
+
|
|
220
|
+
EXAMPLES::
|
|
221
|
+
|
|
222
|
+
sage: [BaxterPermutations(n).cardinality() for n in range(13)]
|
|
223
|
+
[1, 1, 2, 6, 22, 92, 422, 2074, 10754, 58202, 326240, 1882960, 11140560]
|
|
224
|
+
|
|
225
|
+
sage: BaxterPermutations(3r).cardinality()
|
|
226
|
+
6
|
|
227
|
+
sage: parent(_)
|
|
228
|
+
Integer Ring
|
|
229
|
+
"""
|
|
230
|
+
if self._n == 0:
|
|
231
|
+
return ZZ.one()
|
|
232
|
+
n = self._n + 1
|
|
233
|
+
return sum((n.binomial(k) *
|
|
234
|
+
n.binomial(k + 1) *
|
|
235
|
+
n.binomial(k + 2)) // (n * n.binomial(2))
|
|
236
|
+
for k in range(self._n))
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
class BaxterPermutations_all(DisjointUnionEnumeratedSets, BaxterPermutations):
|
|
240
|
+
r"""
|
|
241
|
+
The enumerated set of all Baxter permutations.
|
|
242
|
+
|
|
243
|
+
See :class:`BaxterPermutations` for the definition of Baxter
|
|
244
|
+
permutations.
|
|
245
|
+
|
|
246
|
+
EXAMPLES::
|
|
247
|
+
|
|
248
|
+
sage: from sage.combinat.baxter_permutations import BaxterPermutations_all
|
|
249
|
+
sage: BaxterPermutations_all()
|
|
250
|
+
Baxter permutations
|
|
251
|
+
"""
|
|
252
|
+
|
|
253
|
+
def __init__(self, n=None):
|
|
254
|
+
r"""
|
|
255
|
+
EXAMPLES::
|
|
256
|
+
|
|
257
|
+
sage: from sage.combinat.baxter_permutations import BaxterPermutations_all
|
|
258
|
+
sage: BaxterPermutations_all()
|
|
259
|
+
Baxter permutations
|
|
260
|
+
"""
|
|
261
|
+
self.element_class = Permutations().element_class
|
|
262
|
+
from sage.sets.non_negative_integers import NonNegativeIntegers
|
|
263
|
+
from sage.sets.family import Family
|
|
264
|
+
DisjointUnionEnumeratedSets.__init__(self,
|
|
265
|
+
Family(NonNegativeIntegers(),
|
|
266
|
+
BaxterPermutations_size),
|
|
267
|
+
facade=False, keepkey=False)
|
|
268
|
+
|
|
269
|
+
def _repr_(self):
|
|
270
|
+
r"""
|
|
271
|
+
Return a string representation of ``self``.
|
|
272
|
+
|
|
273
|
+
EXAMPLES::
|
|
274
|
+
|
|
275
|
+
sage: from sage.combinat.baxter_permutations import BaxterPermutations_all
|
|
276
|
+
sage: BaxterPermutations_all()
|
|
277
|
+
Baxter permutations
|
|
278
|
+
"""
|
|
279
|
+
return "Baxter permutations"
|
|
280
|
+
|
|
281
|
+
def __contains__(self, x):
|
|
282
|
+
r"""
|
|
283
|
+
Return ``True`` if and only if ``x`` is a Baxter permutation.
|
|
284
|
+
|
|
285
|
+
INPUT:
|
|
286
|
+
|
|
287
|
+
- ``x`` -- any object
|
|
288
|
+
|
|
289
|
+
EXAMPLES::
|
|
290
|
+
|
|
291
|
+
sage: Permutation([4, 2, 1, 7, 3, 8, 5, 6]) in BaxterPermutations()
|
|
292
|
+
False
|
|
293
|
+
sage: Permutation([4, 3, 6, 9, 7, 5, 1, 2, 8]) in BaxterPermutations()
|
|
294
|
+
True
|
|
295
|
+
|
|
296
|
+
TESTS::
|
|
297
|
+
|
|
298
|
+
sage: 42 in BaxterPermutations()
|
|
299
|
+
False
|
|
300
|
+
"""
|
|
301
|
+
if x not in Permutations():
|
|
302
|
+
return False
|
|
303
|
+
return x in BaxterPermutations(len(x))
|
|
304
|
+
|
|
305
|
+
def to_pair_of_twin_binary_trees(self, p):
|
|
306
|
+
r"""
|
|
307
|
+
Apply a bijection between Baxter permutations of size ``self._n``
|
|
308
|
+
and the set of pairs of twin binary trees with ``self._n`` nodes.
|
|
309
|
+
|
|
310
|
+
INPUT:
|
|
311
|
+
|
|
312
|
+
- ``p`` -- a Baxter permutation
|
|
313
|
+
|
|
314
|
+
OUTPUT:
|
|
315
|
+
|
|
316
|
+
The pair of twin binary trees `(T_L, T_R)` where `T_L`
|
|
317
|
+
(resp. `T_R`) is obtained by inserting the letters of ``p`` from
|
|
318
|
+
left to right (resp. right to left) following the binary search
|
|
319
|
+
tree insertion algorithm. This is called the *Baxter P-symbol*
|
|
320
|
+
in [Gir2012]_ Definition 4.1.
|
|
321
|
+
|
|
322
|
+
.. NOTE::
|
|
323
|
+
|
|
324
|
+
This method only works when ``p`` is a permutation. For words
|
|
325
|
+
with repeated letters, it would return two "right binary
|
|
326
|
+
search trees" (in the terminology of [Gir2012]_), which conflicts
|
|
327
|
+
with the definition in [Gir2012]_.
|
|
328
|
+
|
|
329
|
+
EXAMPLES::
|
|
330
|
+
|
|
331
|
+
sage: BP = BaxterPermutations()
|
|
332
|
+
sage: BP.to_pair_of_twin_binary_trees(Permutation([])) # needs sage.graphs
|
|
333
|
+
(., .)
|
|
334
|
+
sage: BP.to_pair_of_twin_binary_trees(Permutation([1, 2, 3])) # needs sage.graphs
|
|
335
|
+
(1[., 2[., 3[., .]]], 3[2[1[., .], .], .])
|
|
336
|
+
sage: BP.to_pair_of_twin_binary_trees(Permutation([3, 4, 1, 2])) # needs sage.graphs
|
|
337
|
+
(3[1[., 2[., .]], 4[., .]], 2[1[., .], 4[3[., .], .]])
|
|
338
|
+
"""
|
|
339
|
+
from sage.combinat.binary_tree import LabelledBinaryTree
|
|
340
|
+
left = LabelledBinaryTree(None)
|
|
341
|
+
right = LabelledBinaryTree(None)
|
|
342
|
+
for a in p:
|
|
343
|
+
left = left.binary_search_insert(a)
|
|
344
|
+
for a in reversed(p):
|
|
345
|
+
right = right.binary_search_insert(a)
|
|
346
|
+
return (left, right)
|