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,461 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.graphs sage.modules
|
|
3
|
+
r"""
|
|
4
|
+
Crystal of rigged configurations
|
|
5
|
+
|
|
6
|
+
We only consider the highest weight crystal structure, not the
|
|
7
|
+
Kirillov-Reshetikhin structure, and we extend this to symmetrizable types.
|
|
8
|
+
|
|
9
|
+
AUTHORS:
|
|
10
|
+
|
|
11
|
+
- Travis Scrimshaw (2010-09-26): initial version
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
# ****************************************************************************
|
|
15
|
+
# Copyright (C) 2013 Travis Scrimshaw <tscrim at ucdavis.edu>
|
|
16
|
+
#
|
|
17
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
18
|
+
#
|
|
19
|
+
# This code is distributed in the hope that it will be useful,
|
|
20
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
21
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
22
|
+
# General Public License for more details.
|
|
23
|
+
#
|
|
24
|
+
# The full text of the GPL is available at:
|
|
25
|
+
#
|
|
26
|
+
# https://www.gnu.org/licenses/
|
|
27
|
+
# ****************************************************************************
|
|
28
|
+
from itertools import repeat
|
|
29
|
+
from sage.misc.lazy_attribute import lazy_attribute
|
|
30
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
31
|
+
from sage.structure.parent import Parent
|
|
32
|
+
from sage.categories.highest_weight_crystals import HighestWeightCrystals
|
|
33
|
+
from sage.categories.regular_crystals import RegularCrystals
|
|
34
|
+
from sage.categories.classical_crystals import ClassicalCrystals
|
|
35
|
+
from sage.categories.infinite_enumerated_sets import InfiniteEnumeratedSets
|
|
36
|
+
from sage.combinat.root_system.cartan_type import CartanType
|
|
37
|
+
from sage.combinat.rigged_configurations.rigged_configurations import RiggedConfigurations
|
|
38
|
+
from sage.combinat.rigged_configurations.rigged_configuration_element import (
|
|
39
|
+
RiggedConfigurationElement, RCHighestWeightElement, RCHWNonSimplyLacedElement)
|
|
40
|
+
from sage.combinat.rigged_configurations.rigged_partition import RiggedPartition
|
|
41
|
+
|
|
42
|
+
# Note on implementation, this class is used for simply-laced types only
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class CrystalOfRiggedConfigurations(UniqueRepresentation, Parent):
|
|
46
|
+
r"""
|
|
47
|
+
A highest weight crystal of rigged configurations.
|
|
48
|
+
|
|
49
|
+
The crystal structure for finite simply-laced types is given
|
|
50
|
+
in [CrysStructSchilling06]_. These were then shown to be the crystal
|
|
51
|
+
operators in all finite types in [SS2015]_, all simply-laced and
|
|
52
|
+
a large class of foldings of simply-laced types in [SS2015II]_,
|
|
53
|
+
and all symmetrizable types (uniformly) in [SS2017]_.
|
|
54
|
+
|
|
55
|
+
INPUT:
|
|
56
|
+
|
|
57
|
+
- ``cartan_type`` -- (optional) a Cartan type or a Cartan type
|
|
58
|
+
given as a folding
|
|
59
|
+
|
|
60
|
+
- ``wt`` -- the highest weight vector in the weight lattice
|
|
61
|
+
|
|
62
|
+
EXAMPLES:
|
|
63
|
+
|
|
64
|
+
For simplicity, we display the rigged configurations horizontally::
|
|
65
|
+
|
|
66
|
+
sage: RiggedConfigurations.options.display='horizontal'
|
|
67
|
+
|
|
68
|
+
We start with a simply-laced finite type::
|
|
69
|
+
|
|
70
|
+
sage: La = RootSystem(['A', 2]).weight_lattice().fundamental_weights()
|
|
71
|
+
sage: RC = crystals.RiggedConfigurations(La[1] + La[2])
|
|
72
|
+
sage: mg = RC.highest_weight_vector()
|
|
73
|
+
sage: mg.f_string([1,2])
|
|
74
|
+
0[ ]0 0[ ]-1
|
|
75
|
+
sage: mg.f_string([1,2,2])
|
|
76
|
+
0[ ]0 -2[ ][ ]-2
|
|
77
|
+
sage: mg.f_string([1,2,2,2])
|
|
78
|
+
sage: mg.f_string([2,1,1,2])
|
|
79
|
+
-1[ ][ ]-1 -1[ ][ ]-1
|
|
80
|
+
sage: RC.cardinality()
|
|
81
|
+
8
|
|
82
|
+
sage: T = crystals.Tableaux(['A', 2], shape=[2,1])
|
|
83
|
+
sage: RC.digraph().is_isomorphic(T.digraph(), edge_labels=True)
|
|
84
|
+
True
|
|
85
|
+
|
|
86
|
+
We construct a non-simply-laced affine type::
|
|
87
|
+
|
|
88
|
+
sage: La = RootSystem(['C', 3]).weight_lattice().fundamental_weights()
|
|
89
|
+
sage: RC = crystals.RiggedConfigurations(La[2])
|
|
90
|
+
sage: mg = RC.highest_weight_vector()
|
|
91
|
+
sage: mg.f_string([2,3])
|
|
92
|
+
(/) 1[ ]1 -1[ ]-1
|
|
93
|
+
sage: T = crystals.Tableaux(['C', 3], shape=[1,1])
|
|
94
|
+
sage: RC.digraph().is_isomorphic(T.digraph(), edge_labels=True)
|
|
95
|
+
True
|
|
96
|
+
|
|
97
|
+
We can construct rigged configurations using a diagram folding of
|
|
98
|
+
a simply-laced type. This yields an equivalent but distinct crystal::
|
|
99
|
+
|
|
100
|
+
sage: vct = CartanType(['C', 3]).as_folding()
|
|
101
|
+
sage: RC = crystals.RiggedConfigurations(vct, La[2])
|
|
102
|
+
sage: mg = RC.highest_weight_vector()
|
|
103
|
+
sage: mg.f_string([2,3])
|
|
104
|
+
(/) 0[ ]0 -1[ ]-1
|
|
105
|
+
sage: T = crystals.Tableaux(['C', 3], shape=[1,1])
|
|
106
|
+
sage: RC.digraph().is_isomorphic(T.digraph(), edge_labels=True)
|
|
107
|
+
True
|
|
108
|
+
|
|
109
|
+
We reset the global options::
|
|
110
|
+
|
|
111
|
+
sage: RiggedConfigurations.options._reset()
|
|
112
|
+
|
|
113
|
+
REFERENCES:
|
|
114
|
+
|
|
115
|
+
- [SS2015]_
|
|
116
|
+
- [SS2015II]_
|
|
117
|
+
- [SS2017]_
|
|
118
|
+
"""
|
|
119
|
+
@staticmethod
|
|
120
|
+
def __classcall_private__(cls, cartan_type, wt=None, WLR=None):
|
|
121
|
+
r"""
|
|
122
|
+
Normalize the input arguments to ensure unique representation.
|
|
123
|
+
|
|
124
|
+
EXAMPLES::
|
|
125
|
+
|
|
126
|
+
sage: La = RootSystem(['A', 2]).weight_lattice().fundamental_weights()
|
|
127
|
+
sage: RC = crystals.RiggedConfigurations(La[1])
|
|
128
|
+
sage: RC2 = crystals.RiggedConfigurations(['A', 2], La[1])
|
|
129
|
+
sage: RC3 = crystals.RiggedConfigurations(['A', 2], La[1], La[1].parent())
|
|
130
|
+
sage: RC is RC2 and RC2 is RC3
|
|
131
|
+
True
|
|
132
|
+
|
|
133
|
+
sage: La = RootSystem(['A',2,1]).weight_lattice().fundamental_weights()
|
|
134
|
+
sage: LaE = RootSystem(['A',2,1]).weight_lattice(extended=True).fundamental_weights()
|
|
135
|
+
sage: RC = crystals.RiggedConfigurations(La[1])
|
|
136
|
+
sage: RCE = crystals.RiggedConfigurations(LaE[1])
|
|
137
|
+
sage: RC is RCE
|
|
138
|
+
False
|
|
139
|
+
"""
|
|
140
|
+
from sage.combinat.root_system.type_folded import CartanTypeFolded
|
|
141
|
+
|
|
142
|
+
if wt is None:
|
|
143
|
+
wt = cartan_type
|
|
144
|
+
cartan_type = wt.parent().cartan_type()
|
|
145
|
+
else:
|
|
146
|
+
if not isinstance(cartan_type, CartanTypeFolded):
|
|
147
|
+
cartan_type = CartanType(cartan_type)
|
|
148
|
+
|
|
149
|
+
if WLR is None:
|
|
150
|
+
WLR = wt.parent()
|
|
151
|
+
else:
|
|
152
|
+
wt = WLR(wt)
|
|
153
|
+
|
|
154
|
+
if isinstance(cartan_type, CartanTypeFolded):
|
|
155
|
+
return CrystalOfNonSimplyLacedRC(cartan_type, wt, WLR)
|
|
156
|
+
|
|
157
|
+
return super().__classcall__(cls, wt, WLR=WLR)
|
|
158
|
+
|
|
159
|
+
def __init__(self, wt, WLR):
|
|
160
|
+
r"""
|
|
161
|
+
Initialize ``self``.
|
|
162
|
+
|
|
163
|
+
EXAMPLES::
|
|
164
|
+
|
|
165
|
+
sage: La = RootSystem(['A', 2]).weight_lattice().fundamental_weights()
|
|
166
|
+
sage: RC = crystals.RiggedConfigurations(La[1] + La[2])
|
|
167
|
+
sage: TestSuite(RC).run()
|
|
168
|
+
|
|
169
|
+
sage: La = RootSystem(['A', 2, 1]).weight_lattice().fundamental_weights()
|
|
170
|
+
sage: RC = crystals.RiggedConfigurations(La[0])
|
|
171
|
+
sage: TestSuite(RC).run() # long time
|
|
172
|
+
"""
|
|
173
|
+
self._cartan_type = WLR.cartan_type()
|
|
174
|
+
self._wt = wt
|
|
175
|
+
self._rc_index = self._cartan_type.index_set()
|
|
176
|
+
self._rc_index_inverse = {i: ii for ii,i in enumerate(self._rc_index)}
|
|
177
|
+
# We store the Cartan matrix for the vacancy number calculations for speed
|
|
178
|
+
self._cartan_matrix = self._cartan_type.cartan_matrix()
|
|
179
|
+
if self._cartan_type.is_finite():
|
|
180
|
+
category = ClassicalCrystals()
|
|
181
|
+
else:
|
|
182
|
+
category = (RegularCrystals(), HighestWeightCrystals(), InfiniteEnumeratedSets())
|
|
183
|
+
Parent.__init__(self, category=category)
|
|
184
|
+
n = self._cartan_type.rank() # == len(self._cartan_type.index_set())
|
|
185
|
+
self.module_generators = (self.element_class(self, partition_list=[[] for _ in repeat(None, n)]),)
|
|
186
|
+
|
|
187
|
+
options = RiggedConfigurations.options
|
|
188
|
+
|
|
189
|
+
def _repr_(self):
|
|
190
|
+
"""
|
|
191
|
+
Return a string representation of ``self``.
|
|
192
|
+
|
|
193
|
+
EXAMPLES::
|
|
194
|
+
|
|
195
|
+
sage: La = RootSystem(['A', 3]).weight_lattice().fundamental_weights()
|
|
196
|
+
sage: crystals.RiggedConfigurations(La[1])
|
|
197
|
+
Crystal of rigged configurations of type ['A', 3] and weight Lambda[1]
|
|
198
|
+
"""
|
|
199
|
+
return "Crystal of rigged configurations of type {0} and weight {1}".format(
|
|
200
|
+
self._cartan_type, self._wt)
|
|
201
|
+
|
|
202
|
+
def _element_constructor_(self, *lst, **options):
|
|
203
|
+
"""
|
|
204
|
+
Construct a ``RiggedConfigurationElement``.
|
|
205
|
+
|
|
206
|
+
Typically the user should not call this method since it does not check
|
|
207
|
+
if it is an actual configuration in the crystal. Instead the user
|
|
208
|
+
should use the iterator.
|
|
209
|
+
|
|
210
|
+
EXAMPLES::
|
|
211
|
+
|
|
212
|
+
sage: La = RootSystem(['A', 2]).weight_lattice().fundamental_weights()
|
|
213
|
+
sage: RC = crystals.RiggedConfigurations(La[1] + La[2])
|
|
214
|
+
sage: RC(partition_list=[[1],[1]], rigging_list=[[0],[-1]])
|
|
215
|
+
<BLANKLINE>
|
|
216
|
+
0[ ]0
|
|
217
|
+
<BLANKLINE>
|
|
218
|
+
0[ ]-1
|
|
219
|
+
<BLANKLINE>
|
|
220
|
+
sage: RC(partition_list=[[1],[2]])
|
|
221
|
+
<BLANKLINE>
|
|
222
|
+
0[ ]0
|
|
223
|
+
<BLANKLINE>
|
|
224
|
+
-2[ ][ ]-2
|
|
225
|
+
<BLANKLINE>
|
|
226
|
+
|
|
227
|
+
TESTS:
|
|
228
|
+
|
|
229
|
+
Check that :issue:`17054` is fixed::
|
|
230
|
+
|
|
231
|
+
sage: La = RootSystem(['A', 2]).weight_lattice().fundamental_weights()
|
|
232
|
+
sage: RC = crystals.RiggedConfigurations(4*La[1] + 4*La[2])
|
|
233
|
+
sage: B = crystals.infinity.RiggedConfigurations(['A',2])
|
|
234
|
+
sage: x = B.an_element().f_string([2,2,1,1,2,1,2,1])
|
|
235
|
+
sage: ascii_art(x)
|
|
236
|
+
-4[ ][ ][ ][ ]-4 -4[ ][ ][ ][ ]0
|
|
237
|
+
sage: ascii_art(RC(x.nu()))
|
|
238
|
+
0[ ][ ][ ][ ]-4 0[ ][ ][ ][ ]0
|
|
239
|
+
sage: x == B.an_element().f_string([2,2,1,1,2,1,2,1])
|
|
240
|
+
True
|
|
241
|
+
"""
|
|
242
|
+
if isinstance(lst[0], (list, tuple)):
|
|
243
|
+
lst = lst[0]
|
|
244
|
+
|
|
245
|
+
if isinstance(lst[0], RiggedPartition):
|
|
246
|
+
lst = [p._clone() for p in lst] # Make a deep copy
|
|
247
|
+
elif isinstance(lst[0], RiggedConfigurationElement):
|
|
248
|
+
lst = [p._clone() for p in lst[0]] # Make a deep copy
|
|
249
|
+
|
|
250
|
+
return self.element_class(self, list(lst), **options)
|
|
251
|
+
|
|
252
|
+
def _calc_vacancy_number(self, partitions, a, i, **options):
|
|
253
|
+
r"""
|
|
254
|
+
Calculate the vacancy number `p_i^{(a)}(\nu)` in ``self``.
|
|
255
|
+
|
|
256
|
+
This assumes that `\gamma_a = 1` for all `a` and
|
|
257
|
+
`(\alpha_a | \alpha_b ) = A_{ab}`.
|
|
258
|
+
|
|
259
|
+
INPUT:
|
|
260
|
+
|
|
261
|
+
- ``partitions`` -- the list of rigged partitions we are using
|
|
262
|
+
|
|
263
|
+
- ``a`` -- the rigged partition index
|
|
264
|
+
|
|
265
|
+
- ``i`` -- the row length
|
|
266
|
+
|
|
267
|
+
TESTS::
|
|
268
|
+
|
|
269
|
+
sage: La = RootSystem(['A', 2]).weight_lattice().fundamental_weights()
|
|
270
|
+
sage: RC = crystals.RiggedConfigurations(La[1] + La[2])
|
|
271
|
+
sage: elt = RC(partition_list=[[1],[2]])
|
|
272
|
+
sage: RC._calc_vacancy_number(elt.nu(), 1, 2)
|
|
273
|
+
-2
|
|
274
|
+
"""
|
|
275
|
+
vac_num = self._wt[self.index_set()[a]]
|
|
276
|
+
|
|
277
|
+
for b,nu in enumerate(partitions):
|
|
278
|
+
val = self._cartan_matrix[a,b]
|
|
279
|
+
if val:
|
|
280
|
+
if i == float('inf'):
|
|
281
|
+
vac_num -= val * sum(nu)
|
|
282
|
+
else:
|
|
283
|
+
vac_num -= val * nu.get_num_cells_to_column(i)
|
|
284
|
+
|
|
285
|
+
return vac_num
|
|
286
|
+
|
|
287
|
+
def weight_lattice_realization(self):
|
|
288
|
+
"""
|
|
289
|
+
Return the weight lattice realization used to express the weights
|
|
290
|
+
of elements in ``self``.
|
|
291
|
+
|
|
292
|
+
EXAMPLES::
|
|
293
|
+
|
|
294
|
+
sage: La = RootSystem(['A', 2, 1]).weight_lattice(extended=True).fundamental_weights()
|
|
295
|
+
sage: RC = crystals.RiggedConfigurations(La[0])
|
|
296
|
+
sage: RC.weight_lattice_realization()
|
|
297
|
+
Extended weight lattice of the Root system of type ['A', 2, 1]
|
|
298
|
+
"""
|
|
299
|
+
return self._wt.parent()
|
|
300
|
+
|
|
301
|
+
Element = RCHighestWeightElement
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
class CrystalOfNonSimplyLacedRC(CrystalOfRiggedConfigurations):
|
|
305
|
+
"""
|
|
306
|
+
Highest weight crystal of rigged configurations in non-simply-laced type.
|
|
307
|
+
"""
|
|
308
|
+
|
|
309
|
+
def __init__(self, vct, wt, WLR):
|
|
310
|
+
"""
|
|
311
|
+
Initialize ``self``.
|
|
312
|
+
|
|
313
|
+
EXAMPLES::
|
|
314
|
+
|
|
315
|
+
sage: La = RootSystem(['C', 3]).weight_lattice().fundamental_weights()
|
|
316
|
+
sage: RC = crystals.RiggedConfigurations(La[1])
|
|
317
|
+
sage: TestSuite(RC).run()
|
|
318
|
+
"""
|
|
319
|
+
self._folded_ct = vct
|
|
320
|
+
CrystalOfRiggedConfigurations.__init__(self, wt, WLR)
|
|
321
|
+
|
|
322
|
+
@lazy_attribute
|
|
323
|
+
def virtual(self):
|
|
324
|
+
"""
|
|
325
|
+
Return the corresponding virtual crystal.
|
|
326
|
+
|
|
327
|
+
EXAMPLES::
|
|
328
|
+
|
|
329
|
+
sage: La = RootSystem(['C', 2, 1]).weight_lattice().fundamental_weights()
|
|
330
|
+
sage: vct = CartanType(['C', 2, 1]).as_folding()
|
|
331
|
+
sage: RC = crystals.RiggedConfigurations(vct, La[0])
|
|
332
|
+
sage: RC
|
|
333
|
+
Crystal of rigged configurations of type ['C', 2, 1] and weight Lambda[0]
|
|
334
|
+
sage: RC.virtual
|
|
335
|
+
Crystal of rigged configurations of type ['A', 3, 1] and weight 2*Lambda[0]
|
|
336
|
+
"""
|
|
337
|
+
P = self._folded_ct._folding.root_system().weight_lattice()
|
|
338
|
+
gamma = self._folded_ct.scaling_factors()
|
|
339
|
+
sigma = self._folded_ct.folding_orbit()
|
|
340
|
+
vwt = P.sum_of_terms((b, gamma[a]*c) for a,c in self._wt for b in sigma[a])
|
|
341
|
+
return CrystalOfRiggedConfigurations(vwt)
|
|
342
|
+
|
|
343
|
+
def _calc_vacancy_number(self, partitions, a, i, **options):
|
|
344
|
+
r"""
|
|
345
|
+
Calculate the vacancy number `p_i^{(a)}(\nu)` in ``self``.
|
|
346
|
+
|
|
347
|
+
INPUT:
|
|
348
|
+
|
|
349
|
+
- ``partitions`` -- the list of rigged partitions we are using
|
|
350
|
+
|
|
351
|
+
- ``a`` -- the rigged partition index
|
|
352
|
+
|
|
353
|
+
- ``i`` -- the row length
|
|
354
|
+
|
|
355
|
+
TESTS::
|
|
356
|
+
|
|
357
|
+
sage: La = RootSystem(['C', 3]).weight_lattice().fundamental_weights()
|
|
358
|
+
sage: vct = CartanType(['C', 3]).as_folding()
|
|
359
|
+
sage: RC = crystals.RiggedConfigurations(vct, La[2])
|
|
360
|
+
sage: elt = RC(partition_list=[[], [1], [1]])
|
|
361
|
+
sage: RC._calc_vacancy_number(elt.nu(), 1, 1)
|
|
362
|
+
0
|
|
363
|
+
sage: RC._calc_vacancy_number(elt.nu(), 2, 1)
|
|
364
|
+
-1
|
|
365
|
+
"""
|
|
366
|
+
I = self.index_set()
|
|
367
|
+
ia = I[a]
|
|
368
|
+
vac_num = self._wt[ia]
|
|
369
|
+
|
|
370
|
+
if i == float('inf'):
|
|
371
|
+
return vac_num - sum(self._cartan_matrix[a,b] * sum(nu)
|
|
372
|
+
for b,nu in enumerate(partitions))
|
|
373
|
+
|
|
374
|
+
gamma = self._folded_ct.scaling_factors()
|
|
375
|
+
g = gamma[ia]
|
|
376
|
+
for b, nu in enumerate(partitions):
|
|
377
|
+
ib = I[b]
|
|
378
|
+
q = nu.get_num_cells_to_column(g*i, gamma[ib])
|
|
379
|
+
vac_num -= self._cartan_matrix[a,b] * q / gamma[ib]
|
|
380
|
+
|
|
381
|
+
return vac_num
|
|
382
|
+
|
|
383
|
+
def to_virtual(self, rc):
|
|
384
|
+
"""
|
|
385
|
+
Convert ``rc`` into a rigged configuration in the virtual crystal.
|
|
386
|
+
|
|
387
|
+
INPUT:
|
|
388
|
+
|
|
389
|
+
- ``rc`` -- a rigged configuration element
|
|
390
|
+
|
|
391
|
+
EXAMPLES::
|
|
392
|
+
|
|
393
|
+
sage: La = RootSystem(['C', 3]).weight_lattice().fundamental_weights()
|
|
394
|
+
sage: vct = CartanType(['C', 3]).as_folding()
|
|
395
|
+
sage: RC = crystals.RiggedConfigurations(vct, La[2])
|
|
396
|
+
sage: elt = RC(partition_list=[[], [1], [1]]); elt
|
|
397
|
+
<BLANKLINE>
|
|
398
|
+
(/)
|
|
399
|
+
<BLANKLINE>
|
|
400
|
+
0[ ]0
|
|
401
|
+
<BLANKLINE>
|
|
402
|
+
-1[ ]-1
|
|
403
|
+
<BLANKLINE>
|
|
404
|
+
sage: RC.to_virtual(elt)
|
|
405
|
+
<BLANKLINE>
|
|
406
|
+
(/)
|
|
407
|
+
<BLANKLINE>
|
|
408
|
+
0[ ]0
|
|
409
|
+
<BLANKLINE>
|
|
410
|
+
-2[ ][ ]-2
|
|
411
|
+
<BLANKLINE>
|
|
412
|
+
0[ ]0
|
|
413
|
+
<BLANKLINE>
|
|
414
|
+
(/)
|
|
415
|
+
<BLANKLINE>
|
|
416
|
+
"""
|
|
417
|
+
gamma = [int(f) for f in self._folded_ct.scaling_factors()]
|
|
418
|
+
sigma = self._folded_ct._orbit
|
|
419
|
+
n = self._folded_ct._folding.rank()
|
|
420
|
+
vindex = self._folded_ct._folding.index_set()
|
|
421
|
+
partitions = [None] * n
|
|
422
|
+
riggings = [None] * n
|
|
423
|
+
for a, rp in enumerate(rc):
|
|
424
|
+
for i in sigma[a]:
|
|
425
|
+
k = vindex.index(i)
|
|
426
|
+
partitions[k] = [row_len*gamma[a] for row_len in rp._list]
|
|
427
|
+
riggings[k] = [rig_val*gamma[a] for rig_val in rp.rigging]
|
|
428
|
+
return self.virtual.element_class(self.virtual, partition_list=partitions,
|
|
429
|
+
rigging_list=riggings)
|
|
430
|
+
|
|
431
|
+
def from_virtual(self, vrc):
|
|
432
|
+
"""
|
|
433
|
+
Convert ``vrc`` in the virtual crystal into a rigged configuration of
|
|
434
|
+
the original Cartan type.
|
|
435
|
+
|
|
436
|
+
INPUT:
|
|
437
|
+
|
|
438
|
+
- ``vrc`` -- a virtual rigged configuration
|
|
439
|
+
|
|
440
|
+
EXAMPLES::
|
|
441
|
+
|
|
442
|
+
sage: La = RootSystem(['C', 3]).weight_lattice().fundamental_weights()
|
|
443
|
+
sage: vct = CartanType(['C', 3]).as_folding()
|
|
444
|
+
sage: RC = crystals.RiggedConfigurations(vct, La[2])
|
|
445
|
+
sage: elt = RC(partition_list=[[0], [1], [1]])
|
|
446
|
+
sage: elt == RC.from_virtual(RC.to_virtual(elt))
|
|
447
|
+
True
|
|
448
|
+
"""
|
|
449
|
+
gamma = list(self._folded_ct.scaling_factors()) # map(int, self._folded_ct.scaling_factors())
|
|
450
|
+
sigma = self._folded_ct._orbit
|
|
451
|
+
n = self._cartan_type.rank()
|
|
452
|
+
partitions = [None] * n
|
|
453
|
+
riggings = [None] * n
|
|
454
|
+
vindex = self._folded_ct._folding.index_set()
|
|
455
|
+
for a in range(n):
|
|
456
|
+
index = vindex.index(sigma[a][0])
|
|
457
|
+
partitions[a] = [row_len // gamma[a] for row_len in vrc[index]._list]
|
|
458
|
+
riggings[a] = [rig_val / gamma[a] for rig_val in vrc[index].rigging]
|
|
459
|
+
return self.element_class(self, partition_list=partitions, rigging_list=riggings)
|
|
460
|
+
|
|
461
|
+
Element = RCHWNonSimplyLacedElement
|