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,287 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
r"""
|
|
3
|
+
CryptoMiniSat Solver
|
|
4
|
+
|
|
5
|
+
This solver relies on Python bindings provided by upstream cryptominisat.
|
|
6
|
+
|
|
7
|
+
AUTHORS:
|
|
8
|
+
|
|
9
|
+
- Thierry Monteil (2017): complete rewrite, using upstream Python bindings,
|
|
10
|
+
works with cryptominisat 5.
|
|
11
|
+
- Martin Albrecht (2012): first version, as a cython interface, works with
|
|
12
|
+
cryptominisat 2.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
# ****************************************************************************
|
|
16
|
+
# Copyright (C) 2017 Thierry Monteil <sage!lma.metelu.net>
|
|
17
|
+
#
|
|
18
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
19
|
+
# as published by the Free Software Foundation; either version 2 of
|
|
20
|
+
# the License, or (at your option) any later version.
|
|
21
|
+
# https://www.gnu.org/licenses/
|
|
22
|
+
# ****************************************************************************
|
|
23
|
+
from .satsolver import SatSolver
|
|
24
|
+
|
|
25
|
+
from sage.misc.lazy_import import lazy_import
|
|
26
|
+
from sage.features.sat import Pycryptosat
|
|
27
|
+
|
|
28
|
+
lazy_import('pycryptosat', ['Solver'], feature=Pycryptosat())
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class CryptoMiniSat(SatSolver):
|
|
32
|
+
r"""
|
|
33
|
+
CryptoMiniSat Solver.
|
|
34
|
+
|
|
35
|
+
INPUT:
|
|
36
|
+
|
|
37
|
+
- ``verbosity`` -- integer between 0 and 15 (default: 0)
|
|
38
|
+
|
|
39
|
+
- ``confl_limit`` -- integer (default: ``None``); abort after this many
|
|
40
|
+
conflicts. If set to ``None``, never aborts.
|
|
41
|
+
|
|
42
|
+
- ``threads`` -- integer (default: ``None``); the number of thread to
|
|
43
|
+
use. If set to ``None``, the number of threads used corresponds to the
|
|
44
|
+
number of cpus.
|
|
45
|
+
|
|
46
|
+
EXAMPLES::
|
|
47
|
+
|
|
48
|
+
sage: from sage.sat.solvers.cryptominisat import CryptoMiniSat
|
|
49
|
+
sage: solver = CryptoMiniSat() # optional - pycryptosat
|
|
50
|
+
"""
|
|
51
|
+
def __init__(self, verbosity=0, confl_limit=None, threads=None):
|
|
52
|
+
r"""
|
|
53
|
+
Construct a new CryptoMiniSat instance.
|
|
54
|
+
|
|
55
|
+
See the documentation class for the description of inputs.
|
|
56
|
+
|
|
57
|
+
EXAMPLES::
|
|
58
|
+
|
|
59
|
+
sage: from sage.sat.solvers.cryptominisat import CryptoMiniSat
|
|
60
|
+
sage: solver = CryptoMiniSat(threads=1) # optional - pycryptosat
|
|
61
|
+
"""
|
|
62
|
+
if threads is None:
|
|
63
|
+
from sage.parallel.ncpus import ncpus
|
|
64
|
+
threads = ncpus()
|
|
65
|
+
if confl_limit is None:
|
|
66
|
+
from sys import maxsize
|
|
67
|
+
confl_limit = maxsize
|
|
68
|
+
self._solver = Solver(verbose=int(verbosity), confl_limit=int(confl_limit), threads=int(threads))
|
|
69
|
+
self._nvars = 0
|
|
70
|
+
self._clauses = []
|
|
71
|
+
|
|
72
|
+
def var(self, decision=None):
|
|
73
|
+
r"""
|
|
74
|
+
Return a *new* variable.
|
|
75
|
+
|
|
76
|
+
INPUT:
|
|
77
|
+
|
|
78
|
+
- ``decision`` -- accepted for compatibility with other solvers; ignored
|
|
79
|
+
|
|
80
|
+
EXAMPLES::
|
|
81
|
+
|
|
82
|
+
sage: from sage.sat.solvers.cryptominisat import CryptoMiniSat
|
|
83
|
+
sage: solver = CryptoMiniSat() # optional - pycryptosat
|
|
84
|
+
sage: solver.var() # optional - pycryptosat
|
|
85
|
+
1
|
|
86
|
+
|
|
87
|
+
sage: solver.add_clause((-1,2,-4)) # optional - pycryptosat
|
|
88
|
+
sage: solver.var() # optional - pycryptosat
|
|
89
|
+
5
|
|
90
|
+
"""
|
|
91
|
+
self._nvars += 1
|
|
92
|
+
return self._nvars
|
|
93
|
+
|
|
94
|
+
def nvars(self):
|
|
95
|
+
r"""
|
|
96
|
+
Return the number of variables.
|
|
97
|
+
|
|
98
|
+
Note that for compatibility with DIMACS convention, the number
|
|
99
|
+
of variables corresponds to the maximal index of the variables used.
|
|
100
|
+
|
|
101
|
+
EXAMPLES::
|
|
102
|
+
|
|
103
|
+
sage: from sage.sat.solvers.cryptominisat import CryptoMiniSat
|
|
104
|
+
sage: solver = CryptoMiniSat() # optional - pycryptosat
|
|
105
|
+
sage: solver.nvars() # optional - pycryptosat
|
|
106
|
+
0
|
|
107
|
+
|
|
108
|
+
If a variable with intermediate index is not used, it is still
|
|
109
|
+
considered as a variable::
|
|
110
|
+
|
|
111
|
+
sage: solver.add_clause((1,-2,4)) # optional - pycryptosat
|
|
112
|
+
sage: solver.nvars() # optional - pycryptosat
|
|
113
|
+
4
|
|
114
|
+
"""
|
|
115
|
+
return self._nvars
|
|
116
|
+
|
|
117
|
+
def add_clause(self, lits):
|
|
118
|
+
r"""
|
|
119
|
+
Add a new clause to set of clauses.
|
|
120
|
+
|
|
121
|
+
INPUT:
|
|
122
|
+
|
|
123
|
+
- ``lits`` -- tuple of nonzero integers
|
|
124
|
+
|
|
125
|
+
.. NOTE::
|
|
126
|
+
|
|
127
|
+
If any element ``e`` in ``lits`` has ``abs(e)`` greater
|
|
128
|
+
than the number of variables generated so far, then new
|
|
129
|
+
variables are created automatically.
|
|
130
|
+
|
|
131
|
+
EXAMPLES::
|
|
132
|
+
|
|
133
|
+
sage: from sage.sat.solvers.cryptominisat import CryptoMiniSat
|
|
134
|
+
sage: solver = CryptoMiniSat() # optional - pycryptosat
|
|
135
|
+
sage: solver.add_clause((1, -2 , 3)) # optional - pycryptosat
|
|
136
|
+
"""
|
|
137
|
+
if 0 in lits:
|
|
138
|
+
raise ValueError("0 should not appear in the clause: {}".format(lits))
|
|
139
|
+
# cryptominisat does not handle Sage integers
|
|
140
|
+
lits = tuple(int(i) for i in lits)
|
|
141
|
+
self._nvars = max(self._nvars, *(abs(i) for i in lits))
|
|
142
|
+
self._solver.add_clause(lits)
|
|
143
|
+
self._clauses.append((lits, False, None))
|
|
144
|
+
|
|
145
|
+
def add_xor_clause(self, lits, rhs=True):
|
|
146
|
+
r"""
|
|
147
|
+
Add a new XOR clause to set of clauses.
|
|
148
|
+
|
|
149
|
+
INPUT:
|
|
150
|
+
|
|
151
|
+
- ``lits`` -- tuple of positive integers
|
|
152
|
+
|
|
153
|
+
- ``rhs`` -- boolean (default: ``True``); whether this XOR clause should
|
|
154
|
+
be evaluated to ``True`` or ``False``
|
|
155
|
+
|
|
156
|
+
EXAMPLES::
|
|
157
|
+
|
|
158
|
+
sage: from sage.sat.solvers.cryptominisat import CryptoMiniSat
|
|
159
|
+
sage: solver = CryptoMiniSat() # optional - pycryptosat
|
|
160
|
+
sage: solver.add_xor_clause((1, 2 , 3), False) # optional - pycryptosat
|
|
161
|
+
"""
|
|
162
|
+
if 0 in lits:
|
|
163
|
+
raise ValueError("0 should not appear in the clause: {}".format(lits))
|
|
164
|
+
# cryptominisat does not handle Sage integers
|
|
165
|
+
lits = tuple(int(i) for i in lits)
|
|
166
|
+
self._nvars = max(self._nvars, *(abs(i) for i in lits))
|
|
167
|
+
self._solver.add_xor_clause(lits, rhs)
|
|
168
|
+
self._clauses.append((lits, True, rhs))
|
|
169
|
+
|
|
170
|
+
def __call__(self, assumptions=None):
|
|
171
|
+
r"""
|
|
172
|
+
Solve this instance.
|
|
173
|
+
|
|
174
|
+
OUTPUT:
|
|
175
|
+
|
|
176
|
+
- If this instance is SAT: A tuple of length ``nvars()+1``
|
|
177
|
+
where the ``i``-th entry holds an assignment for the
|
|
178
|
+
``i``-th variables (the ``0``-th entry is always ``None``).
|
|
179
|
+
|
|
180
|
+
- If this instance is UNSAT: ``False``.
|
|
181
|
+
|
|
182
|
+
EXAMPLES::
|
|
183
|
+
|
|
184
|
+
sage: # optional - pycryptosat
|
|
185
|
+
sage: from sage.sat.solvers.cryptominisat import CryptoMiniSat
|
|
186
|
+
sage: solver = CryptoMiniSat()
|
|
187
|
+
sage: solver.add_clause((1,2))
|
|
188
|
+
sage: solver.add_clause((-1,2))
|
|
189
|
+
sage: solver.add_clause((-1,-2))
|
|
190
|
+
sage: solver()
|
|
191
|
+
(None, False, True)
|
|
192
|
+
|
|
193
|
+
sage: solver.add_clause((1,-2)) # optional - pycryptosat
|
|
194
|
+
sage: solver() # optional - pycryptosat
|
|
195
|
+
False
|
|
196
|
+
"""
|
|
197
|
+
satisfiable, assignments = self._solver.solve()
|
|
198
|
+
if satisfiable:
|
|
199
|
+
return assignments
|
|
200
|
+
else:
|
|
201
|
+
return False
|
|
202
|
+
|
|
203
|
+
def __repr__(self):
|
|
204
|
+
r"""
|
|
205
|
+
TESTS::
|
|
206
|
+
|
|
207
|
+
sage: from sage.sat.solvers.cryptominisat import CryptoMiniSat
|
|
208
|
+
sage: solver = CryptoMiniSat() # optional - pycryptosat
|
|
209
|
+
sage: solver # optional - pycryptosat
|
|
210
|
+
CryptoMiniSat solver: 0 variables, 0 clauses.
|
|
211
|
+
"""
|
|
212
|
+
return "CryptoMiniSat solver: {} variables, {} clauses.".format(self.nvars(), len(self.clauses()))
|
|
213
|
+
|
|
214
|
+
def clauses(self, filename=None):
|
|
215
|
+
r"""
|
|
216
|
+
Return original clauses.
|
|
217
|
+
|
|
218
|
+
INPUT:
|
|
219
|
+
|
|
220
|
+
- ``filename`` -- if not ``None`` clauses are written to ``filename`` in
|
|
221
|
+
DIMACS format (default: ``None``)
|
|
222
|
+
|
|
223
|
+
OUTPUT:
|
|
224
|
+
|
|
225
|
+
If ``filename`` is ``None`` then a list of ``lits, is_xor, rhs``
|
|
226
|
+
tuples is returned, where ``lits`` is a tuple of literals,
|
|
227
|
+
``is_xor`` is always ``False`` and ``rhs`` is always ``None``.
|
|
228
|
+
|
|
229
|
+
If ``filename`` points to a writable file, then the list of original
|
|
230
|
+
clauses is written to that file in DIMACS format.
|
|
231
|
+
|
|
232
|
+
EXAMPLES::
|
|
233
|
+
|
|
234
|
+
sage: # optional - pycryptosat
|
|
235
|
+
sage: from sage.sat.solvers import CryptoMiniSat
|
|
236
|
+
sage: solver = CryptoMiniSat()
|
|
237
|
+
sage: solver.add_clause((1,2,3,4,5,6,7,8,-9))
|
|
238
|
+
sage: solver.add_xor_clause((1,2,3,4,5,6,7,8,9), rhs=True)
|
|
239
|
+
sage: solver.clauses()
|
|
240
|
+
[((1, 2, 3, 4, 5, 6, 7, 8, -9), False, None),
|
|
241
|
+
((1, 2, 3, 4, 5, 6, 7, 8, 9), True, True)]
|
|
242
|
+
|
|
243
|
+
DIMACS format output::
|
|
244
|
+
|
|
245
|
+
sage: # optional - pycryptosat
|
|
246
|
+
sage: from sage.sat.solvers import CryptoMiniSat
|
|
247
|
+
sage: solver = CryptoMiniSat()
|
|
248
|
+
sage: solver.add_clause((1, 2, 4))
|
|
249
|
+
sage: solver.add_clause((1, 2, -4))
|
|
250
|
+
sage: fn = tmp_filename()
|
|
251
|
+
sage: solver.clauses(fn)
|
|
252
|
+
sage: print(open(fn).read())
|
|
253
|
+
p cnf 4 2
|
|
254
|
+
1 2 4 0
|
|
255
|
+
1 2 -4 0
|
|
256
|
+
<BLANKLINE>
|
|
257
|
+
|
|
258
|
+
Note that in cryptominisat, the DIMACS standard format is augmented with
|
|
259
|
+
the following extension: having an ``x`` in front of a line makes that
|
|
260
|
+
line an XOR clause::
|
|
261
|
+
|
|
262
|
+
sage: solver.add_xor_clause((1,2,3), rhs=True) # optional - pycryptosat
|
|
263
|
+
sage: solver.clauses(fn) # optional - pycryptosat
|
|
264
|
+
sage: print(open(fn).read()) # optional - pycryptosat
|
|
265
|
+
p cnf 4 3
|
|
266
|
+
1 2 4 0
|
|
267
|
+
1 2 -4 0
|
|
268
|
+
x1 2 3 0
|
|
269
|
+
<BLANKLINE>
|
|
270
|
+
|
|
271
|
+
Note that inverting an xor-clause is equivalent to inverting one of the
|
|
272
|
+
variables::
|
|
273
|
+
|
|
274
|
+
sage: solver.add_xor_clause((1,2,5),rhs=False) # optional - pycryptosat
|
|
275
|
+
sage: solver.clauses(fn) # optional - pycryptosat
|
|
276
|
+
sage: print(open(fn).read()) # optional - pycryptosat
|
|
277
|
+
p cnf 5 4
|
|
278
|
+
1 2 4 0
|
|
279
|
+
1 2 -4 0
|
|
280
|
+
x1 2 3 0
|
|
281
|
+
x1 2 -5 0
|
|
282
|
+
<BLANKLINE>
|
|
283
|
+
"""
|
|
284
|
+
if filename is None:
|
|
285
|
+
return self._clauses
|
|
286
|
+
from sage.sat.solvers.dimacs import DIMACS
|
|
287
|
+
DIMACS.render_dimacs(self._clauses, filename, self.nvars())
|