passagemath-combinat 10.6.42__cp314-cp314t-win_amd64.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/DELVEWHEEL +2 -0
- passagemath_combinat-10.6.42.dist-info/METADATA +160 -0
- passagemath_combinat-10.6.42.dist-info/RECORD +401 -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-10-3a5f019e2510aeaad918cab2b57a689d.dll +0 -0
- passagemath_combinat.libs/libsymmetrica-3-7dcf900932804d0df5fd0919b4668720.dll +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 +44 -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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +0 -0
- sage/combinat/debruijn_sequence.pyx +355 -0
- sage/combinat/decorated_permutation.py +270 -0
- sage/combinat/degree_sequences.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +0 -0
- sage/combinat/expnums.pyx +148 -0
- sage/combinat/fast_vector_partitions.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +0 -0
- sage/combinat/words/word_char.pyx +847 -0
- sage/combinat/words/word_datatypes.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +0 -0
- sage/sat/solvers/satsolver.pxd +3 -0
- sage/sat/solvers/satsolver.pyx +405 -0
|
@@ -0,0 +1,540 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.graphs sage.modules
|
|
3
|
+
r"""
|
|
4
|
+
Rigged configurations of `\mathcal{B}(\infty)`
|
|
5
|
+
|
|
6
|
+
AUTHORS:
|
|
7
|
+
|
|
8
|
+
- Travis Scrimshaw (2013-04-16): initial version
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
# ****************************************************************************
|
|
12
|
+
# Copyright (C) 2013 Travis Scrimshaw <tscrim@ucdavis.edu>
|
|
13
|
+
#
|
|
14
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
15
|
+
#
|
|
16
|
+
# This code is distributed in the hope that it will be useful,
|
|
17
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
18
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
19
|
+
# General Public License for more details.
|
|
20
|
+
#
|
|
21
|
+
# The full text of the GPL is available at:
|
|
22
|
+
#
|
|
23
|
+
# https://www.gnu.org/licenses/
|
|
24
|
+
# ****************************************************************************
|
|
25
|
+
|
|
26
|
+
from sage.misc.lazy_attribute import lazy_attribute
|
|
27
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
28
|
+
from sage.structure.parent import Parent
|
|
29
|
+
from sage.categories.highest_weight_crystals import HighestWeightCrystals
|
|
30
|
+
from sage.categories.homset import Hom
|
|
31
|
+
from sage.combinat.root_system.cartan_type import CartanType
|
|
32
|
+
from sage.combinat.rigged_configurations.rigged_configuration_element import (
|
|
33
|
+
RiggedConfigurationElement, RCNonSimplyLacedElement)
|
|
34
|
+
from sage.combinat.rigged_configurations.rigged_configurations import RiggedConfigurations
|
|
35
|
+
from sage.combinat.rigged_configurations.rigged_partition import RiggedPartition
|
|
36
|
+
|
|
37
|
+
# Note on implementation, this class is used for simply-laced types only
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class InfinityCrystalOfRiggedConfigurations(UniqueRepresentation, Parent):
|
|
41
|
+
r"""
|
|
42
|
+
Rigged configuration model for `\mathcal{B}(\infty)`.
|
|
43
|
+
|
|
44
|
+
The crystal is generated by the empty rigged configuration with the same
|
|
45
|
+
crystal structure given by the :class:`highest weight model
|
|
46
|
+
<sage.combinat.rigged_configurations.rc_crystal.CrystalOfRiggedConfigurations>`
|
|
47
|
+
except we remove the condition that the resulting rigged configuration
|
|
48
|
+
needs to be valid when applying `f_a`.
|
|
49
|
+
|
|
50
|
+
INPUT:
|
|
51
|
+
|
|
52
|
+
- ``cartan_type`` -- a Cartan type
|
|
53
|
+
|
|
54
|
+
EXAMPLES:
|
|
55
|
+
|
|
56
|
+
For simplicity, we display all of the rigged configurations
|
|
57
|
+
horizontally::
|
|
58
|
+
|
|
59
|
+
sage: RiggedConfigurations.options(display='horizontal')
|
|
60
|
+
|
|
61
|
+
We begin with a simply-laced finite type::
|
|
62
|
+
|
|
63
|
+
sage: RC = crystals.infinity.RiggedConfigurations(['A', 3]); RC
|
|
64
|
+
The infinity crystal of rigged configurations of type ['A', 3]
|
|
65
|
+
|
|
66
|
+
sage: RC.options(display='horizontal')
|
|
67
|
+
|
|
68
|
+
sage: mg = RC.highest_weight_vector(); mg
|
|
69
|
+
(/) (/) (/)
|
|
70
|
+
sage: elt = mg.f_string([2,1,3,2]); elt
|
|
71
|
+
0[ ]0 -2[ ]-1 0[ ]0
|
|
72
|
+
-2[ ]-1
|
|
73
|
+
sage: elt.e(1)
|
|
74
|
+
sage: elt.e(3)
|
|
75
|
+
sage: mg.f_string([2,1,3,2]).e(2)
|
|
76
|
+
-1[ ]-1 0[ ]1 -1[ ]-1
|
|
77
|
+
sage: mg.f_string([2,3,2,1,3,2])
|
|
78
|
+
0[ ]0 -3[ ][ ]-1 -1[ ][ ]-1
|
|
79
|
+
-2[ ]-1
|
|
80
|
+
|
|
81
|
+
Next we consider a non-simply-laced finite type::
|
|
82
|
+
|
|
83
|
+
sage: RC = crystals.infinity.RiggedConfigurations(['C', 3])
|
|
84
|
+
sage: mg = RC.highest_weight_vector()
|
|
85
|
+
sage: mg.f_string([2,1,3,2])
|
|
86
|
+
0[ ]0 -1[ ]0 0[ ]0
|
|
87
|
+
-1[ ]-1
|
|
88
|
+
sage: mg.f_string([2,3,2,1,3,2])
|
|
89
|
+
0[ ]-1 -1[ ][ ]-1 -1[ ][ ]0
|
|
90
|
+
-1[ ]0
|
|
91
|
+
|
|
92
|
+
We can construct rigged configurations using a diagram folding of
|
|
93
|
+
a simply-laced type. This yields an equivalent but distinct crystal::
|
|
94
|
+
|
|
95
|
+
sage: vct = CartanType(['C', 3]).as_folding()
|
|
96
|
+
sage: VRC = crystals.infinity.RiggedConfigurations(vct)
|
|
97
|
+
sage: mg = VRC.highest_weight_vector()
|
|
98
|
+
sage: mg.f_string([2,1,3,2])
|
|
99
|
+
0[ ]0 -2[ ]-1 0[ ]0
|
|
100
|
+
-2[ ]-1
|
|
101
|
+
sage: mg.f_string([2,3,2,1,3,2])
|
|
102
|
+
-1[ ]-1 -2[ ][ ][ ]-1 -1[ ][ ]0
|
|
103
|
+
|
|
104
|
+
sage: G = RC.subcrystal(max_depth=5).digraph()
|
|
105
|
+
sage: VG = VRC.subcrystal(max_depth=5).digraph()
|
|
106
|
+
sage: G.is_isomorphic(VG, edge_labels=True)
|
|
107
|
+
True
|
|
108
|
+
|
|
109
|
+
We can also construct `B(\infty)` using rigged configurations in
|
|
110
|
+
affine types::
|
|
111
|
+
|
|
112
|
+
sage: RC = crystals.infinity.RiggedConfigurations(['A', 3, 1])
|
|
113
|
+
sage: mg = RC.highest_weight_vector()
|
|
114
|
+
sage: mg.f_string([0,1,2,3,0,1,3])
|
|
115
|
+
-1[ ]0 -1[ ]-1 1[ ]1 -1[ ][ ]-1
|
|
116
|
+
-1[ ]0 -1[ ]-1
|
|
117
|
+
|
|
118
|
+
sage: RC = crystals.infinity.RiggedConfigurations(['C', 3, 1])
|
|
119
|
+
sage: mg = RC.highest_weight_vector()
|
|
120
|
+
sage: mg.f_string([1,2,3,0,1,2,3,3,0])
|
|
121
|
+
-2[ ][ ]-1 0[ ]1 0[ ]0 -4[ ][ ][ ]-2
|
|
122
|
+
0[ ]0 0[ ]-1
|
|
123
|
+
|
|
124
|
+
sage: RC = crystals.infinity.RiggedConfigurations(['A', 6, 2])
|
|
125
|
+
sage: mg = RC.highest_weight_vector()
|
|
126
|
+
sage: mg.f_string([1,2,3,0,1,2,3,3,0])
|
|
127
|
+
0[ ]-1 0[ ]1 0[ ]0 -4[ ][ ][ ]-2
|
|
128
|
+
0[ ]-1 0[ ]1 0[ ]-1
|
|
129
|
+
|
|
130
|
+
We reset the global options::
|
|
131
|
+
|
|
132
|
+
sage: RiggedConfigurations.options._reset()
|
|
133
|
+
"""
|
|
134
|
+
@staticmethod
|
|
135
|
+
def __classcall_private__(cls, cartan_type):
|
|
136
|
+
r"""
|
|
137
|
+
Normalize the input arguments to ensure unique representation.
|
|
138
|
+
|
|
139
|
+
EXAMPLES::
|
|
140
|
+
|
|
141
|
+
sage: RC1 = crystals.infinity.RiggedConfigurations(CartanType(['A',3]))
|
|
142
|
+
sage: RC2 = crystals.infinity.RiggedConfigurations(['A',3])
|
|
143
|
+
sage: RC2 is RC1
|
|
144
|
+
True
|
|
145
|
+
"""
|
|
146
|
+
from sage.combinat.root_system.type_folded import CartanTypeFolded
|
|
147
|
+
if isinstance(cartan_type, CartanTypeFolded):
|
|
148
|
+
return InfinityCrystalOfNonSimplyLacedRC(cartan_type)
|
|
149
|
+
|
|
150
|
+
cartan_type = CartanType(cartan_type)
|
|
151
|
+
return super().__classcall__(cls, cartan_type)
|
|
152
|
+
|
|
153
|
+
def __init__(self, cartan_type):
|
|
154
|
+
r"""
|
|
155
|
+
Initialize ``self``.
|
|
156
|
+
|
|
157
|
+
EXAMPLES::
|
|
158
|
+
|
|
159
|
+
sage: RC = crystals.infinity.RiggedConfigurations(['A', 2])
|
|
160
|
+
sage: TestSuite(RC).run()
|
|
161
|
+
sage: RC = crystals.infinity.RiggedConfigurations(['A', 2, 1])
|
|
162
|
+
sage: TestSuite(RC).run() # long time
|
|
163
|
+
sage: RC = crystals.infinity.RiggedConfigurations(['C', 2])
|
|
164
|
+
sage: TestSuite(RC).run() # long time
|
|
165
|
+
sage: RC = crystals.infinity.RiggedConfigurations(['C', 2, 1])
|
|
166
|
+
sage: TestSuite(RC).run() # long time
|
|
167
|
+
"""
|
|
168
|
+
self._cartan_type = cartan_type
|
|
169
|
+
Parent.__init__(self, category=HighestWeightCrystals().Infinite())
|
|
170
|
+
self._rc_index = self._cartan_type.index_set()
|
|
171
|
+
self._rc_index_inverse = {i: ii for ii, i in enumerate(self._rc_index)}
|
|
172
|
+
# We store the Cartan matrix for the vacancy number
|
|
173
|
+
# calculations for speed
|
|
174
|
+
self._cartan_matrix = self._cartan_type.cartan_matrix()
|
|
175
|
+
self.module_generators = (self.element_class(self, rigging_list=[[]]*cartan_type.rank()),)
|
|
176
|
+
|
|
177
|
+
options = RiggedConfigurations.options
|
|
178
|
+
|
|
179
|
+
def _repr_(self):
|
|
180
|
+
"""
|
|
181
|
+
Return a string representation of ``self``.
|
|
182
|
+
|
|
183
|
+
EXAMPLES::
|
|
184
|
+
|
|
185
|
+
sage: crystals.infinity.RiggedConfigurations(['A', 3])
|
|
186
|
+
The infinity crystal of rigged configurations of type ['A', 3]
|
|
187
|
+
"""
|
|
188
|
+
return "The infinity crystal of rigged configurations of type {}".format(self._cartan_type)
|
|
189
|
+
|
|
190
|
+
def _element_constructor_(self, lst=None, **options):
|
|
191
|
+
"""
|
|
192
|
+
Construct an element of ``self`` from ``lst``.
|
|
193
|
+
|
|
194
|
+
EXAMPLES::
|
|
195
|
+
|
|
196
|
+
sage: RC = crystals.infinity.RiggedConfigurations(['A', 3, 1])
|
|
197
|
+
sage: ascii_art(RC(partition_list=[[1,1]]*4, rigging_list=[[1,1], [0,0], [0,0], [-1,-1]]))
|
|
198
|
+
0[ ]1 0[ ]0 0[ ]0 0[ ]-1
|
|
199
|
+
0[ ]1 0[ ]0 0[ ]0 0[ ]-1
|
|
200
|
+
|
|
201
|
+
sage: RC = crystals.infinity.RiggedConfigurations(['C', 3])
|
|
202
|
+
sage: ascii_art(RC(partition_list=[[1],[1,1],[1]], rigging_list=[[0],[0,-1],[0]]))
|
|
203
|
+
0[ ]0 -1[ ]0 0[ ]0
|
|
204
|
+
-1[ ]-1
|
|
205
|
+
|
|
206
|
+
TESTS:
|
|
207
|
+
|
|
208
|
+
Check that :issue:`17054` is fixed::
|
|
209
|
+
|
|
210
|
+
sage: RC = RiggedConfigurations(['A',2,1], [[1,1]]*4 + [[2,1]]*4)
|
|
211
|
+
sage: B = crystals.infinity.RiggedConfigurations(['A',2])
|
|
212
|
+
sage: x = RC().f_string([2,2,1,1,2,1,2,1])
|
|
213
|
+
sage: ascii_art(x)
|
|
214
|
+
0[ ][ ][ ][ ]-4 0[ ][ ][ ][ ]0
|
|
215
|
+
sage: ascii_art(B(x))
|
|
216
|
+
-4[ ][ ][ ][ ]-4 -4[ ][ ][ ][ ]0
|
|
217
|
+
sage: x == RC().f_string([2,2,1,1,2,1,2,1])
|
|
218
|
+
True
|
|
219
|
+
"""
|
|
220
|
+
if isinstance(lst, RiggedConfigurationElement):
|
|
221
|
+
lst = [p._clone() for p in lst] # Make a deep copy
|
|
222
|
+
elif isinstance(lst, list) and bool(lst) and isinstance(lst[0], RiggedPartition):
|
|
223
|
+
lst = [p._clone() for p in lst] # Make a deep copy
|
|
224
|
+
return self.element_class(self, lst, **options)
|
|
225
|
+
|
|
226
|
+
def _coerce_map_from_(self, P):
|
|
227
|
+
"""
|
|
228
|
+
Return ``True`` or the coerce map from ``P`` if a map exists.
|
|
229
|
+
|
|
230
|
+
EXAMPLES::
|
|
231
|
+
|
|
232
|
+
sage: T = crystals.infinity.Tableaux(['A',3])
|
|
233
|
+
sage: RC = crystals.infinity.RiggedConfigurations(['A',3])
|
|
234
|
+
sage: RC._coerce_map_from_(T)
|
|
235
|
+
Crystal Isomorphism morphism:
|
|
236
|
+
From: The infinity crystal of tableaux of type ['A', 3]
|
|
237
|
+
To: The infinity crystal of rigged configurations of type ['A', 3]
|
|
238
|
+
"""
|
|
239
|
+
if self.cartan_type().is_finite():
|
|
240
|
+
from sage.combinat.crystals.infinity_crystals import InfinityCrystalOfTableaux
|
|
241
|
+
if (isinstance(P, InfinityCrystalOfTableaux)
|
|
242
|
+
and self.cartan_type().is_simply_laced()):
|
|
243
|
+
from sage.combinat.rigged_configurations.bij_infinity import FromTableauIsomorphism
|
|
244
|
+
return FromTableauIsomorphism(Hom(P, self))
|
|
245
|
+
return super()._coerce_map_from_(P)
|
|
246
|
+
|
|
247
|
+
def _calc_vacancy_number(self, partitions, a, i, **options):
|
|
248
|
+
r"""
|
|
249
|
+
Calculate the vacancy number `p_i^{(a)}(\nu)` in ``self``.
|
|
250
|
+
|
|
251
|
+
This assumes that `\gamma_a = 1` for all `a` and `(\alpha_a \mid
|
|
252
|
+
\alpha_b ) = A_{ab}`.
|
|
253
|
+
|
|
254
|
+
INPUT:
|
|
255
|
+
|
|
256
|
+
- ``partitions`` -- the list of rigged partitions we are using
|
|
257
|
+
|
|
258
|
+
- ``a`` -- the rigged partition index
|
|
259
|
+
|
|
260
|
+
- ``i`` -- the row length
|
|
261
|
+
|
|
262
|
+
TESTS::
|
|
263
|
+
|
|
264
|
+
sage: RC = crystals.infinity.RiggedConfigurations(['A', 4])
|
|
265
|
+
sage: elt = RC(partition_list=[[1], [1], [], []])
|
|
266
|
+
sage: RC._calc_vacancy_number(elt.nu(), 0, 1)
|
|
267
|
+
-1
|
|
268
|
+
"""
|
|
269
|
+
if i == float('inf'):
|
|
270
|
+
return -sum(self._cartan_matrix[a, b] * sum(nu)
|
|
271
|
+
for b, nu in enumerate(partitions))
|
|
272
|
+
|
|
273
|
+
return -sum(self._cartan_matrix[a, b] * nu.get_num_cells_to_column(i)
|
|
274
|
+
for b, nu in enumerate(partitions))
|
|
275
|
+
|
|
276
|
+
# FIXME: Remove this method!!!
|
|
277
|
+
def weight_lattice_realization(self):
|
|
278
|
+
"""
|
|
279
|
+
Return the weight lattice realization used to express the weights
|
|
280
|
+
of elements in ``self``.
|
|
281
|
+
|
|
282
|
+
EXAMPLES::
|
|
283
|
+
|
|
284
|
+
sage: RC = crystals.infinity.RiggedConfigurations(['A', 2, 1])
|
|
285
|
+
sage: RC.weight_lattice_realization()
|
|
286
|
+
Extended weight lattice of the Root system of type ['A', 2, 1]
|
|
287
|
+
"""
|
|
288
|
+
R = self._cartan_type.root_system()
|
|
289
|
+
if self._cartan_type.is_affine():
|
|
290
|
+
return R.weight_lattice(extended=True)
|
|
291
|
+
if self._cartan_type.is_finite() and R.ambient_space():
|
|
292
|
+
return R.ambient_space()
|
|
293
|
+
return R.weight_lattice()
|
|
294
|
+
|
|
295
|
+
class Element(RiggedConfigurationElement):
|
|
296
|
+
r"""
|
|
297
|
+
A rigged configuration in `\mathcal{B}(\infty)` in simply-laced types.
|
|
298
|
+
|
|
299
|
+
TESTS::
|
|
300
|
+
|
|
301
|
+
sage: RC = crystals.infinity.RiggedConfigurations(['A', 3, 1])
|
|
302
|
+
sage: elt = RC(partition_list=[[1,1]]*4, rigging_list=[[1,1], [0,0], [0,0], [-1,-1]])
|
|
303
|
+
sage: TestSuite(elt).run()
|
|
304
|
+
"""
|
|
305
|
+
|
|
306
|
+
def weight(self):
|
|
307
|
+
"""
|
|
308
|
+
Return the weight of ``self``.
|
|
309
|
+
|
|
310
|
+
EXAMPLES::
|
|
311
|
+
|
|
312
|
+
sage: RC = crystals.infinity.RiggedConfigurations(['A', 3, 1])
|
|
313
|
+
sage: elt = RC(partition_list=[[1,1]]*4, rigging_list=[[1,1], [0,0], [0,0], [-1,-1]])
|
|
314
|
+
sage: elt.weight()
|
|
315
|
+
-2*delta
|
|
316
|
+
"""
|
|
317
|
+
P = self.parent().weight_lattice_realization()
|
|
318
|
+
alpha = list(P.simple_roots())
|
|
319
|
+
return -sum(sum(x) * alpha[i] for i, x in enumerate(self))
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
class InfinityCrystalOfNonSimplyLacedRC(InfinityCrystalOfRiggedConfigurations):
|
|
323
|
+
r"""
|
|
324
|
+
Rigged configurations for `\mathcal{B}(\infty)` in non-simply-laced types.
|
|
325
|
+
"""
|
|
326
|
+
|
|
327
|
+
def __init__(self, vct):
|
|
328
|
+
"""
|
|
329
|
+
Initialize ``self``.
|
|
330
|
+
|
|
331
|
+
EXAMPLES::
|
|
332
|
+
|
|
333
|
+
sage: vct = CartanType(['C', 2]).as_folding()
|
|
334
|
+
sage: RC = crystals.infinity.RiggedConfigurations(vct)
|
|
335
|
+
sage: TestSuite(RC).run() # long time
|
|
336
|
+
sage: vct = CartanType(['C', 2, 1]).as_folding()
|
|
337
|
+
sage: RC = crystals.infinity.RiggedConfigurations(vct)
|
|
338
|
+
sage: TestSuite(RC).run() # long time
|
|
339
|
+
"""
|
|
340
|
+
self._folded_ct = vct
|
|
341
|
+
InfinityCrystalOfRiggedConfigurations.__init__(self, vct._cartan_type)
|
|
342
|
+
|
|
343
|
+
def _coerce_map_from_(self, P):
|
|
344
|
+
"""
|
|
345
|
+
Return ``True`` or the coerce map from ``P`` if a map exists.
|
|
346
|
+
|
|
347
|
+
EXAMPLES::
|
|
348
|
+
|
|
349
|
+
sage: T = crystals.infinity.Tableaux(['C',3])
|
|
350
|
+
sage: vct = CartanType(['C',3]).as_folding()
|
|
351
|
+
sage: RC = crystals.infinity.RiggedConfigurations(vct)
|
|
352
|
+
sage: RC._coerce_map_from_(T)
|
|
353
|
+
Crystal Isomorphism morphism:
|
|
354
|
+
From: The infinity crystal of tableaux of type ['C', 3]
|
|
355
|
+
To: The infinity crystal of rigged configurations of type ['C', 3]
|
|
356
|
+
"""
|
|
357
|
+
if self.cartan_type().is_finite():
|
|
358
|
+
from sage.combinat.crystals.infinity_crystals import InfinityCrystalOfTableaux
|
|
359
|
+
if isinstance(P, InfinityCrystalOfTableaux):
|
|
360
|
+
from sage.combinat.rigged_configurations.bij_infinity import FromTableauIsomorphism
|
|
361
|
+
return FromTableauIsomorphism(Hom(P, self))
|
|
362
|
+
return super()._coerce_map_from_(P)
|
|
363
|
+
|
|
364
|
+
def _calc_vacancy_number(self, partitions, a, i):
|
|
365
|
+
r"""
|
|
366
|
+
Calculate the vacancy number `p_i^{(a)}(\nu)` in ``self``.
|
|
367
|
+
|
|
368
|
+
INPUT:
|
|
369
|
+
|
|
370
|
+
- ``partitions`` -- the list of rigged partitions we are using
|
|
371
|
+
|
|
372
|
+
- ``a`` -- the rigged partition index
|
|
373
|
+
|
|
374
|
+
- ``i`` -- the row length
|
|
375
|
+
|
|
376
|
+
TESTS::
|
|
377
|
+
|
|
378
|
+
sage: La = RootSystem(['C', 2]).weight_lattice().fundamental_weights()
|
|
379
|
+
sage: vct = CartanType(['C', 2]).as_folding()
|
|
380
|
+
sage: RC = crystals.RiggedConfigurations(vct, La[1])
|
|
381
|
+
sage: elt = RC(partition_list=[[1], [1]])
|
|
382
|
+
sage: RC._calc_vacancy_number(elt.nu(), 0, 1)
|
|
383
|
+
0
|
|
384
|
+
sage: RC._calc_vacancy_number(elt.nu(), 1, 1)
|
|
385
|
+
-1
|
|
386
|
+
"""
|
|
387
|
+
I = self.index_set()
|
|
388
|
+
ia = I[a]
|
|
389
|
+
vac_num = 0
|
|
390
|
+
|
|
391
|
+
if i == float('inf'):
|
|
392
|
+
return -sum(self._cartan_matrix[a, b] * sum(nu)
|
|
393
|
+
for b, nu in enumerate(partitions))
|
|
394
|
+
|
|
395
|
+
gamma = self._folded_ct.scaling_factors()
|
|
396
|
+
g = gamma[ia]
|
|
397
|
+
for b in range(self._cartan_matrix.ncols()):
|
|
398
|
+
ib = I[b]
|
|
399
|
+
q = partitions[b].get_num_cells_to_column(g * i, gamma[ib])
|
|
400
|
+
vac_num -= self._cartan_matrix[a, b] * q // gamma[ib]
|
|
401
|
+
|
|
402
|
+
return vac_num
|
|
403
|
+
|
|
404
|
+
@lazy_attribute
|
|
405
|
+
def virtual(self):
|
|
406
|
+
"""
|
|
407
|
+
Return the corresponding virtual crystal.
|
|
408
|
+
|
|
409
|
+
EXAMPLES::
|
|
410
|
+
|
|
411
|
+
sage: vct = CartanType(['C', 3]).as_folding()
|
|
412
|
+
sage: RC = crystals.infinity.RiggedConfigurations(vct)
|
|
413
|
+
sage: RC
|
|
414
|
+
The infinity crystal of rigged configurations of type ['C', 3]
|
|
415
|
+
sage: RC.virtual
|
|
416
|
+
The infinity crystal of rigged configurations of type ['A', 5]
|
|
417
|
+
"""
|
|
418
|
+
return InfinityCrystalOfRiggedConfigurations(self._folded_ct._folding)
|
|
419
|
+
|
|
420
|
+
def to_virtual(self, rc):
|
|
421
|
+
"""
|
|
422
|
+
Convert ``rc`` into a rigged configuration in the virtual crystal.
|
|
423
|
+
|
|
424
|
+
INPUT:
|
|
425
|
+
|
|
426
|
+
- ``rc`` -- a rigged configuration element
|
|
427
|
+
|
|
428
|
+
EXAMPLES::
|
|
429
|
+
|
|
430
|
+
sage: vct = CartanType(['C', 2]).as_folding()
|
|
431
|
+
sage: RC = crystals.infinity.RiggedConfigurations(vct)
|
|
432
|
+
sage: mg = RC.highest_weight_vector()
|
|
433
|
+
sage: elt = mg.f_string([1,2,2,1,1]); elt
|
|
434
|
+
<BLANKLINE>
|
|
435
|
+
-3[ ][ ][ ]-2
|
|
436
|
+
<BLANKLINE>
|
|
437
|
+
-1[ ][ ]0
|
|
438
|
+
<BLANKLINE>
|
|
439
|
+
sage: velt = RC.to_virtual(elt); velt
|
|
440
|
+
<BLANKLINE>
|
|
441
|
+
-3[ ][ ][ ]-2
|
|
442
|
+
<BLANKLINE>
|
|
443
|
+
-2[ ][ ][ ][ ]0
|
|
444
|
+
<BLANKLINE>
|
|
445
|
+
-3[ ][ ][ ]-2
|
|
446
|
+
<BLANKLINE>
|
|
447
|
+
sage: velt.parent()
|
|
448
|
+
The infinity crystal of rigged configurations of type ['A', 3]
|
|
449
|
+
"""
|
|
450
|
+
gamma = [int(f) for f in self._folded_ct.scaling_factors()]
|
|
451
|
+
sigma = self._folded_ct._orbit
|
|
452
|
+
n = self._folded_ct._folding.rank()
|
|
453
|
+
vindex = self._folded_ct._folding.index_set()
|
|
454
|
+
partitions = [None] * n
|
|
455
|
+
riggings = [None] * n
|
|
456
|
+
for a, rp in enumerate(rc):
|
|
457
|
+
for i in sigma[a]:
|
|
458
|
+
k = vindex.index(i)
|
|
459
|
+
partitions[k] = [row_len * gamma[a] for row_len in rp._list]
|
|
460
|
+
riggings[k] = [rig_val * gamma[a] for rig_val in rp.rigging]
|
|
461
|
+
return self.virtual.element_class(self.virtual, partition_list=partitions,
|
|
462
|
+
rigging_list=riggings)
|
|
463
|
+
|
|
464
|
+
def from_virtual(self, vrc):
|
|
465
|
+
"""
|
|
466
|
+
Convert ``vrc`` in the virtual crystal into a rigged configuration of
|
|
467
|
+
the original Cartan type.
|
|
468
|
+
|
|
469
|
+
INPUT:
|
|
470
|
+
|
|
471
|
+
- ``vrc`` -- a virtual rigged configuration
|
|
472
|
+
|
|
473
|
+
EXAMPLES::
|
|
474
|
+
|
|
475
|
+
sage: vct = CartanType(['C', 2]).as_folding()
|
|
476
|
+
sage: RC = crystals.infinity.RiggedConfigurations(vct)
|
|
477
|
+
sage: elt = RC(partition_list=[[3],[2]], rigging_list=[[-2],[0]])
|
|
478
|
+
sage: vrc_elt = RC.to_virtual(elt)
|
|
479
|
+
sage: ret = RC.from_virtual(vrc_elt); ret
|
|
480
|
+
<BLANKLINE>
|
|
481
|
+
-3[ ][ ][ ]-2
|
|
482
|
+
<BLANKLINE>
|
|
483
|
+
-1[ ][ ]0
|
|
484
|
+
<BLANKLINE>
|
|
485
|
+
sage: ret == elt
|
|
486
|
+
True
|
|
487
|
+
"""
|
|
488
|
+
gamma = list(self._folded_ct.scaling_factors()) # map(int, self._folded_ct.scaling_factors())
|
|
489
|
+
sigma = self._folded_ct._orbit
|
|
490
|
+
n = self._cartan_type.rank()
|
|
491
|
+
partitions = [None] * n
|
|
492
|
+
riggings = [None] * n
|
|
493
|
+
vindex = self._folded_ct._folding.index_set()
|
|
494
|
+
# TODO: Handle special cases for A^{(2)} even and its dual?
|
|
495
|
+
for a in range(n):
|
|
496
|
+
index = vindex.index(sigma[a][0])
|
|
497
|
+
partitions[a] = [row_len // gamma[a] for row_len in vrc[index]._list]
|
|
498
|
+
riggings[a] = [rig_val / gamma[a] for rig_val in vrc[index].rigging]
|
|
499
|
+
return self.element_class(self, partition_list=partitions,
|
|
500
|
+
rigging_list=riggings)
|
|
501
|
+
|
|
502
|
+
class Element(RCNonSimplyLacedElement):
|
|
503
|
+
r"""
|
|
504
|
+
A rigged configuration in `\mathcal{B}(\infty)` in
|
|
505
|
+
non-simply-laced types.
|
|
506
|
+
|
|
507
|
+
TESTS::
|
|
508
|
+
|
|
509
|
+
sage: vct = CartanType(['C', 3]).as_folding()
|
|
510
|
+
sage: RC = crystals.infinity.RiggedConfigurations(vct)
|
|
511
|
+
sage: elt = RC(partition_list=[[1],[1,1],[1]])
|
|
512
|
+
sage: TestSuite(elt).run()
|
|
513
|
+
"""
|
|
514
|
+
|
|
515
|
+
def weight(self):
|
|
516
|
+
"""
|
|
517
|
+
Return the weight of ``self``.
|
|
518
|
+
|
|
519
|
+
EXAMPLES::
|
|
520
|
+
|
|
521
|
+
sage: vct = CartanType(['C', 3]).as_folding()
|
|
522
|
+
sage: RC = crystals.infinity.RiggedConfigurations(vct)
|
|
523
|
+
sage: elt = RC(partition_list=[[1],[1,1],[1]], rigging_list=[[0],[-1,-1],[0]])
|
|
524
|
+
sage: elt.weight()
|
|
525
|
+
(-1, -1, 0)
|
|
526
|
+
|
|
527
|
+
sage: vct = CartanType(['F', 4, 1]).as_folding()
|
|
528
|
+
sage: RC = crystals.infinity.RiggedConfigurations(vct)
|
|
529
|
+
sage: mg = RC.highest_weight_vector()
|
|
530
|
+
sage: elt = mg.f_string([1,0,3,4,2,2]); ascii_art(elt)
|
|
531
|
+
-1[ ]-1 0[ ]1 -2[ ][ ]-2 0[ ]1 -1[ ]-1
|
|
532
|
+
sage: wt = elt.weight(); wt
|
|
533
|
+
-Lambda[0] + Lambda[1] - 2*Lambda[2] + 3*Lambda[3] - Lambda[4] - delta
|
|
534
|
+
sage: al = RC.weight_lattice_realization().simple_roots()
|
|
535
|
+
sage: wt == -(al[0] + al[1] + 2*al[2] + al[3] + al[4])
|
|
536
|
+
True
|
|
537
|
+
"""
|
|
538
|
+
P = self.parent().weight_lattice_realization()
|
|
539
|
+
alpha = list(P.simple_roots())
|
|
540
|
+
return -sum(sum(x) * alpha[i] for i, x in enumerate(self))
|