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,48 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
r"""
|
|
3
|
+
Combinatorial species
|
|
4
|
+
|
|
5
|
+
Introductory material
|
|
6
|
+
---------------------
|
|
7
|
+
|
|
8
|
+
- :ref:`section-examples-catalan`
|
|
9
|
+
- :ref:`section-generic-species`
|
|
10
|
+
|
|
11
|
+
Basic Species
|
|
12
|
+
-------------
|
|
13
|
+
|
|
14
|
+
- :ref:`sage.combinat.species.species`
|
|
15
|
+
- :ref:`sage.combinat.species.empty_species`
|
|
16
|
+
- :ref:`sage.combinat.species.recursive_species`
|
|
17
|
+
- :ref:`sage.combinat.species.characteristic_species`
|
|
18
|
+
- :ref:`sage.combinat.species.cycle_species`
|
|
19
|
+
- :ref:`sage.combinat.species.partition_species`
|
|
20
|
+
- :ref:`sage.combinat.species.permutation_species`
|
|
21
|
+
- :ref:`sage.combinat.species.linear_order_species`
|
|
22
|
+
- :ref:`sage.combinat.species.set_species`
|
|
23
|
+
- :ref:`sage.combinat.species.subset_species`
|
|
24
|
+
- :ref:`sage.combinat.species.library`
|
|
25
|
+
|
|
26
|
+
Operations on Species
|
|
27
|
+
---------------------
|
|
28
|
+
|
|
29
|
+
- :ref:`sage.combinat.species.sum_species`
|
|
30
|
+
- :ref:`sage.combinat.species.product_species`
|
|
31
|
+
- :ref:`sage.combinat.species.composition_species`
|
|
32
|
+
- :ref:`sage.combinat.species.functorial_composition_species`
|
|
33
|
+
|
|
34
|
+
Miscellaneous
|
|
35
|
+
-------------
|
|
36
|
+
|
|
37
|
+
- :ref:`sage.combinat.species.structure`
|
|
38
|
+
- :ref:`sage.combinat.species.misc`
|
|
39
|
+
"""
|
|
40
|
+
# install the docstring of this module to the containing package
|
|
41
|
+
from sage.misc.namespace_package import install_doc
|
|
42
|
+
install_doc(__package__, __doc__)
|
|
43
|
+
|
|
44
|
+
from sage.misc.lazy_import import lazy_import
|
|
45
|
+
lazy_import("sage.combinat.species.recursive_species", "CombinatorialSpecies")
|
|
46
|
+
lazy_import("sage.combinat.species", "library", as_='species')
|
|
47
|
+
del lazy_import
|
|
48
|
+
del install_doc
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
"""
|
|
3
|
+
Characteristic species
|
|
4
|
+
"""
|
|
5
|
+
# ****************************************************************************
|
|
6
|
+
# Copyright (C) 2008 Mike Hansen <mhansen@gmail.com>,
|
|
7
|
+
#
|
|
8
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
9
|
+
#
|
|
10
|
+
# This code is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
13
|
+
# General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# The full text of the GPL is available at:
|
|
16
|
+
#
|
|
17
|
+
# http://www.gnu.org/licenses/
|
|
18
|
+
# ****************************************************************************
|
|
19
|
+
|
|
20
|
+
from .species import GenericCombinatorialSpecies
|
|
21
|
+
from sage.arith.misc import factorial
|
|
22
|
+
from .structure import GenericSpeciesStructure
|
|
23
|
+
from .set_species import SetSpecies
|
|
24
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class CharacteristicSpeciesStructure(GenericSpeciesStructure):
|
|
28
|
+
def __repr__(self):
|
|
29
|
+
"""
|
|
30
|
+
EXAMPLES::
|
|
31
|
+
|
|
32
|
+
sage: F = species.CharacteristicSpecies(3)
|
|
33
|
+
sage: a = F.structures([1, 2, 3]).random_element(); a
|
|
34
|
+
{1, 2, 3}
|
|
35
|
+
sage: F = species.SingletonSpecies()
|
|
36
|
+
sage: F.structures([1]).list()
|
|
37
|
+
[1]
|
|
38
|
+
sage: F = species.EmptySetSpecies()
|
|
39
|
+
sage: F.structures([]).list()
|
|
40
|
+
[{}]
|
|
41
|
+
"""
|
|
42
|
+
s = GenericSpeciesStructure.__repr__(self)
|
|
43
|
+
if self.parent()._n == 1:
|
|
44
|
+
return s[1:-1]
|
|
45
|
+
else:
|
|
46
|
+
return "{" + s[1:-1] + "}"
|
|
47
|
+
|
|
48
|
+
def canonical_label(self):
|
|
49
|
+
"""
|
|
50
|
+
EXAMPLES::
|
|
51
|
+
|
|
52
|
+
sage: F = species.CharacteristicSpecies(3)
|
|
53
|
+
sage: a = F.structures(["a", "b", "c"]).random_element(); a
|
|
54
|
+
{'a', 'b', 'c'}
|
|
55
|
+
sage: a.canonical_label()
|
|
56
|
+
{'a', 'b', 'c'}
|
|
57
|
+
"""
|
|
58
|
+
P = self.parent()
|
|
59
|
+
rng = list(range(1, P._n + 1))
|
|
60
|
+
return CharacteristicSpeciesStructure(P, self._labels, rng)
|
|
61
|
+
|
|
62
|
+
def transport(self, perm):
|
|
63
|
+
"""
|
|
64
|
+
Return the transport of this structure along the permutation ``perm``.
|
|
65
|
+
|
|
66
|
+
EXAMPLES::
|
|
67
|
+
|
|
68
|
+
sage: F = species.CharacteristicSpecies(3)
|
|
69
|
+
sage: a = F.structures(["a", "b", "c"]).random_element(); a
|
|
70
|
+
{'a', 'b', 'c'}
|
|
71
|
+
sage: p = PermutationGroupElement((1,2)) # needs sage.groups
|
|
72
|
+
sage: a.transport(p) # needs sage.groups
|
|
73
|
+
{'a', 'b', 'c'}
|
|
74
|
+
"""
|
|
75
|
+
return self
|
|
76
|
+
|
|
77
|
+
def automorphism_group(self):
|
|
78
|
+
"""
|
|
79
|
+
Return the group of permutations whose action on this structure
|
|
80
|
+
leave it fixed. For the characteristic species, there is only one
|
|
81
|
+
structure, so every permutation is in its automorphism group.
|
|
82
|
+
|
|
83
|
+
EXAMPLES::
|
|
84
|
+
|
|
85
|
+
sage: F = species.CharacteristicSpecies(3)
|
|
86
|
+
sage: a = F.structures(["a", "b", "c"]).random_element(); a
|
|
87
|
+
{'a', 'b', 'c'}
|
|
88
|
+
sage: a.automorphism_group() # needs sage.groups
|
|
89
|
+
Symmetric group of order 3! as a permutation group
|
|
90
|
+
"""
|
|
91
|
+
from sage.groups.perm_gps.permgroup_named import SymmetricGroup
|
|
92
|
+
return SymmetricGroup(len(self._labels))
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
class CharacteristicSpecies(GenericCombinatorialSpecies, UniqueRepresentation):
|
|
96
|
+
def __init__(self, n, min=None, max=None, weight=None):
|
|
97
|
+
"""
|
|
98
|
+
Return the characteristic species of order `n`.
|
|
99
|
+
|
|
100
|
+
This species has exactly one structure on a set of size `n`
|
|
101
|
+
and no structures on sets of any other size.
|
|
102
|
+
|
|
103
|
+
EXAMPLES::
|
|
104
|
+
|
|
105
|
+
sage: X = species.CharacteristicSpecies(1)
|
|
106
|
+
sage: X.structures([1]).list()
|
|
107
|
+
[1]
|
|
108
|
+
sage: X.structures([1,2]).list()
|
|
109
|
+
[]
|
|
110
|
+
sage: X.generating_series()[0:4]
|
|
111
|
+
[0, 1, 0, 0]
|
|
112
|
+
sage: X.isotype_generating_series()[0:4]
|
|
113
|
+
[0, 1, 0, 0]
|
|
114
|
+
sage: X.cycle_index_series()[0:4] # needs sage.modules
|
|
115
|
+
[0, p[1], 0, 0]
|
|
116
|
+
|
|
117
|
+
sage: F = species.CharacteristicSpecies(3)
|
|
118
|
+
sage: c = F.generating_series()[0:4]
|
|
119
|
+
sage: F._check()
|
|
120
|
+
True
|
|
121
|
+
sage: F == loads(dumps(F))
|
|
122
|
+
True
|
|
123
|
+
|
|
124
|
+
TESTS::
|
|
125
|
+
|
|
126
|
+
sage: S1 = species.CharacteristicSpecies(1)
|
|
127
|
+
sage: S2 = species.CharacteristicSpecies(1)
|
|
128
|
+
sage: S3 = species.CharacteristicSpecies(2)
|
|
129
|
+
sage: S4 = species.CharacteristicSpecies(2, weight=2)
|
|
130
|
+
sage: S1 is S2
|
|
131
|
+
True
|
|
132
|
+
sage: S1 == S3
|
|
133
|
+
False
|
|
134
|
+
"""
|
|
135
|
+
self._n = n
|
|
136
|
+
self._name = "Characteristic species of order %s" % n
|
|
137
|
+
self._state_info = [n]
|
|
138
|
+
GenericCombinatorialSpecies.__init__(self, min=min, max=max, weight=weight)
|
|
139
|
+
|
|
140
|
+
_default_structure_class = CharacteristicSpeciesStructure
|
|
141
|
+
|
|
142
|
+
def _structures(self, structure_class, labels):
|
|
143
|
+
"""
|
|
144
|
+
EXAMPLES::
|
|
145
|
+
|
|
146
|
+
sage: F = species.CharacteristicSpecies(2)
|
|
147
|
+
sage: l = [1, 2, 3]
|
|
148
|
+
sage: F.structures(l).list()
|
|
149
|
+
[]
|
|
150
|
+
sage: F = species.CharacteristicSpecies(3)
|
|
151
|
+
sage: F.structures(l).list()
|
|
152
|
+
[{1, 2, 3}]
|
|
153
|
+
"""
|
|
154
|
+
if len(labels) == self._n:
|
|
155
|
+
yield structure_class(self, labels, range(1,self._n+1))
|
|
156
|
+
|
|
157
|
+
_isotypes = _structures
|
|
158
|
+
|
|
159
|
+
def _gs_term(self, base_ring):
|
|
160
|
+
"""
|
|
161
|
+
EXAMPLES::
|
|
162
|
+
|
|
163
|
+
sage: F = species.CharacteristicSpecies(2)
|
|
164
|
+
sage: F.generating_series()[0:5]
|
|
165
|
+
[0, 0, 1/2, 0, 0]
|
|
166
|
+
sage: F.generating_series().count(2)
|
|
167
|
+
1
|
|
168
|
+
"""
|
|
169
|
+
return base_ring(self._weight) / base_ring(factorial(self._n))
|
|
170
|
+
|
|
171
|
+
def _order(self):
|
|
172
|
+
"""
|
|
173
|
+
Return the order of the generating series.
|
|
174
|
+
|
|
175
|
+
EXAMPLES::
|
|
176
|
+
|
|
177
|
+
sage: F = species.CharacteristicSpecies(2)
|
|
178
|
+
sage: F._order()
|
|
179
|
+
2
|
|
180
|
+
"""
|
|
181
|
+
return self._n
|
|
182
|
+
|
|
183
|
+
def _itgs_term(self, base_ring):
|
|
184
|
+
"""
|
|
185
|
+
EXAMPLES::
|
|
186
|
+
|
|
187
|
+
sage: F = species.CharacteristicSpecies(2)
|
|
188
|
+
sage: F.isotype_generating_series()[0:5]
|
|
189
|
+
[0, 0, 1, 0, 0]
|
|
190
|
+
|
|
191
|
+
Here we test out weighting each structure by q.
|
|
192
|
+
|
|
193
|
+
::
|
|
194
|
+
|
|
195
|
+
sage: R.<q> = ZZ[]
|
|
196
|
+
sage: Fq = species.CharacteristicSpecies(2, weight=q)
|
|
197
|
+
sage: Fq.isotype_generating_series()[0:5]
|
|
198
|
+
[0, 0, q, 0, 0]
|
|
199
|
+
"""
|
|
200
|
+
return base_ring(self._weight)
|
|
201
|
+
|
|
202
|
+
def _cis_term(self, base_ring):
|
|
203
|
+
"""
|
|
204
|
+
EXAMPLES::
|
|
205
|
+
|
|
206
|
+
sage: F = species.CharacteristicSpecies(2)
|
|
207
|
+
sage: g = F.cycle_index_series() # needs sage.modules
|
|
208
|
+
sage: g[0:5] # needs sage.modules
|
|
209
|
+
[0, 0, 1/2*p[1, 1] + 1/2*p[2], 0, 0]
|
|
210
|
+
"""
|
|
211
|
+
cis = SetSpecies(weight=self._weight).cycle_index_series(base_ring)
|
|
212
|
+
return cis.coefficient(self._n)
|
|
213
|
+
|
|
214
|
+
def _equation(self, var_mapping):
|
|
215
|
+
"""
|
|
216
|
+
Return the right hand side of an algebraic equation satisfied by
|
|
217
|
+
this species. This is a utility function called by the
|
|
218
|
+
algebraic_equation_system method.
|
|
219
|
+
|
|
220
|
+
EXAMPLES::
|
|
221
|
+
|
|
222
|
+
sage: C = species.CharacteristicSpecies(2)
|
|
223
|
+
sage: Qz = QQ['z']
|
|
224
|
+
sage: R.<node0> = Qz[]
|
|
225
|
+
sage: var_mapping = {'z':Qz.gen(), 'node0':R.gen()}
|
|
226
|
+
sage: C._equation(var_mapping)
|
|
227
|
+
z^2
|
|
228
|
+
"""
|
|
229
|
+
return var_mapping['z']**(self._n)
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
#Backward compatibility
|
|
233
|
+
CharacteristicSpecies_class = CharacteristicSpecies
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
class EmptySetSpecies(CharacteristicSpecies):
|
|
237
|
+
def __init__(self, min=None, max=None, weight=None):
|
|
238
|
+
"""
|
|
239
|
+
Return the empty set species.
|
|
240
|
+
|
|
241
|
+
This species has exactly one structure on the empty set. It is
|
|
242
|
+
the same (and is implemented) as ``CharacteristicSpecies(0)``.
|
|
243
|
+
|
|
244
|
+
EXAMPLES::
|
|
245
|
+
|
|
246
|
+
sage: X = species.EmptySetSpecies()
|
|
247
|
+
sage: X.structures([]).list()
|
|
248
|
+
[{}]
|
|
249
|
+
sage: X.structures([1,2]).list()
|
|
250
|
+
[]
|
|
251
|
+
sage: X.generating_series()[0:4]
|
|
252
|
+
[1, 0, 0, 0]
|
|
253
|
+
sage: X.isotype_generating_series()[0:4]
|
|
254
|
+
[1, 0, 0, 0]
|
|
255
|
+
sage: X.cycle_index_series()[0:4] # needs sage.modules
|
|
256
|
+
[p[], 0, 0, 0]
|
|
257
|
+
|
|
258
|
+
TESTS::
|
|
259
|
+
|
|
260
|
+
sage: E1 = species.EmptySetSpecies()
|
|
261
|
+
sage: E2 = species.EmptySetSpecies()
|
|
262
|
+
sage: E1 is E2
|
|
263
|
+
True
|
|
264
|
+
|
|
265
|
+
sage: E = species.EmptySetSpecies()
|
|
266
|
+
sage: E._check()
|
|
267
|
+
True
|
|
268
|
+
sage: E == loads(dumps(E))
|
|
269
|
+
True
|
|
270
|
+
"""
|
|
271
|
+
CharacteristicSpecies_class.__init__(self, 0, min=min, max=max, weight=weight)
|
|
272
|
+
self._name = "Empty set species"
|
|
273
|
+
self._state_info = []
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
#Backward compatibility
|
|
277
|
+
EmptySetSpecies_class = EmptySetSpecies._cached_constructor = EmptySetSpecies
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
class SingletonSpecies(CharacteristicSpecies):
|
|
281
|
+
def __init__(self, min=None, max=None, weight=None):
|
|
282
|
+
"""
|
|
283
|
+
Return the species of singletons.
|
|
284
|
+
|
|
285
|
+
This species has exactly one structure on a set of size `1`. It
|
|
286
|
+
is the same (and is implemented) as ``CharacteristicSpecies(1)``.
|
|
287
|
+
|
|
288
|
+
EXAMPLES::
|
|
289
|
+
|
|
290
|
+
sage: X = species.SingletonSpecies()
|
|
291
|
+
sage: X.structures([1]).list()
|
|
292
|
+
[1]
|
|
293
|
+
sage: X.structures([1,2]).list()
|
|
294
|
+
[]
|
|
295
|
+
sage: X.generating_series()[0:4]
|
|
296
|
+
[0, 1, 0, 0]
|
|
297
|
+
sage: X.isotype_generating_series()[0:4]
|
|
298
|
+
[0, 1, 0, 0]
|
|
299
|
+
sage: X.cycle_index_series()[0:4] # needs sage.modules
|
|
300
|
+
[0, p[1], 0, 0]
|
|
301
|
+
|
|
302
|
+
TESTS::
|
|
303
|
+
|
|
304
|
+
sage: S1 = species.SingletonSpecies()
|
|
305
|
+
sage: S2 = species.SingletonSpecies()
|
|
306
|
+
sage: S1 is S2
|
|
307
|
+
True
|
|
308
|
+
|
|
309
|
+
sage: S = species.SingletonSpecies()
|
|
310
|
+
sage: S._check()
|
|
311
|
+
True
|
|
312
|
+
sage: S == loads(dumps(S))
|
|
313
|
+
True
|
|
314
|
+
"""
|
|
315
|
+
CharacteristicSpecies_class.__init__(self, 1, min=min, max=max, weight=weight)
|
|
316
|
+
self._name = "Singleton species"
|
|
317
|
+
self._state_info = []
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
#Backward compatibility
|
|
321
|
+
SingletonSpecies_class = SingletonSpecies
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
"""
|
|
3
|
+
Composition species
|
|
4
|
+
"""
|
|
5
|
+
#*****************************************************************************
|
|
6
|
+
# Copyright (C) 2008 Mike Hansen <mhansen@gmail.com>,
|
|
7
|
+
#
|
|
8
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
9
|
+
#
|
|
10
|
+
# This code is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
13
|
+
# General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# The full text of the GPL is available at:
|
|
16
|
+
#
|
|
17
|
+
# http://www.gnu.org/licenses/
|
|
18
|
+
#*****************************************************************************
|
|
19
|
+
from .species import GenericCombinatorialSpecies
|
|
20
|
+
from .structure import GenericSpeciesStructure
|
|
21
|
+
from .partition_species import PartitionSpecies
|
|
22
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class CompositionSpeciesStructure(GenericSpeciesStructure):
|
|
26
|
+
def __init__(self, parent, labels, pi, f, gs):
|
|
27
|
+
"""
|
|
28
|
+
TESTS::
|
|
29
|
+
|
|
30
|
+
sage: E = species.SetSpecies(); C = species.CycleSpecies()
|
|
31
|
+
sage: L = E(C)
|
|
32
|
+
sage: a = L.structures(['a','b','c']).random_element() # needs sage.libs.flint
|
|
33
|
+
sage: a == loads(dumps(a)) # needs sage.libs.flint
|
|
34
|
+
True
|
|
35
|
+
"""
|
|
36
|
+
self._partition = pi
|
|
37
|
+
GenericSpeciesStructure.__init__(self, parent, labels, [f, gs])
|
|
38
|
+
|
|
39
|
+
def __repr__(self):
|
|
40
|
+
"""
|
|
41
|
+
EXAMPLES::
|
|
42
|
+
|
|
43
|
+
sage: E = species.SetSpecies(); C = species.CycleSpecies()
|
|
44
|
+
sage: L = E(C)
|
|
45
|
+
sage: L.structures(['a','b','c'])[0] # needs sage.libs.flint
|
|
46
|
+
F-structure: {{'a', 'b', 'c'}}; G-structures: (('a', 'b', 'c'),)
|
|
47
|
+
"""
|
|
48
|
+
f, gs = self._list
|
|
49
|
+
return "F-structure: %s; G-structures: %s" % (repr(f), repr(gs))
|
|
50
|
+
|
|
51
|
+
def transport(self, perm):
|
|
52
|
+
"""
|
|
53
|
+
EXAMPLES::
|
|
54
|
+
|
|
55
|
+
sage: p = PermutationGroupElement((2,3)) # needs sage.groups
|
|
56
|
+
sage: E = species.SetSpecies(); C = species.CycleSpecies()
|
|
57
|
+
sage: L = E(C)
|
|
58
|
+
sage: S = L.structures(['a','b','c']).list() # needs sage.libs.flint
|
|
59
|
+
sage: a = S[2]; a # needs sage.libs.flint
|
|
60
|
+
F-structure: {{'a', 'c'}, {'b'}}; G-structures: (('a', 'c'), ('b'))
|
|
61
|
+
sage: a.transport(p) # needs sage.groups sage.libs.flint
|
|
62
|
+
F-structure: {{'a', 'b'}, {'c'}}; G-structures: (('a', 'c'), ('b'))
|
|
63
|
+
"""
|
|
64
|
+
f, gs = self._list
|
|
65
|
+
pi = self._partition.transport(perm)
|
|
66
|
+
f = f.change_labels(pi._list)
|
|
67
|
+
_ = [g.change_labels(part) for g, part in zip(gs, pi)] # TODO: BUG HERE ?
|
|
68
|
+
return self.__class__(self, self._labels, pi, f, gs)
|
|
69
|
+
|
|
70
|
+
def change_labels(self, labels):
|
|
71
|
+
"""
|
|
72
|
+
Return a relabelled structure.
|
|
73
|
+
|
|
74
|
+
INPUT:
|
|
75
|
+
|
|
76
|
+
- ``labels`` -- list of labels
|
|
77
|
+
|
|
78
|
+
OUTPUT:
|
|
79
|
+
|
|
80
|
+
A structure with the `i`-th label of ``self`` replaced with the `i`-th
|
|
81
|
+
label of the list.
|
|
82
|
+
|
|
83
|
+
EXAMPLES::
|
|
84
|
+
|
|
85
|
+
sage: E = species.SetSpecies(); C = species.CycleSpecies()
|
|
86
|
+
sage: L = E(C)
|
|
87
|
+
sage: S = L.structures(['a','b','c']).list() # needs sage.libs.flint
|
|
88
|
+
sage: a = S[2]; a # needs sage.libs.flint
|
|
89
|
+
F-structure: {{'a', 'c'}, {'b'}}; G-structures: (('a', 'c'), ('b'))
|
|
90
|
+
sage: a.change_labels([1,2,3]) # needs sage.libs.flint
|
|
91
|
+
F-structure: {{1, 3}, {2}}; G-structures: [(1, 3), (2)]
|
|
92
|
+
"""
|
|
93
|
+
f, gs = self._list
|
|
94
|
+
pi = self._partition.change_labels(labels)
|
|
95
|
+
f = f.change_labels(list(pi))
|
|
96
|
+
g = [g.change_labels(part) for g, part in zip(gs, pi)]
|
|
97
|
+
return self.__class__(self, labels, pi, f, g)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
class CompositionSpecies(GenericCombinatorialSpecies, UniqueRepresentation):
|
|
101
|
+
def __init__(self, F, G, min=None, max=None, weight=None):
|
|
102
|
+
"""
|
|
103
|
+
Return the composition of two species.
|
|
104
|
+
|
|
105
|
+
EXAMPLES::
|
|
106
|
+
|
|
107
|
+
sage: E = species.SetSpecies()
|
|
108
|
+
sage: C = species.CycleSpecies()
|
|
109
|
+
sage: S = E(C)
|
|
110
|
+
sage: S.generating_series()[:5]
|
|
111
|
+
[1, 1, 1, 1, 1]
|
|
112
|
+
sage: E(C) is S
|
|
113
|
+
True
|
|
114
|
+
|
|
115
|
+
TESTS::
|
|
116
|
+
|
|
117
|
+
sage: E = species.SetSpecies(); C = species.CycleSpecies()
|
|
118
|
+
sage: L = E(C)
|
|
119
|
+
sage: c = L.generating_series()[:3]
|
|
120
|
+
sage: L._check() #False due to isomorphism types not being implemented # needs sage.libs.flint
|
|
121
|
+
False
|
|
122
|
+
sage: L == loads(dumps(L))
|
|
123
|
+
True
|
|
124
|
+
"""
|
|
125
|
+
self._F = F
|
|
126
|
+
self._G = G
|
|
127
|
+
self._name = "Composition of (%s) and (%s)" % (F, G)
|
|
128
|
+
self._state_info = [F, G]
|
|
129
|
+
GenericCombinatorialSpecies.__init__(self, min=None, max=None, weight=None)
|
|
130
|
+
|
|
131
|
+
_default_structure_class = CompositionSpeciesStructure
|
|
132
|
+
|
|
133
|
+
def _structures(self, structure_class, labels):
|
|
134
|
+
"""
|
|
135
|
+
EXAMPLES::
|
|
136
|
+
|
|
137
|
+
sage: E = species.SetSpecies(); C = species.CycleSpecies()
|
|
138
|
+
sage: L = E(C)
|
|
139
|
+
sage: L.structures(['a','b','c']).list() # needs sage.libs.flint
|
|
140
|
+
[F-structure: {{'a', 'b', 'c'}}; G-structures: (('a', 'b', 'c'),),
|
|
141
|
+
F-structure: {{'a', 'b', 'c'}}; G-structures: (('a', 'c', 'b'),),
|
|
142
|
+
F-structure: {{'a', 'c'}, {'b'}}; G-structures: (('a', 'c'), ('b')),
|
|
143
|
+
F-structure: {{'a', 'b'}, {'c'}}; G-structures: (('a', 'b'), ('c')),
|
|
144
|
+
F-structure: {{'b', 'c'}, {'a'}}; G-structures: (('b', 'c'), ('a')),
|
|
145
|
+
F-structure: {{'a'}, {'b'}, {'c'}}; G-structures: (('a'), ('b'), ('c'))]
|
|
146
|
+
|
|
147
|
+
TESTS::
|
|
148
|
+
|
|
149
|
+
sage: # needs sage.libs.flint
|
|
150
|
+
sage: a = _[2]
|
|
151
|
+
sage: f, gs = a._list
|
|
152
|
+
sage: f
|
|
153
|
+
{{'a', 'c'}, {'b'}}
|
|
154
|
+
sage: f.parent()
|
|
155
|
+
Set species
|
|
156
|
+
sage: f._list
|
|
157
|
+
[1, 2]
|
|
158
|
+
sage: f._labels
|
|
159
|
+
[{'a', 'c'}, {'b'}]
|
|
160
|
+
sage: [g.parent() for g in gs]
|
|
161
|
+
[Cyclic permutation species, Cyclic permutation species]
|
|
162
|
+
sage: [g._labels for g in gs]
|
|
163
|
+
[['a', 'c'], ['b']]
|
|
164
|
+
sage: [g._list for g in gs]
|
|
165
|
+
[[1, 2], [1]]
|
|
166
|
+
"""
|
|
167
|
+
from itertools import product
|
|
168
|
+
P = PartitionSpecies()
|
|
169
|
+
for pi in P.structures(labels):
|
|
170
|
+
# The labels of the G-structures will be just be the things
|
|
171
|
+
# in labels
|
|
172
|
+
gs = product(*[self._G.structures(part.label_subset()) for part in pi])
|
|
173
|
+
|
|
174
|
+
# The labels of the F-structure will be set objects
|
|
175
|
+
fs = self._F.structures(list(pi))
|
|
176
|
+
for f, gg in product(fs, gs):
|
|
177
|
+
yield structure_class(self, labels, pi, f, gg)
|
|
178
|
+
|
|
179
|
+
def _isotypes(self, structure_class, labels):
|
|
180
|
+
"""
|
|
181
|
+
EXAMPLES::
|
|
182
|
+
|
|
183
|
+
sage: E = species.SetSpecies(); C = species.CycleSpecies()
|
|
184
|
+
sage: L = E(C)
|
|
185
|
+
sage: L.isotypes(['a','b','c']).list() # needs sage.modules
|
|
186
|
+
Traceback (most recent call last):
|
|
187
|
+
...
|
|
188
|
+
NotImplementedError
|
|
189
|
+
"""
|
|
190
|
+
raise NotImplementedError
|
|
191
|
+
|
|
192
|
+
def _gs(self, series_ring, base_ring):
|
|
193
|
+
"""
|
|
194
|
+
EXAMPLES::
|
|
195
|
+
|
|
196
|
+
sage: E = species.SetSpecies(); C = species.CycleSpecies()
|
|
197
|
+
sage: L = E(C)
|
|
198
|
+
sage: L.generating_series()[:5]
|
|
199
|
+
[1, 1, 1, 1, 1]
|
|
200
|
+
"""
|
|
201
|
+
return self._F.generating_series(base_ring)(self._G.generating_series(base_ring))
|
|
202
|
+
|
|
203
|
+
def _itgs(self, series_ring, base_ring):
|
|
204
|
+
"""
|
|
205
|
+
EXAMPLES::
|
|
206
|
+
|
|
207
|
+
sage: E = species.SetSpecies(); C = species.CycleSpecies()
|
|
208
|
+
sage: L = E(C)
|
|
209
|
+
sage: L.isotype_generating_series()[:10] # needs sage.modules
|
|
210
|
+
[1, 1, 2, 3, 5, 7, 11, 15, 22, 30]
|
|
211
|
+
"""
|
|
212
|
+
cis = self.cycle_index_series(base_ring)
|
|
213
|
+
return cis.isotype_generating_series()
|
|
214
|
+
|
|
215
|
+
def _cis(self, series_ring, base_ring):
|
|
216
|
+
"""
|
|
217
|
+
EXAMPLES::
|
|
218
|
+
|
|
219
|
+
sage: E = species.SetSpecies(); C = species.CycleSpecies()
|
|
220
|
+
sage: L = E(C)
|
|
221
|
+
sage: L.cycle_index_series()[:5] # needs sage.modules
|
|
222
|
+
[p[],
|
|
223
|
+
p[1],
|
|
224
|
+
p[1, 1] + p[2],
|
|
225
|
+
p[1, 1, 1] + p[2, 1] + p[3],
|
|
226
|
+
p[1, 1, 1, 1] + p[2, 1, 1] + p[2, 2] + p[3, 1] + p[4]]
|
|
227
|
+
|
|
228
|
+
Here we (indirectly) check that the cycle index series for
|
|
229
|
+
permutations weighted by the number of cycles is correctly
|
|
230
|
+
computed.
|
|
231
|
+
|
|
232
|
+
::
|
|
233
|
+
|
|
234
|
+
sage: t = QQ['t'].gen()
|
|
235
|
+
sage: E = species.SetSpecies()
|
|
236
|
+
sage: C = species.CycleSpecies(weight=t)
|
|
237
|
+
sage: S = E(C)
|
|
238
|
+
sage: S.isotype_generating_series()[:5] #indirect # needs sage.modules
|
|
239
|
+
[1, t, t^2 + t, t^3 + t^2 + t, t^4 + t^3 + 2*t^2 + t]
|
|
240
|
+
|
|
241
|
+
We do the same thing with set partitions weighted by the number of
|
|
242
|
+
blocks.
|
|
243
|
+
|
|
244
|
+
::
|
|
245
|
+
|
|
246
|
+
sage: t = QQ['t'].gen()
|
|
247
|
+
sage: E = species.SetSpecies()
|
|
248
|
+
sage: E_t = species.SetSpecies(min=1,weight=t)
|
|
249
|
+
sage: Par = E(E_t)
|
|
250
|
+
sage: Par.isotype_generating_series()[:5] # needs sage.modules
|
|
251
|
+
[1, t, t^2 + t, t^3 + t^2 + t, t^4 + t^3 + 2*t^2 + t]
|
|
252
|
+
"""
|
|
253
|
+
f_cis = self._F.cycle_index_series(base_ring)
|
|
254
|
+
g_cis = self._G.cycle_index_series(base_ring)
|
|
255
|
+
return f_cis(g_cis)
|
|
256
|
+
|
|
257
|
+
def weight_ring(self):
|
|
258
|
+
"""
|
|
259
|
+
Return the weight ring for this species. This is determined by
|
|
260
|
+
asking Sage's coercion model what the result is when you multiply
|
|
261
|
+
(and add) elements of the weight rings for each of the operands.
|
|
262
|
+
|
|
263
|
+
EXAMPLES::
|
|
264
|
+
|
|
265
|
+
sage: E = species.SetSpecies(); C = species.CycleSpecies()
|
|
266
|
+
sage: L = E(C)
|
|
267
|
+
sage: L.weight_ring()
|
|
268
|
+
Rational Field
|
|
269
|
+
"""
|
|
270
|
+
return self._common_parent([self._F.weight_ring(), self._G.weight_ring()])
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
CompositionSpecies_class = CompositionSpecies
|