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,329 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.modules
|
|
3
|
+
r"""
|
|
4
|
+
Counting, generating, and manipulating nonnegative integer matrices
|
|
5
|
+
|
|
6
|
+
Counting, generating, and manipulating nonnegative integer matrices with
|
|
7
|
+
prescribed row sums and column sums.
|
|
8
|
+
|
|
9
|
+
AUTHORS:
|
|
10
|
+
|
|
11
|
+
- Franco Saliola
|
|
12
|
+
"""
|
|
13
|
+
#*****************************************************************************
|
|
14
|
+
# Copyright (C) 2012 Franco Saliola <saliola@gmail.com>
|
|
15
|
+
#
|
|
16
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
17
|
+
# http://www.gnu.org/licenses/
|
|
18
|
+
#*****************************************************************************
|
|
19
|
+
|
|
20
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
21
|
+
from sage.structure.parent import Parent
|
|
22
|
+
from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets
|
|
23
|
+
from sage.combinat.integer_lists import IntegerListsLex
|
|
24
|
+
from sage.matrix.constructor import matrix
|
|
25
|
+
from sage.rings.integer_ring import ZZ
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class IntegerMatrices(UniqueRepresentation, Parent):
|
|
29
|
+
r"""
|
|
30
|
+
The class of nonnegative integer matrices with
|
|
31
|
+
prescribed row sums and column sums.
|
|
32
|
+
|
|
33
|
+
An *integer matrix* `m` with column sums `c := (c_1,...,c_k)` and row
|
|
34
|
+
sums `l := (l_1,...,l_n)` where `c_1+...+c_k` is equal to `l_1+...+l_n`,
|
|
35
|
+
is a `n \times k` matrix `m = (m_{i,j})` such that
|
|
36
|
+
`m_{1,j}+\dots+m_{n,j} = c_j`, for all `j` and
|
|
37
|
+
`m_{i,1}+\dots+m_{i,k} = l_i`, for all `i`.
|
|
38
|
+
|
|
39
|
+
EXAMPLES:
|
|
40
|
+
|
|
41
|
+
There are `6` integer matrices with row sums `[3,2,2]` and column sums
|
|
42
|
+
`[2,5]`::
|
|
43
|
+
|
|
44
|
+
sage: from sage.combinat.integer_matrices import IntegerMatrices
|
|
45
|
+
sage: IM = IntegerMatrices([3,2,2], [2,5]); IM
|
|
46
|
+
Non-negative integer matrices with row sums [3, 2, 2] and column sums [2, 5]
|
|
47
|
+
sage: IM.list()
|
|
48
|
+
[
|
|
49
|
+
[2 1] [1 2] [1 2] [0 3] [0 3] [0 3]
|
|
50
|
+
[0 2] [1 1] [0 2] [2 0] [1 1] [0 2]
|
|
51
|
+
[0 2], [0 2], [1 1], [0 2], [1 1], [2 0]
|
|
52
|
+
]
|
|
53
|
+
sage: IM.cardinality()
|
|
54
|
+
6
|
|
55
|
+
"""
|
|
56
|
+
@staticmethod
|
|
57
|
+
def __classcall__(cls, row_sums, column_sums):
|
|
58
|
+
r"""
|
|
59
|
+
Normalize the inputs so that they are hashable.
|
|
60
|
+
|
|
61
|
+
INPUT:
|
|
62
|
+
|
|
63
|
+
- ``row_sums`` -- list, tuple, or anything defining a Composition
|
|
64
|
+
- ``column_sums`` -- list, tuple, or anything defining a Composition
|
|
65
|
+
|
|
66
|
+
EXAMPLES::
|
|
67
|
+
|
|
68
|
+
sage: from sage.combinat.integer_matrices import IntegerMatrices
|
|
69
|
+
sage: IM = IntegerMatrices([4,4,5], [3,7,1,2]); IM
|
|
70
|
+
Non-negative integer matrices with row sums [4, 4, 5] and column sums [3, 7, 1, 2]
|
|
71
|
+
sage: IM = IntegerMatrices((4,4,5), (3,7,1,2)); IM
|
|
72
|
+
Non-negative integer matrices with row sums [4, 4, 5] and column sums [3, 7, 1, 2]
|
|
73
|
+
sage: IM = IntegerMatrices(Composition([4,4,5]), Composition([3,7,1,2])); IM
|
|
74
|
+
Non-negative integer matrices with row sums [4, 4, 5] and column sums [3, 7, 1, 2]
|
|
75
|
+
"""
|
|
76
|
+
from sage.combinat.composition import Composition
|
|
77
|
+
row_sums = Composition(row_sums)
|
|
78
|
+
column_sums = Composition(column_sums)
|
|
79
|
+
return super().__classcall__(cls, row_sums, column_sums)
|
|
80
|
+
|
|
81
|
+
def __init__(self, row_sums, column_sums):
|
|
82
|
+
r"""
|
|
83
|
+
Constructor of this class; for documentation, see
|
|
84
|
+
:class:`IntegerMatrices`.
|
|
85
|
+
|
|
86
|
+
INPUT:
|
|
87
|
+
|
|
88
|
+
- ``row_sums`` -- Composition
|
|
89
|
+
- ``column_sums`` -- Composition
|
|
90
|
+
|
|
91
|
+
TESTS::
|
|
92
|
+
|
|
93
|
+
sage: from sage.combinat.integer_matrices import IntegerMatrices
|
|
94
|
+
sage: IM = IntegerMatrices([3,2,2], [2,5]); IM
|
|
95
|
+
Non-negative integer matrices with row sums [3, 2, 2] and column sums [2, 5]
|
|
96
|
+
sage: TestSuite(IM).run()
|
|
97
|
+
"""
|
|
98
|
+
self._row_sums = row_sums
|
|
99
|
+
self._col_sums = column_sums
|
|
100
|
+
Parent.__init__(self, category=FiniteEnumeratedSets())
|
|
101
|
+
|
|
102
|
+
def _repr_(self):
|
|
103
|
+
r"""
|
|
104
|
+
TESTS::
|
|
105
|
+
|
|
106
|
+
sage: from sage.combinat.integer_matrices import IntegerMatrices
|
|
107
|
+
sage: IntegerMatrices([3,2,2], [2,5])._repr_()
|
|
108
|
+
'Non-negative integer matrices with row sums [3, 2, 2] and column sums [2, 5]'
|
|
109
|
+
"""
|
|
110
|
+
return "Non-negative integer matrices with row sums %s and column sums %s" % \
|
|
111
|
+
(self._row_sums, self._col_sums)
|
|
112
|
+
|
|
113
|
+
def __iter__(self):
|
|
114
|
+
r"""
|
|
115
|
+
An iterator for the integer matrices with the prescribed row sums and
|
|
116
|
+
columns sums.
|
|
117
|
+
|
|
118
|
+
EXAMPLES::
|
|
119
|
+
|
|
120
|
+
sage: from sage.combinat.integer_matrices import IntegerMatrices
|
|
121
|
+
sage: IntegerMatrices([2,2], [1,2,1]).list()
|
|
122
|
+
[
|
|
123
|
+
[1 1 0] [1 0 1] [0 2 0] [0 1 1]
|
|
124
|
+
[0 1 1], [0 2 0], [1 0 1], [1 1 0]
|
|
125
|
+
]
|
|
126
|
+
sage: IntegerMatrices([0,0],[0,0,0]).list()
|
|
127
|
+
[
|
|
128
|
+
[0 0 0]
|
|
129
|
+
[0 0 0]
|
|
130
|
+
]
|
|
131
|
+
sage: IntegerMatrices([1,1],[1,1]).list()
|
|
132
|
+
[
|
|
133
|
+
[1 0] [0 1]
|
|
134
|
+
[0 1], [1 0]
|
|
135
|
+
]
|
|
136
|
+
"""
|
|
137
|
+
for x in integer_matrices_generator(self._row_sums, self._col_sums):
|
|
138
|
+
yield matrix(ZZ, x)
|
|
139
|
+
|
|
140
|
+
def __contains__(self, x):
|
|
141
|
+
r"""
|
|
142
|
+
Test if ``x`` is an element of ``self``.
|
|
143
|
+
|
|
144
|
+
INPUT:
|
|
145
|
+
|
|
146
|
+
- ``x`` -- matrix
|
|
147
|
+
|
|
148
|
+
EXAMPLES::
|
|
149
|
+
|
|
150
|
+
sage: from sage.combinat.integer_matrices import IntegerMatrices
|
|
151
|
+
sage: IM = IntegerMatrices([4], [1,2,1])
|
|
152
|
+
sage: matrix([[1, 2, 1]]) in IM
|
|
153
|
+
True
|
|
154
|
+
sage: matrix(QQ, [[1, 2, 1]]) in IM
|
|
155
|
+
True
|
|
156
|
+
sage: matrix([[2, 1, 1]]) in IM
|
|
157
|
+
False
|
|
158
|
+
|
|
159
|
+
TESTS::
|
|
160
|
+
|
|
161
|
+
sage: from sage.combinat.integer_matrices import IntegerMatrices
|
|
162
|
+
sage: IM = IntegerMatrices([4], [1,2,1])
|
|
163
|
+
sage: [1, 2, 1] in IM
|
|
164
|
+
False
|
|
165
|
+
sage: matrix([[-1, 3, 1]]) in IM
|
|
166
|
+
False
|
|
167
|
+
"""
|
|
168
|
+
from sage.structure.element import Matrix
|
|
169
|
+
if not isinstance(x, Matrix):
|
|
170
|
+
return False
|
|
171
|
+
row_sums = [ZZ.zero()] * x.nrows()
|
|
172
|
+
col_sums = [ZZ.zero()] * x.ncols()
|
|
173
|
+
for i in range(x.nrows()):
|
|
174
|
+
for j in range(x.ncols()):
|
|
175
|
+
x_ij = x[i, j]
|
|
176
|
+
if x_ij not in ZZ or x_ij < 0:
|
|
177
|
+
return False
|
|
178
|
+
row_sums[i] += x_ij
|
|
179
|
+
col_sums[j] += x_ij
|
|
180
|
+
if row_sums[i] != self._row_sums[i]:
|
|
181
|
+
return False
|
|
182
|
+
if col_sums != self._col_sums:
|
|
183
|
+
return False
|
|
184
|
+
return True
|
|
185
|
+
|
|
186
|
+
def cardinality(self):
|
|
187
|
+
r"""
|
|
188
|
+
The number of integer matrices with the prescribed row sums and columns
|
|
189
|
+
sums.
|
|
190
|
+
|
|
191
|
+
EXAMPLES::
|
|
192
|
+
|
|
193
|
+
sage: from sage.combinat.integer_matrices import IntegerMatrices
|
|
194
|
+
sage: IntegerMatrices([2,5], [3,2,2]).cardinality()
|
|
195
|
+
6
|
|
196
|
+
sage: IntegerMatrices([1,1,1,1,1], [1,1,1,1,1]).cardinality()
|
|
197
|
+
120
|
|
198
|
+
sage: IntegerMatrices([2,2,2,2], [2,2,2,2]).cardinality()
|
|
199
|
+
282
|
|
200
|
+
sage: IntegerMatrices([4], [3]).cardinality()
|
|
201
|
+
0
|
|
202
|
+
sage: len(IntegerMatrices([0,0], [0]).list())
|
|
203
|
+
1
|
|
204
|
+
|
|
205
|
+
This method computes the cardinality using symmetric functions. Below
|
|
206
|
+
are the same examples, but computed by generating the actual matrices::
|
|
207
|
+
|
|
208
|
+
sage: from sage.combinat.integer_matrices import IntegerMatrices
|
|
209
|
+
sage: len(IntegerMatrices([2,5], [3,2,2]).list())
|
|
210
|
+
6
|
|
211
|
+
sage: len(IntegerMatrices([1,1,1,1,1], [1,1,1,1,1]).list())
|
|
212
|
+
120
|
|
213
|
+
sage: len(IntegerMatrices([2,2,2,2], [2,2,2,2]).list())
|
|
214
|
+
282
|
|
215
|
+
sage: len(IntegerMatrices([4], [3]).list())
|
|
216
|
+
0
|
|
217
|
+
sage: len(IntegerMatrices([0], [0]).list())
|
|
218
|
+
1
|
|
219
|
+
"""
|
|
220
|
+
from sage.combinat.sf.sf import SymmetricFunctions
|
|
221
|
+
from sage.combinat.partition import Partition
|
|
222
|
+
h = SymmetricFunctions(ZZ).homogeneous()
|
|
223
|
+
row_partition = Partition(sorted(self._row_sums, reverse=True))
|
|
224
|
+
col_partition = Partition(sorted(self._col_sums, reverse=True))
|
|
225
|
+
return h[row_partition].scalar(h[col_partition])
|
|
226
|
+
|
|
227
|
+
def row_sums(self):
|
|
228
|
+
r"""
|
|
229
|
+
The row sums of the integer matrices in ``self``.
|
|
230
|
+
|
|
231
|
+
OUTPUT: Composition
|
|
232
|
+
|
|
233
|
+
EXAMPLES::
|
|
234
|
+
|
|
235
|
+
sage: from sage.combinat.integer_matrices import IntegerMatrices
|
|
236
|
+
sage: IM = IntegerMatrices([3,2,2], [2,5])
|
|
237
|
+
sage: IM.row_sums()
|
|
238
|
+
[3, 2, 2]
|
|
239
|
+
"""
|
|
240
|
+
return self._row_sums
|
|
241
|
+
|
|
242
|
+
def column_sums(self):
|
|
243
|
+
r"""
|
|
244
|
+
The column sums of the integer matrices in ``self``.
|
|
245
|
+
|
|
246
|
+
OUTPUT: Composition
|
|
247
|
+
|
|
248
|
+
EXAMPLES::
|
|
249
|
+
|
|
250
|
+
sage: from sage.combinat.integer_matrices import IntegerMatrices
|
|
251
|
+
sage: IM = IntegerMatrices([3,2,2], [2,5])
|
|
252
|
+
sage: IM.column_sums()
|
|
253
|
+
[2, 5]
|
|
254
|
+
"""
|
|
255
|
+
return self._col_sums
|
|
256
|
+
|
|
257
|
+
def to_composition(self, x):
|
|
258
|
+
r"""
|
|
259
|
+
The composition corresponding to the integer matrix.
|
|
260
|
+
|
|
261
|
+
This is the composition obtained by reading the entries of the matrix
|
|
262
|
+
from left to right along each row, and reading the rows from top to
|
|
263
|
+
bottom, ignore zeros.
|
|
264
|
+
|
|
265
|
+
INPUT:
|
|
266
|
+
|
|
267
|
+
- ``x`` -- matrix
|
|
268
|
+
|
|
269
|
+
EXAMPLES::
|
|
270
|
+
|
|
271
|
+
sage: from sage.combinat.integer_matrices import IntegerMatrices
|
|
272
|
+
sage: IM = IntegerMatrices([3,2,2], [2,5]); IM
|
|
273
|
+
Non-negative integer matrices with row sums [3, 2, 2] and column sums [2, 5]
|
|
274
|
+
sage: IM.list()
|
|
275
|
+
[
|
|
276
|
+
[2 1] [1 2] [1 2] [0 3] [0 3] [0 3]
|
|
277
|
+
[0 2] [1 1] [0 2] [2 0] [1 1] [0 2]
|
|
278
|
+
[0 2], [0 2], [1 1], [0 2], [1 1], [2 0]
|
|
279
|
+
]
|
|
280
|
+
sage: for m in IM: print(IM.to_composition(m))
|
|
281
|
+
[2, 1, 2, 2]
|
|
282
|
+
[1, 2, 1, 1, 2]
|
|
283
|
+
[1, 2, 2, 1, 1]
|
|
284
|
+
[3, 2, 2]
|
|
285
|
+
[3, 1, 1, 1, 1]
|
|
286
|
+
[3, 2, 2]
|
|
287
|
+
"""
|
|
288
|
+
from sage.combinat.composition import Composition
|
|
289
|
+
return Composition([entry for row in x for entry in row if entry != 0])
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
def integer_matrices_generator(row_sums, column_sums):
|
|
293
|
+
r"""
|
|
294
|
+
Recursively generate the integer matrices with the prescribed row sums and
|
|
295
|
+
column sums.
|
|
296
|
+
|
|
297
|
+
INPUT:
|
|
298
|
+
|
|
299
|
+
- ``row_sums`` -- list or tuple
|
|
300
|
+
- ``column_sums`` -- list or tuple
|
|
301
|
+
|
|
302
|
+
OUTPUT: an iterator producing a list of lists
|
|
303
|
+
|
|
304
|
+
EXAMPLES::
|
|
305
|
+
|
|
306
|
+
sage: from sage.combinat.integer_matrices import integer_matrices_generator
|
|
307
|
+
sage: iter = integer_matrices_generator([3,2,2], [2,5]); iter
|
|
308
|
+
<generator object ...integer_matrices_generator at ...>
|
|
309
|
+
sage: for m in iter: print(m)
|
|
310
|
+
[[2, 1], [0, 2], [0, 2]]
|
|
311
|
+
[[1, 2], [1, 1], [0, 2]]
|
|
312
|
+
[[1, 2], [0, 2], [1, 1]]
|
|
313
|
+
[[0, 3], [2, 0], [0, 2]]
|
|
314
|
+
[[0, 3], [1, 1], [1, 1]]
|
|
315
|
+
[[0, 3], [0, 2], [2, 0]]
|
|
316
|
+
"""
|
|
317
|
+
column_sums = list(column_sums)
|
|
318
|
+
if sum(row_sums) != sum(column_sums):
|
|
319
|
+
return
|
|
320
|
+
if not row_sums:
|
|
321
|
+
yield []
|
|
322
|
+
elif len(row_sums) == 1:
|
|
323
|
+
yield [column_sums]
|
|
324
|
+
else:
|
|
325
|
+
I = IntegerListsLex(n=row_sums[0], length=len(column_sums), ceiling=column_sums)
|
|
326
|
+
for comp in I.backend._iter():
|
|
327
|
+
t = [column_sums[i]-ci for (i, ci) in enumerate(comp)]
|
|
328
|
+
for mat in integer_matrices_generator(row_sums[1:], t):
|
|
329
|
+
yield [list(comp)] + mat
|