passagemath-combinat 10.6.42__cp314-cp314-musllinux_1_2_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- passagemath_combinat/__init__.py +3 -0
- passagemath_combinat-10.6.42.dist-info/METADATA +160 -0
- passagemath_combinat-10.6.42.dist-info/RECORD +400 -0
- passagemath_combinat-10.6.42.dist-info/WHEEL +5 -0
- passagemath_combinat-10.6.42.dist-info/top_level.txt +3 -0
- passagemath_combinat.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
- passagemath_combinat.libs/libsymmetrica-81fe8739.so.3.0.0 +0 -0
- sage/algebras/affine_nil_temperley_lieb.py +263 -0
- sage/algebras/all.py +24 -0
- sage/algebras/all__sagemath_combinat.py +35 -0
- sage/algebras/askey_wilson.py +935 -0
- sage/algebras/associated_graded.py +345 -0
- sage/algebras/cellular_basis.py +350 -0
- sage/algebras/cluster_algebra.py +2766 -0
- sage/algebras/down_up_algebra.py +860 -0
- sage/algebras/free_algebra.py +1698 -0
- sage/algebras/free_algebra_element.py +345 -0
- sage/algebras/free_algebra_quotient.py +405 -0
- sage/algebras/free_algebra_quotient_element.py +295 -0
- sage/algebras/free_zinbiel_algebra.py +885 -0
- sage/algebras/hall_algebra.py +783 -0
- sage/algebras/hecke_algebras/all.py +4 -0
- sage/algebras/hecke_algebras/ariki_koike_algebra.py +1796 -0
- sage/algebras/hecke_algebras/ariki_koike_specht_modules.py +475 -0
- sage/algebras/hecke_algebras/cubic_hecke_algebra.py +3520 -0
- sage/algebras/hecke_algebras/cubic_hecke_base_ring.py +1473 -0
- sage/algebras/hecke_algebras/cubic_hecke_matrix_rep.py +1079 -0
- sage/algebras/iwahori_hecke_algebra.py +3095 -0
- sage/algebras/jordan_algebra.py +1773 -0
- sage/algebras/lie_conformal_algebras/abelian_lie_conformal_algebra.py +113 -0
- sage/algebras/lie_conformal_algebras/affine_lie_conformal_algebra.py +156 -0
- sage/algebras/lie_conformal_algebras/all.py +18 -0
- sage/algebras/lie_conformal_algebras/bosonic_ghosts_lie_conformal_algebra.py +134 -0
- sage/algebras/lie_conformal_algebras/examples.py +43 -0
- sage/algebras/lie_conformal_algebras/fermionic_ghosts_lie_conformal_algebra.py +131 -0
- sage/algebras/lie_conformal_algebras/finitely_freely_generated_lca.py +139 -0
- sage/algebras/lie_conformal_algebras/free_bosons_lie_conformal_algebra.py +174 -0
- sage/algebras/lie_conformal_algebras/free_fermions_lie_conformal_algebra.py +167 -0
- sage/algebras/lie_conformal_algebras/freely_generated_lie_conformal_algebra.py +107 -0
- sage/algebras/lie_conformal_algebras/graded_lie_conformal_algebra.py +135 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra.py +353 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra_element.py +236 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_basis.py +78 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_structure_coefs.py +328 -0
- sage/algebras/lie_conformal_algebras/n2_lie_conformal_algebra.py +117 -0
- sage/algebras/lie_conformal_algebras/neveu_schwarz_lie_conformal_algebra.py +86 -0
- sage/algebras/lie_conformal_algebras/virasoro_lie_conformal_algebra.py +82 -0
- sage/algebras/lie_conformal_algebras/weyl_lie_conformal_algebra.py +205 -0
- sage/algebras/nil_coxeter_algebra.py +191 -0
- sage/algebras/q_commuting_polynomials.py +673 -0
- sage/algebras/q_system.py +608 -0
- sage/algebras/quantum_clifford.py +959 -0
- sage/algebras/quantum_groups/ace_quantum_onsager.py +693 -0
- sage/algebras/quantum_groups/all.py +9 -0
- sage/algebras/quantum_groups/fock_space.py +2219 -0
- sage/algebras/quantum_groups/q_numbers.py +207 -0
- sage/algebras/quantum_groups/quantum_group_gap.py +2695 -0
- sage/algebras/quantum_groups/representations.py +591 -0
- sage/algebras/quantum_matrix_coordinate_algebra.py +1006 -0
- sage/algebras/quantum_oscillator.py +623 -0
- sage/algebras/quaternion_algebra.py +20 -0
- sage/algebras/quaternion_algebra_element.py +55 -0
- sage/algebras/rational_cherednik_algebra.py +525 -0
- sage/algebras/schur_algebra.py +670 -0
- sage/algebras/shuffle_algebra.py +1011 -0
- sage/algebras/splitting_algebra.py +779 -0
- sage/algebras/tensor_algebra.py +709 -0
- sage/algebras/yangian.py +1082 -0
- sage/algebras/yokonuma_hecke_algebra.py +1018 -0
- sage/all__sagemath_combinat.py +35 -0
- sage/combinat/SJT.py +255 -0
- sage/combinat/affine_permutation.py +2405 -0
- sage/combinat/algebraic_combinatorics.py +55 -0
- sage/combinat/all.py +53 -0
- sage/combinat/all__sagemath_combinat.py +195 -0
- sage/combinat/alternating_sign_matrix.py +2063 -0
- sage/combinat/baxter_permutations.py +346 -0
- sage/combinat/bijectionist.py +3220 -0
- sage/combinat/binary_recurrence_sequences.py +1180 -0
- sage/combinat/blob_algebra.py +685 -0
- sage/combinat/catalog_partitions.py +27 -0
- sage/combinat/chas/all.py +23 -0
- sage/combinat/chas/fsym.py +1180 -0
- sage/combinat/chas/wqsym.py +2601 -0
- sage/combinat/cluster_complex.py +326 -0
- sage/combinat/colored_permutations.py +2039 -0
- sage/combinat/colored_permutations_representations.py +964 -0
- sage/combinat/composition_signed.py +142 -0
- sage/combinat/composition_tableau.py +855 -0
- sage/combinat/constellation.py +1729 -0
- sage/combinat/core.py +751 -0
- sage/combinat/counting.py +12 -0
- sage/combinat/crystals/affine.py +742 -0
- sage/combinat/crystals/affine_factorization.py +518 -0
- sage/combinat/crystals/affinization.py +331 -0
- sage/combinat/crystals/alcove_path.py +2013 -0
- sage/combinat/crystals/all.py +22 -0
- sage/combinat/crystals/bkk_crystals.py +141 -0
- sage/combinat/crystals/catalog.py +115 -0
- sage/combinat/crystals/catalog_elementary_crystals.py +18 -0
- sage/combinat/crystals/catalog_infinity_crystals.py +33 -0
- sage/combinat/crystals/catalog_kirillov_reshetikhin.py +18 -0
- sage/combinat/crystals/crystals.py +257 -0
- sage/combinat/crystals/direct_sum.py +260 -0
- sage/combinat/crystals/elementary_crystals.py +1251 -0
- sage/combinat/crystals/fast_crystals.py +441 -0
- sage/combinat/crystals/fully_commutative_stable_grothendieck.py +1205 -0
- sage/combinat/crystals/generalized_young_walls.py +1076 -0
- sage/combinat/crystals/highest_weight_crystals.py +436 -0
- sage/combinat/crystals/induced_structure.py +695 -0
- sage/combinat/crystals/infinity_crystals.py +730 -0
- sage/combinat/crystals/kac_modules.py +863 -0
- sage/combinat/crystals/kirillov_reshetikhin.py +4196 -0
- sage/combinat/crystals/kyoto_path_model.py +497 -0
- sage/combinat/crystals/letters.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/crystals/letters.pxd +79 -0
- sage/combinat/crystals/letters.pyx +3056 -0
- sage/combinat/crystals/littelmann_path.py +1518 -0
- sage/combinat/crystals/monomial_crystals.py +1262 -0
- sage/combinat/crystals/multisegments.py +462 -0
- sage/combinat/crystals/mv_polytopes.py +467 -0
- sage/combinat/crystals/pbw_crystal.py +511 -0
- sage/combinat/crystals/pbw_datum.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/crystals/pbw_datum.pxd +4 -0
- sage/combinat/crystals/pbw_datum.pyx +487 -0
- sage/combinat/crystals/polyhedral_realization.py +372 -0
- sage/combinat/crystals/spins.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/crystals/spins.pxd +21 -0
- sage/combinat/crystals/spins.pyx +756 -0
- sage/combinat/crystals/star_crystal.py +290 -0
- sage/combinat/crystals/subcrystal.py +464 -0
- sage/combinat/crystals/tensor_product.py +1177 -0
- sage/combinat/crystals/tensor_product_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/crystals/tensor_product_element.pxd +35 -0
- sage/combinat/crystals/tensor_product_element.pyx +1870 -0
- sage/combinat/crystals/virtual_crystal.py +420 -0
- sage/combinat/cyclic_sieving_phenomenon.py +204 -0
- sage/combinat/debruijn_sequence.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/debruijn_sequence.pyx +355 -0
- sage/combinat/decorated_permutation.py +270 -0
- sage/combinat/degree_sequences.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/degree_sequences.pyx +588 -0
- sage/combinat/derangements.py +527 -0
- sage/combinat/descent_algebra.py +1008 -0
- sage/combinat/diagram.py +1551 -0
- sage/combinat/diagram_algebras.py +5886 -0
- sage/combinat/dyck_word.py +4349 -0
- sage/combinat/e_one_star.py +1623 -0
- sage/combinat/enumerated_sets.py +123 -0
- sage/combinat/expnums.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/expnums.pyx +148 -0
- sage/combinat/fast_vector_partitions.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/fast_vector_partitions.pyx +346 -0
- sage/combinat/fqsym.py +1977 -0
- sage/combinat/free_dendriform_algebra.py +954 -0
- sage/combinat/free_prelie_algebra.py +1141 -0
- sage/combinat/fully_commutative_elements.py +1077 -0
- sage/combinat/fully_packed_loop.py +1523 -0
- sage/combinat/gelfand_tsetlin_patterns.py +1409 -0
- sage/combinat/gray_codes.py +311 -0
- sage/combinat/grossman_larson_algebras.py +667 -0
- sage/combinat/growth.py +4352 -0
- sage/combinat/hall_polynomial.py +188 -0
- sage/combinat/hillman_grassl.py +866 -0
- sage/combinat/integer_matrices.py +329 -0
- sage/combinat/integer_vectors_mod_permgroup.py +1238 -0
- sage/combinat/k_tableau.py +4564 -0
- sage/combinat/kazhdan_lusztig.py +215 -0
- sage/combinat/key_polynomial.py +885 -0
- sage/combinat/knutson_tao_puzzles.py +2286 -0
- sage/combinat/lr_tableau.py +311 -0
- sage/combinat/matrices/all.py +24 -0
- sage/combinat/matrices/hadamard_matrix.py +3790 -0
- sage/combinat/matrices/latin.py +2912 -0
- sage/combinat/misc.py +401 -0
- sage/combinat/multiset_partition_into_sets_ordered.py +3541 -0
- sage/combinat/ncsf_qsym/all.py +21 -0
- sage/combinat/ncsf_qsym/combinatorics.py +317 -0
- sage/combinat/ncsf_qsym/generic_basis_code.py +1427 -0
- sage/combinat/ncsf_qsym/ncsf.py +5637 -0
- sage/combinat/ncsf_qsym/qsym.py +4053 -0
- sage/combinat/ncsf_qsym/tutorial.py +447 -0
- sage/combinat/ncsym/all.py +21 -0
- sage/combinat/ncsym/bases.py +855 -0
- sage/combinat/ncsym/dual.py +593 -0
- sage/combinat/ncsym/ncsym.py +2076 -0
- sage/combinat/necklace.py +551 -0
- sage/combinat/non_decreasing_parking_function.py +634 -0
- sage/combinat/nu_dyck_word.py +1474 -0
- sage/combinat/output.py +861 -0
- sage/combinat/parallelogram_polyomino.py +4326 -0
- sage/combinat/parking_functions.py +1602 -0
- sage/combinat/partition_algebra.py +1998 -0
- sage/combinat/partition_kleshchev.py +1982 -0
- sage/combinat/partition_shifting_algebras.py +584 -0
- sage/combinat/partition_tuple.py +3114 -0
- sage/combinat/path_tableaux/all.py +13 -0
- sage/combinat/path_tableaux/catalog.py +29 -0
- sage/combinat/path_tableaux/dyck_path.py +380 -0
- sage/combinat/path_tableaux/frieze.py +476 -0
- sage/combinat/path_tableaux/path_tableau.py +728 -0
- sage/combinat/path_tableaux/semistandard.py +510 -0
- sage/combinat/perfect_matching.py +779 -0
- sage/combinat/plane_partition.py +3300 -0
- sage/combinat/q_bernoulli.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/q_bernoulli.pyx +128 -0
- sage/combinat/quickref.py +81 -0
- sage/combinat/recognizable_series.py +2051 -0
- sage/combinat/regular_sequence.py +4316 -0
- sage/combinat/regular_sequence_bounded.py +543 -0
- sage/combinat/restricted_growth.py +81 -0
- sage/combinat/ribbon.py +20 -0
- sage/combinat/ribbon_shaped_tableau.py +489 -0
- sage/combinat/ribbon_tableau.py +1180 -0
- sage/combinat/rigged_configurations/all.py +46 -0
- sage/combinat/rigged_configurations/bij_abstract_class.py +548 -0
- sage/combinat/rigged_configurations/bij_infinity.py +370 -0
- sage/combinat/rigged_configurations/bij_type_A.py +163 -0
- sage/combinat/rigged_configurations/bij_type_A2_dual.py +338 -0
- sage/combinat/rigged_configurations/bij_type_A2_even.py +218 -0
- sage/combinat/rigged_configurations/bij_type_A2_odd.py +199 -0
- sage/combinat/rigged_configurations/bij_type_B.py +900 -0
- sage/combinat/rigged_configurations/bij_type_C.py +267 -0
- sage/combinat/rigged_configurations/bij_type_D.py +771 -0
- sage/combinat/rigged_configurations/bij_type_D_tri.py +392 -0
- sage/combinat/rigged_configurations/bij_type_D_twisted.py +576 -0
- sage/combinat/rigged_configurations/bij_type_E67.py +402 -0
- sage/combinat/rigged_configurations/bijection.py +143 -0
- sage/combinat/rigged_configurations/kleber_tree.py +1475 -0
- sage/combinat/rigged_configurations/kr_tableaux.py +1898 -0
- sage/combinat/rigged_configurations/rc_crystal.py +461 -0
- sage/combinat/rigged_configurations/rc_infinity.py +540 -0
- sage/combinat/rigged_configurations/rigged_configuration_element.py +2403 -0
- sage/combinat/rigged_configurations/rigged_configurations.py +1918 -0
- sage/combinat/rigged_configurations/rigged_partition.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/rigged_configurations/rigged_partition.pxd +15 -0
- sage/combinat/rigged_configurations/rigged_partition.pyx +680 -0
- sage/combinat/rigged_configurations/tensor_product_kr_tableaux.py +499 -0
- sage/combinat/rigged_configurations/tensor_product_kr_tableaux_element.py +428 -0
- sage/combinat/rsk.py +3438 -0
- sage/combinat/schubert_polynomial.py +508 -0
- sage/combinat/set_partition.py +3318 -0
- sage/combinat/set_partition_iterator.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/set_partition_iterator.pyx +136 -0
- sage/combinat/set_partition_ordered.py +1590 -0
- sage/combinat/sf/abreu_nigro.py +346 -0
- sage/combinat/sf/all.py +52 -0
- sage/combinat/sf/character.py +576 -0
- sage/combinat/sf/classical.py +319 -0
- sage/combinat/sf/dual.py +996 -0
- sage/combinat/sf/elementary.py +549 -0
- sage/combinat/sf/hall_littlewood.py +1028 -0
- sage/combinat/sf/hecke.py +336 -0
- sage/combinat/sf/homogeneous.py +464 -0
- sage/combinat/sf/jack.py +1428 -0
- sage/combinat/sf/k_dual.py +1458 -0
- sage/combinat/sf/kfpoly.py +447 -0
- sage/combinat/sf/llt.py +789 -0
- sage/combinat/sf/macdonald.py +2019 -0
- sage/combinat/sf/monomial.py +525 -0
- sage/combinat/sf/multiplicative.py +113 -0
- sage/combinat/sf/new_kschur.py +1786 -0
- sage/combinat/sf/ns_macdonald.py +964 -0
- sage/combinat/sf/orthogonal.py +246 -0
- sage/combinat/sf/orthotriang.py +355 -0
- sage/combinat/sf/powersum.py +963 -0
- sage/combinat/sf/schur.py +880 -0
- sage/combinat/sf/sf.py +1653 -0
- sage/combinat/sf/sfa.py +7053 -0
- sage/combinat/sf/symplectic.py +253 -0
- sage/combinat/sf/witt.py +721 -0
- sage/combinat/shifted_primed_tableau.py +2735 -0
- sage/combinat/shuffle.py +830 -0
- sage/combinat/sidon_sets.py +146 -0
- sage/combinat/similarity_class_type.py +1721 -0
- sage/combinat/sine_gordon.py +618 -0
- sage/combinat/six_vertex_model.py +784 -0
- sage/combinat/skew_partition.py +2053 -0
- sage/combinat/skew_tableau.py +2989 -0
- sage/combinat/sloane_functions.py +8935 -0
- sage/combinat/specht_module.py +1403 -0
- sage/combinat/species/all.py +48 -0
- sage/combinat/species/characteristic_species.py +321 -0
- sage/combinat/species/composition_species.py +273 -0
- sage/combinat/species/cycle_species.py +284 -0
- sage/combinat/species/empty_species.py +155 -0
- sage/combinat/species/functorial_composition_species.py +148 -0
- sage/combinat/species/generating_series.py +673 -0
- sage/combinat/species/library.py +148 -0
- sage/combinat/species/linear_order_species.py +169 -0
- sage/combinat/species/misc.py +83 -0
- sage/combinat/species/partition_species.py +290 -0
- sage/combinat/species/permutation_species.py +268 -0
- sage/combinat/species/product_species.py +423 -0
- sage/combinat/species/recursive_species.py +476 -0
- sage/combinat/species/set_species.py +192 -0
- sage/combinat/species/species.py +820 -0
- sage/combinat/species/structure.py +539 -0
- sage/combinat/species/subset_species.py +243 -0
- sage/combinat/species/sum_species.py +225 -0
- sage/combinat/subword.py +564 -0
- sage/combinat/subword_complex.py +2122 -0
- sage/combinat/subword_complex_c.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/subword_complex_c.pyx +119 -0
- sage/combinat/super_tableau.py +821 -0
- sage/combinat/superpartition.py +1154 -0
- sage/combinat/symmetric_group_algebra.py +3774 -0
- sage/combinat/symmetric_group_representations.py +1830 -0
- sage/combinat/t_sequences.py +877 -0
- sage/combinat/tableau.py +9506 -0
- sage/combinat/tableau_residues.py +860 -0
- sage/combinat/tableau_tuple.py +5353 -0
- sage/combinat/tiling.py +2432 -0
- sage/combinat/triangles_FHM.py +777 -0
- sage/combinat/tutorial.py +1857 -0
- sage/combinat/vector_partition.py +337 -0
- sage/combinat/words/abstract_word.py +1722 -0
- sage/combinat/words/all.py +59 -0
- sage/combinat/words/alphabet.py +268 -0
- sage/combinat/words/finite_word.py +7201 -0
- sage/combinat/words/infinite_word.py +113 -0
- sage/combinat/words/lyndon_word.py +652 -0
- sage/combinat/words/morphic.py +351 -0
- sage/combinat/words/morphism.py +3878 -0
- sage/combinat/words/paths.py +2932 -0
- sage/combinat/words/shuffle_product.py +278 -0
- sage/combinat/words/suffix_trees.py +1873 -0
- sage/combinat/words/word.py +769 -0
- sage/combinat/words/word_char.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/words/word_char.pyx +847 -0
- sage/combinat/words/word_datatypes.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/words/word_datatypes.pxd +4 -0
- sage/combinat/words/word_datatypes.pyx +1067 -0
- sage/combinat/words/word_generators.py +2026 -0
- sage/combinat/words/word_infinite_datatypes.py +1218 -0
- sage/combinat/words/word_options.py +99 -0
- sage/combinat/words/words.py +2396 -0
- sage/data_structures/all__sagemath_combinat.py +1 -0
- sage/databases/all__sagemath_combinat.py +13 -0
- sage/databases/findstat.py +4897 -0
- sage/databases/oeis.py +2058 -0
- sage/databases/sloane.py +393 -0
- sage/dynamics/all__sagemath_combinat.py +14 -0
- sage/dynamics/cellular_automata/all.py +7 -0
- sage/dynamics/cellular_automata/catalog.py +34 -0
- sage/dynamics/cellular_automata/elementary.py +612 -0
- sage/dynamics/cellular_automata/glca.py +477 -0
- sage/dynamics/cellular_automata/solitons.py +1463 -0
- sage/dynamics/finite_dynamical_system.py +1249 -0
- sage/dynamics/finite_dynamical_system_catalog.py +382 -0
- sage/games/all.py +7 -0
- sage/games/hexad.py +704 -0
- sage/games/quantumino.py +591 -0
- sage/games/sudoku.py +889 -0
- sage/games/sudoku_backtrack.cpython-314-x86_64-linux-musl.so +0 -0
- sage/games/sudoku_backtrack.pyx +189 -0
- sage/groups/all__sagemath_combinat.py +1 -0
- sage/groups/indexed_free_group.py +489 -0
- sage/libs/all__sagemath_combinat.py +6 -0
- sage/libs/lrcalc/__init__.py +1 -0
- sage/libs/lrcalc/lrcalc.py +525 -0
- sage/libs/symmetrica/__init__.py +7 -0
- sage/libs/symmetrica/all.py +101 -0
- sage/libs/symmetrica/kostka.pxi +168 -0
- sage/libs/symmetrica/part.pxi +193 -0
- sage/libs/symmetrica/plet.pxi +42 -0
- sage/libs/symmetrica/sab.pxi +196 -0
- sage/libs/symmetrica/sb.pxi +332 -0
- sage/libs/symmetrica/sc.pxi +192 -0
- sage/libs/symmetrica/schur.pxi +956 -0
- sage/libs/symmetrica/symmetrica.cpython-314-x86_64-linux-musl.so +0 -0
- sage/libs/symmetrica/symmetrica.pxi +1172 -0
- sage/libs/symmetrica/symmetrica.pyx +39 -0
- sage/monoids/all.py +13 -0
- sage/monoids/automatic_semigroup.py +1054 -0
- sage/monoids/free_abelian_monoid.py +315 -0
- sage/monoids/free_abelian_monoid_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/monoids/free_abelian_monoid_element.pxd +16 -0
- sage/monoids/free_abelian_monoid_element.pyx +397 -0
- sage/monoids/free_monoid.py +335 -0
- sage/monoids/free_monoid_element.py +431 -0
- sage/monoids/hecke_monoid.py +65 -0
- sage/monoids/string_monoid.py +817 -0
- sage/monoids/string_monoid_element.py +547 -0
- sage/monoids/string_ops.py +143 -0
- sage/monoids/trace_monoid.py +972 -0
- sage/rings/all__sagemath_combinat.py +2 -0
- sage/sat/all.py +4 -0
- sage/sat/boolean_polynomials.py +405 -0
- sage/sat/converters/__init__.py +6 -0
- sage/sat/converters/anf2cnf.py +14 -0
- sage/sat/converters/polybori.py +611 -0
- sage/sat/solvers/__init__.py +5 -0
- sage/sat/solvers/cryptominisat.py +287 -0
- sage/sat/solvers/dimacs.py +783 -0
- sage/sat/solvers/picosat.py +228 -0
- sage/sat/solvers/sat_lp.py +156 -0
- sage/sat/solvers/satsolver.cpython-314-x86_64-linux-musl.so +0 -0
- sage/sat/solvers/satsolver.pxd +3 -0
- sage/sat/solvers/satsolver.pyx +405 -0
|
@@ -0,0 +1,497 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.graphs sage.modules
|
|
3
|
+
r"""
|
|
4
|
+
Kyoto path model for affine highest weight crystals
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
# ***************************************************************************
|
|
8
|
+
# Copyright (C) 2013 Travis Scrimshaw <tscrim at ucdavis.edu>
|
|
9
|
+
#
|
|
10
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
11
|
+
#
|
|
12
|
+
# This code is distributed in the hope that it will be useful,
|
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
15
|
+
# General Public License for more details.
|
|
16
|
+
#
|
|
17
|
+
# The full text of the GPL is available at:
|
|
18
|
+
#
|
|
19
|
+
# http://www.gnu.org/licenses/
|
|
20
|
+
# ***************************************************************************
|
|
21
|
+
|
|
22
|
+
from sage.structure.parent import Parent
|
|
23
|
+
from sage.categories.infinite_enumerated_sets import InfiniteEnumeratedSets
|
|
24
|
+
from sage.categories.highest_weight_crystals import HighestWeightCrystals
|
|
25
|
+
from sage.combinat.crystals.tensor_product import TensorProductOfCrystals, \
|
|
26
|
+
TensorProductOfRegularCrystalsElement
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class KyotoPathModel(TensorProductOfCrystals):
|
|
30
|
+
r"""
|
|
31
|
+
The Kyoto path model for an affine highest weight crystal.
|
|
32
|
+
|
|
33
|
+
.. NOTE::
|
|
34
|
+
|
|
35
|
+
Here we are using anti-Kashiwara notation and might differ from
|
|
36
|
+
some of the literature.
|
|
37
|
+
|
|
38
|
+
Consider a Kac--Moody algebra `\mathfrak{g}` of affine Cartan type `X`,
|
|
39
|
+
and we want to model the `U_q'(\mathfrak{g})`-crystal `B(\lambda)`.
|
|
40
|
+
First we consider the set of fundamental weights `\{\Lambda_i\}_{i \in I}`
|
|
41
|
+
of `\mathfrak{g}` and let `\{\overline{\Lambda}_i\}_{i \in I_0}` be the
|
|
42
|
+
corresponding fundamental weights of the corresponding classical Lie
|
|
43
|
+
algebra `\mathfrak{g}_0`. To model `B(\lambda)`, we start with a sequence
|
|
44
|
+
of perfect `U_q'(\mathfrak{g})`-crystals `(B^{(i)})_i` of level
|
|
45
|
+
`l` such that
|
|
46
|
+
|
|
47
|
+
.. MATH::
|
|
48
|
+
|
|
49
|
+
\lambda \in \overline{P}_l^+ = \left\{ \mu \in \overline{P}^+ \mid
|
|
50
|
+
\langle c, \mu \rangle = l \right\}
|
|
51
|
+
|
|
52
|
+
where `c` is the canonical central element of `U_q'(\mathfrak{g})`
|
|
53
|
+
and `\overline{P}^+` is the nonnegative weight lattice spanned by
|
|
54
|
+
`\{ \overline{\Lambda}_i \mid i \in I \}`.
|
|
55
|
+
|
|
56
|
+
Next we consider the crystal isomorphism `\Phi_0 : B(\lambda_0) \to B^{(0)}
|
|
57
|
+
\otimes B(\lambda_1)` defined by `u_{\lambda_0} \mapsto b^{(0)}_{\lambda_0}
|
|
58
|
+
\otimes u_{\lambda_1}` where `b^{(0)}_{\lambda_0}` is the unique element in
|
|
59
|
+
`B^{(0)}` such that `\varphi\left( b^{(0)}_{\lambda_0} \right) = \lambda_0`
|
|
60
|
+
and `\lambda_1 = \varepsilon\left( b^{(0)}_{\lambda_0} \right)` and
|
|
61
|
+
`u_{\mu}` is the highest weight element in `B(\mu)`. Iterating this, we
|
|
62
|
+
obtain the following isomorphism:
|
|
63
|
+
|
|
64
|
+
.. MATH::
|
|
65
|
+
|
|
66
|
+
\Phi_n : B(\lambda) \to B^{(0)} \otimes B^{(1)} \otimes \cdots
|
|
67
|
+
\otimes B^{(N)} \otimes B(\lambda_{N+1}).
|
|
68
|
+
|
|
69
|
+
We note by Lemma 10.6.2 in [HK2002]_ that for any `b \in B(\lambda)` there
|
|
70
|
+
exists a finite `N` such that
|
|
71
|
+
|
|
72
|
+
.. MATH::
|
|
73
|
+
|
|
74
|
+
\Phi_N(b) = \left( \bigotimes_{k=0}^{N-1} b^{(k)} \right)
|
|
75
|
+
\otimes u_{\lambda_N}.
|
|
76
|
+
|
|
77
|
+
Therefore we can model elements `b \in B(\lambda)` as a
|
|
78
|
+
`U_q'(\mathfrak{g})`-crystal by considering an infinite list of
|
|
79
|
+
elements `b^{(k)} \in B^{(k)}` and defining the crystal structure by:
|
|
80
|
+
|
|
81
|
+
.. MATH::
|
|
82
|
+
|
|
83
|
+
\begin{aligned}
|
|
84
|
+
\overline{\mathrm{wt}}(b) & = \lambda_N + \sum_{k=0}^{N-1}
|
|
85
|
+
\overline{\mathrm{wt}}\left( b^{(k)} \right)
|
|
86
|
+
\\ e_i(b) & = e_i\left( b^{\prime} \otimes b^{(N)} \right) \otimes
|
|
87
|
+
u_{\lambda_N},
|
|
88
|
+
\\ f_i(b) & = f_i\left( b^{\prime} \otimes b^{(N)} \right) \otimes
|
|
89
|
+
u_{\lambda_N},
|
|
90
|
+
\\ \varepsilon_i(b) & = \max\left( \varepsilon_i(b^{\prime}) -
|
|
91
|
+
\varphi_i\left( b^{(N)} \right), 0 \right),
|
|
92
|
+
\\ \varphi_i(b) & = \varphi_i(b^{\prime}) + \max\left(
|
|
93
|
+
\varphi_i\left( b^{(N)} \right) - \varepsilon_i(b^{\prime}), 0 \right),
|
|
94
|
+
\end{aligned}
|
|
95
|
+
|
|
96
|
+
where `b^{\prime} = b^{(0)} \otimes \cdots \otimes b^{(N-1)}`. To
|
|
97
|
+
translate this into a finite list, we consider a finite sequence
|
|
98
|
+
`b^{(0)} \otimes \cdots \otimes b^{(N-1)} \otimes b^{(N)}_{\lambda_N}`
|
|
99
|
+
and if
|
|
100
|
+
|
|
101
|
+
.. MATH::
|
|
102
|
+
|
|
103
|
+
f_i\left( b^{(0)} \otimes \cdots b^{(N-1)} \otimes
|
|
104
|
+
b^{(N)}_{\lambda_N} \right) = b_0 \otimes \cdots \otimes b^{(N-1)}
|
|
105
|
+
\otimes f_i\left( b^{(N)}_{\lambda_N} \right),
|
|
106
|
+
|
|
107
|
+
then we take the image as `b^{(0)} \otimes \cdots \otimes f_i\left(
|
|
108
|
+
b^{(N)}_{\lambda_N}\right) \otimes b^{(N+1)}_{\lambda_{N+1}}`. Similarly
|
|
109
|
+
we remove `b^{(N)}_{\lambda_{N}}` if we have `b_0 \otimes \cdots
|
|
110
|
+
\otimes b^{(N-1)} \otimes b^{(N-1)}_{\lambda_{N-1}} \otimes
|
|
111
|
+
b^{(N)}_{\lambda_N}`. Additionally if
|
|
112
|
+
|
|
113
|
+
.. MATH::
|
|
114
|
+
|
|
115
|
+
e_i\left( b^{(0)} \otimes \cdots \otimes b^{(N-1)} \otimes
|
|
116
|
+
b^{(N)}_{\lambda_N} \right) = b^{(0)} \otimes \cdots \otimes
|
|
117
|
+
b^{(N-1)} \otimes e_i\left( b^{(N)}_{\lambda_N} \right),
|
|
118
|
+
|
|
119
|
+
then we consider this to be `0`.
|
|
120
|
+
|
|
121
|
+
We can then lift the `U_q'(\mathfrak{g})`-crystal structure to a
|
|
122
|
+
`U_q(\mathfrak{g})`-crystal structure by using a tensor product of
|
|
123
|
+
the :class:`affinization
|
|
124
|
+
<sage.combinat.crystals.affinization.AffinizationOfCrystal>` of the
|
|
125
|
+
of crystals `B^{(i)}` for all `i`.
|
|
126
|
+
|
|
127
|
+
INPUT:
|
|
128
|
+
|
|
129
|
+
- ``B`` -- a single or list of `U_q^{\prime}` perfect crystal(s) of
|
|
130
|
+
level `l`
|
|
131
|
+
- ``weight`` -- a weight in `\overline{P}_l^+`
|
|
132
|
+
|
|
133
|
+
EXAMPLES::
|
|
134
|
+
|
|
135
|
+
sage: B = crystals.KirillovReshetikhin(['A',2,1], 1,1)
|
|
136
|
+
sage: La = RootSystem(['A',2,1]).weight_lattice().fundamental_weights()
|
|
137
|
+
sage: C = crystals.KyotoPathModel(B, La[0])
|
|
138
|
+
sage: mg = C.module_generators[0]; mg
|
|
139
|
+
[[[3]]]
|
|
140
|
+
sage: mg.f_string([0,1,2,2])
|
|
141
|
+
[[[3]], [[3]], [[1]]]
|
|
142
|
+
sage: x = mg.f_string([0,1,2]); x
|
|
143
|
+
[[[2]], [[3]], [[1]]]
|
|
144
|
+
sage: x.weight()
|
|
145
|
+
Lambda[0]
|
|
146
|
+
|
|
147
|
+
An example of type `A_5^{(2)}`::
|
|
148
|
+
|
|
149
|
+
sage: B = crystals.KirillovReshetikhin(['A',5,2], 1,1)
|
|
150
|
+
sage: La = RootSystem(['A',5,2]).weight_lattice().fundamental_weights()
|
|
151
|
+
sage: C = crystals.KyotoPathModel(B, La[0])
|
|
152
|
+
sage: mg = C.module_generators[0]; mg
|
|
153
|
+
[[[-1]]]
|
|
154
|
+
sage: mg.f_string([0,2,1,3])
|
|
155
|
+
[[[-3]], [[2]], [[-1]]]
|
|
156
|
+
sage: mg.f_string([0,2,3,1])
|
|
157
|
+
[[[-3]], [[2]], [[-1]]]
|
|
158
|
+
|
|
159
|
+
An example of type `D_3^{(2)}`::
|
|
160
|
+
|
|
161
|
+
sage: B = crystals.KirillovReshetikhin(['D',3,2], 1,1)
|
|
162
|
+
sage: La = RootSystem(['D',3,2]).weight_lattice().fundamental_weights()
|
|
163
|
+
sage: C = crystals.KyotoPathModel(B, La[0])
|
|
164
|
+
sage: mg = C.module_generators[0]; mg
|
|
165
|
+
[[]]
|
|
166
|
+
sage: mg.f_string([0,1,2,0])
|
|
167
|
+
[[[0]], [[1]], []]
|
|
168
|
+
|
|
169
|
+
An example using multiple crystals of the same level::
|
|
170
|
+
|
|
171
|
+
sage: B1 = crystals.KirillovReshetikhin(['A',2,1], 1,1)
|
|
172
|
+
sage: B2 = crystals.KirillovReshetikhin(['A',2,1], 2,1)
|
|
173
|
+
sage: La = RootSystem(['A',2,1]).weight_lattice().fundamental_weights()
|
|
174
|
+
sage: C = crystals.KyotoPathModel([B1, B2, B1], La[0])
|
|
175
|
+
sage: mg = C.module_generators[0]; mg
|
|
176
|
+
[[[3]]]
|
|
177
|
+
sage: mg.f_string([0,1,2,2])
|
|
178
|
+
[[[3]], [[1], [3]], [[3]]]
|
|
179
|
+
sage: mg.f_string([0,1,2,2,2])
|
|
180
|
+
sage: mg.f_string([0,1,2,2,1,0])
|
|
181
|
+
[[[3]], [[2], [3]], [[1]], [[2]]]
|
|
182
|
+
sage: mg.f_string([0,1,2,2,1,0,0,2])
|
|
183
|
+
[[[3]], [[1], [2]], [[1]], [[3]], [[1], [3]]]
|
|
184
|
+
|
|
185
|
+
By using the extended weight lattice, the Kyoto path model lifts
|
|
186
|
+
the perfect crystals to their affinizations::
|
|
187
|
+
|
|
188
|
+
sage: B = crystals.KirillovReshetikhin(['A',2,1], 1,1)
|
|
189
|
+
sage: P = RootSystem(['A',2,1]).weight_lattice(extended=True)
|
|
190
|
+
sage: La = P.fundamental_weights()
|
|
191
|
+
sage: C = crystals.KyotoPathModel(B, La[0])
|
|
192
|
+
sage: mg = C.module_generators[0]; mg
|
|
193
|
+
[[[3]](0)]
|
|
194
|
+
sage: x = mg.f_string([0,1,2]); x
|
|
195
|
+
[[[2]](-1), [[3]](0), [[1]](0)]
|
|
196
|
+
sage: x.weight()
|
|
197
|
+
Lambda[0] - delta
|
|
198
|
+
"""
|
|
199
|
+
@staticmethod
|
|
200
|
+
def __classcall_private__(cls, crystals, weight, P=None):
|
|
201
|
+
"""
|
|
202
|
+
Normalize input to ensure a unique representation.
|
|
203
|
+
|
|
204
|
+
EXAMPLES::
|
|
205
|
+
|
|
206
|
+
sage: B = crystals.KirillovReshetikhin(['A',2,1], 1,1)
|
|
207
|
+
sage: P = RootSystem(['A',2,1]).weight_lattice()
|
|
208
|
+
sage: La = P.fundamental_weights()
|
|
209
|
+
sage: C = crystals.KyotoPathModel(B, La[0])
|
|
210
|
+
sage: C2 = crystals.KyotoPathModel((B,), La[0])
|
|
211
|
+
sage: C3 = crystals.KyotoPathModel([B], La[0], P)
|
|
212
|
+
sage: C is C2 and C2 is C3
|
|
213
|
+
True
|
|
214
|
+
"""
|
|
215
|
+
if isinstance(crystals, list):
|
|
216
|
+
crystals = tuple(crystals)
|
|
217
|
+
elif not isinstance(crystals, tuple):
|
|
218
|
+
crystals = (crystals,)
|
|
219
|
+
|
|
220
|
+
if any(not B.is_perfect() for B in crystals):
|
|
221
|
+
raise ValueError("all crystals must be perfect")
|
|
222
|
+
level = crystals[0].level()
|
|
223
|
+
if any(B.level() != level for B in crystals[1:]):
|
|
224
|
+
raise ValueError("all crystals must have the same level")
|
|
225
|
+
ct = crystals[0].cartan_type()
|
|
226
|
+
if P is None:
|
|
227
|
+
P = weight.parent()
|
|
228
|
+
if sum( ct.dual().c()[i] * weight.scalar(h) for i,h in
|
|
229
|
+
enumerate(P.simple_coroots()) ) != level:
|
|
230
|
+
raise ValueError( "{} is not a level {} weight".format(weight, level) )
|
|
231
|
+
|
|
232
|
+
return super().__classcall__(cls, crystals, weight, P)
|
|
233
|
+
|
|
234
|
+
def __init__(self, crystals, weight, P):
|
|
235
|
+
"""
|
|
236
|
+
Initialize ``self``.
|
|
237
|
+
|
|
238
|
+
EXAMPLES::
|
|
239
|
+
|
|
240
|
+
sage: B = crystals.KirillovReshetikhin(['A',2,1], 1,1)
|
|
241
|
+
sage: La = RootSystem(['A',2,1]).weight_lattice().fundamental_weights()
|
|
242
|
+
sage: C = crystals.KyotoPathModel(B, La[0])
|
|
243
|
+
sage: TestSuite(C).run() # long time
|
|
244
|
+
"""
|
|
245
|
+
Parent.__init__(self, category=(HighestWeightCrystals(), InfiniteEnumeratedSets()))
|
|
246
|
+
|
|
247
|
+
self._cartan_type = crystals[0].cartan_type()
|
|
248
|
+
self._weight = weight
|
|
249
|
+
if weight.parent().is_extended():
|
|
250
|
+
# public for TensorProductOfCrystals
|
|
251
|
+
self.crystals = tuple([C.affinization() for C in crystals])
|
|
252
|
+
self._epsilon_dicts = [{b.Epsilon(): self.crystals[i](b, 0) for b in B}
|
|
253
|
+
for i,B in enumerate(crystals)]
|
|
254
|
+
self._phi_dicts = [{b.Phi(): self.crystals[i](b, 0) for b in B}
|
|
255
|
+
for i,B in enumerate(crystals)]
|
|
256
|
+
else:
|
|
257
|
+
# public for TensorProductOfCrystals
|
|
258
|
+
self.crystals = tuple(crystals)
|
|
259
|
+
self._epsilon_dicts = [{b.Epsilon(): b for b in B}
|
|
260
|
+
for B in crystals]
|
|
261
|
+
self._phi_dicts = [{b.Phi(): b for b in B}
|
|
262
|
+
for B in crystals]
|
|
263
|
+
self.module_generators = (self.element_class(self, [self._phi_dicts[0][weight]]),)
|
|
264
|
+
|
|
265
|
+
def _repr_(self):
|
|
266
|
+
"""
|
|
267
|
+
Return a string representation of ``self``.
|
|
268
|
+
|
|
269
|
+
EXAMPLES::
|
|
270
|
+
|
|
271
|
+
sage: B = crystals.KirillovReshetikhin(['A',2,1], 1,1)
|
|
272
|
+
sage: La = RootSystem(['A',2,1]).weight_lattice().fundamental_weights()
|
|
273
|
+
sage: crystals.KyotoPathModel(B, La[0])
|
|
274
|
+
Kyoto path realization of B(Lambda[0]) using
|
|
275
|
+
[Kirillov-Reshetikhin crystal of type ['A', 2, 1] with (r,s)=(1,1)]
|
|
276
|
+
"""
|
|
277
|
+
return "Kyoto path realization of B({}) using {}".format(self._weight, list(self.crystals))
|
|
278
|
+
|
|
279
|
+
def finite_tensor_product(self, k):
|
|
280
|
+
"""
|
|
281
|
+
Return the finite tensor product of crystals of length ``k``
|
|
282
|
+
from truncating ``self``.
|
|
283
|
+
|
|
284
|
+
EXAMPLES::
|
|
285
|
+
|
|
286
|
+
sage: B1 = crystals.KirillovReshetikhin(['A',2,1], 1,1)
|
|
287
|
+
sage: B2 = crystals.KirillovReshetikhin(['A',2,1], 2,1)
|
|
288
|
+
sage: La = RootSystem(['A',2,1]).weight_lattice().fundamental_weights()
|
|
289
|
+
sage: C = crystals.KyotoPathModel([B1,B2,B1], La[0])
|
|
290
|
+
sage: C.finite_tensor_product(5)
|
|
291
|
+
Full tensor product of the crystals
|
|
292
|
+
[Kirillov-Reshetikhin crystal of type ['A', 2, 1] with (r,s)=(1,1),
|
|
293
|
+
Kirillov-Reshetikhin crystal of type ['A', 2, 1] with (r,s)=(2,1),
|
|
294
|
+
Kirillov-Reshetikhin crystal of type ['A', 2, 1] with (r,s)=(1,1),
|
|
295
|
+
Kirillov-Reshetikhin crystal of type ['A', 2, 1] with (r,s)=(1,1),
|
|
296
|
+
Kirillov-Reshetikhin crystal of type ['A', 2, 1] with (r,s)=(2,1)]
|
|
297
|
+
"""
|
|
298
|
+
N = len(self.crystals)
|
|
299
|
+
crystals = [self.crystals[i % N] for i in range(k)]
|
|
300
|
+
return TensorProductOfCrystals(*crystals)
|
|
301
|
+
|
|
302
|
+
def weight_lattice_realization(self):
|
|
303
|
+
"""
|
|
304
|
+
Return the weight lattice realization used to express weights.
|
|
305
|
+
|
|
306
|
+
EXAMPLES::
|
|
307
|
+
|
|
308
|
+
sage: B = crystals.KirillovReshetikhin(['A',2,1], 1,1)
|
|
309
|
+
sage: La = RootSystem(['A',2,1]).weight_lattice().fundamental_weights()
|
|
310
|
+
sage: C = crystals.KyotoPathModel(B, La[0])
|
|
311
|
+
sage: C.weight_lattice_realization()
|
|
312
|
+
Weight lattice of the Root system of type ['A', 2, 1]
|
|
313
|
+
|
|
314
|
+
sage: P = RootSystem(['A',2,1]).weight_lattice(extended=True)
|
|
315
|
+
sage: C = crystals.KyotoPathModel(B, P.fundamental_weight(0))
|
|
316
|
+
sage: C.weight_lattice_realization()
|
|
317
|
+
Extended weight lattice of the Root system of type ['A', 2, 1]
|
|
318
|
+
"""
|
|
319
|
+
return self._weight.parent()
|
|
320
|
+
|
|
321
|
+
class Element(TensorProductOfRegularCrystalsElement):
|
|
322
|
+
"""
|
|
323
|
+
An element in the Kyoto path model.
|
|
324
|
+
"""
|
|
325
|
+
# For simplicity (and safety), we use the regular crystals implementation
|
|
326
|
+
|
|
327
|
+
def epsilon(self, i):
|
|
328
|
+
r"""
|
|
329
|
+
Return `\varepsilon_i` of ``self``.
|
|
330
|
+
|
|
331
|
+
EXAMPLES::
|
|
332
|
+
|
|
333
|
+
sage: B = crystals.KirillovReshetikhin(['A',2,1], 1,1)
|
|
334
|
+
sage: La = RootSystem(['A',2,1]).weight_lattice().fundamental_weights()
|
|
335
|
+
sage: C = crystals.KyotoPathModel(B, La[0])
|
|
336
|
+
sage: mg = C.module_generators[0]
|
|
337
|
+
sage: [mg.epsilon(i) for i in C.index_set()]
|
|
338
|
+
[0, 0, 0]
|
|
339
|
+
sage: elt = mg.f(0)
|
|
340
|
+
sage: [elt.epsilon(i) for i in C.index_set()]
|
|
341
|
+
[1, 0, 0]
|
|
342
|
+
sage: elt = mg.f_string([0,1,2])
|
|
343
|
+
sage: [elt.epsilon(i) for i in C.index_set()]
|
|
344
|
+
[0, 0, 1]
|
|
345
|
+
sage: elt = mg.f_string([0,1,2,2])
|
|
346
|
+
sage: [elt.epsilon(i) for i in C.index_set()]
|
|
347
|
+
[0, 0, 2]
|
|
348
|
+
"""
|
|
349
|
+
x = self.e(i)
|
|
350
|
+
eps = 0
|
|
351
|
+
while x is not None:
|
|
352
|
+
x = x.e(i)
|
|
353
|
+
eps = eps + 1
|
|
354
|
+
return eps
|
|
355
|
+
|
|
356
|
+
def phi(self, i):
|
|
357
|
+
r"""
|
|
358
|
+
Return `\varphi_i` of ``self``.
|
|
359
|
+
|
|
360
|
+
EXAMPLES::
|
|
361
|
+
|
|
362
|
+
sage: B = crystals.KirillovReshetikhin(['A',2,1], 1,1)
|
|
363
|
+
sage: La = RootSystem(['A',2,1]).weight_lattice().fundamental_weights()
|
|
364
|
+
sage: C = crystals.KyotoPathModel(B, La[0])
|
|
365
|
+
sage: mg = C.module_generators[0]
|
|
366
|
+
sage: [mg.phi(i) for i in C.index_set()]
|
|
367
|
+
[1, 0, 0]
|
|
368
|
+
sage: elt = mg.f(0)
|
|
369
|
+
sage: [elt.phi(i) for i in C.index_set()]
|
|
370
|
+
[0, 1, 1]
|
|
371
|
+
sage: elt = mg.f_string([0,1])
|
|
372
|
+
sage: [elt.phi(i) for i in C.index_set()]
|
|
373
|
+
[0, 0, 2]
|
|
374
|
+
"""
|
|
375
|
+
x = self.f(i)
|
|
376
|
+
phi = 0
|
|
377
|
+
while x is not None:
|
|
378
|
+
x = x.f(i)
|
|
379
|
+
phi = phi + 1
|
|
380
|
+
return phi
|
|
381
|
+
|
|
382
|
+
def e(self, i):
|
|
383
|
+
"""
|
|
384
|
+
Return the action of `e_i` on ``self``.
|
|
385
|
+
|
|
386
|
+
EXAMPLES::
|
|
387
|
+
|
|
388
|
+
sage: B = crystals.KirillovReshetikhin(['A',2,1], 1,1)
|
|
389
|
+
sage: La = RootSystem(['A',2,1]).weight_lattice().fundamental_weights()
|
|
390
|
+
sage: C = crystals.KyotoPathModel(B, La[0])
|
|
391
|
+
sage: mg = C.module_generators[0]
|
|
392
|
+
sage: all(mg.e(i) is None for i in C.index_set())
|
|
393
|
+
True
|
|
394
|
+
sage: mg.f(0).e(0) == mg
|
|
395
|
+
True
|
|
396
|
+
"""
|
|
397
|
+
k = self.position_of_first_unmatched_plus(i)
|
|
398
|
+
if k is None:
|
|
399
|
+
return None
|
|
400
|
+
if k == len(self)-1:
|
|
401
|
+
return None
|
|
402
|
+
crystal = self[k].e(i)
|
|
403
|
+
if k == len(self)-2 and crystal.Epsilon() == self[-1].Phi():
|
|
404
|
+
l = self[:-1]
|
|
405
|
+
l[-1] = crystal
|
|
406
|
+
return self.__class__(self.parent(), l)
|
|
407
|
+
return self._set_index(k, crystal)
|
|
408
|
+
|
|
409
|
+
def f(self, i):
|
|
410
|
+
"""
|
|
411
|
+
Return the action of `f_i` on ``self``.
|
|
412
|
+
|
|
413
|
+
EXAMPLES::
|
|
414
|
+
|
|
415
|
+
sage: B = crystals.KirillovReshetikhin(['A',2,1], 1,1)
|
|
416
|
+
sage: La = RootSystem(['A',2,1]).weight_lattice().fundamental_weights()
|
|
417
|
+
sage: C = crystals.KyotoPathModel(B, La[0])
|
|
418
|
+
sage: mg = C.module_generators[0]
|
|
419
|
+
sage: mg.f(2)
|
|
420
|
+
sage: mg.f(0)
|
|
421
|
+
[[[1]], [[2]]]
|
|
422
|
+
sage: mg.f_string([0,1,2])
|
|
423
|
+
[[[2]], [[3]], [[1]]]
|
|
424
|
+
"""
|
|
425
|
+
k = self.position_of_last_unmatched_minus(i)
|
|
426
|
+
if k is None:
|
|
427
|
+
return None
|
|
428
|
+
if k == len(self)-1:
|
|
429
|
+
l = list(self)
|
|
430
|
+
k = len(l) % len(self.parent().crystals)
|
|
431
|
+
l.append(self.parent()._phi_dicts[k][ l[-1].Epsilon() ])
|
|
432
|
+
l[-2] = l[-2].f(i)
|
|
433
|
+
return self.__class__(self.parent(), l)
|
|
434
|
+
return self._set_index(k, self[k].f(i))
|
|
435
|
+
|
|
436
|
+
def weight(self):
|
|
437
|
+
"""
|
|
438
|
+
Return the weight of ``self``.
|
|
439
|
+
|
|
440
|
+
EXAMPLES::
|
|
441
|
+
|
|
442
|
+
sage: B = crystals.KirillovReshetikhin(['A',2,1], 1,1)
|
|
443
|
+
sage: P = RootSystem(['A',2,1]).weight_lattice(extended=True)
|
|
444
|
+
sage: La = P.fundamental_weights()
|
|
445
|
+
sage: C = crystals.KyotoPathModel(B, La[0])
|
|
446
|
+
sage: mg = C.module_generators[0]
|
|
447
|
+
sage: mg.weight()
|
|
448
|
+
Lambda[0]
|
|
449
|
+
sage: mg.f_string([0,1,2]).weight()
|
|
450
|
+
Lambda[0] - delta
|
|
451
|
+
"""
|
|
452
|
+
wt = TensorProductOfRegularCrystalsElement.weight(self)
|
|
453
|
+
return wt + self[-1].Epsilon()
|
|
454
|
+
|
|
455
|
+
def truncate(self, k=None):
|
|
456
|
+
r"""
|
|
457
|
+
Truncate ``self`` to have length ``k`` and return as an element
|
|
458
|
+
in a (finite) tensor product of crystals.
|
|
459
|
+
|
|
460
|
+
INPUT:
|
|
461
|
+
|
|
462
|
+
- ``k`` -- (optional) the length to truncate to; if not specified,
|
|
463
|
+
then returns one more than the current non-ground-state elements
|
|
464
|
+
(i.e. the current list in ``self``)
|
|
465
|
+
|
|
466
|
+
EXAMPLES::
|
|
467
|
+
|
|
468
|
+
sage: B1 = crystals.KirillovReshetikhin(['A',2,1], 1,1)
|
|
469
|
+
sage: B2 = crystals.KirillovReshetikhin(['A',2,1], 2,1)
|
|
470
|
+
sage: La = RootSystem(['A',2,1]).weight_lattice().fundamental_weights()
|
|
471
|
+
sage: C = crystals.KyotoPathModel([B1,B2,B1], La[0])
|
|
472
|
+
sage: mg = C.highest_weight_vector()
|
|
473
|
+
sage: elt = mg.f_string([0,1,2,2,1,0]); elt
|
|
474
|
+
[[[3]], [[2], [3]], [[1]], [[2]]]
|
|
475
|
+
sage: t = elt.truncate(); t
|
|
476
|
+
[[[3]], [[2], [3]], [[1]], [[2]]]
|
|
477
|
+
sage: t.parent() is C.finite_tensor_product(4)
|
|
478
|
+
True
|
|
479
|
+
sage: elt.truncate(2)
|
|
480
|
+
[[[3]], [[2], [3]]]
|
|
481
|
+
sage: elt.truncate(10)
|
|
482
|
+
[[[3]], [[2], [3]], [[1]], [[2]], [[1], [3]],
|
|
483
|
+
[[2]], [[1]], [[2], [3]], [[1]], [[3]]]
|
|
484
|
+
"""
|
|
485
|
+
if k is None:
|
|
486
|
+
k = len(self)
|
|
487
|
+
|
|
488
|
+
P = self.parent().finite_tensor_product(k)
|
|
489
|
+
if k <= len(self):
|
|
490
|
+
l = self[:k]
|
|
491
|
+
else:
|
|
492
|
+
l = list(self)
|
|
493
|
+
N = len(self.parent().crystals)
|
|
494
|
+
while len(l) < k:
|
|
495
|
+
i = len(l) % N
|
|
496
|
+
l.append(self.parent()._phi_dicts[i][ l[-1].Epsilon() ])
|
|
497
|
+
return P(*l)
|
|
Binary file
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
from sage.structure.element cimport Element
|
|
3
|
+
|
|
4
|
+
cdef class Letter(Element):
|
|
5
|
+
cdef readonly int value
|
|
6
|
+
|
|
7
|
+
cdef class EmptyLetter(Element):
|
|
8
|
+
cdef readonly str value
|
|
9
|
+
cpdef e(self, int i)
|
|
10
|
+
cpdef f(self, int i)
|
|
11
|
+
cpdef int epsilon(self, int i) noexcept
|
|
12
|
+
cpdef int phi(self, int i) noexcept
|
|
13
|
+
|
|
14
|
+
cdef class Crystal_of_letters_type_A_element(Letter):
|
|
15
|
+
cpdef Letter e(self, int i)
|
|
16
|
+
cpdef Letter f(self, int i)
|
|
17
|
+
cpdef int epsilon(self, int i) noexcept
|
|
18
|
+
cpdef int phi(self, int i) noexcept
|
|
19
|
+
|
|
20
|
+
cdef class Crystal_of_letters_type_B_element(Letter):
|
|
21
|
+
cpdef Letter e(self, int i)
|
|
22
|
+
cpdef Letter f(self, int i)
|
|
23
|
+
cpdef int epsilon(self, int i) noexcept
|
|
24
|
+
cpdef int phi(self, int i) noexcept
|
|
25
|
+
|
|
26
|
+
cdef class Crystal_of_letters_type_C_element(Letter):
|
|
27
|
+
cpdef Letter e(self, int i)
|
|
28
|
+
cpdef Letter f(self, int i)
|
|
29
|
+
cpdef int epsilon(self, int i) noexcept
|
|
30
|
+
cpdef int phi(self, int i) noexcept
|
|
31
|
+
|
|
32
|
+
cdef class Crystal_of_letters_type_D_element(Letter):
|
|
33
|
+
cpdef Letter e(self, int i)
|
|
34
|
+
cpdef Letter f(self, int i)
|
|
35
|
+
cpdef int epsilon(self, int i) noexcept
|
|
36
|
+
cpdef int phi(self, int i) noexcept
|
|
37
|
+
|
|
38
|
+
cdef class Crystal_of_letters_type_G_element(Letter):
|
|
39
|
+
cpdef Letter e(self, int i)
|
|
40
|
+
cpdef Letter f(self, int i)
|
|
41
|
+
cpdef int epsilon(self, int i) noexcept
|
|
42
|
+
cpdef int phi(self, int i) noexcept
|
|
43
|
+
|
|
44
|
+
cdef class LetterTuple(Element):
|
|
45
|
+
cdef readonly tuple value
|
|
46
|
+
cpdef int epsilon(self, int i) noexcept
|
|
47
|
+
cpdef int phi(self, int i) noexcept
|
|
48
|
+
|
|
49
|
+
cdef class Crystal_of_letters_type_E6_element(LetterTuple):
|
|
50
|
+
cpdef LetterTuple e(self, int i)
|
|
51
|
+
cpdef LetterTuple f(self, int i)
|
|
52
|
+
|
|
53
|
+
cdef class Crystal_of_letters_type_E6_element_dual(LetterTuple):
|
|
54
|
+
cpdef LetterTuple lift(self)
|
|
55
|
+
cpdef LetterTuple retract(self, LetterTuple p)
|
|
56
|
+
cpdef LetterTuple e(self, int i)
|
|
57
|
+
cpdef LetterTuple f(self, int i)
|
|
58
|
+
|
|
59
|
+
cdef class Crystal_of_letters_type_E7_element(LetterTuple):
|
|
60
|
+
cpdef LetterTuple e(self, int i)
|
|
61
|
+
cpdef LetterTuple f(self, int i)
|
|
62
|
+
|
|
63
|
+
cdef class BKKLetter(Letter):
|
|
64
|
+
cpdef Letter e(self, int i)
|
|
65
|
+
cpdef Letter f(self, int i)
|
|
66
|
+
|
|
67
|
+
cdef class QueerLetter_element(Letter):
|
|
68
|
+
cpdef Letter e(self, int i)
|
|
69
|
+
cpdef Letter f(self, int i)
|
|
70
|
+
cpdef int epsilon(self, int i) noexcept
|
|
71
|
+
cpdef int phi(self, int i) noexcept
|
|
72
|
+
|
|
73
|
+
cdef class LetterWrapped(Element):
|
|
74
|
+
cdef readonly Element value
|
|
75
|
+
cpdef tuple _to_tuple(self)
|
|
76
|
+
cpdef LetterWrapped e(self, int i)
|
|
77
|
+
cpdef LetterWrapped f(self, int i)
|
|
78
|
+
cpdef int epsilon(self, int i) noexcept
|
|
79
|
+
cpdef int phi(self, int i) noexcept
|