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,337 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
r"""
|
|
3
|
+
Vector partitions
|
|
4
|
+
|
|
5
|
+
AUTHORS:
|
|
6
|
+
|
|
7
|
+
- Amritanshu Prasad (2013): initial version
|
|
8
|
+
- Shriya M (2022): added new parameters such as ``distinct``, ``parts`` and
|
|
9
|
+
``is_repeatable``
|
|
10
|
+
"""
|
|
11
|
+
# ****************************************************************************
|
|
12
|
+
# Copyright (C) 2013 Amritanshu Prasad <amri@imsc.res.in>
|
|
13
|
+
# 2022 Shriya M <25shriya@gmail.com>
|
|
14
|
+
#
|
|
15
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
16
|
+
#
|
|
17
|
+
# This code is distributed in the hope that it will be useful, but
|
|
18
|
+
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
19
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
20
|
+
# General Public License for more details.
|
|
21
|
+
#
|
|
22
|
+
# The full text of the GPL is available at:
|
|
23
|
+
#
|
|
24
|
+
# http://www.gnu.org/licenses/
|
|
25
|
+
# ****************************************************************************
|
|
26
|
+
|
|
27
|
+
from sage.structure.parent import Parent
|
|
28
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
29
|
+
from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets
|
|
30
|
+
from sage.combinat.combinat import CombinatorialElement
|
|
31
|
+
from sage.combinat.partition import Partition
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def find_min(vect):
|
|
35
|
+
"""
|
|
36
|
+
Return a string of ``0``'s with one ``1`` at the location where the list
|
|
37
|
+
``vect`` has its last entry which is not equal to ``0``.
|
|
38
|
+
|
|
39
|
+
INPUT:
|
|
40
|
+
|
|
41
|
+
- ``vec`` -- list of integers
|
|
42
|
+
|
|
43
|
+
OUTPUT:
|
|
44
|
+
|
|
45
|
+
A list of the same length with ``0``'s everywhere, except for a ``1``
|
|
46
|
+
at the last position where ``vec`` has an entry not equal to ``0``.
|
|
47
|
+
|
|
48
|
+
EXAMPLES::
|
|
49
|
+
|
|
50
|
+
sage: from sage.combinat.vector_partition import find_min
|
|
51
|
+
sage: find_min([2, 1])
|
|
52
|
+
[0, 1]
|
|
53
|
+
sage: find_min([2, 1, 0])
|
|
54
|
+
[0, 1, 0]
|
|
55
|
+
"""
|
|
56
|
+
i = len(vect)
|
|
57
|
+
while vect[i-1] == 0 and i > 0:
|
|
58
|
+
i = i-1
|
|
59
|
+
min = [0]*len(vect)
|
|
60
|
+
if i > 0:
|
|
61
|
+
min[i-1] = 1
|
|
62
|
+
return min
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def IntegerVectorsIterator(vect, min=None):
|
|
66
|
+
"""
|
|
67
|
+
Return an iterator over the list of integer vectors which are componentwise
|
|
68
|
+
less than or equal to ``vect``, and lexicographically greater than or equal
|
|
69
|
+
to ``min``.
|
|
70
|
+
|
|
71
|
+
INPUT:
|
|
72
|
+
|
|
73
|
+
- ``vect`` -- list of nonnegative integers
|
|
74
|
+
- ``min`` -- list of nonnegative integers dominated elementwise by ``vect``
|
|
75
|
+
|
|
76
|
+
OUTPUT:
|
|
77
|
+
|
|
78
|
+
A list in lexicographic order of all integer vectors (as lists) which are
|
|
79
|
+
dominated elementwise by ``vect`` and are greater than or equal to ``min`` in
|
|
80
|
+
lexicographic order.
|
|
81
|
+
|
|
82
|
+
EXAMPLES::
|
|
83
|
+
|
|
84
|
+
sage: from sage.combinat.vector_partition import IntegerVectorsIterator
|
|
85
|
+
sage: list(IntegerVectorsIterator([1, 1]))
|
|
86
|
+
[[0, 0], [0, 1], [1, 0], [1, 1]]
|
|
87
|
+
|
|
88
|
+
sage: list(IntegerVectorsIterator([1, 1], min = [1, 0]))
|
|
89
|
+
[[1, 0], [1, 1]]
|
|
90
|
+
"""
|
|
91
|
+
vect = list(vect)
|
|
92
|
+
if not vect:
|
|
93
|
+
yield []
|
|
94
|
+
else:
|
|
95
|
+
if min is None:
|
|
96
|
+
min = [0] * len(vect)
|
|
97
|
+
if vect < min:
|
|
98
|
+
return
|
|
99
|
+
else:
|
|
100
|
+
for vec in IntegerVectorsIterator(vect[1:], min=min[1:]):
|
|
101
|
+
yield [min[0]] + vec
|
|
102
|
+
for j in range(min[0] + 1, vect[0] + 1):
|
|
103
|
+
for vec in IntegerVectorsIterator(vect[1:]):
|
|
104
|
+
yield [j] + vec
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
class VectorPartition(CombinatorialElement):
|
|
108
|
+
r"""
|
|
109
|
+
A vector partition is a multiset of integer vectors.
|
|
110
|
+
"""
|
|
111
|
+
@staticmethod
|
|
112
|
+
def __classcall_private__(cls, vecpar):
|
|
113
|
+
"""
|
|
114
|
+
Create a vector partition.
|
|
115
|
+
|
|
116
|
+
EXAMPLES::
|
|
117
|
+
|
|
118
|
+
sage: VectorPartition([[3, 2, 1], [2, 2, 1]])
|
|
119
|
+
[[2, 2, 1], [3, 2, 1]]
|
|
120
|
+
|
|
121
|
+
The parent class is the class of vector partitions of the sum of the
|
|
122
|
+
vectors in ``vecpar``::
|
|
123
|
+
|
|
124
|
+
sage: V = VectorPartition([[3, 2, 1], [2, 2, 1]])
|
|
125
|
+
sage: V.parent()._vec
|
|
126
|
+
(5, 4, 2)
|
|
127
|
+
"""
|
|
128
|
+
vec = [sum([vec[i] for vec in vecpar]) for i in range(len(vecpar[0]))]
|
|
129
|
+
P = VectorPartitions(vec)
|
|
130
|
+
return P(vecpar)
|
|
131
|
+
|
|
132
|
+
def __init__(self, parent, vecpar):
|
|
133
|
+
"""
|
|
134
|
+
Initialize ``self``.
|
|
135
|
+
|
|
136
|
+
EXAMPLES::
|
|
137
|
+
|
|
138
|
+
sage: elt = VectorPartition([[3, 2, 1], [2, 2, 1]])
|
|
139
|
+
sage: TestSuite(elt).run()
|
|
140
|
+
"""
|
|
141
|
+
CombinatorialElement.__init__(self, parent, sorted(vecpar))
|
|
142
|
+
|
|
143
|
+
def sum(self):
|
|
144
|
+
"""
|
|
145
|
+
Return the sum vector as a list.
|
|
146
|
+
|
|
147
|
+
EXAMPLES::
|
|
148
|
+
|
|
149
|
+
sage: V = VectorPartition([[3, 2, 1], [2, 2, 1]])
|
|
150
|
+
sage: V.sum()
|
|
151
|
+
[5, 4, 2]
|
|
152
|
+
"""
|
|
153
|
+
return list(self.parent()._vec)
|
|
154
|
+
|
|
155
|
+
def partition_at_vertex(self, i):
|
|
156
|
+
"""
|
|
157
|
+
Return the partition obtained by sorting the ``i``-th elements of
|
|
158
|
+
the vectors in the vector partition.
|
|
159
|
+
|
|
160
|
+
EXAMPLES::
|
|
161
|
+
|
|
162
|
+
sage: V = VectorPartition([[1, 2, 1], [2, 4, 1]])
|
|
163
|
+
sage: V.partition_at_vertex(1)
|
|
164
|
+
[4, 2]
|
|
165
|
+
"""
|
|
166
|
+
return Partition(sorted([vec[i] for vec in self._list], reverse=True))
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
class VectorPartitions(UniqueRepresentation, Parent):
|
|
170
|
+
r"""
|
|
171
|
+
Class of all vector partitions of ``vec`` with all parts greater than
|
|
172
|
+
or equal to ``min`` in lexicographic order, with parts from ``parts``.
|
|
173
|
+
|
|
174
|
+
A vector partition of ``vec`` is a list of vectors with nonnegative
|
|
175
|
+
integer entries whose sum is ``vec``.
|
|
176
|
+
|
|
177
|
+
INPUT:
|
|
178
|
+
|
|
179
|
+
- ``vec`` -- integer vector
|
|
180
|
+
- ``min`` -- integer vector dominated elementwise by ``vec``
|
|
181
|
+
- ``parts`` -- finite list of possible parts
|
|
182
|
+
- ``distinct`` -- boolean, set to ``True`` if only vector partitions with
|
|
183
|
+
distinct parts are enumerated
|
|
184
|
+
- ``is_repeatable`` -- boolean function on ``parts`` which gives ``True``
|
|
185
|
+
in parts that can be repeated
|
|
186
|
+
|
|
187
|
+
EXAMPLES:
|
|
188
|
+
|
|
189
|
+
If ``min`` is not specified, then the class of all vector partitions of
|
|
190
|
+
``vec`` is created::
|
|
191
|
+
|
|
192
|
+
sage: VP = VectorPartitions([2, 2])
|
|
193
|
+
sage: for vecpar in VP:
|
|
194
|
+
....: print(vecpar)
|
|
195
|
+
[[0, 1], [0, 1], [1, 0], [1, 0]]
|
|
196
|
+
[[0, 1], [0, 1], [2, 0]]
|
|
197
|
+
[[0, 1], [1, 0], [1, 1]]
|
|
198
|
+
[[0, 1], [2, 1]]
|
|
199
|
+
[[0, 2], [1, 0], [1, 0]]
|
|
200
|
+
[[0, 2], [2, 0]]
|
|
201
|
+
[[1, 0], [1, 2]]
|
|
202
|
+
[[1, 1], [1, 1]]
|
|
203
|
+
[[2, 2]]
|
|
204
|
+
|
|
205
|
+
If ``distinct`` is set to be True, then distinct part partitions are created::
|
|
206
|
+
|
|
207
|
+
sage: VP = VectorPartitions([2,2], distinct = True)
|
|
208
|
+
sage: list(VP)
|
|
209
|
+
[[[0, 1], [1, 0], [1, 1]],
|
|
210
|
+
[[0, 1], [2, 1]],
|
|
211
|
+
[[0, 2], [2, 0]],
|
|
212
|
+
[[1, 0], [1, 2]],
|
|
213
|
+
[[2, 2]]]
|
|
214
|
+
|
|
215
|
+
If ``min`` is specified, then the class consists of only those vector
|
|
216
|
+
partitions whose parts are all greater than or equal to ``min`` in
|
|
217
|
+
lexicographic order::
|
|
218
|
+
|
|
219
|
+
sage: VP = VectorPartitions([2, 2], min = [1, 0])
|
|
220
|
+
sage: for vecpar in VP:
|
|
221
|
+
....: print(vecpar)
|
|
222
|
+
[[1, 0], [1, 2]]
|
|
223
|
+
[[1, 1], [1, 1]]
|
|
224
|
+
[[2, 2]]
|
|
225
|
+
sage: VP = VectorPartitions([2, 2], min = [1, 0], distinct = True)
|
|
226
|
+
sage: for vecpar in VP:
|
|
227
|
+
....: print(vecpar)
|
|
228
|
+
[[1, 0], [1, 2]]
|
|
229
|
+
[[2, 2]]
|
|
230
|
+
|
|
231
|
+
If ``parts`` is specified, then the class consists only of those vector partitions
|
|
232
|
+
whose parts are from ``parts``::
|
|
233
|
+
|
|
234
|
+
sage: Vec_Par = VectorPartitions([2,2], parts=[[0,1],[1,0],[1,1]])
|
|
235
|
+
sage: list(Vec_Par)
|
|
236
|
+
[[[0, 1], [0, 1], [1, 0], [1, 0]], [[0, 1], [1, 0], [1, 1]], [[1, 1], [1, 1]]]
|
|
237
|
+
|
|
238
|
+
If ``is_repeatable`` is specified, then the parts which satisfy the boolean function
|
|
239
|
+
``is_repeatable`` are allowed to be repeated::
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
sage: Vector_Partitions = VectorPartitions([2,2], parts=[[0,1],[1,0],[1,1]], is_repeatable=lambda vec: sum(vec)%2!=0)
|
|
243
|
+
sage: list(Vector_Partitions)
|
|
244
|
+
[[[0, 1], [0, 1], [1, 0], [1, 0]], [[0, 1], [1, 0], [1, 1]]]
|
|
245
|
+
"""
|
|
246
|
+
@staticmethod
|
|
247
|
+
def __classcall_private__(cls, vec, min=None, parts=None, distinct=False, is_repeatable=None):
|
|
248
|
+
r"""
|
|
249
|
+
Create the class of vector partitions of ``vec`` where all parts
|
|
250
|
+
are greater than or equal to the vector ``min``.
|
|
251
|
+
|
|
252
|
+
EXAMPLES::
|
|
253
|
+
|
|
254
|
+
sage: VP1 = VectorPartitions([2, 1])
|
|
255
|
+
sage: VP2 = VectorPartitions((2, 1), min = [0, 1])
|
|
256
|
+
sage: VP1 is VP2
|
|
257
|
+
True
|
|
258
|
+
"""
|
|
259
|
+
if min is None:
|
|
260
|
+
min = find_min(vec) # tuple([0 for v in vec[:-1]]+[1])
|
|
261
|
+
if parts is None:
|
|
262
|
+
parts = list(IntegerVectorsIterator(vec, min=min))
|
|
263
|
+
if [0]*len(vec) in parts:
|
|
264
|
+
parts.remove([0]*len(vec))
|
|
265
|
+
if min in parts:
|
|
266
|
+
min_index = parts.index(min)
|
|
267
|
+
parts = parts[min_index:]
|
|
268
|
+
parts = list(parts)
|
|
269
|
+
for part_index in range(len(parts)):
|
|
270
|
+
parts[part_index] = tuple(parts[part_index])
|
|
271
|
+
return super().__classcall__(cls, tuple(vec), tuple(min), tuple(parts), distinct, is_repeatable)
|
|
272
|
+
|
|
273
|
+
def __init__(self, vec, min=None, parts=None, distinct=False, is_repeatable=None):
|
|
274
|
+
r"""
|
|
275
|
+
Initialize ``self``.
|
|
276
|
+
|
|
277
|
+
TESTS::
|
|
278
|
+
|
|
279
|
+
sage: VP = VectorPartitions([2, 2])
|
|
280
|
+
sage: TestSuite(VP).run()
|
|
281
|
+
"""
|
|
282
|
+
Parent.__init__(self, category=FiniteEnumeratedSets())
|
|
283
|
+
self._vec = vec
|
|
284
|
+
self._min = min
|
|
285
|
+
self._parts = parts
|
|
286
|
+
self._distinct = distinct
|
|
287
|
+
self._is_repeatable = is_repeatable
|
|
288
|
+
|
|
289
|
+
def _element_constructor_(self, vecpar):
|
|
290
|
+
"""
|
|
291
|
+
Construct an element of ``self``.
|
|
292
|
+
|
|
293
|
+
EXAMPLES::
|
|
294
|
+
|
|
295
|
+
sage: VP = VectorPartitions([2, 2])
|
|
296
|
+
sage: elt = VP([[1, 0], [1, 2]]); elt
|
|
297
|
+
[[1, 0], [1, 2]]
|
|
298
|
+
sage: elt.parent() is VP
|
|
299
|
+
True
|
|
300
|
+
"""
|
|
301
|
+
return self.element_class(self, vecpar)
|
|
302
|
+
|
|
303
|
+
Element = VectorPartition
|
|
304
|
+
|
|
305
|
+
def __iter__(self):
|
|
306
|
+
r"""
|
|
307
|
+
Iterator for vector partitions.
|
|
308
|
+
|
|
309
|
+
EXAMPLES::
|
|
310
|
+
|
|
311
|
+
sage: VP = VectorPartitions([2, 2])
|
|
312
|
+
sage: VP.cardinality()
|
|
313
|
+
9
|
|
314
|
+
"""
|
|
315
|
+
if all(coord == 0 for coord in self._vec):
|
|
316
|
+
yield self.element_class(self, []) # the zero vector has only the empty partition
|
|
317
|
+
else:
|
|
318
|
+
for part in self._parts: # choose the first part
|
|
319
|
+
if tuple(part) == self._vec:
|
|
320
|
+
yield self.element_class(self, [list(part)])
|
|
321
|
+
elif any(part[i] > self._vec[i] for i in range(len(self._vec))):
|
|
322
|
+
pass
|
|
323
|
+
else:# recursively find all possibilities for the rest of the vector partition
|
|
324
|
+
new_vec = tuple(self._vec[i]-part[i] for i in range(len(self._vec)))
|
|
325
|
+
i = self._parts.index(part)
|
|
326
|
+
if self._is_repeatable is None:
|
|
327
|
+
if self._distinct:
|
|
328
|
+
new_parts = self._parts[i+1:]
|
|
329
|
+
else:
|
|
330
|
+
new_parts = self._parts[i:]
|
|
331
|
+
else:
|
|
332
|
+
if self._is_repeatable(part):
|
|
333
|
+
new_parts = self._parts[i:]
|
|
334
|
+
else:
|
|
335
|
+
new_parts = self._parts[i+1:]
|
|
336
|
+
for vecpar in VectorPartitions(new_vec, min=self._min, parts=new_parts, distinct=self._distinct, is_repeatable=self._is_repeatable):
|
|
337
|
+
yield self.element_class(self, [list(part)] + list(vecpar))
|