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,1076 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.graphs sage.modules
|
|
3
|
+
r"""
|
|
4
|
+
Crystals of generalized Young walls
|
|
5
|
+
|
|
6
|
+
Generalized Young walls are certain generalizations of Young tableaux
|
|
7
|
+
introduced in [KS2010]_ and designed to be a realization of the crystals
|
|
8
|
+
`\mathcal{B}(\infty)` and `\mathcal{B}(\lambda)` in type `A_n^{(1)}`.
|
|
9
|
+
|
|
10
|
+
REFERENCES:
|
|
11
|
+
|
|
12
|
+
- [KLRS2016]_
|
|
13
|
+
- [KS2010]_
|
|
14
|
+
|
|
15
|
+
AUTHORS:
|
|
16
|
+
|
|
17
|
+
- Lucas David-Roesler: initial version
|
|
18
|
+
- Ben Salisbury: initial version
|
|
19
|
+
- Travis Scrimshaw: initial version
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
# *****************************************************************************
|
|
23
|
+
# Copyright (C) 2013
|
|
24
|
+
#
|
|
25
|
+
# Lucas David-Roesler (roesler at lvc dot edu)
|
|
26
|
+
# Ben Salisbury (bsalisbury at ccny dot cuny dot edu)
|
|
27
|
+
# Travis Scrimshaw (tscrim at ucdavis dot edu)
|
|
28
|
+
#
|
|
29
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
30
|
+
# https://www.gnu.org/licenses/
|
|
31
|
+
# *****************************************************************************
|
|
32
|
+
|
|
33
|
+
import re
|
|
34
|
+
from copy import deepcopy
|
|
35
|
+
from sage.combinat.root_system.cartan_type import CartanType
|
|
36
|
+
from sage.structure.parent import Parent
|
|
37
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
38
|
+
from sage.combinat.combinat import CombinatorialElement
|
|
39
|
+
from sage.categories.regular_crystals import RegularCrystals
|
|
40
|
+
from sage.categories.highest_weight_crystals import HighestWeightCrystals
|
|
41
|
+
from sage.categories.infinite_enumerated_sets import InfiniteEnumeratedSets
|
|
42
|
+
from sage.combinat.root_system.root_system import RootSystem
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class GeneralizedYoungWall(CombinatorialElement):
|
|
46
|
+
r"""
|
|
47
|
+
A generalized Young wall.
|
|
48
|
+
|
|
49
|
+
For more information, see
|
|
50
|
+
:class:`~sage.combinat.crystals.generalized_young_walls.InfinityCrystalOfGeneralizedYoungWalls`.
|
|
51
|
+
|
|
52
|
+
EXAMPLES::
|
|
53
|
+
|
|
54
|
+
sage: Y = crystals.infinity.GeneralizedYoungWalls(4)
|
|
55
|
+
sage: mg = Y.module_generators[0]; mg.pp()
|
|
56
|
+
0
|
|
57
|
+
sage: mg.f_string([1,2,0,1]).pp()
|
|
58
|
+
1|2|
|
|
59
|
+
0|1|
|
|
60
|
+
|
|
|
61
|
+
"""
|
|
62
|
+
|
|
63
|
+
def __init__(self, parent, data):
|
|
64
|
+
r"""
|
|
65
|
+
EXAMPLES::
|
|
66
|
+
|
|
67
|
+
sage: Y = crystals.infinity.GeneralizedYoungWalls(2)
|
|
68
|
+
sage: mg = Y.module_generators[0]
|
|
69
|
+
sage: TestSuite(mg).run()
|
|
70
|
+
"""
|
|
71
|
+
i = len(data) - 1
|
|
72
|
+
while i >= 0 and not data[i]:
|
|
73
|
+
data.pop()
|
|
74
|
+
i -= 1
|
|
75
|
+
self.rows = len(data)
|
|
76
|
+
if not data:
|
|
77
|
+
self.cols = 0
|
|
78
|
+
else:
|
|
79
|
+
self.cols = max(len(r) for r in data)
|
|
80
|
+
self.data = data
|
|
81
|
+
CombinatorialElement.__init__(self, parent, data)
|
|
82
|
+
|
|
83
|
+
def _repr_(self):
|
|
84
|
+
r"""
|
|
85
|
+
EXAMPLES::
|
|
86
|
+
|
|
87
|
+
sage: y = crystals.infinity.GeneralizedYoungWalls(3)([[0],[1,0,3,2],[2,1],[3,2,1,0,3,2],[0],[],[2]])
|
|
88
|
+
sage: y
|
|
89
|
+
[[0], [1, 0, 3, 2], [2, 1], [3, 2, 1, 0, 3, 2], [0], [], [2]]
|
|
90
|
+
"""
|
|
91
|
+
return repr(self.data)
|
|
92
|
+
|
|
93
|
+
def _repr_diagram(self):
|
|
94
|
+
r"""
|
|
95
|
+
Return a string representation of the diagram of ``self``.
|
|
96
|
+
|
|
97
|
+
EXAMPLES::
|
|
98
|
+
|
|
99
|
+
sage: y = crystals.infinity.GeneralizedYoungWalls(2)([[0,2,1],[1,0,2,1,0],[],[0],[1,0,2],[],[],[1]])
|
|
100
|
+
sage: print(y._repr_diagram())
|
|
101
|
+
1|
|
|
102
|
+
|
|
|
103
|
+
|
|
|
104
|
+
2|0|1|
|
|
105
|
+
0|
|
|
106
|
+
|
|
|
107
|
+
0|1|2|0|1|
|
|
108
|
+
1|2|0|
|
|
109
|
+
"""
|
|
110
|
+
if not self.data:
|
|
111
|
+
return '0'
|
|
112
|
+
ret = ""
|
|
113
|
+
for row in reversed(self.data):
|
|
114
|
+
wall = ''
|
|
115
|
+
for elem in reversed(row):
|
|
116
|
+
wall += str(elem)
|
|
117
|
+
wall += '|'
|
|
118
|
+
if row == []:
|
|
119
|
+
wall += '|'
|
|
120
|
+
ret += wall.rjust(2 * self.cols + 1) + "\n"
|
|
121
|
+
return ret
|
|
122
|
+
|
|
123
|
+
def _ascii_art_(self):
|
|
124
|
+
r"""
|
|
125
|
+
Return an ascii art representation of ``self``.
|
|
126
|
+
|
|
127
|
+
EXAMPLES::
|
|
128
|
+
|
|
129
|
+
sage: y = crystals.infinity.GeneralizedYoungWalls(2)([[0,2,1],[1,0,2,1,0],[],[0],[1,0,2],[],[],[1]])
|
|
130
|
+
sage: ascii_art(y)
|
|
131
|
+
1|
|
|
132
|
+
|
|
|
133
|
+
|
|
|
134
|
+
2|0|1|
|
|
135
|
+
0|
|
|
136
|
+
|
|
|
137
|
+
0|1|2|0|1|
|
|
138
|
+
1|2|0|
|
|
139
|
+
"""
|
|
140
|
+
from sage.typeset.ascii_art import AsciiArt
|
|
141
|
+
return AsciiArt(self._repr_diagram().splitlines())
|
|
142
|
+
|
|
143
|
+
def _unicode_art_(self):
|
|
144
|
+
"""
|
|
145
|
+
Return a unicode art representation of ``self``.
|
|
146
|
+
|
|
147
|
+
TESTS::
|
|
148
|
+
|
|
149
|
+
sage: y = crystals.infinity.GeneralizedYoungWalls(2)([[0,2,1],[1,0,2,1,0],[],[0],[1,0,2],[],[],[1]])
|
|
150
|
+
sage: unicode_art(y)
|
|
151
|
+
┌───┐
|
|
152
|
+
│ 1 │
|
|
153
|
+
└───┘
|
|
154
|
+
│
|
|
155
|
+
┤
|
|
156
|
+
│
|
|
157
|
+
┌───┬───┬───┐
|
|
158
|
+
│ 2 │ 0 │ 1 │
|
|
159
|
+
└───┴───┼───┤
|
|
160
|
+
│ 0 │
|
|
161
|
+
└───┘
|
|
162
|
+
│
|
|
163
|
+
┌───┬───┬───┬───┬───┐
|
|
164
|
+
│ 0 │ 1 │ 2 │ 0 │ 1 │
|
|
165
|
+
└───┴───┼───┼───┼───┤
|
|
166
|
+
│ 1 │ 2 │ 0 │
|
|
167
|
+
└───┴───┴───┘
|
|
168
|
+
"""
|
|
169
|
+
from sage.typeset.unicode_art import UnicodeArt
|
|
170
|
+
if not self.data:
|
|
171
|
+
return UnicodeArt(["0"])
|
|
172
|
+
|
|
173
|
+
from sage.combinat.output import ascii_art_table
|
|
174
|
+
import unicodedata
|
|
175
|
+
v = unicodedata.lookup('BOX DRAWINGS LIGHT VERTICAL')
|
|
176
|
+
vl = unicodedata.lookup('BOX DRAWINGS LIGHT VERTICAL AND LEFT')
|
|
177
|
+
table = [[None] * (self.cols - len(row)) + list(reversed(row))
|
|
178
|
+
for row in reversed(self)]
|
|
179
|
+
ret = []
|
|
180
|
+
for i, row in enumerate(ascii_art_table(table, use_unicode=True).splitlines()):
|
|
181
|
+
if row[-1] == " ":
|
|
182
|
+
if i % 2 == 0:
|
|
183
|
+
ret.append(row[:-1] + vl)
|
|
184
|
+
else:
|
|
185
|
+
ret.append(row[:-1] + v)
|
|
186
|
+
else:
|
|
187
|
+
ret.append(row)
|
|
188
|
+
return UnicodeArt(ret)
|
|
189
|
+
|
|
190
|
+
def __eq__(self, other):
|
|
191
|
+
r"""
|
|
192
|
+
EXAMPLES::
|
|
193
|
+
|
|
194
|
+
sage: GYW = crystals.infinity.GeneralizedYoungWalls(2)
|
|
195
|
+
sage: y = GYW([[],[1,0],[2,1]])
|
|
196
|
+
sage: x = GYW([[],[1,0],[2,1]])
|
|
197
|
+
sage: z = GYW([[],[1],[2]])
|
|
198
|
+
sage: x == y
|
|
199
|
+
True
|
|
200
|
+
sage: x == z
|
|
201
|
+
False
|
|
202
|
+
"""
|
|
203
|
+
if isinstance(other, GeneralizedYoungWall):
|
|
204
|
+
return self.data == other.data
|
|
205
|
+
return self.data == other
|
|
206
|
+
|
|
207
|
+
def __hash__(self):
|
|
208
|
+
"""
|
|
209
|
+
Return the hash of ``self``.
|
|
210
|
+
|
|
211
|
+
EXAMPLES::
|
|
212
|
+
|
|
213
|
+
sage: GYW = crystals.infinity.GeneralizedYoungWalls(2)
|
|
214
|
+
sage: h = hash(GYW)
|
|
215
|
+
"""
|
|
216
|
+
return hash(tuple(tuple(u) for u in self.data))
|
|
217
|
+
|
|
218
|
+
def raw_signature(self, i):
|
|
219
|
+
r"""
|
|
220
|
+
Return the sequence from `\{+,-\}` obtained from all `i`-admissible
|
|
221
|
+
slots and removable `i`-boxes without canceling any `(+,-)`-pairs.
|
|
222
|
+
The result also notes the row and column of the sign.
|
|
223
|
+
|
|
224
|
+
EXAMPLES::
|
|
225
|
+
|
|
226
|
+
sage: x = crystals.infinity.GeneralizedYoungWalls(3)([[],[1,0,3,2],[2,1],[3,2,1,0,3,2],[],[],[2]])
|
|
227
|
+
sage: x.raw_signature(2)
|
|
228
|
+
[['-', 3, 6], ['-', 1, 4], ['-', 6, 1]]
|
|
229
|
+
"""
|
|
230
|
+
sig = []
|
|
231
|
+
rank = self.parent().cartan_type().rank() # n+1
|
|
232
|
+
for row in range(self.rows):
|
|
233
|
+
if self.data[row] == [] and i == (row % rank):
|
|
234
|
+
sig.append(['+', row, 0])
|
|
235
|
+
elif self.data[row] == []:
|
|
236
|
+
continue
|
|
237
|
+
elif self.data[row][-1] == ((i + 1) % rank):
|
|
238
|
+
sig.append(['+', row, len(self.data[row]) + 1])
|
|
239
|
+
elif self.data[row][-1] == i:
|
|
240
|
+
sig.append(['-', row, len(self.data[row])])
|
|
241
|
+
return sorted(sig, key=self._sig_sort)
|
|
242
|
+
|
|
243
|
+
def _sig_sort(self, a):
|
|
244
|
+
r"""
|
|
245
|
+
Internal command used to appropriately sort the output
|
|
246
|
+
from :meth:`raw_signature()`.
|
|
247
|
+
|
|
248
|
+
INPUT:
|
|
249
|
+
|
|
250
|
+
- ``a`` -- list of the form ``['s',j,k]`` where `s` is a string, `j` is
|
|
251
|
+
an integer and `k` is an integer
|
|
252
|
+
|
|
253
|
+
EXAMPLES::
|
|
254
|
+
|
|
255
|
+
sage: hw = crystals.infinity.GeneralizedYoungWalls(5)([])
|
|
256
|
+
sage: hw._sig_sort(['+',1,0])
|
|
257
|
+
(0, 1)
|
|
258
|
+
"""
|
|
259
|
+
return (-a[2], a[1])
|
|
260
|
+
|
|
261
|
+
def generate_signature(self, i):
|
|
262
|
+
r"""
|
|
263
|
+
The `i`-signature of ``self`` (with whitespace where cancellation
|
|
264
|
+
occurs) together with the unreduced sequence from `\{+,-\}`. The
|
|
265
|
+
result also records to the row and column position of the sign.
|
|
266
|
+
|
|
267
|
+
EXAMPLES::
|
|
268
|
+
|
|
269
|
+
sage: y = crystals.infinity.GeneralizedYoungWalls(2)([[0],[1,0],[2,1,0,2],[],[1]])
|
|
270
|
+
sage: y.generate_signature(1)
|
|
271
|
+
([['+', 2, 5], ['-', 4, 1]], ' ')
|
|
272
|
+
"""
|
|
273
|
+
sig = []
|
|
274
|
+
rank = self.parent().cartan_type().classical().rank()
|
|
275
|
+
for row in range(self.rows):
|
|
276
|
+
if self.data[row] == [] and i == (row % (rank + 1)):
|
|
277
|
+
sig.append(['+', row, 0])
|
|
278
|
+
elif self.data[row] == []:
|
|
279
|
+
continue
|
|
280
|
+
elif self.data[row][-1] == ((i + 1) % (rank + 1)):
|
|
281
|
+
sig.append(['+', row, len(self.data[row]) + 1])
|
|
282
|
+
elif self.data[row][-1] == i:
|
|
283
|
+
sig.append(['-', row, len(self.data[row])])
|
|
284
|
+
sig = sorted(sig, key=self._sig_sort)
|
|
285
|
+
strsig = ''.join(x[0] for x in sig)
|
|
286
|
+
reducedsig = strsig
|
|
287
|
+
while re.search(r"\+\s*-", reducedsig):
|
|
288
|
+
reducedsig = re.sub(r"\+\s*-", lambda match: ''.ljust(len(match.group(0))), reducedsig)
|
|
289
|
+
return (sig, reducedsig)
|
|
290
|
+
|
|
291
|
+
def signature(self, i):
|
|
292
|
+
r"""
|
|
293
|
+
Return the `i`-signature of ``self``.
|
|
294
|
+
|
|
295
|
+
The signature is obtained by reading ``self`` in columns bottom to top starting from the left.
|
|
296
|
+
Then add a `-` at every `i`-box which may be removed from ``self`` and still obtain a legal
|
|
297
|
+
generalized Young wall, and add a `+` at each site for which an `i`-box may be added and still
|
|
298
|
+
obtain a valid generalized Young wall. Then successively cancel any `(+,-)`-pair to obtain a
|
|
299
|
+
sequence of the form `- \cdots -+ \cdots +`. This resulting sequence is the output.
|
|
300
|
+
|
|
301
|
+
EXAMPLES::
|
|
302
|
+
|
|
303
|
+
sage: y = crystals.infinity.GeneralizedYoungWalls(2)([[0],[1,0],[2,1,0,2],[],[1]])
|
|
304
|
+
sage: y.signature(1)
|
|
305
|
+
''
|
|
306
|
+
|
|
307
|
+
sage: x = crystals.infinity.GeneralizedYoungWalls(3)([[],[1,0,3,2],[2,1],[3,2,1,0,3,2],[],[],[2]])
|
|
308
|
+
sage: x.signature(2)
|
|
309
|
+
'---'
|
|
310
|
+
"""
|
|
311
|
+
return self.generate_signature(i)[1].strip()
|
|
312
|
+
|
|
313
|
+
def pp(self):
|
|
314
|
+
r"""
|
|
315
|
+
Pretty print ``self``.
|
|
316
|
+
|
|
317
|
+
EXAMPLES::
|
|
318
|
+
|
|
319
|
+
sage: y = crystals.infinity.GeneralizedYoungWalls(2)([[0,2,1],[1,0,2,1,0],[],[0],[1,0,2],[],[],[1]])
|
|
320
|
+
sage: y.pp()
|
|
321
|
+
1|
|
|
322
|
+
|
|
|
323
|
+
|
|
|
324
|
+
2|0|1|
|
|
325
|
+
0|
|
|
326
|
+
|
|
|
327
|
+
0|1|2|0|1|
|
|
328
|
+
1|2|0|
|
|
329
|
+
"""
|
|
330
|
+
print(self._repr_diagram())
|
|
331
|
+
|
|
332
|
+
def content(self):
|
|
333
|
+
r"""
|
|
334
|
+
Return total number of blocks in ``self``.
|
|
335
|
+
|
|
336
|
+
EXAMPLES::
|
|
337
|
+
|
|
338
|
+
sage: y = crystals.infinity.GeneralizedYoungWalls(2)([[0],[1,0],[2,1,0,2],[],[1]])
|
|
339
|
+
sage: y.content()
|
|
340
|
+
8
|
|
341
|
+
|
|
342
|
+
sage: x = crystals.infinity.GeneralizedYoungWalls(3)([[],[1,0,3,2],[2,1],[3,2,1,0,3,2],[],[],[2]])
|
|
343
|
+
sage: x.content()
|
|
344
|
+
13
|
|
345
|
+
"""
|
|
346
|
+
return sum(len(r) for r in self.data)
|
|
347
|
+
|
|
348
|
+
def number_of_parts(self):
|
|
349
|
+
r"""
|
|
350
|
+
Return the value of `\mathscr{N}` on ``self``.
|
|
351
|
+
|
|
352
|
+
In [KLRS2016]_, the statistic `\mathscr{N}` was defined on elements in
|
|
353
|
+
`\mathcal{Y}(\infty)` which counts how many parts are in the
|
|
354
|
+
corresponding Kostant partition. Specifically, the computation of
|
|
355
|
+
`\mathscr{N}(Y)` is done using the following algorithm:
|
|
356
|
+
|
|
357
|
+
- If `Y` has no rows whose right-most box is colored `n` and such that
|
|
358
|
+
the length of this row is a multiple of `n+1`, then `\mathscr{N}(Y)`
|
|
359
|
+
is the total number of distinct rows in `Y`, not counting multiplicity.
|
|
360
|
+
|
|
361
|
+
- Otherwise, search `Y` for the longest row such that the right-most box
|
|
362
|
+
is colored `n` and such that the total number of boxes in the row is
|
|
363
|
+
`k(n+1)` for some `k\ge 1`. Replace this row by `n+1` distinct rows
|
|
364
|
+
of length `k`, reordering all rows, if necessary, so that the result
|
|
365
|
+
is a proper wall. (Note that the resulting wall may no longer be
|
|
366
|
+
reduced.) Repeat the search and replace process for all other rows of
|
|
367
|
+
the above form for each `k' < k`. Then `\mathscr{N}(Y)` is the number
|
|
368
|
+
of distinct rows, not counting multiplicity, in the wall resulting
|
|
369
|
+
from this process.
|
|
370
|
+
|
|
371
|
+
EXAMPLES::
|
|
372
|
+
|
|
373
|
+
sage: Y = crystals.infinity.GeneralizedYoungWalls(3)
|
|
374
|
+
sage: y = Y([[0],[],[],[],[0],[],[],[],[0]])
|
|
375
|
+
sage: y.number_of_parts()
|
|
376
|
+
1
|
|
377
|
+
|
|
378
|
+
sage: Y = crystals.infinity.GeneralizedYoungWalls(3)
|
|
379
|
+
sage: y = Y([[0,3,2],[1,0],[],[],[0,3],[1,0],[],[],[0]])
|
|
380
|
+
sage: y.number_of_parts()
|
|
381
|
+
4
|
|
382
|
+
|
|
383
|
+
sage: Y = crystals.infinity.GeneralizedYoungWalls(2)
|
|
384
|
+
sage: y = Y([[0,2,1],[1,0],[2,1,0,2,1,0,2,1,0],[],[2,1,0,2,1,0]])
|
|
385
|
+
sage: y.number_of_parts()
|
|
386
|
+
8
|
|
387
|
+
"""
|
|
388
|
+
n = self.parent().cartan_type().rank() - 1
|
|
389
|
+
new = self.data[:]
|
|
390
|
+
i = 0
|
|
391
|
+
while i < len(new):
|
|
392
|
+
r = new[i]
|
|
393
|
+
if not r or r in new[i + 1:]:
|
|
394
|
+
new.pop(i)
|
|
395
|
+
elif r[0] == n and not len(r) % (n + 1):
|
|
396
|
+
for j in range(n + 1):
|
|
397
|
+
temp = [k % (n + 1)
|
|
398
|
+
for k in range(j + len(r) // (n + 1) - 1, j - 1, -1)]
|
|
399
|
+
if temp not in new:
|
|
400
|
+
new.insert(i + 1, temp)
|
|
401
|
+
new.pop(i)
|
|
402
|
+
else:
|
|
403
|
+
i += 1
|
|
404
|
+
return len(new)
|
|
405
|
+
|
|
406
|
+
def sum_of_weighted_row_lengths(self):
|
|
407
|
+
r"""
|
|
408
|
+
Return the value of `\mathscr{M}` on ``self``.
|
|
409
|
+
|
|
410
|
+
Let `\mathcal{Y}_0 \subset \mathcal{Y}(\infty)` be the set of
|
|
411
|
+
generalized Young walls which have no rows whose right-most box is
|
|
412
|
+
colored `n`. For `Y \in \mathcal{Y}_0`,
|
|
413
|
+
|
|
414
|
+
.. MATH::
|
|
415
|
+
|
|
416
|
+
\mathscr{M}(Y) = \sum_{i=1}^n (i+1)M_i(Y),
|
|
417
|
+
|
|
418
|
+
where `M_i(Y)` is the number of nonempty rows in `Y` whose right-most
|
|
419
|
+
box is colored `i-1`.
|
|
420
|
+
|
|
421
|
+
EXAMPLES::
|
|
422
|
+
|
|
423
|
+
sage: Y = crystals.infinity.GeneralizedYoungWalls(2)
|
|
424
|
+
sage: y = Y([[0,2,1,0,2],[1,0,2],[],[0,2],[1,0],[],[0],[1,0]])
|
|
425
|
+
sage: y.sum_of_weighted_row_lengths()
|
|
426
|
+
15
|
|
427
|
+
"""
|
|
428
|
+
n = self.parent().cartan_type().rank() - 1
|
|
429
|
+
|
|
430
|
+
def m(i):
|
|
431
|
+
mod = (i - 1) % (n + 1)
|
|
432
|
+
return len([1 for r in self.data if r and r[0] == mod])
|
|
433
|
+
|
|
434
|
+
for r in self.data:
|
|
435
|
+
if r and r[0] == n:
|
|
436
|
+
raise ValueError('Statistic only valid for generalized Young walls in Y_0')
|
|
437
|
+
return sum((i + 1) * m(i) for i in range(1, n + 1))
|
|
438
|
+
|
|
439
|
+
def e(self, i):
|
|
440
|
+
r"""
|
|
441
|
+
Return the application of the Kashiwara raising operator
|
|
442
|
+
`e_i` on ``self``.
|
|
443
|
+
|
|
444
|
+
This will remove the `i`-colored box corresponding to the
|
|
445
|
+
rightmost `+` in ``self.signature(i)``.
|
|
446
|
+
|
|
447
|
+
EXAMPLES::
|
|
448
|
+
|
|
449
|
+
sage: x = crystals.infinity.GeneralizedYoungWalls(3)([[],[1,0,3,2],[2,1],[3,2,1,0,3,2],[],[],[2]])
|
|
450
|
+
sage: x.e(2)
|
|
451
|
+
[[], [1, 0, 3, 2], [2, 1], [3, 2, 1, 0, 3, 2]]
|
|
452
|
+
sage: _.e(2)
|
|
453
|
+
[[], [1, 0, 3], [2, 1], [3, 2, 1, 0, 3, 2]]
|
|
454
|
+
sage: _.e(2)
|
|
455
|
+
[[], [1, 0, 3], [2, 1], [3, 2, 1, 0, 3]]
|
|
456
|
+
sage: _.e(2)
|
|
457
|
+
"""
|
|
458
|
+
signature = self.generate_signature(i)
|
|
459
|
+
raw_signature = signature[0]
|
|
460
|
+
lastminus = signature[1].rfind('-')
|
|
461
|
+
newdata = []
|
|
462
|
+
if lastminus > -1:
|
|
463
|
+
deletionrow = raw_signature[lastminus][1]
|
|
464
|
+
for r in range(self.rows):
|
|
465
|
+
if r == deletionrow:
|
|
466
|
+
newdata.append(list(self.data[r][:-1]))
|
|
467
|
+
else:
|
|
468
|
+
newdata.append(list(self.data[r]))
|
|
469
|
+
return self.__class__(self.parent(), newdata)
|
|
470
|
+
else:
|
|
471
|
+
return None
|
|
472
|
+
|
|
473
|
+
def f(self, i):
|
|
474
|
+
r"""
|
|
475
|
+
Return the application of the Kashiwara lowering operator
|
|
476
|
+
`f_i` on ``self``.
|
|
477
|
+
|
|
478
|
+
This will add an `i`-colored colored box to the site corresponding
|
|
479
|
+
to the leftmost plus in ``self.signature(i)``.
|
|
480
|
+
|
|
481
|
+
EXAMPLES::
|
|
482
|
+
|
|
483
|
+
sage: hw = crystals.infinity.GeneralizedYoungWalls(2)([])
|
|
484
|
+
sage: hw.f(1)
|
|
485
|
+
[[], [1]]
|
|
486
|
+
sage: _.f(2)
|
|
487
|
+
[[], [1], [2]]
|
|
488
|
+
sage: _.f(0)
|
|
489
|
+
[[], [1, 0], [2]]
|
|
490
|
+
sage: _.f(0)
|
|
491
|
+
[[0], [1, 0], [2]]
|
|
492
|
+
"""
|
|
493
|
+
signature = self.generate_signature(i)
|
|
494
|
+
raw_signature = signature[0]
|
|
495
|
+
firstplus = signature[1].find('+')
|
|
496
|
+
newdata = deepcopy(self.data)
|
|
497
|
+
if firstplus > -1:
|
|
498
|
+
additionrow = raw_signature[firstplus][1]
|
|
499
|
+
newdata[additionrow].append(i)
|
|
500
|
+
else:
|
|
501
|
+
while len(newdata) % self.cartan_type().rank() != i:
|
|
502
|
+
newdata.append([])
|
|
503
|
+
newdata.append([i])
|
|
504
|
+
return self.__class__(self.parent(), newdata)
|
|
505
|
+
|
|
506
|
+
def latex_large(self) -> str:
|
|
507
|
+
r"""
|
|
508
|
+
Generate LaTeX code for ``self`` but the output is larger.
|
|
509
|
+
|
|
510
|
+
This requires TikZ.
|
|
511
|
+
|
|
512
|
+
EXAMPLES::
|
|
513
|
+
|
|
514
|
+
sage: x = crystals.infinity.GeneralizedYoungWalls(3)([[],[1,0,3,2],[2,1],[3,2,1,0,3,2],[],[],[2]])
|
|
515
|
+
sage: x.latex_large()
|
|
516
|
+
'\\begin{tikzpicture}[baseline=5,scale=.45] \n \\foreach \\x [count=\\s from 0] in \n{{},{1,0,3,2},{2,1},{3,2,1,0,3,2},{},{},{2}} \n{\\foreach \\y [count=\\t from 0] in \\x { \\node[font=\\scriptsize] at (-\\t,\\s) {$\\y$}; \n \\draw (-\\t+.5,\\s+.5) to (-\\t-.5,\\s+.5); \n \\draw (-\\t+.5,\\s-.5) to (-\\t-.5,\\s-.5); \n \\draw (-\\t-.5,\\s-.5) to (-\\t-.5,\\s+.5); } \n \\draw[-,thick] (.5,\\s+1) to (.5,-.5) to (-\\s-1,-.5); } \n \\end{tikzpicture} \n'
|
|
517
|
+
"""
|
|
518
|
+
s = ""
|
|
519
|
+
if not self.data:
|
|
520
|
+
s += "\\emptyset"
|
|
521
|
+
else:
|
|
522
|
+
s += "\\begin{tikzpicture}[baseline=5,scale=.45] \n \\foreach \\x [count=\\s from 0] in \n"
|
|
523
|
+
s += "{" + ','.join("{" + ','.join(str(i) for i in r) + "}"
|
|
524
|
+
for r in self.data) + "} \n"
|
|
525
|
+
s += "{\\foreach \\y [count=\\t from 0] in \\x { \\node[font=\\scriptsize] at (-\\t,\\s) {$\\y$}; \n \\draw (-\\t+.5,\\s+.5) to (-\\t-.5,\\s+.5); \n \\draw (-\\t+.5,\\s-.5) to (-\\t-.5,\\s-.5); \n \\draw (-\\t-.5,\\s-.5) to (-\\t-.5,\\s+.5); } \n \\draw[-,thick] (.5,\\s+1) to (.5,-.5) to (-\\s-1,-.5); } \n \\end{tikzpicture} \n"
|
|
526
|
+
return s
|
|
527
|
+
|
|
528
|
+
def _latex_(self) -> str:
|
|
529
|
+
r"""
|
|
530
|
+
Generate LaTeX code for ``self``.
|
|
531
|
+
|
|
532
|
+
This requires TikZ.
|
|
533
|
+
|
|
534
|
+
EXAMPLES::
|
|
535
|
+
|
|
536
|
+
sage: x = crystals.infinity.GeneralizedYoungWalls(3)([[],[1,0,3,2],[2,1],[3,2,1,0,3,2],[],[],[2]])
|
|
537
|
+
sage: x._latex_()
|
|
538
|
+
'\\begin{tikzpicture}[baseline=5,scale=.25] \\foreach \\x [count=\\s from 0] in \n{{},{1,0,3,2},{2,1},{3,2,1,0,3,2},{},{},{2}} \n{\\foreach \\y [count=\\t from 0] in \\x { \\node[font=\\tiny] at (-\\t,\\s) {$\\y$}; \n \\draw (-\\t+.5,\\s+.5) to (-\\t-.5,\\s+.5); \n \\draw (-\\t+.5,\\s-.5) to (-\\t-.5,\\s-.5); \n \\draw (-\\t-.5,\\s-.5) to (-\\t-.5,\\s+.5); } \n \\draw[-] (.5,\\s+1) to (.5,-.5) to (-\\s-1,-.5); } \n \\end{tikzpicture} \n'
|
|
539
|
+
"""
|
|
540
|
+
s = ""
|
|
541
|
+
if not self.data:
|
|
542
|
+
s += "\\emptyset"
|
|
543
|
+
else:
|
|
544
|
+
s += "\\begin{tikzpicture}[baseline=5,scale=.25] \\foreach \\x [count=\\s from 0] in \n"
|
|
545
|
+
s += "{" + ','.join("{" + ','.join(str(i) for i in r) + "}"
|
|
546
|
+
for r in self.data) + "} \n"
|
|
547
|
+
s += "{\\foreach \\y [count=\\t from 0] in \\x { \\node[font=\\tiny] at (-\\t,\\s) {$\\y$}; \n \\draw (-\\t+.5,\\s+.5) to (-\\t-.5,\\s+.5); \n \\draw (-\\t+.5,\\s-.5) to (-\\t-.5,\\s-.5); \n \\draw (-\\t-.5,\\s-.5) to (-\\t-.5,\\s+.5); } \n \\draw[-] (.5,\\s+1) to (.5,-.5) to (-\\s-1,-.5); } \n \\end{tikzpicture} \n"
|
|
548
|
+
return s
|
|
549
|
+
|
|
550
|
+
def weight(self, root_lattice=False):
|
|
551
|
+
r"""
|
|
552
|
+
Return the weight of ``self``.
|
|
553
|
+
|
|
554
|
+
INPUT:
|
|
555
|
+
|
|
556
|
+
- ``root_lattice`` -- boolean determining whether weight should appear
|
|
557
|
+
in root lattice or not in extended affine weight lattice
|
|
558
|
+
|
|
559
|
+
EXAMPLES::
|
|
560
|
+
|
|
561
|
+
sage: x = crystals.infinity.GeneralizedYoungWalls(3)([[],[1,0,3,2],[2,1],[3,2,1,0,3,2],[],[],[2]])
|
|
562
|
+
sage: x.weight()
|
|
563
|
+
2*Lambda[0] + Lambda[1] - 4*Lambda[2] + Lambda[3] - 2*delta
|
|
564
|
+
sage: x.weight(root_lattice=True)
|
|
565
|
+
-2*alpha[0] - 3*alpha[1] - 5*alpha[2] - 3*alpha[3]
|
|
566
|
+
"""
|
|
567
|
+
L = self.cartan_type().root_system().root_lattice()
|
|
568
|
+
alpha = L.simple_roots()
|
|
569
|
+
W = sum(-1 * alpha[i] for r in self.data for i in r)
|
|
570
|
+
if not root_lattice:
|
|
571
|
+
E = self.cartan_type().root_system().weight_lattice(extended=True)
|
|
572
|
+
return E(W)
|
|
573
|
+
return L(W)
|
|
574
|
+
|
|
575
|
+
def epsilon(self, i):
|
|
576
|
+
r"""
|
|
577
|
+
Return the number of `i`-colored arrows in the `i`-string above
|
|
578
|
+
``self`` in the crystal graph.
|
|
579
|
+
|
|
580
|
+
EXAMPLES::
|
|
581
|
+
|
|
582
|
+
sage: y = crystals.infinity.GeneralizedYoungWalls(3)([[],[1,0,3,2],[2,1],[3,2,1,0,3,2],[],[],[2]])
|
|
583
|
+
sage: y.epsilon(1)
|
|
584
|
+
0
|
|
585
|
+
sage: y.epsilon(2)
|
|
586
|
+
3
|
|
587
|
+
sage: y.epsilon(0)
|
|
588
|
+
0
|
|
589
|
+
"""
|
|
590
|
+
if i not in self.index_set():
|
|
591
|
+
raise ValueError("i must be in the index set")
|
|
592
|
+
eps = 0
|
|
593
|
+
while True:
|
|
594
|
+
self = self.e(i)
|
|
595
|
+
if self is None:
|
|
596
|
+
break
|
|
597
|
+
eps += 1
|
|
598
|
+
return eps
|
|
599
|
+
|
|
600
|
+
def Epsilon(self):
|
|
601
|
+
r"""
|
|
602
|
+
Return `\sum_{i=0}^n \varepsilon_i(Y) \Lambda_i` where `Y` is ``self``.
|
|
603
|
+
|
|
604
|
+
EXAMPLES::
|
|
605
|
+
|
|
606
|
+
sage: y = crystals.infinity.GeneralizedYoungWalls(3)([[0],[1,0,3,2],[2,1],[3,2,1,0,3,2],[0],[],[2]])
|
|
607
|
+
sage: y.Epsilon()
|
|
608
|
+
Lambda[0] + 3*Lambda[2]
|
|
609
|
+
"""
|
|
610
|
+
La = self.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
611
|
+
return sum(self.epsilon(i) * La[i] for i in self.index_set())
|
|
612
|
+
|
|
613
|
+
def phi(self, i):
|
|
614
|
+
r"""
|
|
615
|
+
Return the value `\varepsilon_i(Y) + \langle h_i,
|
|
616
|
+
\mathrm{wt}(Y)\rangle`, where `h_i` is the `i`-th simple
|
|
617
|
+
coroot and `Y` is ``self``.
|
|
618
|
+
|
|
619
|
+
EXAMPLES::
|
|
620
|
+
|
|
621
|
+
sage: y = crystals.infinity.GeneralizedYoungWalls(3)([[0],[1,0,3,2],[2,1],[3,2,1,0,3,2],[0],[],[2]])
|
|
622
|
+
sage: y.phi(1)
|
|
623
|
+
3
|
|
624
|
+
sage: y.phi(2)
|
|
625
|
+
-1
|
|
626
|
+
"""
|
|
627
|
+
h = self.parent().weight_lattice_realization().simple_coroots()
|
|
628
|
+
return self.epsilon(i) + self.weight(root_lattice=False).scalar(h[i])
|
|
629
|
+
|
|
630
|
+
def Phi(self):
|
|
631
|
+
r"""
|
|
632
|
+
Return `\sum_{i=0}^n \varphi_i(Y) \Lambda_i` where `Y` is ``self``.
|
|
633
|
+
|
|
634
|
+
EXAMPLES::
|
|
635
|
+
|
|
636
|
+
sage: y = crystals.infinity.GeneralizedYoungWalls(3)([[0],[1,0,3,2],[2,1],[3,2,1,0,3,2],[0],[],[2]])
|
|
637
|
+
sage: y.Phi()
|
|
638
|
+
-Lambda[0] + 3*Lambda[1] - Lambda[2] + 3*Lambda[3]
|
|
639
|
+
|
|
640
|
+
sage: x = crystals.infinity.GeneralizedYoungWalls(3)([[],[1,0,3,2],[2,1],[3,2,1,0,3,2],[],[],[2]])
|
|
641
|
+
sage: x.Phi()
|
|
642
|
+
2*Lambda[0] + Lambda[1] - Lambda[2] + Lambda[3]
|
|
643
|
+
"""
|
|
644
|
+
La = self.cartan_type().root_system().weight_lattice(extended=True).fundamental_weights()
|
|
645
|
+
return sum(self.phi(i) * La[i] for i in self.index_set())
|
|
646
|
+
|
|
647
|
+
def column(self, k):
|
|
648
|
+
r"""
|
|
649
|
+
Return the list of boxes from the ``k``-th column of ``self``.
|
|
650
|
+
|
|
651
|
+
EXAMPLES::
|
|
652
|
+
|
|
653
|
+
sage: y = crystals.infinity.GeneralizedYoungWalls(3)([[0],[1,0,3,2],[2,1],[3,2,1,0,3,2],[0],[],[2]])
|
|
654
|
+
sage: y.column(2)
|
|
655
|
+
[None, 0, 1, 2, None, None, None]
|
|
656
|
+
|
|
657
|
+
sage: hw = crystals.infinity.GeneralizedYoungWalls(5)([])
|
|
658
|
+
sage: hw.column(1)
|
|
659
|
+
[]
|
|
660
|
+
"""
|
|
661
|
+
return [row[k - 1] if k - 1 < len(row) else None
|
|
662
|
+
for row in self.data]
|
|
663
|
+
|
|
664
|
+
def a(self, i, k):
|
|
665
|
+
r"""
|
|
666
|
+
Return the number `a_i(k)` of `i`-colored boxes in the ``k``-th
|
|
667
|
+
column of ``self``.
|
|
668
|
+
|
|
669
|
+
EXAMPLES::
|
|
670
|
+
|
|
671
|
+
sage: y = crystals.infinity.GeneralizedYoungWalls(3)([[0],[1,0,3,2],[2,1],[3,2,1,0,3,2],[0],[],[2]])
|
|
672
|
+
sage: y.a(1,2)
|
|
673
|
+
1
|
|
674
|
+
sage: y.a(0,2)
|
|
675
|
+
1
|
|
676
|
+
sage: y.a(3,2)
|
|
677
|
+
0
|
|
678
|
+
"""
|
|
679
|
+
A = [1 for c in range(len(self.column(k)))
|
|
680
|
+
if self.column(k)[c] == i]
|
|
681
|
+
return len(A)
|
|
682
|
+
|
|
683
|
+
def in_highest_weight_crystal(self, La):
|
|
684
|
+
r"""
|
|
685
|
+
Return a boolean indicating if the generalized Young wall element
|
|
686
|
+
is in the highest weight crystal cut out by the given highest weight
|
|
687
|
+
``La``.
|
|
688
|
+
|
|
689
|
+
By Theorem 4.1 of [KS2010]_, a generalized Young wall `Y` represents a
|
|
690
|
+
vertex in the highest weight crystal `Y(\lambda)`, with
|
|
691
|
+
`\lambda = \Lambda_{i_1} + \Lambda_{i_2} + \cdots + \Lambda_{i_\ell}`
|
|
692
|
+
a dominant integral weight of level `\ell > 0`, if it satisfies the
|
|
693
|
+
following condition. For each positive integer `k`, if there exists
|
|
694
|
+
`j \in I` such that `a_j(k) - a_{j-1}(k) > 0`, then for some
|
|
695
|
+
`p = 1, \ldots, \ell`,
|
|
696
|
+
|
|
697
|
+
.. MATH::
|
|
698
|
+
|
|
699
|
+
j + k \equiv i_p + 1 \bmod n+1 \text{ and } a_j(k) - a_{j-1}(k)
|
|
700
|
+
\le \lambda(h_{i_p}),
|
|
701
|
+
|
|
702
|
+
where `\{h_0, h_1, \ldots, h_n\}` is the set of simple coroots attached
|
|
703
|
+
to `A_n^{(1)}`.
|
|
704
|
+
|
|
705
|
+
EXAMPLES::
|
|
706
|
+
|
|
707
|
+
sage: La = RootSystem(['A',2,1]).weight_lattice(extended=True).fundamental_weights()[1]
|
|
708
|
+
sage: GYW = crystals.infinity.GeneralizedYoungWalls(2)
|
|
709
|
+
sage: y = GYW([[],[1,0],[2,1]])
|
|
710
|
+
sage: y.in_highest_weight_crystal(La)
|
|
711
|
+
True
|
|
712
|
+
sage: x = GYW([[],[1],[2],[],[],[2],[],[],[2]])
|
|
713
|
+
sage: x.in_highest_weight_crystal(La)
|
|
714
|
+
False
|
|
715
|
+
"""
|
|
716
|
+
if La not in self.parent().weight_lattice_realization():
|
|
717
|
+
raise TypeError("Must be an element in the weight lattice realization")
|
|
718
|
+
ac = self.parent().weight_lattice_realization().simple_coroots()
|
|
719
|
+
n = self.cartan_type().classical().rank()
|
|
720
|
+
index_set = self.index_set()
|
|
721
|
+
for k in range(1, self.cols + 1):
|
|
722
|
+
for j in index_set:
|
|
723
|
+
if self.a(j, k) - self.a((j - 1) % (n + 1), k) <= 0:
|
|
724
|
+
continue
|
|
725
|
+
else:
|
|
726
|
+
p_not_found = True
|
|
727
|
+
for p in index_set:
|
|
728
|
+
if (j + k - p - 1) % (n + 1) == 0 and self.a(j, k) - self.a((j - 1) % (n + 1), k) <= La.scalar(ac[p]):
|
|
729
|
+
p_not_found = False
|
|
730
|
+
continue
|
|
731
|
+
else:
|
|
732
|
+
continue
|
|
733
|
+
if p_not_found:
|
|
734
|
+
return False
|
|
735
|
+
return True
|
|
736
|
+
|
|
737
|
+
|
|
738
|
+
class InfinityCrystalOfGeneralizedYoungWalls(UniqueRepresentation, Parent):
|
|
739
|
+
r"""
|
|
740
|
+
The crystal `\mathcal{Y}(\infty)` of generalized Young walls of
|
|
741
|
+
type `A_n^{(1)}` as defined in [KS2010]_.
|
|
742
|
+
|
|
743
|
+
A generalized Young wall is a collection of boxes stacked on a fixed board,
|
|
744
|
+
such that color of the box at the site located in the `j`-th row from the
|
|
745
|
+
bottom and the `i`-th column from the right is `j-1 \bmod n+1`. There are
|
|
746
|
+
several growth conditions on elements in `Y \in \mathcal{Y}(\infty)`:
|
|
747
|
+
|
|
748
|
+
- Walls grow in rows from right to left. That is, for every box `y\in Y`
|
|
749
|
+
that is not in the rightmost column, there must be a box immediately to
|
|
750
|
+
the right of `y`.
|
|
751
|
+
|
|
752
|
+
- For all `p>q` such that `p-q \equiv 0 \bmod n+1`, the `p`-th row has
|
|
753
|
+
most as many boxes as the `q`-th row.
|
|
754
|
+
|
|
755
|
+
- There does not exist a column in the wall such that if one `i`-colored
|
|
756
|
+
box, for every `i = 0,1,\ldots,n`, is removed from that column, then the
|
|
757
|
+
result satisfies the above conditions.
|
|
758
|
+
|
|
759
|
+
There is a crystal structure on `\mathcal{Y}(\infty)` defined as follows.
|
|
760
|
+
Define maps
|
|
761
|
+
|
|
762
|
+
.. MATH::
|
|
763
|
+
|
|
764
|
+
e_i,\ f_i \colon \mathcal{Y}(\infty)
|
|
765
|
+
\longrightarrow \mathcal{Y}(\infty) \sqcup \{0\}, \qquad
|
|
766
|
+
\varepsilon_i,\ \varphi_i \colon \mathcal{Y}(\infty)
|
|
767
|
+
\longrightarrow \ZZ, \qquad
|
|
768
|
+
\mathrm{wt}\colon \mathcal{Y}(\infty) \longrightarrow
|
|
769
|
+
\bigoplus_{i=0}^n \ZZ \Lambda_i \oplus \ZZ \delta,
|
|
770
|
+
|
|
771
|
+
by
|
|
772
|
+
|
|
773
|
+
.. MATH::
|
|
774
|
+
|
|
775
|
+
\mathrm{wt}(Y) = -\sum_{i=0}^n m_i(Y) \alpha_i,
|
|
776
|
+
|
|
777
|
+
where `m_i(Y)` is the number of `i`-boxes in `Y`, `\varepsilon_i(Y)`
|
|
778
|
+
is the number of `-` in the `i`-signature of `Y`, and
|
|
779
|
+
|
|
780
|
+
.. MATH::
|
|
781
|
+
|
|
782
|
+
\varphi_i(Y) = \varepsilon_i(Y) + \langle h_i, \mathrm{wt}(Y) \rangle.
|
|
783
|
+
|
|
784
|
+
See :meth:`GeneralizedYoungWall.e()`, :meth:`GeneralizedYoungWall.f()`,
|
|
785
|
+
and :meth:`GeneralizedYoungWall.signature()` for more about
|
|
786
|
+
`e_i`, `f_i`, and `i`-signatures.
|
|
787
|
+
|
|
788
|
+
|
|
789
|
+
INPUT:
|
|
790
|
+
|
|
791
|
+
- ``n`` -- type `A_n^{(1)}`
|
|
792
|
+
|
|
793
|
+
EXAMPLES::
|
|
794
|
+
|
|
795
|
+
sage: Yinf = crystals.infinity.GeneralizedYoungWalls(3)
|
|
796
|
+
sage: y = Yinf([[0],[1,0,3,2],[],[3,2,1],[0],[1,0]])
|
|
797
|
+
sage: y.pp()
|
|
798
|
+
0|1|
|
|
799
|
+
0|
|
|
800
|
+
1|2|3|
|
|
801
|
+
|
|
|
802
|
+
2|3|0|1|
|
|
803
|
+
0|
|
|
804
|
+
sage: y.weight(root_lattice=True)
|
|
805
|
+
-4*alpha[0] - 3*alpha[1] - 2*alpha[2] - 2*alpha[3]
|
|
806
|
+
sage: y.f(0)
|
|
807
|
+
[[0], [1, 0, 3, 2], [], [3, 2, 1], [0], [1, 0], [], [], [0]]
|
|
808
|
+
sage: y.e(0).pp()
|
|
809
|
+
0|1|
|
|
810
|
+
|
|
|
811
|
+
1|2|3|
|
|
812
|
+
|
|
|
813
|
+
2|3|0|1|
|
|
814
|
+
0|
|
|
815
|
+
|
|
816
|
+
To display the crystal down to depth 3::
|
|
817
|
+
|
|
818
|
+
sage: S = Yinf.subcrystal(max_depth=3)
|
|
819
|
+
sage: G = Yinf.digraph(subset=S) # long time
|
|
820
|
+
sage: view(G) # not tested
|
|
821
|
+
"""
|
|
822
|
+
|
|
823
|
+
@staticmethod
|
|
824
|
+
def __classcall_private__(cls, n, category=None):
|
|
825
|
+
r"""
|
|
826
|
+
Normalize input to ensure a unique representation.
|
|
827
|
+
|
|
828
|
+
INPUT:
|
|
829
|
+
|
|
830
|
+
- ``n`` -- type `A_n^{(1)}`
|
|
831
|
+
|
|
832
|
+
EXAMPLES::
|
|
833
|
+
|
|
834
|
+
sage: Yinf = crystals.infinity.GeneralizedYoungWalls(3)
|
|
835
|
+
sage: Yinf2 = crystals.infinity.GeneralizedYoungWalls(int(3))
|
|
836
|
+
sage: Yinf is Yinf2
|
|
837
|
+
True
|
|
838
|
+
"""
|
|
839
|
+
return super().__classcall__(cls, n, category)
|
|
840
|
+
|
|
841
|
+
def __init__(self, n, category):
|
|
842
|
+
r"""
|
|
843
|
+
EXAMPLES::
|
|
844
|
+
|
|
845
|
+
sage: Yinf = crystals.infinity.GeneralizedYoungWalls(3)
|
|
846
|
+
sage: TestSuite(Yinf).run()
|
|
847
|
+
"""
|
|
848
|
+
self._cartan_type = CartanType(['A', n, 1])
|
|
849
|
+
if category is None:
|
|
850
|
+
category = (HighestWeightCrystals(), InfiniteEnumeratedSets())
|
|
851
|
+
Parent.__init__(self, category=category)
|
|
852
|
+
self.module_generators = (self.element_class(self, []),)
|
|
853
|
+
|
|
854
|
+
Element = GeneralizedYoungWall
|
|
855
|
+
|
|
856
|
+
def _element_constructor_(self, data):
|
|
857
|
+
r"""
|
|
858
|
+
Construct an element of ``self`` from ``data``.
|
|
859
|
+
|
|
860
|
+
INPUT:
|
|
861
|
+
|
|
862
|
+
- ``data`` -- a multilist
|
|
863
|
+
|
|
864
|
+
EXAMPLES::
|
|
865
|
+
|
|
866
|
+
sage: GYW = crystals.infinity.GeneralizedYoungWalls(2)
|
|
867
|
+
sage: y = GYW([[],[1,0],[2,1]]) # indirect doctest
|
|
868
|
+
sage: y
|
|
869
|
+
[[], [1, 0], [2, 1]]
|
|
870
|
+
"""
|
|
871
|
+
return self.element_class(self, data)
|
|
872
|
+
|
|
873
|
+
def _repr_(self):
|
|
874
|
+
r"""
|
|
875
|
+
EXAMPLES::
|
|
876
|
+
|
|
877
|
+
sage: Y = crystals.infinity.GeneralizedYoungWalls(4)
|
|
878
|
+
sage: Y
|
|
879
|
+
Crystal of generalized Young walls of type ['A', 4, 1]
|
|
880
|
+
"""
|
|
881
|
+
return "Crystal of generalized Young walls of type {}".format(self._cartan_type)
|
|
882
|
+
|
|
883
|
+
|
|
884
|
+
########################
|
|
885
|
+
# Highest weight GYW #
|
|
886
|
+
########################
|
|
887
|
+
|
|
888
|
+
class CrystalOfGeneralizedYoungWallsElement(GeneralizedYoungWall):
|
|
889
|
+
r"""
|
|
890
|
+
Element of the highest weight crystal of generalized Young walls.
|
|
891
|
+
"""
|
|
892
|
+
|
|
893
|
+
def e(self, i):
|
|
894
|
+
r"""
|
|
895
|
+
Compute the action of `e_i` restricted to the highest weight crystal.
|
|
896
|
+
|
|
897
|
+
EXAMPLES::
|
|
898
|
+
|
|
899
|
+
sage: La = RootSystem(['A',2,1]).weight_lattice(extended=True).fundamental_weights()[1]
|
|
900
|
+
sage: hwy = crystals.GeneralizedYoungWalls(2,La)([[],[1,0],[2,1]])
|
|
901
|
+
sage: hwy.e(1)
|
|
902
|
+
[[], [1, 0], [2]]
|
|
903
|
+
sage: hwy.e(2)
|
|
904
|
+
sage: hwy.e(3)
|
|
905
|
+
"""
|
|
906
|
+
ret = GeneralizedYoungWall.e(self, i)
|
|
907
|
+
if ret is None:
|
|
908
|
+
return None
|
|
909
|
+
if ret.in_highest_weight_crystal(self.parent().hw):
|
|
910
|
+
return self.__class__(self.parent(), ret.data)
|
|
911
|
+
return None
|
|
912
|
+
|
|
913
|
+
def f(self, i):
|
|
914
|
+
r"""
|
|
915
|
+
Compute the action of `f_i` restricted to the highest weight crystal.
|
|
916
|
+
|
|
917
|
+
EXAMPLES::
|
|
918
|
+
|
|
919
|
+
sage: La = RootSystem(['A',2,1]).weight_lattice(extended=True).fundamental_weights()[1]
|
|
920
|
+
sage: GYW = crystals.infinity.GeneralizedYoungWalls(2)
|
|
921
|
+
sage: y = GYW([[],[1,0],[2,1]])
|
|
922
|
+
sage: y.f(1)
|
|
923
|
+
[[], [1, 0], [2, 1], [], [1]]
|
|
924
|
+
sage: hwy = crystals.GeneralizedYoungWalls(2,La)([[],[1,0],[2,1]])
|
|
925
|
+
sage: hwy.f(1)
|
|
926
|
+
"""
|
|
927
|
+
ret = GeneralizedYoungWall.f(self, i)
|
|
928
|
+
if ret.in_highest_weight_crystal(self.parent().hw):
|
|
929
|
+
return self.__class__(self.parent(), ret.data)
|
|
930
|
+
return None
|
|
931
|
+
|
|
932
|
+
def weight(self):
|
|
933
|
+
r"""
|
|
934
|
+
Return the weight of ``self`` in the highest weight crystal as an
|
|
935
|
+
element of the weight lattice `\bigoplus_{i=0}^n \ZZ \Lambda_i`.
|
|
936
|
+
|
|
937
|
+
EXAMPLES::
|
|
938
|
+
|
|
939
|
+
sage: La = RootSystem(['A',2,1]).weight_lattice(extended=True).fundamental_weights()[1]
|
|
940
|
+
sage: hwy = crystals.GeneralizedYoungWalls(2,La)([[],[1,0],[2,1]])
|
|
941
|
+
sage: hwy.weight()
|
|
942
|
+
Lambda[0] - Lambda[1] + Lambda[2] - delta
|
|
943
|
+
"""
|
|
944
|
+
return self.parent().weight_lattice_realization()(self.parent().hw + GeneralizedYoungWall.weight(self))
|
|
945
|
+
|
|
946
|
+
def phi(self, i):
|
|
947
|
+
r"""
|
|
948
|
+
Return the value `\varepsilon_i(Y) + \langle h_i,
|
|
949
|
+
\mathrm{wt}(Y)\rangle`, where `h_i` is the `i`-th simple
|
|
950
|
+
coroot and `Y` is ``self``.
|
|
951
|
+
|
|
952
|
+
EXAMPLES::
|
|
953
|
+
|
|
954
|
+
sage: La = RootSystem(['A',3,1]).weight_lattice(extended=True).fundamental_weights()
|
|
955
|
+
sage: y = crystals.GeneralizedYoungWalls(3,La[0])([])
|
|
956
|
+
sage: y.phi(1)
|
|
957
|
+
0
|
|
958
|
+
sage: y.phi(2)
|
|
959
|
+
0
|
|
960
|
+
"""
|
|
961
|
+
h = self.parent().weight_lattice_realization().simple_coroots()
|
|
962
|
+
return self.epsilon(i) + self.weight().scalar(h[i])
|
|
963
|
+
|
|
964
|
+
|
|
965
|
+
class CrystalOfGeneralizedYoungWalls(InfinityCrystalOfGeneralizedYoungWalls):
|
|
966
|
+
r"""
|
|
967
|
+
The crystal `\mathcal{Y}(\lambda)` of generalized Young walls of the given
|
|
968
|
+
type with highest weight `\lambda`.
|
|
969
|
+
|
|
970
|
+
These were characterized in Theorem 4.1 of [KS2010]_.
|
|
971
|
+
See :meth:`GeneralizedYoungWall.in_highest_weight_crystal()`.
|
|
972
|
+
|
|
973
|
+
INPUT:
|
|
974
|
+
|
|
975
|
+
- ``n`` -- type `A_n^{(1)}`
|
|
976
|
+
|
|
977
|
+
- ``weight`` -- dominant integral weight
|
|
978
|
+
|
|
979
|
+
EXAMPLES::
|
|
980
|
+
|
|
981
|
+
sage: La = RootSystem(['A',3,1]).weight_lattice(extended=True).fundamental_weights()[1]
|
|
982
|
+
sage: YLa = crystals.GeneralizedYoungWalls(3,La)
|
|
983
|
+
sage: y = YLa([[0],[1,0,3,2,1],[2,1,0],[3]])
|
|
984
|
+
sage: y.pp()
|
|
985
|
+
3|
|
|
986
|
+
0|1|2|
|
|
987
|
+
1|2|3|0|1|
|
|
988
|
+
0|
|
|
989
|
+
sage: y.weight()
|
|
990
|
+
-Lambda[0] + Lambda[2] + Lambda[3] - 3*delta
|
|
991
|
+
sage: y.in_highest_weight_crystal(La)
|
|
992
|
+
True
|
|
993
|
+
sage: y.f(1)
|
|
994
|
+
[[0], [1, 0, 3, 2, 1], [2, 1, 0], [3], [], [1]]
|
|
995
|
+
sage: y.f(1).f(1)
|
|
996
|
+
sage: yy = crystals.infinity.GeneralizedYoungWalls(3)([[0], [1, 0, 3, 2, 1], [2, 1, 0], [3], [], [1]])
|
|
997
|
+
sage: yy.f(1)
|
|
998
|
+
[[0], [1, 0, 3, 2, 1], [2, 1, 0], [3], [], [1], [], [], [], [1]]
|
|
999
|
+
sage: yyy = yy.f(1)
|
|
1000
|
+
sage: yyy.in_highest_weight_crystal(La)
|
|
1001
|
+
False
|
|
1002
|
+
|
|
1003
|
+
sage: LS = crystals.LSPaths(['A',3,1],[1,0,0,0])
|
|
1004
|
+
sage: C = LS.subcrystal(max_depth=4)
|
|
1005
|
+
sage: G = LS.digraph(subset=C)
|
|
1006
|
+
sage: P = RootSystem(['A',3,1]).weight_lattice(extended=True)
|
|
1007
|
+
sage: La = P.fundamental_weights()
|
|
1008
|
+
sage: YW = crystals.GeneralizedYoungWalls(3,La[0])
|
|
1009
|
+
sage: CW = YW.subcrystal(max_depth=4)
|
|
1010
|
+
sage: GW = YW.digraph(subset=CW)
|
|
1011
|
+
sage: GW.is_isomorphic(G,edge_labels=True)
|
|
1012
|
+
True
|
|
1013
|
+
|
|
1014
|
+
To display the crystal down to a specified depth::
|
|
1015
|
+
|
|
1016
|
+
sage: S = YLa.subcrystal(max_depth=4)
|
|
1017
|
+
sage: G = YLa.digraph(subset=S)
|
|
1018
|
+
sage: view(G) # not tested
|
|
1019
|
+
"""
|
|
1020
|
+
@staticmethod
|
|
1021
|
+
def __classcall_private__(cls, n, La):
|
|
1022
|
+
r"""
|
|
1023
|
+
EXAMPLES::
|
|
1024
|
+
|
|
1025
|
+
sage: La = RootSystem(['A',2,1]).weight_lattice(extended=True).fundamental_weights()[2]
|
|
1026
|
+
sage: Al = RootSystem(['A',2,1]).weight_lattice(extended=True).monomial(2)
|
|
1027
|
+
sage: Y = crystals.GeneralizedYoungWalls(2,La)
|
|
1028
|
+
sage: Y1 = crystals.GeneralizedYoungWalls(int(2),Al)
|
|
1029
|
+
sage: Y is Y1
|
|
1030
|
+
True
|
|
1031
|
+
"""
|
|
1032
|
+
La = RootSystem(['A', n, 1]).weight_lattice(extended=True)(La)
|
|
1033
|
+
return super().__classcall__(cls, n, La)
|
|
1034
|
+
|
|
1035
|
+
def __init__(self, n, La):
|
|
1036
|
+
r"""
|
|
1037
|
+
EXAMPLES::
|
|
1038
|
+
|
|
1039
|
+
sage: La = RootSystem(['A',2,1]).weight_lattice(extended=True).fundamental_weights()[1]
|
|
1040
|
+
sage: YLa = crystals.GeneralizedYoungWalls(2,La)
|
|
1041
|
+
|
|
1042
|
+
We skip the two tests because they take a very long time::
|
|
1043
|
+
|
|
1044
|
+
sage: TestSuite(YLa).run(skip=["_test_enumerated_set_contains","_test_stembridge_local_axioms"]) # long time
|
|
1045
|
+
"""
|
|
1046
|
+
cat = (RegularCrystals(), HighestWeightCrystals(),
|
|
1047
|
+
InfiniteEnumeratedSets())
|
|
1048
|
+
InfinityCrystalOfGeneralizedYoungWalls.__init__(self, n,
|
|
1049
|
+
category=cat)
|
|
1050
|
+
self.hw = La
|
|
1051
|
+
|
|
1052
|
+
Element = CrystalOfGeneralizedYoungWallsElement
|
|
1053
|
+
|
|
1054
|
+
def _repr_(self):
|
|
1055
|
+
r"""
|
|
1056
|
+
EXAMPLES::
|
|
1057
|
+
|
|
1058
|
+
sage: La = RootSystem(['A',5,1]).weight_lattice(extended=True).fundamental_weights()[2]
|
|
1059
|
+
sage: Y = crystals.GeneralizedYoungWalls(5,La)
|
|
1060
|
+
sage: Y
|
|
1061
|
+
Highest weight crystal of generalized Young walls of Cartan type ['A', 5, 1] and highest weight Lambda[2]
|
|
1062
|
+
"""
|
|
1063
|
+
return "Highest weight crystal of generalized Young walls of Cartan type {1!s} and highest weight {0!s}".format(self.hw, self._cartan_type)
|
|
1064
|
+
|
|
1065
|
+
def __iter__(self):
|
|
1066
|
+
r"""
|
|
1067
|
+
EXAMPLES::
|
|
1068
|
+
|
|
1069
|
+
sage: y = crystals.infinity.GeneralizedYoungWalls(3)([[0],[1,0,3,2],[2,1],[3,2,1,0,3,2],[0],[],[2]])
|
|
1070
|
+
sage: x = y.__iter__()
|
|
1071
|
+
sage: next(x)
|
|
1072
|
+
[0]
|
|
1073
|
+
"""
|
|
1074
|
+
for c in super().__iter__():
|
|
1075
|
+
if c.in_highest_weight_crystal(self.hw):
|
|
1076
|
+
yield c
|