passagemath-combinat 10.6.31rc3__cp314-cp314-macosx_13_0_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.
Potentially problematic release.
This version of passagemath-combinat might be problematic. Click here for more details.
- passagemath_combinat-10.6.31rc3.dist-info/METADATA +160 -0
- passagemath_combinat-10.6.31rc3.dist-info/RECORD +399 -0
- passagemath_combinat-10.6.31rc3.dist-info/WHEEL +6 -0
- passagemath_combinat-10.6.31rc3.dist-info/top_level.txt +2 -0
- passagemath_combinat.dylibs/libgmp.10.dylib +0 -0
- passagemath_combinat.dylibs/libsymmetrica.3.0.0.dylib +0 -0
- sage/algebras/affine_nil_temperley_lieb.py +263 -0
- sage/algebras/all.py +25 -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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.so +0 -0
- sage/combinat/debruijn_sequence.pyx +355 -0
- sage/combinat/decorated_permutation.py +270 -0
- sage/combinat/degree_sequences.cpython-314-darwin.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-darwin.so +0 -0
- sage/combinat/expnums.pyx +148 -0
- sage/combinat/fast_vector_partitions.cpython-314-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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 +765 -0
- sage/combinat/words/word_char.cpython-314-darwin.so +0 -0
- sage/combinat/words/word_char.pyx +847 -0
- sage/combinat/words/word_datatypes.cpython-314-darwin.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-darwin.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-darwin.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-darwin.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-darwin.so +0 -0
- sage/sat/solvers/satsolver.pxd +3 -0
- sage/sat/solvers/satsolver.pyx +405 -0
|
@@ -0,0 +1,518 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.graphs sage.modules
|
|
3
|
+
r"""
|
|
4
|
+
Affine factorization crystal of type `A`
|
|
5
|
+
"""
|
|
6
|
+
#*****************************************************************************
|
|
7
|
+
# Copyright (C) 2014 Anne Schilling <anne at math.ucdavis.edu>
|
|
8
|
+
#
|
|
9
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
10
|
+
# http://www.gnu.org/licenses/
|
|
11
|
+
#******************************************************************************
|
|
12
|
+
|
|
13
|
+
from sage.misc.lazy_attribute import lazy_attribute
|
|
14
|
+
from sage.misc.lazy_import import lazy_import
|
|
15
|
+
from sage.structure.parent import Parent
|
|
16
|
+
from sage.structure.element_wrapper import ElementWrapper
|
|
17
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
18
|
+
from sage.categories.classical_crystals import ClassicalCrystals
|
|
19
|
+
from sage.categories.crystals import CrystalMorphism
|
|
20
|
+
from sage.categories.enumerated_sets import EnumeratedSets
|
|
21
|
+
from sage.categories.homset import Hom
|
|
22
|
+
from sage.combinat.root_system.cartan_type import CartanType
|
|
23
|
+
from sage.combinat.rsk import RSK
|
|
24
|
+
|
|
25
|
+
lazy_import('sage.combinat.root_system.weyl_group', 'WeylGroup')
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class AffineFactorizationCrystal(UniqueRepresentation, Parent):
|
|
29
|
+
r"""
|
|
30
|
+
The crystal on affine factorizations with a cut-point, as introduced
|
|
31
|
+
by [MS2015]_.
|
|
32
|
+
|
|
33
|
+
INPUT:
|
|
34
|
+
|
|
35
|
+
- ``w`` -- an element in an (affine) Weyl group or a skew shape of `k`-bounded partitions (if `k` was specified)
|
|
36
|
+
|
|
37
|
+
- ``n`` -- the number of factors in the factorization
|
|
38
|
+
|
|
39
|
+
- ``x`` -- (default: ``None``) the cut point; if not specified it is determined as the minimal missing residue in ``w``
|
|
40
|
+
|
|
41
|
+
- ``k`` -- (default: ``None``) positive integer, specifies that ``w`` is `k`-bounded or a `k+1`-core when specified
|
|
42
|
+
|
|
43
|
+
EXAMPLES::
|
|
44
|
+
|
|
45
|
+
sage: W = WeylGroup(['A',3,1], prefix='s')
|
|
46
|
+
sage: w = W.from_reduced_word([2,3,2,1])
|
|
47
|
+
sage: B = crystals.AffineFactorization(w,3); B
|
|
48
|
+
Crystal on affine factorizations of type A2 associated to s2*s3*s2*s1
|
|
49
|
+
sage: B.list()
|
|
50
|
+
[(1, s2, s3*s2*s1),
|
|
51
|
+
(1, s3*s2, s3*s1),
|
|
52
|
+
(1, s3*s2*s1, s3),
|
|
53
|
+
(s3, s2, s3*s1),
|
|
54
|
+
(s3, s2*s1, s3),
|
|
55
|
+
(s3*s2, s1, s3),
|
|
56
|
+
(s3*s2*s1, 1, s3),
|
|
57
|
+
(s3*s2*s1, s3, 1),
|
|
58
|
+
(s3*s2, 1, s3*s1),
|
|
59
|
+
(s3*s2, s3, s1),
|
|
60
|
+
(s3*s2, s3*s1, 1),
|
|
61
|
+
(s2, 1, s3*s2*s1),
|
|
62
|
+
(s2, s3, s2*s1),
|
|
63
|
+
(s2, s3*s2, s1),
|
|
64
|
+
(s2, s3*s2*s1, 1)]
|
|
65
|
+
|
|
66
|
+
We can also access the crystal by specifying a skew shape in terms of `k`-bounded partitions::
|
|
67
|
+
|
|
68
|
+
sage: crystals.AffineFactorization([[3,1,1],[1]], 3, k=3)
|
|
69
|
+
Crystal on affine factorizations of type A2 associated to s2*s3*s2*s1
|
|
70
|
+
|
|
71
|
+
We can compute the highest weight elements::
|
|
72
|
+
|
|
73
|
+
sage: hw = [w for w in B if w.is_highest_weight()]
|
|
74
|
+
sage: hw
|
|
75
|
+
[(1, s2, s3*s2*s1)]
|
|
76
|
+
sage: hw[0].weight()
|
|
77
|
+
(3, 1, 0)
|
|
78
|
+
|
|
79
|
+
And show that this crystal is isomorphic to the tableau model of the same weight::
|
|
80
|
+
|
|
81
|
+
sage: C = crystals.Tableaux(['A',2],shape=[3,1])
|
|
82
|
+
sage: GC = C.digraph()
|
|
83
|
+
sage: GB = B.digraph()
|
|
84
|
+
sage: GC.is_isomorphic(GB, edge_labels=True)
|
|
85
|
+
True
|
|
86
|
+
|
|
87
|
+
The crystal operators themselves move elements between adjacent factors::
|
|
88
|
+
|
|
89
|
+
sage: b = hw[0];b
|
|
90
|
+
(1, s2, s3*s2*s1)
|
|
91
|
+
sage: b.f(1)
|
|
92
|
+
(1, s3*s2, s3*s1)
|
|
93
|
+
|
|
94
|
+
The cut point `x` is not supposed to occur in the reduced words for `w`::
|
|
95
|
+
|
|
96
|
+
sage: B = crystals.AffineFactorization([[3,2],[2]],4,x=0,k=3)
|
|
97
|
+
Traceback (most recent call last):
|
|
98
|
+
...
|
|
99
|
+
ValueError: x cannot be in reduced word of s0*s3*s2
|
|
100
|
+
"""
|
|
101
|
+
@staticmethod
|
|
102
|
+
def __classcall_private__(cls, w, n, x=None, k=None):
|
|
103
|
+
r"""
|
|
104
|
+
Classcall to mend the input.
|
|
105
|
+
|
|
106
|
+
TESTS::
|
|
107
|
+
|
|
108
|
+
sage: A = crystals.AffineFactorization([[3,1],[1]], 4, k=3); A
|
|
109
|
+
Crystal on affine factorizations of type A3 associated to s3*s2*s1
|
|
110
|
+
sage: AC = crystals.AffineFactorization([Core([4,1],4),Core([1],4)], 4, k=3)
|
|
111
|
+
sage: AC is A
|
|
112
|
+
True
|
|
113
|
+
"""
|
|
114
|
+
if k is not None:
|
|
115
|
+
from sage.combinat.core import Core
|
|
116
|
+
from sage.combinat.partition import Partition
|
|
117
|
+
W = WeylGroup(['A',k,1], prefix='s')
|
|
118
|
+
if isinstance(w[0], Core):
|
|
119
|
+
w = [w[0].to_bounded_partition(), w[1].to_bounded_partition()]
|
|
120
|
+
else:
|
|
121
|
+
w = [Partition(w[0]), Partition(w[1])]
|
|
122
|
+
w0 = W.from_reduced_word(w[0].from_kbounded_to_reduced_word(k))
|
|
123
|
+
w1 = W.from_reduced_word(w[1].from_kbounded_to_reduced_word(k))
|
|
124
|
+
w = w0*(w1.inverse())
|
|
125
|
+
return super().__classcall__(cls, w, n, x)
|
|
126
|
+
|
|
127
|
+
def __init__(self, w, n, x=None):
|
|
128
|
+
r"""
|
|
129
|
+
EXAMPLES::
|
|
130
|
+
|
|
131
|
+
sage: B = crystals.AffineFactorization([[3,2],[2]],4,x=0,k=3)
|
|
132
|
+
Traceback (most recent call last):
|
|
133
|
+
...
|
|
134
|
+
ValueError: x cannot be in reduced word of s0*s3*s2
|
|
135
|
+
|
|
136
|
+
sage: B = crystals.AffineFactorization([[3,2],[2]],4,k=3)
|
|
137
|
+
sage: B.x
|
|
138
|
+
1
|
|
139
|
+
sage: B.w
|
|
140
|
+
s0*s3*s2
|
|
141
|
+
sage: B.k
|
|
142
|
+
3
|
|
143
|
+
sage: B.n
|
|
144
|
+
4
|
|
145
|
+
|
|
146
|
+
TESTS::
|
|
147
|
+
|
|
148
|
+
sage: W = WeylGroup(['A',3,1], prefix='s')
|
|
149
|
+
sage: w = W.from_reduced_word([2,3,2,1])
|
|
150
|
+
sage: B = crystals.AffineFactorization(w,3)
|
|
151
|
+
sage: TestSuite(B).run() # long time
|
|
152
|
+
"""
|
|
153
|
+
Parent.__init__(self, category=ClassicalCrystals())
|
|
154
|
+
self.n = n
|
|
155
|
+
self.k = w.parent().n-1
|
|
156
|
+
self.w = w
|
|
157
|
+
cartan_type = CartanType(['A',n-1])
|
|
158
|
+
self._cartan_type = cartan_type
|
|
159
|
+
from sage.combinat.sf.sf import SymmetricFunctions
|
|
160
|
+
from sage.rings.rational_field import QQ
|
|
161
|
+
Sym = SymmetricFunctions(QQ)
|
|
162
|
+
s = Sym.schur()
|
|
163
|
+
support = s(w.stanley_symmetric_function()).support()
|
|
164
|
+
support = [ [0]*(n-len(mu))+[mu[len(mu)-i-1] for i in range(len(mu))] for mu in support]
|
|
165
|
+
generators = [tuple(p) for mu in support for p in affine_factorizations(w,n,mu)]
|
|
166
|
+
#generators = [tuple(p) for p in affine_factorizations(w, n)]
|
|
167
|
+
self.module_generators = [self(t) for t in generators]
|
|
168
|
+
if x is None:
|
|
169
|
+
if generators:
|
|
170
|
+
x = min( set(range(self.k+1)).difference(set(
|
|
171
|
+
sum([i.reduced_word() for i in generators[0]],[]))))
|
|
172
|
+
else:
|
|
173
|
+
x = 0
|
|
174
|
+
if x in set(w.reduced_word()):
|
|
175
|
+
raise ValueError("x cannot be in reduced word of {}".format(w))
|
|
176
|
+
self.x = x
|
|
177
|
+
|
|
178
|
+
def _repr_(self):
|
|
179
|
+
r"""
|
|
180
|
+
EXAMPLES::
|
|
181
|
+
|
|
182
|
+
sage: W = WeylGroup(['A',3,1], prefix='s')
|
|
183
|
+
sage: w = W.from_reduced_word([3,2,1])
|
|
184
|
+
sage: crystals.AffineFactorization(w,4)
|
|
185
|
+
Crystal on affine factorizations of type A3 associated to s3*s2*s1
|
|
186
|
+
|
|
187
|
+
sage: crystals.AffineFactorization([[3,1],[1]], 4, k=3)
|
|
188
|
+
Crystal on affine factorizations of type A3 associated to s3*s2*s1
|
|
189
|
+
"""
|
|
190
|
+
return "Crystal on affine factorizations of type A{} associated to {}".format(self.n-1, self.w)
|
|
191
|
+
|
|
192
|
+
# temporary workaround while an_element is overridden by Parent
|
|
193
|
+
_an_element_ = EnumeratedSets.ParentMethods._an_element_
|
|
194
|
+
|
|
195
|
+
@lazy_attribute
|
|
196
|
+
def _tableaux_isomorphism(self):
|
|
197
|
+
"""
|
|
198
|
+
Return the isomorphism from ``self`` to the tableaux model.
|
|
199
|
+
|
|
200
|
+
EXAMPLES::
|
|
201
|
+
|
|
202
|
+
sage: W = WeylGroup(['A',3,1], prefix='s')
|
|
203
|
+
sage: w = W.from_reduced_word([3,2,1])
|
|
204
|
+
sage: B = crystals.AffineFactorization(w,4)
|
|
205
|
+
sage: B._tableaux_isomorphism
|
|
206
|
+
['A', 3] Crystal morphism:
|
|
207
|
+
From: Crystal on affine factorizations of type A3 associated to s3*s2*s1
|
|
208
|
+
To: The crystal of tableaux of type ['A', 3] and shape(s) [[3]]
|
|
209
|
+
|
|
210
|
+
sage: W = WeylGroup(['A',3,1], prefix='s')
|
|
211
|
+
sage: w = W.from_reduced_word([2,1,3,2])
|
|
212
|
+
sage: B = crystals.AffineFactorization(w,3)
|
|
213
|
+
sage: B._tableaux_isomorphism
|
|
214
|
+
['A', 2] Crystal morphism:
|
|
215
|
+
From: Crystal on affine factorizations of type A2 associated to s2*s3*s1*s2
|
|
216
|
+
To: The crystal of tableaux of type ['A', 2] and shape(s) [[2, 2]]
|
|
217
|
+
"""
|
|
218
|
+
# Constructing the tableaux crystal
|
|
219
|
+
from sage.combinat.crystals.tensor_product import CrystalOfTableaux
|
|
220
|
+
|
|
221
|
+
def mg_to_shape(mg):
|
|
222
|
+
l = list(mg.weight().to_vector())
|
|
223
|
+
while l and l[-1] == 0:
|
|
224
|
+
l.pop()
|
|
225
|
+
return l
|
|
226
|
+
sh = [mg_to_shape(mg) for mg in self.highest_weight_vectors()]
|
|
227
|
+
C = CrystalOfTableaux(self.cartan_type(), shapes=sh)
|
|
228
|
+
phi = FactorizationToTableaux(Hom(self, C, category=self.category()))
|
|
229
|
+
phi.register_as_coercion()
|
|
230
|
+
return phi
|
|
231
|
+
|
|
232
|
+
class Element(ElementWrapper):
|
|
233
|
+
|
|
234
|
+
def e(self, i):
|
|
235
|
+
r"""
|
|
236
|
+
Return the action of `e_i` on ``self``.
|
|
237
|
+
|
|
238
|
+
EXAMPLES::
|
|
239
|
+
|
|
240
|
+
sage: B = crystals.AffineFactorization([[3,1],[1]], 4, k=3)
|
|
241
|
+
sage: W = B.w.parent()
|
|
242
|
+
sage: t = B((W.one(),W.one(),W.from_reduced_word([3]),W.from_reduced_word([2,1]))); t
|
|
243
|
+
(1, 1, s3, s2*s1)
|
|
244
|
+
sage: t.e(1)
|
|
245
|
+
(1, 1, 1, s3*s2*s1)
|
|
246
|
+
"""
|
|
247
|
+
if i not in self.index_set():
|
|
248
|
+
raise ValueError("i must be in the index set")
|
|
249
|
+
b = self.bracketing(i)
|
|
250
|
+
if not b[0]:
|
|
251
|
+
return None
|
|
252
|
+
W = self.parent().w.parent()
|
|
253
|
+
x = self.parent().x
|
|
254
|
+
k = self.parent().k
|
|
255
|
+
n = self.parent().n
|
|
256
|
+
a = min(b[0])
|
|
257
|
+
left = [j for j in (self.value[n-i-1]).reduced_word() if j != (a+x) % (k+1)]
|
|
258
|
+
right = [(j-x) % (k+1) for j in (self.value[n-i]).reduced_word()]
|
|
259
|
+
m = max([j for j in range(a) if (j+x) % (k+1) not in left])
|
|
260
|
+
right += [m+1]
|
|
261
|
+
right.sort(reverse=True)
|
|
262
|
+
right = [(j+x) % (k+1) for j in right]
|
|
263
|
+
t = [self.value[j] for j in range(n-i-1)] + [W.from_reduced_word(left)] + [W.from_reduced_word(right)] + [self.value[j] for j in range(n-i+1,n)]
|
|
264
|
+
return self.parent()(tuple(t))
|
|
265
|
+
|
|
266
|
+
def f(self, i):
|
|
267
|
+
r"""
|
|
268
|
+
Return the action of `f_i` on ``self``.
|
|
269
|
+
|
|
270
|
+
EXAMPLES::
|
|
271
|
+
|
|
272
|
+
sage: B = crystals.AffineFactorization([[3,1],[1]], 4, k=3)
|
|
273
|
+
sage: W = B.w.parent()
|
|
274
|
+
sage: t = B((W.one(),W.one(),W.from_reduced_word([3]),W.from_reduced_word([2,1]))); t
|
|
275
|
+
(1, 1, s3, s2*s1)
|
|
276
|
+
sage: t.f(2)
|
|
277
|
+
(1, s3, 1, s2*s1)
|
|
278
|
+
sage: t.f(1)
|
|
279
|
+
(1, 1, s3*s2, s1)
|
|
280
|
+
"""
|
|
281
|
+
if i not in self.index_set():
|
|
282
|
+
raise ValueError("i must be in the index set")
|
|
283
|
+
b = self.bracketing(i)
|
|
284
|
+
if not b[1]:
|
|
285
|
+
return None
|
|
286
|
+
W = self.parent().w.parent()
|
|
287
|
+
x = self.parent().x
|
|
288
|
+
k = self.parent().k
|
|
289
|
+
n = self.parent().n
|
|
290
|
+
a = max(b[1])
|
|
291
|
+
right = [j for j in (self.value[n-i]).reduced_word() if j != (a+x) % (k+1)]
|
|
292
|
+
left = [(j-x) % (k+1) for j in (self.value[n-i-1]).reduced_word()]
|
|
293
|
+
m = min([j for j in range(a+1,k+2) if (j+x) % (k+1) not in right])
|
|
294
|
+
left += [m-1]
|
|
295
|
+
left.sort(reverse=True)
|
|
296
|
+
left = [(j+x) % (k+1) for j in left]
|
|
297
|
+
t = [self.value[j] for j in range(n-i-1)] + [W.from_reduced_word(left)] + [W.from_reduced_word(right)] + [self.value[j] for j in range(n-i+1,n)]
|
|
298
|
+
return self.parent()(tuple(t))
|
|
299
|
+
|
|
300
|
+
def bracketing(self, i):
|
|
301
|
+
r"""
|
|
302
|
+
Removes all bracketed letters between `i`-th and `i+1`-th entry.
|
|
303
|
+
|
|
304
|
+
EXAMPLES::
|
|
305
|
+
|
|
306
|
+
sage: B = crystals.AffineFactorization([[3,1],[1]], 3, k=3, x=4)
|
|
307
|
+
sage: W = B.w.parent()
|
|
308
|
+
sage: t = B((W.one(),W.from_reduced_word([3]),W.from_reduced_word([2,1]))); t
|
|
309
|
+
(1, s3, s2*s1)
|
|
310
|
+
sage: t.bracketing(1)
|
|
311
|
+
[[3], [2, 1]]
|
|
312
|
+
"""
|
|
313
|
+
n = self.parent().n
|
|
314
|
+
x = self.parent().x
|
|
315
|
+
k = self.parent().k
|
|
316
|
+
right = (self.value[n-i]).reduced_word()
|
|
317
|
+
left = (self.value[n-i-1]).reduced_word()
|
|
318
|
+
right_n = [(j-x) % (k+1) for j in right]
|
|
319
|
+
left_n = [(j-x) % (k+1) for j in left]
|
|
320
|
+
left_unbracketed = []
|
|
321
|
+
while left_n:
|
|
322
|
+
m = max(left_n)
|
|
323
|
+
left_n.remove(m)
|
|
324
|
+
l = [j for j in right_n if j > m]
|
|
325
|
+
if l:
|
|
326
|
+
right_n.remove(min(l))
|
|
327
|
+
else:
|
|
328
|
+
left_unbracketed += [m]
|
|
329
|
+
return [list(left_unbracketed), list(right_n)]
|
|
330
|
+
|
|
331
|
+
def to_tableau(self):
|
|
332
|
+
"""
|
|
333
|
+
Return the tableau representation of ``self``.
|
|
334
|
+
|
|
335
|
+
Uses the recording tableau of a minor variation of
|
|
336
|
+
Edelman-Greene insertion. See Theorem 4.11 in [MS2015]_.
|
|
337
|
+
|
|
338
|
+
EXAMPLES::
|
|
339
|
+
|
|
340
|
+
sage: W = WeylGroup(['A',3,1], prefix='s')
|
|
341
|
+
sage: w = W.from_reduced_word([2,1,3,2])
|
|
342
|
+
sage: B = crystals.AffineFactorization(w,3)
|
|
343
|
+
sage: for x in B:
|
|
344
|
+
....: x
|
|
345
|
+
....: x.to_tableau().pp()
|
|
346
|
+
(1, s2*s1, s3*s2)
|
|
347
|
+
1 1
|
|
348
|
+
2 2
|
|
349
|
+
(s2, s1, s3*s2)
|
|
350
|
+
1 1
|
|
351
|
+
2 3
|
|
352
|
+
(s2, s3*s1, s2)
|
|
353
|
+
1 2
|
|
354
|
+
2 3
|
|
355
|
+
(s2*s1, 1, s3*s2)
|
|
356
|
+
1 1
|
|
357
|
+
3 3
|
|
358
|
+
(s2*s1, s3, s2)
|
|
359
|
+
1 2
|
|
360
|
+
3 3
|
|
361
|
+
(s2*s1, s3*s2, 1)
|
|
362
|
+
2 2
|
|
363
|
+
3 3
|
|
364
|
+
"""
|
|
365
|
+
return self.parent()._tableaux_isomorphism(self)
|
|
366
|
+
|
|
367
|
+
|
|
368
|
+
def affine_factorizations(w, l, weight=None):
|
|
369
|
+
r"""
|
|
370
|
+
Return all factorizations of `w` into `l` factors or of weight ``weight``.
|
|
371
|
+
|
|
372
|
+
INPUT:
|
|
373
|
+
|
|
374
|
+
- ``w`` -- an (affine) permutation or element of the (affine) Weyl group
|
|
375
|
+
|
|
376
|
+
- ``l`` -- nonnegative integer
|
|
377
|
+
|
|
378
|
+
- ``weight`` -- (default: ``None``) tuple of nonnegative integers
|
|
379
|
+
specifying the length of the factors
|
|
380
|
+
|
|
381
|
+
EXAMPLES::
|
|
382
|
+
|
|
383
|
+
sage: W = WeylGroup(['A',3,1], prefix='s')
|
|
384
|
+
sage: w = W.from_reduced_word([3,2,3,1,0,1])
|
|
385
|
+
sage: from sage.combinat.crystals.affine_factorization import affine_factorizations
|
|
386
|
+
sage: affine_factorizations(w,4)
|
|
387
|
+
[[s2, s3, s0, s2*s1*s0],
|
|
388
|
+
[s2, s3, s2*s0, s1*s0],
|
|
389
|
+
[s2, s3, s2*s1*s0, s1],
|
|
390
|
+
[s2, s3*s2, s0, s1*s0],
|
|
391
|
+
[s2, s3*s2, s1*s0, s1],
|
|
392
|
+
[s2, s3*s2*s1, s0, s1],
|
|
393
|
+
[s3*s2, s3, s0, s1*s0],
|
|
394
|
+
[s3*s2, s3, s1*s0, s1],
|
|
395
|
+
[s3*s2, s3*s1, s0, s1],
|
|
396
|
+
[s3*s2*s1, s3, s0, s1]]
|
|
397
|
+
|
|
398
|
+
sage: W = WeylGroup(['A',2], prefix='s')
|
|
399
|
+
sage: w0 = W.long_element()
|
|
400
|
+
sage: affine_factorizations(w0,3)
|
|
401
|
+
[[1, s1, s2*s1],
|
|
402
|
+
[1, s2*s1, s2],
|
|
403
|
+
[s1, 1, s2*s1],
|
|
404
|
+
[s1, s2, s1],
|
|
405
|
+
[s1, s2*s1, 1],
|
|
406
|
+
[s2, s1, s2],
|
|
407
|
+
[s2*s1, 1, s2],
|
|
408
|
+
[s2*s1, s2, 1]]
|
|
409
|
+
sage: affine_factorizations(w0,3,(0,1,2))
|
|
410
|
+
[[1, s1, s2*s1]]
|
|
411
|
+
sage: affine_factorizations(w0,3,(1,1,1))
|
|
412
|
+
[[s1, s2, s1], [s2, s1, s2]]
|
|
413
|
+
sage: W = WeylGroup(['A',3], prefix='s')
|
|
414
|
+
sage: w0 = W.long_element()
|
|
415
|
+
sage: affine_factorizations(w0,6,(1,1,1,1,1,1)) # long time
|
|
416
|
+
[[s1, s2, s1, s3, s2, s1],
|
|
417
|
+
[s1, s2, s3, s1, s2, s1],
|
|
418
|
+
[s1, s2, s3, s2, s1, s2],
|
|
419
|
+
[s1, s3, s2, s1, s3, s2],
|
|
420
|
+
[s1, s3, s2, s3, s1, s2],
|
|
421
|
+
[s2, s1, s2, s3, s2, s1],
|
|
422
|
+
[s2, s1, s3, s2, s1, s3],
|
|
423
|
+
[s2, s1, s3, s2, s3, s1],
|
|
424
|
+
[s2, s3, s1, s2, s1, s3],
|
|
425
|
+
[s2, s3, s1, s2, s3, s1],
|
|
426
|
+
[s2, s3, s2, s1, s2, s3],
|
|
427
|
+
[s3, s1, s2, s1, s3, s2],
|
|
428
|
+
[s3, s1, s2, s3, s1, s2],
|
|
429
|
+
[s3, s2, s1, s2, s3, s2],
|
|
430
|
+
[s3, s2, s1, s3, s2, s3],
|
|
431
|
+
[s3, s2, s3, s1, s2, s3]]
|
|
432
|
+
sage: affine_factorizations(w0,6,(0,0,0,1,2,3))
|
|
433
|
+
[[1, 1, 1, s1, s2*s1, s3*s2*s1]]
|
|
434
|
+
"""
|
|
435
|
+
if weight is None:
|
|
436
|
+
if l == 0:
|
|
437
|
+
if w.is_one():
|
|
438
|
+
return [[]]
|
|
439
|
+
else:
|
|
440
|
+
return []
|
|
441
|
+
else:
|
|
442
|
+
return [[u]+p for (u,v) in w.left_pieri_factorizations() for p in affine_factorizations(v,l-1) ]
|
|
443
|
+
else:
|
|
444
|
+
if l != len(weight):
|
|
445
|
+
return []
|
|
446
|
+
if l == 0:
|
|
447
|
+
if w.is_one():
|
|
448
|
+
return [[]]
|
|
449
|
+
else:
|
|
450
|
+
return []
|
|
451
|
+
else:
|
|
452
|
+
return [[u]+p for (u,v) in w.left_pieri_factorizations(max_length=weight[0]) if u.length() == weight[0]
|
|
453
|
+
for p in affine_factorizations(v,l-1,weight[1:]) ]
|
|
454
|
+
|
|
455
|
+
#####################################################################
|
|
456
|
+
## Crystal isomorphisms
|
|
457
|
+
|
|
458
|
+
|
|
459
|
+
class FactorizationToTableaux(CrystalMorphism):
|
|
460
|
+
def _call_(self, x):
|
|
461
|
+
"""
|
|
462
|
+
Return the image of ``x`` under ``self``.
|
|
463
|
+
|
|
464
|
+
TESTS::
|
|
465
|
+
|
|
466
|
+
sage: W = WeylGroup(['A',3,1], prefix='s')
|
|
467
|
+
sage: w = W.from_reduced_word([2,1,3,2])
|
|
468
|
+
sage: B = crystals.AffineFactorization(w,3)
|
|
469
|
+
sage: phi = B._tableaux_isomorphism
|
|
470
|
+
sage: [phi(b) for b in B]
|
|
471
|
+
[[[1, 1], [2, 2]],
|
|
472
|
+
[[1, 1], [2, 3]],
|
|
473
|
+
[[1, 2], [2, 3]],
|
|
474
|
+
[[1, 1], [3, 3]],
|
|
475
|
+
[[1, 2], [3, 3]],
|
|
476
|
+
[[2, 2], [3, 3]]]
|
|
477
|
+
"""
|
|
478
|
+
p = []
|
|
479
|
+
q = []
|
|
480
|
+
for i, factor in enumerate(reversed(x.value)):
|
|
481
|
+
word = factor.reduced_word()
|
|
482
|
+
p += [i + 1] * len(word)
|
|
483
|
+
# We sort for those pesky commutative elements
|
|
484
|
+
# The word is most likely in reverse order to begin with
|
|
485
|
+
q += sorted(reversed(word))
|
|
486
|
+
C = self.codomain()
|
|
487
|
+
return C(RSK(p, q, insertion=RSK.rules.EG)[1])
|
|
488
|
+
|
|
489
|
+
def is_isomorphism(self) -> bool:
|
|
490
|
+
"""
|
|
491
|
+
Return ``True`` as this is an isomorphism.
|
|
492
|
+
|
|
493
|
+
EXAMPLES::
|
|
494
|
+
|
|
495
|
+
sage: W = WeylGroup(['A',3,1], prefix='s')
|
|
496
|
+
sage: w = W.from_reduced_word([2,1,3,2])
|
|
497
|
+
sage: B = crystals.AffineFactorization(w,3)
|
|
498
|
+
sage: phi = B._tableaux_isomorphism
|
|
499
|
+
sage: phi.is_isomorphism()
|
|
500
|
+
True
|
|
501
|
+
|
|
502
|
+
TESTS::
|
|
503
|
+
|
|
504
|
+
sage: W = WeylGroup(['A',4,1], prefix='s')
|
|
505
|
+
sage: w = W.from_reduced_word([2,1,3,2,4,3,2,1])
|
|
506
|
+
sage: B = crystals.AffineFactorization(w, 4) # long time
|
|
507
|
+
sage: phi = B._tableaux_isomorphism # long time
|
|
508
|
+
sage: all(phi(b).e(i) == phi(b.e(i)) and # long time
|
|
509
|
+
....: phi(b).f(i) == phi(b.f(i))
|
|
510
|
+
....: for b in B for i in B.index_set())
|
|
511
|
+
True
|
|
512
|
+
sage: set(phi(b) for b in B) == set(phi.codomain()) # long time
|
|
513
|
+
True
|
|
514
|
+
"""
|
|
515
|
+
return True
|
|
516
|
+
|
|
517
|
+
is_embedding = is_isomorphism
|
|
518
|
+
is_surjective = is_isomorphism
|