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,228 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
r"""
|
|
3
|
+
PicoSAT Solver
|
|
4
|
+
|
|
5
|
+
This solver relies on the ``pycosat`` Python bindings to ``PicoSAT``.
|
|
6
|
+
|
|
7
|
+
The ``pycosat`` package should be installed on your Sage installation.
|
|
8
|
+
|
|
9
|
+
AUTHORS:
|
|
10
|
+
|
|
11
|
+
- Thierry Monteil (2018): initial version.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
# ****************************************************************************
|
|
15
|
+
# Copyright (C) 2018 Thierry Monteil <sage!lma.metelu.net>
|
|
16
|
+
#
|
|
17
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
18
|
+
# as published by the Free Software Foundation; either version 2 of
|
|
19
|
+
# the License, or (at your option) any later version.
|
|
20
|
+
# https://www.gnu.org/licenses/
|
|
21
|
+
# ****************************************************************************
|
|
22
|
+
from .satsolver import SatSolver
|
|
23
|
+
|
|
24
|
+
from sage.misc.lazy_import import lazy_import
|
|
25
|
+
from sage.features.sat import Pycosat
|
|
26
|
+
|
|
27
|
+
lazy_import('pycosat', ['solve'], feature=Pycosat())
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class PicoSAT(SatSolver):
|
|
31
|
+
r"""
|
|
32
|
+
PicoSAT Solver.
|
|
33
|
+
|
|
34
|
+
INPUT:
|
|
35
|
+
|
|
36
|
+
- ``verbosity`` -- integer between 0 and 2 (default: 0)
|
|
37
|
+
|
|
38
|
+
- ``prop_limit`` -- integer (default: 0); the propagation limit
|
|
39
|
+
|
|
40
|
+
EXAMPLES::
|
|
41
|
+
|
|
42
|
+
sage: from sage.sat.solvers.picosat import PicoSAT
|
|
43
|
+
sage: solver = PicoSAT() # optional - pycosat
|
|
44
|
+
"""
|
|
45
|
+
def __init__(self, verbosity=0, prop_limit=0):
|
|
46
|
+
r"""
|
|
47
|
+
Construct a new PicoSAT instance.
|
|
48
|
+
|
|
49
|
+
See the documentation class for the description of inputs.
|
|
50
|
+
|
|
51
|
+
EXAMPLES::
|
|
52
|
+
|
|
53
|
+
sage: from sage.sat.solvers.picosat import PicoSAT
|
|
54
|
+
sage: solver = PicoSAT() # optional - pycosat
|
|
55
|
+
"""
|
|
56
|
+
self._verbosity = int(verbosity)
|
|
57
|
+
if prop_limit is None:
|
|
58
|
+
self._prop_limit = 0
|
|
59
|
+
else:
|
|
60
|
+
self._prop_limit = int(prop_limit)
|
|
61
|
+
self._solve = solve
|
|
62
|
+
self._nvars = 0
|
|
63
|
+
self._clauses = []
|
|
64
|
+
|
|
65
|
+
def var(self, decision=None):
|
|
66
|
+
r"""
|
|
67
|
+
Return a *new* variable.
|
|
68
|
+
|
|
69
|
+
INPUT:
|
|
70
|
+
|
|
71
|
+
- ``decision`` -- ignored; accepted for compatibility with other solvers
|
|
72
|
+
|
|
73
|
+
EXAMPLES::
|
|
74
|
+
|
|
75
|
+
sage: from sage.sat.solvers.picosat import PicoSAT
|
|
76
|
+
sage: solver = PicoSAT() # optional - pycosat
|
|
77
|
+
sage: solver.var() # optional - pycosat
|
|
78
|
+
1
|
|
79
|
+
|
|
80
|
+
sage: solver.add_clause((-1,2,-4)) # optional - pycosat
|
|
81
|
+
sage: solver.var() # optional - pycosat
|
|
82
|
+
5
|
|
83
|
+
"""
|
|
84
|
+
self._nvars += 1
|
|
85
|
+
return self._nvars
|
|
86
|
+
|
|
87
|
+
def nvars(self):
|
|
88
|
+
r"""
|
|
89
|
+
Return the number of variables.
|
|
90
|
+
|
|
91
|
+
Note that for compatibility with DIMACS convention, the number
|
|
92
|
+
of variables corresponds to the maximal index of the variables used.
|
|
93
|
+
|
|
94
|
+
EXAMPLES::
|
|
95
|
+
|
|
96
|
+
sage: from sage.sat.solvers.picosat import PicoSAT
|
|
97
|
+
sage: solver = PicoSAT() # optional - pycosat
|
|
98
|
+
sage: solver.nvars() # optional - pycosat
|
|
99
|
+
0
|
|
100
|
+
|
|
101
|
+
If a variable with intermediate index is not used, it is still
|
|
102
|
+
considered as a variable::
|
|
103
|
+
|
|
104
|
+
sage: solver.add_clause((1,-2,4)) # optional - pycosat
|
|
105
|
+
sage: solver.nvars() # optional - pycosat
|
|
106
|
+
4
|
|
107
|
+
"""
|
|
108
|
+
return self._nvars
|
|
109
|
+
|
|
110
|
+
def add_clause(self, lits):
|
|
111
|
+
r"""
|
|
112
|
+
Add a new clause to set of clauses.
|
|
113
|
+
|
|
114
|
+
INPUT:
|
|
115
|
+
|
|
116
|
+
- ``lits`` -- tuple of nonzero integers
|
|
117
|
+
|
|
118
|
+
.. NOTE::
|
|
119
|
+
|
|
120
|
+
If any element ``e`` in ``lits`` has ``abs(e)`` greater
|
|
121
|
+
than the number of variables generated so far, then new
|
|
122
|
+
variables are created automatically.
|
|
123
|
+
|
|
124
|
+
EXAMPLES::
|
|
125
|
+
|
|
126
|
+
sage: from sage.sat.solvers.picosat import PicoSAT
|
|
127
|
+
sage: solver = PicoSAT() # optional - pycosat
|
|
128
|
+
sage: solver.add_clause((1, -2 , 3)) # optional - pycosat
|
|
129
|
+
"""
|
|
130
|
+
if 0 in lits:
|
|
131
|
+
raise ValueError("0 should not appear in the clause: {}".format(lits))
|
|
132
|
+
# pycosat does not handle Sage integers
|
|
133
|
+
lits = [int(i) for i in lits]
|
|
134
|
+
self._nvars = max(self._nvars, *(abs(i) for i in lits))
|
|
135
|
+
self._clauses.append(lits)
|
|
136
|
+
|
|
137
|
+
def __call__(self, assumptions=None):
|
|
138
|
+
r"""
|
|
139
|
+
Solve this instance.
|
|
140
|
+
|
|
141
|
+
OUTPUT:
|
|
142
|
+
|
|
143
|
+
- If this instance is SAT: A tuple of length ``nvars() + 1``,
|
|
144
|
+
where the ``i``-th entry holds an assignment for the
|
|
145
|
+
``i``-th variables (the ``0``-th entry is always ``None``).
|
|
146
|
+
|
|
147
|
+
- If this instance is UNSAT: ``False``.
|
|
148
|
+
|
|
149
|
+
EXAMPLES::
|
|
150
|
+
|
|
151
|
+
sage: # optional - pycosat
|
|
152
|
+
sage: from sage.sat.solvers.picosat import PicoSAT
|
|
153
|
+
sage: solver = PicoSAT()
|
|
154
|
+
sage: solver.add_clause((1,2))
|
|
155
|
+
sage: solver.add_clause((-1,2))
|
|
156
|
+
sage: solver.add_clause((-1,-2))
|
|
157
|
+
sage: solver()
|
|
158
|
+
(None, False, True)
|
|
159
|
+
|
|
160
|
+
sage: solver.add_clause((1,-2)) # optional - pycosat
|
|
161
|
+
sage: solver() # optional - pycosat
|
|
162
|
+
False
|
|
163
|
+
"""
|
|
164
|
+
# import pycosat
|
|
165
|
+
# self._solve = pycosat.solve
|
|
166
|
+
sol = self._solve(self._clauses, verbose=self._verbosity,
|
|
167
|
+
prop_limit=self._prop_limit, vars=self._nvars)
|
|
168
|
+
# sol = pycosat.solve(self._clauses)
|
|
169
|
+
if sol == 'UNSAT':
|
|
170
|
+
return False
|
|
171
|
+
else:
|
|
172
|
+
return (None,) + tuple([s > 0 for s in sol])
|
|
173
|
+
|
|
174
|
+
def __repr__(self):
|
|
175
|
+
r"""
|
|
176
|
+
TESTS::
|
|
177
|
+
|
|
178
|
+
sage: from sage.sat.solvers.picosat import PicoSAT
|
|
179
|
+
sage: solver = PicoSAT() # optional - pycosat
|
|
180
|
+
sage: solver # optional - pycosat
|
|
181
|
+
PicoSAT solver: 0 variables, 0 clauses.
|
|
182
|
+
"""
|
|
183
|
+
return "PicoSAT solver: {} variables, {} clauses.".format(self.nvars(), len(self.clauses()))
|
|
184
|
+
|
|
185
|
+
def clauses(self, filename=None):
|
|
186
|
+
r"""
|
|
187
|
+
Return original clauses.
|
|
188
|
+
|
|
189
|
+
INPUT:
|
|
190
|
+
|
|
191
|
+
- ``filename`` -- (optional) if given, clauses are written to
|
|
192
|
+
``filename`` in DIMACS format
|
|
193
|
+
|
|
194
|
+
OUTPUT:
|
|
195
|
+
|
|
196
|
+
If ``filename`` is ``None`` then a list of ``lits`` is returned,
|
|
197
|
+
where ``lits`` is a list of literals.
|
|
198
|
+
|
|
199
|
+
If ``filename`` points to a writable file, then the list of original
|
|
200
|
+
clauses is written to that file in DIMACS format.
|
|
201
|
+
|
|
202
|
+
EXAMPLES::
|
|
203
|
+
|
|
204
|
+
sage: from sage.sat.solvers.picosat import PicoSAT
|
|
205
|
+
sage: solver = PicoSAT() # optional - pycosat
|
|
206
|
+
sage: solver.add_clause((1,2,3,4,5,6,7,8,-9)) # optional - pycosat
|
|
207
|
+
sage: solver.clauses() # optional - pycosat
|
|
208
|
+
[[1, 2, 3, 4, 5, 6, 7, 8, -9]]
|
|
209
|
+
|
|
210
|
+
DIMACS format output::
|
|
211
|
+
|
|
212
|
+
sage: # optional - pycosat
|
|
213
|
+
sage: from sage.sat.solvers.picosat import PicoSAT
|
|
214
|
+
sage: solver = PicoSAT()
|
|
215
|
+
sage: solver.add_clause((1, 2, 4))
|
|
216
|
+
sage: solver.add_clause((1, 2, -4))
|
|
217
|
+
sage: fn = tmp_filename()
|
|
218
|
+
sage: solver.clauses(fn)
|
|
219
|
+
sage: print(open(fn).read())
|
|
220
|
+
p cnf 4 2
|
|
221
|
+
1 2 4 0
|
|
222
|
+
1 2 -4 0
|
|
223
|
+
<BLANKLINE>
|
|
224
|
+
"""
|
|
225
|
+
if filename is None:
|
|
226
|
+
return self._clauses
|
|
227
|
+
from sage.sat.solvers.dimacs import DIMACS
|
|
228
|
+
DIMACS.render_dimacs(self._clauses, filename, self.nvars())
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.numerical.mip
|
|
3
|
+
r"""
|
|
4
|
+
Solve SAT problems Integer Linear Programming
|
|
5
|
+
|
|
6
|
+
The class defined here is a :class:`~sage.sat.solvers.satsolver.SatSolver` that
|
|
7
|
+
solves its instance using :class:`MixedIntegerLinearProgram`. Its performance
|
|
8
|
+
can be expected to be slower than when using
|
|
9
|
+
:class:`~sage.sat.solvers.cryptominisat.cryptominisat.CryptoMiniSat`.
|
|
10
|
+
"""
|
|
11
|
+
from .satsolver import SatSolver
|
|
12
|
+
from sage.numerical.mip import MixedIntegerLinearProgram, MIPSolverException
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class SatLP(SatSolver):
|
|
16
|
+
def __init__(self, solver=None, verbose=0, *, integrality_tolerance=1e-3):
|
|
17
|
+
r"""
|
|
18
|
+
Initialize the instance.
|
|
19
|
+
|
|
20
|
+
INPUT:
|
|
21
|
+
|
|
22
|
+
- ``solver`` -- (default: ``None``) specify a Mixed Integer Linear Programming
|
|
23
|
+
(MILP) solver to be used. If set to ``None``, the default one is used. For
|
|
24
|
+
more information on MILP solvers and which default solver is used, see
|
|
25
|
+
the method
|
|
26
|
+
:meth:`solve <sage.numerical.mip.MixedIntegerLinearProgram.solve>`
|
|
27
|
+
of the class
|
|
28
|
+
:class:`MixedIntegerLinearProgram <sage.numerical.mip.MixedIntegerLinearProgram>`.
|
|
29
|
+
|
|
30
|
+
- ``verbose`` -- integer (default: 0); sets the level of verbosity
|
|
31
|
+
of the LP solver. Set to 0 by default, which means quiet.
|
|
32
|
+
|
|
33
|
+
- ``integrality_tolerance`` -- parameter for use with MILP solvers over an
|
|
34
|
+
inexact base ring; see :meth:`MixedIntegerLinearProgram.get_values`
|
|
35
|
+
|
|
36
|
+
EXAMPLES::
|
|
37
|
+
|
|
38
|
+
sage: S=SAT(solver='LP'); S
|
|
39
|
+
an ILP-based SAT Solver
|
|
40
|
+
"""
|
|
41
|
+
SatSolver.__init__(self)
|
|
42
|
+
self._LP = MixedIntegerLinearProgram(solver=solver)
|
|
43
|
+
self._LP_verbose = verbose
|
|
44
|
+
self._vars = self._LP.new_variable(binary=True)
|
|
45
|
+
self._integrality_tolerance = integrality_tolerance
|
|
46
|
+
|
|
47
|
+
def var(self):
|
|
48
|
+
"""
|
|
49
|
+
Return a *new* variable.
|
|
50
|
+
|
|
51
|
+
EXAMPLES::
|
|
52
|
+
|
|
53
|
+
sage: S=SAT(solver='LP'); S
|
|
54
|
+
an ILP-based SAT Solver
|
|
55
|
+
sage: S.var()
|
|
56
|
+
1
|
|
57
|
+
"""
|
|
58
|
+
nvars = n = self._LP.number_of_variables()
|
|
59
|
+
while nvars == self._LP.number_of_variables():
|
|
60
|
+
n += 1
|
|
61
|
+
self._vars[n] # creates the variable if needed
|
|
62
|
+
return n
|
|
63
|
+
|
|
64
|
+
def nvars(self):
|
|
65
|
+
"""
|
|
66
|
+
Return the number of variables.
|
|
67
|
+
|
|
68
|
+
EXAMPLES::
|
|
69
|
+
|
|
70
|
+
sage: S=SAT(solver='LP'); S
|
|
71
|
+
an ILP-based SAT Solver
|
|
72
|
+
sage: S.var()
|
|
73
|
+
1
|
|
74
|
+
sage: S.var()
|
|
75
|
+
2
|
|
76
|
+
sage: S.nvars()
|
|
77
|
+
2
|
|
78
|
+
"""
|
|
79
|
+
return self._LP.number_of_variables()
|
|
80
|
+
|
|
81
|
+
def add_clause(self, lits):
|
|
82
|
+
"""
|
|
83
|
+
Add a new clause to set of clauses.
|
|
84
|
+
|
|
85
|
+
INPUT:
|
|
86
|
+
|
|
87
|
+
- ``lits`` -- tuple of nonzero integers
|
|
88
|
+
|
|
89
|
+
.. NOTE::
|
|
90
|
+
|
|
91
|
+
If any element ``e`` in ``lits`` has ``abs(e)`` greater
|
|
92
|
+
than the number of variables generated so far, then new
|
|
93
|
+
variables are created automatically.
|
|
94
|
+
|
|
95
|
+
EXAMPLES::
|
|
96
|
+
|
|
97
|
+
sage: S=SAT(solver='LP'); S
|
|
98
|
+
an ILP-based SAT Solver
|
|
99
|
+
sage: for u,v in graphs.CycleGraph(6).edges(sort=False, labels=False):
|
|
100
|
+
....: u,v = u+1,v+1
|
|
101
|
+
....: S.add_clause((u,v))
|
|
102
|
+
....: S.add_clause((-u,-v))
|
|
103
|
+
"""
|
|
104
|
+
if 0 in lits:
|
|
105
|
+
raise ValueError("0 should not appear in the clause: {}".format(lits))
|
|
106
|
+
p = self._LP
|
|
107
|
+
p.add_constraint(p.sum(self._vars[x] if x > 0 else 1-self._vars[-x] for x in lits)
|
|
108
|
+
>= 1)
|
|
109
|
+
|
|
110
|
+
def __call__(self):
|
|
111
|
+
"""
|
|
112
|
+
Solve this instance.
|
|
113
|
+
|
|
114
|
+
OUTPUT:
|
|
115
|
+
|
|
116
|
+
- If this instance is SAT: A tuple of length ``nvars()+1``
|
|
117
|
+
where the ``i``-th entry holds an assignment for the
|
|
118
|
+
``i``-th variables (the ``0``-th entry is always ``None``).
|
|
119
|
+
|
|
120
|
+
- If this instance is UNSAT: ``False``
|
|
121
|
+
|
|
122
|
+
EXAMPLES::
|
|
123
|
+
|
|
124
|
+
sage: def is_bipartite_SAT(G):
|
|
125
|
+
....: S=SAT(solver='LP'); S
|
|
126
|
+
....: for u,v in G.edges(sort=False, labels=False):
|
|
127
|
+
....: u,v = u+1,v+1
|
|
128
|
+
....: S.add_clause((u,v))
|
|
129
|
+
....: S.add_clause((-u,-v))
|
|
130
|
+
....: return S
|
|
131
|
+
sage: S = is_bipartite_SAT(graphs.CycleGraph(6))
|
|
132
|
+
sage: S() # random
|
|
133
|
+
[None, True, False, True, False, True, False]
|
|
134
|
+
sage: True in S()
|
|
135
|
+
True
|
|
136
|
+
sage: S = is_bipartite_SAT(graphs.CycleGraph(7))
|
|
137
|
+
sage: S()
|
|
138
|
+
False
|
|
139
|
+
"""
|
|
140
|
+
try:
|
|
141
|
+
self._LP.solve(log=self._LP_verbose)
|
|
142
|
+
except MIPSolverException:
|
|
143
|
+
return False
|
|
144
|
+
|
|
145
|
+
b = self._LP.get_values(self._vars, convert=bool, tolerance=self._integrality_tolerance)
|
|
146
|
+
n = max(b)
|
|
147
|
+
return [None] + [b.get(i, False) for i in range(1, n + 1)]
|
|
148
|
+
|
|
149
|
+
def __repr__(self):
|
|
150
|
+
"""
|
|
151
|
+
TESTS::
|
|
152
|
+
|
|
153
|
+
sage: S=SAT(solver='LP'); S
|
|
154
|
+
an ILP-based SAT Solver
|
|
155
|
+
"""
|
|
156
|
+
return "an ILP-based SAT Solver"
|
|
Binary file
|