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,326 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.graphs sage.modules
|
|
3
|
+
r"""
|
|
4
|
+
Cluster complex (or generalized dual associahedron)
|
|
5
|
+
|
|
6
|
+
EXAMPLES:
|
|
7
|
+
|
|
8
|
+
A first example of a cluster complex::
|
|
9
|
+
|
|
10
|
+
sage: C = ClusterComplex(['A', 2]); C
|
|
11
|
+
Cluster complex of type ['A', 2] with 5 vertices and 5 facets
|
|
12
|
+
|
|
13
|
+
Its vertices, facets, and minimal non-faces::
|
|
14
|
+
|
|
15
|
+
sage: C.vertices()
|
|
16
|
+
(0, 1, 2, 3, 4)
|
|
17
|
+
|
|
18
|
+
sage: C.facets()
|
|
19
|
+
[(0, 1), (0, 4), (1, 2), (2, 3), (3, 4)]
|
|
20
|
+
|
|
21
|
+
sage: for F in C.facets(): F.cluster()
|
|
22
|
+
[(-1, 0), (0, -1)]
|
|
23
|
+
[(-1, 0), (0, 1)]
|
|
24
|
+
[(0, -1), (1, 0)]
|
|
25
|
+
[(1, 0), (1, 1)]
|
|
26
|
+
[(1, 1), (0, 1)]
|
|
27
|
+
|
|
28
|
+
sage: C.minimal_nonfaces()
|
|
29
|
+
[[0, 2], [0, 3], [1, 3], [1, 4], [2, 4]]
|
|
30
|
+
|
|
31
|
+
We can do everything we can do on simplicial complexes,
|
|
32
|
+
e.g. computing its homology::
|
|
33
|
+
|
|
34
|
+
sage: C.homology()
|
|
35
|
+
{0: 0, 1: Z}
|
|
36
|
+
|
|
37
|
+
AUTHORS:
|
|
38
|
+
|
|
39
|
+
- Christian Stump (2011) Initial version
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
# ****************************************************************************
|
|
43
|
+
# Copyright (C) 2011 Christian Stump <christian.stump@gmail.com>
|
|
44
|
+
#
|
|
45
|
+
# This program is free software: you can redistribute it and/or modify
|
|
46
|
+
# it under the terms of the GNU General Public License as published by
|
|
47
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
48
|
+
# (at your option) any later version.
|
|
49
|
+
# https://www.gnu.org/licenses/
|
|
50
|
+
# ****************************************************************************
|
|
51
|
+
|
|
52
|
+
from sage.categories.coxeter_groups import CoxeterGroups
|
|
53
|
+
from sage.combinat.subword_complex import SubwordComplex, SubwordComplexFacet
|
|
54
|
+
from sage.misc.lazy_import import lazy_import
|
|
55
|
+
from sage.rings.semirings.non_negative_integer_semiring import NN
|
|
56
|
+
|
|
57
|
+
lazy_import('sage.combinat.root_system.coxeter_group', 'CoxeterGroup')
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
class ClusterComplexFacet(SubwordComplexFacet):
|
|
61
|
+
r"""
|
|
62
|
+
A cluster (i.e., a facet) of a cluster complex.
|
|
63
|
+
"""
|
|
64
|
+
|
|
65
|
+
def cluster(self):
|
|
66
|
+
"""
|
|
67
|
+
Return this cluster as a set of almost positive roots.
|
|
68
|
+
|
|
69
|
+
EXAMPLES::
|
|
70
|
+
|
|
71
|
+
sage: C = ClusterComplex(['A', 2])
|
|
72
|
+
sage: F = C((0, 1))
|
|
73
|
+
sage: F.cluster()
|
|
74
|
+
[(-1, 0), (0, -1)]
|
|
75
|
+
"""
|
|
76
|
+
if self.parent().k() != 1:
|
|
77
|
+
raise NotImplementedError("not working for multi-cluster complexes")
|
|
78
|
+
F = self.parent().greedy_facet(side='positive')
|
|
79
|
+
R = F.extended_root_configuration()
|
|
80
|
+
N = len(list(F))
|
|
81
|
+
return [-R[i] if i < N else R[i] for i in self]
|
|
82
|
+
|
|
83
|
+
def upper_cluster(self):
|
|
84
|
+
"""
|
|
85
|
+
Return the part of the cluster that contains positive roots.
|
|
86
|
+
|
|
87
|
+
EXAMPLES::
|
|
88
|
+
|
|
89
|
+
sage: C = ClusterComplex(['A', 2])
|
|
90
|
+
sage: F = C((0, 1))
|
|
91
|
+
sage: F.upper_cluster()
|
|
92
|
+
[]
|
|
93
|
+
"""
|
|
94
|
+
return [beta for beta in self.cluster() if sum(beta) > 0]
|
|
95
|
+
|
|
96
|
+
def product_of_upper_cluster(self):
|
|
97
|
+
"""
|
|
98
|
+
Return the product of the upper cluster in reversed order.
|
|
99
|
+
|
|
100
|
+
EXAMPLES::
|
|
101
|
+
|
|
102
|
+
sage: C = ClusterComplex(['A', 2])
|
|
103
|
+
sage: for F in C: F.product_of_upper_cluster().reduced_word()
|
|
104
|
+
[]
|
|
105
|
+
[2]
|
|
106
|
+
[1]
|
|
107
|
+
[1, 2]
|
|
108
|
+
[1, 2]
|
|
109
|
+
"""
|
|
110
|
+
W = self.parent().group()
|
|
111
|
+
return W.prod(W.reflections()[beta]
|
|
112
|
+
for beta in reversed(self.upper_cluster()))
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
class ClusterComplex(SubwordComplex):
|
|
116
|
+
r"""
|
|
117
|
+
A cluster complex (or generalized dual associahedron).
|
|
118
|
+
|
|
119
|
+
The cluster complex (or generalized dual associahedron) is a
|
|
120
|
+
simplicial complex constructed from a cluster algebra. Its
|
|
121
|
+
vertices are the cluster variables and its facets are the
|
|
122
|
+
clusters, i.e., maximal subsets of compatible cluster variables.
|
|
123
|
+
|
|
124
|
+
The cluster complex of type `A_n` is the simplicial complex with
|
|
125
|
+
vertices being (proper) diagonals in a convex `(n+3)`-gon and with
|
|
126
|
+
facets being triangulations.
|
|
127
|
+
|
|
128
|
+
The implementation of the cluster complex depends on its
|
|
129
|
+
connection to subword complexes, see [CLS2014]_. Let `c` be a Coxeter
|
|
130
|
+
element with reduced word `{\bf c}` in a finite Coxeter group `W`,
|
|
131
|
+
and let `{\bf w}_\circ` be the `c`-sorting word for the longest
|
|
132
|
+
element `w_\circ \in W`.
|
|
133
|
+
|
|
134
|
+
The ``multi-cluster complex`` `\Delta(W,k)` has vertices in
|
|
135
|
+
one-to-one correspondence with letters in the word
|
|
136
|
+
`Q = {\bf c^k w}_\circ` and with facets being complements
|
|
137
|
+
in `Q` of reduced expressions for `w_\circ`.
|
|
138
|
+
|
|
139
|
+
For `k = 1`, the multi-cluster complex is isomorphic to the
|
|
140
|
+
cluster complex as defined above.
|
|
141
|
+
|
|
142
|
+
EXAMPLES:
|
|
143
|
+
|
|
144
|
+
A first example of a cluster complex::
|
|
145
|
+
|
|
146
|
+
sage: C = ClusterComplex(['A', 2]); C
|
|
147
|
+
Cluster complex of type ['A', 2] with 5 vertices and 5 facets
|
|
148
|
+
|
|
149
|
+
Its vertices, facets, and minimal non-faces::
|
|
150
|
+
|
|
151
|
+
sage: C.vertices()
|
|
152
|
+
(0, 1, 2, 3, 4)
|
|
153
|
+
|
|
154
|
+
sage: C.facets()
|
|
155
|
+
[(0, 1), (0, 4), (1, 2), (2, 3), (3, 4)]
|
|
156
|
+
|
|
157
|
+
sage: C.minimal_nonfaces()
|
|
158
|
+
[[0, 2], [0, 3], [1, 3], [1, 4], [2, 4]]
|
|
159
|
+
|
|
160
|
+
We can do everything we can do on simplicial complexes,
|
|
161
|
+
e.g. computing its homology::
|
|
162
|
+
|
|
163
|
+
sage: C.homology()
|
|
164
|
+
{0: 0, 1: Z}
|
|
165
|
+
|
|
166
|
+
We can also create a multi-cluster complex::
|
|
167
|
+
|
|
168
|
+
sage: ClusterComplex(['A', 2], k=2)
|
|
169
|
+
Multi-cluster complex of type ['A', 2] with 7 vertices and 14 facets
|
|
170
|
+
|
|
171
|
+
REFERENCES:
|
|
172
|
+
|
|
173
|
+
- [CLS2014]_
|
|
174
|
+
"""
|
|
175
|
+
|
|
176
|
+
@staticmethod
|
|
177
|
+
def __classcall__(cls, W, k=1, coxeter_element=None, algorithm='inductive'):
|
|
178
|
+
r"""
|
|
179
|
+
Standardize input to ensure a unique representation.
|
|
180
|
+
|
|
181
|
+
TESTS::
|
|
182
|
+
|
|
183
|
+
sage: S1 = ClusterComplex(['B',2])
|
|
184
|
+
sage: W = CoxeterGroup(['B',2])
|
|
185
|
+
sage: S2 = ClusterComplex(W)
|
|
186
|
+
sage: S3 = ClusterComplex(CoxeterMatrix('B2'), coxeter_element=(1,2))
|
|
187
|
+
sage: w = W.from_reduced_word([1,2])
|
|
188
|
+
sage: S4 = ClusterComplex('B2', coxeter_element=w, algorithm='inductive')
|
|
189
|
+
sage: S1 is S2 and S2 is S3 and S3 is S4
|
|
190
|
+
True
|
|
191
|
+
"""
|
|
192
|
+
if k not in NN:
|
|
193
|
+
raise ValueError("the additional parameter must be a "
|
|
194
|
+
"nonnegative integer")
|
|
195
|
+
|
|
196
|
+
if W not in CoxeterGroups:
|
|
197
|
+
W = CoxeterGroup(W)
|
|
198
|
+
|
|
199
|
+
if not W.is_finite():
|
|
200
|
+
raise ValueError("the Coxeter group must be finite")
|
|
201
|
+
|
|
202
|
+
if coxeter_element is None:
|
|
203
|
+
coxeter_element = W.index_set()
|
|
204
|
+
elif hasattr(coxeter_element, "reduced_word"):
|
|
205
|
+
coxeter_element = coxeter_element.reduced_word()
|
|
206
|
+
coxeter_element = tuple(coxeter_element)
|
|
207
|
+
|
|
208
|
+
return super(SubwordComplex, cls).__classcall__(cls, W=W, k=k,
|
|
209
|
+
coxeter_element=coxeter_element,
|
|
210
|
+
algorithm=algorithm)
|
|
211
|
+
|
|
212
|
+
def __init__(self, W, k, coxeter_element, algorithm):
|
|
213
|
+
"""
|
|
214
|
+
Initialize ``self``.
|
|
215
|
+
|
|
216
|
+
TESTS::
|
|
217
|
+
|
|
218
|
+
sage: S = ClusterComplex(['A', 2])
|
|
219
|
+
sage: TestSuite(S).run()
|
|
220
|
+
sage: S = ClusterComplex(['A', 2], k=2)
|
|
221
|
+
sage: TestSuite(S).run()
|
|
222
|
+
"""
|
|
223
|
+
w = W.w0
|
|
224
|
+
Q = coxeter_element * k + tuple(w.coxeter_sorting_word(coxeter_element))
|
|
225
|
+
SubwordComplex.__init__(self, Q, w, algorithm=algorithm)
|
|
226
|
+
self._W = W
|
|
227
|
+
self._w0 = w
|
|
228
|
+
self._k = k
|
|
229
|
+
|
|
230
|
+
self.set_immutable()
|
|
231
|
+
|
|
232
|
+
def __call__(self, F, facet_test=True):
|
|
233
|
+
r"""
|
|
234
|
+
Create a facet of ``self``.
|
|
235
|
+
|
|
236
|
+
INPUT:
|
|
237
|
+
|
|
238
|
+
- ``F`` -- an iterable of positions
|
|
239
|
+
- ``facet_test`` -- boolean (default: ``True``); tells whether
|
|
240
|
+
or not the facet ``F`` should be tested before creation
|
|
241
|
+
|
|
242
|
+
OUTPUT: the facet of ``self`` at positions given by ``F``
|
|
243
|
+
|
|
244
|
+
EXAMPLES::
|
|
245
|
+
|
|
246
|
+
sage: C = ClusterComplex(['A', 2])
|
|
247
|
+
sage: F = C((0, 1)); F
|
|
248
|
+
(0, 1)
|
|
249
|
+
|
|
250
|
+
TESTS::
|
|
251
|
+
|
|
252
|
+
sage: C = ClusterComplex(['A', 2])
|
|
253
|
+
sage: F = C((0, 1))
|
|
254
|
+
sage: C(F) is F
|
|
255
|
+
True
|
|
256
|
+
"""
|
|
257
|
+
if isinstance(F, ClusterComplexFacet) and F.parent() is self:
|
|
258
|
+
return F
|
|
259
|
+
return self.element_class(self, F, facet_test=facet_test)
|
|
260
|
+
|
|
261
|
+
Element = ClusterComplexFacet
|
|
262
|
+
|
|
263
|
+
def _repr_(self):
|
|
264
|
+
r"""
|
|
265
|
+
Return a string representation of ``self``.
|
|
266
|
+
|
|
267
|
+
EXAMPLES::
|
|
268
|
+
|
|
269
|
+
sage: ClusterComplex(['A', 2])._repr_()
|
|
270
|
+
"Cluster complex of type ['A', 2] with 5 vertices and 5 facets"
|
|
271
|
+
"""
|
|
272
|
+
if self._k == 1:
|
|
273
|
+
name = 'Cluster complex'
|
|
274
|
+
else:
|
|
275
|
+
name = 'Multi-cluster complex'
|
|
276
|
+
name += (' of type %s with %s vertices and %s facets'
|
|
277
|
+
% (self.cartan_type(), len(self.vertices()),
|
|
278
|
+
len(self._facets)))
|
|
279
|
+
return name
|
|
280
|
+
|
|
281
|
+
def k(self):
|
|
282
|
+
r"""
|
|
283
|
+
Return the index `k` of ``self``.
|
|
284
|
+
|
|
285
|
+
EXAMPLES::
|
|
286
|
+
|
|
287
|
+
sage: ClusterComplex(['A', 2]).k()
|
|
288
|
+
1
|
|
289
|
+
"""
|
|
290
|
+
return self._k
|
|
291
|
+
|
|
292
|
+
def minimal_nonfaces(self):
|
|
293
|
+
"""
|
|
294
|
+
Return the minimal non-faces of ``self``.
|
|
295
|
+
|
|
296
|
+
EXAMPLES::
|
|
297
|
+
|
|
298
|
+
sage: ClusterComplex(['A', 2]).minimal_nonfaces()
|
|
299
|
+
[[0, 2], [0, 3], [1, 3], [1, 4], [2, 4]]
|
|
300
|
+
"""
|
|
301
|
+
from sage.combinat.combination import Combinations
|
|
302
|
+
return [X for X in Combinations(self.vertices(), self.k() + 1)
|
|
303
|
+
if not any(set(X).issubset(F) for F in self.facets())]
|
|
304
|
+
|
|
305
|
+
def cyclic_rotation(self):
|
|
306
|
+
"""
|
|
307
|
+
Return the operation on the facets of ``self`` obtained by the
|
|
308
|
+
cyclic rotation as defined in [CLS2014]_.
|
|
309
|
+
|
|
310
|
+
EXAMPLES::
|
|
311
|
+
|
|
312
|
+
sage: ClusterComplex(['A', 2]).cyclic_rotation()
|
|
313
|
+
<function ...act at ...>
|
|
314
|
+
"""
|
|
315
|
+
W = self._W
|
|
316
|
+
w = self._w0
|
|
317
|
+
Q = self._Q
|
|
318
|
+
l = len(Q)
|
|
319
|
+
S = W.simple_reflections()
|
|
320
|
+
S_inv = {S[j]: j for j in W.index_set()}
|
|
321
|
+
Q = Q + tuple(S_inv[w * S[k] * w] for k in Q)
|
|
322
|
+
D = {i: (Q[i + 1:].index(Q[i]) + i + 1) % l for i in range(l)}
|
|
323
|
+
|
|
324
|
+
def act(F):
|
|
325
|
+
return self.parent().element_class(sorted([D[i] for i in F]))
|
|
326
|
+
return act
|