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,236 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.modules
|
|
3
|
+
"""
|
|
4
|
+
Lie Conformal Algebra Element
|
|
5
|
+
|
|
6
|
+
AUTHORS:
|
|
7
|
+
|
|
8
|
+
- Reimundo Heluani (2019-08-09): Initial implementation.
|
|
9
|
+
"""
|
|
10
|
+
# *****************************************************************************
|
|
11
|
+
# Copyright (C) 2019 Reimundo Heluani <heluani@potuz.net>
|
|
12
|
+
#
|
|
13
|
+
# This program is free software: you can redistribute it and/or modify
|
|
14
|
+
# it under the terms of the GNU General Public License as published by
|
|
15
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
16
|
+
# (at your option) any later version.
|
|
17
|
+
# https://www.gnu.org/licenses/
|
|
18
|
+
# ****************************************************************************
|
|
19
|
+
from sage.arith.misc import factorial
|
|
20
|
+
from sage.misc.misc_c import prod
|
|
21
|
+
from sage.misc.repr import repr_lincomb
|
|
22
|
+
from sage.misc.latex import latex
|
|
23
|
+
from sage.modules.with_basis.indexed_element import IndexedFreeModuleElement
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class LCAWithGeneratorsElement(IndexedFreeModuleElement):
|
|
27
|
+
"""
|
|
28
|
+
The element class of a Lie conformal algebra with a
|
|
29
|
+
preferred set of generators.
|
|
30
|
+
"""
|
|
31
|
+
def T(self, n=1):
|
|
32
|
+
r"""
|
|
33
|
+
The `n`-th derivative of this element.
|
|
34
|
+
|
|
35
|
+
INPUT:
|
|
36
|
+
|
|
37
|
+
- ``n`` -- nonnegative integer (default: `1`); how many
|
|
38
|
+
times to apply `T` to this element
|
|
39
|
+
|
|
40
|
+
We use the *divided powers* notation
|
|
41
|
+
`T^{(j)} = \frac{T^j}{j!}`.
|
|
42
|
+
|
|
43
|
+
EXAMPLES::
|
|
44
|
+
|
|
45
|
+
sage: Vir = lie_conformal_algebras.Virasoro(QQ)
|
|
46
|
+
sage: Vir.inject_variables()
|
|
47
|
+
Defining L, C
|
|
48
|
+
sage: L.T()
|
|
49
|
+
TL
|
|
50
|
+
sage: L.T(3)
|
|
51
|
+
6*T^(3)L
|
|
52
|
+
sage: C.T()
|
|
53
|
+
0
|
|
54
|
+
|
|
55
|
+
sage: R = lie_conformal_algebras.NeveuSchwarz(QQbar); R.inject_variables()
|
|
56
|
+
Defining L, G, C
|
|
57
|
+
sage: (L + 2*G.T() + 4*C).T(2)
|
|
58
|
+
2*T^(2)L + 12*T^(3)G
|
|
59
|
+
"""
|
|
60
|
+
from sage.rings.integer_ring import ZZ
|
|
61
|
+
if n not in ZZ or n < 0:
|
|
62
|
+
raise ValueError("n must be a nonnegative Integer")
|
|
63
|
+
if n == 0 or self.is_zero():
|
|
64
|
+
return self
|
|
65
|
+
# it's faster to sum than to use recursion
|
|
66
|
+
if self.is_monomial():
|
|
67
|
+
p = self.parent()
|
|
68
|
+
a, m = self.index()
|
|
69
|
+
coef = self._monomial_coefficients[(a, m)]
|
|
70
|
+
if (a, m + n) in p._indices:
|
|
71
|
+
return coef * prod(range(m + 1, m + n + 1))\
|
|
72
|
+
* p.monomial((a, m + n))
|
|
73
|
+
else:
|
|
74
|
+
return p.zero()
|
|
75
|
+
return sum(mon.T(n) for mon in self.terms())
|
|
76
|
+
|
|
77
|
+
def is_monomial(self):
|
|
78
|
+
"""
|
|
79
|
+
Whether this element is a monomial.
|
|
80
|
+
|
|
81
|
+
EXAMPLES::
|
|
82
|
+
|
|
83
|
+
sage: Vir = lie_conformal_algebras.Virasoro(QQ); L = Vir.0
|
|
84
|
+
sage: (L + L.T()).is_monomial()
|
|
85
|
+
False
|
|
86
|
+
sage: L.T().is_monomial()
|
|
87
|
+
True
|
|
88
|
+
"""
|
|
89
|
+
return len(self._monomial_coefficients) == 1 or self.is_zero()
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
class LCAStructureCoefficientsElement(LCAWithGeneratorsElement):
|
|
93
|
+
"""
|
|
94
|
+
An element of a Lie conformal algebra given by structure
|
|
95
|
+
coefficients.
|
|
96
|
+
"""
|
|
97
|
+
def _bracket_(self, right):
|
|
98
|
+
"""
|
|
99
|
+
The lambda bracket of these two elements.
|
|
100
|
+
|
|
101
|
+
The result is a dictionary with nonnegative integer keys.
|
|
102
|
+
The value corresponding to the entry `j` is ``self_{(j)}right``.
|
|
103
|
+
|
|
104
|
+
EXAMPLES::
|
|
105
|
+
|
|
106
|
+
sage: Vir = lie_conformal_algebras.Virasoro(QQ); L = Vir.0
|
|
107
|
+
sage: L.bracket(L)
|
|
108
|
+
{0: TL, 1: 2*L, 3: 1/2*C}
|
|
109
|
+
sage: L.T().bracket(L)
|
|
110
|
+
{1: -TL, 2: -4*L, 4: -2*C}
|
|
111
|
+
|
|
112
|
+
sage: R = lie_conformal_algebras.Affine(QQbar, 'A1', names=('e','h','f')); R
|
|
113
|
+
The affine Lie conformal algebra of type ['A', 1] over Algebraic Field
|
|
114
|
+
sage: R.inject_variables()
|
|
115
|
+
Defining e, h, f, K
|
|
116
|
+
sage: e.bracket(f)
|
|
117
|
+
{0: h, 1: K}
|
|
118
|
+
sage: h.bracket(h.T())
|
|
119
|
+
{2: 4*K}
|
|
120
|
+
"""
|
|
121
|
+
p = self.parent()
|
|
122
|
+
if self.is_monomial() and right.is_monomial():
|
|
123
|
+
if self.is_zero() or right.is_zero():
|
|
124
|
+
return {}
|
|
125
|
+
s_coeff = p._s_coeff
|
|
126
|
+
a, k = self.index()
|
|
127
|
+
coefa = self.monomial_coefficients()[(a, k)]
|
|
128
|
+
b, m = right.index()
|
|
129
|
+
coefb = right.monomial_coefficients()[(b, m)]
|
|
130
|
+
try:
|
|
131
|
+
mbr = dict(s_coeff[(a, b)])
|
|
132
|
+
except KeyError:
|
|
133
|
+
return {}
|
|
134
|
+
pole = max(mbr.keys())
|
|
135
|
+
ret = {l: coefa * coefb * (-1)**k / factorial(k) *
|
|
136
|
+
sum(factorial(l) / factorial(m + k + j - l)
|
|
137
|
+
/ factorial(l - k - j) / factorial(j)
|
|
138
|
+
* mbr[j].T(m + k + j - l)
|
|
139
|
+
for j in mbr if l - m - k <= j <= l - k)
|
|
140
|
+
for l in range(m + k + pole + 1)}
|
|
141
|
+
return {k: v for k, v in ret.items() if v}
|
|
142
|
+
|
|
143
|
+
diclist = [i._bracket_(j) for i in self.terms()
|
|
144
|
+
for j in right.terms()]
|
|
145
|
+
ret = {}
|
|
146
|
+
pz = p.zero()
|
|
147
|
+
for d in diclist:
|
|
148
|
+
for k in d:
|
|
149
|
+
ret[k] = ret.get(k, pz) + d[k]
|
|
150
|
+
return {k: v for k, v in ret.items() if v}
|
|
151
|
+
|
|
152
|
+
def _repr_(self):
|
|
153
|
+
r"""
|
|
154
|
+
A visual representation of this element.
|
|
155
|
+
|
|
156
|
+
For a free generator `L`, the element `\frac{T^{j}}{j!}L` is
|
|
157
|
+
denoted by ``T^(j)L``.
|
|
158
|
+
|
|
159
|
+
EXAMPLES::
|
|
160
|
+
|
|
161
|
+
sage: V = lie_conformal_algebras.Virasoro(QQ); V.inject_variables()
|
|
162
|
+
Defining L, C
|
|
163
|
+
sage: v = L.T(5).nproduct(L,6); v
|
|
164
|
+
-1440*L
|
|
165
|
+
sage: L.T(2) + L + C
|
|
166
|
+
2*T^(2)L + L + C
|
|
167
|
+
sage: L.T(4)
|
|
168
|
+
24*T^(4)L
|
|
169
|
+
|
|
170
|
+
sage: R = lie_conformal_algebras.Affine(QQ, 'B3')
|
|
171
|
+
sage: R.2.T()+3*R.3
|
|
172
|
+
TB[alpha[1]] + 3*B[alpha[2] + alpha[3]]
|
|
173
|
+
"""
|
|
174
|
+
if self.is_zero():
|
|
175
|
+
return "0"
|
|
176
|
+
p = self.parent()
|
|
177
|
+
if p._names:
|
|
178
|
+
terms = [("T^({}){}".format(k1, p._names[p._index_to_pos[k0]]), v) if k1 > 1
|
|
179
|
+
else ("T{}".format(p._names[p._index_to_pos[k0]]), v) if k1 == 1
|
|
180
|
+
else ("{}".format(p._names[p._index_to_pos[k0]]), v)
|
|
181
|
+
for (k0, k1), v in self.monomial_coefficients().items()]
|
|
182
|
+
else:
|
|
183
|
+
terms = [("T^({}){}".format(k1, p._repr_generator(k0)), v) if k1 > 1
|
|
184
|
+
else ("T{}".format(p._repr_generator(k0)), v) if k1 == 1
|
|
185
|
+
else ("{}".format(p._repr_generator(k0)), v)
|
|
186
|
+
for (k0, k1), v in self.monomial_coefficients().items()]
|
|
187
|
+
|
|
188
|
+
return repr_lincomb(terms, strip_one=True)
|
|
189
|
+
|
|
190
|
+
def _latex_(self):
|
|
191
|
+
r"""
|
|
192
|
+
A visual representation of this element.
|
|
193
|
+
|
|
194
|
+
For a free generator `L`, the element `\frac{T^{j}}{j!}L` is
|
|
195
|
+
denoted by ``T^(j)L``.
|
|
196
|
+
|
|
197
|
+
EXAMPLES::
|
|
198
|
+
|
|
199
|
+
sage: V = lie_conformal_algebras.Virasoro(QQ); V.inject_variables()
|
|
200
|
+
Defining L, C
|
|
201
|
+
sage: latex(L.T(2))
|
|
202
|
+
2 T^{(2)}L
|
|
203
|
+
|
|
204
|
+
sage: R = lie_conformal_algebras.Affine(QQbar, 'A1', names=('e','h','f')); R.inject_variables()
|
|
205
|
+
Defining e, h, f, K
|
|
206
|
+
sage: latex(e.bracket(f))
|
|
207
|
+
\left\{0 : h, 1 : K\right\}
|
|
208
|
+
sage: latex(e.T(3))
|
|
209
|
+
6 T^{(3)}e
|
|
210
|
+
|
|
211
|
+
sage: R = lie_conformal_algebras.Affine(QQbar, 'A1')
|
|
212
|
+
sage: latex(R.0.bracket(R.2))
|
|
213
|
+
\left\{0 : \alpha^\vee_{1}, 1 : \text{\texttt{K}}\right\}
|
|
214
|
+
|
|
215
|
+
sage: R = lie_conformal_algebras.Affine(QQ, 'A1'); latex(R.0.T(3))
|
|
216
|
+
6 T^{(3)}\alpha_{1}
|
|
217
|
+
"""
|
|
218
|
+
if self.is_zero():
|
|
219
|
+
return "0"
|
|
220
|
+
p = self.parent()
|
|
221
|
+
try:
|
|
222
|
+
names = p.latex_variable_names()
|
|
223
|
+
except ValueError:
|
|
224
|
+
names = None
|
|
225
|
+
if names:
|
|
226
|
+
terms = [("T^{{({})}}{}".format(k1, names[p._index_to_pos[k0]]), v) if k1 > 1
|
|
227
|
+
else ("T{}".format(names[p._index_to_pos[k0]]), v) if k1 == 1
|
|
228
|
+
else ("{}".format(names[p._index_to_pos[k0]]), v)
|
|
229
|
+
for (k0, k1), v in self.monomial_coefficients().items()]
|
|
230
|
+
else:
|
|
231
|
+
terms = [("T^{{({})}}{}".format(k1, latex(k0)), v) if k1 > 1
|
|
232
|
+
else ("T{}".format(latex(k0)), v) if k1 == 1
|
|
233
|
+
else ("{}".format(latex(k0)), v)
|
|
234
|
+
for (k0, k1), v in self.monomial_coefficients().items()]
|
|
235
|
+
|
|
236
|
+
return repr_lincomb(terms, is_latex=True, strip_one=True)
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.modules
|
|
3
|
+
"""
|
|
4
|
+
Lie Conformal Algebras With Basis
|
|
5
|
+
|
|
6
|
+
AUTHORS:
|
|
7
|
+
|
|
8
|
+
- Reimundo Heluani (2019-08-09): Initial implementation
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
#******************************************************************************
|
|
12
|
+
# Copyright (C) 2019 Reimundo Heluani <heluani@potuz.net>
|
|
13
|
+
#
|
|
14
|
+
# This program is free software: you can redistribute it and/or modify
|
|
15
|
+
# it under the terms of the GNU General Public License as published by
|
|
16
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
17
|
+
# (at your option) any later version.
|
|
18
|
+
# http://www.gnu.org/licenses/
|
|
19
|
+
#*****************************************************************************
|
|
20
|
+
|
|
21
|
+
from sage.categories.lie_conformal_algebras import LieConformalAlgebras
|
|
22
|
+
from sage.combinat.free_module import CombinatorialFreeModule
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class LieConformalAlgebraWithBasis(CombinatorialFreeModule):
|
|
26
|
+
"""
|
|
27
|
+
Abstract base class for a Lie conformal algebra with a
|
|
28
|
+
preferred basis.
|
|
29
|
+
|
|
30
|
+
This class provides no functionality, it simply passes the
|
|
31
|
+
arguments to :class:`CombinatorialFreeModule`.
|
|
32
|
+
|
|
33
|
+
EXAMPLES::
|
|
34
|
+
|
|
35
|
+
sage: R = lie_conformal_algebras.Virasoro(QQbar);R
|
|
36
|
+
The Virasoro Lie conformal algebra over Algebraic Field
|
|
37
|
+
|
|
38
|
+
TESTS::
|
|
39
|
+
|
|
40
|
+
sage: R = lie_conformal_algebras.Virasoro(QQ)
|
|
41
|
+
sage: R.0
|
|
42
|
+
L
|
|
43
|
+
sage: R._repr_generator(R.0)
|
|
44
|
+
'L'
|
|
45
|
+
sage: R = lie_conformal_algebras.Affine(QQ, 'A1')
|
|
46
|
+
sage: R.0
|
|
47
|
+
B[alpha[1]]
|
|
48
|
+
sage: R._repr_generator(R.0)
|
|
49
|
+
'B[alpha[1]]'
|
|
50
|
+
sage: R = lie_conformal_algebras.Affine(QQ, 'A1', names = ('e', 'h','f'))
|
|
51
|
+
sage: R.0
|
|
52
|
+
e
|
|
53
|
+
sage: R._repr_generator(R.0)
|
|
54
|
+
'e'
|
|
55
|
+
"""
|
|
56
|
+
def __init__(self, R, basis_keys=None, element_class=None, category=None,
|
|
57
|
+
prefix=None, **kwds):
|
|
58
|
+
"""
|
|
59
|
+
Initialize ``self``.
|
|
60
|
+
|
|
61
|
+
TESTS::
|
|
62
|
+
|
|
63
|
+
sage: V = lie_conformal_algebras.Affine(QQ,'A1')
|
|
64
|
+
sage: TestSuite(V).run()
|
|
65
|
+
"""
|
|
66
|
+
if prefix is None:
|
|
67
|
+
prefix = ''
|
|
68
|
+
kwds['bracket'] = ''
|
|
69
|
+
kwds['string_quotes'] = False
|
|
70
|
+
|
|
71
|
+
default_category = LieConformalAlgebras(R).WithBasis()
|
|
72
|
+
try:
|
|
73
|
+
category = default_category.or_subcategory(category)
|
|
74
|
+
except ValueError:
|
|
75
|
+
category = default_category.Super().or_subcategory(category)
|
|
76
|
+
|
|
77
|
+
super().__init__(R, basis_keys=basis_keys, element_class=element_class,
|
|
78
|
+
category=category, prefix=prefix, names=None, **kwds)
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.modules
|
|
3
|
+
"""
|
|
4
|
+
Lie Conformal Algebras With Structure Coefficients
|
|
5
|
+
|
|
6
|
+
AUTHORS:
|
|
7
|
+
|
|
8
|
+
- Reimundo Heluani (2019-08-09): Initial implementation.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
# *****************************************************************************
|
|
12
|
+
# Copyright (C) 2019 Reimundo Heluani <heluani@potuz.net>
|
|
13
|
+
#
|
|
14
|
+
# This program is free software: you can redistribute it and/or modify
|
|
15
|
+
# it under the terms of the GNU General Public License as published by
|
|
16
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
17
|
+
# (at your option) any later version.
|
|
18
|
+
# https://www.gnu.org/licenses/
|
|
19
|
+
# ****************************************************************************
|
|
20
|
+
|
|
21
|
+
from sage.arith.misc import binomial
|
|
22
|
+
from sage.sets.family import Family
|
|
23
|
+
from .lie_conformal_algebra_element import LCAStructureCoefficientsElement
|
|
24
|
+
from sage.categories.lie_conformal_algebras import LieConformalAlgebras
|
|
25
|
+
from .finitely_freely_generated_lca import FinitelyFreelyGeneratedLCA
|
|
26
|
+
from sage.sets.disjoint_union_enumerated_sets import DisjointUnionEnumeratedSets
|
|
27
|
+
from sage.structure.indexed_generators import (IndexedGenerators,
|
|
28
|
+
standardize_names_index_set)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class LieConformalAlgebraWithStructureCoefficients(
|
|
32
|
+
FinitelyFreelyGeneratedLCA):
|
|
33
|
+
r"""
|
|
34
|
+
A Lie conformal algebra with a set of specified structure
|
|
35
|
+
coefficients.
|
|
36
|
+
|
|
37
|
+
INPUT:
|
|
38
|
+
|
|
39
|
+
- ``R`` -- a ring (default: ``None``); the base ring of this Lie
|
|
40
|
+
conformal algebra. Behaviour is undefined if it is not a field
|
|
41
|
+
of characteristic zero.
|
|
42
|
+
|
|
43
|
+
- ``s_coeff`` -- dictionary (default: ``None``);
|
|
44
|
+
a dictionary containing the `\lambda` brackets of the
|
|
45
|
+
generators of this Lie conformal algebra. The family encodes a
|
|
46
|
+
dictionary whose keys
|
|
47
|
+
are pairs of either names or indices of the generators
|
|
48
|
+
and the values are themselves dictionaries. For a pair of
|
|
49
|
+
generators `a` and `b`, the value of ``s_coeff[('a','b')]`` is
|
|
50
|
+
a dictionary whose keys are positive integer numbers and the
|
|
51
|
+
corresponding value for the key `j` is a dictionary itself
|
|
52
|
+
representing the `j`-th product `a_{(j)}b`.
|
|
53
|
+
Thus, for a positive integer number `j`, the value of
|
|
54
|
+
``s_coeff[('a','b')][j]`` is a dictionary whose entries are
|
|
55
|
+
pairs ``('c',n)`` where ``'c'`` is the name of a generator
|
|
56
|
+
and `n` is a positive number. The value for this key is the
|
|
57
|
+
coefficient of `\frac{T^{n}}{n!} c` in `a_{(j)}b`. For example
|
|
58
|
+
the ``s_coeff`` for the *Virasoro* Lie conformal algebra is::
|
|
59
|
+
|
|
60
|
+
{('L','L'):{0:{('L',1):1}, 1:{('L',0):2}, 3:{('C',0):1/2}}}
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
Do not include central elements in this dictionary. Also, if
|
|
64
|
+
the key ``('a','b')`` is present, there is no need to include
|
|
65
|
+
``('b','a')`` as it is defined by skew-symmetry.
|
|
66
|
+
Any missing pair (besides the ones
|
|
67
|
+
defined by skew-symmetry) is assumed to have vanishing
|
|
68
|
+
`\lambda`-bracket.
|
|
69
|
+
|
|
70
|
+
- ``names`` -- tuple of strings (default: ``None``); the list of
|
|
71
|
+
names for generators of this Lie conformal algebra. Do not
|
|
72
|
+
include central elements in this list.
|
|
73
|
+
|
|
74
|
+
- ``central_elements`` -- tuple of strings (default: ``None``);
|
|
75
|
+
a list of names for central elements of this Lie conformal algebra
|
|
76
|
+
|
|
77
|
+
- ``index_set`` -- enumerated set (default: ``None``);
|
|
78
|
+
an indexing set for the generators of this Lie
|
|
79
|
+
conformal algebra. Do not include central elements in this
|
|
80
|
+
list.
|
|
81
|
+
|
|
82
|
+
- ``parity`` -- tuple of `0` or `1` (default: tuple of `0`);
|
|
83
|
+
a tuple specifying the parity of each non-central generator
|
|
84
|
+
|
|
85
|
+
EXAMPLES:
|
|
86
|
+
|
|
87
|
+
- We construct the `\beta-\gamma` system by directly giving the
|
|
88
|
+
`\lambda`-brackets of the generators::
|
|
89
|
+
|
|
90
|
+
sage: betagamma_dict = {('b','a'):{0:{('K',0):1}}}
|
|
91
|
+
sage: V = LieConformalAlgebra(QQ, betagamma_dict, names=('a','b'),
|
|
92
|
+
....: weights=(1,0), central_elements=('K',))
|
|
93
|
+
sage: V.category()
|
|
94
|
+
Category of H-graded finitely generated Lie conformal algebras
|
|
95
|
+
with basis over Rational Field
|
|
96
|
+
sage: V.inject_variables()
|
|
97
|
+
Defining a, b, K
|
|
98
|
+
sage: a.bracket(b)
|
|
99
|
+
{0: -K}
|
|
100
|
+
|
|
101
|
+
- We construct the centerless Virasoro Lie conformal algebra::
|
|
102
|
+
|
|
103
|
+
sage: virdict = {('L','L'):{0:{('L',1):1}, 1:{('L',0): 2}}}
|
|
104
|
+
sage: R = LieConformalAlgebra(QQbar, virdict, names='L')
|
|
105
|
+
sage: R.inject_variables()
|
|
106
|
+
Defining L
|
|
107
|
+
sage: L.bracket(L)
|
|
108
|
+
{0: TL, 1: 2*L}
|
|
109
|
+
|
|
110
|
+
- The construction checks that skew-symmetry is violated::
|
|
111
|
+
|
|
112
|
+
sage: wrongdict = {('L','L'):{0:{('L',1):2}, 1:{('L',0): 2}}}
|
|
113
|
+
sage: LieConformalAlgebra(QQbar, wrongdict, names='L')
|
|
114
|
+
Traceback (most recent call last):
|
|
115
|
+
...
|
|
116
|
+
ValueError: two distinct values given for one and the same bracket. Skew-symmetry is not satisfied?
|
|
117
|
+
"""
|
|
118
|
+
@staticmethod
|
|
119
|
+
def _standardize_s_coeff(s_coeff, index_set, ce, parity=None):
|
|
120
|
+
"""
|
|
121
|
+
Convert an input dictionary to structure constants of this
|
|
122
|
+
Lie conformal algebra.
|
|
123
|
+
|
|
124
|
+
INPUT:
|
|
125
|
+
|
|
126
|
+
- ``s_coeff`` -- dictionary as in
|
|
127
|
+
:class:`~sage.algebras.lie_conformal_algebras.lie_conformal_algebra_with_structure_coefficients.LieConformalAlgebraWithStructureCoefficients`
|
|
128
|
+
- ``index_set`` -- a finite enumerated set indexing the
|
|
129
|
+
generators (not counting the central elements).
|
|
130
|
+
- ``ce`` -- tuple of strings; a list of names for the central
|
|
131
|
+
generators of this Lie conformal algebra
|
|
132
|
+
- ``parity`` -- tuple of `0` or `1` (default: tuple of `0`);
|
|
133
|
+
this tuple specifies the parity of each non-central generator
|
|
134
|
+
|
|
135
|
+
OUTPUT:
|
|
136
|
+
|
|
137
|
+
A finite Family representing ``s_coeff`` in the input.
|
|
138
|
+
It contains superfluous information that can be obtained by
|
|
139
|
+
skew-symmetry but that improves speed in computing OPE for
|
|
140
|
+
vertex algebras.
|
|
141
|
+
|
|
142
|
+
EXAMPLES::
|
|
143
|
+
|
|
144
|
+
sage: virdict = {('L','L'):{0:{('L',1):1}, 1:{('L',0): 2},3:{('C', 0):1/2}}}
|
|
145
|
+
sage: Vir = lie_conformal_algebras.Virasoro(QQ)
|
|
146
|
+
sage: Vir._standardize_s_coeff(virdict, Family(('L',)), ('C',))
|
|
147
|
+
Finite family {('L', 'L'): ((0, ((('L', 1), 1),)), (1, ((('L', 0), 2),)), (3, ((('C', 0), 1/2),)))}
|
|
148
|
+
"""
|
|
149
|
+
if parity is None:
|
|
150
|
+
parity = (0,) * index_set.cardinality()
|
|
151
|
+
index_to_parity = dict(zip(index_set, parity))
|
|
152
|
+
sc = {}
|
|
153
|
+
# mypair has a pair of generators
|
|
154
|
+
for mypair, v in s_coeff.items():
|
|
155
|
+
# e.g. v = { 0: { (L,2):3, (G,3):1}, 1:{(L,1),2} }
|
|
156
|
+
key = tuple(mypair)
|
|
157
|
+
vals = {}
|
|
158
|
+
for l in v:
|
|
159
|
+
lth_product = {k: y for k, y in v[l].items() if y}
|
|
160
|
+
if lth_product:
|
|
161
|
+
vals[l] = lth_product
|
|
162
|
+
|
|
163
|
+
myvals = tuple((k, tuple(v.items())) for k, v in vals.items() if v)
|
|
164
|
+
|
|
165
|
+
if key in sc and sorted(sc[key]) != sorted(myvals):
|
|
166
|
+
raise ValueError("two distinct values given for one "
|
|
167
|
+
"and the same bracket, skew-symmetry"
|
|
168
|
+
"is not satisfied?")
|
|
169
|
+
if myvals:
|
|
170
|
+
sc[key] = myvals
|
|
171
|
+
|
|
172
|
+
# We now add the skew-symmetric part to optimize
|
|
173
|
+
# brackets computations later
|
|
174
|
+
key = (mypair[1], mypair[0])
|
|
175
|
+
if index_to_parity[mypair[0]]*index_to_parity[mypair[1]]:
|
|
176
|
+
parsgn = -1
|
|
177
|
+
else:
|
|
178
|
+
parsgn = 1
|
|
179
|
+
maxpole = max(v)
|
|
180
|
+
vals = {}
|
|
181
|
+
for k in range(maxpole+1):
|
|
182
|
+
kth_product = {}
|
|
183
|
+
for j in range(maxpole+1-k):
|
|
184
|
+
if k+j in v.keys():
|
|
185
|
+
for i in v[k+j]:
|
|
186
|
+
if (i[0] not in ce) or (
|
|
187
|
+
i[0] in ce and i[1] + j == 0):
|
|
188
|
+
kth_product[(i[0], i[1] + j)] = \
|
|
189
|
+
kth_product.get((i[0], i[1] + j), 0)
|
|
190
|
+
kth_product[(i[0], i[1] + j)] += parsgn *\
|
|
191
|
+
v[k+j][i]*(-1)**(k+j+1)*binomial(i[1]+j, j)
|
|
192
|
+
kth_product = {k: v for k, v in kth_product.items() if v}
|
|
193
|
+
if kth_product:
|
|
194
|
+
vals[k] = kth_product
|
|
195
|
+
|
|
196
|
+
myvals = tuple((k, tuple(v.items())) for k, v in vals.items() if v)
|
|
197
|
+
|
|
198
|
+
if key in sc and sorted(sc[key]) != sorted(myvals):
|
|
199
|
+
raise ValueError("two distinct values given for one "
|
|
200
|
+
"and the same bracket. "
|
|
201
|
+
"Skew-symmetry is not satisfied?")
|
|
202
|
+
if myvals:
|
|
203
|
+
sc[key] = myvals
|
|
204
|
+
return Family(sc)
|
|
205
|
+
|
|
206
|
+
def __init__(self, R, s_coeff, index_set=None, central_elements=None,
|
|
207
|
+
category=None, element_class=None, prefix=None, names=None,
|
|
208
|
+
latex_names=None, parity=None, **kwds):
|
|
209
|
+
"""
|
|
210
|
+
Initialize ``self``.
|
|
211
|
+
|
|
212
|
+
TESTS::
|
|
213
|
+
|
|
214
|
+
sage: V = lie_conformal_algebras.NeveuSchwarz(QQ)
|
|
215
|
+
sage: TestSuite(V).run()
|
|
216
|
+
"""
|
|
217
|
+
names, index_set = standardize_names_index_set(names, index_set)
|
|
218
|
+
if central_elements is None:
|
|
219
|
+
central_elements = ()
|
|
220
|
+
|
|
221
|
+
if names is not None and names != tuple(index_set):
|
|
222
|
+
names2 = names + tuple(central_elements)
|
|
223
|
+
index_set2 = DisjointUnionEnumeratedSets((index_set,
|
|
224
|
+
Family(tuple(central_elements))))
|
|
225
|
+
d = {x: index_set2[i] for i, x in enumerate(names2)}
|
|
226
|
+
try:
|
|
227
|
+
# If we are given a dictionary with names as keys,
|
|
228
|
+
# convert to index_set as keys
|
|
229
|
+
s_coeff = {(d[k[0]], d[k[1]]):
|
|
230
|
+
{a: {(d[x[1]], x[2]): sck[a][x] for x in sck[a]}
|
|
231
|
+
for a in s_coeff[k]}
|
|
232
|
+
for k, sck in s_coeff.items()}
|
|
233
|
+
|
|
234
|
+
except KeyError:
|
|
235
|
+
# We assume the dictionary was given with keys in the
|
|
236
|
+
# index_set
|
|
237
|
+
pass
|
|
238
|
+
|
|
239
|
+
issuper = kwds.pop('super', False)
|
|
240
|
+
if parity is None:
|
|
241
|
+
parity = (0,) * index_set.cardinality()
|
|
242
|
+
else:
|
|
243
|
+
issuper = True
|
|
244
|
+
|
|
245
|
+
try:
|
|
246
|
+
assert len(parity) == index_set.cardinality()
|
|
247
|
+
except AssertionError:
|
|
248
|
+
raise ValueError("parity should have the same length as the "
|
|
249
|
+
f"number of generators, got {parity}")
|
|
250
|
+
|
|
251
|
+
s_coeff = LieConformalAlgebraWithStructureCoefficients\
|
|
252
|
+
._standardize_s_coeff(s_coeff, index_set, central_elements,
|
|
253
|
+
parity)
|
|
254
|
+
|
|
255
|
+
if names is not None and central_elements is not None:
|
|
256
|
+
names += tuple(central_elements)
|
|
257
|
+
|
|
258
|
+
self._index_to_pos = {k: i for i, k in enumerate(index_set)}
|
|
259
|
+
# Add central parameters to index_to_pos so that we can
|
|
260
|
+
# represent names
|
|
261
|
+
if central_elements is not None:
|
|
262
|
+
for i, ce in enumerate(central_elements):
|
|
263
|
+
self._index_to_pos[ce] = len(index_set) + i
|
|
264
|
+
|
|
265
|
+
default_category = LieConformalAlgebras(R).WithBasis().FinitelyGenerated()
|
|
266
|
+
if issuper:
|
|
267
|
+
category = default_category.Super().or_subcategory(category)
|
|
268
|
+
else:
|
|
269
|
+
category = default_category.or_subcategory(category)
|
|
270
|
+
|
|
271
|
+
if element_class is None:
|
|
272
|
+
element_class = LCAStructureCoefficientsElement
|
|
273
|
+
|
|
274
|
+
FinitelyFreelyGeneratedLCA.__init__(
|
|
275
|
+
self, R, index_set=index_set, central_elements=central_elements,
|
|
276
|
+
category=category, element_class=element_class,
|
|
277
|
+
prefix=prefix, names=names, latex_names=latex_names, **kwds)
|
|
278
|
+
|
|
279
|
+
s_coeff = dict(s_coeff)
|
|
280
|
+
self._s_coeff = Family({k:
|
|
281
|
+
tuple((j, sum(c * self.monomial(i)
|
|
282
|
+
for i, c in v)) for j, v in sck)
|
|
283
|
+
for k, sck in s_coeff.items()})
|
|
284
|
+
self._parity = dict(zip(self.gens(),
|
|
285
|
+
parity + (0,) * len(central_elements)))
|
|
286
|
+
|
|
287
|
+
def structure_coefficients(self):
|
|
288
|
+
"""
|
|
289
|
+
The structure coefficients of this Lie conformal algebra.
|
|
290
|
+
|
|
291
|
+
EXAMPLES::
|
|
292
|
+
|
|
293
|
+
sage: Vir = lie_conformal_algebras.Virasoro(AA)
|
|
294
|
+
sage: Vir.structure_coefficients()
|
|
295
|
+
Finite family {('L', 'L'): ((0, TL), (1, 2*L), (3, 1/2*C))}
|
|
296
|
+
|
|
297
|
+
sage: lie_conformal_algebras.NeveuSchwarz(QQ).structure_coefficients()
|
|
298
|
+
Finite family {('G', 'G'): ((0, 2*L), (2, 2/3*C)),
|
|
299
|
+
('G', 'L'): ((0, 1/2*TG), (1, 3/2*G)),
|
|
300
|
+
('L', 'G'): ((0, TG), (1, 3/2*G)),
|
|
301
|
+
('L', 'L'): ((0, TL), (1, 2*L), (3, 1/2*C))}
|
|
302
|
+
"""
|
|
303
|
+
return self._s_coeff
|
|
304
|
+
|
|
305
|
+
def _repr_generator(self, x) -> str:
|
|
306
|
+
"""
|
|
307
|
+
String representation of the generator ``x``.
|
|
308
|
+
|
|
309
|
+
INPUT:
|
|
310
|
+
|
|
311
|
+
- ``x`` -- an index parametrizing a generator or a generator of
|
|
312
|
+
this Lie conformal algebra
|
|
313
|
+
|
|
314
|
+
EXAMPLES::
|
|
315
|
+
|
|
316
|
+
sage: Vir = lie_conformal_algebras.Virasoro(QQbar)
|
|
317
|
+
sage: Vir._repr_generator(Vir.0)
|
|
318
|
+
'L'
|
|
319
|
+
sage: R = lie_conformal_algebras.Affine(QQ, 'A1')
|
|
320
|
+
sage: R._repr_generator(R.0)
|
|
321
|
+
'B[alpha[1]]'
|
|
322
|
+
sage: R = lie_conformal_algebras.Affine(QQ, 'A1', names=('e','h','f'))
|
|
323
|
+
sage: R._repr_generator(R.0)
|
|
324
|
+
'e'
|
|
325
|
+
"""
|
|
326
|
+
if x in self:
|
|
327
|
+
return repr(x)
|
|
328
|
+
return IndexedGenerators._repr_generator(self, x)
|