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
sage/databases/sloane.py
ADDED
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
"""
|
|
3
|
+
Local copy of the On-Line Encyclopedia of Integer Sequences
|
|
4
|
+
|
|
5
|
+
The ``SloaneEncyclopedia`` object provides access to a local copy of the database
|
|
6
|
+
containing only the sequences and their names. To use this, you must download
|
|
7
|
+
and install the database using ``SloaneEncyclopedia.install()``, or
|
|
8
|
+
``SloaneEncyclopedia.install_from_gz()`` if you have already downloaded the
|
|
9
|
+
database manually.
|
|
10
|
+
|
|
11
|
+
To look up a sequence, type
|
|
12
|
+
|
|
13
|
+
::
|
|
14
|
+
|
|
15
|
+
sage: SloaneEncyclopedia[60843] # optional - sloane_database
|
|
16
|
+
[1, 6, 21, 107, 47176870]
|
|
17
|
+
|
|
18
|
+
To get the name of a sequence, type
|
|
19
|
+
|
|
20
|
+
::
|
|
21
|
+
|
|
22
|
+
sage: SloaneEncyclopedia.sequence_name(1) # optional - sloane_database
|
|
23
|
+
'Number of groups of order n.'
|
|
24
|
+
|
|
25
|
+
To search locally for a particular subsequence, type
|
|
26
|
+
|
|
27
|
+
::
|
|
28
|
+
|
|
29
|
+
sage: SloaneEncyclopedia.find([1,2,3,4,5], 1) # optional - sloane_database
|
|
30
|
+
[(15, [1, 2, 3, 4, 5, 7, 7, 8, 9, 11, 11, 13, 13, 16, 16, 16, 17, 19, 19, 23, 23, 23, 23, 25, 25, 27, 27, 29, 29, 31, 31, 32, 37, 37, 37, 37, 37, 41, 41, 41, 41, 43, 43, 47, 47, 47, 47, 49, 49, 53, 53, 53, 53, 59, 59, 59, 59, 59, 59, 61, 61, 64, 64, 64, 67, 67, 67, 71, 71, 71, 71, 73])]
|
|
31
|
+
|
|
32
|
+
The default maximum number of results is 30, but to return up to
|
|
33
|
+
100, type
|
|
34
|
+
|
|
35
|
+
::
|
|
36
|
+
|
|
37
|
+
sage: SloaneEncyclopedia.find([1,2,3,4,5], 100) # optional - sloane_database
|
|
38
|
+
[(15, [1, 2, 3, 4, 5, 7, 7, 8, 9, 11, 11, ...
|
|
39
|
+
|
|
40
|
+
Results in either case are of the form [ (number, list) ].
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
.. SEEALSO::
|
|
44
|
+
|
|
45
|
+
- If you want to get more informations relative to a sequence (references,
|
|
46
|
+
links, examples, programs, ...), you can use the On-Line Encyclopedia of
|
|
47
|
+
Integer Sequences provided by the :mod:`OEIS <sage.databases.oeis>`
|
|
48
|
+
module.
|
|
49
|
+
- Some infinite OEIS sequences are implemented in Sage, via the
|
|
50
|
+
:mod:`sloane_functions <sage.combinat.sloane_functions>` module.
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
AUTHORS:
|
|
54
|
+
|
|
55
|
+
- Steven Sivek (2005-12-22): first version
|
|
56
|
+
|
|
57
|
+
- Steven Sivek (2006-02-07): updated to correctly handle the new
|
|
58
|
+
search form on the Sloane website, and it is now also smarter about
|
|
59
|
+
loading the local database in that it does not convert a sequence
|
|
60
|
+
from string form to a list of integers until absolutely necessary.
|
|
61
|
+
This seems to cut the loading time roughly in half.
|
|
62
|
+
|
|
63
|
+
- Steven Sivek (2009-12-22): added the SloaneEncyclopedia functions
|
|
64
|
+
install() and install_from_gz() so users can get the latest versions
|
|
65
|
+
of the OEIS without having to get an updated spkg; added
|
|
66
|
+
sequence_name() to return the description of a sequence; and changed
|
|
67
|
+
the data type for elements of each sequence from int to Integer.
|
|
68
|
+
|
|
69
|
+
- Thierry Monteil (2012-02-10): deprecated dead code and update related doc and
|
|
70
|
+
tests.
|
|
71
|
+
"""
|
|
72
|
+
|
|
73
|
+
# ****************************************************************************
|
|
74
|
+
#
|
|
75
|
+
# Sage: Copyright (C) 2005-2006 William Stein <wstein@gmail.com>
|
|
76
|
+
# and Steven Sivek <ssivek@mit.edu>
|
|
77
|
+
#
|
|
78
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
79
|
+
#
|
|
80
|
+
# https://www.gnu.org/licenses/
|
|
81
|
+
# ****************************************************************************
|
|
82
|
+
|
|
83
|
+
import bz2
|
|
84
|
+
import os
|
|
85
|
+
import re
|
|
86
|
+
|
|
87
|
+
from urllib.request import urlretrieve
|
|
88
|
+
import ssl
|
|
89
|
+
|
|
90
|
+
from sage.misc.verbose import verbose
|
|
91
|
+
from sage.env import SAGE_SHARE
|
|
92
|
+
from sage.rings.integer_ring import ZZ
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
class SloaneEncyclopediaClass:
|
|
96
|
+
"""
|
|
97
|
+
A local copy of the Sloane Online Encyclopedia of Integer Sequences
|
|
98
|
+
that contains only the sequence numbers and the sequences
|
|
99
|
+
themselves.
|
|
100
|
+
"""
|
|
101
|
+
def __init__(self):
|
|
102
|
+
"""
|
|
103
|
+
Initialize the database but do not load any of the data.
|
|
104
|
+
"""
|
|
105
|
+
self.__path__ = os.path.join(SAGE_SHARE, 'sloane')
|
|
106
|
+
self.__file__ = os.path.join(self.__path__, 'sloane-oeis.bz2')
|
|
107
|
+
self.__file_names__ = os.path.join(self.__path__, 'sloane-names.bz2')
|
|
108
|
+
self.__loaded__ = False
|
|
109
|
+
self.__loaded_names__ = False
|
|
110
|
+
|
|
111
|
+
def __repr__(self):
|
|
112
|
+
"""
|
|
113
|
+
String representation of this database.
|
|
114
|
+
|
|
115
|
+
OUTPUT: string
|
|
116
|
+
"""
|
|
117
|
+
return "Local copy of Sloane Online Encyclopedia of Integer Sequences"
|
|
118
|
+
|
|
119
|
+
def __iter__(self):
|
|
120
|
+
"""
|
|
121
|
+
Return an iterator through the encyclopedia. Elements are of the
|
|
122
|
+
form [number, sequence].
|
|
123
|
+
"""
|
|
124
|
+
for i in self.__data__:
|
|
125
|
+
yield [i, self[i]]
|
|
126
|
+
|
|
127
|
+
def __getitem__(self, N):
|
|
128
|
+
"""
|
|
129
|
+
Return sequence N in the encyclopedia. If sequence N does not
|
|
130
|
+
exist, return ``[]``.
|
|
131
|
+
|
|
132
|
+
INPUT:
|
|
133
|
+
|
|
134
|
+
- ``N`` -- integer
|
|
135
|
+
|
|
136
|
+
OUTPUT: list
|
|
137
|
+
"""
|
|
138
|
+
self.load()
|
|
139
|
+
if N not in self.__data__: # sequence N does not exist
|
|
140
|
+
return []
|
|
141
|
+
if self.__data__[N][1] is None: # list N has not been created yet
|
|
142
|
+
list = self.__data__[N][2].strip(',').split(',')
|
|
143
|
+
self.__data__[N][1] = [ZZ(n) for n in list]
|
|
144
|
+
return self.__data__[N][1]
|
|
145
|
+
|
|
146
|
+
def __len__(self):
|
|
147
|
+
"""
|
|
148
|
+
Return the number of sequences in the encyclopedia.
|
|
149
|
+
"""
|
|
150
|
+
self.load()
|
|
151
|
+
return len(self.__data__)
|
|
152
|
+
|
|
153
|
+
def is_installed(self):
|
|
154
|
+
"""
|
|
155
|
+
Check if a local copy of the encyclopedia is installed.
|
|
156
|
+
|
|
157
|
+
EXAMPLES::
|
|
158
|
+
|
|
159
|
+
sage: SloaneEncyclopedia.is_installed() # optional - sloane_database
|
|
160
|
+
True
|
|
161
|
+
"""
|
|
162
|
+
return os.path.exists(self.__file__) and os.path.exists(self.__file_names__)
|
|
163
|
+
|
|
164
|
+
def find(self, seq, maxresults=30):
|
|
165
|
+
"""
|
|
166
|
+
Return a list of all sequences which have seq as a subsequence, up
|
|
167
|
+
to maxresults results. Sequences are returned in the form (number,
|
|
168
|
+
list).
|
|
169
|
+
|
|
170
|
+
INPUT:
|
|
171
|
+
|
|
172
|
+
- ``seq`` -- list
|
|
173
|
+
|
|
174
|
+
- ``maxresults`` -- integer
|
|
175
|
+
|
|
176
|
+
OUTPUT: list of 2-tuples (i, v), where v is a sequence with seq as
|
|
177
|
+
a subsequence.
|
|
178
|
+
"""
|
|
179
|
+
self.load()
|
|
180
|
+
|
|
181
|
+
answer, nanswer = [], 0
|
|
182
|
+
pattern = re.sub(r'[\[\]]', ',', str(seq).replace(' ', ''))
|
|
183
|
+
for i in self.__data__:
|
|
184
|
+
if self.__data__[i][2].find(pattern) != -1:
|
|
185
|
+
answer.append((i, self[i]))
|
|
186
|
+
nanswer = nanswer + 1
|
|
187
|
+
if nanswer == maxresults:
|
|
188
|
+
return answer
|
|
189
|
+
|
|
190
|
+
return answer
|
|
191
|
+
|
|
192
|
+
def install(self, oeis_url='https://oeis.org/stripped.gz',
|
|
193
|
+
names_url='https://oeis.org/names.gz', overwrite=False):
|
|
194
|
+
"""
|
|
195
|
+
Download and install the online encyclopedia, raising an IOError if
|
|
196
|
+
either step fails.
|
|
197
|
+
|
|
198
|
+
INPUT:
|
|
199
|
+
|
|
200
|
+
- ``oeis_url`` -- string (default: ``'https://oeis.org...'``)
|
|
201
|
+
The URL of the stripped.gz encyclopedia file
|
|
202
|
+
|
|
203
|
+
- ``names_url`` -- string (default: ``'https://oeis.org...'``)
|
|
204
|
+
The URL of the names.gz encyclopedia file. If you do not want to
|
|
205
|
+
download this file, set names_url=None.
|
|
206
|
+
|
|
207
|
+
- ``overwrite`` -- boolean (default: ``False``); if the encyclopedia is
|
|
208
|
+
already installed and overwrite=True, download and install the latest
|
|
209
|
+
version over the installed one
|
|
210
|
+
"""
|
|
211
|
+
# See if the encyclopedia already exists
|
|
212
|
+
if not overwrite and os.path.exists(self.__file__):
|
|
213
|
+
raise OSError("Sloane encyclopedia is already installed")
|
|
214
|
+
|
|
215
|
+
tm = verbose("Downloading stripped version of Sloane encyclopedia")
|
|
216
|
+
ssl._create_default_https_context = ssl.create_default_context
|
|
217
|
+
try:
|
|
218
|
+
fname, _ = urlretrieve(oeis_url)
|
|
219
|
+
except OSError as msg:
|
|
220
|
+
raise OSError("%s\nError fetching the following website:\n %s\nTry checking your internet connection." % (msg, oeis_url))
|
|
221
|
+
|
|
222
|
+
if names_url is not None:
|
|
223
|
+
try:
|
|
224
|
+
nname, _ = urlretrieve(names_url)
|
|
225
|
+
except OSError as msg:
|
|
226
|
+
raise OSError("%s\nError fetching the following website:\n %s\nTry checking your internet connection." % (msg, names_url))
|
|
227
|
+
else:
|
|
228
|
+
nname = None
|
|
229
|
+
verbose("Finished downloading", tm)
|
|
230
|
+
|
|
231
|
+
self.install_from_gz(fname, nname, overwrite)
|
|
232
|
+
# Delete the temporary downloaded files
|
|
233
|
+
os.remove(fname)
|
|
234
|
+
if nname is not None:
|
|
235
|
+
os.remove(nname)
|
|
236
|
+
|
|
237
|
+
def install_from_gz(self, stripped_file, names_file, overwrite=False):
|
|
238
|
+
"""
|
|
239
|
+
Install the online encyclopedia from a local stripped.gz file.
|
|
240
|
+
|
|
241
|
+
INPUT:
|
|
242
|
+
|
|
243
|
+
- ``stripped_file`` -- string; the name of the stripped.gz OEIS file
|
|
244
|
+
|
|
245
|
+
- ``names_file`` -- string; the name of the names.gz OEIS file, or
|
|
246
|
+
None if the user does not want it installed
|
|
247
|
+
|
|
248
|
+
- ``overwrite`` -- boolean (default: ``False``); if the encyclopedia is
|
|
249
|
+
already installed and ``overwrite=True``, install 'filename' over the
|
|
250
|
+
old encyclopedia
|
|
251
|
+
"""
|
|
252
|
+
if not overwrite and os.path.exists(self.__file__):
|
|
253
|
+
raise OSError("Sloane encyclopedia is already installed")
|
|
254
|
+
|
|
255
|
+
copy_gz_file(stripped_file, self.__file__)
|
|
256
|
+
|
|
257
|
+
if names_file is not None:
|
|
258
|
+
copy_gz_file(names_file, self.__file_names__)
|
|
259
|
+
else:
|
|
260
|
+
# Delete old copies of names.gz since their sequence numbers
|
|
261
|
+
# probably will not match the newly installed stripped.gz
|
|
262
|
+
if os.path.exists(self.__file_names__):
|
|
263
|
+
os.remove(self.__file_names__)
|
|
264
|
+
|
|
265
|
+
# Remove the old database from memory so the new one will be
|
|
266
|
+
# automatically loaded next time the user tries to access it
|
|
267
|
+
self.unload()
|
|
268
|
+
|
|
269
|
+
def load(self):
|
|
270
|
+
"""
|
|
271
|
+
Load the entire encyclopedia into memory from a file. This is done
|
|
272
|
+
automatically if the user tries to perform a lookup or a search.
|
|
273
|
+
"""
|
|
274
|
+
if self.__loaded__:
|
|
275
|
+
return
|
|
276
|
+
try:
|
|
277
|
+
file_seq = bz2.BZ2File(self.__file__, 'r')
|
|
278
|
+
except OSError:
|
|
279
|
+
raise OSError("The Sloane Encyclopedia database must be installed."
|
|
280
|
+
" Use e.g. 'SloaneEncyclopedia.install()' to download and install it.")
|
|
281
|
+
|
|
282
|
+
self.__data__ = {}
|
|
283
|
+
|
|
284
|
+
tm = verbose("Loading Sloane encyclopedia from disk")
|
|
285
|
+
entry = re.compile(r'A(?P<num>\d{6}) ,(?P<body>.*),$')
|
|
286
|
+
for L in file_seq:
|
|
287
|
+
if len(L) == 0:
|
|
288
|
+
continue
|
|
289
|
+
m = entry.search(L.decode('utf-8'))
|
|
290
|
+
if m:
|
|
291
|
+
seqnum = int(m.group('num'))
|
|
292
|
+
msg = m.group('body').strip()
|
|
293
|
+
self.__data__[seqnum] = [seqnum, None, ',' + msg + ',', None]
|
|
294
|
+
file_seq.close()
|
|
295
|
+
|
|
296
|
+
try:
|
|
297
|
+
file_names = bz2.BZ2File(self.__file_names__, 'r')
|
|
298
|
+
entry = re.compile(r'A(?P<num>\d{6}) (?P<body>.*)$')
|
|
299
|
+
for L in file_names:
|
|
300
|
+
if not L:
|
|
301
|
+
continue
|
|
302
|
+
m = entry.search(L.decode('utf-8'))
|
|
303
|
+
if m:
|
|
304
|
+
seqnum = int(m.group('num'))
|
|
305
|
+
if seqnum in self.__data__:
|
|
306
|
+
self.__data__[seqnum][3] = m.group('body').strip()
|
|
307
|
+
else:
|
|
308
|
+
self.__data__[seqnum] = [seqnum, None, 'unknown', m.group('body').strip()]
|
|
309
|
+
file_names.close()
|
|
310
|
+
self.__loaded_names__ = True
|
|
311
|
+
except KeyError:
|
|
312
|
+
# Some sequence in the names file is not in the database
|
|
313
|
+
raise KeyError("Sloane OEIS sequence and name files do not match."
|
|
314
|
+
" Try reinstalling, e.g. SloaneEncyclopedia.install(overwrite=True).")
|
|
315
|
+
except OSError:
|
|
316
|
+
# The names database is not installed
|
|
317
|
+
self.__loaded_names__ = False
|
|
318
|
+
|
|
319
|
+
verbose("Finished loading", tm)
|
|
320
|
+
self.__loaded__ = True
|
|
321
|
+
|
|
322
|
+
def sequence_name(self, N):
|
|
323
|
+
"""
|
|
324
|
+
Return the name of sequence ``N`` in the encyclopedia.
|
|
325
|
+
|
|
326
|
+
If sequence ``N`` does not exist, return ``''``. If the names
|
|
327
|
+
database is not installed, raise an :exc:`IOError`.
|
|
328
|
+
|
|
329
|
+
INPUT:
|
|
330
|
+
|
|
331
|
+
- ``N`` -- integer
|
|
332
|
+
|
|
333
|
+
OUTPUT: string
|
|
334
|
+
|
|
335
|
+
EXAMPLES::
|
|
336
|
+
|
|
337
|
+
sage: SloaneEncyclopedia.sequence_name(1) # optional - sloane_database
|
|
338
|
+
'Number of groups of order n.'
|
|
339
|
+
"""
|
|
340
|
+
self.load()
|
|
341
|
+
if not self.__loaded_names__:
|
|
342
|
+
raise OSError("The Sloane OEIS names file is not installed."
|
|
343
|
+
" Try reinstalling, e.g. SloaneEncyclopedia.install(overwrite=True).")
|
|
344
|
+
|
|
345
|
+
if N not in self.__data__: # sequence N does not exist
|
|
346
|
+
return ''
|
|
347
|
+
return self.__data__[N][3]
|
|
348
|
+
|
|
349
|
+
def unload(self):
|
|
350
|
+
"""
|
|
351
|
+
Remove the database from memory.
|
|
352
|
+
"""
|
|
353
|
+
if not self.__loaded__:
|
|
354
|
+
return
|
|
355
|
+
del self.__data__
|
|
356
|
+
self.__loaded__ = False
|
|
357
|
+
self.__loaded_names__ = False
|
|
358
|
+
|
|
359
|
+
|
|
360
|
+
SloaneEncyclopedia = SloaneEncyclopediaClass()
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
def copy_gz_file(gz_source, bz_destination):
|
|
364
|
+
"""
|
|
365
|
+
Decompress a gzipped file and install the bzipped version.
|
|
366
|
+
|
|
367
|
+
This is used by SloaneEncyclopedia.install_from_gz to install
|
|
368
|
+
several gzipped OEIS database files.
|
|
369
|
+
|
|
370
|
+
INPUT:
|
|
371
|
+
|
|
372
|
+
- ``gz_source`` -- string; the name of the gzipped file
|
|
373
|
+
|
|
374
|
+
- ``bz_destination`` -- string; the name of the newly compressed file
|
|
375
|
+
"""
|
|
376
|
+
import gzip
|
|
377
|
+
|
|
378
|
+
# Read the gzipped input
|
|
379
|
+
try:
|
|
380
|
+
gz_input = gzip.open(gz_source, 'r')
|
|
381
|
+
db_text = gz_input.read()
|
|
382
|
+
gz_input.close()
|
|
383
|
+
except OSError as msg:
|
|
384
|
+
raise OSError("Error reading gzipped input file:\n%s" % msg)
|
|
385
|
+
|
|
386
|
+
# Write the bzipped output
|
|
387
|
+
try:
|
|
388
|
+
os.makedirs(os.path.dirname(bz_destination), exist_ok=True)
|
|
389
|
+
bz2_output = bz2.BZ2File(bz_destination, 'w')
|
|
390
|
+
bz2_output.write(db_text)
|
|
391
|
+
bz2_output.close()
|
|
392
|
+
except OSError as msg:
|
|
393
|
+
raise OSError("Error writing bzipped output file:\n%s" % msg)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
|
|
3
|
+
from sage.misc.lazy_import import lazy_import
|
|
4
|
+
|
|
5
|
+
from sage.dynamics.cellular_automata.all import *
|
|
6
|
+
|
|
7
|
+
# Discrete dynamical systems
|
|
8
|
+
lazy_import('sage.dynamics.finite_dynamical_system',
|
|
9
|
+
['DiscreteDynamicalSystem'])
|
|
10
|
+
|
|
11
|
+
lazy_import('sage.dynamics', 'finite_dynamical_system_catalog',
|
|
12
|
+
'finite_dynamical_systems')
|
|
13
|
+
|
|
14
|
+
del lazy_import
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
import sage.dynamics.cellular_automata.catalog as cellular_automata
|
|
3
|
+
|
|
4
|
+
from sage.misc.lazy_import import lazy_import
|
|
5
|
+
lazy_import("sage.dynamics.cellular_automata.solitons",
|
|
6
|
+
["SolitonCellularAutomata", "PeriodicSolitonCellularAutomata"])
|
|
7
|
+
del lazy_import
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
r"""
|
|
3
|
+
Catalog of Cellular Automata
|
|
4
|
+
|
|
5
|
+
The ``cellular_automata`` object may be used to access examples of various
|
|
6
|
+
cellular automata currently implemented in Sage. Using tab-completion on
|
|
7
|
+
this object is an easy way to discover and quickly create the cellular
|
|
8
|
+
automata that are available (as listed here).
|
|
9
|
+
|
|
10
|
+
Let ``<tab>`` indicate pressing the :kbd:`Tab` key. So begin by typing
|
|
11
|
+
``cellular_automata.<tab>`` to the see the currently implemented
|
|
12
|
+
named cellular automata.
|
|
13
|
+
|
|
14
|
+
- :class:`cellular_automata.Elementary
|
|
15
|
+
<sage.dynamics.cellular_automata.elementary.ElementaryCellularAutomata>`
|
|
16
|
+
- :class:`cellular_automata.GraftalLace
|
|
17
|
+
<sage.dynamics.cellular_automata.glca.GraftalLaceCellularAutomata>`
|
|
18
|
+
- :class:`cellular_automata.PeriodicSoliton
|
|
19
|
+
<sage.dynamics.cellular_automata.solitons.PeriodicSolitonCellularAutomata>`
|
|
20
|
+
- :class:`cellular_automata.Soliton
|
|
21
|
+
<sage.dynamics.cellular_automata.solitons.SolitonCellularAutomata>`
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
from sage.misc.lazy_import import lazy_import
|
|
25
|
+
lazy_import('sage.dynamics.cellular_automata.elementary',
|
|
26
|
+
'ElementaryCellularAutomata', 'Elementary',)
|
|
27
|
+
lazy_import('sage.dynamics.cellular_automata.glca',
|
|
28
|
+
'GraftalLaceCellularAutomata', 'GraftalLace',)
|
|
29
|
+
lazy_import('sage.dynamics.cellular_automata.solitons',
|
|
30
|
+
'SolitonCellularAutomata', 'Soliton')
|
|
31
|
+
lazy_import('sage.dynamics.cellular_automata.solitons',
|
|
32
|
+
'PeriodicSolitonCellularAutomata', 'PeriodicSoliton')
|
|
33
|
+
|
|
34
|
+
del lazy_import # We remove the object from here so it doesn't appear under tab completion
|