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,499 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.graphs sage.modules
|
|
3
|
+
r"""
|
|
4
|
+
Tensor product of Kirillov-Reshetikhin tableaux
|
|
5
|
+
|
|
6
|
+
A tensor product of
|
|
7
|
+
:class:`~sage.combinat.rigged_configurations.kr_tableaux.KirillovReshetikhinTableaux`
|
|
8
|
+
which are tableaux of `r` rows and `s` columns which naturally arise in the
|
|
9
|
+
bijection between rigged configurations and tableaux and which are in
|
|
10
|
+
bijection with the elements of the Kirillov-Reshetikhin crystal `B^{r,s}`, see
|
|
11
|
+
:func:`~sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinCrystal`.
|
|
12
|
+
|
|
13
|
+
EXAMPLES:
|
|
14
|
+
|
|
15
|
+
Type `A_n^{(1)}` examples::
|
|
16
|
+
|
|
17
|
+
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A',3,1], [[3,1], [2,1]])
|
|
18
|
+
sage: KRT
|
|
19
|
+
Tensor product of Kirillov-Reshetikhin tableaux of type ['A', 3, 1] and factor(s) ((3, 1), (2, 1))
|
|
20
|
+
sage: KRT.cardinality()
|
|
21
|
+
24
|
|
22
|
+
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A',3,1], [[1,1], [2,1], [3,1]])
|
|
23
|
+
sage: KRT
|
|
24
|
+
Tensor product of Kirillov-Reshetikhin tableaux of type ['A', 3, 1] and factor(s) ((1, 1), (2, 1), (3, 1))
|
|
25
|
+
sage: len(KRT.module_generators)
|
|
26
|
+
5
|
|
27
|
+
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A',3,1], [[1,1], [2,1], [3,1]])
|
|
28
|
+
sage: KRT.cardinality()
|
|
29
|
+
96
|
|
30
|
+
|
|
31
|
+
Type `D_n^{(1)}` examples::
|
|
32
|
+
|
|
33
|
+
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['D', 4, 1], [[1, 1], [2, 1], [1, 1]])
|
|
34
|
+
sage: KRT
|
|
35
|
+
Tensor product of Kirillov-Reshetikhin tableaux of type ['D', 4, 1] and factor(s) ((1, 1), (2, 1), (1, 1))
|
|
36
|
+
sage: T = KRT(pathlist=[[1], [-2, 2], [1]])
|
|
37
|
+
sage: T
|
|
38
|
+
[[1]] (X) [[2], [-2]] (X) [[1]]
|
|
39
|
+
sage: T2 = KRT(pathlist=[[1], [2, -2], [1]])
|
|
40
|
+
sage: T2
|
|
41
|
+
[[1]] (X) [[-2], [2]] (X) [[1]]
|
|
42
|
+
sage: T == T2
|
|
43
|
+
False
|
|
44
|
+
|
|
45
|
+
AUTHORS:
|
|
46
|
+
|
|
47
|
+
- Travis Scrimshaw (2010-09-26): initial version
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
# ****************************************************************************
|
|
51
|
+
# Copyright (C) 2010-2012 Travis Scrimshaw <tscrim@ucdavis.edu>
|
|
52
|
+
#
|
|
53
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
54
|
+
#
|
|
55
|
+
# This code is distributed in the hope that it will be useful,
|
|
56
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
57
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
58
|
+
# General Public License for more details.
|
|
59
|
+
#
|
|
60
|
+
# The full text of the GPL is available at:
|
|
61
|
+
#
|
|
62
|
+
# https://www.gnu.org/licenses/
|
|
63
|
+
# ****************************************************************************
|
|
64
|
+
|
|
65
|
+
from sage.misc.cachefunc import cached_method
|
|
66
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
67
|
+
|
|
68
|
+
from sage.combinat.crystals.tensor_product import FullTensorProductOfRegularCrystals
|
|
69
|
+
from sage.combinat.crystals.letters import CrystalOfLetters
|
|
70
|
+
from sage.combinat.root_system.cartan_type import CartanType
|
|
71
|
+
|
|
72
|
+
from sage.combinat.rigged_configurations.tensor_product_kr_tableaux_element \
|
|
73
|
+
import TensorProductOfKirillovReshetikhinTableauxElement
|
|
74
|
+
from sage.combinat.rigged_configurations.kr_tableaux import KirillovReshetikhinTableaux, \
|
|
75
|
+
KirillovReshetikhinTableauxElement
|
|
76
|
+
|
|
77
|
+
from sage.rings.integer import Integer
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
class HighestWeightTensorKRT(UniqueRepresentation):
|
|
81
|
+
"""
|
|
82
|
+
Class so we do not have to build the module generators for
|
|
83
|
+
:class:`~sage.combinat.rigged_configurations.tensor_product_kr_tableaux.TensorProductOfKirillovReshetikhinTableaux`
|
|
84
|
+
at initialization.
|
|
85
|
+
|
|
86
|
+
.. WARNING::
|
|
87
|
+
|
|
88
|
+
This class is for internal use only!
|
|
89
|
+
"""
|
|
90
|
+
|
|
91
|
+
def __init__(self, tp_krt):
|
|
92
|
+
"""
|
|
93
|
+
Initialize ``self``.
|
|
94
|
+
|
|
95
|
+
EXAMPLES::
|
|
96
|
+
|
|
97
|
+
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['D',4,1], [[2,2]])
|
|
98
|
+
sage: from sage.combinat.rigged_configurations.tensor_product_kr_tableaux import HighestWeightTensorKRT
|
|
99
|
+
sage: hw = HighestWeightTensorKRT(KRT)
|
|
100
|
+
sage: hw2 = HighestWeightTensorKRT(KRT)
|
|
101
|
+
sage: hw is hw2
|
|
102
|
+
True
|
|
103
|
+
"""
|
|
104
|
+
self.tp_krt = tp_krt
|
|
105
|
+
self._cache = None
|
|
106
|
+
|
|
107
|
+
def __getitem__(self, i):
|
|
108
|
+
"""
|
|
109
|
+
Return the `i`-th highest weight element in the cache.
|
|
110
|
+
|
|
111
|
+
TESTS::
|
|
112
|
+
|
|
113
|
+
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A',3,1], [[3,1], [2,1]])
|
|
114
|
+
sage: KRT.module_generators[0]
|
|
115
|
+
[[1], [2], [3]] (X) [[1], [2]]
|
|
116
|
+
"""
|
|
117
|
+
if self._cache is None:
|
|
118
|
+
self._cache = tuple([x.to_tensor_product_of_kirillov_reshetikhin_tableaux()
|
|
119
|
+
for x in self.tp_krt.rigged_configurations().module_generators])
|
|
120
|
+
return self._cache[i]
|
|
121
|
+
|
|
122
|
+
def __iter__(self):
|
|
123
|
+
"""
|
|
124
|
+
Iterate over the highest weight elements.
|
|
125
|
+
|
|
126
|
+
EXAMPLES::
|
|
127
|
+
|
|
128
|
+
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['D',4,1], [[2,1]])
|
|
129
|
+
sage: from sage.combinat.rigged_configurations.tensor_product_kr_tableaux import HighestWeightTensorKRT
|
|
130
|
+
sage: for x in HighestWeightTensorKRT(KRT): x
|
|
131
|
+
[[1], [2]]
|
|
132
|
+
[[1], [-1]]
|
|
133
|
+
"""
|
|
134
|
+
if self._cache is None:
|
|
135
|
+
self._cache = tuple([x.to_tensor_product_of_kirillov_reshetikhin_tableaux()
|
|
136
|
+
for x in self.tp_krt.rigged_configurations().module_generators])
|
|
137
|
+
yield from self._cache
|
|
138
|
+
|
|
139
|
+
def __repr__(self):
|
|
140
|
+
"""
|
|
141
|
+
Return a string representation of ``self``.
|
|
142
|
+
|
|
143
|
+
EXAMPLES::
|
|
144
|
+
|
|
145
|
+
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['D',4,1], [[2,1]])
|
|
146
|
+
sage: from sage.combinat.rigged_configurations.tensor_product_kr_tableaux import HighestWeightTensorKRT
|
|
147
|
+
sage: HighestWeightTensorKRT(KRT)
|
|
148
|
+
Highest weight elements of Tensor product of Kirillov-Reshetikhin tableaux of type ['D', 4, 1] and factor(s) ((2, 1),)
|
|
149
|
+
"""
|
|
150
|
+
return "Highest weight elements of {}".format(self.tp_krt)
|
|
151
|
+
|
|
152
|
+
@cached_method
|
|
153
|
+
def cardinality(self):
|
|
154
|
+
"""
|
|
155
|
+
Return the cardinality of ``self``, which is the number of
|
|
156
|
+
highest weight elements.
|
|
157
|
+
|
|
158
|
+
EXAMPLES::
|
|
159
|
+
|
|
160
|
+
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['D',4,1], [[2,2]])
|
|
161
|
+
sage: from sage.combinat.rigged_configurations.tensor_product_kr_tableaux import HighestWeightTensorKRT
|
|
162
|
+
sage: HW = HighestWeightTensorKRT(KRT)
|
|
163
|
+
sage: HW.cardinality()
|
|
164
|
+
3
|
|
165
|
+
sage: len(HW)
|
|
166
|
+
3
|
|
167
|
+
sage: len(KRT.module_generators)
|
|
168
|
+
3
|
|
169
|
+
"""
|
|
170
|
+
count = 0
|
|
171
|
+
for x in self:
|
|
172
|
+
count += 1
|
|
173
|
+
return Integer(count)
|
|
174
|
+
|
|
175
|
+
__len__ = cardinality
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
class TensorProductOfKirillovReshetikhinTableaux(FullTensorProductOfRegularCrystals):
|
|
179
|
+
r"""
|
|
180
|
+
A tensor product of
|
|
181
|
+
:class:`~sage.combinat.rigged_configurations.kr_tableaux.KirillovReshetikhinTableaux`.
|
|
182
|
+
|
|
183
|
+
Through the bijection with rigged configurations, the tableaux that are
|
|
184
|
+
produced in all nonexceptional types are all of rectangular shapes and do
|
|
185
|
+
not necessarily obey the usual strict increase in columns and weak
|
|
186
|
+
increase in rows. The relation between the elements of the
|
|
187
|
+
Kirillov-Reshetikhin crystal, given by the Kashiwara-Nakashima tableaux,
|
|
188
|
+
and the Kirillov-Reshetikhin tableaux is given by a filling map.
|
|
189
|
+
|
|
190
|
+
.. NOTE::
|
|
191
|
+
|
|
192
|
+
The tableaux for all non-simply-laced types are provably correct if the
|
|
193
|
+
bijection with :class:`rigged configurations
|
|
194
|
+
<sage.combinat.rigged_configurations.rigged_configurations.RiggedConfigurations>`
|
|
195
|
+
holds. Therefore this is currently only proven for `B^{r,1}` or
|
|
196
|
+
`B^{1,s}` and in general for types `A_n^{(1)}` and `D_n^{(1)}`.
|
|
197
|
+
|
|
198
|
+
For more information see [OSS2011]_ and
|
|
199
|
+
:class:`~sage.combinat.rigged_configurations.kr_tableaux.KirillovReshetikhinTableaux`.
|
|
200
|
+
|
|
201
|
+
For more information on KR crystals, see
|
|
202
|
+
:mod:`sage.combinat.crystals.kirillov_reshetikhin`.
|
|
203
|
+
|
|
204
|
+
INPUT:
|
|
205
|
+
|
|
206
|
+
- ``cartan_type`` -- a Cartan type
|
|
207
|
+
|
|
208
|
+
- ``B`` -- an (ordered) list of pairs `(r,s)` which give the dimension
|
|
209
|
+
of a rectangle with `r` rows and `s` columns and corresponds to a
|
|
210
|
+
Kirillov-Reshetikhin tableaux factor of `B^{r,s}`.
|
|
211
|
+
|
|
212
|
+
REFERENCES:
|
|
213
|
+
|
|
214
|
+
.. [OSS2011] Masato Okado, Reiho Sakamoto, Anne Schilling,
|
|
215
|
+
Affine crystal structure on rigged configurations of type `D_n^{(1)}`,
|
|
216
|
+
J. Algebraic Combinatorics 37(3) (2013) 571-599 (:arxiv:`1109.3523` [math.QA])
|
|
217
|
+
|
|
218
|
+
EXAMPLES:
|
|
219
|
+
|
|
220
|
+
We can go between tensor products of KR crystals and rigged
|
|
221
|
+
configurations::
|
|
222
|
+
|
|
223
|
+
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A',3,1], [[3,1],[2,2]])
|
|
224
|
+
sage: tp_krt = KRT(pathlist=[[3,2,1],[3,2,3,2]]); tp_krt
|
|
225
|
+
[[1], [2], [3]] (X) [[2, 2], [3, 3]]
|
|
226
|
+
sage: RC = RiggedConfigurations(['A',3,1], [[3,1],[2,2]])
|
|
227
|
+
sage: rc_elt = tp_krt.to_rigged_configuration(); rc_elt
|
|
228
|
+
<BLANKLINE>
|
|
229
|
+
-2[ ][ ]-2
|
|
230
|
+
<BLANKLINE>
|
|
231
|
+
0[ ][ ]0
|
|
232
|
+
<BLANKLINE>
|
|
233
|
+
(/)
|
|
234
|
+
<BLANKLINE>
|
|
235
|
+
sage: tp_krc = tp_krt.to_tensor_product_of_kirillov_reshetikhin_crystals(); tp_krc
|
|
236
|
+
[[[1], [2], [3]], [[2, 2], [3, 3]]]
|
|
237
|
+
sage: KRT(tp_krc) == tp_krt
|
|
238
|
+
True
|
|
239
|
+
sage: rc_elt == tp_krt.to_rigged_configuration()
|
|
240
|
+
True
|
|
241
|
+
sage: KR1 = crystals.KirillovReshetikhin(['A',3,1], 3,1)
|
|
242
|
+
sage: KR2 = crystals.KirillovReshetikhin(['A',3,1], 2,2)
|
|
243
|
+
sage: T = crystals.TensorProduct(KR1, KR2)
|
|
244
|
+
sage: t = T(KR1(3,2,1), KR2(3,2,3,2))
|
|
245
|
+
sage: KRT(t) == tp_krt
|
|
246
|
+
True
|
|
247
|
+
sage: t == tp_krc
|
|
248
|
+
True
|
|
249
|
+
|
|
250
|
+
We can get the highest weight elements by using the attribute
|
|
251
|
+
``module_generators``::
|
|
252
|
+
|
|
253
|
+
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A',3,1], [[3,1], [2,1]])
|
|
254
|
+
sage: list(KRT.module_generators)
|
|
255
|
+
[[[1], [2], [3]] (X) [[1], [2]], [[1], [3], [4]] (X) [[1], [2]]]
|
|
256
|
+
|
|
257
|
+
To create elements directly (i.e. not passing in KR tableaux elements),
|
|
258
|
+
there is the **pathlist** option will receive a list of lists which
|
|
259
|
+
contain the reversed far-eastern reading word of the tableau. That is to
|
|
260
|
+
say, in English notation, the word obtain from reading bottom-to-top,
|
|
261
|
+
left-to-right. ::
|
|
262
|
+
|
|
263
|
+
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A',3,1], [[3,2], [1,2], [2,1]])
|
|
264
|
+
sage: elt = KRT(pathlist=[[3, 2, 1, 4, 2, 1], [1, 3], [3, 1]])
|
|
265
|
+
sage: elt.pp()
|
|
266
|
+
1 1 (X) 1 3 (X) 1
|
|
267
|
+
2 2 3
|
|
268
|
+
3 4
|
|
269
|
+
|
|
270
|
+
One can still create elements in the same way as tensor product of
|
|
271
|
+
crystals::
|
|
272
|
+
|
|
273
|
+
sage: K1 = crystals.KirillovReshetikhin(['A',3,1], 3, 2, model='KR')
|
|
274
|
+
sage: K2 = crystals.KirillovReshetikhin(['A',3,1], 1, 2, model='KR')
|
|
275
|
+
sage: K3 = crystals.KirillovReshetikhin(['A',3,1], 2, 1, model='KR')
|
|
276
|
+
sage: eltlong = KRT(K1(3, 2, 1, 4, 2, 1), K2(1, 3), K3(3, 1))
|
|
277
|
+
sage: eltlong == elt
|
|
278
|
+
True
|
|
279
|
+
"""
|
|
280
|
+
@staticmethod
|
|
281
|
+
def __classcall_private__(cls, cartan_type, B):
|
|
282
|
+
"""
|
|
283
|
+
Normalize the input arguments to ensure unique representation.
|
|
284
|
+
|
|
285
|
+
EXAMPLES::
|
|
286
|
+
|
|
287
|
+
sage: T1 = crystals.TensorProductOfKirillovReshetikhinTableaux(CartanType(['A',3,1]), [[2,2]])
|
|
288
|
+
sage: T2 = crystals.TensorProductOfKirillovReshetikhinTableaux(['A',3,1], [(2,2)])
|
|
289
|
+
sage: T3 = crystals.TensorProductOfKirillovReshetikhinTableaux(['A',3,1], ((2,2),))
|
|
290
|
+
sage: T2 is T1, T3 is T1
|
|
291
|
+
(True, True)
|
|
292
|
+
"""
|
|
293
|
+
cartan_type = CartanType(cartan_type)
|
|
294
|
+
if not cartan_type.is_affine():
|
|
295
|
+
raise ValueError("The Cartan type must be affine")
|
|
296
|
+
|
|
297
|
+
# Standardize B input into a tuple of tuples
|
|
298
|
+
B = tuple(tuple(dim) for dim in B)
|
|
299
|
+
return super().__classcall__(cls, cartan_type, B)
|
|
300
|
+
|
|
301
|
+
def __init__(self, cartan_type, B):
|
|
302
|
+
r"""
|
|
303
|
+
Initialize ``self``.
|
|
304
|
+
|
|
305
|
+
EXAMPLES::
|
|
306
|
+
|
|
307
|
+
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A',3,1], [[3,1],[2,2]]); KRT
|
|
308
|
+
Tensor product of Kirillov-Reshetikhin tableaux of type ['A', 3, 1] and factor(s) ((3, 1), (2, 2))
|
|
309
|
+
sage: TestSuite(KRT).run() # long time
|
|
310
|
+
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['D',4,1], [[2,2]])
|
|
311
|
+
sage: TestSuite(KRT).run() # long time
|
|
312
|
+
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['D',4,1], [[3,1]])
|
|
313
|
+
sage: TestSuite(KRT).run() # long time
|
|
314
|
+
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['D',4,1], [[4,3]])
|
|
315
|
+
sage: TestSuite(KRT).run() # long time
|
|
316
|
+
"""
|
|
317
|
+
self.dims = B
|
|
318
|
+
self.letters = CrystalOfLetters(cartan_type.classical())
|
|
319
|
+
tensor_prod = tuple(KirillovReshetikhinTableaux(cartan_type, rect_dims[0], rect_dims[1])
|
|
320
|
+
for rect_dims in B)
|
|
321
|
+
FullTensorProductOfRegularCrystals.__init__(self, tensor_prod, cartan_type=cartan_type)
|
|
322
|
+
# This is needed to override the module_generators set in FullTensorProductOfRegularCrystals
|
|
323
|
+
self.module_generators = HighestWeightTensorKRT(self)
|
|
324
|
+
self.rename("Tensor product of Kirillov-Reshetikhin tableaux "
|
|
325
|
+
f"of type {cartan_type} and factor(s) {B}")
|
|
326
|
+
|
|
327
|
+
def __iter__(self):
|
|
328
|
+
"""
|
|
329
|
+
Return the iterator of ``self``.
|
|
330
|
+
|
|
331
|
+
EXAMPLES::
|
|
332
|
+
|
|
333
|
+
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A', 3, 1], [[2,1], [1,1]])
|
|
334
|
+
sage: g = KRT.__iter__()
|
|
335
|
+
sage: next(g) # random
|
|
336
|
+
[[2], [3]] (X) [[1]]
|
|
337
|
+
sage: next(g) # random
|
|
338
|
+
[[2], [4]] (X) [[1]]
|
|
339
|
+
"""
|
|
340
|
+
index_set = self._cartan_type.classical().index_set()
|
|
341
|
+
from sage.sets.recursively_enumerated_set import RecursivelyEnumeratedSet
|
|
342
|
+
return RecursivelyEnumeratedSet(self.module_generators,
|
|
343
|
+
lambda x: [x.f(i) for i in index_set],
|
|
344
|
+
structure=None).naive_search_iterator()
|
|
345
|
+
|
|
346
|
+
def _test_bijection(self, **options):
|
|
347
|
+
r"""
|
|
348
|
+
Test function to make sure that the bijection between rigged
|
|
349
|
+
configurations and Kirillov-Reshetikhin tableaux is correct.
|
|
350
|
+
|
|
351
|
+
EXAMPLES::
|
|
352
|
+
|
|
353
|
+
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A', 4, 1], [[3,2],[4,1]])
|
|
354
|
+
sage: KRT._test_bijection()
|
|
355
|
+
"""
|
|
356
|
+
tester = self._tester(**options)
|
|
357
|
+
rejects = []
|
|
358
|
+
for x in self:
|
|
359
|
+
y = x.to_rigged_configuration()
|
|
360
|
+
z = y.to_tensor_product_of_kirillov_reshetikhin_tableaux()
|
|
361
|
+
if z != x:
|
|
362
|
+
rejects.append((x, z))
|
|
363
|
+
|
|
364
|
+
tester.assertEqual(len(rejects), 0, "Bijection is not correct: %s" % rejects)
|
|
365
|
+
if rejects:
|
|
366
|
+
return rejects
|
|
367
|
+
|
|
368
|
+
def _element_constructor_(self, *path, **options):
|
|
369
|
+
r"""
|
|
370
|
+
Construct an element of ``self``.
|
|
371
|
+
|
|
372
|
+
Typically the user will call this with the option **pathlist** which
|
|
373
|
+
will receive a list of lists of reversed far-eastern reading words.
|
|
374
|
+
|
|
375
|
+
EXAMPLES::
|
|
376
|
+
|
|
377
|
+
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A',3,1], [[3,1], [2,1]])
|
|
378
|
+
sage: KRT(pathlist=[[4, 2, 1], [2, 1]])
|
|
379
|
+
[[1], [2], [4]] (X) [[1], [2]]
|
|
380
|
+
"""
|
|
381
|
+
if isinstance(path[0], KirillovReshetikhinTableauxElement):
|
|
382
|
+
return self.element_class(self, path)
|
|
383
|
+
if isinstance(path[0], TensorProductOfKirillovReshetikhinTableauxElement):
|
|
384
|
+
return path[0]
|
|
385
|
+
|
|
386
|
+
from sage.combinat.crystals.kirillov_reshetikhin import KirillovReshetikhinGenericCrystalElement
|
|
387
|
+
if isinstance(path[0], KirillovReshetikhinGenericCrystalElement):
|
|
388
|
+
return self.element_class(self, [x.to_kirillov_reshetikhin_tableau() for x in path])
|
|
389
|
+
|
|
390
|
+
from sage.combinat.crystals.tensor_product import TensorProductOfRegularCrystalsElement
|
|
391
|
+
if isinstance(path[0], TensorProductOfRegularCrystalsElement) and \
|
|
392
|
+
isinstance(path[0][0], KirillovReshetikhinGenericCrystalElement):
|
|
393
|
+
return self.element_class(self, [x.to_kirillov_reshetikhin_tableau() for x in path[0]])
|
|
394
|
+
|
|
395
|
+
from sage.combinat.rigged_configurations.rigged_configuration_element import RiggedConfigurationElement
|
|
396
|
+
if isinstance(path[0], RiggedConfigurationElement):
|
|
397
|
+
if self.rigged_configurations() != path[0].parent():
|
|
398
|
+
raise ValueError("incorrect bijection image")
|
|
399
|
+
return path[0].to_tensor_product_of_kirillov_reshetikhin_tableaux()
|
|
400
|
+
|
|
401
|
+
return self.element_class(self, list(path), **options)
|
|
402
|
+
|
|
403
|
+
@cached_method
|
|
404
|
+
def _module_generators_brute_force(self):
|
|
405
|
+
"""
|
|
406
|
+
Return the module generators of ``self`` by brute force searching
|
|
407
|
+
through all elements of ``self`` as a Cartesian product.
|
|
408
|
+
|
|
409
|
+
EXAMPLES::
|
|
410
|
+
|
|
411
|
+
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A',3,1], [[1,3], [2,1]])
|
|
412
|
+
sage: tuple(KRT.module_generators)
|
|
413
|
+
([[1, 1, 1]] (X) [[1], [2]], [[1, 1, 3]] (X) [[1], [2]])
|
|
414
|
+
sage: KRT._module_generators_brute_force()
|
|
415
|
+
([[1, 1, 1]] (X) [[1], [2]], [[1, 1, 3]] (X) [[1], [2]])
|
|
416
|
+
"""
|
|
417
|
+
index_set = self.cartan_type().classical().index_set()
|
|
418
|
+
return tuple(x for x in FullTensorProductOfRegularCrystals.__iter__(self)
|
|
419
|
+
if x.is_highest_weight(index_set))
|
|
420
|
+
|
|
421
|
+
@cached_method
|
|
422
|
+
def rigged_configurations(self):
|
|
423
|
+
"""
|
|
424
|
+
Return the corresponding set of rigged configurations.
|
|
425
|
+
|
|
426
|
+
EXAMPLES::
|
|
427
|
+
|
|
428
|
+
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A',3,1], [[1,3], [2,1]])
|
|
429
|
+
sage: KRT.rigged_configurations()
|
|
430
|
+
Rigged configurations of type ['A', 3, 1] and factor(s) ((1, 3), (2, 1))
|
|
431
|
+
"""
|
|
432
|
+
from sage.combinat.rigged_configurations.rigged_configurations import RiggedConfigurations
|
|
433
|
+
return RiggedConfigurations(self.cartan_type(), self.dims)
|
|
434
|
+
|
|
435
|
+
@cached_method
|
|
436
|
+
def tensor_product_of_kirillov_reshetikhin_crystals(self):
|
|
437
|
+
"""
|
|
438
|
+
Return the corresponding tensor product of Kirillov-Reshetikhin
|
|
439
|
+
crystals.
|
|
440
|
+
|
|
441
|
+
EXAMPLES::
|
|
442
|
+
|
|
443
|
+
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A',3,1], [[3,1],[2,2]])
|
|
444
|
+
sage: KRT.tensor_product_of_kirillov_reshetikhin_crystals()
|
|
445
|
+
Full tensor product of the crystals [Kirillov-Reshetikhin crystal of type ['A', 3, 1] with (r,s)=(3,1),
|
|
446
|
+
Kirillov-Reshetikhin crystal of type ['A', 3, 1] with (r,s)=(2,2)]
|
|
447
|
+
|
|
448
|
+
TESTS::
|
|
449
|
+
|
|
450
|
+
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['D', 4, 1], [[4,1], [3,3]])
|
|
451
|
+
sage: KR1 = crystals.KirillovReshetikhin(['D', 4, 1], 4, 1)
|
|
452
|
+
sage: KR2 = crystals.KirillovReshetikhin(['D', 4, 1], 3, 3)
|
|
453
|
+
sage: T = crystals.TensorProduct(KR1, KR2)
|
|
454
|
+
sage: T == KRT.tensor_product_of_kirillov_reshetikhin_crystals()
|
|
455
|
+
True
|
|
456
|
+
sage: T is KRT.tensor_product_of_kirillov_reshetikhin_crystals()
|
|
457
|
+
True
|
|
458
|
+
"""
|
|
459
|
+
return FullTensorProductOfRegularCrystals(tuple(x.kirillov_reshetikhin_crystal() for x in self.crystals),
|
|
460
|
+
cartan_type=self.cartan_type())
|
|
461
|
+
|
|
462
|
+
def tensor(self, *crystals, **options):
|
|
463
|
+
"""
|
|
464
|
+
Return the tensor product of ``self`` with ``crystals``.
|
|
465
|
+
|
|
466
|
+
If ``crystals`` is a list of (a tensor product of) KR tableaux, this
|
|
467
|
+
returns a :class:`TensorProductOfKirillovReshetikhinTableaux`.
|
|
468
|
+
|
|
469
|
+
EXAMPLES::
|
|
470
|
+
|
|
471
|
+
sage: TP = crystals.TensorProductOfKirillovReshetikhinTableaux(['A', 3, 1], [[1,3],[3,1]])
|
|
472
|
+
sage: K = crystals.KirillovReshetikhin(['A', 3, 1], 2, 2, model='KR')
|
|
473
|
+
sage: TP.tensor(K, TP)
|
|
474
|
+
Tensor product of Kirillov-Reshetikhin tableaux of type ['A', 3, 1]
|
|
475
|
+
and factor(s) ((1, 3), (3, 1), (2, 2), (1, 3), (3, 1))
|
|
476
|
+
|
|
477
|
+
sage: C = crystals.KirillovReshetikhin(['A',3,1], 3, 1, model='KN')
|
|
478
|
+
sage: TP.tensor(K, C)
|
|
479
|
+
Full tensor product of the crystals
|
|
480
|
+
[Kirillov-Reshetikhin tableaux of type ['A', 3, 1] and shape (1, 3),
|
|
481
|
+
Kirillov-Reshetikhin tableaux of type ['A', 3, 1] and shape (3, 1),
|
|
482
|
+
Kirillov-Reshetikhin tableaux of type ['A', 3, 1] and shape (2, 2),
|
|
483
|
+
Kirillov-Reshetikhin crystal of type ['A', 3, 1] with (r,s)=(3,1)]
|
|
484
|
+
"""
|
|
485
|
+
ct = self._cartan_type
|
|
486
|
+
from sage.combinat.rigged_configurations.kr_tableaux import KirillovReshetikhinTableaux
|
|
487
|
+
if all(isinstance(B, (KirillovReshetikhinTableaux, TensorProductOfKirillovReshetikhinTableaux))
|
|
488
|
+
and B.cartan_type() == ct for B in crystals):
|
|
489
|
+
dims = list(self.dims)
|
|
490
|
+
for B in crystals:
|
|
491
|
+
if isinstance(B, TensorProductOfKirillovReshetikhinTableaux):
|
|
492
|
+
dims += B.dims
|
|
493
|
+
elif isinstance(B, KirillovReshetikhinTableaux):
|
|
494
|
+
dims.append([B._r, B._s])
|
|
495
|
+
return TensorProductOfKirillovReshetikhinTableaux(ct, dims)
|
|
496
|
+
return super().tensor(*crystals, **options)
|
|
497
|
+
|
|
498
|
+
|
|
499
|
+
TensorProductOfKirillovReshetikhinTableaux.Element = TensorProductOfKirillovReshetikhinTableauxElement
|