passagemath-combinat 10.6.42__cp314-cp314t-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- passagemath_combinat/__init__.py +3 -0
- passagemath_combinat-10.6.42.dist-info/DELVEWHEEL +2 -0
- passagemath_combinat-10.6.42.dist-info/METADATA +160 -0
- passagemath_combinat-10.6.42.dist-info/RECORD +401 -0
- passagemath_combinat-10.6.42.dist-info/WHEEL +5 -0
- passagemath_combinat-10.6.42.dist-info/top_level.txt +3 -0
- passagemath_combinat.libs/libgmp-10-3a5f019e2510aeaad918cab2b57a689d.dll +0 -0
- passagemath_combinat.libs/libsymmetrica-3-7dcf900932804d0df5fd0919b4668720.dll +0 -0
- sage/algebras/affine_nil_temperley_lieb.py +263 -0
- sage/algebras/all.py +24 -0
- sage/algebras/all__sagemath_combinat.py +35 -0
- sage/algebras/askey_wilson.py +935 -0
- sage/algebras/associated_graded.py +345 -0
- sage/algebras/cellular_basis.py +350 -0
- sage/algebras/cluster_algebra.py +2766 -0
- sage/algebras/down_up_algebra.py +860 -0
- sage/algebras/free_algebra.py +1698 -0
- sage/algebras/free_algebra_element.py +345 -0
- sage/algebras/free_algebra_quotient.py +405 -0
- sage/algebras/free_algebra_quotient_element.py +295 -0
- sage/algebras/free_zinbiel_algebra.py +885 -0
- sage/algebras/hall_algebra.py +783 -0
- sage/algebras/hecke_algebras/all.py +4 -0
- sage/algebras/hecke_algebras/ariki_koike_algebra.py +1796 -0
- sage/algebras/hecke_algebras/ariki_koike_specht_modules.py +475 -0
- sage/algebras/hecke_algebras/cubic_hecke_algebra.py +3520 -0
- sage/algebras/hecke_algebras/cubic_hecke_base_ring.py +1473 -0
- sage/algebras/hecke_algebras/cubic_hecke_matrix_rep.py +1079 -0
- sage/algebras/iwahori_hecke_algebra.py +3095 -0
- sage/algebras/jordan_algebra.py +1773 -0
- sage/algebras/lie_conformal_algebras/abelian_lie_conformal_algebra.py +113 -0
- sage/algebras/lie_conformal_algebras/affine_lie_conformal_algebra.py +156 -0
- sage/algebras/lie_conformal_algebras/all.py +18 -0
- sage/algebras/lie_conformal_algebras/bosonic_ghosts_lie_conformal_algebra.py +134 -0
- sage/algebras/lie_conformal_algebras/examples.py +43 -0
- sage/algebras/lie_conformal_algebras/fermionic_ghosts_lie_conformal_algebra.py +131 -0
- sage/algebras/lie_conformal_algebras/finitely_freely_generated_lca.py +139 -0
- sage/algebras/lie_conformal_algebras/free_bosons_lie_conformal_algebra.py +174 -0
- sage/algebras/lie_conformal_algebras/free_fermions_lie_conformal_algebra.py +167 -0
- sage/algebras/lie_conformal_algebras/freely_generated_lie_conformal_algebra.py +107 -0
- sage/algebras/lie_conformal_algebras/graded_lie_conformal_algebra.py +135 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra.py +353 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra_element.py +236 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_basis.py +78 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_structure_coefs.py +328 -0
- sage/algebras/lie_conformal_algebras/n2_lie_conformal_algebra.py +117 -0
- sage/algebras/lie_conformal_algebras/neveu_schwarz_lie_conformal_algebra.py +86 -0
- sage/algebras/lie_conformal_algebras/virasoro_lie_conformal_algebra.py +82 -0
- sage/algebras/lie_conformal_algebras/weyl_lie_conformal_algebra.py +205 -0
- sage/algebras/nil_coxeter_algebra.py +191 -0
- sage/algebras/q_commuting_polynomials.py +673 -0
- sage/algebras/q_system.py +608 -0
- sage/algebras/quantum_clifford.py +959 -0
- sage/algebras/quantum_groups/ace_quantum_onsager.py +693 -0
- sage/algebras/quantum_groups/all.py +9 -0
- sage/algebras/quantum_groups/fock_space.py +2219 -0
- sage/algebras/quantum_groups/q_numbers.py +207 -0
- sage/algebras/quantum_groups/quantum_group_gap.py +2695 -0
- sage/algebras/quantum_groups/representations.py +591 -0
- sage/algebras/quantum_matrix_coordinate_algebra.py +1006 -0
- sage/algebras/quantum_oscillator.py +623 -0
- sage/algebras/quaternion_algebra.py +20 -0
- sage/algebras/quaternion_algebra_element.py +55 -0
- sage/algebras/rational_cherednik_algebra.py +525 -0
- sage/algebras/schur_algebra.py +670 -0
- sage/algebras/shuffle_algebra.py +1011 -0
- sage/algebras/splitting_algebra.py +779 -0
- sage/algebras/tensor_algebra.py +709 -0
- sage/algebras/yangian.py +1082 -0
- sage/algebras/yokonuma_hecke_algebra.py +1018 -0
- sage/all__sagemath_combinat.py +44 -0
- sage/combinat/SJT.py +255 -0
- sage/combinat/affine_permutation.py +2405 -0
- sage/combinat/algebraic_combinatorics.py +55 -0
- sage/combinat/all.py +53 -0
- sage/combinat/all__sagemath_combinat.py +195 -0
- sage/combinat/alternating_sign_matrix.py +2063 -0
- sage/combinat/baxter_permutations.py +346 -0
- sage/combinat/bijectionist.py +3220 -0
- sage/combinat/binary_recurrence_sequences.py +1180 -0
- sage/combinat/blob_algebra.py +685 -0
- sage/combinat/catalog_partitions.py +27 -0
- sage/combinat/chas/all.py +23 -0
- sage/combinat/chas/fsym.py +1180 -0
- sage/combinat/chas/wqsym.py +2601 -0
- sage/combinat/cluster_complex.py +326 -0
- sage/combinat/colored_permutations.py +2039 -0
- sage/combinat/colored_permutations_representations.py +964 -0
- sage/combinat/composition_signed.py +142 -0
- sage/combinat/composition_tableau.py +855 -0
- sage/combinat/constellation.py +1729 -0
- sage/combinat/core.py +751 -0
- sage/combinat/counting.py +12 -0
- sage/combinat/crystals/affine.py +742 -0
- sage/combinat/crystals/affine_factorization.py +518 -0
- sage/combinat/crystals/affinization.py +331 -0
- sage/combinat/crystals/alcove_path.py +2013 -0
- sage/combinat/crystals/all.py +22 -0
- sage/combinat/crystals/bkk_crystals.py +141 -0
- sage/combinat/crystals/catalog.py +115 -0
- sage/combinat/crystals/catalog_elementary_crystals.py +18 -0
- sage/combinat/crystals/catalog_infinity_crystals.py +33 -0
- sage/combinat/crystals/catalog_kirillov_reshetikhin.py +18 -0
- sage/combinat/crystals/crystals.py +257 -0
- sage/combinat/crystals/direct_sum.py +260 -0
- sage/combinat/crystals/elementary_crystals.py +1251 -0
- sage/combinat/crystals/fast_crystals.py +441 -0
- sage/combinat/crystals/fully_commutative_stable_grothendieck.py +1205 -0
- sage/combinat/crystals/generalized_young_walls.py +1076 -0
- sage/combinat/crystals/highest_weight_crystals.py +436 -0
- sage/combinat/crystals/induced_structure.py +695 -0
- sage/combinat/crystals/infinity_crystals.py +730 -0
- sage/combinat/crystals/kac_modules.py +863 -0
- sage/combinat/crystals/kirillov_reshetikhin.py +4196 -0
- sage/combinat/crystals/kyoto_path_model.py +497 -0
- sage/combinat/crystals/letters.cp314t-win_amd64.pyd +0 -0
- sage/combinat/crystals/letters.pxd +79 -0
- sage/combinat/crystals/letters.pyx +3056 -0
- sage/combinat/crystals/littelmann_path.py +1518 -0
- sage/combinat/crystals/monomial_crystals.py +1262 -0
- sage/combinat/crystals/multisegments.py +462 -0
- sage/combinat/crystals/mv_polytopes.py +467 -0
- sage/combinat/crystals/pbw_crystal.py +511 -0
- sage/combinat/crystals/pbw_datum.cp314t-win_amd64.pyd +0 -0
- sage/combinat/crystals/pbw_datum.pxd +4 -0
- sage/combinat/crystals/pbw_datum.pyx +487 -0
- sage/combinat/crystals/polyhedral_realization.py +372 -0
- sage/combinat/crystals/spins.cp314t-win_amd64.pyd +0 -0
- sage/combinat/crystals/spins.pxd +21 -0
- sage/combinat/crystals/spins.pyx +756 -0
- sage/combinat/crystals/star_crystal.py +290 -0
- sage/combinat/crystals/subcrystal.py +464 -0
- sage/combinat/crystals/tensor_product.py +1177 -0
- sage/combinat/crystals/tensor_product_element.cp314t-win_amd64.pyd +0 -0
- sage/combinat/crystals/tensor_product_element.pxd +35 -0
- sage/combinat/crystals/tensor_product_element.pyx +1870 -0
- sage/combinat/crystals/virtual_crystal.py +420 -0
- sage/combinat/cyclic_sieving_phenomenon.py +204 -0
- sage/combinat/debruijn_sequence.cp314t-win_amd64.pyd +0 -0
- sage/combinat/debruijn_sequence.pyx +355 -0
- sage/combinat/decorated_permutation.py +270 -0
- sage/combinat/degree_sequences.cp314t-win_amd64.pyd +0 -0
- sage/combinat/degree_sequences.pyx +588 -0
- sage/combinat/derangements.py +527 -0
- sage/combinat/descent_algebra.py +1008 -0
- sage/combinat/diagram.py +1551 -0
- sage/combinat/diagram_algebras.py +5886 -0
- sage/combinat/dyck_word.py +4349 -0
- sage/combinat/e_one_star.py +1623 -0
- sage/combinat/enumerated_sets.py +123 -0
- sage/combinat/expnums.cp314t-win_amd64.pyd +0 -0
- sage/combinat/expnums.pyx +148 -0
- sage/combinat/fast_vector_partitions.cp314t-win_amd64.pyd +0 -0
- sage/combinat/fast_vector_partitions.pyx +346 -0
- sage/combinat/fqsym.py +1977 -0
- sage/combinat/free_dendriform_algebra.py +954 -0
- sage/combinat/free_prelie_algebra.py +1141 -0
- sage/combinat/fully_commutative_elements.py +1077 -0
- sage/combinat/fully_packed_loop.py +1523 -0
- sage/combinat/gelfand_tsetlin_patterns.py +1409 -0
- sage/combinat/gray_codes.py +311 -0
- sage/combinat/grossman_larson_algebras.py +667 -0
- sage/combinat/growth.py +4352 -0
- sage/combinat/hall_polynomial.py +188 -0
- sage/combinat/hillman_grassl.py +866 -0
- sage/combinat/integer_matrices.py +329 -0
- sage/combinat/integer_vectors_mod_permgroup.py +1238 -0
- sage/combinat/k_tableau.py +4564 -0
- sage/combinat/kazhdan_lusztig.py +215 -0
- sage/combinat/key_polynomial.py +885 -0
- sage/combinat/knutson_tao_puzzles.py +2286 -0
- sage/combinat/lr_tableau.py +311 -0
- sage/combinat/matrices/all.py +24 -0
- sage/combinat/matrices/hadamard_matrix.py +3790 -0
- sage/combinat/matrices/latin.py +2912 -0
- sage/combinat/misc.py +401 -0
- sage/combinat/multiset_partition_into_sets_ordered.py +3541 -0
- sage/combinat/ncsf_qsym/all.py +21 -0
- sage/combinat/ncsf_qsym/combinatorics.py +317 -0
- sage/combinat/ncsf_qsym/generic_basis_code.py +1427 -0
- sage/combinat/ncsf_qsym/ncsf.py +5637 -0
- sage/combinat/ncsf_qsym/qsym.py +4053 -0
- sage/combinat/ncsf_qsym/tutorial.py +447 -0
- sage/combinat/ncsym/all.py +21 -0
- sage/combinat/ncsym/bases.py +855 -0
- sage/combinat/ncsym/dual.py +593 -0
- sage/combinat/ncsym/ncsym.py +2076 -0
- sage/combinat/necklace.py +551 -0
- sage/combinat/non_decreasing_parking_function.py +634 -0
- sage/combinat/nu_dyck_word.py +1474 -0
- sage/combinat/output.py +861 -0
- sage/combinat/parallelogram_polyomino.py +4326 -0
- sage/combinat/parking_functions.py +1602 -0
- sage/combinat/partition_algebra.py +1998 -0
- sage/combinat/partition_kleshchev.py +1982 -0
- sage/combinat/partition_shifting_algebras.py +584 -0
- sage/combinat/partition_tuple.py +3114 -0
- sage/combinat/path_tableaux/all.py +13 -0
- sage/combinat/path_tableaux/catalog.py +29 -0
- sage/combinat/path_tableaux/dyck_path.py +380 -0
- sage/combinat/path_tableaux/frieze.py +476 -0
- sage/combinat/path_tableaux/path_tableau.py +728 -0
- sage/combinat/path_tableaux/semistandard.py +510 -0
- sage/combinat/perfect_matching.py +779 -0
- sage/combinat/plane_partition.py +3300 -0
- sage/combinat/q_bernoulli.cp314t-win_amd64.pyd +0 -0
- sage/combinat/q_bernoulli.pyx +128 -0
- sage/combinat/quickref.py +81 -0
- sage/combinat/recognizable_series.py +2051 -0
- sage/combinat/regular_sequence.py +4316 -0
- sage/combinat/regular_sequence_bounded.py +543 -0
- sage/combinat/restricted_growth.py +81 -0
- sage/combinat/ribbon.py +20 -0
- sage/combinat/ribbon_shaped_tableau.py +489 -0
- sage/combinat/ribbon_tableau.py +1180 -0
- sage/combinat/rigged_configurations/all.py +46 -0
- sage/combinat/rigged_configurations/bij_abstract_class.py +548 -0
- sage/combinat/rigged_configurations/bij_infinity.py +370 -0
- sage/combinat/rigged_configurations/bij_type_A.py +163 -0
- sage/combinat/rigged_configurations/bij_type_A2_dual.py +338 -0
- sage/combinat/rigged_configurations/bij_type_A2_even.py +218 -0
- sage/combinat/rigged_configurations/bij_type_A2_odd.py +199 -0
- sage/combinat/rigged_configurations/bij_type_B.py +900 -0
- sage/combinat/rigged_configurations/bij_type_C.py +267 -0
- sage/combinat/rigged_configurations/bij_type_D.py +771 -0
- sage/combinat/rigged_configurations/bij_type_D_tri.py +392 -0
- sage/combinat/rigged_configurations/bij_type_D_twisted.py +576 -0
- sage/combinat/rigged_configurations/bij_type_E67.py +402 -0
- sage/combinat/rigged_configurations/bijection.py +143 -0
- sage/combinat/rigged_configurations/kleber_tree.py +1475 -0
- sage/combinat/rigged_configurations/kr_tableaux.py +1898 -0
- sage/combinat/rigged_configurations/rc_crystal.py +461 -0
- sage/combinat/rigged_configurations/rc_infinity.py +540 -0
- sage/combinat/rigged_configurations/rigged_configuration_element.py +2403 -0
- sage/combinat/rigged_configurations/rigged_configurations.py +1918 -0
- sage/combinat/rigged_configurations/rigged_partition.cp314t-win_amd64.pyd +0 -0
- sage/combinat/rigged_configurations/rigged_partition.pxd +15 -0
- sage/combinat/rigged_configurations/rigged_partition.pyx +680 -0
- sage/combinat/rigged_configurations/tensor_product_kr_tableaux.py +499 -0
- sage/combinat/rigged_configurations/tensor_product_kr_tableaux_element.py +428 -0
- sage/combinat/rsk.py +3438 -0
- sage/combinat/schubert_polynomial.py +508 -0
- sage/combinat/set_partition.py +3318 -0
- sage/combinat/set_partition_iterator.cp314t-win_amd64.pyd +0 -0
- sage/combinat/set_partition_iterator.pyx +136 -0
- sage/combinat/set_partition_ordered.py +1590 -0
- sage/combinat/sf/abreu_nigro.py +346 -0
- sage/combinat/sf/all.py +52 -0
- sage/combinat/sf/character.py +576 -0
- sage/combinat/sf/classical.py +319 -0
- sage/combinat/sf/dual.py +996 -0
- sage/combinat/sf/elementary.py +549 -0
- sage/combinat/sf/hall_littlewood.py +1028 -0
- sage/combinat/sf/hecke.py +336 -0
- sage/combinat/sf/homogeneous.py +464 -0
- sage/combinat/sf/jack.py +1428 -0
- sage/combinat/sf/k_dual.py +1458 -0
- sage/combinat/sf/kfpoly.py +447 -0
- sage/combinat/sf/llt.py +789 -0
- sage/combinat/sf/macdonald.py +2019 -0
- sage/combinat/sf/monomial.py +525 -0
- sage/combinat/sf/multiplicative.py +113 -0
- sage/combinat/sf/new_kschur.py +1786 -0
- sage/combinat/sf/ns_macdonald.py +964 -0
- sage/combinat/sf/orthogonal.py +246 -0
- sage/combinat/sf/orthotriang.py +355 -0
- sage/combinat/sf/powersum.py +963 -0
- sage/combinat/sf/schur.py +880 -0
- sage/combinat/sf/sf.py +1653 -0
- sage/combinat/sf/sfa.py +7053 -0
- sage/combinat/sf/symplectic.py +253 -0
- sage/combinat/sf/witt.py +721 -0
- sage/combinat/shifted_primed_tableau.py +2735 -0
- sage/combinat/shuffle.py +830 -0
- sage/combinat/sidon_sets.py +146 -0
- sage/combinat/similarity_class_type.py +1721 -0
- sage/combinat/sine_gordon.py +618 -0
- sage/combinat/six_vertex_model.py +784 -0
- sage/combinat/skew_partition.py +2053 -0
- sage/combinat/skew_tableau.py +2989 -0
- sage/combinat/sloane_functions.py +8935 -0
- sage/combinat/specht_module.py +1403 -0
- sage/combinat/species/all.py +48 -0
- sage/combinat/species/characteristic_species.py +321 -0
- sage/combinat/species/composition_species.py +273 -0
- sage/combinat/species/cycle_species.py +284 -0
- sage/combinat/species/empty_species.py +155 -0
- sage/combinat/species/functorial_composition_species.py +148 -0
- sage/combinat/species/generating_series.py +673 -0
- sage/combinat/species/library.py +148 -0
- sage/combinat/species/linear_order_species.py +169 -0
- sage/combinat/species/misc.py +83 -0
- sage/combinat/species/partition_species.py +290 -0
- sage/combinat/species/permutation_species.py +268 -0
- sage/combinat/species/product_species.py +423 -0
- sage/combinat/species/recursive_species.py +476 -0
- sage/combinat/species/set_species.py +192 -0
- sage/combinat/species/species.py +820 -0
- sage/combinat/species/structure.py +539 -0
- sage/combinat/species/subset_species.py +243 -0
- sage/combinat/species/sum_species.py +225 -0
- sage/combinat/subword.py +564 -0
- sage/combinat/subword_complex.py +2122 -0
- sage/combinat/subword_complex_c.cp314t-win_amd64.pyd +0 -0
- sage/combinat/subword_complex_c.pyx +119 -0
- sage/combinat/super_tableau.py +821 -0
- sage/combinat/superpartition.py +1154 -0
- sage/combinat/symmetric_group_algebra.py +3774 -0
- sage/combinat/symmetric_group_representations.py +1830 -0
- sage/combinat/t_sequences.py +877 -0
- sage/combinat/tableau.py +9506 -0
- sage/combinat/tableau_residues.py +860 -0
- sage/combinat/tableau_tuple.py +5353 -0
- sage/combinat/tiling.py +2432 -0
- sage/combinat/triangles_FHM.py +777 -0
- sage/combinat/tutorial.py +1857 -0
- sage/combinat/vector_partition.py +337 -0
- sage/combinat/words/abstract_word.py +1722 -0
- sage/combinat/words/all.py +59 -0
- sage/combinat/words/alphabet.py +268 -0
- sage/combinat/words/finite_word.py +7201 -0
- sage/combinat/words/infinite_word.py +113 -0
- sage/combinat/words/lyndon_word.py +652 -0
- sage/combinat/words/morphic.py +351 -0
- sage/combinat/words/morphism.py +3878 -0
- sage/combinat/words/paths.py +2932 -0
- sage/combinat/words/shuffle_product.py +278 -0
- sage/combinat/words/suffix_trees.py +1873 -0
- sage/combinat/words/word.py +769 -0
- sage/combinat/words/word_char.cp314t-win_amd64.pyd +0 -0
- sage/combinat/words/word_char.pyx +847 -0
- sage/combinat/words/word_datatypes.cp314t-win_amd64.pyd +0 -0
- sage/combinat/words/word_datatypes.pxd +4 -0
- sage/combinat/words/word_datatypes.pyx +1067 -0
- sage/combinat/words/word_generators.py +2026 -0
- sage/combinat/words/word_infinite_datatypes.py +1218 -0
- sage/combinat/words/word_options.py +99 -0
- sage/combinat/words/words.py +2396 -0
- sage/data_structures/all__sagemath_combinat.py +1 -0
- sage/databases/all__sagemath_combinat.py +13 -0
- sage/databases/findstat.py +4897 -0
- sage/databases/oeis.py +2058 -0
- sage/databases/sloane.py +393 -0
- sage/dynamics/all__sagemath_combinat.py +14 -0
- sage/dynamics/cellular_automata/all.py +7 -0
- sage/dynamics/cellular_automata/catalog.py +34 -0
- sage/dynamics/cellular_automata/elementary.py +612 -0
- sage/dynamics/cellular_automata/glca.py +477 -0
- sage/dynamics/cellular_automata/solitons.py +1463 -0
- sage/dynamics/finite_dynamical_system.py +1249 -0
- sage/dynamics/finite_dynamical_system_catalog.py +382 -0
- sage/games/all.py +7 -0
- sage/games/hexad.py +704 -0
- sage/games/quantumino.py +591 -0
- sage/games/sudoku.py +889 -0
- sage/games/sudoku_backtrack.cp314t-win_amd64.pyd +0 -0
- sage/games/sudoku_backtrack.pyx +189 -0
- sage/groups/all__sagemath_combinat.py +1 -0
- sage/groups/indexed_free_group.py +489 -0
- sage/libs/all__sagemath_combinat.py +6 -0
- sage/libs/lrcalc/__init__.py +1 -0
- sage/libs/lrcalc/lrcalc.py +525 -0
- sage/libs/symmetrica/__init__.py +7 -0
- sage/libs/symmetrica/all.py +101 -0
- sage/libs/symmetrica/kostka.pxi +168 -0
- sage/libs/symmetrica/part.pxi +193 -0
- sage/libs/symmetrica/plet.pxi +42 -0
- sage/libs/symmetrica/sab.pxi +196 -0
- sage/libs/symmetrica/sb.pxi +332 -0
- sage/libs/symmetrica/sc.pxi +192 -0
- sage/libs/symmetrica/schur.pxi +956 -0
- sage/libs/symmetrica/symmetrica.cp314t-win_amd64.pyd +0 -0
- sage/libs/symmetrica/symmetrica.pxi +1172 -0
- sage/libs/symmetrica/symmetrica.pyx +39 -0
- sage/monoids/all.py +13 -0
- sage/monoids/automatic_semigroup.py +1054 -0
- sage/monoids/free_abelian_monoid.py +315 -0
- sage/monoids/free_abelian_monoid_element.cp314t-win_amd64.pyd +0 -0
- sage/monoids/free_abelian_monoid_element.pxd +16 -0
- sage/monoids/free_abelian_monoid_element.pyx +397 -0
- sage/monoids/free_monoid.py +335 -0
- sage/monoids/free_monoid_element.py +431 -0
- sage/monoids/hecke_monoid.py +65 -0
- sage/monoids/string_monoid.py +817 -0
- sage/monoids/string_monoid_element.py +547 -0
- sage/monoids/string_ops.py +143 -0
- sage/monoids/trace_monoid.py +972 -0
- sage/rings/all__sagemath_combinat.py +2 -0
- sage/sat/all.py +4 -0
- sage/sat/boolean_polynomials.py +405 -0
- sage/sat/converters/__init__.py +6 -0
- sage/sat/converters/anf2cnf.py +14 -0
- sage/sat/converters/polybori.py +611 -0
- sage/sat/solvers/__init__.py +5 -0
- sage/sat/solvers/cryptominisat.py +287 -0
- sage/sat/solvers/dimacs.py +783 -0
- sage/sat/solvers/picosat.py +228 -0
- sage/sat/solvers/sat_lp.py +156 -0
- sage/sat/solvers/satsolver.cp314t-win_amd64.pyd +0 -0
- sage/sat/solvers/satsolver.pxd +3 -0
- sage/sat/solvers/satsolver.pyx +405 -0
|
@@ -0,0 +1,489 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
r"""
|
|
3
|
+
Ribbon shaped tableaux
|
|
4
|
+
"""
|
|
5
|
+
# ****************************************************************************
|
|
6
|
+
# Copyright (C) 2007 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
|
+
# https://www.gnu.org/licenses/
|
|
18
|
+
# ****************************************************************************
|
|
19
|
+
|
|
20
|
+
from sage.combinat.skew_tableau import SkewTableau, SkewTableaux, StandardSkewTableaux
|
|
21
|
+
from sage.combinat.tableau import Tableaux
|
|
22
|
+
from sage.combinat.permutation import descents_composition_first, descents_composition_list, descents_composition_last
|
|
23
|
+
from sage.rings.integer import Integer
|
|
24
|
+
from sage.categories.infinite_enumerated_sets import InfiniteEnumeratedSets
|
|
25
|
+
from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets
|
|
26
|
+
from sage.categories.sets_cat import Sets
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class RibbonShapedTableau(SkewTableau):
|
|
30
|
+
r"""
|
|
31
|
+
A ribbon shaped tableau.
|
|
32
|
+
|
|
33
|
+
For the purposes of this class, a ribbon shaped tableau is a skew
|
|
34
|
+
tableau whose shape is a skew partition which:
|
|
35
|
+
|
|
36
|
+
- has at least one cell in row `1`;
|
|
37
|
+
|
|
38
|
+
- has at least one cell in column `1`;
|
|
39
|
+
|
|
40
|
+
- has exactly one cell in each of `q` consecutive diagonals, for
|
|
41
|
+
some nonnegative integer `q`.
|
|
42
|
+
|
|
43
|
+
A ribbon is given by a list of the rows from top to bottom.
|
|
44
|
+
|
|
45
|
+
EXAMPLES::
|
|
46
|
+
|
|
47
|
+
sage: x = RibbonShapedTableau([[None, None, None, 2, 3], [None, 1, 4, 5], [3, 2]]); x
|
|
48
|
+
[[None, None, None, 2, 3], [None, 1, 4, 5], [3, 2]]
|
|
49
|
+
sage: x.pp()
|
|
50
|
+
. . . 2 3
|
|
51
|
+
. 1 4 5
|
|
52
|
+
3 2
|
|
53
|
+
sage: x.shape()
|
|
54
|
+
[5, 4, 2] / [3, 1]
|
|
55
|
+
|
|
56
|
+
The entries labeled by ``None`` correspond to the inner partition.
|
|
57
|
+
Using ``None`` is optional; the entries will be shifted accordingly. ::
|
|
58
|
+
|
|
59
|
+
sage: x = RibbonShapedTableau([[2,3],[1,4,5],[3,2]]); x.pp()
|
|
60
|
+
. . . 2 3
|
|
61
|
+
. 1 4 5
|
|
62
|
+
3 2
|
|
63
|
+
|
|
64
|
+
TESTS::
|
|
65
|
+
|
|
66
|
+
sage: r = RibbonShapedTableau([[1], [2,3], [4, 5, 6]])
|
|
67
|
+
sage: r.to_permutation()
|
|
68
|
+
[4, 5, 6, 2, 3, 1]
|
|
69
|
+
|
|
70
|
+
sage: RibbonShapedTableau([[1,2],[3,4]]).evaluation()
|
|
71
|
+
[1, 1, 1, 1]
|
|
72
|
+
"""
|
|
73
|
+
@staticmethod
|
|
74
|
+
def __classcall_private__(cls, rows):
|
|
75
|
+
r"""
|
|
76
|
+
Return a ribbon shaped tableau object.
|
|
77
|
+
|
|
78
|
+
EXAMPLES::
|
|
79
|
+
|
|
80
|
+
sage: RibbonShapedTableau([[2,3],[1,4,5]])
|
|
81
|
+
[[None, None, 2, 3], [1, 4, 5]]
|
|
82
|
+
|
|
83
|
+
TESTS::
|
|
84
|
+
|
|
85
|
+
sage: RibbonShapedTableau([4,5])
|
|
86
|
+
Traceback (most recent call last):
|
|
87
|
+
...
|
|
88
|
+
TypeError: rows must be lists of positive integers
|
|
89
|
+
|
|
90
|
+
sage: RibbonShapedTableau([[2,3],[-4,5]])
|
|
91
|
+
Traceback (most recent call last):
|
|
92
|
+
...
|
|
93
|
+
TypeError: r must be a list of positive integers
|
|
94
|
+
"""
|
|
95
|
+
try:
|
|
96
|
+
r = [tuple(r) for r in rows]
|
|
97
|
+
except TypeError:
|
|
98
|
+
raise TypeError("rows must be lists of positive integers")
|
|
99
|
+
if not r:
|
|
100
|
+
return StandardRibbonShapedTableaux()(r)
|
|
101
|
+
if all(j is None or (isinstance(j, (int, Integer)) and j > 0)
|
|
102
|
+
for i in r for j in i):
|
|
103
|
+
return StandardRibbonShapedTableaux()(r)
|
|
104
|
+
raise TypeError("r must be a list of positive integers")
|
|
105
|
+
|
|
106
|
+
def __init__(self, parent, t):
|
|
107
|
+
"""
|
|
108
|
+
Initialize ``self``.
|
|
109
|
+
|
|
110
|
+
EXAMPLES::
|
|
111
|
+
|
|
112
|
+
sage: R = RibbonShapedTableau([[2,3],[1,4,5]])
|
|
113
|
+
sage: TestSuite(R).run()
|
|
114
|
+
"""
|
|
115
|
+
if not isinstance(t, SkewTableau):
|
|
116
|
+
# scrubbing None
|
|
117
|
+
t = [[i for i in row if i is not None] for row in t]
|
|
118
|
+
|
|
119
|
+
st = []
|
|
120
|
+
space_count = 0
|
|
121
|
+
for row in reversed(t):
|
|
122
|
+
st.append([None] * space_count + row)
|
|
123
|
+
space_count += len(row) - 1
|
|
124
|
+
st.reverse()
|
|
125
|
+
t = st
|
|
126
|
+
else:
|
|
127
|
+
t = list(t)
|
|
128
|
+
|
|
129
|
+
SkewTableau.__init__(self, parent, t)
|
|
130
|
+
|
|
131
|
+
def height(self):
|
|
132
|
+
"""
|
|
133
|
+
Return the height of ``self``.
|
|
134
|
+
|
|
135
|
+
The height is given by the number of rows in the outer partition.
|
|
136
|
+
|
|
137
|
+
EXAMPLES::
|
|
138
|
+
|
|
139
|
+
sage: RibbonShapedTableau([[2,3],[1,4,5]]).height()
|
|
140
|
+
2
|
|
141
|
+
"""
|
|
142
|
+
return len(self.outer_shape())
|
|
143
|
+
|
|
144
|
+
def spin(self):
|
|
145
|
+
"""
|
|
146
|
+
Return the spin of ``self``.
|
|
147
|
+
|
|
148
|
+
EXAMPLES::
|
|
149
|
+
|
|
150
|
+
sage: RibbonShapedTableau([[2,3],[1,4,5]]).spin()
|
|
151
|
+
1/2
|
|
152
|
+
"""
|
|
153
|
+
return Integer(self.height() - 1) / 2
|
|
154
|
+
|
|
155
|
+
def width(self):
|
|
156
|
+
"""
|
|
157
|
+
Return the width of the ribbon.
|
|
158
|
+
|
|
159
|
+
This is given by the length of the longest row in the outer partition.
|
|
160
|
+
|
|
161
|
+
EXAMPLES::
|
|
162
|
+
|
|
163
|
+
sage: RibbonShapedTableau([[2,3],[1,4,5]]).width()
|
|
164
|
+
4
|
|
165
|
+
sage: RibbonShapedTableau([]).width()
|
|
166
|
+
0
|
|
167
|
+
"""
|
|
168
|
+
return len(self[0]) if self else 0
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
class RibbonShapedTableaux(SkewTableaux):
|
|
172
|
+
"""
|
|
173
|
+
The set of all ribbon shaped tableaux.
|
|
174
|
+
"""
|
|
175
|
+
@staticmethod
|
|
176
|
+
def __classcall_private__(cls, shape=None, **kwds):
|
|
177
|
+
"""
|
|
178
|
+
Normalize input to ensure a unique representation and pick the correct
|
|
179
|
+
class based on input.
|
|
180
|
+
|
|
181
|
+
The ``shape`` parameter is currently ignored.
|
|
182
|
+
|
|
183
|
+
EXAMPLES::
|
|
184
|
+
|
|
185
|
+
sage: S1 = RibbonShapedTableaux([4, 2, 2, 1])
|
|
186
|
+
sage: S2 = RibbonShapedTableaux((4, 2, 2, 1))
|
|
187
|
+
sage: S1 is S2
|
|
188
|
+
True
|
|
189
|
+
"""
|
|
190
|
+
# if shape is not None:
|
|
191
|
+
# from sage.combinat.partition import Partition
|
|
192
|
+
# return RibbonShapedTableaux_shape(Partition(shape))
|
|
193
|
+
|
|
194
|
+
# Otherwise arg0 takes the place of the category in pickling
|
|
195
|
+
return super().__classcall__(cls, **kwds)
|
|
196
|
+
|
|
197
|
+
def __init__(self, category=None):
|
|
198
|
+
"""
|
|
199
|
+
Initialize ``self``.
|
|
200
|
+
|
|
201
|
+
EXAMPLES::
|
|
202
|
+
|
|
203
|
+
sage: S = RibbonShapedTableaux() # needs sage.graphs
|
|
204
|
+
sage: TestSuite(S).run() # needs sage.graphs
|
|
205
|
+
"""
|
|
206
|
+
if category is None:
|
|
207
|
+
category = Sets()
|
|
208
|
+
|
|
209
|
+
SkewTableaux.__init__(self, category=category)
|
|
210
|
+
|
|
211
|
+
def _repr_(self):
|
|
212
|
+
"""
|
|
213
|
+
TESTS::
|
|
214
|
+
|
|
215
|
+
sage: repr(RibbonShapedTableaux()) # indirect doctest
|
|
216
|
+
'Ribbon shaped tableaux'
|
|
217
|
+
"""
|
|
218
|
+
return "Ribbon shaped tableaux"
|
|
219
|
+
|
|
220
|
+
Element = RibbonShapedTableau
|
|
221
|
+
options = Tableaux.options
|
|
222
|
+
|
|
223
|
+
def from_shape_and_word(self, shape, word):
|
|
224
|
+
"""
|
|
225
|
+
Return the ribbon corresponding to the given ribbon shape and word.
|
|
226
|
+
|
|
227
|
+
EXAMPLES::
|
|
228
|
+
|
|
229
|
+
sage: RibbonShapedTableaux().from_shape_and_word([1,3],[1,3,3,7])
|
|
230
|
+
[[None, None, 1], [3, 3, 7]]
|
|
231
|
+
"""
|
|
232
|
+
pos = 0
|
|
233
|
+
r = []
|
|
234
|
+
for l in shape:
|
|
235
|
+
r.append(word[pos:pos + l])
|
|
236
|
+
pos += l
|
|
237
|
+
return self.element_class(self, r)
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
class StandardRibbonShapedTableaux(StandardSkewTableaux):
|
|
241
|
+
"""
|
|
242
|
+
The set of all standard ribbon shaped tableaux.
|
|
243
|
+
|
|
244
|
+
INPUT:
|
|
245
|
+
|
|
246
|
+
- ``shape`` -- (optional) the composition shape of the rows
|
|
247
|
+
"""
|
|
248
|
+
@staticmethod
|
|
249
|
+
def __classcall_private__(cls, shape=None, **kwds):
|
|
250
|
+
"""
|
|
251
|
+
Normalize input to ensure a unique representation and pick the correct
|
|
252
|
+
class based on input.
|
|
253
|
+
|
|
254
|
+
EXAMPLES::
|
|
255
|
+
|
|
256
|
+
sage: S1 = StandardRibbonShapedTableaux([4, 2, 2, 1])
|
|
257
|
+
sage: S2 = StandardRibbonShapedTableaux((4, 2, 2, 1))
|
|
258
|
+
sage: S1 is S2
|
|
259
|
+
True
|
|
260
|
+
"""
|
|
261
|
+
if shape is not None:
|
|
262
|
+
from sage.combinat.partition import Partition
|
|
263
|
+
return StandardRibbonShapedTableaux_shape(Partition(shape))
|
|
264
|
+
|
|
265
|
+
# Otherwise arg0 takes the place of the category in pickling
|
|
266
|
+
return super().__classcall__(cls, **kwds)
|
|
267
|
+
|
|
268
|
+
def __init__(self, category=None):
|
|
269
|
+
"""
|
|
270
|
+
Initialize ``self``.
|
|
271
|
+
|
|
272
|
+
EXAMPLES::
|
|
273
|
+
|
|
274
|
+
sage: # needs sage.graphs sage.modules
|
|
275
|
+
sage: S = StandardRibbonShapedTableaux()
|
|
276
|
+
sage: TestSuite(S).run()
|
|
277
|
+
"""
|
|
278
|
+
if category is None:
|
|
279
|
+
category = InfiniteEnumeratedSets()
|
|
280
|
+
|
|
281
|
+
StandardSkewTableaux.__init__(self, category=category)
|
|
282
|
+
|
|
283
|
+
def _repr_(self):
|
|
284
|
+
"""
|
|
285
|
+
TESTS::
|
|
286
|
+
|
|
287
|
+
sage: repr(StandardRibbonShapedTableaux()) # indirect doctest
|
|
288
|
+
'Standard ribbon shaped tableaux'
|
|
289
|
+
"""
|
|
290
|
+
return "Standard ribbon shaped tableaux"
|
|
291
|
+
|
|
292
|
+
def __iter__(self):
|
|
293
|
+
"""
|
|
294
|
+
Iterate through ``self``.
|
|
295
|
+
|
|
296
|
+
EXAMPLES::
|
|
297
|
+
|
|
298
|
+
sage: # needs sage.graphs sage.modules
|
|
299
|
+
sage: it = StandardRibbonShapedTableaux().__iter__()
|
|
300
|
+
sage: [next(it) for x in range(10)]
|
|
301
|
+
[[],
|
|
302
|
+
[[1]],
|
|
303
|
+
[[1, 2]],
|
|
304
|
+
[[1], [2]],
|
|
305
|
+
[[1, 2, 3]],
|
|
306
|
+
[[None, 1], [2, 3]],
|
|
307
|
+
[[None, 2], [1, 3]],
|
|
308
|
+
[[1], [2], [3]],
|
|
309
|
+
[[1, 2, 3, 4]],
|
|
310
|
+
[[None, None, 1], [2, 3, 4]]]
|
|
311
|
+
"""
|
|
312
|
+
from sage.combinat.partition import _Partitions
|
|
313
|
+
for p in _Partitions:
|
|
314
|
+
for r in StandardRibbonShapedTableaux_shape(p):
|
|
315
|
+
yield self.element_class(self, r)
|
|
316
|
+
|
|
317
|
+
Element = RibbonShapedTableau
|
|
318
|
+
options = Tableaux.options
|
|
319
|
+
|
|
320
|
+
def from_shape_and_word(self, shape, word):
|
|
321
|
+
"""
|
|
322
|
+
Return the ribbon corresponding to the given ribbon shape and word.
|
|
323
|
+
|
|
324
|
+
EXAMPLES::
|
|
325
|
+
|
|
326
|
+
sage: StandardRibbonShapedTableaux().from_shape_and_word([2,3],[1,2,3,4,5])
|
|
327
|
+
[[None, None, 1, 2], [3, 4, 5]]
|
|
328
|
+
"""
|
|
329
|
+
pos = 0
|
|
330
|
+
r = []
|
|
331
|
+
for l in shape:
|
|
332
|
+
r.append(word[pos:pos + l])
|
|
333
|
+
pos += l
|
|
334
|
+
return self.element_class(self, r)
|
|
335
|
+
|
|
336
|
+
def from_permutation(self, p):
|
|
337
|
+
"""
|
|
338
|
+
Return a standard ribbon of size ``len(p)`` from a permutation ``p``. The
|
|
339
|
+
lengths of each row are given by the distance between the descents
|
|
340
|
+
of the permutation ``p``.
|
|
341
|
+
|
|
342
|
+
EXAMPLES::
|
|
343
|
+
|
|
344
|
+
sage: import sage.combinat.ribbon_shaped_tableau as rst
|
|
345
|
+
sage: [StandardRibbonShapedTableaux().from_permutation(p)
|
|
346
|
+
....: for p in Permutations(3)]
|
|
347
|
+
[[[1, 2, 3]],
|
|
348
|
+
[[None, 2], [1, 3]],
|
|
349
|
+
[[1, 3], [2]],
|
|
350
|
+
[[None, 1], [2, 3]],
|
|
351
|
+
[[1, 2], [3]],
|
|
352
|
+
[[1], [2], [3]]]
|
|
353
|
+
"""
|
|
354
|
+
if not p:
|
|
355
|
+
return self.element_class(self, [])
|
|
356
|
+
|
|
357
|
+
comp = p.descents()
|
|
358
|
+
|
|
359
|
+
if not comp:
|
|
360
|
+
return self.element_class(self, [p[:]])
|
|
361
|
+
|
|
362
|
+
r = [[p[j] for j in range(comp[0])]]
|
|
363
|
+
r.extend([p[j] for j in range(comp[i], comp[i + 1])]
|
|
364
|
+
for i in range(len(comp) - 1))
|
|
365
|
+
r.append([p[j] for j in range(comp[-1], len(p))])
|
|
366
|
+
r.reverse()
|
|
367
|
+
return self.element_class(self, r)
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
class StandardRibbonShapedTableaux_shape(StandardRibbonShapedTableaux):
|
|
371
|
+
"""
|
|
372
|
+
Class of standard ribbon shaped tableaux of ribbon shape ``shape``.
|
|
373
|
+
|
|
374
|
+
EXAMPLES::
|
|
375
|
+
|
|
376
|
+
sage: StandardRibbonShapedTableaux([2,2])
|
|
377
|
+
Standard ribbon shaped tableaux of shape [2, 2]
|
|
378
|
+
sage: StandardRibbonShapedTableaux([2,2]).first()
|
|
379
|
+
[[None, 2, 4], [1, 3]]
|
|
380
|
+
sage: StandardRibbonShapedTableaux([2,2]).last()
|
|
381
|
+
[[None, 1, 2], [3, 4]]
|
|
382
|
+
|
|
383
|
+
sage: # needs sage.graphs sage.modules
|
|
384
|
+
sage: StandardRibbonShapedTableaux([2,2]).cardinality()
|
|
385
|
+
5
|
|
386
|
+
sage: StandardRibbonShapedTableaux([2,2]).list()
|
|
387
|
+
[[[None, 1, 3], [2, 4]],
|
|
388
|
+
[[None, 1, 2], [3, 4]],
|
|
389
|
+
[[None, 2, 3], [1, 4]],
|
|
390
|
+
[[None, 2, 4], [1, 3]],
|
|
391
|
+
[[None, 1, 4], [2, 3]]]
|
|
392
|
+
sage: StandardRibbonShapedTableaux([3,2,2]).cardinality()
|
|
393
|
+
155
|
|
394
|
+
"""
|
|
395
|
+
@staticmethod
|
|
396
|
+
def __classcall_private__(cls, shape):
|
|
397
|
+
"""
|
|
398
|
+
Normalize input to ensure a unique representation.
|
|
399
|
+
|
|
400
|
+
EXAMPLES::
|
|
401
|
+
|
|
402
|
+
sage: S = StandardRibbonShapedTableaux([2,2])
|
|
403
|
+
sage: S2 = StandardRibbonShapedTableaux((2,2))
|
|
404
|
+
sage: S is S2
|
|
405
|
+
True
|
|
406
|
+
"""
|
|
407
|
+
return super(StandardRibbonShapedTableaux, cls).__classcall__(cls, tuple(shape))
|
|
408
|
+
|
|
409
|
+
def __init__(self, shape):
|
|
410
|
+
"""
|
|
411
|
+
TESTS::
|
|
412
|
+
|
|
413
|
+
sage: S = StandardRibbonShapedTableaux([2,2])
|
|
414
|
+
sage: TestSuite(S).run() # needs sage.graphs sage.modules
|
|
415
|
+
"""
|
|
416
|
+
self.shape = shape
|
|
417
|
+
StandardRibbonShapedTableaux.__init__(self, FiniteEnumeratedSets())
|
|
418
|
+
|
|
419
|
+
def _repr_(self):
|
|
420
|
+
"""
|
|
421
|
+
TESTS::
|
|
422
|
+
|
|
423
|
+
sage: StandardRibbonShapedTableaux([2,2])
|
|
424
|
+
Standard ribbon shaped tableaux of shape [2, 2]
|
|
425
|
+
"""
|
|
426
|
+
return "Standard ribbon shaped tableaux of shape %s" % list(self.shape)
|
|
427
|
+
|
|
428
|
+
def first(self):
|
|
429
|
+
"""
|
|
430
|
+
Return the first standard ribbon of ``self``.
|
|
431
|
+
|
|
432
|
+
EXAMPLES::
|
|
433
|
+
|
|
434
|
+
sage: StandardRibbonShapedTableaux([2,2]).first()
|
|
435
|
+
[[None, 2, 4], [1, 3]]
|
|
436
|
+
"""
|
|
437
|
+
return self.from_permutation(descents_composition_first(self.shape))
|
|
438
|
+
|
|
439
|
+
def last(self):
|
|
440
|
+
"""
|
|
441
|
+
Return the last standard ribbon of ``self``.
|
|
442
|
+
|
|
443
|
+
EXAMPLES::
|
|
444
|
+
|
|
445
|
+
sage: StandardRibbonShapedTableaux([2,2]).last()
|
|
446
|
+
[[None, 1, 2], [3, 4]]
|
|
447
|
+
"""
|
|
448
|
+
return self.from_permutation(descents_composition_last(self.shape))
|
|
449
|
+
|
|
450
|
+
def __iter__(self):
|
|
451
|
+
"""
|
|
452
|
+
An iterator for the standard ribbon of ``self``.
|
|
453
|
+
|
|
454
|
+
EXAMPLES::
|
|
455
|
+
|
|
456
|
+
sage: [t for t in StandardRibbonShapedTableaux([2,2])] # needs sage.graphs sage.modules
|
|
457
|
+
[[[None, 1, 3], [2, 4]],
|
|
458
|
+
[[None, 1, 2], [3, 4]],
|
|
459
|
+
[[None, 2, 3], [1, 4]],
|
|
460
|
+
[[None, 2, 4], [1, 3]],
|
|
461
|
+
[[None, 1, 4], [2, 3]]]
|
|
462
|
+
"""
|
|
463
|
+
for p in descents_composition_list(self.shape):
|
|
464
|
+
yield self.from_permutation(p)
|
|
465
|
+
|
|
466
|
+
|
|
467
|
+
class Ribbon_class(RibbonShapedTableau):
|
|
468
|
+
"""
|
|
469
|
+
This exists solely for unpickling ``Ribbon_class`` objects.
|
|
470
|
+
"""
|
|
471
|
+
|
|
472
|
+
def __setstate__(self, state):
|
|
473
|
+
r"""
|
|
474
|
+
Unpickle old ``Ribbon_class`` objects.
|
|
475
|
+
|
|
476
|
+
EXAMPLES::
|
|
477
|
+
|
|
478
|
+
sage: loads(b'x\x9ck`J.NLO\xd5K\xce\xcfM\xca\xccK,\xd1+\xcaLJ\xca\xcf\xe3\n\x02S\xf1\xc99\x89\xc5\xc5\\\x85\x8c\x9a\x8d\x85L\xb5\x85\xcc\x1a\xa1\xac\xf1\x19\x89\xc5\x19\x85,~@VNfqI!kl!\x9bFl!\xbb\x06\xc4\x9c\xa2\xcc\xbc\xf4b\xbd\xcc\xbc\x92\xd4\xf4\xd4"\xae\xdc\xc4\xec\xd4x\x18\xa7\x90#\x94\xd1\xb05\xa8\x903\x03\xc80\x022\xb8Rc\x0b\xb95@<c \x8f\x07\xc40\x012xSSK\x93\xf4\x00l\x811\x17')
|
|
479
|
+
[[None, 1, 2], [3, 4]]
|
|
480
|
+
sage: loads(dumps( RibbonShapedTableau([[3,2,1], [1,1]]) )) # indirect doctest
|
|
481
|
+
[[None, 3, 2, 1], [1, 1]]
|
|
482
|
+
"""
|
|
483
|
+
self.__class__ = RibbonShapedTableau
|
|
484
|
+
self.__init__(RibbonShapedTableaux(), state['_list'])
|
|
485
|
+
|
|
486
|
+
|
|
487
|
+
from sage.misc.persist import register_unpickle_override
|
|
488
|
+
register_unpickle_override('sage.combinat.ribbon', 'Ribbon_class', Ribbon_class)
|
|
489
|
+
register_unpickle_override('sage.combinat.ribbon', 'StandardRibbons_shape', StandardRibbonShapedTableaux)
|