passagemath-combinat 10.6.42__cp314-cp314t-win_amd64.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/DELVEWHEEL +2 -0
- passagemath_combinat-10.6.42.dist-info/METADATA +160 -0
- passagemath_combinat-10.6.42.dist-info/RECORD +401 -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-10-3a5f019e2510aeaad918cab2b57a689d.dll +0 -0
- passagemath_combinat.libs/libsymmetrica-3-7dcf900932804d0df5fd0919b4668720.dll +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 +44 -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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +0 -0
- sage/combinat/debruijn_sequence.pyx +355 -0
- sage/combinat/decorated_permutation.py +270 -0
- sage/combinat/degree_sequences.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +0 -0
- sage/combinat/expnums.pyx +148 -0
- sage/combinat/fast_vector_partitions.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +0 -0
- sage/combinat/words/word_char.pyx +847 -0
- sage/combinat/words/word_datatypes.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +0 -0
- sage/sat/solvers/satsolver.pxd +3 -0
- sage/sat/solvers/satsolver.pyx +405 -0
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
r"""
|
|
3
|
+
Free abelian monoids
|
|
4
|
+
|
|
5
|
+
AUTHORS:
|
|
6
|
+
|
|
7
|
+
- David Kohel (2005-09)
|
|
8
|
+
|
|
9
|
+
Sage supports free abelian monoids on any prescribed finite number
|
|
10
|
+
`n\geq 0` of generators. Use the
|
|
11
|
+
``FreeAbelianMonoid`` function to create a free abelian
|
|
12
|
+
monoid, and the ``gen`` and ``gens``
|
|
13
|
+
functions to obtain the corresponding generators. You can print the
|
|
14
|
+
generators as arbitrary strings using the optional
|
|
15
|
+
``names`` argument to the
|
|
16
|
+
``FreeAbelianMonoid`` function.
|
|
17
|
+
|
|
18
|
+
EXAMPLE 1: It is possible to create an abelian monoid in zero or
|
|
19
|
+
more variables; the syntax T(1) creates the monoid identity
|
|
20
|
+
element even in the rank zero case.
|
|
21
|
+
|
|
22
|
+
::
|
|
23
|
+
|
|
24
|
+
sage: T = FreeAbelianMonoid(0, '')
|
|
25
|
+
sage: T
|
|
26
|
+
Free abelian monoid on 0 generators ()
|
|
27
|
+
sage: T.gens()
|
|
28
|
+
()
|
|
29
|
+
sage: T(1)
|
|
30
|
+
1
|
|
31
|
+
|
|
32
|
+
EXAMPLE 2: A free abelian monoid uses a multiplicative
|
|
33
|
+
representation of elements, but the underlying representation is
|
|
34
|
+
lists of integer exponents.
|
|
35
|
+
|
|
36
|
+
::
|
|
37
|
+
|
|
38
|
+
sage: F = FreeAbelianMonoid(5,names='a,b,c,d,e')
|
|
39
|
+
sage: (a,b,c,d,e) = F.gens()
|
|
40
|
+
sage: a*b^2*e*d
|
|
41
|
+
a*b^2*d*e
|
|
42
|
+
sage: x = b^2*e*d*a^7
|
|
43
|
+
sage: x
|
|
44
|
+
a^7*b^2*d*e
|
|
45
|
+
sage: x.list()
|
|
46
|
+
[7, 2, 0, 1, 1]
|
|
47
|
+
"""
|
|
48
|
+
# ****************************************************************************
|
|
49
|
+
# Copyright (C) 2005 David Kohel <kohel@maths.usyd.edu>
|
|
50
|
+
#
|
|
51
|
+
# This program is free software: you can redistribute it and/or modify
|
|
52
|
+
# it under the terms of the GNU General Public License as published by
|
|
53
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
54
|
+
# (at your option) any later version.
|
|
55
|
+
# https://www.gnu.org/licenses/
|
|
56
|
+
# ****************************************************************************
|
|
57
|
+
|
|
58
|
+
from sage.misc.cachefunc import cached_method
|
|
59
|
+
from sage.structure.category_object import normalize_names
|
|
60
|
+
from sage.structure.parent import Parent
|
|
61
|
+
from sage.categories.monoids import Monoids
|
|
62
|
+
from .free_abelian_monoid_element import FreeAbelianMonoidElement
|
|
63
|
+
from sage.rings.integer import Integer
|
|
64
|
+
from sage.rings.integer_ring import ZZ
|
|
65
|
+
|
|
66
|
+
from sage.structure.factory import UniqueFactory
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class FreeAbelianMonoidFactory(UniqueFactory):
|
|
70
|
+
"""
|
|
71
|
+
Create the free abelian monoid in `n` generators.
|
|
72
|
+
|
|
73
|
+
INPUT:
|
|
74
|
+
|
|
75
|
+
- ``n`` -- integer
|
|
76
|
+
|
|
77
|
+
- ``names`` -- names of generators
|
|
78
|
+
|
|
79
|
+
OUTPUT: free abelian monoid
|
|
80
|
+
|
|
81
|
+
EXAMPLES::
|
|
82
|
+
|
|
83
|
+
sage: FreeAbelianMonoid(0, '')
|
|
84
|
+
Free abelian monoid on 0 generators ()
|
|
85
|
+
sage: F = FreeAbelianMonoid(5,names = list("abcde"))
|
|
86
|
+
sage: F
|
|
87
|
+
Free abelian monoid on 5 generators (a, b, c, d, e)
|
|
88
|
+
sage: F(1)
|
|
89
|
+
1
|
|
90
|
+
sage: (a, b, c, d, e) = F.gens()
|
|
91
|
+
sage: mul([ a, b, a, c, b, d, c, d ], F(1))
|
|
92
|
+
a^2*b^2*c^2*d^2
|
|
93
|
+
sage: a**2 * b**3 * a**2 * b**4
|
|
94
|
+
a^4*b^7
|
|
95
|
+
|
|
96
|
+
::
|
|
97
|
+
|
|
98
|
+
sage: loads(dumps(F)) is F
|
|
99
|
+
True
|
|
100
|
+
"""
|
|
101
|
+
def create_key(self, n, names):
|
|
102
|
+
n = int(n)
|
|
103
|
+
names = normalize_names(n, names)
|
|
104
|
+
return (n, names)
|
|
105
|
+
|
|
106
|
+
def create_object(self, version, key):
|
|
107
|
+
return FreeAbelianMonoid_class(*key)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
FreeAbelianMonoid_factory = FreeAbelianMonoidFactory("sage.monoids.free_abelian_monoid.FreeAbelianMonoid_factory")
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def FreeAbelianMonoid(index_set=None, names=None, **kwds):
|
|
114
|
+
r"""
|
|
115
|
+
Return a free abelian monoid on `n` generators or with the generators
|
|
116
|
+
indexed by a set `I`.
|
|
117
|
+
|
|
118
|
+
We construct free abelian monoids by specifying either:
|
|
119
|
+
|
|
120
|
+
- the number of generators and/or the names of the generators
|
|
121
|
+
- the indexing set for the generators (this ignores the other two inputs)
|
|
122
|
+
|
|
123
|
+
INPUT:
|
|
124
|
+
|
|
125
|
+
- ``index_set`` -- an indexing set for the generators; if an integer,
|
|
126
|
+
then this becomes `\{0, 1, \ldots, n-1\}`
|
|
127
|
+
|
|
128
|
+
- ``names`` -- names of generators
|
|
129
|
+
|
|
130
|
+
OUTPUT: a free abelian monoid
|
|
131
|
+
|
|
132
|
+
EXAMPLES::
|
|
133
|
+
|
|
134
|
+
sage: F.<a,b,c,d,e> = FreeAbelianMonoid(); F
|
|
135
|
+
Free abelian monoid on 5 generators (a, b, c, d, e)
|
|
136
|
+
sage: FreeAbelianMonoid(index_set=ZZ)
|
|
137
|
+
Free abelian monoid indexed by Integer Ring
|
|
138
|
+
sage: FreeAbelianMonoid(names='x,y')
|
|
139
|
+
Free abelian monoid on 2 generators (x, y)
|
|
140
|
+
"""
|
|
141
|
+
if isinstance(index_set, str): # Swap args (this works if names is None as well)
|
|
142
|
+
names, index_set = index_set, names
|
|
143
|
+
|
|
144
|
+
if index_set is None and names is not None:
|
|
145
|
+
if isinstance(names, str):
|
|
146
|
+
index_set = names.count(',') + 1
|
|
147
|
+
else:
|
|
148
|
+
index_set = len(names)
|
|
149
|
+
|
|
150
|
+
if index_set not in ZZ:
|
|
151
|
+
if names is not None:
|
|
152
|
+
names = normalize_names(len(names), names)
|
|
153
|
+
from sage.monoids.indexed_free_monoid import IndexedFreeAbelianMonoid
|
|
154
|
+
return IndexedFreeAbelianMonoid(index_set, names=names, **kwds)
|
|
155
|
+
|
|
156
|
+
if names is None:
|
|
157
|
+
raise ValueError("names must be specified")
|
|
158
|
+
return FreeAbelianMonoid_factory(index_set, names)
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def is_FreeAbelianMonoid(x):
|
|
162
|
+
"""
|
|
163
|
+
Return ``True`` if `x` is a free abelian monoid.
|
|
164
|
+
|
|
165
|
+
EXAMPLES::
|
|
166
|
+
|
|
167
|
+
sage: from sage.monoids.free_abelian_monoid import is_FreeAbelianMonoid
|
|
168
|
+
sage: is_FreeAbelianMonoid(5)
|
|
169
|
+
doctest:warning...
|
|
170
|
+
DeprecationWarning: the function is_FreeAbelianMonoid is deprecated;
|
|
171
|
+
use 'isinstance(..., FreeAbelianMonoid_class)' instead
|
|
172
|
+
See https://github.com/sagemath/sage/issues/37897 for details.
|
|
173
|
+
False
|
|
174
|
+
sage: is_FreeAbelianMonoid(FreeAbelianMonoid(7,'a'))
|
|
175
|
+
True
|
|
176
|
+
sage: is_FreeAbelianMonoid(FreeMonoid(7,'a'))
|
|
177
|
+
False
|
|
178
|
+
sage: is_FreeAbelianMonoid(FreeMonoid(0,''))
|
|
179
|
+
False
|
|
180
|
+
"""
|
|
181
|
+
from sage.misc.superseded import deprecation
|
|
182
|
+
deprecation(37897, "the function is_FreeAbelianMonoid is deprecated; use 'isinstance(..., FreeAbelianMonoid_class)' instead")
|
|
183
|
+
return isinstance(x, FreeAbelianMonoid_class)
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
class FreeAbelianMonoid_class(Parent):
|
|
187
|
+
"""
|
|
188
|
+
Free abelian monoid on `n` generators.
|
|
189
|
+
"""
|
|
190
|
+
Element = FreeAbelianMonoidElement
|
|
191
|
+
|
|
192
|
+
def __init__(self, n, names):
|
|
193
|
+
"""
|
|
194
|
+
Initialize ``self``.
|
|
195
|
+
|
|
196
|
+
EXAMPLES::
|
|
197
|
+
|
|
198
|
+
sage: F = FreeAbelianMonoid(6,'b')
|
|
199
|
+
sage: TestSuite(F).run()
|
|
200
|
+
"""
|
|
201
|
+
if not isinstance(n, (int, Integer)):
|
|
202
|
+
raise TypeError("n (=%s) must be an integer" % n)
|
|
203
|
+
if n < 0:
|
|
204
|
+
raise ValueError("n (=%s) must be nonnegative" % n)
|
|
205
|
+
self.__ngens = int(n)
|
|
206
|
+
assert names is not None
|
|
207
|
+
Parent.__init__(self, names=names, category=Monoids().Commutative())
|
|
208
|
+
|
|
209
|
+
def __repr__(self):
|
|
210
|
+
n = self.__ngens
|
|
211
|
+
return f"Free abelian monoid on {n} generators {self.gens()}"
|
|
212
|
+
|
|
213
|
+
def __call__(self, x):
|
|
214
|
+
"""
|
|
215
|
+
Create an element of this abelian monoid from `x`.
|
|
216
|
+
|
|
217
|
+
EXAMPLES::
|
|
218
|
+
|
|
219
|
+
sage: F = FreeAbelianMonoid(10,'x')
|
|
220
|
+
sage: F(F.gen(2))
|
|
221
|
+
x2
|
|
222
|
+
sage: F(1)
|
|
223
|
+
1
|
|
224
|
+
"""
|
|
225
|
+
if isinstance(x, FreeAbelianMonoidElement) and x.parent() == self:
|
|
226
|
+
return x
|
|
227
|
+
return self.element_class(self, x)
|
|
228
|
+
|
|
229
|
+
def __contains__(self, x):
|
|
230
|
+
"""
|
|
231
|
+
Return ``True`` if `x` is an element of this abelian monoid.
|
|
232
|
+
|
|
233
|
+
EXAMPLES::
|
|
234
|
+
|
|
235
|
+
sage: F = FreeAbelianMonoid(10,'b')
|
|
236
|
+
sage: F.gen(2)*F.gen(3) in F
|
|
237
|
+
True
|
|
238
|
+
|
|
239
|
+
Note that a monoid on `9` generators is not considered a
|
|
240
|
+
submonoid of one on `10` generators.
|
|
241
|
+
|
|
242
|
+
::
|
|
243
|
+
|
|
244
|
+
sage: FreeAbelianMonoid(9,'c').gen(2) in F
|
|
245
|
+
False
|
|
246
|
+
|
|
247
|
+
However, multiple calls to the monoid constructor do *not* return
|
|
248
|
+
multiple distinct monoids.
|
|
249
|
+
|
|
250
|
+
::
|
|
251
|
+
|
|
252
|
+
sage: FreeAbelianMonoid(10,'b').gen(2) in F
|
|
253
|
+
True
|
|
254
|
+
"""
|
|
255
|
+
return isinstance(x, FreeAbelianMonoidElement) and x.parent() == self
|
|
256
|
+
|
|
257
|
+
def gen(self, i=0):
|
|
258
|
+
"""
|
|
259
|
+
The `i`-th generator of the abelian monoid.
|
|
260
|
+
|
|
261
|
+
EXAMPLES::
|
|
262
|
+
|
|
263
|
+
sage: F = FreeAbelianMonoid(5,'a')
|
|
264
|
+
sage: F.gen(0)
|
|
265
|
+
a0
|
|
266
|
+
sage: F.gen(2)
|
|
267
|
+
a2
|
|
268
|
+
"""
|
|
269
|
+
n = self.__ngens
|
|
270
|
+
if i < 0 or not i < n:
|
|
271
|
+
raise IndexError(f"argument i (= {i}) must be between 0 and {n-1}")
|
|
272
|
+
x = [0 for j in range(n)]
|
|
273
|
+
x[int(i)] = 1
|
|
274
|
+
return self.element_class(self, x)
|
|
275
|
+
|
|
276
|
+
@cached_method
|
|
277
|
+
def gens(self) -> tuple:
|
|
278
|
+
"""
|
|
279
|
+
Return the generators of ``self``.
|
|
280
|
+
|
|
281
|
+
EXAMPLES::
|
|
282
|
+
|
|
283
|
+
sage: F = FreeAbelianMonoid(5,'a')
|
|
284
|
+
sage: F.gens()
|
|
285
|
+
(a0, a1, a2, a3, a4)
|
|
286
|
+
"""
|
|
287
|
+
return tuple(self.gen(i) for i in range(self.__ngens))
|
|
288
|
+
|
|
289
|
+
def ngens(self):
|
|
290
|
+
"""
|
|
291
|
+
The number of free generators of the abelian monoid.
|
|
292
|
+
|
|
293
|
+
EXAMPLES::
|
|
294
|
+
|
|
295
|
+
sage: F = FreeAbelianMonoid(3000, 'a')
|
|
296
|
+
sage: F.ngens()
|
|
297
|
+
3000
|
|
298
|
+
"""
|
|
299
|
+
return self.__ngens
|
|
300
|
+
|
|
301
|
+
def cardinality(self):
|
|
302
|
+
r"""
|
|
303
|
+
Return the cardinality of ``self``, which is `\infty`.
|
|
304
|
+
|
|
305
|
+
EXAMPLES::
|
|
306
|
+
|
|
307
|
+
sage: F = FreeAbelianMonoid(3000, 'a')
|
|
308
|
+
sage: F.cardinality()
|
|
309
|
+
+Infinity
|
|
310
|
+
"""
|
|
311
|
+
if self.__ngens == 0:
|
|
312
|
+
from sage.rings.integer_ring import ZZ
|
|
313
|
+
return ZZ.one()
|
|
314
|
+
from sage.rings.infinity import infinity
|
|
315
|
+
return infinity
|
|
Binary file
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
from sage.structure.element cimport MonoidElement
|
|
3
|
+
from sage.libs.gmp.types cimport mpz_t
|
|
4
|
+
from sage.structure.parent cimport Parent
|
|
5
|
+
|
|
6
|
+
cdef class FreeAbelianMonoidElement(MonoidElement):
|
|
7
|
+
cdef mpz_t *_element_vector
|
|
8
|
+
cdef Py_ssize_t _n
|
|
9
|
+
|
|
10
|
+
cdef int _init(self, Py_ssize_t n, Parent parent) except -1
|
|
11
|
+
|
|
12
|
+
cdef inline FreeAbelianMonoidElement _new_c(self):
|
|
13
|
+
cdef type t = type(self)
|
|
14
|
+
cdef FreeAbelianMonoidElement x = <FreeAbelianMonoidElement>(t.__new__(t))
|
|
15
|
+
x._init(self._n, self._parent)
|
|
16
|
+
return x
|