passagemath-combinat 10.6.42__cp314-cp314-musllinux_1_2_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- passagemath_combinat/__init__.py +3 -0
- passagemath_combinat-10.6.42.dist-info/METADATA +160 -0
- passagemath_combinat-10.6.42.dist-info/RECORD +400 -0
- passagemath_combinat-10.6.42.dist-info/WHEEL +5 -0
- passagemath_combinat-10.6.42.dist-info/top_level.txt +3 -0
- passagemath_combinat.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
- passagemath_combinat.libs/libsymmetrica-81fe8739.so.3.0.0 +0 -0
- sage/algebras/affine_nil_temperley_lieb.py +263 -0
- sage/algebras/all.py +24 -0
- sage/algebras/all__sagemath_combinat.py +35 -0
- sage/algebras/askey_wilson.py +935 -0
- sage/algebras/associated_graded.py +345 -0
- sage/algebras/cellular_basis.py +350 -0
- sage/algebras/cluster_algebra.py +2766 -0
- sage/algebras/down_up_algebra.py +860 -0
- sage/algebras/free_algebra.py +1698 -0
- sage/algebras/free_algebra_element.py +345 -0
- sage/algebras/free_algebra_quotient.py +405 -0
- sage/algebras/free_algebra_quotient_element.py +295 -0
- sage/algebras/free_zinbiel_algebra.py +885 -0
- sage/algebras/hall_algebra.py +783 -0
- sage/algebras/hecke_algebras/all.py +4 -0
- sage/algebras/hecke_algebras/ariki_koike_algebra.py +1796 -0
- sage/algebras/hecke_algebras/ariki_koike_specht_modules.py +475 -0
- sage/algebras/hecke_algebras/cubic_hecke_algebra.py +3520 -0
- sage/algebras/hecke_algebras/cubic_hecke_base_ring.py +1473 -0
- sage/algebras/hecke_algebras/cubic_hecke_matrix_rep.py +1079 -0
- sage/algebras/iwahori_hecke_algebra.py +3095 -0
- sage/algebras/jordan_algebra.py +1773 -0
- sage/algebras/lie_conformal_algebras/abelian_lie_conformal_algebra.py +113 -0
- sage/algebras/lie_conformal_algebras/affine_lie_conformal_algebra.py +156 -0
- sage/algebras/lie_conformal_algebras/all.py +18 -0
- sage/algebras/lie_conformal_algebras/bosonic_ghosts_lie_conformal_algebra.py +134 -0
- sage/algebras/lie_conformal_algebras/examples.py +43 -0
- sage/algebras/lie_conformal_algebras/fermionic_ghosts_lie_conformal_algebra.py +131 -0
- sage/algebras/lie_conformal_algebras/finitely_freely_generated_lca.py +139 -0
- sage/algebras/lie_conformal_algebras/free_bosons_lie_conformal_algebra.py +174 -0
- sage/algebras/lie_conformal_algebras/free_fermions_lie_conformal_algebra.py +167 -0
- sage/algebras/lie_conformal_algebras/freely_generated_lie_conformal_algebra.py +107 -0
- sage/algebras/lie_conformal_algebras/graded_lie_conformal_algebra.py +135 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra.py +353 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra_element.py +236 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_basis.py +78 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_structure_coefs.py +328 -0
- sage/algebras/lie_conformal_algebras/n2_lie_conformal_algebra.py +117 -0
- sage/algebras/lie_conformal_algebras/neveu_schwarz_lie_conformal_algebra.py +86 -0
- sage/algebras/lie_conformal_algebras/virasoro_lie_conformal_algebra.py +82 -0
- sage/algebras/lie_conformal_algebras/weyl_lie_conformal_algebra.py +205 -0
- sage/algebras/nil_coxeter_algebra.py +191 -0
- sage/algebras/q_commuting_polynomials.py +673 -0
- sage/algebras/q_system.py +608 -0
- sage/algebras/quantum_clifford.py +959 -0
- sage/algebras/quantum_groups/ace_quantum_onsager.py +693 -0
- sage/algebras/quantum_groups/all.py +9 -0
- sage/algebras/quantum_groups/fock_space.py +2219 -0
- sage/algebras/quantum_groups/q_numbers.py +207 -0
- sage/algebras/quantum_groups/quantum_group_gap.py +2695 -0
- sage/algebras/quantum_groups/representations.py +591 -0
- sage/algebras/quantum_matrix_coordinate_algebra.py +1006 -0
- sage/algebras/quantum_oscillator.py +623 -0
- sage/algebras/quaternion_algebra.py +20 -0
- sage/algebras/quaternion_algebra_element.py +55 -0
- sage/algebras/rational_cherednik_algebra.py +525 -0
- sage/algebras/schur_algebra.py +670 -0
- sage/algebras/shuffle_algebra.py +1011 -0
- sage/algebras/splitting_algebra.py +779 -0
- sage/algebras/tensor_algebra.py +709 -0
- sage/algebras/yangian.py +1082 -0
- sage/algebras/yokonuma_hecke_algebra.py +1018 -0
- sage/all__sagemath_combinat.py +35 -0
- sage/combinat/SJT.py +255 -0
- sage/combinat/affine_permutation.py +2405 -0
- sage/combinat/algebraic_combinatorics.py +55 -0
- sage/combinat/all.py +53 -0
- sage/combinat/all__sagemath_combinat.py +195 -0
- sage/combinat/alternating_sign_matrix.py +2063 -0
- sage/combinat/baxter_permutations.py +346 -0
- sage/combinat/bijectionist.py +3220 -0
- sage/combinat/binary_recurrence_sequences.py +1180 -0
- sage/combinat/blob_algebra.py +685 -0
- sage/combinat/catalog_partitions.py +27 -0
- sage/combinat/chas/all.py +23 -0
- sage/combinat/chas/fsym.py +1180 -0
- sage/combinat/chas/wqsym.py +2601 -0
- sage/combinat/cluster_complex.py +326 -0
- sage/combinat/colored_permutations.py +2039 -0
- sage/combinat/colored_permutations_representations.py +964 -0
- sage/combinat/composition_signed.py +142 -0
- sage/combinat/composition_tableau.py +855 -0
- sage/combinat/constellation.py +1729 -0
- sage/combinat/core.py +751 -0
- sage/combinat/counting.py +12 -0
- sage/combinat/crystals/affine.py +742 -0
- sage/combinat/crystals/affine_factorization.py +518 -0
- sage/combinat/crystals/affinization.py +331 -0
- sage/combinat/crystals/alcove_path.py +2013 -0
- sage/combinat/crystals/all.py +22 -0
- sage/combinat/crystals/bkk_crystals.py +141 -0
- sage/combinat/crystals/catalog.py +115 -0
- sage/combinat/crystals/catalog_elementary_crystals.py +18 -0
- sage/combinat/crystals/catalog_infinity_crystals.py +33 -0
- sage/combinat/crystals/catalog_kirillov_reshetikhin.py +18 -0
- sage/combinat/crystals/crystals.py +257 -0
- sage/combinat/crystals/direct_sum.py +260 -0
- sage/combinat/crystals/elementary_crystals.py +1251 -0
- sage/combinat/crystals/fast_crystals.py +441 -0
- sage/combinat/crystals/fully_commutative_stable_grothendieck.py +1205 -0
- sage/combinat/crystals/generalized_young_walls.py +1076 -0
- sage/combinat/crystals/highest_weight_crystals.py +436 -0
- sage/combinat/crystals/induced_structure.py +695 -0
- sage/combinat/crystals/infinity_crystals.py +730 -0
- sage/combinat/crystals/kac_modules.py +863 -0
- sage/combinat/crystals/kirillov_reshetikhin.py +4196 -0
- sage/combinat/crystals/kyoto_path_model.py +497 -0
- sage/combinat/crystals/letters.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/crystals/letters.pxd +79 -0
- sage/combinat/crystals/letters.pyx +3056 -0
- sage/combinat/crystals/littelmann_path.py +1518 -0
- sage/combinat/crystals/monomial_crystals.py +1262 -0
- sage/combinat/crystals/multisegments.py +462 -0
- sage/combinat/crystals/mv_polytopes.py +467 -0
- sage/combinat/crystals/pbw_crystal.py +511 -0
- sage/combinat/crystals/pbw_datum.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/crystals/pbw_datum.pxd +4 -0
- sage/combinat/crystals/pbw_datum.pyx +487 -0
- sage/combinat/crystals/polyhedral_realization.py +372 -0
- sage/combinat/crystals/spins.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/crystals/spins.pxd +21 -0
- sage/combinat/crystals/spins.pyx +756 -0
- sage/combinat/crystals/star_crystal.py +290 -0
- sage/combinat/crystals/subcrystal.py +464 -0
- sage/combinat/crystals/tensor_product.py +1177 -0
- sage/combinat/crystals/tensor_product_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/crystals/tensor_product_element.pxd +35 -0
- sage/combinat/crystals/tensor_product_element.pyx +1870 -0
- sage/combinat/crystals/virtual_crystal.py +420 -0
- sage/combinat/cyclic_sieving_phenomenon.py +204 -0
- sage/combinat/debruijn_sequence.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/debruijn_sequence.pyx +355 -0
- sage/combinat/decorated_permutation.py +270 -0
- sage/combinat/degree_sequences.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/degree_sequences.pyx +588 -0
- sage/combinat/derangements.py +527 -0
- sage/combinat/descent_algebra.py +1008 -0
- sage/combinat/diagram.py +1551 -0
- sage/combinat/diagram_algebras.py +5886 -0
- sage/combinat/dyck_word.py +4349 -0
- sage/combinat/e_one_star.py +1623 -0
- sage/combinat/enumerated_sets.py +123 -0
- sage/combinat/expnums.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/expnums.pyx +148 -0
- sage/combinat/fast_vector_partitions.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/fast_vector_partitions.pyx +346 -0
- sage/combinat/fqsym.py +1977 -0
- sage/combinat/free_dendriform_algebra.py +954 -0
- sage/combinat/free_prelie_algebra.py +1141 -0
- sage/combinat/fully_commutative_elements.py +1077 -0
- sage/combinat/fully_packed_loop.py +1523 -0
- sage/combinat/gelfand_tsetlin_patterns.py +1409 -0
- sage/combinat/gray_codes.py +311 -0
- sage/combinat/grossman_larson_algebras.py +667 -0
- sage/combinat/growth.py +4352 -0
- sage/combinat/hall_polynomial.py +188 -0
- sage/combinat/hillman_grassl.py +866 -0
- sage/combinat/integer_matrices.py +329 -0
- sage/combinat/integer_vectors_mod_permgroup.py +1238 -0
- sage/combinat/k_tableau.py +4564 -0
- sage/combinat/kazhdan_lusztig.py +215 -0
- sage/combinat/key_polynomial.py +885 -0
- sage/combinat/knutson_tao_puzzles.py +2286 -0
- sage/combinat/lr_tableau.py +311 -0
- sage/combinat/matrices/all.py +24 -0
- sage/combinat/matrices/hadamard_matrix.py +3790 -0
- sage/combinat/matrices/latin.py +2912 -0
- sage/combinat/misc.py +401 -0
- sage/combinat/multiset_partition_into_sets_ordered.py +3541 -0
- sage/combinat/ncsf_qsym/all.py +21 -0
- sage/combinat/ncsf_qsym/combinatorics.py +317 -0
- sage/combinat/ncsf_qsym/generic_basis_code.py +1427 -0
- sage/combinat/ncsf_qsym/ncsf.py +5637 -0
- sage/combinat/ncsf_qsym/qsym.py +4053 -0
- sage/combinat/ncsf_qsym/tutorial.py +447 -0
- sage/combinat/ncsym/all.py +21 -0
- sage/combinat/ncsym/bases.py +855 -0
- sage/combinat/ncsym/dual.py +593 -0
- sage/combinat/ncsym/ncsym.py +2076 -0
- sage/combinat/necklace.py +551 -0
- sage/combinat/non_decreasing_parking_function.py +634 -0
- sage/combinat/nu_dyck_word.py +1474 -0
- sage/combinat/output.py +861 -0
- sage/combinat/parallelogram_polyomino.py +4326 -0
- sage/combinat/parking_functions.py +1602 -0
- sage/combinat/partition_algebra.py +1998 -0
- sage/combinat/partition_kleshchev.py +1982 -0
- sage/combinat/partition_shifting_algebras.py +584 -0
- sage/combinat/partition_tuple.py +3114 -0
- sage/combinat/path_tableaux/all.py +13 -0
- sage/combinat/path_tableaux/catalog.py +29 -0
- sage/combinat/path_tableaux/dyck_path.py +380 -0
- sage/combinat/path_tableaux/frieze.py +476 -0
- sage/combinat/path_tableaux/path_tableau.py +728 -0
- sage/combinat/path_tableaux/semistandard.py +510 -0
- sage/combinat/perfect_matching.py +779 -0
- sage/combinat/plane_partition.py +3300 -0
- sage/combinat/q_bernoulli.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/q_bernoulli.pyx +128 -0
- sage/combinat/quickref.py +81 -0
- sage/combinat/recognizable_series.py +2051 -0
- sage/combinat/regular_sequence.py +4316 -0
- sage/combinat/regular_sequence_bounded.py +543 -0
- sage/combinat/restricted_growth.py +81 -0
- sage/combinat/ribbon.py +20 -0
- sage/combinat/ribbon_shaped_tableau.py +489 -0
- sage/combinat/ribbon_tableau.py +1180 -0
- sage/combinat/rigged_configurations/all.py +46 -0
- sage/combinat/rigged_configurations/bij_abstract_class.py +548 -0
- sage/combinat/rigged_configurations/bij_infinity.py +370 -0
- sage/combinat/rigged_configurations/bij_type_A.py +163 -0
- sage/combinat/rigged_configurations/bij_type_A2_dual.py +338 -0
- sage/combinat/rigged_configurations/bij_type_A2_even.py +218 -0
- sage/combinat/rigged_configurations/bij_type_A2_odd.py +199 -0
- sage/combinat/rigged_configurations/bij_type_B.py +900 -0
- sage/combinat/rigged_configurations/bij_type_C.py +267 -0
- sage/combinat/rigged_configurations/bij_type_D.py +771 -0
- sage/combinat/rigged_configurations/bij_type_D_tri.py +392 -0
- sage/combinat/rigged_configurations/bij_type_D_twisted.py +576 -0
- sage/combinat/rigged_configurations/bij_type_E67.py +402 -0
- sage/combinat/rigged_configurations/bijection.py +143 -0
- sage/combinat/rigged_configurations/kleber_tree.py +1475 -0
- sage/combinat/rigged_configurations/kr_tableaux.py +1898 -0
- sage/combinat/rigged_configurations/rc_crystal.py +461 -0
- sage/combinat/rigged_configurations/rc_infinity.py +540 -0
- sage/combinat/rigged_configurations/rigged_configuration_element.py +2403 -0
- sage/combinat/rigged_configurations/rigged_configurations.py +1918 -0
- sage/combinat/rigged_configurations/rigged_partition.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/rigged_configurations/rigged_partition.pxd +15 -0
- sage/combinat/rigged_configurations/rigged_partition.pyx +680 -0
- sage/combinat/rigged_configurations/tensor_product_kr_tableaux.py +499 -0
- sage/combinat/rigged_configurations/tensor_product_kr_tableaux_element.py +428 -0
- sage/combinat/rsk.py +3438 -0
- sage/combinat/schubert_polynomial.py +508 -0
- sage/combinat/set_partition.py +3318 -0
- sage/combinat/set_partition_iterator.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/set_partition_iterator.pyx +136 -0
- sage/combinat/set_partition_ordered.py +1590 -0
- sage/combinat/sf/abreu_nigro.py +346 -0
- sage/combinat/sf/all.py +52 -0
- sage/combinat/sf/character.py +576 -0
- sage/combinat/sf/classical.py +319 -0
- sage/combinat/sf/dual.py +996 -0
- sage/combinat/sf/elementary.py +549 -0
- sage/combinat/sf/hall_littlewood.py +1028 -0
- sage/combinat/sf/hecke.py +336 -0
- sage/combinat/sf/homogeneous.py +464 -0
- sage/combinat/sf/jack.py +1428 -0
- sage/combinat/sf/k_dual.py +1458 -0
- sage/combinat/sf/kfpoly.py +447 -0
- sage/combinat/sf/llt.py +789 -0
- sage/combinat/sf/macdonald.py +2019 -0
- sage/combinat/sf/monomial.py +525 -0
- sage/combinat/sf/multiplicative.py +113 -0
- sage/combinat/sf/new_kschur.py +1786 -0
- sage/combinat/sf/ns_macdonald.py +964 -0
- sage/combinat/sf/orthogonal.py +246 -0
- sage/combinat/sf/orthotriang.py +355 -0
- sage/combinat/sf/powersum.py +963 -0
- sage/combinat/sf/schur.py +880 -0
- sage/combinat/sf/sf.py +1653 -0
- sage/combinat/sf/sfa.py +7053 -0
- sage/combinat/sf/symplectic.py +253 -0
- sage/combinat/sf/witt.py +721 -0
- sage/combinat/shifted_primed_tableau.py +2735 -0
- sage/combinat/shuffle.py +830 -0
- sage/combinat/sidon_sets.py +146 -0
- sage/combinat/similarity_class_type.py +1721 -0
- sage/combinat/sine_gordon.py +618 -0
- sage/combinat/six_vertex_model.py +784 -0
- sage/combinat/skew_partition.py +2053 -0
- sage/combinat/skew_tableau.py +2989 -0
- sage/combinat/sloane_functions.py +8935 -0
- sage/combinat/specht_module.py +1403 -0
- sage/combinat/species/all.py +48 -0
- sage/combinat/species/characteristic_species.py +321 -0
- sage/combinat/species/composition_species.py +273 -0
- sage/combinat/species/cycle_species.py +284 -0
- sage/combinat/species/empty_species.py +155 -0
- sage/combinat/species/functorial_composition_species.py +148 -0
- sage/combinat/species/generating_series.py +673 -0
- sage/combinat/species/library.py +148 -0
- sage/combinat/species/linear_order_species.py +169 -0
- sage/combinat/species/misc.py +83 -0
- sage/combinat/species/partition_species.py +290 -0
- sage/combinat/species/permutation_species.py +268 -0
- sage/combinat/species/product_species.py +423 -0
- sage/combinat/species/recursive_species.py +476 -0
- sage/combinat/species/set_species.py +192 -0
- sage/combinat/species/species.py +820 -0
- sage/combinat/species/structure.py +539 -0
- sage/combinat/species/subset_species.py +243 -0
- sage/combinat/species/sum_species.py +225 -0
- sage/combinat/subword.py +564 -0
- sage/combinat/subword_complex.py +2122 -0
- sage/combinat/subword_complex_c.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/subword_complex_c.pyx +119 -0
- sage/combinat/super_tableau.py +821 -0
- sage/combinat/superpartition.py +1154 -0
- sage/combinat/symmetric_group_algebra.py +3774 -0
- sage/combinat/symmetric_group_representations.py +1830 -0
- sage/combinat/t_sequences.py +877 -0
- sage/combinat/tableau.py +9506 -0
- sage/combinat/tableau_residues.py +860 -0
- sage/combinat/tableau_tuple.py +5353 -0
- sage/combinat/tiling.py +2432 -0
- sage/combinat/triangles_FHM.py +777 -0
- sage/combinat/tutorial.py +1857 -0
- sage/combinat/vector_partition.py +337 -0
- sage/combinat/words/abstract_word.py +1722 -0
- sage/combinat/words/all.py +59 -0
- sage/combinat/words/alphabet.py +268 -0
- sage/combinat/words/finite_word.py +7201 -0
- sage/combinat/words/infinite_word.py +113 -0
- sage/combinat/words/lyndon_word.py +652 -0
- sage/combinat/words/morphic.py +351 -0
- sage/combinat/words/morphism.py +3878 -0
- sage/combinat/words/paths.py +2932 -0
- sage/combinat/words/shuffle_product.py +278 -0
- sage/combinat/words/suffix_trees.py +1873 -0
- sage/combinat/words/word.py +769 -0
- sage/combinat/words/word_char.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/words/word_char.pyx +847 -0
- sage/combinat/words/word_datatypes.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/words/word_datatypes.pxd +4 -0
- sage/combinat/words/word_datatypes.pyx +1067 -0
- sage/combinat/words/word_generators.py +2026 -0
- sage/combinat/words/word_infinite_datatypes.py +1218 -0
- sage/combinat/words/word_options.py +99 -0
- sage/combinat/words/words.py +2396 -0
- sage/data_structures/all__sagemath_combinat.py +1 -0
- sage/databases/all__sagemath_combinat.py +13 -0
- sage/databases/findstat.py +4897 -0
- sage/databases/oeis.py +2058 -0
- sage/databases/sloane.py +393 -0
- sage/dynamics/all__sagemath_combinat.py +14 -0
- sage/dynamics/cellular_automata/all.py +7 -0
- sage/dynamics/cellular_automata/catalog.py +34 -0
- sage/dynamics/cellular_automata/elementary.py +612 -0
- sage/dynamics/cellular_automata/glca.py +477 -0
- sage/dynamics/cellular_automata/solitons.py +1463 -0
- sage/dynamics/finite_dynamical_system.py +1249 -0
- sage/dynamics/finite_dynamical_system_catalog.py +382 -0
- sage/games/all.py +7 -0
- sage/games/hexad.py +704 -0
- sage/games/quantumino.py +591 -0
- sage/games/sudoku.py +889 -0
- sage/games/sudoku_backtrack.cpython-314-x86_64-linux-musl.so +0 -0
- sage/games/sudoku_backtrack.pyx +189 -0
- sage/groups/all__sagemath_combinat.py +1 -0
- sage/groups/indexed_free_group.py +489 -0
- sage/libs/all__sagemath_combinat.py +6 -0
- sage/libs/lrcalc/__init__.py +1 -0
- sage/libs/lrcalc/lrcalc.py +525 -0
- sage/libs/symmetrica/__init__.py +7 -0
- sage/libs/symmetrica/all.py +101 -0
- sage/libs/symmetrica/kostka.pxi +168 -0
- sage/libs/symmetrica/part.pxi +193 -0
- sage/libs/symmetrica/plet.pxi +42 -0
- sage/libs/symmetrica/sab.pxi +196 -0
- sage/libs/symmetrica/sb.pxi +332 -0
- sage/libs/symmetrica/sc.pxi +192 -0
- sage/libs/symmetrica/schur.pxi +956 -0
- sage/libs/symmetrica/symmetrica.cpython-314-x86_64-linux-musl.so +0 -0
- sage/libs/symmetrica/symmetrica.pxi +1172 -0
- sage/libs/symmetrica/symmetrica.pyx +39 -0
- sage/monoids/all.py +13 -0
- sage/monoids/automatic_semigroup.py +1054 -0
- sage/monoids/free_abelian_monoid.py +315 -0
- sage/monoids/free_abelian_monoid_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/monoids/free_abelian_monoid_element.pxd +16 -0
- sage/monoids/free_abelian_monoid_element.pyx +397 -0
- sage/monoids/free_monoid.py +335 -0
- sage/monoids/free_monoid_element.py +431 -0
- sage/monoids/hecke_monoid.py +65 -0
- sage/monoids/string_monoid.py +817 -0
- sage/monoids/string_monoid_element.py +547 -0
- sage/monoids/string_ops.py +143 -0
- sage/monoids/trace_monoid.py +972 -0
- sage/rings/all__sagemath_combinat.py +2 -0
- sage/sat/all.py +4 -0
- sage/sat/boolean_polynomials.py +405 -0
- sage/sat/converters/__init__.py +6 -0
- sage/sat/converters/anf2cnf.py +14 -0
- sage/sat/converters/polybori.py +611 -0
- sage/sat/solvers/__init__.py +5 -0
- sage/sat/solvers/cryptominisat.py +287 -0
- sage/sat/solvers/dimacs.py +783 -0
- sage/sat/solvers/picosat.py +228 -0
- sage/sat/solvers/sat_lp.py +156 -0
- sage/sat/solvers/satsolver.cpython-314-x86_64-linux-musl.so +0 -0
- sage/sat/solvers/satsolver.pxd +3 -0
- sage/sat/solvers/satsolver.pyx +405 -0
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
r"""
|
|
3
|
+
Catalog of discrete dynamical systems
|
|
4
|
+
|
|
5
|
+
This module contains constructors for several specific discrete
|
|
6
|
+
dynamical systems.
|
|
7
|
+
These are accessible through
|
|
8
|
+
:mod:`sage.dynamics.finite_dynamical_system_catalog. <sage.dynamics.finite_dynamical_system_catalog>`
|
|
9
|
+
or just through ``finite_dynamical_systems.``
|
|
10
|
+
(type either of these in Sage and hit ``tab`` for a list).
|
|
11
|
+
|
|
12
|
+
AUTHORS:
|
|
13
|
+
|
|
14
|
+
- Darij Grinberg, Tom Roby (2018): initial version
|
|
15
|
+
|
|
16
|
+
Functions
|
|
17
|
+
=========
|
|
18
|
+
"""
|
|
19
|
+
#*****************************************************************************
|
|
20
|
+
# Copyright (C) 2018 Darij Grinberg <darijgrinberg@gmail.com>,
|
|
21
|
+
# 2018 Tom Roby <tomrobyuconn@gmail.com>
|
|
22
|
+
#
|
|
23
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
24
|
+
# as published by the Free Software Foundation; either version 2 of
|
|
25
|
+
# the License, or (at your option) any later version.
|
|
26
|
+
# http://www.gnu.org/licenses/
|
|
27
|
+
#*****************************************************************************
|
|
28
|
+
from sage.dynamics.finite_dynamical_system import DiscreteDynamicalSystem, \
|
|
29
|
+
FiniteDynamicalSystem, InvertibleDiscreteDynamicalSystem, \
|
|
30
|
+
InvertibleFiniteDynamicalSystem
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def permutation(pi, invertible=True):
|
|
34
|
+
r"""
|
|
35
|
+
Return the invertible finite discrete dynamical system
|
|
36
|
+
induced by the permutation ``pi`` of the set
|
|
37
|
+
`\{1, 2, \ldots, n\}`.
|
|
38
|
+
|
|
39
|
+
The permutation ``pi`` can be provided as an instance
|
|
40
|
+
of :class:`Permutation`, but also as anything that can
|
|
41
|
+
be cast into that class.
|
|
42
|
+
|
|
43
|
+
See also :meth:`one_line` for a more general
|
|
44
|
+
construction, which takes any map from
|
|
45
|
+
`\{1, 2, \ldots, n\}` to `\{1, 2, \ldots, n\}` given in
|
|
46
|
+
one-line notation, and builds a (not necessarily
|
|
47
|
+
invertible) discrete dynamical system out of it.
|
|
48
|
+
|
|
49
|
+
EXAMPLES::
|
|
50
|
+
|
|
51
|
+
sage: F = finite_dynamical_systems.permutation([3, 5, 4, 1, 2])
|
|
52
|
+
sage: F.verify_inverse_evolution()
|
|
53
|
+
True
|
|
54
|
+
sage: sorted(F.orbit_lengths())
|
|
55
|
+
[2, 3]
|
|
56
|
+
sage: F.orbit(3)
|
|
57
|
+
[3, 4, 1]
|
|
58
|
+
sage: F.is_homomesic(lambda x: 1)
|
|
59
|
+
True
|
|
60
|
+
sage: F.is_homomesic(lambda x: x)
|
|
61
|
+
False
|
|
62
|
+
"""
|
|
63
|
+
from sage.combinat.permutation import Permutation
|
|
64
|
+
pi = Permutation(pi)
|
|
65
|
+
n = len(pi)
|
|
66
|
+
X = range(1, n+1)
|
|
67
|
+
return InvertibleFiniteDynamicalSystem(X, pi, inverse=pi.inverse(), create_tuple=True)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def one_line(xs):
|
|
71
|
+
r"""
|
|
72
|
+
Return the finite discrete dynamical system
|
|
73
|
+
with ground set `\{1, 2, \ldots, n\}` and evolution
|
|
74
|
+
sending each `i` to `x_i`,
|
|
75
|
+
where `(x_1, x_2, \ldots, x_n)` is the argument ``xs``
|
|
76
|
+
provided.
|
|
77
|
+
|
|
78
|
+
EXAMPLES::
|
|
79
|
+
|
|
80
|
+
sage: F = finite_dynamical_systems.one_line([2, 2, 1, 2, 3])
|
|
81
|
+
sage: F.orbit(3)
|
|
82
|
+
[3, 1, 2]
|
|
83
|
+
sage: F.orbit(5)
|
|
84
|
+
[5, 3, 1, 2]
|
|
85
|
+
sage: F.orbit(2)
|
|
86
|
+
[2]
|
|
87
|
+
"""
|
|
88
|
+
n = len(xs)
|
|
89
|
+
X = range(1, n + 1)
|
|
90
|
+
xs2 = tuple(xs)
|
|
91
|
+
|
|
92
|
+
def pi(i):
|
|
93
|
+
return xs2[i - 1]
|
|
94
|
+
return FiniteDynamicalSystem(X, pi, create_tuple=True)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def bitstring_rotation(n, ones=None):
|
|
98
|
+
r"""
|
|
99
|
+
Return the invertible finite discrete dynamical system
|
|
100
|
+
consisting of all bitstrings of size `n` (that is, of
|
|
101
|
+
all `n`-tuples `(i_1, \ldots, i_n) \in \{0, 1\}^n`),
|
|
102
|
+
evolving by cyclic rotation.
|
|
103
|
+
|
|
104
|
+
If the optional parameter ``ones`` is provided, the
|
|
105
|
+
system is restricted only to those bitstrings whose
|
|
106
|
+
number of ones is the value of this parameter.
|
|
107
|
+
|
|
108
|
+
EXAMPLES::
|
|
109
|
+
|
|
110
|
+
sage: F = finite_dynamical_systems.bitstring_rotation(5)
|
|
111
|
+
sage: sorted(F.orbit_lengths())
|
|
112
|
+
[1, 1, 5, 5, 5, 5, 5, 5]
|
|
113
|
+
sage: F.orbit((0, 1, 1, 0, 1))
|
|
114
|
+
[(0, 1, 1, 0, 1),
|
|
115
|
+
(1, 1, 0, 1, 0),
|
|
116
|
+
(1, 0, 1, 0, 1),
|
|
117
|
+
(0, 1, 0, 1, 1),
|
|
118
|
+
(1, 0, 1, 1, 0)]
|
|
119
|
+
sage: F.is_homomesic(lambda x: sum(1 for i in range(5) for j in range(i) if x[j] > x[i]))
|
|
120
|
+
False
|
|
121
|
+
sage: F.is_homomesic(lambda x: x[0])
|
|
122
|
+
False
|
|
123
|
+
sage: F = finite_dynamical_systems.bitstring_rotation(5, ones=3)
|
|
124
|
+
sage: F.verify_inverse_evolution()
|
|
125
|
+
True
|
|
126
|
+
sage: sorted(F.orbit_lengths())
|
|
127
|
+
[5, 5]
|
|
128
|
+
sage: F.orbit((0, 1, 1, 0, 1))
|
|
129
|
+
[(0, 1, 1, 0, 1),
|
|
130
|
+
(1, 1, 0, 1, 0),
|
|
131
|
+
(1, 0, 1, 0, 1),
|
|
132
|
+
(0, 1, 0, 1, 1),
|
|
133
|
+
(1, 0, 1, 1, 0)]
|
|
134
|
+
sage: F.is_homomesic(lambda x: sum(1 for i in range(5) for j in range(i) if x[j] > x[i]))
|
|
135
|
+
True
|
|
136
|
+
sage: F.is_homomesic(lambda x: x[0])
|
|
137
|
+
True
|
|
138
|
+
"""
|
|
139
|
+
if ones is None:
|
|
140
|
+
from sage.categories.cartesian_product import cartesian_product
|
|
141
|
+
X = cartesian_product([[0,1]] * n)
|
|
142
|
+
else:
|
|
143
|
+
from itertools import combinations
|
|
144
|
+
X = [tuple((1 if i in cs else 0) for i in range(n))
|
|
145
|
+
for cs in combinations(range(n), ones)]
|
|
146
|
+
if n == 0:
|
|
147
|
+
phi = lambda x: x
|
|
148
|
+
psi = phi
|
|
149
|
+
else:
|
|
150
|
+
phi = lambda x: x[1:] + (x[0],)
|
|
151
|
+
psi = lambda x: (x[-1],) + x[:-1]
|
|
152
|
+
return InvertibleFiniteDynamicalSystem(X, phi, inverse=psi)
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def striker_sweep(E, predicate, elements, lazy=False):
|
|
156
|
+
r"""
|
|
157
|
+
Return the invertible finite discrete dynamical system
|
|
158
|
+
on all subsets of a finite set ``E`` satisfying a
|
|
159
|
+
boolean predicate ``predicate``, where evolution is
|
|
160
|
+
the "Striker sweep" -- i.e., the composition of
|
|
161
|
+
Striker toggles corresponding to the elements in the
|
|
162
|
+
iterable ``elements`` (from first to last).
|
|
163
|
+
|
|
164
|
+
Let `E` be a finite set.
|
|
165
|
+
Let `\mathcal{L}` be a subset of the powerset of `E`.
|
|
166
|
+
(In this implementation, `\mathcal{L}` should be
|
|
167
|
+
specified via the boolean predicate ``predicate``,
|
|
168
|
+
which takes a subset `F` of `E` and returns the truth
|
|
169
|
+
value of `F \in \mathcal{L}`.)
|
|
170
|
+
For any `e \in E`, the *Striker toggle* `t_e` is
|
|
171
|
+
the involution of the set `\mathcal{L}` that sends
|
|
172
|
+
each `F \in \mathcal{L}` to the symmetric difference
|
|
173
|
+
`F \triangle \{ e \}` if this symmetric difference
|
|
174
|
+
is in `\mathcal{L}`, and otherwise to `F` itself.
|
|
175
|
+
If `(e_1, e_2, \ldots, e_k)` is a finite sequence of
|
|
176
|
+
elements of `E` (to be provided as a tuple, via the
|
|
177
|
+
argument ``elements``), then the *Striker sweep*
|
|
178
|
+
corresponding to this sequence is the composition of
|
|
179
|
+
maps
|
|
180
|
+
`t_{e_k} \circ t_{e_{k-1}} \circ \cdots \circ t_{e_1}`.
|
|
181
|
+
|
|
182
|
+
This generalizes classical constructions such as
|
|
183
|
+
rowmotion on order ideals.
|
|
184
|
+
|
|
185
|
+
The optional argument ``lazy`` can be set to
|
|
186
|
+
``True``; in that case, the ground set of the
|
|
187
|
+
dynamical system will not be explicitly computed.
|
|
188
|
+
|
|
189
|
+
.. WARNING::
|
|
190
|
+
|
|
191
|
+
The sequence ``elements`` should be provided as
|
|
192
|
+
a tuple, or as a list that is guaranteed not to
|
|
193
|
+
be mutated (as otherwise, mutation will corrupt
|
|
194
|
+
this DDS).
|
|
195
|
+
|
|
196
|
+
.. TODO::
|
|
197
|
+
|
|
198
|
+
Implement the ``lazy=True`` case.
|
|
199
|
+
This should differ in that ``X`` is no longer a
|
|
200
|
+
list, but an enumerated set.
|
|
201
|
+
But how to build an enumerated set filtering a
|
|
202
|
+
given enumerated set according to a predicate?
|
|
203
|
+
|
|
204
|
+
EXAMPLES::
|
|
205
|
+
|
|
206
|
+
sage: StS = finite_dynamical_systems.striker_sweep
|
|
207
|
+
sage: E = range(1, 5)
|
|
208
|
+
sage: lac = lambda S: all(s + 1 not in S for s in S) # lacunarity predicate
|
|
209
|
+
sage: F = StS(E, lac, [1, 2, 3, 4])
|
|
210
|
+
sage: F.ground_set()
|
|
211
|
+
[{}, {1}, {2}, {3}, {4}, {1, 3}, {1, 4}, {2, 4}]
|
|
212
|
+
sage: F.evolution()(Set([2, 4]))
|
|
213
|
+
{}
|
|
214
|
+
sage: F.evolution()(Set([]))
|
|
215
|
+
{1, 3}
|
|
216
|
+
sage: F.evolution()(Set([1, 3]))
|
|
217
|
+
{4}
|
|
218
|
+
sage: F.evolution()(Set([4]))
|
|
219
|
+
{1}
|
|
220
|
+
sage: F.inverse_evolution()(Set([1]))
|
|
221
|
+
{4}
|
|
222
|
+
sage: F.verify_inverse_evolution()
|
|
223
|
+
True
|
|
224
|
+
sage: sorted(F.orbit_lengths())
|
|
225
|
+
[3, 5]
|
|
226
|
+
sage: F.orbit(Set([2, 4]))
|
|
227
|
+
[{2, 4}, {}, {1, 3}, {4}, {1}]
|
|
228
|
+
sage: F.is_homomesic(lambda S: S.cardinality())
|
|
229
|
+
False
|
|
230
|
+
sage: F.is_homomesic(lambda S: bool(1 in S) - bool(4 in S), find_average=True)
|
|
231
|
+
0
|
|
232
|
+
sage: F.is_homomesic(lambda S: bool(2 in S) - bool(3 in S), find_average=True)
|
|
233
|
+
0
|
|
234
|
+
sage: F.is_homomesic(lambda S: bool(1 in S), find_average=True)
|
|
235
|
+
False
|
|
236
|
+
"""
|
|
237
|
+
from sage.combinat.subset import Subsets
|
|
238
|
+
from sage.sets.set import Set
|
|
239
|
+
X = [F for F in Subsets(E) if predicate(F)]
|
|
240
|
+
|
|
241
|
+
def phi(F):
|
|
242
|
+
for e in elements:
|
|
243
|
+
G = F.symmetric_difference(Set([e]))
|
|
244
|
+
if predicate(G):
|
|
245
|
+
F = G
|
|
246
|
+
return F
|
|
247
|
+
|
|
248
|
+
def psi(F):
|
|
249
|
+
for e in reversed(elements):
|
|
250
|
+
G = F.symmetric_difference(Set([e]))
|
|
251
|
+
if predicate(G):
|
|
252
|
+
F = G
|
|
253
|
+
return F
|
|
254
|
+
return InvertibleFiniteDynamicalSystem(X, phi, inverse=psi)
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
def syt_promotion(lam):
|
|
258
|
+
r"""
|
|
259
|
+
Return the invertible finite discrete dynamical system
|
|
260
|
+
consisting of all standard tableaux of shape ``lam`` (a
|
|
261
|
+
given partition) and evolving according to promotion.
|
|
262
|
+
|
|
263
|
+
EXAMPLES::
|
|
264
|
+
|
|
265
|
+
sage: F = finite_dynamical_systems.syt_promotion([4, 4, 4])
|
|
266
|
+
sage: sorted(F.orbit_lengths())
|
|
267
|
+
[3, 3, 4, 4, 4, 6, 6, 6, 6, 12, 12, 12, 12, 12, 12,
|
|
268
|
+
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
|
|
269
|
+
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
|
|
270
|
+
12, 12, 12, 12, 12]
|
|
271
|
+
sage: G = finite_dynamical_systems.syt_promotion([4, 3, 1])
|
|
272
|
+
sage: sorted(G.orbit_lengths())
|
|
273
|
+
[16, 22, 32]
|
|
274
|
+
sage: G.verify_inverse_evolution()
|
|
275
|
+
True
|
|
276
|
+
"""
|
|
277
|
+
from sage.combinat.partition import Partition
|
|
278
|
+
from sage.combinat.tableau import StandardTableaux
|
|
279
|
+
lam = Partition(lam)
|
|
280
|
+
X = StandardTableaux(lam)
|
|
281
|
+
return InvertibleFiniteDynamicalSystem(X, lambda T: T.promotion(),
|
|
282
|
+
inverse=lambda T: T.promotion_inverse())
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
def order_ideal_rowmotion(P):
|
|
286
|
+
r"""
|
|
287
|
+
Return the invertible finite discrete dynamical system
|
|
288
|
+
consisting of all order ideals of the poset ``P``,
|
|
289
|
+
evolving according to rowmotion.
|
|
290
|
+
|
|
291
|
+
EXAMPLES::
|
|
292
|
+
|
|
293
|
+
sage: # needs sage.combinat sage.graphs sage.modules
|
|
294
|
+
sage: P = RootSystem(["A", 6]).root_poset()
|
|
295
|
+
sage: F = finite_dynamical_systems.order_ideal_rowmotion(P)
|
|
296
|
+
sage: sorted(F.orbit_lengths())
|
|
297
|
+
[2, 7, 7, 7, 7, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
|
|
298
|
+
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14]
|
|
299
|
+
sage: F.is_homomesic(lambda I: len(I))
|
|
300
|
+
False
|
|
301
|
+
sage: F.is_homomesic(lambda I: sum((-1)**(P.rank(i)) for i in I))
|
|
302
|
+
True
|
|
303
|
+
|
|
304
|
+
sage: # needs sage.combinat sage.graphs sage.modules
|
|
305
|
+
sage: P = RootSystem(["A", 3]).root_poset()
|
|
306
|
+
sage: F = finite_dynamical_systems.order_ideal_rowmotion(P)
|
|
307
|
+
sage: F.verify_inverse_evolution()
|
|
308
|
+
True
|
|
309
|
+
"""
|
|
310
|
+
from sage.sets.set import Set
|
|
311
|
+
X = [Set(P.order_ideal(A)) for A in P.antichains()]
|
|
312
|
+
# Using P.order_ideals_lattice() instead causes intransparency issues:
|
|
313
|
+
# sage can't always do P.rowmotion(I) when I is in P.order_ideals_lattice().
|
|
314
|
+
# Bug in P.order_ideals_lattice() when P is facade?
|
|
315
|
+
phi = P.rowmotion
|
|
316
|
+
|
|
317
|
+
def psi(I): # inverse of rowmotion
|
|
318
|
+
result = I
|
|
319
|
+
for i in P.linear_extension():
|
|
320
|
+
result = P.order_ideal_toggle(result, i)
|
|
321
|
+
return result
|
|
322
|
+
return InvertibleFiniteDynamicalSystem(X, phi, inverse=psi)
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
def bulgarian_solitaire(n):
|
|
326
|
+
r"""
|
|
327
|
+
Return the finite discrete dynamical system defined
|
|
328
|
+
by Bulgarian solitaire on partitions of size `n`.
|
|
329
|
+
|
|
330
|
+
Let `n` be a nonnegative integer.
|
|
331
|
+
Let `P` be the set of all integer partitions of
|
|
332
|
+
size `n`.
|
|
333
|
+
Let `B : P \to P` be the map that sends each
|
|
334
|
+
partition
|
|
335
|
+
`\lambda = (\lambda_1, \lambda_2, \ldots, \lambda_k)`
|
|
336
|
+
of `n` (with all the `\lambda_i` positive) to
|
|
337
|
+
`(\lambda_1 - 1, \lambda_2 - 1, \ldots, \lambda_k - 1, k)`,
|
|
338
|
+
where zero entries have been removed and the remaining
|
|
339
|
+
entries sorted into decreasing order.
|
|
340
|
+
(For example,
|
|
341
|
+
`B(5, 4, 2, 2, 1, 1) = (6, 4, 3, 1, 1)`.)
|
|
342
|
+
This method yields the finite DDS whose ground set
|
|
343
|
+
is `P` and whose evolution is `B`.
|
|
344
|
+
|
|
345
|
+
EXAMPLES::
|
|
346
|
+
|
|
347
|
+
sage: BS = finite_dynamical_systems.bulgarian_solitaire
|
|
348
|
+
sage: BS(3).evolution()(Partition([3]))
|
|
349
|
+
[2, 1]
|
|
350
|
+
sage: BS(3).evolution()(Partition([2, 1]))
|
|
351
|
+
[2, 1]
|
|
352
|
+
sage: BS(3).evolution()(Partition([1, 1, 1]))
|
|
353
|
+
[3]
|
|
354
|
+
sage: BS(4).evolution()(Partition([4]))
|
|
355
|
+
[3, 1]
|
|
356
|
+
sage: BS(4).orbit(Partition([4]))
|
|
357
|
+
[[4], [3, 1], [2, 2], [2, 1, 1]]
|
|
358
|
+
sage: BS(4).orbit(Partition([3, 1]))
|
|
359
|
+
[[3, 1], [2, 2], [2, 1, 1]]
|
|
360
|
+
sage: BS(7).orbit(Partition([6, 1]), preperiod=True)
|
|
361
|
+
([[6, 1], [5, 2], [4, 2, 1], [3, 3, 1], [3, 2, 2], [3, 2, 1, 1]], 2)
|
|
362
|
+
sage: BS(6).is_homomesic(lambda lam: len(lam))
|
|
363
|
+
True
|
|
364
|
+
sage: BS(6).is_homomesic(lambda lam: lam[0])
|
|
365
|
+
True
|
|
366
|
+
sage: BS(6).is_homomesic(lambda lam: lam[-1])
|
|
367
|
+
True
|
|
368
|
+
sage: BS(8).is_homomesic(lambda lam: len(lam))
|
|
369
|
+
True
|
|
370
|
+
sage: BS(8).is_homomesic(lambda lam: lam[0])
|
|
371
|
+
True
|
|
372
|
+
sage: BS(8).is_homomesic(lambda lam: lam[-1])
|
|
373
|
+
False
|
|
374
|
+
"""
|
|
375
|
+
from sage.combinat.partition import Partition, Partitions
|
|
376
|
+
X = Partitions(n)
|
|
377
|
+
|
|
378
|
+
def phi(lam):
|
|
379
|
+
mu = [p - 1 for p in lam if p > 0]
|
|
380
|
+
nu = sorted(mu + [len(lam)], reverse=True)
|
|
381
|
+
return Partition(nu)
|
|
382
|
+
return FiniteDynamicalSystem(X, phi)
|