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,742 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.graphs sage.modules
|
|
3
|
+
r"""
|
|
4
|
+
Affine crystals
|
|
5
|
+
"""
|
|
6
|
+
# ****************************************************************************
|
|
7
|
+
# Copyright (C) 2008 Brant Jones <brant at math.ucdavis.edu>
|
|
8
|
+
# Anne Schilling <anne at math.ucdavis.edu>
|
|
9
|
+
#
|
|
10
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
11
|
+
# https://www.gnu.org/licenses/
|
|
12
|
+
# ***************************************************************************
|
|
13
|
+
# Acknowledgment: most of the design and implementation of this
|
|
14
|
+
# library is heavily inspired from MuPAD-Combinat.
|
|
15
|
+
# ***************************************************************************
|
|
16
|
+
|
|
17
|
+
from sage.misc.abstract_method import abstract_method
|
|
18
|
+
from sage.categories.loop_crystals import RegularLoopCrystals
|
|
19
|
+
from sage.structure.parent import Parent
|
|
20
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
21
|
+
from sage.structure.element_wrapper import ElementWrapper
|
|
22
|
+
from sage.combinat.root_system.cartan_type import CartanType
|
|
23
|
+
from sage.structure.richcmp import richcmp
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class AffineCrystalFromClassical(UniqueRepresentation, Parent):
|
|
27
|
+
r"""
|
|
28
|
+
This abstract class can be used for affine crystals that are constructed
|
|
29
|
+
from a classical crystal. The zero arrows can be implemented using
|
|
30
|
+
different methods (for example using a Dynkin diagram automorphisms or
|
|
31
|
+
virtual crystals).
|
|
32
|
+
|
|
33
|
+
This is a helper class, mostly used to implement Kirillov-Reshetikhin
|
|
34
|
+
crystals (see:
|
|
35
|
+
:func:`~sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinCrystal`).
|
|
36
|
+
|
|
37
|
+
For general information about crystals see :mod:`sage.combinat.crystals`.
|
|
38
|
+
|
|
39
|
+
INPUT:
|
|
40
|
+
|
|
41
|
+
- ``cartan_type`` -- the Cartan type of the resulting affine crystal
|
|
42
|
+
|
|
43
|
+
- ``classical_crystal`` -- instance of a classical crystal
|
|
44
|
+
|
|
45
|
+
EXAMPLES::
|
|
46
|
+
|
|
47
|
+
sage: n = 2
|
|
48
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
49
|
+
sage: pr = attrcall("promotion")
|
|
50
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
51
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
|
|
52
|
+
sage: A.list()
|
|
53
|
+
[[[1]], [[2]], [[3]]]
|
|
54
|
+
sage: A.cartan_type()
|
|
55
|
+
['A', 2, 1]
|
|
56
|
+
sage: A.index_set()
|
|
57
|
+
(0, 1, 2)
|
|
58
|
+
sage: b = A(rows=[[1]])
|
|
59
|
+
sage: b.weight()
|
|
60
|
+
-Lambda[0] + Lambda[1]
|
|
61
|
+
sage: b.classical_weight()
|
|
62
|
+
(1, 0, 0)
|
|
63
|
+
sage: [x.s(0) for x in A.list()]
|
|
64
|
+
[[[3]], [[2]], [[1]]]
|
|
65
|
+
sage: [x.s(1) for x in A.list()]
|
|
66
|
+
[[[2]], [[1]], [[3]]]
|
|
67
|
+
"""
|
|
68
|
+
@staticmethod
|
|
69
|
+
def __classcall__(cls, cartan_type, *args, **options):
|
|
70
|
+
"""
|
|
71
|
+
TESTS::
|
|
72
|
+
|
|
73
|
+
sage: n = 1
|
|
74
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
75
|
+
sage: pr = attrcall("promotion")
|
|
76
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
77
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) # indirect doctest
|
|
78
|
+
sage: B = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) # indirect doctest
|
|
79
|
+
sage: A is B
|
|
80
|
+
True
|
|
81
|
+
"""
|
|
82
|
+
ct = CartanType(cartan_type)
|
|
83
|
+
return super().__classcall__(cls, ct, *args, **options)
|
|
84
|
+
|
|
85
|
+
def __init__(self, cartan_type, classical_crystal, category=None):
|
|
86
|
+
"""
|
|
87
|
+
Input is an affine Cartan type ``cartan_type``, a classical crystal
|
|
88
|
+
``classical_crystal``, and automorphism and its inverse
|
|
89
|
+
``automorphism`` and ``inverse_automorphism``, and the Dynkin node
|
|
90
|
+
``dynkin_node``.
|
|
91
|
+
|
|
92
|
+
EXAMPLES::
|
|
93
|
+
|
|
94
|
+
sage: n = 1
|
|
95
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
96
|
+
sage: pr = attrcall("promotion")
|
|
97
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
98
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) # indirect doctest
|
|
99
|
+
sage: A.list()
|
|
100
|
+
[[[1]], [[2]]]
|
|
101
|
+
sage: A.cartan_type()
|
|
102
|
+
['A', 1, 1]
|
|
103
|
+
sage: A.index_set()
|
|
104
|
+
(0, 1)
|
|
105
|
+
|
|
106
|
+
.. NOTE::
|
|
107
|
+
|
|
108
|
+
:class:`~sage.combinat.crystals.affine.AffineCrystalFromClassical`
|
|
109
|
+
is an abstract class, so we can't test it directly.
|
|
110
|
+
|
|
111
|
+
TESTS::
|
|
112
|
+
|
|
113
|
+
sage: TestSuite(A).run()
|
|
114
|
+
"""
|
|
115
|
+
if category is None:
|
|
116
|
+
category = RegularLoopCrystals()
|
|
117
|
+
self._cartan_type = cartan_type
|
|
118
|
+
Parent.__init__(self, category=category)
|
|
119
|
+
self.classical_crystal = classical_crystal
|
|
120
|
+
self.module_generators = [self.retract(gen)
|
|
121
|
+
for gen in self.classical_crystal.module_generators]
|
|
122
|
+
self.element_class._latex_ = lambda x: x.lift()._latex_()
|
|
123
|
+
|
|
124
|
+
def _repr_(self):
|
|
125
|
+
"""
|
|
126
|
+
EXAMPLES::
|
|
127
|
+
|
|
128
|
+
sage: n = 1
|
|
129
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
130
|
+
sage: pr = attrcall("promotion")
|
|
131
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
132
|
+
sage: crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) # indirect doctest
|
|
133
|
+
An affine crystal for type ['A', 1, 1]
|
|
134
|
+
"""
|
|
135
|
+
return "An affine crystal for type {}".format(self.cartan_type())
|
|
136
|
+
|
|
137
|
+
def cardinality(self):
|
|
138
|
+
"""
|
|
139
|
+
Return the cardinality of ``self``.
|
|
140
|
+
|
|
141
|
+
EXAMPLES::
|
|
142
|
+
|
|
143
|
+
sage: C = crystals.Tableaux(['A',3],shape=[1])
|
|
144
|
+
sage: pr = attrcall("promotion")
|
|
145
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
146
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',3,1],C,pr,pr_inverse,1)
|
|
147
|
+
sage: A.cardinality() == C.cardinality()
|
|
148
|
+
True
|
|
149
|
+
"""
|
|
150
|
+
return self.classical_crystal.cardinality()
|
|
151
|
+
|
|
152
|
+
def __iter__(self):
|
|
153
|
+
r"""
|
|
154
|
+
Construct the iterator from the underlying classical crystal.
|
|
155
|
+
|
|
156
|
+
TESTS::
|
|
157
|
+
|
|
158
|
+
sage: n = 1
|
|
159
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
160
|
+
sage: pr = attrcall("promotion")
|
|
161
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
162
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) # indirect doctest
|
|
163
|
+
sage: A.list() # indirect doctest
|
|
164
|
+
[[[1]], [[2]]]
|
|
165
|
+
"""
|
|
166
|
+
for x in self.classical_crystal:
|
|
167
|
+
yield self.retract(x)
|
|
168
|
+
|
|
169
|
+
def lift(self, affine_elt):
|
|
170
|
+
"""
|
|
171
|
+
Lift an affine crystal element to the corresponding classical
|
|
172
|
+
crystal element.
|
|
173
|
+
|
|
174
|
+
EXAMPLES::
|
|
175
|
+
|
|
176
|
+
sage: n = 2
|
|
177
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
178
|
+
sage: pr = attrcall("promotion")
|
|
179
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
180
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
|
|
181
|
+
sage: b = A.list()[0]
|
|
182
|
+
sage: A.lift(b)
|
|
183
|
+
[[1]]
|
|
184
|
+
sage: A.lift(b).parent()
|
|
185
|
+
The crystal of tableaux of type ['A', 2] and shape(s) [[1]]
|
|
186
|
+
"""
|
|
187
|
+
return affine_elt.lift()
|
|
188
|
+
|
|
189
|
+
def retract(self, classical_elt):
|
|
190
|
+
"""
|
|
191
|
+
Transform a classical crystal element to the corresponding
|
|
192
|
+
affine crystal element.
|
|
193
|
+
|
|
194
|
+
EXAMPLES::
|
|
195
|
+
|
|
196
|
+
sage: n = 2
|
|
197
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
198
|
+
sage: pr = attrcall("promotion")
|
|
199
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
200
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
|
|
201
|
+
sage: t = C(rows=[[1]])
|
|
202
|
+
sage: t.parent()
|
|
203
|
+
The crystal of tableaux of type ['A', 2] and shape(s) [[1]]
|
|
204
|
+
sage: A.retract(t)
|
|
205
|
+
[[1]]
|
|
206
|
+
sage: A.retract(t).parent() is A
|
|
207
|
+
True
|
|
208
|
+
"""
|
|
209
|
+
return self.element_class(self, classical_elt)
|
|
210
|
+
|
|
211
|
+
def _element_constructor_(self, *value, **options):
|
|
212
|
+
r"""
|
|
213
|
+
Coerces ``value`` into ``self``.
|
|
214
|
+
|
|
215
|
+
EXAMPLES::
|
|
216
|
+
|
|
217
|
+
sage: n = 2
|
|
218
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
219
|
+
sage: pr = attrcall("promotion")
|
|
220
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
221
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
|
|
222
|
+
sage: b = A(rows=[[1]]) # indirect doctest
|
|
223
|
+
sage: b
|
|
224
|
+
[[1]]
|
|
225
|
+
sage: b.parent()
|
|
226
|
+
An affine crystal for type ['A', 2, 1]
|
|
227
|
+
sage: A(b) is b
|
|
228
|
+
True
|
|
229
|
+
"""
|
|
230
|
+
if len(value) == 1 and isinstance(value[0], self.element_class) and value[0].parent() == self:
|
|
231
|
+
return value[0]
|
|
232
|
+
else: # Should do sanity checks! (Including check for inconsistent parent.)
|
|
233
|
+
return self.retract(self.classical_crystal(*value, **options))
|
|
234
|
+
|
|
235
|
+
def __contains__(self, x):
|
|
236
|
+
r"""
|
|
237
|
+
Check whether `x` is an element of ``self``.
|
|
238
|
+
|
|
239
|
+
EXAMPLES::
|
|
240
|
+
|
|
241
|
+
sage: n = 2
|
|
242
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
243
|
+
sage: pr = attrcall("promotion")
|
|
244
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
245
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
|
|
246
|
+
sage: b = A(rows=[[1]])
|
|
247
|
+
sage: A.__contains__(b)
|
|
248
|
+
True
|
|
249
|
+
"""
|
|
250
|
+
return x.parent() is self
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
class AffineCrystalFromClassicalElement(ElementWrapper):
|
|
254
|
+
r"""
|
|
255
|
+
Elements of crystals that are constructed from a classical crystal.
|
|
256
|
+
|
|
257
|
+
The elements inherit many of their methods from the classical crystal
|
|
258
|
+
using lift and retract.
|
|
259
|
+
|
|
260
|
+
This class is not instantiated directly but rather ``__call__``-ed from
|
|
261
|
+
:class:`~sage.combinat.crystals.affine.AffineCrystalFromClassical`.
|
|
262
|
+
The syntax of this is governed by the (classical) crystal.
|
|
263
|
+
|
|
264
|
+
EXAMPLES::
|
|
265
|
+
|
|
266
|
+
sage: n = 2
|
|
267
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
268
|
+
sage: pr = attrcall("promotion")
|
|
269
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
270
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
|
|
271
|
+
sage: b = A(rows=[[1]])
|
|
272
|
+
sage: b._repr_()
|
|
273
|
+
'[[1]]'
|
|
274
|
+
"""
|
|
275
|
+
|
|
276
|
+
def classical_weight(self):
|
|
277
|
+
"""
|
|
278
|
+
Return the classical weight corresponding to ``self``.
|
|
279
|
+
|
|
280
|
+
EXAMPLES::
|
|
281
|
+
|
|
282
|
+
sage: n = 2
|
|
283
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
284
|
+
sage: pr = attrcall("promotion")
|
|
285
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
286
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
|
|
287
|
+
sage: b = A(rows=[[1]])
|
|
288
|
+
sage: b.classical_weight()
|
|
289
|
+
(1, 0, 0)
|
|
290
|
+
"""
|
|
291
|
+
return self.lift().weight()
|
|
292
|
+
|
|
293
|
+
def lift(self):
|
|
294
|
+
"""
|
|
295
|
+
Lift an affine crystal element to the corresponding classical
|
|
296
|
+
crystal element.
|
|
297
|
+
|
|
298
|
+
EXAMPLES::
|
|
299
|
+
|
|
300
|
+
sage: n = 2
|
|
301
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
302
|
+
sage: pr = attrcall("promotion")
|
|
303
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
304
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
|
|
305
|
+
sage: b = A.list()[0]
|
|
306
|
+
sage: b.lift()
|
|
307
|
+
[[1]]
|
|
308
|
+
sage: b.lift().parent()
|
|
309
|
+
The crystal of tableaux of type ['A', 2] and shape(s) [[1]]
|
|
310
|
+
"""
|
|
311
|
+
return self.value
|
|
312
|
+
|
|
313
|
+
def pp(self):
|
|
314
|
+
"""
|
|
315
|
+
Method for pretty printing.
|
|
316
|
+
|
|
317
|
+
EXAMPLES::
|
|
318
|
+
|
|
319
|
+
sage: K = crystals.KirillovReshetikhin(['D',3,2],1,1)
|
|
320
|
+
sage: t=K(rows=[[1]])
|
|
321
|
+
sage: t.pp()
|
|
322
|
+
1
|
|
323
|
+
"""
|
|
324
|
+
return self.lift().pp()
|
|
325
|
+
|
|
326
|
+
@abstract_method
|
|
327
|
+
def e0(self):
|
|
328
|
+
r"""
|
|
329
|
+
Assumes that `e_0` is implemented separately.
|
|
330
|
+
"""
|
|
331
|
+
|
|
332
|
+
@abstract_method
|
|
333
|
+
def f0(self):
|
|
334
|
+
r"""
|
|
335
|
+
Assumes that `f_0` is implemented separately.
|
|
336
|
+
"""
|
|
337
|
+
|
|
338
|
+
def e(self, i):
|
|
339
|
+
r"""
|
|
340
|
+
Return the action of `e_i` on ``self``.
|
|
341
|
+
|
|
342
|
+
EXAMPLES::
|
|
343
|
+
|
|
344
|
+
sage: n = 2
|
|
345
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
346
|
+
sage: pr = attrcall("promotion")
|
|
347
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
348
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
|
|
349
|
+
sage: b = A(rows=[[1]])
|
|
350
|
+
sage: b.e(0)
|
|
351
|
+
[[3]]
|
|
352
|
+
sage: b.e(1)
|
|
353
|
+
"""
|
|
354
|
+
if i == self.parent()._cartan_type.special_node():
|
|
355
|
+
return self.e0()
|
|
356
|
+
else:
|
|
357
|
+
x = self.lift().e(i)
|
|
358
|
+
if (x is None):
|
|
359
|
+
return None
|
|
360
|
+
else:
|
|
361
|
+
return self.parent().retract(x)
|
|
362
|
+
|
|
363
|
+
def f(self, i):
|
|
364
|
+
r"""
|
|
365
|
+
Return the action of `f_i` on ``self``.
|
|
366
|
+
|
|
367
|
+
EXAMPLES::
|
|
368
|
+
|
|
369
|
+
sage: n = 2
|
|
370
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
371
|
+
sage: pr = attrcall("promotion")
|
|
372
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
373
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
|
|
374
|
+
sage: b = A(rows=[[3]])
|
|
375
|
+
sage: b.f(0)
|
|
376
|
+
[[1]]
|
|
377
|
+
sage: b.f(2)
|
|
378
|
+
"""
|
|
379
|
+
if i == self.parent()._cartan_type.special_node():
|
|
380
|
+
return self.f0()
|
|
381
|
+
else:
|
|
382
|
+
x = self.lift().f(i)
|
|
383
|
+
if (x is None):
|
|
384
|
+
return None
|
|
385
|
+
else:
|
|
386
|
+
return self.parent().retract(x)
|
|
387
|
+
|
|
388
|
+
def epsilon0(self):
|
|
389
|
+
r"""
|
|
390
|
+
Uses `\varepsilon_0` from the super class, but should be implemented
|
|
391
|
+
if a faster implementation exists.
|
|
392
|
+
|
|
393
|
+
EXAMPLES::
|
|
394
|
+
|
|
395
|
+
sage: n = 2
|
|
396
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
397
|
+
sage: pr = attrcall("promotion")
|
|
398
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
399
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
|
|
400
|
+
sage: [x.epsilon0() for x in A.list()]
|
|
401
|
+
[1, 0, 0]
|
|
402
|
+
"""
|
|
403
|
+
return super().epsilon(0)
|
|
404
|
+
|
|
405
|
+
def epsilon(self, i):
|
|
406
|
+
"""
|
|
407
|
+
Return the maximal time the crystal operator `e_i`
|
|
408
|
+
can be applied to ``self``.
|
|
409
|
+
|
|
410
|
+
EXAMPLES::
|
|
411
|
+
|
|
412
|
+
sage: n = 2
|
|
413
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
414
|
+
sage: pr = attrcall("promotion")
|
|
415
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
416
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
|
|
417
|
+
sage: [x.epsilon(0) for x in A.list()]
|
|
418
|
+
[1, 0, 0]
|
|
419
|
+
sage: [x.epsilon(1) for x in A.list()]
|
|
420
|
+
[0, 1, 0]
|
|
421
|
+
"""
|
|
422
|
+
if i == self.parent()._cartan_type.special_node():
|
|
423
|
+
return self.epsilon0()
|
|
424
|
+
else:
|
|
425
|
+
return self.lift().epsilon(i)
|
|
426
|
+
|
|
427
|
+
def phi0(self):
|
|
428
|
+
r"""
|
|
429
|
+
Uses `\varphi_0` from the super class, but should be implemented
|
|
430
|
+
if a faster implementation exists.
|
|
431
|
+
|
|
432
|
+
EXAMPLES::
|
|
433
|
+
|
|
434
|
+
sage: n = 2
|
|
435
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
436
|
+
sage: pr = attrcall("promotion")
|
|
437
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
438
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
|
|
439
|
+
sage: [x.phi0() for x in A.list()]
|
|
440
|
+
[0, 0, 1]
|
|
441
|
+
"""
|
|
442
|
+
return super().phi(0)
|
|
443
|
+
|
|
444
|
+
def phi(self, i):
|
|
445
|
+
r"""
|
|
446
|
+
Return the maximal time the crystal operator `f_i` can be applied to ``self``.
|
|
447
|
+
|
|
448
|
+
EXAMPLES::
|
|
449
|
+
|
|
450
|
+
sage: n = 2
|
|
451
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
452
|
+
sage: pr = attrcall("promotion")
|
|
453
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
454
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
|
|
455
|
+
sage: [x.phi(0) for x in A.list()]
|
|
456
|
+
[0, 0, 1]
|
|
457
|
+
sage: [x.phi(1) for x in A.list()]
|
|
458
|
+
[1, 0, 0]
|
|
459
|
+
"""
|
|
460
|
+
if i == self.parent()._cartan_type.special_node():
|
|
461
|
+
return self.phi0()
|
|
462
|
+
else:
|
|
463
|
+
return self.lift().phi(i)
|
|
464
|
+
|
|
465
|
+
def _richcmp_(self, other, op):
|
|
466
|
+
"""
|
|
467
|
+
Elements of this crystal are compared using the comparison in
|
|
468
|
+
the underlying classical crystal.
|
|
469
|
+
|
|
470
|
+
Non elements of the crystal are not comparable with elements of the
|
|
471
|
+
crystal, so we return ``NotImplemented``.
|
|
472
|
+
|
|
473
|
+
EXAMPLES::
|
|
474
|
+
|
|
475
|
+
sage: K = crystals.KirillovReshetikhin(['A',2,1],1,1)
|
|
476
|
+
sage: b = K(rows=[[1]])
|
|
477
|
+
sage: c = K(rows=[[2]])
|
|
478
|
+
|
|
479
|
+
sage: b == c
|
|
480
|
+
False
|
|
481
|
+
sage: b == b
|
|
482
|
+
True
|
|
483
|
+
|
|
484
|
+
sage: b != c
|
|
485
|
+
True
|
|
486
|
+
sage: b != b
|
|
487
|
+
False
|
|
488
|
+
|
|
489
|
+
sage: c < b
|
|
490
|
+
False
|
|
491
|
+
sage: b < b
|
|
492
|
+
False
|
|
493
|
+
sage: b < c
|
|
494
|
+
True
|
|
495
|
+
|
|
496
|
+
sage: b > c
|
|
497
|
+
False
|
|
498
|
+
sage: b > b
|
|
499
|
+
False
|
|
500
|
+
sage: c > b
|
|
501
|
+
True
|
|
502
|
+
|
|
503
|
+
sage: b <= c
|
|
504
|
+
True
|
|
505
|
+
sage: b <= b
|
|
506
|
+
True
|
|
507
|
+
sage: c <= b
|
|
508
|
+
False
|
|
509
|
+
|
|
510
|
+
sage: c >= b
|
|
511
|
+
True
|
|
512
|
+
sage: b >= b
|
|
513
|
+
True
|
|
514
|
+
sage: b >= c
|
|
515
|
+
False
|
|
516
|
+
"""
|
|
517
|
+
return richcmp(self.value, other.value, op)
|
|
518
|
+
|
|
519
|
+
|
|
520
|
+
AffineCrystalFromClassical.Element = AffineCrystalFromClassicalElement
|
|
521
|
+
|
|
522
|
+
|
|
523
|
+
class AffineCrystalFromClassicalAndPromotion(AffineCrystalFromClassical):
|
|
524
|
+
r"""
|
|
525
|
+
Crystals that are constructed from a classical crystal and a
|
|
526
|
+
Dynkin diagram automorphism `\sigma`. In type `A_n`, the Dynkin
|
|
527
|
+
diagram automorphism is `i \to i+1 \pmod n+1` and the
|
|
528
|
+
corresponding map on the crystal is the promotion operation
|
|
529
|
+
`\mathrm{pr}` on tableaux. The affine crystal operators are given
|
|
530
|
+
by `f_0= \mathrm{pr}^{-1} f_{\sigma(0)} \mathrm{pr}`.
|
|
531
|
+
|
|
532
|
+
INPUT:
|
|
533
|
+
|
|
534
|
+
- ``cartan_type`` -- the Cartan type of the resulting affine crystal
|
|
535
|
+
|
|
536
|
+
- ``classical_crystal`` -- instance of a classical crystal
|
|
537
|
+
|
|
538
|
+
- ``automorphism, inverse_automorphism`` -- a function on the
|
|
539
|
+
elements of the ``classical_crystal``
|
|
540
|
+
|
|
541
|
+
- ``dynkin_node`` -- integer specifying the classical node in the
|
|
542
|
+
image of the zero node under the automorphism sigma
|
|
543
|
+
|
|
544
|
+
EXAMPLES::
|
|
545
|
+
|
|
546
|
+
sage: n = 2
|
|
547
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
548
|
+
sage: pr = attrcall("promotion")
|
|
549
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
550
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
|
|
551
|
+
sage: A.list()
|
|
552
|
+
[[[1]], [[2]], [[3]]]
|
|
553
|
+
sage: A.cartan_type()
|
|
554
|
+
['A', 2, 1]
|
|
555
|
+
sage: A.index_set()
|
|
556
|
+
(0, 1, 2)
|
|
557
|
+
sage: b = A(rows=[[1]])
|
|
558
|
+
sage: b.weight()
|
|
559
|
+
-Lambda[0] + Lambda[1]
|
|
560
|
+
sage: b.classical_weight()
|
|
561
|
+
(1, 0, 0)
|
|
562
|
+
sage: [x.s(0) for x in A.list()]
|
|
563
|
+
[[[3]], [[2]], [[1]]]
|
|
564
|
+
sage: [x.s(1) for x in A.list()]
|
|
565
|
+
[[[2]], [[1]], [[3]]]
|
|
566
|
+
"""
|
|
567
|
+
|
|
568
|
+
def __init__(self, cartan_type, classical_crystal, p_automorphism, p_inverse_automorphism, dynkin_node, category=None):
|
|
569
|
+
"""
|
|
570
|
+
Input is an affine Cartan type ``cartan_type``, a classical crystal
|
|
571
|
+
``classical_crystal``, and promotion automorphism and its inverse
|
|
572
|
+
``p_automorphism`` and ``p_inverse_automorphism``, and the Dynkin
|
|
573
|
+
node ``dynkin_node``.
|
|
574
|
+
|
|
575
|
+
EXAMPLES::
|
|
576
|
+
|
|
577
|
+
sage: n = 1
|
|
578
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
579
|
+
sage: pr = attrcall("promotion")
|
|
580
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
581
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
|
|
582
|
+
sage: A.list()
|
|
583
|
+
[[[1]], [[2]]]
|
|
584
|
+
sage: A.cartan_type()
|
|
585
|
+
['A', 1, 1]
|
|
586
|
+
sage: A.index_set()
|
|
587
|
+
(0, 1)
|
|
588
|
+
|
|
589
|
+
TESTS::
|
|
590
|
+
|
|
591
|
+
sage: TestSuite(A).run()
|
|
592
|
+
"""
|
|
593
|
+
AffineCrystalFromClassical.__init__(self, cartan_type, classical_crystal, category)
|
|
594
|
+
self.p_automorphism = p_automorphism
|
|
595
|
+
self.p_inverse_automorphism = p_inverse_automorphism
|
|
596
|
+
self.dynkin_node = dynkin_node
|
|
597
|
+
|
|
598
|
+
def automorphism(self, x):
|
|
599
|
+
"""
|
|
600
|
+
Give the analogue of the affine Dynkin diagram automorphism on
|
|
601
|
+
the level of crystals.
|
|
602
|
+
|
|
603
|
+
EXAMPLES::
|
|
604
|
+
|
|
605
|
+
sage: n = 2
|
|
606
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
607
|
+
sage: pr = attrcall("promotion")
|
|
608
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
609
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
|
|
610
|
+
sage: b = A.list()[0]
|
|
611
|
+
sage: A.automorphism(b)
|
|
612
|
+
[[2]]
|
|
613
|
+
"""
|
|
614
|
+
return self.retract(self.p_automorphism(x.lift()))
|
|
615
|
+
|
|
616
|
+
def inverse_automorphism(self, x):
|
|
617
|
+
"""
|
|
618
|
+
Give the analogue of the inverse of the affine Dynkin diagram
|
|
619
|
+
automorphism on the level of crystals.
|
|
620
|
+
|
|
621
|
+
EXAMPLES::
|
|
622
|
+
|
|
623
|
+
sage: n = 2
|
|
624
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
625
|
+
sage: pr = attrcall("promotion")
|
|
626
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
627
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
|
|
628
|
+
sage: b = A.list()[0]
|
|
629
|
+
sage: A.inverse_automorphism(b)
|
|
630
|
+
[[3]]
|
|
631
|
+
"""
|
|
632
|
+
return self.retract(self.p_inverse_automorphism(x.lift()))
|
|
633
|
+
|
|
634
|
+
|
|
635
|
+
class AffineCrystalFromClassicalAndPromotionElement(AffineCrystalFromClassicalElement):
|
|
636
|
+
r"""
|
|
637
|
+
Elements of crystals that are constructed from a classical crystal
|
|
638
|
+
and a Dynkin diagram automorphism. In type `A`, the automorphism is
|
|
639
|
+
the promotion operation on tableaux.
|
|
640
|
+
|
|
641
|
+
This class is not instantiated directly but rather ``__call__``-ed from
|
|
642
|
+
:class:`~sage.combinat.crystals.affine.AffineCrystalFromClassicalAndPromotion`.
|
|
643
|
+
The syntax of this is governed by the (classical) crystal.
|
|
644
|
+
|
|
645
|
+
Since this class inherits from
|
|
646
|
+
:class:`~sage.combinat.crystals.affine.AffineCrystalFromClassicalElement`,
|
|
647
|
+
the methods that need to be implemented are :meth:`e0`, :meth:`f0` and
|
|
648
|
+
possibly :meth:`epsilon0` and :meth:`phi0` if more efficient
|
|
649
|
+
algorithms exist.
|
|
650
|
+
|
|
651
|
+
EXAMPLES::
|
|
652
|
+
|
|
653
|
+
sage: n = 2
|
|
654
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
655
|
+
sage: pr = attrcall("promotion")
|
|
656
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
657
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
|
|
658
|
+
sage: b = A(rows=[[1]])
|
|
659
|
+
sage: b._repr_()
|
|
660
|
+
'[[1]]'
|
|
661
|
+
"""
|
|
662
|
+
|
|
663
|
+
def e0(self):
|
|
664
|
+
r"""
|
|
665
|
+
Implement `e_0` using the automorphism as
|
|
666
|
+
`e_0 = \operatorname{pr}^{-1} e_{dynkin_node} \operatorname{pr}`
|
|
667
|
+
|
|
668
|
+
EXAMPLES::
|
|
669
|
+
|
|
670
|
+
sage: n = 2
|
|
671
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
672
|
+
sage: pr = attrcall("promotion")
|
|
673
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
674
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
|
|
675
|
+
sage: b = A(rows=[[1]])
|
|
676
|
+
sage: b.e0()
|
|
677
|
+
[[3]]
|
|
678
|
+
"""
|
|
679
|
+
x = self.parent().automorphism(self).e(self.parent().dynkin_node)
|
|
680
|
+
if (x is None):
|
|
681
|
+
return None
|
|
682
|
+
else:
|
|
683
|
+
return self.parent().inverse_automorphism(x)
|
|
684
|
+
|
|
685
|
+
def f0(self):
|
|
686
|
+
r"""
|
|
687
|
+
Implement `f_0` using the automorphism as
|
|
688
|
+
`f_0 = \operatorname{pr}^{-1} f_{dynkin_node} \operatorname{pr}`
|
|
689
|
+
|
|
690
|
+
EXAMPLES::
|
|
691
|
+
|
|
692
|
+
sage: n = 2
|
|
693
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
694
|
+
sage: pr = attrcall("promotion")
|
|
695
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
696
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
|
|
697
|
+
sage: b = A(rows=[[3]])
|
|
698
|
+
sage: b.f0()
|
|
699
|
+
[[1]]
|
|
700
|
+
"""
|
|
701
|
+
x = self.parent().automorphism(self).f(self.parent().dynkin_node)
|
|
702
|
+
if (x is None):
|
|
703
|
+
return None
|
|
704
|
+
else:
|
|
705
|
+
return self.parent().inverse_automorphism(x)
|
|
706
|
+
|
|
707
|
+
def epsilon0(self):
|
|
708
|
+
r"""
|
|
709
|
+
Implement `epsilon_0` using the automorphism.
|
|
710
|
+
|
|
711
|
+
EXAMPLES::
|
|
712
|
+
|
|
713
|
+
sage: n = 2
|
|
714
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
715
|
+
sage: pr = attrcall("promotion")
|
|
716
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
717
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
|
|
718
|
+
sage: [x.epsilon0() for x in A.list()]
|
|
719
|
+
[1, 0, 0]
|
|
720
|
+
"""
|
|
721
|
+
x = self.parent().automorphism(self)
|
|
722
|
+
return x.lift().epsilon(self.parent().dynkin_node)
|
|
723
|
+
|
|
724
|
+
def phi0(self):
|
|
725
|
+
r"""
|
|
726
|
+
Implement `phi_0` using the automorphism.
|
|
727
|
+
|
|
728
|
+
EXAMPLES::
|
|
729
|
+
|
|
730
|
+
sage: n = 2
|
|
731
|
+
sage: C = crystals.Tableaux(['A',n],shape=[1])
|
|
732
|
+
sage: pr = attrcall("promotion")
|
|
733
|
+
sage: pr_inverse = attrcall("promotion_inverse")
|
|
734
|
+
sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1)
|
|
735
|
+
sage: [x.phi0() for x in A.list()]
|
|
736
|
+
[0, 0, 1]
|
|
737
|
+
"""
|
|
738
|
+
x = self.parent().automorphism(self)
|
|
739
|
+
return x.lift().phi(self.parent().dynkin_node)
|
|
740
|
+
|
|
741
|
+
|
|
742
|
+
AffineCrystalFromClassicalAndPromotion.Element = AffineCrystalFromClassicalAndPromotionElement
|