passagemath-combinat 10.6.31rc3__cp314-cp314-macosx_13_0_arm64.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.
Potentially problematic release.
This version of passagemath-combinat might be problematic. Click here for more details.
- passagemath_combinat-10.6.31rc3.dist-info/METADATA +160 -0
- passagemath_combinat-10.6.31rc3.dist-info/RECORD +399 -0
- passagemath_combinat-10.6.31rc3.dist-info/WHEEL +6 -0
- passagemath_combinat-10.6.31rc3.dist-info/top_level.txt +2 -0
- passagemath_combinat.dylibs/libgmp.10.dylib +0 -0
- passagemath_combinat.dylibs/libsymmetrica.3.0.0.dylib +0 -0
- sage/algebras/affine_nil_temperley_lieb.py +263 -0
- sage/algebras/all.py +25 -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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.so +0 -0
- sage/combinat/debruijn_sequence.pyx +355 -0
- sage/combinat/decorated_permutation.py +270 -0
- sage/combinat/degree_sequences.cpython-314-darwin.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-darwin.so +0 -0
- sage/combinat/expnums.pyx +148 -0
- sage/combinat/fast_vector_partitions.cpython-314-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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 +765 -0
- sage/combinat/words/word_char.cpython-314-darwin.so +0 -0
- sage/combinat/words/word_char.pyx +847 -0
- sage/combinat/words/word_datatypes.cpython-314-darwin.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-darwin.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-darwin.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-darwin.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-darwin.so +0 -0
- sage/sat/solvers/satsolver.pxd +3 -0
- sage/sat/solvers/satsolver.pyx +405 -0
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
r"""
|
|
3
|
+
Shuffle product of words
|
|
4
|
+
|
|
5
|
+
.. SEEALSO::
|
|
6
|
+
|
|
7
|
+
The module :mod:`sage.combinat.shuffle` contains a more general
|
|
8
|
+
implementation of shuffle product.
|
|
9
|
+
"""
|
|
10
|
+
# ****************************************************************************
|
|
11
|
+
# Copyright (C) 2007 Mike Hansen <mhansen@gmail.com>,
|
|
12
|
+
# Copyright (C) 2008 Franco Saliola <saliola@gmail.com>
|
|
13
|
+
#
|
|
14
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
15
|
+
#
|
|
16
|
+
# This code is distributed in the hope that it will be useful,
|
|
17
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
18
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
19
|
+
# General Public License for more details.
|
|
20
|
+
#
|
|
21
|
+
# The full text of the GPL is available at:
|
|
22
|
+
#
|
|
23
|
+
# https://www.gnu.org/licenses/
|
|
24
|
+
# ****************************************************************************
|
|
25
|
+
from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets
|
|
26
|
+
from sage.combinat.composition import Composition
|
|
27
|
+
from sage.combinat.integer_vector import IntegerVectors
|
|
28
|
+
from sage.combinat.words.word import Word_class, Word
|
|
29
|
+
from sage.rings.integer import Integer
|
|
30
|
+
from sage.structure.parent import Parent
|
|
31
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class ShuffleProduct_w1w2(Parent, UniqueRepresentation):
|
|
35
|
+
def __init__(self, w1, w2, check=True):
|
|
36
|
+
r"""
|
|
37
|
+
The shuffle product of the two words ``w1`` and ``w2``.
|
|
38
|
+
|
|
39
|
+
If `u` and `v` are two words, then the *shuffle product* of
|
|
40
|
+
`u` and `v` is a certain multiset of words defined as follows:
|
|
41
|
+
Let `a` and `b` be the lengths of `u` and `v`, respectively.
|
|
42
|
+
For every `a`-element subset `I` of `\{1, 2, \cdots, a+b\}`,
|
|
43
|
+
let `w(I)` be the length-`a+b` word such that:
|
|
44
|
+
|
|
45
|
+
- for every `1 \leq k \leq a`, the `i_k`-th letter of `w(I)`
|
|
46
|
+
is the `k`-th letter of `u`, where `i_k` is the
|
|
47
|
+
`k`-th smallest element of `I`;
|
|
48
|
+
|
|
49
|
+
- for every `1 \leq l \leq b`, the `j_l`-th letter of `w(I)`
|
|
50
|
+
is the `l`-th letter of `v`, where `j_l` is the
|
|
51
|
+
`l`-th smallest element of
|
|
52
|
+
`\{1, 2, \cdots, a+b\} \setminus I`.
|
|
53
|
+
|
|
54
|
+
The shuffle product of `u` and `v` is then the multiset of
|
|
55
|
+
all `w(I)` with `I` ranging over the `a`-element subsets of
|
|
56
|
+
`\{1, 2, \cdots, a+b\}`.
|
|
57
|
+
|
|
58
|
+
INPUT:
|
|
59
|
+
|
|
60
|
+
- ``check`` -- boolean (default: ``True``); whether to check that
|
|
61
|
+
all words in the shuffle product belong to the correct parent
|
|
62
|
+
|
|
63
|
+
EXAMPLES::
|
|
64
|
+
|
|
65
|
+
sage: from sage.combinat.words.shuffle_product import ShuffleProduct_w1w2
|
|
66
|
+
sage: W = Words([1,2,3,4])
|
|
67
|
+
sage: s = ShuffleProduct_w1w2(W([1,2]),W([3,4]))
|
|
68
|
+
sage: sorted(s)
|
|
69
|
+
[word: 1234, word: 1324, word: 1342, word: 3124,
|
|
70
|
+
word: 3142, word: 3412]
|
|
71
|
+
sage: s == loads(dumps(s))
|
|
72
|
+
True
|
|
73
|
+
sage: TestSuite(s).run()
|
|
74
|
+
|
|
75
|
+
sage: s = ShuffleProduct_w1w2(W([1,4,3]),W([2]))
|
|
76
|
+
sage: sorted(s)
|
|
77
|
+
[word: 1243, word: 1423, word: 1432, word: 2143]
|
|
78
|
+
|
|
79
|
+
sage: s = ShuffleProduct_w1w2(W([1,4,3]),W([]))
|
|
80
|
+
sage: sorted(s)
|
|
81
|
+
[word: 143]
|
|
82
|
+
|
|
83
|
+
TESTS::
|
|
84
|
+
|
|
85
|
+
sage: W = Words([1,2,3,4])
|
|
86
|
+
sage: s = ShuffleProduct_w1w2(W([1,2]), W([3,4]), check=False)
|
|
87
|
+
sage: len(list(s))
|
|
88
|
+
6
|
|
89
|
+
"""
|
|
90
|
+
self._w1 = w1
|
|
91
|
+
self._w2 = w2
|
|
92
|
+
self._check = bool(check)
|
|
93
|
+
Parent.__init__(self, category=FiniteEnumeratedSets())
|
|
94
|
+
|
|
95
|
+
def __repr__(self):
|
|
96
|
+
"""
|
|
97
|
+
EXAMPLES::
|
|
98
|
+
|
|
99
|
+
sage: from sage.combinat.words.shuffle_product import ShuffleProduct_w1w2
|
|
100
|
+
sage: W = Words("abcd")
|
|
101
|
+
sage: repr(ShuffleProduct_w1w2(W("ab"),W("cd")))
|
|
102
|
+
'Shuffle product of word: ab and word: cd'
|
|
103
|
+
"""
|
|
104
|
+
return "Shuffle product of %s and %s" % (repr(self._w1), repr(self._w2))
|
|
105
|
+
|
|
106
|
+
def __contains__(self, x):
|
|
107
|
+
"""
|
|
108
|
+
EXAMPLES::
|
|
109
|
+
|
|
110
|
+
sage: from sage.combinat.words.shuffle_product import ShuffleProduct_w1w2
|
|
111
|
+
sage: W = Words("abcd")
|
|
112
|
+
sage: w = W("ab")
|
|
113
|
+
sage: u = W("cd")
|
|
114
|
+
sage: S = ShuffleProduct_w1w2(w,u)
|
|
115
|
+
sage: w*u in S
|
|
116
|
+
True
|
|
117
|
+
sage: all(w.is_subword_of(x) for x in S)
|
|
118
|
+
True
|
|
119
|
+
sage: w in S
|
|
120
|
+
False
|
|
121
|
+
|
|
122
|
+
We check that :issue:`14121` is solved::
|
|
123
|
+
|
|
124
|
+
sage: w = W('ab')
|
|
125
|
+
sage: x = W('ac')
|
|
126
|
+
sage: x*w in w.shuffle(x)
|
|
127
|
+
True
|
|
128
|
+
"""
|
|
129
|
+
if not isinstance(x, Word_class):
|
|
130
|
+
return False
|
|
131
|
+
if x.length() != self._w1.length() + self._w2.length():
|
|
132
|
+
return False
|
|
133
|
+
w1 = list(self._w1)
|
|
134
|
+
w2 = list(self._w2)
|
|
135
|
+
wx = list(x)
|
|
136
|
+
for _ in range(len(wx)):
|
|
137
|
+
try:
|
|
138
|
+
letter = wx.pop(0)
|
|
139
|
+
except IndexError:
|
|
140
|
+
return False
|
|
141
|
+
if w1 and w2 and letter == w1[0] == w2[0]:
|
|
142
|
+
return (Word(wx) in self._w1[1:].shuffle(self._w2) or
|
|
143
|
+
Word(wx) in self._w1.shuffle(self._w2[1:]))
|
|
144
|
+
if w1 and letter == w1[0]:
|
|
145
|
+
w1.pop(0)
|
|
146
|
+
elif w2 and letter == w2[0]:
|
|
147
|
+
w2.pop(0)
|
|
148
|
+
else:
|
|
149
|
+
return False
|
|
150
|
+
return not wx
|
|
151
|
+
|
|
152
|
+
def cardinality(self):
|
|
153
|
+
r"""
|
|
154
|
+
Return the number of words in the shuffle product
|
|
155
|
+
of ``w1`` and ``w2``.
|
|
156
|
+
|
|
157
|
+
This is understood as a multiset cardinality, not as a
|
|
158
|
+
set cardinality; it does not count the distinct words only.
|
|
159
|
+
|
|
160
|
+
It is given by `\binom{l_1+l_2}{l_1}`, where `l_1` is the
|
|
161
|
+
length of ``w1`` and where `l_2` is the length of ``w2``.
|
|
162
|
+
|
|
163
|
+
EXAMPLES::
|
|
164
|
+
|
|
165
|
+
sage: from sage.combinat.words.shuffle_product import ShuffleProduct_w1w2
|
|
166
|
+
sage: w, u = map(Words("abcd"), ["ab", "cd"])
|
|
167
|
+
sage: S = ShuffleProduct_w1w2(w,u)
|
|
168
|
+
sage: S.cardinality()
|
|
169
|
+
6
|
|
170
|
+
|
|
171
|
+
sage: w, u = map(Words("ab"), ["ab", "ab"])
|
|
172
|
+
sage: S = ShuffleProduct_w1w2(w,u)
|
|
173
|
+
sage: S.cardinality()
|
|
174
|
+
6
|
|
175
|
+
"""
|
|
176
|
+
len_w1 = self._w1.length()
|
|
177
|
+
len_w2 = self._w2.length()
|
|
178
|
+
return Integer(len_w1 + len_w2).binomial(len_w1)
|
|
179
|
+
|
|
180
|
+
def __iter__(self):
|
|
181
|
+
"""
|
|
182
|
+
Return an iterator for the words in the
|
|
183
|
+
shuffle product of ``w1`` and ``w2``.
|
|
184
|
+
|
|
185
|
+
EXAMPLES::
|
|
186
|
+
|
|
187
|
+
sage: from sage.combinat.words.shuffle_product import ShuffleProduct_w1w2
|
|
188
|
+
sage: w, u = map(Words("abcd"), ["ab", "cd"])
|
|
189
|
+
sage: S = ShuffleProduct_w1w2(w,u)
|
|
190
|
+
sage: S.list() #indirect test
|
|
191
|
+
[word: abcd, word: acbd, word: acdb, word: cabd,
|
|
192
|
+
word: cadb, word: cdab]
|
|
193
|
+
|
|
194
|
+
sage: I = Composition([1, 1])
|
|
195
|
+
sage: J = Composition([2])
|
|
196
|
+
sage: S = ShuffleProduct_w1w2(I, J)
|
|
197
|
+
sage: next(iter(S))
|
|
198
|
+
[1, 1, 2]
|
|
199
|
+
|
|
200
|
+
TESTS:
|
|
201
|
+
|
|
202
|
+
Sage is no longer confused by a too-restrictive parent of `I`
|
|
203
|
+
when shuffling compositions `I` and `J` (cf. :issue:`15131`)::
|
|
204
|
+
|
|
205
|
+
sage: I = Compositions(2)([1, 1])
|
|
206
|
+
sage: J = Composition([2])
|
|
207
|
+
sage: S = ShuffleProduct_w1w2(I, J)
|
|
208
|
+
sage: S.list()
|
|
209
|
+
[[1, 1, 2], [1, 2, 1], [2, 1, 1]]
|
|
210
|
+
"""
|
|
211
|
+
n1 = len(self._w1)
|
|
212
|
+
n2 = len(self._w2)
|
|
213
|
+
w1_parent = self._w1.parent()
|
|
214
|
+
use_w1_parent = True
|
|
215
|
+
try:
|
|
216
|
+
w1_parent(list(self._w1) + list(self._w2), check=self._check)
|
|
217
|
+
except (ValueError, TypeError):
|
|
218
|
+
use_w1_parent = False
|
|
219
|
+
if isinstance(self._w1, Composition):
|
|
220
|
+
large_parent = Composition
|
|
221
|
+
elif isinstance(self._w1, Word_class):
|
|
222
|
+
large_parent = Word
|
|
223
|
+
for iv in IntegerVectors(n1, n1 + n2, max_part=1):
|
|
224
|
+
it1 = iter(self._w1)
|
|
225
|
+
it2 = iter(self._w2)
|
|
226
|
+
w = [next(it1) if v else next(it2) for v in iv]
|
|
227
|
+
if use_w1_parent:
|
|
228
|
+
yield w1_parent(w, check=self._check)
|
|
229
|
+
else:
|
|
230
|
+
yield large_parent(w)
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
class ShuffleProduct_shifted(ShuffleProduct_w1w2):
|
|
234
|
+
def __init__(self, w1, w2, check=True):
|
|
235
|
+
"""
|
|
236
|
+
Shifted shuffle product of ``w1`` with ``w2``.
|
|
237
|
+
|
|
238
|
+
This is the shuffle product of ``w1`` with the word
|
|
239
|
+
obtained by adding the length of ``w1`` to every letter
|
|
240
|
+
of ``w2``.
|
|
241
|
+
|
|
242
|
+
Note that this class is meant to be used for words; it
|
|
243
|
+
misbehaves when ``w1`` is a permutation or composition.
|
|
244
|
+
|
|
245
|
+
INPUT:
|
|
246
|
+
|
|
247
|
+
- ``check`` -- boolean (default: ``True``); whether to check that
|
|
248
|
+
all words in the shuffle product belong to the correct parent
|
|
249
|
+
|
|
250
|
+
EXAMPLES::
|
|
251
|
+
|
|
252
|
+
sage: from sage.combinat.words.shuffle_product import ShuffleProduct_shifted
|
|
253
|
+
sage: w, u = Word([1,2]), Word([3,4])
|
|
254
|
+
sage: S = ShuffleProduct_shifted(w,u)
|
|
255
|
+
sage: S == loads(dumps(S))
|
|
256
|
+
True
|
|
257
|
+
|
|
258
|
+
TESTS::
|
|
259
|
+
|
|
260
|
+
sage: w, u = Word([1,2]), Word([3,4])
|
|
261
|
+
sage: S = ShuffleProduct_shifted(w, u, check=False)
|
|
262
|
+
sage: len(list(S))
|
|
263
|
+
6
|
|
264
|
+
"""
|
|
265
|
+
shift = w1.length()
|
|
266
|
+
shifted_w2 = w1.parent()([x + shift for x in w2], check=check)
|
|
267
|
+
ShuffleProduct_w1w2.__init__(self, w1, shifted_w2, check)
|
|
268
|
+
|
|
269
|
+
def __repr__(self):
|
|
270
|
+
"""
|
|
271
|
+
EXAMPLES::
|
|
272
|
+
|
|
273
|
+
sage: from sage.combinat.words.shuffle_product import ShuffleProduct_shifted
|
|
274
|
+
sage: w, u = Word([0,1]), Word([2,3])
|
|
275
|
+
sage: ShuffleProduct_shifted(w,u).__repr__()
|
|
276
|
+
'Shuffle product of word: 01 and word: 45'
|
|
277
|
+
"""
|
|
278
|
+
return "Shuffle product of %s and %s" % (repr(self._w1), repr(self._w2))
|