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,335 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
r"""
|
|
3
|
+
Free Monoids
|
|
4
|
+
|
|
5
|
+
AUTHORS:
|
|
6
|
+
|
|
7
|
+
- David Kohel (2005-09)
|
|
8
|
+
- Simon King (2011-04): Put free monoids into the category framework
|
|
9
|
+
|
|
10
|
+
Sage supports free monoids on any prescribed finite number
|
|
11
|
+
`n\geq 0` of generators. Use the ``FreeMonoid``
|
|
12
|
+
function to create a free monoid, and the ``gen`` and
|
|
13
|
+
``gens`` functions to obtain the corresponding
|
|
14
|
+
generators. You can print the generators as arbitrary strings using
|
|
15
|
+
the optional ``names`` argument to the
|
|
16
|
+
``FreeMonoid`` function.
|
|
17
|
+
"""
|
|
18
|
+
# ****************************************************************************
|
|
19
|
+
# Copyright (C) 2005 David Kohel <kohel@maths.usyd.edu>
|
|
20
|
+
#
|
|
21
|
+
# This program is free software: you can redistribute it and/or modify
|
|
22
|
+
# it under the terms of the GNU General Public License as published by
|
|
23
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
24
|
+
# (at your option) any later version.
|
|
25
|
+
# https://www.gnu.org/licenses/
|
|
26
|
+
# ****************************************************************************
|
|
27
|
+
|
|
28
|
+
from sage.rings.integer import Integer
|
|
29
|
+
from sage.structure.category_object import normalize_names
|
|
30
|
+
from .free_monoid_element import FreeMonoidElement
|
|
31
|
+
|
|
32
|
+
from .monoid import Monoid_class
|
|
33
|
+
|
|
34
|
+
from sage.combinat.words.finite_word import FiniteWord_class
|
|
35
|
+
|
|
36
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
37
|
+
from sage.rings.integer_ring import ZZ
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def is_FreeMonoid(x):
|
|
41
|
+
"""
|
|
42
|
+
Return ``True`` if `x` is a free monoid.
|
|
43
|
+
|
|
44
|
+
EXAMPLES::
|
|
45
|
+
|
|
46
|
+
sage: from sage.monoids.free_monoid import is_FreeMonoid
|
|
47
|
+
sage: is_FreeMonoid(5)
|
|
48
|
+
doctest:warning...
|
|
49
|
+
DeprecationWarning: the function is_FreeMonoid is deprecated;
|
|
50
|
+
use 'isinstance(..., (FreeMonoid, IndexedFreeMonoid))' instead
|
|
51
|
+
See https://github.com/sagemath/sage/issues/37897 for details.
|
|
52
|
+
False
|
|
53
|
+
sage: is_FreeMonoid(FreeMonoid(7,'a'))
|
|
54
|
+
True
|
|
55
|
+
sage: is_FreeMonoid(FreeAbelianMonoid(7,'a'))
|
|
56
|
+
False
|
|
57
|
+
sage: is_FreeMonoid(FreeAbelianMonoid(0,''))
|
|
58
|
+
False
|
|
59
|
+
sage: is_FreeMonoid(FreeMonoid(index_set=ZZ))
|
|
60
|
+
True
|
|
61
|
+
sage: is_FreeMonoid(FreeAbelianMonoid(index_set=ZZ))
|
|
62
|
+
False
|
|
63
|
+
"""
|
|
64
|
+
from sage.misc.superseded import deprecation
|
|
65
|
+
deprecation(37897, "the function is_FreeMonoid is deprecated; use 'isinstance(..., (FreeMonoid, IndexedFreeMonoid))' instead")
|
|
66
|
+
if isinstance(x, FreeMonoid):
|
|
67
|
+
return True
|
|
68
|
+
from sage.monoids.indexed_free_monoid import IndexedFreeMonoid
|
|
69
|
+
return isinstance(x, IndexedFreeMonoid)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class FreeMonoid(Monoid_class, UniqueRepresentation):
|
|
73
|
+
r"""
|
|
74
|
+
Return a free monoid on `n` generators or with the generators
|
|
75
|
+
indexed by a set `I`.
|
|
76
|
+
|
|
77
|
+
We construct free monoids by specifying either:
|
|
78
|
+
|
|
79
|
+
- the number of generators and/or the names of the generators
|
|
80
|
+
- the indexing set for the generators
|
|
81
|
+
|
|
82
|
+
INPUT:
|
|
83
|
+
|
|
84
|
+
- ``index_set`` -- an indexing set for the generators; if an
|
|
85
|
+
integer `n`, than this becomes `\{0, 1, \ldots, n-1\}`
|
|
86
|
+
|
|
87
|
+
- ``names`` -- names of generators
|
|
88
|
+
|
|
89
|
+
- ``commutative`` -- boolean (default: ``False``); whether the free
|
|
90
|
+
monoid is commutative or not
|
|
91
|
+
|
|
92
|
+
OUTPUT: a free monoid
|
|
93
|
+
|
|
94
|
+
EXAMPLES::
|
|
95
|
+
|
|
96
|
+
sage: F = FreeMonoid(3,'x'); F
|
|
97
|
+
Free monoid on 3 generators (x0, x1, x2)
|
|
98
|
+
sage: x = F.gens()
|
|
99
|
+
sage: x[0]*x[1]**5 * (x[0]*x[2])
|
|
100
|
+
x0*x1^5*x0*x2
|
|
101
|
+
sage: F = FreeMonoid(3, 'a')
|
|
102
|
+
sage: F
|
|
103
|
+
Free monoid on 3 generators (a0, a1, a2)
|
|
104
|
+
|
|
105
|
+
sage: F.<a,b,c,d,e> = FreeMonoid(); F
|
|
106
|
+
Free monoid on 5 generators (a, b, c, d, e)
|
|
107
|
+
sage: FreeMonoid(index_set=ZZ)
|
|
108
|
+
Free monoid indexed by Integer Ring
|
|
109
|
+
|
|
110
|
+
sage: F.<x,y,z> = FreeMonoid(abelian=True); F
|
|
111
|
+
Free abelian monoid on 3 generators (x, y, z)
|
|
112
|
+
sage: FreeMonoid(index_set=ZZ, commutative=True)
|
|
113
|
+
Free abelian monoid indexed by Integer Ring
|
|
114
|
+
"""
|
|
115
|
+
@staticmethod
|
|
116
|
+
def __classcall_private__(cls, index_set=None, names=None,
|
|
117
|
+
commutative=False, **kwds):
|
|
118
|
+
r"""
|
|
119
|
+
Construct a free monoid or a free abelian monoid, depending on the
|
|
120
|
+
input. Also, normalize the input.
|
|
121
|
+
|
|
122
|
+
EXAMPLES::
|
|
123
|
+
|
|
124
|
+
sage: F.<a,b,c,d,e> = FreeMonoid(); F
|
|
125
|
+
Free monoid on 5 generators (a, b, c, d, e)
|
|
126
|
+
sage: FreeMonoid(index_set=ZZ)
|
|
127
|
+
Free monoid indexed by Integer Ring
|
|
128
|
+
sage: F.<x,y,z> = FreeMonoid(abelian=True); F
|
|
129
|
+
Free abelian monoid on 3 generators (x, y, z)
|
|
130
|
+
sage: FreeMonoid(index_set=ZZ, commutative=True)
|
|
131
|
+
Free abelian monoid indexed by Integer Ring
|
|
132
|
+
sage: F = FreeMonoid(index_set=ZZ, names='x,y,z')
|
|
133
|
+
sage: G = FreeMonoid(index_set=ZZ, names=['x', 'y', 'z'])
|
|
134
|
+
sage: F == G
|
|
135
|
+
True
|
|
136
|
+
sage: F is G
|
|
137
|
+
True
|
|
138
|
+
|
|
139
|
+
sage: FreeMonoid(2, names='a,b') is FreeMonoid(names=['a','b'])
|
|
140
|
+
True
|
|
141
|
+
|
|
142
|
+
Fix a bug when ``index_set`` is ``None`` and ``names`` is a
|
|
143
|
+
string (:issue:`26221`)::
|
|
144
|
+
|
|
145
|
+
sage: FreeMonoid(2, names=['a','b']) is FreeMonoid(names='a,b')
|
|
146
|
+
True
|
|
147
|
+
"""
|
|
148
|
+
if 'abelian' in kwds:
|
|
149
|
+
commutative = kwds.pop('abelian')
|
|
150
|
+
|
|
151
|
+
if commutative:
|
|
152
|
+
from sage.monoids.free_abelian_monoid import FreeAbelianMonoid
|
|
153
|
+
return FreeAbelianMonoid(index_set, names, **kwds)
|
|
154
|
+
|
|
155
|
+
# Swap args (this works if names is None as well)
|
|
156
|
+
if isinstance(index_set, str):
|
|
157
|
+
names, index_set = index_set, names
|
|
158
|
+
|
|
159
|
+
if index_set is None and names is not None:
|
|
160
|
+
if isinstance(names, str):
|
|
161
|
+
index_set = names.count(',') + 1
|
|
162
|
+
else:
|
|
163
|
+
index_set = len(names)
|
|
164
|
+
|
|
165
|
+
if index_set not in ZZ:
|
|
166
|
+
if names is not None:
|
|
167
|
+
names = normalize_names(-1, names)
|
|
168
|
+
from sage.monoids.indexed_free_monoid import IndexedFreeMonoid
|
|
169
|
+
return IndexedFreeMonoid(index_set, names=names, **kwds)
|
|
170
|
+
|
|
171
|
+
if names is None:
|
|
172
|
+
raise ValueError("names must be specified")
|
|
173
|
+
names = normalize_names(index_set, names)
|
|
174
|
+
return super().__classcall__(cls, index_set, names)
|
|
175
|
+
|
|
176
|
+
Element = FreeMonoidElement
|
|
177
|
+
|
|
178
|
+
def __init__(self, n, names=None):
|
|
179
|
+
"""
|
|
180
|
+
Return a free monoid on `n` generators or with the generators
|
|
181
|
+
indexed by a set `I`.
|
|
182
|
+
|
|
183
|
+
INPUT:
|
|
184
|
+
|
|
185
|
+
- ``n`` -- number of generators
|
|
186
|
+
|
|
187
|
+
- ``names`` -- names of generators
|
|
188
|
+
|
|
189
|
+
TESTS::
|
|
190
|
+
|
|
191
|
+
sage: M = FreeMonoid(3, names=['a','b','c'])
|
|
192
|
+
sage: TestSuite(M).run()
|
|
193
|
+
sage: F.<x,y> = FreeMonoid()
|
|
194
|
+
sage: TestSuite(F).run()
|
|
195
|
+
"""
|
|
196
|
+
if not isinstance(n, (int, Integer)):
|
|
197
|
+
raise TypeError("n (=%s) must be an integer" % n)
|
|
198
|
+
if n < 0:
|
|
199
|
+
raise ValueError("n (=%s) must be nonnegative" % n)
|
|
200
|
+
self.__ngens = int(n)
|
|
201
|
+
Monoid_class.__init__(self, names)
|
|
202
|
+
|
|
203
|
+
def _repr_(self):
|
|
204
|
+
return f"Free monoid on {self.__ngens} generators {self.gens()}"
|
|
205
|
+
|
|
206
|
+
def _element_constructor_(self, x, check=True):
|
|
207
|
+
"""
|
|
208
|
+
Return ``x`` coerced into this free monoid.
|
|
209
|
+
|
|
210
|
+
One can create a free monoid element from the integer 1, from
|
|
211
|
+
a list of 2-tuples of integers `(i,j)`, where `(i,j)`
|
|
212
|
+
corresponds to `x_i^j`, where `x_i` is the `i`-th generator,
|
|
213
|
+
and from words in the same alphabet as the generators.
|
|
214
|
+
|
|
215
|
+
EXAMPLES::
|
|
216
|
+
|
|
217
|
+
sage: F = FreeMonoid(3, 'a')
|
|
218
|
+
sage: F(1)
|
|
219
|
+
1
|
|
220
|
+
sage: F(F.gen(0))
|
|
221
|
+
a0
|
|
222
|
+
sage: F(0)
|
|
223
|
+
Traceback (most recent call last):
|
|
224
|
+
...
|
|
225
|
+
TypeError: argument x (= 0) is of the wrong type
|
|
226
|
+
|
|
227
|
+
An example with a list::
|
|
228
|
+
|
|
229
|
+
sage: F([(0,5),(1,2),(0,10),(0,2),(1,2)])
|
|
230
|
+
a0^5*a1^2*a0^12*a1^2
|
|
231
|
+
|
|
232
|
+
An example using words::
|
|
233
|
+
|
|
234
|
+
sage: F = FreeMonoid(3, 'a,b,c')
|
|
235
|
+
sage: w = Word('aabbcabac')
|
|
236
|
+
sage: F(w)
|
|
237
|
+
a^2*b^2*c*a*b*a*c
|
|
238
|
+
sage: F(Word([]))
|
|
239
|
+
1
|
|
240
|
+
|
|
241
|
+
TESTS::
|
|
242
|
+
|
|
243
|
+
sage: F(F(w), check=False)
|
|
244
|
+
a^2*b^2*c*a*b*a*c
|
|
245
|
+
|
|
246
|
+
sage: F = FreeMonoid(3, 'a,b,c')
|
|
247
|
+
sage: G = FreeMonoid(2, 'a,c')
|
|
248
|
+
sage: F(G(Word("ac")))
|
|
249
|
+
a*c
|
|
250
|
+
"""
|
|
251
|
+
# There should really be some careful type checking here...
|
|
252
|
+
if isinstance(x, FreeMonoidElement):
|
|
253
|
+
P = x.parent()
|
|
254
|
+
if P is self:
|
|
255
|
+
return x
|
|
256
|
+
elif P == self:
|
|
257
|
+
return self.element_class(self, x._element_list, check)
|
|
258
|
+
elif all(v in self.variable_names()
|
|
259
|
+
for v in P.variable_names()):
|
|
260
|
+
reindex = [next(j for j, w in enumerate(self.variable_names())
|
|
261
|
+
if v == w)
|
|
262
|
+
for v in P.variable_names()]
|
|
263
|
+
elt = [(reindex[i], exp) for i, exp in x._element_list]
|
|
264
|
+
return self.element_class(self, elt, check)
|
|
265
|
+
if isinstance(x, (int, Integer)) and x == 1:
|
|
266
|
+
return self.element_class(self, x, check)
|
|
267
|
+
if isinstance(x, FiniteWord_class):
|
|
268
|
+
d = self.gens_dict()
|
|
269
|
+
return self.prod([d[let] for let in x])
|
|
270
|
+
if isinstance(x, list):
|
|
271
|
+
return self.element_class(self, x, check)
|
|
272
|
+
|
|
273
|
+
raise TypeError("argument x (= %s) is of the wrong type" % x)
|
|
274
|
+
|
|
275
|
+
def __contains__(self, x):
|
|
276
|
+
return isinstance(x, FreeMonoidElement) and x.parent() == self
|
|
277
|
+
|
|
278
|
+
def gen(self, i=0):
|
|
279
|
+
"""
|
|
280
|
+
The `i`-th generator of the monoid.
|
|
281
|
+
|
|
282
|
+
INPUT:
|
|
283
|
+
|
|
284
|
+
- ``i`` -- integer (default: 0)
|
|
285
|
+
|
|
286
|
+
EXAMPLES::
|
|
287
|
+
|
|
288
|
+
sage: F = FreeMonoid(3, 'a')
|
|
289
|
+
sage: F.gen(1)
|
|
290
|
+
a1
|
|
291
|
+
sage: F.gen(2)
|
|
292
|
+
a2
|
|
293
|
+
sage: F.gen(5)
|
|
294
|
+
Traceback (most recent call last):
|
|
295
|
+
...
|
|
296
|
+
IndexError: argument i (= 5) must be between 0 and 2
|
|
297
|
+
"""
|
|
298
|
+
n = self.__ngens
|
|
299
|
+
if i < 0 or not i < n:
|
|
300
|
+
msg = "argument i (= %s) must be between 0 and %s"
|
|
301
|
+
raise IndexError(msg % (i, n - 1))
|
|
302
|
+
return self.element_class(self, [(Integer(i), Integer(1))])
|
|
303
|
+
|
|
304
|
+
def ngens(self):
|
|
305
|
+
"""
|
|
306
|
+
The number of free generators of the monoid.
|
|
307
|
+
|
|
308
|
+
EXAMPLES::
|
|
309
|
+
|
|
310
|
+
sage: F = FreeMonoid(2005, 'a')
|
|
311
|
+
sage: F.ngens()
|
|
312
|
+
2005
|
|
313
|
+
"""
|
|
314
|
+
return self.__ngens
|
|
315
|
+
|
|
316
|
+
def cardinality(self):
|
|
317
|
+
r"""
|
|
318
|
+
Return the cardinality of ``self``.
|
|
319
|
+
|
|
320
|
+
This is `\infty` if there is at least one generator.
|
|
321
|
+
|
|
322
|
+
EXAMPLES::
|
|
323
|
+
|
|
324
|
+
sage: F = FreeMonoid(2005, 'a')
|
|
325
|
+
sage: F.cardinality()
|
|
326
|
+
+Infinity
|
|
327
|
+
|
|
328
|
+
sage: F = FreeMonoid(0, [])
|
|
329
|
+
sage: F.cardinality()
|
|
330
|
+
1
|
|
331
|
+
"""
|
|
332
|
+
if self.__ngens == 0:
|
|
333
|
+
return Integer(1)
|
|
334
|
+
from sage.rings.infinity import infinity
|
|
335
|
+
return infinity
|