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,44 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# start delvewheel patch
|
|
3
|
+
def _delvewheel_patch_1_11_2():
|
|
4
|
+
import os
|
|
5
|
+
if os.path.isdir(libs_dir := os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir, 'passagemath_combinat.libs'))):
|
|
6
|
+
os.add_dll_directory(libs_dir)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
_delvewheel_patch_1_11_2()
|
|
10
|
+
del _delvewheel_patch_1_11_2
|
|
11
|
+
# end delvewheel patch
|
|
12
|
+
r"""
|
|
13
|
+
Top level of the distribution package sagemath-combinat
|
|
14
|
+
|
|
15
|
+
This distribution makes the following features available::
|
|
16
|
+
|
|
17
|
+
sage: from sage.features.sagemath import *
|
|
18
|
+
sage: sage__combinat().is_present()
|
|
19
|
+
FeatureTestResult('sage.combinat', True)
|
|
20
|
+
sage: sage__sat().is_present()
|
|
21
|
+
FeatureTestResult('sage.sat', True)
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
from .all__sagemath_categories import *
|
|
25
|
+
|
|
26
|
+
try: # extra
|
|
27
|
+
from sage.all__sagemath_graphs import *
|
|
28
|
+
except ImportError:
|
|
29
|
+
pass
|
|
30
|
+
|
|
31
|
+
from sage.algebras.all__sagemath_combinat import *
|
|
32
|
+
from sage.combinat.all__sagemath_combinat import *
|
|
33
|
+
from sage.databases.all__sagemath_combinat import *
|
|
34
|
+
from sage.dynamics.all__sagemath_combinat import *
|
|
35
|
+
from sage.libs.all__sagemath_combinat import *
|
|
36
|
+
from sage.rings.all__sagemath_combinat import *
|
|
37
|
+
from sage.monoids.all import *
|
|
38
|
+
from sage.games.all import *
|
|
39
|
+
from sage.sat.all import *
|
|
40
|
+
|
|
41
|
+
try: # extra, goes last so that the correct RR definition wins
|
|
42
|
+
from sage.all__sagemath_modules import *
|
|
43
|
+
except ImportError:
|
|
44
|
+
pass
|
sage/combinat/SJT.py
ADDED
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
r"""
|
|
3
|
+
Steinhaus-Johnson-Trotter algorithm
|
|
4
|
+
|
|
5
|
+
The Steinhaus-Johnson-Trotter algorithm generates all permutations of a list in
|
|
6
|
+
an order such that each permutation is obtained by transposing two adjacent
|
|
7
|
+
elements from the previous permutation.
|
|
8
|
+
|
|
9
|
+
Each element of the list has a direction (initialized at -1) that
|
|
10
|
+
changes at each permutation and that is used to determine which
|
|
11
|
+
elements to transpose. Thus in addition to the permutation itself, the
|
|
12
|
+
direction of each element is also stored.
|
|
13
|
+
|
|
14
|
+
Note that the permutations are not generated in lexicographic order.
|
|
15
|
+
|
|
16
|
+
AUTHORS:
|
|
17
|
+
|
|
18
|
+
- Martin Grenouilloux (2024-05-22): initial version
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
# ****************************************************************************
|
|
22
|
+
# Copyright (C) 2024 Martin Grenouilloux <martin.grenouilloux@uib.no>
|
|
23
|
+
#
|
|
24
|
+
# This program is free software: you can redistribute it and/or modify
|
|
25
|
+
# it under the terms of the GNU General Public License as published by
|
|
26
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
27
|
+
# (at your option) any later version.
|
|
28
|
+
# https://www.gnu.org/licenses/
|
|
29
|
+
# ****************************************************************************
|
|
30
|
+
from sage.combinat.combinat import CombinatorialElement
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class SJT(CombinatorialElement):
|
|
34
|
+
r"""
|
|
35
|
+
A representation of a list permuted using the Steinhaus-Johnson-Trotter
|
|
36
|
+
algorithm.
|
|
37
|
+
|
|
38
|
+
Each element of the list has a direction (initialized at -1) that
|
|
39
|
+
changes at each permutation and that is used to determine which
|
|
40
|
+
elements to transpose. The directions have three possible values:
|
|
41
|
+
|
|
42
|
+
- ``-1``: element transposes to the left
|
|
43
|
+
|
|
44
|
+
- ``1``: element transposes to the right
|
|
45
|
+
|
|
46
|
+
- ``0``: element does not move
|
|
47
|
+
|
|
48
|
+
Thus in addition to the permutation itself, the direction of each
|
|
49
|
+
element is also stored.
|
|
50
|
+
|
|
51
|
+
Note that the permutations are not generated in lexicographic order.
|
|
52
|
+
|
|
53
|
+
.. WARNING::
|
|
54
|
+
|
|
55
|
+
An ``SJT`` object should always be created with identity
|
|
56
|
+
permutation for the algorithm to behave properly. If the
|
|
57
|
+
identity permutation is not provided, it expects a coherent
|
|
58
|
+
list of directions according to the provided input. This list
|
|
59
|
+
is not checked.
|
|
60
|
+
|
|
61
|
+
.. TODO::
|
|
62
|
+
|
|
63
|
+
Implement the previous permutation for the Steinhaus-Johnson-Trotter
|
|
64
|
+
algorithm.
|
|
65
|
+
|
|
66
|
+
EXAMPLES::
|
|
67
|
+
|
|
68
|
+
sage: from sage.combinat.SJT import SJT
|
|
69
|
+
sage: s = SJT([1, 2, 3, 4]); s
|
|
70
|
+
[1, 2, 3, 4]
|
|
71
|
+
sage: s = s.next(); s
|
|
72
|
+
[1, 2, 4, 3]
|
|
73
|
+
sage: p = Permutation(s._list, algorithm='sjt', sjt=s)
|
|
74
|
+
sage: p
|
|
75
|
+
[1, 2, 4, 3]
|
|
76
|
+
sage: p.next()
|
|
77
|
+
[1, 4, 2, 3]
|
|
78
|
+
|
|
79
|
+
TESTS::
|
|
80
|
+
|
|
81
|
+
sage: from sage.combinat.SJT import SJT
|
|
82
|
+
sage: s = SJT([1, 2, 3, 4]); s
|
|
83
|
+
[1, 2, 3, 4]
|
|
84
|
+
sage: s = SJT([1]); s
|
|
85
|
+
[1]
|
|
86
|
+
sage: s = s.next(); s
|
|
87
|
+
False
|
|
88
|
+
sage: s = SJT([]); s
|
|
89
|
+
[]
|
|
90
|
+
sage: s = s.next(); s
|
|
91
|
+
False
|
|
92
|
+
"""
|
|
93
|
+
def __init__(self, l, directions=None) -> None:
|
|
94
|
+
r"""
|
|
95
|
+
Transpose two elements at positions ``a`` and ``b`` in ``perm`` and
|
|
96
|
+
their corresponding directions as well following the
|
|
97
|
+
Steinhaus-Johnson-Trotter algorithm.
|
|
98
|
+
|
|
99
|
+
Each permutation is obtained by transposing two adjacent elements from
|
|
100
|
+
the previous permutation.
|
|
101
|
+
|
|
102
|
+
INPUT:
|
|
103
|
+
|
|
104
|
+
- ``l`` -- list; a list of ordered ``int``.
|
|
105
|
+
|
|
106
|
+
- ``directions`` -- list (default: ``None``); a list of
|
|
107
|
+
directions for each element in the permuted list. Used when
|
|
108
|
+
constructing permutations from a pre-defined internal state.
|
|
109
|
+
|
|
110
|
+
EXAMPLES::
|
|
111
|
+
|
|
112
|
+
sage: from sage.combinat.SJT import SJT
|
|
113
|
+
sage: s = SJT([1, 2, 3, 4]); s
|
|
114
|
+
[1, 2, 3, 4]
|
|
115
|
+
sage: s = s.next(); s
|
|
116
|
+
[1, 2, 4, 3]
|
|
117
|
+
sage: p = Permutation(s._list, algorithm='sjt', sjt=s)
|
|
118
|
+
sage: p
|
|
119
|
+
[1, 2, 4, 3]
|
|
120
|
+
sage: p.next()
|
|
121
|
+
[1, 4, 2, 3]
|
|
122
|
+
|
|
123
|
+
TESTS::
|
|
124
|
+
|
|
125
|
+
sage: from sage.combinat.SJT import SJT
|
|
126
|
+
sage: s = SJT([1, 3, 2, 4])
|
|
127
|
+
Traceback (most recent call last):
|
|
128
|
+
...
|
|
129
|
+
ValueError: no internal state directions were given
|
|
130
|
+
for non-identity starting permutation
|
|
131
|
+
for Steinhaus-Johnson-Trotter algorithm
|
|
132
|
+
sage: s = SJT([]); s
|
|
133
|
+
[]
|
|
134
|
+
sage: s = s.next(); s
|
|
135
|
+
False
|
|
136
|
+
"""
|
|
137
|
+
# The permuted list.
|
|
138
|
+
self._list = l
|
|
139
|
+
|
|
140
|
+
# The length of the permuted list. Return early on empty list.
|
|
141
|
+
self._n = len(l)
|
|
142
|
+
if self._n == 0:
|
|
143
|
+
return
|
|
144
|
+
|
|
145
|
+
if directions is None:
|
|
146
|
+
if not all(l[i] <= l[i+1] for i in range(self._n - 1)):
|
|
147
|
+
raise ValueError("no internal state directions were given for "
|
|
148
|
+
"non-identity starting permutation for "
|
|
149
|
+
"Steinhaus-Johnson-Trotter algorithm")
|
|
150
|
+
self._directions = [-1] * self._n
|
|
151
|
+
|
|
152
|
+
# The first element has null direction.
|
|
153
|
+
self._directions[0] = 0
|
|
154
|
+
else:
|
|
155
|
+
self._directions = directions
|
|
156
|
+
|
|
157
|
+
def __idx_largest_element_non_zero_direction(self, perm, directions):
|
|
158
|
+
r"""
|
|
159
|
+
Find the largest element in ``perm`` with a non null direction.
|
|
160
|
+
"""
|
|
161
|
+
largest = 0
|
|
162
|
+
index = None
|
|
163
|
+
for i in range(self._n):
|
|
164
|
+
if directions[i] != 0:
|
|
165
|
+
e = perm[i]
|
|
166
|
+
if e > largest:
|
|
167
|
+
index = i
|
|
168
|
+
largest = e
|
|
169
|
+
|
|
170
|
+
return index
|
|
171
|
+
|
|
172
|
+
def next(self):
|
|
173
|
+
r"""
|
|
174
|
+
Produce the next permutation of ``self`` following the
|
|
175
|
+
Steinhaus-Johnson-Trotter algorithm.
|
|
176
|
+
|
|
177
|
+
OUTPUT: the list of the next permutation
|
|
178
|
+
|
|
179
|
+
EXAMPLES::
|
|
180
|
+
|
|
181
|
+
sage: from sage.combinat.SJT import SJT
|
|
182
|
+
sage: s = SJT([1, 2, 3, 4])
|
|
183
|
+
sage: s = s.next(); s
|
|
184
|
+
[1, 2, 4, 3]
|
|
185
|
+
sage: s = s.next(); s
|
|
186
|
+
[1, 4, 2, 3]
|
|
187
|
+
|
|
188
|
+
TESTS::
|
|
189
|
+
|
|
190
|
+
sage: from sage.combinat.SJT import SJT
|
|
191
|
+
sage: s = SJT([1, 2, 3])
|
|
192
|
+
sage: s.next()
|
|
193
|
+
[1, 3, 2]
|
|
194
|
+
|
|
195
|
+
sage: s = SJT([1])
|
|
196
|
+
sage: s.next()
|
|
197
|
+
False
|
|
198
|
+
"""
|
|
199
|
+
# Return on empty list.
|
|
200
|
+
if self._n == 0:
|
|
201
|
+
return False
|
|
202
|
+
|
|
203
|
+
# Copying lists of permutation and directions to avoid
|
|
204
|
+
# changing internal state of the algorithm if ``next()`` is
|
|
205
|
+
# called without reassigning.
|
|
206
|
+
perm = self._list[:]
|
|
207
|
+
directions = self._directions[:]
|
|
208
|
+
|
|
209
|
+
# Assume that the element to move is n (which will be in most cases).
|
|
210
|
+
selected_elt = self._n
|
|
211
|
+
xi = perm.index(selected_elt)
|
|
212
|
+
direction = directions[xi]
|
|
213
|
+
|
|
214
|
+
# If this element has null direction, find the largest whose is
|
|
215
|
+
# non-null.
|
|
216
|
+
if direction == 0:
|
|
217
|
+
xi = self.__idx_largest_element_non_zero_direction(perm,
|
|
218
|
+
directions)
|
|
219
|
+
if xi is None:
|
|
220
|
+
# We have created every permutation. Detected when all elements
|
|
221
|
+
# have null direction.
|
|
222
|
+
return False
|
|
223
|
+
direction = directions[xi]
|
|
224
|
+
selected_elt = perm[xi]
|
|
225
|
+
|
|
226
|
+
new_pos = xi + direction
|
|
227
|
+
|
|
228
|
+
# Proceed to transpose elements and corresponding directions.
|
|
229
|
+
perm[xi], perm[new_pos] = perm[new_pos], perm[xi]
|
|
230
|
+
directions[xi], directions[new_pos] = \
|
|
231
|
+
directions[new_pos], directions[xi]
|
|
232
|
+
|
|
233
|
+
# If the transposition results in the largest element being on one edge
|
|
234
|
+
# or if the following element in its direction is greater than it, then
|
|
235
|
+
# then set its direction to 0
|
|
236
|
+
if (new_pos == 0 or new_pos == self._n - 1 or
|
|
237
|
+
perm[new_pos + direction] > selected_elt):
|
|
238
|
+
directions[new_pos] = 0
|
|
239
|
+
|
|
240
|
+
# After each permutation, update each element's direction. If
|
|
241
|
+
# one element is greater than selected element, change its
|
|
242
|
+
# direction towards the selected element. This loops has no
|
|
243
|
+
# reason to be if selected element is n and this will be the
|
|
244
|
+
# case most of the time.
|
|
245
|
+
if selected_elt != self._n:
|
|
246
|
+
for i in range(self._n):
|
|
247
|
+
if perm[i] > selected_elt:
|
|
248
|
+
if i < new_pos:
|
|
249
|
+
directions[i] = 1
|
|
250
|
+
if i > new_pos:
|
|
251
|
+
directions[i] = -1
|
|
252
|
+
|
|
253
|
+
return SJT(perm, directions)
|
|
254
|
+
|
|
255
|
+
__next__ = next
|