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,539 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
r"""
|
|
3
|
+
Species structures
|
|
4
|
+
|
|
5
|
+
We will illustrate the use of the structure classes using the
|
|
6
|
+
"balls and bars" model for integer compositions. An integer
|
|
7
|
+
composition of 6 such as [2, 1, 3] can be represented in this model
|
|
8
|
+
as 'oooooo' where the 6 o's correspond to the balls and the 2 's
|
|
9
|
+
correspond to the bars. If BB is our species for this model, the it
|
|
10
|
+
satisfies the following recursive definition:
|
|
11
|
+
|
|
12
|
+
BB = o + o\*BB + o\*|\*BB
|
|
13
|
+
|
|
14
|
+
Here we define this species using the default structures::
|
|
15
|
+
|
|
16
|
+
sage: ball = species.SingletonSpecies()
|
|
17
|
+
sage: bar = species.EmptySetSpecies()
|
|
18
|
+
sage: BB = CombinatorialSpecies()
|
|
19
|
+
sage: BB.define(ball + ball*BB + ball*bar*BB)
|
|
20
|
+
sage: o = var('o') # needs sage.symbolic
|
|
21
|
+
sage: BB.isotypes([o]*3).list() # needs sage.symbolic
|
|
22
|
+
[o*(o*o), o*((o*{})*o), (o*{})*(o*o), (o*{})*((o*{})*o)]
|
|
23
|
+
|
|
24
|
+
If we ignore the parentheses, we can read off that the integer
|
|
25
|
+
compositions are [3], [2, 1], [1, 2], and [1, 1, 1].
|
|
26
|
+
"""
|
|
27
|
+
#*****************************************************************************
|
|
28
|
+
# Copyright (C) 2008 Mike Hansen <mhansen@gmail.com>,
|
|
29
|
+
#
|
|
30
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
31
|
+
#
|
|
32
|
+
# This code is distributed in the hope that it will be useful,
|
|
33
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
34
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
35
|
+
# General Public License for more details.
|
|
36
|
+
#
|
|
37
|
+
# The full text of the GPL is available at:
|
|
38
|
+
#
|
|
39
|
+
# http://www.gnu.org/licenses/
|
|
40
|
+
#*****************************************************************************
|
|
41
|
+
from sage.categories.enumerated_sets import EnumeratedSets
|
|
42
|
+
from sage.combinat.combinat import CombinatorialObject
|
|
43
|
+
from sage.rings.integer import Integer
|
|
44
|
+
from sage.structure.parent import Parent
|
|
45
|
+
from copy import copy
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class GenericSpeciesStructure(CombinatorialObject):
|
|
49
|
+
def __init__(self, parent, labels, list):
|
|
50
|
+
"""
|
|
51
|
+
This is a base class from which the classes for the structures inherit.
|
|
52
|
+
|
|
53
|
+
EXAMPLES::
|
|
54
|
+
|
|
55
|
+
sage: from sage.combinat.species.structure import GenericSpeciesStructure
|
|
56
|
+
sage: a = GenericSpeciesStructure(None, [2,3,4], [1,2,3])
|
|
57
|
+
sage: a
|
|
58
|
+
[2, 3, 4]
|
|
59
|
+
sage: a.parent() is None
|
|
60
|
+
True
|
|
61
|
+
sage: a == loads(dumps(a))
|
|
62
|
+
True
|
|
63
|
+
"""
|
|
64
|
+
self._parent = parent
|
|
65
|
+
self._labels = labels
|
|
66
|
+
CombinatorialObject.__init__(self, list)
|
|
67
|
+
|
|
68
|
+
def parent(self):
|
|
69
|
+
"""
|
|
70
|
+
Return the species that this structure is associated with.
|
|
71
|
+
|
|
72
|
+
EXAMPLES::
|
|
73
|
+
|
|
74
|
+
sage: L = species.LinearOrderSpecies()
|
|
75
|
+
sage: a,b = L.structures([1,2])
|
|
76
|
+
sage: a.parent()
|
|
77
|
+
Linear order species
|
|
78
|
+
"""
|
|
79
|
+
try:
|
|
80
|
+
return self._parent
|
|
81
|
+
except AttributeError:
|
|
82
|
+
raise NotImplementedError
|
|
83
|
+
|
|
84
|
+
def __repr__(self):
|
|
85
|
+
"""
|
|
86
|
+
EXAMPLES::
|
|
87
|
+
|
|
88
|
+
sage: from sage.combinat.species.structure import GenericSpeciesStructure
|
|
89
|
+
sage: a = GenericSpeciesStructure(None, [2,3,4], [1,2,3])
|
|
90
|
+
sage: a
|
|
91
|
+
[2, 3, 4]
|
|
92
|
+
"""
|
|
93
|
+
return repr([self._relabel(i) for i in self._list])
|
|
94
|
+
|
|
95
|
+
def __eq__(self, other):
|
|
96
|
+
"""
|
|
97
|
+
Check whether ``self`` is equal to ``other``.
|
|
98
|
+
|
|
99
|
+
EXAMPLES::
|
|
100
|
+
|
|
101
|
+
sage: T = species.BinaryTreeSpecies()
|
|
102
|
+
sage: t = T.structures([1,2,3])[0]; t
|
|
103
|
+
1*(2*3)
|
|
104
|
+
sage: t[0], t[1][0]
|
|
105
|
+
(1, 2)
|
|
106
|
+
sage: t[0] == t[1][0]
|
|
107
|
+
False
|
|
108
|
+
"""
|
|
109
|
+
if not isinstance(other, GenericSpeciesStructure):
|
|
110
|
+
return False
|
|
111
|
+
return self._list == other._list and self.labels() == other.labels()
|
|
112
|
+
|
|
113
|
+
def __ne__(self, other):
|
|
114
|
+
"""
|
|
115
|
+
Check whether ``self`` is not equal to ``other``.
|
|
116
|
+
|
|
117
|
+
EXAMPLES::
|
|
118
|
+
|
|
119
|
+
sage: T = species.BinaryTreeSpecies()
|
|
120
|
+
sage: t = T.structures([1,2,3])[0]; t
|
|
121
|
+
1*(2*3)
|
|
122
|
+
sage: t[0], t[1][0]
|
|
123
|
+
(1, 2)
|
|
124
|
+
sage: t[0] != t[1][0]
|
|
125
|
+
True
|
|
126
|
+
"""
|
|
127
|
+
return not (self == other)
|
|
128
|
+
|
|
129
|
+
def labels(self):
|
|
130
|
+
"""
|
|
131
|
+
Return the labels used for this structure.
|
|
132
|
+
|
|
133
|
+
.. NOTE::
|
|
134
|
+
|
|
135
|
+
This includes labels which may not "appear" in this
|
|
136
|
+
particular structure.
|
|
137
|
+
|
|
138
|
+
EXAMPLES::
|
|
139
|
+
|
|
140
|
+
sage: P = species.SubsetSpecies()
|
|
141
|
+
sage: s = P.structures(["a", "b", "c"]).random_element()
|
|
142
|
+
sage: s.labels()
|
|
143
|
+
['a', 'b', 'c']
|
|
144
|
+
"""
|
|
145
|
+
return copy(self._labels)
|
|
146
|
+
|
|
147
|
+
def change_labels(self, labels):
|
|
148
|
+
"""
|
|
149
|
+
Return a relabelled structure.
|
|
150
|
+
|
|
151
|
+
INPUT:
|
|
152
|
+
|
|
153
|
+
- ``labels`` -- list of labels
|
|
154
|
+
|
|
155
|
+
OUTPUT:
|
|
156
|
+
|
|
157
|
+
A structure with the `i`-th label of ``self`` replaced with the `i`-th
|
|
158
|
+
label of the list.
|
|
159
|
+
|
|
160
|
+
EXAMPLES::
|
|
161
|
+
|
|
162
|
+
sage: P = species.SubsetSpecies()
|
|
163
|
+
sage: S = P.structures(["a", "b", "c"])
|
|
164
|
+
sage: [s.change_labels([1,2,3]) for s in S]
|
|
165
|
+
[{}, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}]
|
|
166
|
+
"""
|
|
167
|
+
c = copy(self)
|
|
168
|
+
c._labels = labels
|
|
169
|
+
return c
|
|
170
|
+
|
|
171
|
+
def _relabel(self, i):
|
|
172
|
+
"""
|
|
173
|
+
EXAMPLES::
|
|
174
|
+
|
|
175
|
+
sage: from sage.combinat.species.structure import GenericSpeciesStructure
|
|
176
|
+
sage: a = GenericSpeciesStructure(None, [2,3,4], [1,2,3])
|
|
177
|
+
sage: a._relabel(1)
|
|
178
|
+
2
|
|
179
|
+
sage: a._relabel([1,2,3])
|
|
180
|
+
[1, 2, 3]
|
|
181
|
+
"""
|
|
182
|
+
if isinstance(i, (int, Integer)):
|
|
183
|
+
return self._labels[i-1]
|
|
184
|
+
else:
|
|
185
|
+
return i
|
|
186
|
+
|
|
187
|
+
def is_isomorphic(self, x):
|
|
188
|
+
"""
|
|
189
|
+
EXAMPLES::
|
|
190
|
+
|
|
191
|
+
sage: S = species.SetSpecies()
|
|
192
|
+
sage: a = S.structures([1,2,3]).random_element(); a
|
|
193
|
+
{1, 2, 3}
|
|
194
|
+
sage: b = S.structures(['a','b','c']).random_element(); b
|
|
195
|
+
{'a', 'b', 'c'}
|
|
196
|
+
sage: a.is_isomorphic(b)
|
|
197
|
+
True
|
|
198
|
+
"""
|
|
199
|
+
if self.__class__ != x.__class__:
|
|
200
|
+
return False
|
|
201
|
+
if self.parent() != x.parent():
|
|
202
|
+
return False
|
|
203
|
+
|
|
204
|
+
#We don't care about the labels for isomorphism testing
|
|
205
|
+
if self.canonical_label()._list == x.canonical_label()._list:
|
|
206
|
+
return True
|
|
207
|
+
else:
|
|
208
|
+
return False
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
#For backward compatibility. This should be removed in the near
|
|
212
|
+
#future since I doubt that there is any code that depends directly on
|
|
213
|
+
#SpeciesStructure.
|
|
214
|
+
SpeciesStructure = GenericSpeciesStructure
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
class SpeciesStructureWrapper(GenericSpeciesStructure):
|
|
218
|
+
def __init__(self, parent, s, **options):
|
|
219
|
+
"""
|
|
220
|
+
This is a class for the structures of species such as the sum
|
|
221
|
+
species that do not provide "additional" structure. For example,
|
|
222
|
+
if you have the sum `C` of species `A` and `B`,
|
|
223
|
+
then a structure of `C` will either be either something from `A` or `B`.
|
|
224
|
+
Instead of just returning one of these directly, a "wrapper" is
|
|
225
|
+
put around them so that they have their parent is `C` rather than `A` or
|
|
226
|
+
`B`::
|
|
227
|
+
|
|
228
|
+
sage: X = species.SingletonSpecies()
|
|
229
|
+
sage: X2 = X+X
|
|
230
|
+
sage: s = X2.structures([1]).random_element(); s
|
|
231
|
+
1
|
|
232
|
+
sage: s.parent()
|
|
233
|
+
Sum of (Singleton species) and (Singleton species)
|
|
234
|
+
sage: from sage.combinat.species.structure import SpeciesStructureWrapper
|
|
235
|
+
sage: issubclass(type(s), SpeciesStructureWrapper)
|
|
236
|
+
True
|
|
237
|
+
|
|
238
|
+
EXAMPLES::
|
|
239
|
+
|
|
240
|
+
sage: E = species.SetSpecies(); B = E+E
|
|
241
|
+
sage: s = B.structures([1,2,3]).random_element()
|
|
242
|
+
sage: s.parent()
|
|
243
|
+
Sum of (Set species) and (Set species)
|
|
244
|
+
sage: s == loads(dumps(s))
|
|
245
|
+
True
|
|
246
|
+
"""
|
|
247
|
+
self._parent = parent
|
|
248
|
+
self._s = s
|
|
249
|
+
self._options = options
|
|
250
|
+
GenericSpeciesStructure.__init__(self, parent, s._labels, s._list)
|
|
251
|
+
|
|
252
|
+
def __getattr__(self, attr):
|
|
253
|
+
"""
|
|
254
|
+
EXAMPLES::
|
|
255
|
+
|
|
256
|
+
sage: E = species.SetSpecies(); B = E+E
|
|
257
|
+
sage: s = B.structures([1,2,3]).random_element()
|
|
258
|
+
sage: s
|
|
259
|
+
{1, 2, 3}
|
|
260
|
+
"""
|
|
261
|
+
if attr == "_s":
|
|
262
|
+
return None
|
|
263
|
+
|
|
264
|
+
return getattr(self._s, attr)
|
|
265
|
+
|
|
266
|
+
def __repr__(self):
|
|
267
|
+
"""
|
|
268
|
+
Return the repr of the object which this one wraps.
|
|
269
|
+
|
|
270
|
+
EXAMPLES::
|
|
271
|
+
|
|
272
|
+
sage: E = species.SetSpecies()
|
|
273
|
+
sage: s = (E+E).structures([1,2,3]).random_element(); s
|
|
274
|
+
{1, 2, 3}
|
|
275
|
+
"""
|
|
276
|
+
return repr(self._s)
|
|
277
|
+
|
|
278
|
+
def transport(self, perm):
|
|
279
|
+
"""
|
|
280
|
+
EXAMPLES::
|
|
281
|
+
|
|
282
|
+
sage: P = species.PartitionSpecies()
|
|
283
|
+
sage: s = (P+P).structures([1,2,3])[1]; s # needs sage.libs.flint
|
|
284
|
+
{{1, 3}, {2}}
|
|
285
|
+
sage: s.transport(PermutationGroupElement((2,3))) # needs sage.groups sage.libs.flint
|
|
286
|
+
{{1, 2}, {3}}
|
|
287
|
+
"""
|
|
288
|
+
return self.__class__(self._parent, self._s.transport(perm), **self._options)
|
|
289
|
+
|
|
290
|
+
def canonical_label(self):
|
|
291
|
+
"""
|
|
292
|
+
EXAMPLES::
|
|
293
|
+
|
|
294
|
+
sage: P = species.PartitionSpecies()
|
|
295
|
+
sage: s = (P+P).structures([1,2,3])[1]; s # needs sage.libs.flint
|
|
296
|
+
{{1, 3}, {2}}
|
|
297
|
+
sage: s.canonical_label() # needs sage.libs.flint
|
|
298
|
+
{{1, 2}, {3}}
|
|
299
|
+
"""
|
|
300
|
+
return self.__class__(self._parent, self._s.canonical_label(), **self._options)
|
|
301
|
+
|
|
302
|
+
def change_labels(self, labels):
|
|
303
|
+
"""
|
|
304
|
+
Return a relabelled structure.
|
|
305
|
+
|
|
306
|
+
INPUT:
|
|
307
|
+
|
|
308
|
+
- ``labels`` -- list of labels
|
|
309
|
+
|
|
310
|
+
OUTPUT:
|
|
311
|
+
|
|
312
|
+
A structure with the `i`-th label of ``self`` replaced with the `i`-th
|
|
313
|
+
label of the list.
|
|
314
|
+
|
|
315
|
+
EXAMPLES::
|
|
316
|
+
|
|
317
|
+
sage: X = species.SingletonSpecies()
|
|
318
|
+
sage: X2 = X+X
|
|
319
|
+
sage: s = X2.structures([1]).random_element(); s
|
|
320
|
+
1
|
|
321
|
+
sage: s.change_labels(['a'])
|
|
322
|
+
'a'
|
|
323
|
+
"""
|
|
324
|
+
c = GenericSpeciesStructure.change_labels(self, labels)
|
|
325
|
+
c._s = c._s.change_labels(labels)
|
|
326
|
+
return c
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
##############################################################
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
class SpeciesWrapper(Parent):
|
|
333
|
+
def __init__(self, species, labels, iterator, generating_series, name, structure_class):
|
|
334
|
+
"""
|
|
335
|
+
This is a abstract base class for the set of structures of a
|
|
336
|
+
species as well as the set of isotypes of the species.
|
|
337
|
+
|
|
338
|
+
.. NOTE::
|
|
339
|
+
|
|
340
|
+
One typically does not use :class:`SpeciesWrapper`
|
|
341
|
+
directly, but instead instantiates one of its subclasses:
|
|
342
|
+
:class:`StructuresWrapper` or :class:`IsotypesWrapper`.
|
|
343
|
+
|
|
344
|
+
EXAMPLES::
|
|
345
|
+
|
|
346
|
+
sage: from sage.combinat.species.structure import SpeciesWrapper
|
|
347
|
+
sage: F = species.SetSpecies()
|
|
348
|
+
sage: S = SpeciesWrapper(F, [1,2,3], "_structures", "generating_series", 'Structures', None)
|
|
349
|
+
sage: S
|
|
350
|
+
Structures for Set species with labels [1, 2, 3]
|
|
351
|
+
sage: S.list()
|
|
352
|
+
[{1, 2, 3}]
|
|
353
|
+
sage: S.cardinality()
|
|
354
|
+
1
|
|
355
|
+
"""
|
|
356
|
+
Parent.__init__(self, category=EnumeratedSets().Finite())
|
|
357
|
+
self._species = species
|
|
358
|
+
self._labels = labels
|
|
359
|
+
self._iterator = iterator
|
|
360
|
+
self._generating_series = generating_series
|
|
361
|
+
self._name = "%s for %s with labels %s" % (name, species, labels)
|
|
362
|
+
self._structure_class = structure_class if structure_class is not None else species._default_structure_class
|
|
363
|
+
|
|
364
|
+
def __eq__(self, other) -> bool:
|
|
365
|
+
r"""
|
|
366
|
+
EXAMPLES::
|
|
367
|
+
|
|
368
|
+
sage: from sage.combinat.species.structure import SpeciesWrapper
|
|
369
|
+
sage: F = species.SetSpecies()
|
|
370
|
+
sage: S = SpeciesWrapper(F, [1,2,3], "_structures", "generating_series", 'Structures', None)
|
|
371
|
+
sage: S == SpeciesWrapper(F, [1,2,3], "_structures", "generating_series", 'Structures', None)
|
|
372
|
+
True
|
|
373
|
+
"""
|
|
374
|
+
return ((self._species, self._labels,
|
|
375
|
+
self._iterator, self._generating_series,
|
|
376
|
+
self._name, self._structure_class) == (other._species, other._labels,
|
|
377
|
+
other._iterator, other._generating_series,
|
|
378
|
+
other._name, other._structure_class))
|
|
379
|
+
|
|
380
|
+
def __ne__(self, other) -> bool:
|
|
381
|
+
r"""
|
|
382
|
+
EXAMPLES::
|
|
383
|
+
|
|
384
|
+
sage: from sage.combinat.species.structure import SpeciesWrapper
|
|
385
|
+
sage: F = species.SetSpecies()
|
|
386
|
+
sage: S = SpeciesWrapper(F, [1,2,3], "_structures", "generating_series", 'Structures', None)
|
|
387
|
+
sage: S != SpeciesWrapper(F, [1,2,3], "_structures", "generating_series", 'Structures', None)
|
|
388
|
+
False
|
|
389
|
+
"""
|
|
390
|
+
return not (self == other)
|
|
391
|
+
|
|
392
|
+
def _repr_(self) -> str:
|
|
393
|
+
"""
|
|
394
|
+
EXAMPLES::
|
|
395
|
+
|
|
396
|
+
sage: from sage.combinat.species.structure import SpeciesWrapper
|
|
397
|
+
sage: F = species.SetSpecies()
|
|
398
|
+
sage: S = SpeciesWrapper(F, [1,2,3], "_structures", "generating_series", 'Structures', None)
|
|
399
|
+
sage: repr(S) # indirect doctest
|
|
400
|
+
'Structures for Set species with labels [1, 2, 3]'
|
|
401
|
+
"""
|
|
402
|
+
return self._name
|
|
403
|
+
|
|
404
|
+
def labels(self):
|
|
405
|
+
"""
|
|
406
|
+
Return the labels used on these structures. If `X` is the
|
|
407
|
+
species, then :meth:`labels` returns the preimage of these
|
|
408
|
+
structures under the functor `X`.
|
|
409
|
+
|
|
410
|
+
EXAMPLES::
|
|
411
|
+
|
|
412
|
+
sage: F = species.SetSpecies()
|
|
413
|
+
sage: F.structures([1,2,3]).labels()
|
|
414
|
+
[1, 2, 3]
|
|
415
|
+
"""
|
|
416
|
+
return copy(self._labels)
|
|
417
|
+
|
|
418
|
+
def __iter__(self):
|
|
419
|
+
"""
|
|
420
|
+
EXAMPLES::
|
|
421
|
+
|
|
422
|
+
sage: F = species.SetSpecies()
|
|
423
|
+
sage: F.structures([1,2,3]).list()
|
|
424
|
+
[{1, 2, 3}]
|
|
425
|
+
"""
|
|
426
|
+
#If the min and max are set, then we want to make sure
|
|
427
|
+
#that the iterator respects those bounds.
|
|
428
|
+
if (self._species._min is not None and
|
|
429
|
+
len(self._labels) < self._species._min):
|
|
430
|
+
return iter([])
|
|
431
|
+
|
|
432
|
+
if (self._species._max is not None and
|
|
433
|
+
len(self._labels) >= self._species._max):
|
|
434
|
+
return iter([])
|
|
435
|
+
|
|
436
|
+
#We check to see if the
|
|
437
|
+
try:
|
|
438
|
+
if self.cardinality() == 0:
|
|
439
|
+
return iter([])
|
|
440
|
+
except TypeError:
|
|
441
|
+
raise NotImplementedError
|
|
442
|
+
|
|
443
|
+
return getattr(self._species, self._iterator)(self._structure_class, self._labels)
|
|
444
|
+
|
|
445
|
+
def cardinality(self):
|
|
446
|
+
"""
|
|
447
|
+
Return the number of structures in this set.
|
|
448
|
+
|
|
449
|
+
EXAMPLES::
|
|
450
|
+
|
|
451
|
+
sage: F = species.SetSpecies()
|
|
452
|
+
sage: F.structures([1,2,3]).cardinality()
|
|
453
|
+
1
|
|
454
|
+
"""
|
|
455
|
+
return getattr(self._species, self._generating_series)().count(len(self._labels))
|
|
456
|
+
|
|
457
|
+
|
|
458
|
+
class StructuresWrapper(SpeciesWrapper):
|
|
459
|
+
def __init__(self, species, labels, structure_class):
|
|
460
|
+
"""
|
|
461
|
+
A base class for the set of structures of a species with given
|
|
462
|
+
set of labels. An object of this type is returned when you
|
|
463
|
+
call the :meth:`structures` method of a species.
|
|
464
|
+
|
|
465
|
+
EXAMPLES::
|
|
466
|
+
|
|
467
|
+
sage: F = species.SetSpecies()
|
|
468
|
+
sage: S = F.structures([1,2,3])
|
|
469
|
+
sage: S == loads(dumps(S))
|
|
470
|
+
True
|
|
471
|
+
"""
|
|
472
|
+
SpeciesWrapper.__init__(self, species, labels,
|
|
473
|
+
"_structures",
|
|
474
|
+
"generating_series",
|
|
475
|
+
"Structures",
|
|
476
|
+
structure_class)
|
|
477
|
+
|
|
478
|
+
|
|
479
|
+
class IsotypesWrapper(SpeciesWrapper):
|
|
480
|
+
def __init__(self, species, labels, structure_class):
|
|
481
|
+
"""
|
|
482
|
+
A base class for the set of isotypes of a species with given
|
|
483
|
+
set of labels. An object of this type is returned when you
|
|
484
|
+
call the :meth:`isotypes` method of a species.
|
|
485
|
+
|
|
486
|
+
EXAMPLES::
|
|
487
|
+
|
|
488
|
+
sage: F = species.SetSpecies()
|
|
489
|
+
sage: S = F.isotypes([1,2,3])
|
|
490
|
+
sage: S == loads(dumps(S))
|
|
491
|
+
True
|
|
492
|
+
"""
|
|
493
|
+
SpeciesWrapper.__init__(self, species, labels,
|
|
494
|
+
"_isotypes",
|
|
495
|
+
"isotype_generating_series",
|
|
496
|
+
"Isomorphism types",
|
|
497
|
+
structure_class)
|
|
498
|
+
|
|
499
|
+
|
|
500
|
+
class SimpleStructuresWrapper(SpeciesWrapper):
|
|
501
|
+
def __init__(self, species, labels, structure_class):
|
|
502
|
+
"""
|
|
503
|
+
.. warning::
|
|
504
|
+
|
|
505
|
+
This is deprecated and currently not used for anything.
|
|
506
|
+
|
|
507
|
+
EXAMPLES::
|
|
508
|
+
|
|
509
|
+
sage: F = species.SetSpecies()
|
|
510
|
+
sage: S = F.structures([1,2,3])
|
|
511
|
+
sage: S == loads(dumps(S))
|
|
512
|
+
True
|
|
513
|
+
"""
|
|
514
|
+
SpeciesWrapper.__init__(self, species, labels,
|
|
515
|
+
"_simple_structures_selector",
|
|
516
|
+
"generating_series",
|
|
517
|
+
"Simple structures",
|
|
518
|
+
structure_class)
|
|
519
|
+
|
|
520
|
+
|
|
521
|
+
class SimpleIsotypesWrapper(SpeciesWrapper):
|
|
522
|
+
def __init__(self, species, labels, structure_class):
|
|
523
|
+
"""
|
|
524
|
+
.. warning::
|
|
525
|
+
|
|
526
|
+
This is deprecated and currently not used for anything.
|
|
527
|
+
|
|
528
|
+
EXAMPLES::
|
|
529
|
+
|
|
530
|
+
sage: F = species.SetSpecies()
|
|
531
|
+
sage: S = F.structures([1,2,3])
|
|
532
|
+
sage: S == loads(dumps(S))
|
|
533
|
+
True
|
|
534
|
+
"""
|
|
535
|
+
SpeciesWrapper.__init__(self, species, labels,
|
|
536
|
+
"_simple_isotypes_selector",
|
|
537
|
+
"isotype_generating_series",
|
|
538
|
+
"Simple isomorphism types",
|
|
539
|
+
structure_class)
|