passagemath-combinat 10.6.31rc3__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.
Potentially problematic release.
This version of passagemath-combinat might be problematic. Click here for more details.
- passagemath_combinat-10.6.31rc3.dist-info/METADATA +159 -0
- passagemath_combinat-10.6.31rc3.dist-info/RECORD +399 -0
- passagemath_combinat-10.6.31rc3.dist-info/WHEEL +5 -0
- passagemath_combinat-10.6.31rc3.dist-info/top_level.txt +2 -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 +25 -0
- sage/algebras/all__sagemath_combinat.py +35 -0
- sage/algebras/askey_wilson.py +935 -0
- sage/algebras/associated_graded.py +345 -0
- sage/algebras/cellular_basis.py +350 -0
- sage/algebras/cluster_algebra.py +2766 -0
- sage/algebras/down_up_algebra.py +860 -0
- sage/algebras/free_algebra.py +1698 -0
- sage/algebras/free_algebra_element.py +345 -0
- sage/algebras/free_algebra_quotient.py +405 -0
- sage/algebras/free_algebra_quotient_element.py +295 -0
- sage/algebras/free_zinbiel_algebra.py +885 -0
- sage/algebras/hall_algebra.py +783 -0
- sage/algebras/hecke_algebras/all.py +4 -0
- sage/algebras/hecke_algebras/ariki_koike_algebra.py +1796 -0
- sage/algebras/hecke_algebras/ariki_koike_specht_modules.py +475 -0
- sage/algebras/hecke_algebras/cubic_hecke_algebra.py +3520 -0
- sage/algebras/hecke_algebras/cubic_hecke_base_ring.py +1473 -0
- sage/algebras/hecke_algebras/cubic_hecke_matrix_rep.py +1079 -0
- sage/algebras/iwahori_hecke_algebra.py +3095 -0
- sage/algebras/jordan_algebra.py +1773 -0
- sage/algebras/lie_conformal_algebras/abelian_lie_conformal_algebra.py +113 -0
- sage/algebras/lie_conformal_algebras/affine_lie_conformal_algebra.py +156 -0
- sage/algebras/lie_conformal_algebras/all.py +18 -0
- sage/algebras/lie_conformal_algebras/bosonic_ghosts_lie_conformal_algebra.py +134 -0
- sage/algebras/lie_conformal_algebras/examples.py +43 -0
- sage/algebras/lie_conformal_algebras/fermionic_ghosts_lie_conformal_algebra.py +131 -0
- sage/algebras/lie_conformal_algebras/finitely_freely_generated_lca.py +139 -0
- sage/algebras/lie_conformal_algebras/free_bosons_lie_conformal_algebra.py +174 -0
- sage/algebras/lie_conformal_algebras/free_fermions_lie_conformal_algebra.py +167 -0
- sage/algebras/lie_conformal_algebras/freely_generated_lie_conformal_algebra.py +107 -0
- sage/algebras/lie_conformal_algebras/graded_lie_conformal_algebra.py +135 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra.py +353 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra_element.py +236 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_basis.py +78 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_structure_coefs.py +328 -0
- sage/algebras/lie_conformal_algebras/n2_lie_conformal_algebra.py +117 -0
- sage/algebras/lie_conformal_algebras/neveu_schwarz_lie_conformal_algebra.py +86 -0
- sage/algebras/lie_conformal_algebras/virasoro_lie_conformal_algebra.py +82 -0
- sage/algebras/lie_conformal_algebras/weyl_lie_conformal_algebra.py +205 -0
- sage/algebras/nil_coxeter_algebra.py +191 -0
- sage/algebras/q_commuting_polynomials.py +673 -0
- sage/algebras/q_system.py +608 -0
- sage/algebras/quantum_clifford.py +959 -0
- sage/algebras/quantum_groups/ace_quantum_onsager.py +693 -0
- sage/algebras/quantum_groups/all.py +9 -0
- sage/algebras/quantum_groups/fock_space.py +2219 -0
- sage/algebras/quantum_groups/q_numbers.py +207 -0
- sage/algebras/quantum_groups/quantum_group_gap.py +2695 -0
- sage/algebras/quantum_groups/representations.py +591 -0
- sage/algebras/quantum_matrix_coordinate_algebra.py +1006 -0
- sage/algebras/quantum_oscillator.py +623 -0
- sage/algebras/quaternion_algebra.py +20 -0
- sage/algebras/quaternion_algebra_element.py +55 -0
- sage/algebras/rational_cherednik_algebra.py +525 -0
- sage/algebras/schur_algebra.py +670 -0
- sage/algebras/shuffle_algebra.py +1011 -0
- sage/algebras/splitting_algebra.py +779 -0
- sage/algebras/tensor_algebra.py +709 -0
- sage/algebras/yangian.py +1082 -0
- sage/algebras/yokonuma_hecke_algebra.py +1018 -0
- sage/all__sagemath_combinat.py +35 -0
- sage/combinat/SJT.py +255 -0
- sage/combinat/affine_permutation.py +2405 -0
- sage/combinat/algebraic_combinatorics.py +55 -0
- sage/combinat/all.py +53 -0
- sage/combinat/all__sagemath_combinat.py +195 -0
- sage/combinat/alternating_sign_matrix.py +2063 -0
- sage/combinat/baxter_permutations.py +346 -0
- sage/combinat/bijectionist.py +3220 -0
- sage/combinat/binary_recurrence_sequences.py +1180 -0
- sage/combinat/blob_algebra.py +685 -0
- sage/combinat/catalog_partitions.py +27 -0
- sage/combinat/chas/all.py +23 -0
- sage/combinat/chas/fsym.py +1180 -0
- sage/combinat/chas/wqsym.py +2601 -0
- sage/combinat/cluster_complex.py +326 -0
- sage/combinat/colored_permutations.py +2039 -0
- sage/combinat/colored_permutations_representations.py +964 -0
- sage/combinat/composition_signed.py +142 -0
- sage/combinat/composition_tableau.py +855 -0
- sage/combinat/constellation.py +1729 -0
- sage/combinat/core.py +751 -0
- sage/combinat/counting.py +12 -0
- sage/combinat/crystals/affine.py +742 -0
- sage/combinat/crystals/affine_factorization.py +518 -0
- sage/combinat/crystals/affinization.py +331 -0
- sage/combinat/crystals/alcove_path.py +2013 -0
- sage/combinat/crystals/all.py +22 -0
- sage/combinat/crystals/bkk_crystals.py +141 -0
- sage/combinat/crystals/catalog.py +115 -0
- sage/combinat/crystals/catalog_elementary_crystals.py +18 -0
- sage/combinat/crystals/catalog_infinity_crystals.py +33 -0
- sage/combinat/crystals/catalog_kirillov_reshetikhin.py +18 -0
- sage/combinat/crystals/crystals.py +257 -0
- sage/combinat/crystals/direct_sum.py +260 -0
- sage/combinat/crystals/elementary_crystals.py +1251 -0
- sage/combinat/crystals/fast_crystals.py +441 -0
- sage/combinat/crystals/fully_commutative_stable_grothendieck.py +1205 -0
- sage/combinat/crystals/generalized_young_walls.py +1076 -0
- sage/combinat/crystals/highest_weight_crystals.py +436 -0
- sage/combinat/crystals/induced_structure.py +695 -0
- sage/combinat/crystals/infinity_crystals.py +730 -0
- sage/combinat/crystals/kac_modules.py +863 -0
- sage/combinat/crystals/kirillov_reshetikhin.py +4196 -0
- sage/combinat/crystals/kyoto_path_model.py +497 -0
- sage/combinat/crystals/letters.cpython-314-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 +765 -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,511 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.graphs sage.modules
|
|
3
|
+
r"""
|
|
4
|
+
`\mathcal{B}(\infty)` crystal of PBW monomials
|
|
5
|
+
|
|
6
|
+
.. SEEALSO::
|
|
7
|
+
|
|
8
|
+
For information on PBW datum, see
|
|
9
|
+
:ref:`sage.combinat.crystals.pbw_datum`.
|
|
10
|
+
|
|
11
|
+
AUTHORS:
|
|
12
|
+
|
|
13
|
+
- Dinakar Muthiah (2015-05-11): initial version
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
# ****************************************************************************
|
|
17
|
+
# Copyright (C) 2015 Dinakar Muthiah <muthiah at ualberta.ca>
|
|
18
|
+
#
|
|
19
|
+
# This program is free software: you can redistribute it and/or modify
|
|
20
|
+
# it under the terms of the GNU General Public License as published by
|
|
21
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
22
|
+
# (at your option) any later version.
|
|
23
|
+
# https://www.gnu.org/licenses/
|
|
24
|
+
# ****************************************************************************
|
|
25
|
+
|
|
26
|
+
from sage.misc.cachefunc import cached_method
|
|
27
|
+
from sage.structure.element import Element
|
|
28
|
+
from sage.structure.parent import Parent
|
|
29
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
30
|
+
from sage.structure.richcmp import richcmp
|
|
31
|
+
from sage.categories.highest_weight_crystals import HighestWeightCrystals
|
|
32
|
+
from sage.categories.infinite_enumerated_sets import InfiniteEnumeratedSets
|
|
33
|
+
from sage.combinat.root_system.cartan_type import CartanType
|
|
34
|
+
from sage.combinat.crystals.pbw_datum import PBWData, PBWDatum
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class PBWCrystalElement(Element):
|
|
38
|
+
"""
|
|
39
|
+
A crystal element in the PBW model.
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
def __init__(self, parent, lusztig_datum, long_word=None):
|
|
43
|
+
"""
|
|
44
|
+
Initialize ``self``.
|
|
45
|
+
|
|
46
|
+
EXAMPLES::
|
|
47
|
+
|
|
48
|
+
sage: B = crystals.infinity.PBW(['F', 4])
|
|
49
|
+
sage: u = B.highest_weight_vector()
|
|
50
|
+
sage: b = u.f_string([1,2,3,4,2,3,2,3,4,1,2])
|
|
51
|
+
sage: TestSuite(b).run()
|
|
52
|
+
"""
|
|
53
|
+
Element.__init__(self, parent)
|
|
54
|
+
if long_word is None:
|
|
55
|
+
long_word = parent._default_word
|
|
56
|
+
self._pbw_datum = PBWDatum(parent._pbw_datum_parent, long_word, lusztig_datum)
|
|
57
|
+
|
|
58
|
+
def _repr_(self):
|
|
59
|
+
"""
|
|
60
|
+
Return a string representation of ``self``.
|
|
61
|
+
|
|
62
|
+
EXAMPLES::
|
|
63
|
+
|
|
64
|
+
sage: B = crystals.infinity.PBW(['B', 4])
|
|
65
|
+
sage: u = B.highest_weight_vector()
|
|
66
|
+
sage: u.f_string([1,2,3,4,2,3,2,3,4,1,2])
|
|
67
|
+
PBW monomial with Lusztig datum
|
|
68
|
+
(0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 2)
|
|
69
|
+
"""
|
|
70
|
+
pbw_datum = self._pbw_datum.convert_to_new_long_word(self.parent()._default_word)
|
|
71
|
+
return "PBW monomial with Lusztig datum {}".format(pbw_datum.lusztig_datum)
|
|
72
|
+
|
|
73
|
+
def _latex_(self):
|
|
74
|
+
r"""
|
|
75
|
+
Return a latex representation of ``self``.
|
|
76
|
+
|
|
77
|
+
EXAMPLES::
|
|
78
|
+
|
|
79
|
+
sage: B = crystals.infinity.PBW(['F', 4])
|
|
80
|
+
sage: u = B.highest_weight_vector()
|
|
81
|
+
sage: b = u.f_string([1,2,3,4,2,3,2,3,4,1,2])
|
|
82
|
+
sage: latex(b)
|
|
83
|
+
f_{\alpha_{4}}^{2}
|
|
84
|
+
f_{\alpha_{3}}
|
|
85
|
+
f_{\alpha_{1} + \alpha_{2} + 2 \alpha_{3}}
|
|
86
|
+
f_{\alpha_{1} + \alpha_{2}}
|
|
87
|
+
f_{\alpha_{2}}^{2}
|
|
88
|
+
"""
|
|
89
|
+
pbw_datum = self._pbw_datum.convert_to_new_long_word(self.parent()._default_word)
|
|
90
|
+
lusztig_datum = list(pbw_datum.lusztig_datum)
|
|
91
|
+
al = self.parent()._pbw_datum_parent._root_list_from(self.parent()._default_word)
|
|
92
|
+
from sage.misc.latex import latex
|
|
93
|
+
ret_str = ' '.join("f_{%s}%s" % (latex(al[i]), "^{%s}" % latex(exp) if exp > 1 else "")
|
|
94
|
+
for i, exp in enumerate(lusztig_datum) if exp)
|
|
95
|
+
if ret_str == '':
|
|
96
|
+
return '1'
|
|
97
|
+
return ret_str
|
|
98
|
+
|
|
99
|
+
def lusztig_datum(self, word=None):
|
|
100
|
+
"""
|
|
101
|
+
Return the Lusztig datum of ``self`` with respect to the reduced
|
|
102
|
+
expression of the long word ``word``.
|
|
103
|
+
|
|
104
|
+
EXAMPLES::
|
|
105
|
+
|
|
106
|
+
sage: B = crystals.infinity.PBW(['A', 2])
|
|
107
|
+
sage: u = B.highest_weight_vector()
|
|
108
|
+
sage: b = u.f_string([2,1,2,2,2,2,1,1,2,1,2,1,2,1,2,2])
|
|
109
|
+
sage: b.lusztig_datum()
|
|
110
|
+
(6, 0, 10)
|
|
111
|
+
sage: b.lusztig_datum(word=[2,1,2])
|
|
112
|
+
(4, 6, 0)
|
|
113
|
+
"""
|
|
114
|
+
if word is None:
|
|
115
|
+
word = self.parent()._default_word
|
|
116
|
+
else:
|
|
117
|
+
self.parent()._check_is_long_word(word)
|
|
118
|
+
word = tuple(word)
|
|
119
|
+
pbw_datum = self._pbw_datum.convert_to_new_long_word(word)
|
|
120
|
+
return tuple(pbw_datum.lusztig_datum)
|
|
121
|
+
|
|
122
|
+
def __eq__(self, other):
|
|
123
|
+
"""
|
|
124
|
+
Check equality of ``self`` with ``other``.
|
|
125
|
+
|
|
126
|
+
EXAMPLES::
|
|
127
|
+
|
|
128
|
+
sage: B = crystals.infinity.PBW(['A', 2])
|
|
129
|
+
sage: u = B.highest_weight_vector()
|
|
130
|
+
sage: b = u.f_string([2,1,2,2,2,2,1,1,2,1,2,1,2,1,2,2])
|
|
131
|
+
sage: bp = u.f_string([2,1,2,2,1,1,2,2,2,1,2,1,2,2,1,2])
|
|
132
|
+
sage: b == bp
|
|
133
|
+
True
|
|
134
|
+
"""
|
|
135
|
+
if other not in self.parent():
|
|
136
|
+
return False
|
|
137
|
+
other_long_word = other._pbw_datum.long_word
|
|
138
|
+
other_lusztig_datum = other._pbw_datum.lusztig_datum
|
|
139
|
+
equiv_pbw_datum = self._pbw_datum.convert_to_new_long_word(other_long_word)
|
|
140
|
+
return equiv_pbw_datum.lusztig_datum == other_lusztig_datum
|
|
141
|
+
|
|
142
|
+
def __ne__(self, other):
|
|
143
|
+
"""
|
|
144
|
+
Check inequality of ``self`` with ``other``.
|
|
145
|
+
|
|
146
|
+
EXAMPLES::
|
|
147
|
+
|
|
148
|
+
sage: B = crystals.infinity.PBW(['A', 2])
|
|
149
|
+
sage: u = B.highest_weight_vector()
|
|
150
|
+
sage: b = u.f_string([2,1,2,2,2,2,1,1,2,1,2,1,2,1,2,2])
|
|
151
|
+
sage: bp = u.f_string([2,1,2,2,1,1,2,2,2,1,2,1,2,2,1,2])
|
|
152
|
+
sage: b != bp
|
|
153
|
+
False
|
|
154
|
+
"""
|
|
155
|
+
return not (self == other)
|
|
156
|
+
|
|
157
|
+
# Necessary for displaying subcrystals
|
|
158
|
+
def _richcmp_(self, other, op):
|
|
159
|
+
"""
|
|
160
|
+
Return comparison of ``self`` and ``other``.
|
|
161
|
+
|
|
162
|
+
EXAMPLES::
|
|
163
|
+
|
|
164
|
+
sage: B = crystals.infinity.PBW(['A', 2])
|
|
165
|
+
sage: u = B.highest_weight_vector()
|
|
166
|
+
sage: b = u.f_string([2,1,2,2,2,2,1,1,2,1,2,1,2,1,2,2])
|
|
167
|
+
sage: bp = u.f_string([2,1,2,2,1,1,2,2,2,1,2,1,2])
|
|
168
|
+
sage: w = [1, 2, 1]
|
|
169
|
+
sage: (b < bp) == (b.lusztig_datum(w) < bp.lusztig_datum(w))
|
|
170
|
+
True
|
|
171
|
+
sage: (b > bp) == (b.lusztig_datum(w) > bp.lusztig_datum(w))
|
|
172
|
+
True
|
|
173
|
+
"""
|
|
174
|
+
i = self.parent().index_set()[0]
|
|
175
|
+
word = self.parent()._pbw_datum_parent._long_word_begin_with(i)
|
|
176
|
+
lusztig_datum = tuple(self._pbw_datum.convert_to_new_long_word(word).lusztig_datum)
|
|
177
|
+
other_lusztig_datum = tuple(other._pbw_datum.convert_to_new_long_word(word).lusztig_datum)
|
|
178
|
+
return richcmp(lusztig_datum, other_lusztig_datum, op)
|
|
179
|
+
|
|
180
|
+
@cached_method
|
|
181
|
+
def __hash__(self):
|
|
182
|
+
"""
|
|
183
|
+
Return the hash of ``self``.
|
|
184
|
+
|
|
185
|
+
EXAMPLES::
|
|
186
|
+
|
|
187
|
+
sage: B = crystals.infinity.PBW(['A', 2])
|
|
188
|
+
sage: u = B.highest_weight_vector()
|
|
189
|
+
sage: b = u.f_string([2,1,2,2,2,2,1,1,2,1,2,1,2,1,2,2])
|
|
190
|
+
sage: bp = u.f_string([2,1,2,2,1,1,2,2,2,1,2,1,2,2,1,2])
|
|
191
|
+
sage: hash(b) == hash(bp)
|
|
192
|
+
True
|
|
193
|
+
"""
|
|
194
|
+
i = self.parent().index_set()[0]
|
|
195
|
+
word = self.parent()._pbw_datum_parent._long_word_begin_with(i)
|
|
196
|
+
pbw_datum = self._pbw_datum.convert_to_new_long_word(word)
|
|
197
|
+
return hash(tuple(pbw_datum.lusztig_datum))
|
|
198
|
+
|
|
199
|
+
def e(self, i):
|
|
200
|
+
"""
|
|
201
|
+
Return the action of `e_i` on ``self``.
|
|
202
|
+
|
|
203
|
+
EXAMPLES::
|
|
204
|
+
|
|
205
|
+
sage: B = crystals.infinity.PBW(['B', 3])
|
|
206
|
+
sage: b = B.highest_weight_vector()
|
|
207
|
+
sage: c = b.f_string([2,1,3,2,1,3,2,2]); c
|
|
208
|
+
PBW monomial with Lusztig datum (0, 1, 0, 1, 0, 0, 0, 1, 2)
|
|
209
|
+
sage: c.e(2)
|
|
210
|
+
PBW monomial with Lusztig datum (0, 1, 0, 1, 0, 0, 0, 1, 1)
|
|
211
|
+
sage: c.e_string([2,2,1,3,2,1,3,2]) == b
|
|
212
|
+
True
|
|
213
|
+
"""
|
|
214
|
+
equiv_pbw_datum = self._pbw_datum.convert_to_long_word_with_first_letter(i)
|
|
215
|
+
new_long_word = equiv_pbw_datum.long_word
|
|
216
|
+
new_lusztig_datum = list(equiv_pbw_datum.lusztig_datum)
|
|
217
|
+
if new_lusztig_datum[0] == 0:
|
|
218
|
+
return None
|
|
219
|
+
new_lusztig_datum[0] -= 1
|
|
220
|
+
return type(self)(self.parent(), tuple(new_lusztig_datum), new_long_word)
|
|
221
|
+
|
|
222
|
+
def f(self, i):
|
|
223
|
+
"""
|
|
224
|
+
Return the action of `f_i` on ``self``.
|
|
225
|
+
|
|
226
|
+
EXAMPLES::
|
|
227
|
+
|
|
228
|
+
sage: B = crystals.infinity.PBW("D4")
|
|
229
|
+
sage: b = B.highest_weight_vector()
|
|
230
|
+
sage: c = b.f_string([1,2,3,1,2,3,4]); c
|
|
231
|
+
PBW monomial with Lusztig datum (0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0)
|
|
232
|
+
sage: c == b.f_string([1,2,4,1,2,3,3])
|
|
233
|
+
True
|
|
234
|
+
"""
|
|
235
|
+
equiv_PBWDatum = self._pbw_datum.convert_to_long_word_with_first_letter(i)
|
|
236
|
+
new_long_word = equiv_PBWDatum.long_word
|
|
237
|
+
new_lusztig_datum = list(equiv_PBWDatum.lusztig_datum)
|
|
238
|
+
new_lusztig_datum[0] += 1
|
|
239
|
+
return type(self)(self.parent(), tuple(new_lusztig_datum), new_long_word)
|
|
240
|
+
|
|
241
|
+
def epsilon(self, i):
|
|
242
|
+
r"""
|
|
243
|
+
Return `\varepsilon_i` of ``self``.
|
|
244
|
+
|
|
245
|
+
EXAMPLES::
|
|
246
|
+
|
|
247
|
+
sage: B = crystals.infinity.PBW(["A2"])
|
|
248
|
+
sage: s = B((3,0,0), (1,2,1))
|
|
249
|
+
sage: s.epsilon(1)
|
|
250
|
+
3
|
|
251
|
+
sage: s.epsilon(2)
|
|
252
|
+
0
|
|
253
|
+
"""
|
|
254
|
+
equiv_pbw_datum = self._pbw_datum.convert_to_long_word_with_first_letter(i)
|
|
255
|
+
return equiv_pbw_datum.lusztig_datum[0]
|
|
256
|
+
|
|
257
|
+
def phi(self, i):
|
|
258
|
+
r"""
|
|
259
|
+
Return `\varphi_i` of ``self``.
|
|
260
|
+
|
|
261
|
+
EXAMPLES::
|
|
262
|
+
|
|
263
|
+
sage: B = crystals.infinity.PBW(['A', 2])
|
|
264
|
+
sage: s = B((3,0,0), (1,2,1))
|
|
265
|
+
sage: s.phi(1)
|
|
266
|
+
-3
|
|
267
|
+
sage: s.phi(2)
|
|
268
|
+
3
|
|
269
|
+
"""
|
|
270
|
+
WLR = self.parent().weight_lattice_realization()
|
|
271
|
+
h = WLR.simple_coroots()
|
|
272
|
+
return self.epsilon(i) + self.weight().scalar(h[i])
|
|
273
|
+
|
|
274
|
+
def weight(self):
|
|
275
|
+
"""
|
|
276
|
+
Return weight of ``self``.
|
|
277
|
+
|
|
278
|
+
EXAMPLES::
|
|
279
|
+
|
|
280
|
+
sage: B = crystals.infinity.PBW(['A', 2])
|
|
281
|
+
sage: s = B((2,2,2), (1,2,1))
|
|
282
|
+
sage: s.weight()
|
|
283
|
+
(-4, 0, 4)
|
|
284
|
+
"""
|
|
285
|
+
WLR = self.parent().weight_lattice_realization()
|
|
286
|
+
al = WLR.simple_roots()
|
|
287
|
+
return WLR.sum(c*al[i] for i,c in self._pbw_datum.weight())
|
|
288
|
+
|
|
289
|
+
def star(self):
|
|
290
|
+
r"""
|
|
291
|
+
Return the starred crystal element corresponding
|
|
292
|
+
to ``self``.
|
|
293
|
+
|
|
294
|
+
Let `b` be an element of ``self`` with Lusztig datum
|
|
295
|
+
`(b_1, \ldots, b_N)` with respect to `w_0 = s_{i_1} \cdots s_{i_N}`.
|
|
296
|
+
Then `b^*` is the element with Lusztig datum `(b_N, \ldots, b_1)`
|
|
297
|
+
with respect to `w_0 = s_{i_N^*} \cdots s_{i_1^*}`, where
|
|
298
|
+
`i_j^* = \omega(i_j)` with `\omega` being the :meth:`automorphism
|
|
299
|
+
<sage.combinat.root_system.cartan_type.CartanType_standard_finite.opposition_automorphism>`
|
|
300
|
+
given by the action of `w_0` on the simple roots.
|
|
301
|
+
|
|
302
|
+
EXAMPLES::
|
|
303
|
+
|
|
304
|
+
sage: P = crystals.infinity.PBW(['A', 2])
|
|
305
|
+
sage: P((1,2,3), (1,2,1)).star() == P((3,2,1), (2,1,2))
|
|
306
|
+
True
|
|
307
|
+
|
|
308
|
+
sage: B = crystals.infinity.PBW(['E', 6])
|
|
309
|
+
sage: b = B.highest_weight_vector()
|
|
310
|
+
sage: c = b.f_string([1,2,6,3,4,2,5,2,3,4,1,6])
|
|
311
|
+
sage: c == c.star().star()
|
|
312
|
+
True
|
|
313
|
+
|
|
314
|
+
TESTS::
|
|
315
|
+
|
|
316
|
+
sage: from itertools import product
|
|
317
|
+
sage: def test_star(PBW, depth):
|
|
318
|
+
....: S = crystals.infinity.Star(PBW)
|
|
319
|
+
....: for f_str in product(*([PBW.index_set()]*depth)):
|
|
320
|
+
....: x = PBW.highest_weight_vector().f_string(f_str).star()
|
|
321
|
+
....: y = S.highest_weight_vector().f_string(f_str)
|
|
322
|
+
....: assert x.lusztig_datum() == y.value.lusztig_datum()
|
|
323
|
+
sage: P = crystals.infinity.PBW(['A', 2])
|
|
324
|
+
sage: test_star(P, 5)
|
|
325
|
+
sage: P = crystals.infinity.PBW(['A', 3])
|
|
326
|
+
sage: test_star(P, 5)
|
|
327
|
+
sage: P = crystals.infinity.PBW(['B', 3])
|
|
328
|
+
sage: test_star(P, 5)
|
|
329
|
+
sage: P = crystals.infinity.PBW(['C', 3])
|
|
330
|
+
sage: test_star(P, 5)
|
|
331
|
+
sage: P = crystals.infinity.PBW(['D', 4])
|
|
332
|
+
sage: test_star(P, 5) # long time
|
|
333
|
+
sage: P = crystals.infinity.PBW(['D', 5])
|
|
334
|
+
sage: test_star(P, 4) # long time
|
|
335
|
+
sage: P = crystals.infinity.PBW(['E', 6])
|
|
336
|
+
sage: test_star(P, 4) # long time
|
|
337
|
+
sage: P = crystals.infinity.PBW(['F', 4])
|
|
338
|
+
sage: test_star(P, 4) # long time
|
|
339
|
+
sage: P = crystals.infinity.PBW(['G', 2])
|
|
340
|
+
sage: test_star(P, 5)
|
|
341
|
+
"""
|
|
342
|
+
starred_pbw_datum = self._pbw_datum.star()
|
|
343
|
+
return type(self)(self.parent(), starred_pbw_datum.lusztig_datum,
|
|
344
|
+
starred_pbw_datum.long_word)
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
class PBWCrystal(Parent, UniqueRepresentation):
|
|
348
|
+
r"""
|
|
349
|
+
Crystal of `\mathcal{B}(\infty)` given by PBW monomials.
|
|
350
|
+
|
|
351
|
+
A model of the crystal `\mathcal{B}(\infty)` whose elements are
|
|
352
|
+
PBW datum up to equivalence by the tropical Plücker relations.
|
|
353
|
+
The crystal structure on Lusztig data `x = (x_1, \ldots, x_m)`
|
|
354
|
+
for the reduced word `s_{i_1} \cdots s_{i_m} = w_0` is given as
|
|
355
|
+
follows. Suppose `i_1 = j`, then `f_j x = (x_1 + 1, x_2, \ldots, x_m)`.
|
|
356
|
+
If `i_1 \neq j`, then we use the tropical Plücker relations to
|
|
357
|
+
change the reduced expression such that `i_1' = j` and then we
|
|
358
|
+
change back to the original word.
|
|
359
|
+
|
|
360
|
+
EXAMPLES::
|
|
361
|
+
|
|
362
|
+
sage: PBW = crystals.infinity.PBW(['B', 3])
|
|
363
|
+
sage: hw = PBW.highest_weight_vector()
|
|
364
|
+
sage: x = hw.f_string([1,2,2,3,3,1,3,3,2,3,2,1,3,1,2,3,1,2,1,3,2]); x
|
|
365
|
+
PBW monomial with Lusztig datum (1, 1, 1, 3, 1, 0, 0, 1, 1)
|
|
366
|
+
|
|
367
|
+
Elements are expressed in terms of Lusztig datum for a fixed
|
|
368
|
+
reduced expression of `w_0`::
|
|
369
|
+
|
|
370
|
+
sage: PBW.default_long_word()
|
|
371
|
+
[1, 3, 2, 3, 1, 2, 3, 1, 2]
|
|
372
|
+
sage: PBW.set_default_long_word([2,1,3,2,1,3,2,3,1])
|
|
373
|
+
sage: x
|
|
374
|
+
PBW monomial with Lusztig datum (3, 1, 1, 0, 1, 0, 1, 3, 4)
|
|
375
|
+
sage: PBW.set_default_long_word([1, 3, 2, 3, 1, 2, 3, 1, 2])
|
|
376
|
+
|
|
377
|
+
We can construct elements by giving it Lusztig data (with respect
|
|
378
|
+
to the default long word)::
|
|
379
|
+
|
|
380
|
+
sage: PBW([1,1,1,3,1,0,0,1,1])
|
|
381
|
+
PBW monomial with Lusztig datum (1, 1, 1, 3, 1, 0, 0, 1, 1)
|
|
382
|
+
|
|
383
|
+
We can also construct elements by passing in a reduced expression
|
|
384
|
+
for a long word::
|
|
385
|
+
|
|
386
|
+
sage: x = PBW([1,1,1,3,1,0,0,1,1], [3,2,1,3,2,3,2,1,2]); x
|
|
387
|
+
PBW monomial with Lusztig datum (1, 1, 1, 0, 1, 0, 5, 1, 1)
|
|
388
|
+
sage: x.to_highest_weight()[1]
|
|
389
|
+
[1, 2, 2, 2, 2, 2, 1, 3, 3, 3, 3, 2, 3, 2, 3, 3, 2, 3, 3, 2, 1, 3]
|
|
390
|
+
"""
|
|
391
|
+
@staticmethod
|
|
392
|
+
def __classcall__(cls, cartan_type):
|
|
393
|
+
"""
|
|
394
|
+
Normalize input to ensure a unique representation.
|
|
395
|
+
|
|
396
|
+
EXAMPLES::
|
|
397
|
+
|
|
398
|
+
sage: B1 = crystals.infinity.PBW(['A', 2])
|
|
399
|
+
sage: B2 = crystals.infinity.PBW("A2")
|
|
400
|
+
sage: B3 = crystals.infinity.PBW(CartanType("A2"))
|
|
401
|
+
sage: B1 is B2 and B2 is B3
|
|
402
|
+
True
|
|
403
|
+
"""
|
|
404
|
+
cartan_type = CartanType(cartan_type)
|
|
405
|
+
if not cartan_type.is_finite():
|
|
406
|
+
raise NotImplementedError("only implemented for finite types")
|
|
407
|
+
return super().__classcall__(cls, cartan_type)
|
|
408
|
+
|
|
409
|
+
def __init__(self, cartan_type):
|
|
410
|
+
"""
|
|
411
|
+
Initialize ``self``.
|
|
412
|
+
|
|
413
|
+
EXAMPLES::
|
|
414
|
+
|
|
415
|
+
sage: B = crystals.infinity.PBW(['B', 2])
|
|
416
|
+
sage: TestSuite(B).run()
|
|
417
|
+
"""
|
|
418
|
+
self._cartan_type = cartan_type
|
|
419
|
+
self._pbw_datum_parent = PBWData(self._cartan_type)
|
|
420
|
+
category = (HighestWeightCrystals(), InfiniteEnumeratedSets())
|
|
421
|
+
Parent.__init__(self, category=category)
|
|
422
|
+
|
|
423
|
+
# There must be a better way to do the following
|
|
424
|
+
i = self._cartan_type.index_set()[0]
|
|
425
|
+
self._default_word = self._pbw_datum_parent._long_word_begin_with(i)
|
|
426
|
+
zero_lusztig_datum = [0]*len(self._default_word)
|
|
427
|
+
self.module_generators = (self.element_class(self,
|
|
428
|
+
zero_lusztig_datum,
|
|
429
|
+
self._default_word),)
|
|
430
|
+
|
|
431
|
+
def _repr_(self):
|
|
432
|
+
"""
|
|
433
|
+
Return a string representation of ``self``.
|
|
434
|
+
|
|
435
|
+
EXAMPLES::
|
|
436
|
+
|
|
437
|
+
sage: crystals.infinity.PBW(['C', 3])
|
|
438
|
+
Crystal of PBW data of type ['C', 3]
|
|
439
|
+
"""
|
|
440
|
+
return "Crystal of PBW data of type {}".format(self._cartan_type)
|
|
441
|
+
|
|
442
|
+
def default_long_word(self):
|
|
443
|
+
"""
|
|
444
|
+
Return the default long word used to express elements of ``self``.
|
|
445
|
+
|
|
446
|
+
EXAMPLES::
|
|
447
|
+
|
|
448
|
+
sage: B = crystals.infinity.PBW(['E', 6])
|
|
449
|
+
sage: B.default_long_word()
|
|
450
|
+
[1, 3, 4, 5, 6, 2, 4, 5, 3, 4, 1, 3, 2, 4, 5, 6, 2, 4,
|
|
451
|
+
5, 3, 4, 1, 3, 2, 4, 5, 3, 4, 1, 3, 2, 4, 1, 3, 2, 1]
|
|
452
|
+
"""
|
|
453
|
+
return list(self._default_word)
|
|
454
|
+
|
|
455
|
+
def _check_is_long_word(self, word):
|
|
456
|
+
"""
|
|
457
|
+
Check if ``word`` is a reduced expression of the long of the
|
|
458
|
+
Coxeter group of ``self``.
|
|
459
|
+
|
|
460
|
+
EXAMPLES::
|
|
461
|
+
|
|
462
|
+
sage: B = crystals.infinity.PBW(['A', 3])
|
|
463
|
+
sage: B._check_is_long_word([1,2,1,3,2,1])
|
|
464
|
+
sage: B._check_is_long_word([1,3,2,3,2,1])
|
|
465
|
+
Traceback (most recent call last):
|
|
466
|
+
...
|
|
467
|
+
ValueError: not a reduced word of the long element
|
|
468
|
+
sage: B._check_is_long_word([1,2,1,3,2])
|
|
469
|
+
Traceback (most recent call last):
|
|
470
|
+
...
|
|
471
|
+
ValueError: not a reduced word of the long element
|
|
472
|
+
sage: B._check_is_long_word([1,2,1,3,2,1,2])
|
|
473
|
+
Traceback (most recent call last):
|
|
474
|
+
...
|
|
475
|
+
ValueError: not a reduced word of the long element
|
|
476
|
+
"""
|
|
477
|
+
W = self._pbw_datum_parent.weyl_group
|
|
478
|
+
if (len(word) != len(self._default_word)
|
|
479
|
+
or W.from_reduced_word(word) != W.long_element()):
|
|
480
|
+
raise ValueError("not a reduced word of the long element")
|
|
481
|
+
|
|
482
|
+
def set_default_long_word(self, word):
|
|
483
|
+
"""
|
|
484
|
+
Set the default long word used to express elements of ``self``.
|
|
485
|
+
|
|
486
|
+
EXAMPLES::
|
|
487
|
+
|
|
488
|
+
sage: B = crystals.infinity.PBW(['C', 3])
|
|
489
|
+
sage: B.default_long_word()
|
|
490
|
+
[1, 3, 2, 3, 1, 2, 3, 1, 2]
|
|
491
|
+
sage: x = B.highest_weight_vector().f_string([2,1,3,2,3,1,2,3,3,1])
|
|
492
|
+
sage: x
|
|
493
|
+
PBW monomial with Lusztig datum (1, 2, 2, 0, 0, 0, 0, 0, 1)
|
|
494
|
+
sage: B.set_default_long_word([2,1,3,2,1,3,2,3,1])
|
|
495
|
+
sage: B.default_long_word()
|
|
496
|
+
[2, 1, 3, 2, 1, 3, 2, 3, 1]
|
|
497
|
+
sage: x
|
|
498
|
+
PBW monomial with Lusztig datum (2, 0, 0, 0, 0, 0, 1, 3, 2)
|
|
499
|
+
|
|
500
|
+
TESTS::
|
|
501
|
+
|
|
502
|
+
sage: B = crystals.infinity.PBW(['A', 3])
|
|
503
|
+
sage: B._check_is_long_word([1,2,1,3,2,1,2])
|
|
504
|
+
Traceback (most recent call last):
|
|
505
|
+
...
|
|
506
|
+
ValueError: not a reduced word of the long element
|
|
507
|
+
"""
|
|
508
|
+
self._check_is_long_word(word)
|
|
509
|
+
self._default_word = tuple(word)
|
|
510
|
+
|
|
511
|
+
Element = PBWCrystalElement
|
|
Binary file
|