passagemath-categories 10.6.32__cp314-cp314t-musllinux_1_2_aarch64.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_categories-10.6.32.dist-info/METADATA +156 -0
- passagemath_categories-10.6.32.dist-info/RECORD +719 -0
- passagemath_categories-10.6.32.dist-info/WHEEL +5 -0
- passagemath_categories-10.6.32.dist-info/top_level.txt +2 -0
- passagemath_categories.libs/libgcc_s-2d945d6c.so.1 +0 -0
- passagemath_categories.libs/libgmp-28992bcb.so.10.5.0 +0 -0
- passagemath_categories.libs/libstdc++-85f2cd6d.so.6.0.33 +0 -0
- sage/all__sagemath_categories.py +28 -0
- sage/arith/all.py +38 -0
- sage/arith/constants.pxd +27 -0
- sage/arith/functions.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/functions.pxd +4 -0
- sage/arith/functions.pyx +221 -0
- sage/arith/misc.py +6552 -0
- sage/arith/multi_modular.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/multi_modular.pxd +39 -0
- sage/arith/multi_modular.pyx +994 -0
- sage/arith/rational_reconstruction.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/rational_reconstruction.pxd +4 -0
- sage/arith/rational_reconstruction.pyx +115 -0
- sage/arith/srange.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/srange.pyx +571 -0
- sage/calculus/all__sagemath_categories.py +2 -0
- sage/calculus/functional.py +481 -0
- sage/calculus/functions.py +151 -0
- sage/categories/additive_groups.py +73 -0
- sage/categories/additive_magmas.py +1044 -0
- sage/categories/additive_monoids.py +114 -0
- sage/categories/additive_semigroups.py +184 -0
- sage/categories/affine_weyl_groups.py +238 -0
- sage/categories/algebra_ideals.py +95 -0
- sage/categories/algebra_modules.py +96 -0
- sage/categories/algebras.py +349 -0
- sage/categories/algebras_with_basis.py +377 -0
- sage/categories/all.py +160 -0
- sage/categories/aperiodic_semigroups.py +29 -0
- sage/categories/associative_algebras.py +47 -0
- sage/categories/bialgebras.py +101 -0
- sage/categories/bialgebras_with_basis.py +414 -0
- sage/categories/bimodules.py +206 -0
- sage/categories/chain_complexes.py +268 -0
- sage/categories/classical_crystals.py +480 -0
- sage/categories/coalgebras.py +405 -0
- sage/categories/coalgebras_with_basis.py +232 -0
- sage/categories/coercion_methods.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/categories/coercion_methods.pyx +52 -0
- sage/categories/commutative_additive_groups.py +104 -0
- sage/categories/commutative_additive_monoids.py +45 -0
- sage/categories/commutative_additive_semigroups.py +48 -0
- sage/categories/commutative_algebra_ideals.py +87 -0
- sage/categories/commutative_algebras.py +94 -0
- sage/categories/commutative_ring_ideals.py +58 -0
- sage/categories/commutative_rings.py +736 -0
- sage/categories/complete_discrete_valuation.py +293 -0
- sage/categories/complex_reflection_groups.py +145 -0
- sage/categories/complex_reflection_or_generalized_coxeter_groups.py +1249 -0
- sage/categories/coxeter_group_algebras.py +186 -0
- sage/categories/coxeter_groups.py +3402 -0
- sage/categories/crystals.py +2628 -0
- sage/categories/cw_complexes.py +216 -0
- sage/categories/dedekind_domains.py +137 -0
- sage/categories/discrete_valuation.py +325 -0
- sage/categories/distributive_magmas_and_additive_magmas.py +100 -0
- sage/categories/division_rings.py +114 -0
- sage/categories/domains.py +95 -0
- sage/categories/drinfeld_modules.py +789 -0
- sage/categories/dual.py +42 -0
- sage/categories/enumerated_sets.py +1146 -0
- sage/categories/euclidean_domains.py +271 -0
- sage/categories/examples/algebras_with_basis.py +102 -0
- sage/categories/examples/all.py +1 -0
- sage/categories/examples/commutative_additive_monoids.py +130 -0
- sage/categories/examples/commutative_additive_semigroups.py +199 -0
- sage/categories/examples/coxeter_groups.py +8 -0
- sage/categories/examples/crystals.py +236 -0
- sage/categories/examples/cw_complexes.py +163 -0
- sage/categories/examples/facade_sets.py +187 -0
- sage/categories/examples/filtered_algebras_with_basis.py +204 -0
- sage/categories/examples/filtered_modules_with_basis.py +154 -0
- sage/categories/examples/finite_coxeter_groups.py +252 -0
- sage/categories/examples/finite_dimensional_algebras_with_basis.py +148 -0
- sage/categories/examples/finite_dimensional_lie_algebras_with_basis.py +495 -0
- sage/categories/examples/finite_enumerated_sets.py +208 -0
- sage/categories/examples/finite_monoids.py +150 -0
- sage/categories/examples/finite_semigroups.py +190 -0
- sage/categories/examples/finite_weyl_groups.py +191 -0
- sage/categories/examples/graded_connected_hopf_algebras_with_basis.py +152 -0
- sage/categories/examples/graded_modules_with_basis.py +168 -0
- sage/categories/examples/graphs.py +122 -0
- sage/categories/examples/hopf_algebras_with_basis.py +145 -0
- sage/categories/examples/infinite_enumerated_sets.py +190 -0
- sage/categories/examples/lie_algebras.py +352 -0
- sage/categories/examples/lie_algebras_with_basis.py +196 -0
- sage/categories/examples/magmas.py +162 -0
- sage/categories/examples/manifolds.py +94 -0
- sage/categories/examples/monoids.py +144 -0
- sage/categories/examples/posets.py +178 -0
- sage/categories/examples/semigroups.py +580 -0
- sage/categories/examples/semigroups_cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/categories/examples/semigroups_cython.pyx +221 -0
- sage/categories/examples/semirings.py +249 -0
- sage/categories/examples/sets_cat.py +706 -0
- sage/categories/examples/sets_with_grading.py +101 -0
- sage/categories/examples/with_realizations.py +542 -0
- sage/categories/fields.py +991 -0
- sage/categories/filtered_algebras.py +63 -0
- sage/categories/filtered_algebras_with_basis.py +548 -0
- sage/categories/filtered_hopf_algebras_with_basis.py +138 -0
- sage/categories/filtered_modules.py +210 -0
- sage/categories/filtered_modules_with_basis.py +1209 -0
- sage/categories/finite_complex_reflection_groups.py +1506 -0
- sage/categories/finite_coxeter_groups.py +1138 -0
- sage/categories/finite_crystals.py +103 -0
- sage/categories/finite_dimensional_algebras_with_basis.py +1860 -0
- sage/categories/finite_dimensional_bialgebras_with_basis.py +33 -0
- sage/categories/finite_dimensional_coalgebras_with_basis.py +33 -0
- sage/categories/finite_dimensional_graded_lie_algebras_with_basis.py +231 -0
- sage/categories/finite_dimensional_hopf_algebras_with_basis.py +38 -0
- sage/categories/finite_dimensional_lie_algebras_with_basis.py +2774 -0
- sage/categories/finite_dimensional_modules_with_basis.py +1407 -0
- sage/categories/finite_dimensional_nilpotent_lie_algebras_with_basis.py +167 -0
- sage/categories/finite_dimensional_semisimple_algebras_with_basis.py +270 -0
- sage/categories/finite_enumerated_sets.py +769 -0
- sage/categories/finite_fields.py +252 -0
- sage/categories/finite_groups.py +256 -0
- sage/categories/finite_lattice_posets.py +242 -0
- sage/categories/finite_monoids.py +316 -0
- sage/categories/finite_permutation_groups.py +339 -0
- sage/categories/finite_posets.py +1994 -0
- sage/categories/finite_semigroups.py +136 -0
- sage/categories/finite_sets.py +93 -0
- sage/categories/finite_weyl_groups.py +39 -0
- sage/categories/finitely_generated_lambda_bracket_algebras.py +112 -0
- sage/categories/finitely_generated_lie_conformal_algebras.py +114 -0
- sage/categories/finitely_generated_magmas.py +57 -0
- sage/categories/finitely_generated_semigroups.py +214 -0
- sage/categories/function_fields.py +76 -0
- sage/categories/g_sets.py +77 -0
- sage/categories/gcd_domains.py +65 -0
- sage/categories/generalized_coxeter_groups.py +94 -0
- sage/categories/graded_algebras.py +85 -0
- sage/categories/graded_algebras_with_basis.py +258 -0
- sage/categories/graded_bialgebras.py +32 -0
- sage/categories/graded_bialgebras_with_basis.py +32 -0
- sage/categories/graded_coalgebras.py +65 -0
- sage/categories/graded_coalgebras_with_basis.py +51 -0
- sage/categories/graded_hopf_algebras.py +41 -0
- sage/categories/graded_hopf_algebras_with_basis.py +169 -0
- sage/categories/graded_lie_algebras.py +91 -0
- sage/categories/graded_lie_algebras_with_basis.py +44 -0
- sage/categories/graded_lie_conformal_algebras.py +74 -0
- sage/categories/graded_modules.py +133 -0
- sage/categories/graded_modules_with_basis.py +329 -0
- sage/categories/graphs.py +138 -0
- sage/categories/group_algebras.py +430 -0
- sage/categories/groupoid.py +94 -0
- sage/categories/groups.py +667 -0
- sage/categories/h_trivial_semigroups.py +64 -0
- sage/categories/hecke_modules.py +185 -0
- sage/categories/highest_weight_crystals.py +980 -0
- sage/categories/hopf_algebras.py +219 -0
- sage/categories/hopf_algebras_with_basis.py +309 -0
- sage/categories/infinite_enumerated_sets.py +115 -0
- sage/categories/integral_domains.py +203 -0
- sage/categories/j_trivial_semigroups.py +29 -0
- sage/categories/kac_moody_algebras.py +82 -0
- sage/categories/kahler_algebras.py +203 -0
- sage/categories/l_trivial_semigroups.py +63 -0
- sage/categories/lambda_bracket_algebras.py +280 -0
- sage/categories/lambda_bracket_algebras_with_basis.py +107 -0
- sage/categories/lattice_posets.py +89 -0
- sage/categories/left_modules.py +49 -0
- sage/categories/lie_algebras.py +1070 -0
- sage/categories/lie_algebras_with_basis.py +261 -0
- sage/categories/lie_conformal_algebras.py +350 -0
- sage/categories/lie_conformal_algebras_with_basis.py +147 -0
- sage/categories/lie_groups.py +73 -0
- sage/categories/loop_crystals.py +1290 -0
- sage/categories/magmas.py +1189 -0
- sage/categories/magmas_and_additive_magmas.py +149 -0
- sage/categories/magmatic_algebras.py +365 -0
- sage/categories/manifolds.py +352 -0
- sage/categories/matrix_algebras.py +40 -0
- sage/categories/metric_spaces.py +387 -0
- sage/categories/modular_abelian_varieties.py +78 -0
- sage/categories/modules.py +989 -0
- sage/categories/modules_with_basis.py +2794 -0
- sage/categories/monoid_algebras.py +38 -0
- sage/categories/monoids.py +739 -0
- sage/categories/noetherian_rings.py +87 -0
- sage/categories/number_fields.py +242 -0
- sage/categories/ore_modules.py +189 -0
- sage/categories/partially_ordered_monoids.py +49 -0
- sage/categories/permutation_groups.py +63 -0
- sage/categories/pointed_sets.py +42 -0
- sage/categories/polyhedra.py +74 -0
- sage/categories/poor_man_map.py +270 -0
- sage/categories/posets.py +722 -0
- sage/categories/principal_ideal_domains.py +270 -0
- sage/categories/quantum_group_representations.py +543 -0
- sage/categories/quotient_fields.py +728 -0
- sage/categories/r_trivial_semigroups.py +45 -0
- sage/categories/regular_crystals.py +898 -0
- sage/categories/regular_supercrystals.py +170 -0
- sage/categories/right_modules.py +49 -0
- sage/categories/ring_ideals.py +74 -0
- sage/categories/rings.py +1904 -0
- sage/categories/rngs.py +175 -0
- sage/categories/schemes.py +393 -0
- sage/categories/semigroups.py +1060 -0
- sage/categories/semirings.py +71 -0
- sage/categories/semisimple_algebras.py +114 -0
- sage/categories/sets_with_grading.py +235 -0
- sage/categories/shephard_groups.py +43 -0
- sage/categories/signed_tensor.py +120 -0
- sage/categories/simplicial_complexes.py +134 -0
- sage/categories/simplicial_sets.py +1206 -0
- sage/categories/super_algebras.py +149 -0
- sage/categories/super_algebras_with_basis.py +144 -0
- sage/categories/super_hopf_algebras_with_basis.py +126 -0
- sage/categories/super_lie_conformal_algebras.py +193 -0
- sage/categories/super_modules.py +229 -0
- sage/categories/super_modules_with_basis.py +193 -0
- sage/categories/supercommutative_algebras.py +99 -0
- sage/categories/supercrystals.py +406 -0
- sage/categories/tensor.py +110 -0
- sage/categories/topological_spaces.py +170 -0
- sage/categories/triangular_kac_moody_algebras.py +439 -0
- sage/categories/tutorial.py +58 -0
- sage/categories/unique_factorization_domains.py +318 -0
- sage/categories/unital_algebras.py +426 -0
- sage/categories/vector_bundles.py +159 -0
- sage/categories/vector_spaces.py +357 -0
- sage/categories/weyl_groups.py +853 -0
- sage/combinat/all__sagemath_categories.py +34 -0
- sage/combinat/backtrack.py +180 -0
- sage/combinat/combinat.py +2269 -0
- sage/combinat/combinat_cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/combinat_cython.pxd +6 -0
- sage/combinat/combinat_cython.pyx +390 -0
- sage/combinat/combination.py +796 -0
- sage/combinat/combinatorial_map.py +416 -0
- sage/combinat/composition.py +2192 -0
- sage/combinat/dlx.py +510 -0
- sage/combinat/integer_lists/__init__.py +7 -0
- sage/combinat/integer_lists/base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/integer_lists/base.pxd +16 -0
- sage/combinat/integer_lists/base.pyx +713 -0
- sage/combinat/integer_lists/invlex.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/integer_lists/invlex.pxd +4 -0
- sage/combinat/integer_lists/invlex.pyx +1650 -0
- sage/combinat/integer_lists/lists.py +328 -0
- sage/combinat/integer_lists/nn.py +48 -0
- sage/combinat/integer_vector.py +1818 -0
- sage/combinat/integer_vector_weighted.py +413 -0
- sage/combinat/matrices/all__sagemath_categories.py +5 -0
- sage/combinat/matrices/dancing_links.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/matrices/dancing_links.pyx +1159 -0
- sage/combinat/matrices/dancing_links_c.h +380 -0
- sage/combinat/matrices/dlxcpp.py +136 -0
- sage/combinat/partition.py +10070 -0
- sage/combinat/partitions.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/partitions.pyx +743 -0
- sage/combinat/permutation.py +10168 -0
- sage/combinat/permutation_cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/permutation_cython.pxd +11 -0
- sage/combinat/permutation_cython.pyx +407 -0
- sage/combinat/q_analogues.py +1090 -0
- sage/combinat/ranker.py +268 -0
- sage/combinat/subset.py +1561 -0
- sage/combinat/subsets_hereditary.py +202 -0
- sage/combinat/subsets_pairwise.py +184 -0
- sage/combinat/tools.py +63 -0
- sage/combinat/tuple.py +348 -0
- sage/data_structures/all.py +2 -0
- sage/data_structures/all__sagemath_categories.py +2 -0
- sage/data_structures/binary_matrix.pxd +138 -0
- sage/data_structures/binary_search.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/binary_search.pxd +3 -0
- sage/data_structures/binary_search.pyx +66 -0
- sage/data_structures/bitset.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/bitset.pxd +40 -0
- sage/data_structures/bitset.pyx +2385 -0
- sage/data_structures/bitset_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/bitset_base.pxd +926 -0
- sage/data_structures/bitset_base.pyx +117 -0
- sage/data_structures/bitset_intrinsics.h +487 -0
- sage/data_structures/blas_dict.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/blas_dict.pxd +12 -0
- sage/data_structures/blas_dict.pyx +469 -0
- sage/data_structures/list_of_pairs.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/list_of_pairs.pxd +16 -0
- sage/data_structures/list_of_pairs.pyx +122 -0
- sage/data_structures/mutable_poset.py +3312 -0
- sage/data_structures/pairing_heap.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/pairing_heap.h +346 -0
- sage/data_structures/pairing_heap.pxd +88 -0
- sage/data_structures/pairing_heap.pyx +1464 -0
- sage/data_structures/sparse_bitset.pxd +62 -0
- sage/data_structures/stream.py +5070 -0
- sage/databases/all__sagemath_categories.py +7 -0
- sage/databases/sql_db.py +2236 -0
- sage/ext/all__sagemath_categories.py +3 -0
- sage/ext/fast_callable.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/fast_callable.pxd +4 -0
- sage/ext/fast_callable.pyx +2746 -0
- sage/ext/fast_eval.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/fast_eval.pxd +1 -0
- sage/ext/fast_eval.pyx +102 -0
- sage/ext/interpreters/__init__.py +1 -0
- sage/ext/interpreters/all__sagemath_categories.py +2 -0
- sage/ext/interpreters/wrapper_el.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_el.pxd +18 -0
- sage/ext/interpreters/wrapper_el.pyx +148 -0
- sage/ext/interpreters/wrapper_py.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_py.pxd +17 -0
- sage/ext/interpreters/wrapper_py.pyx +133 -0
- sage/functions/airy.py +937 -0
- sage/functions/all.py +97 -0
- sage/functions/bessel.py +2102 -0
- sage/functions/error.py +784 -0
- sage/functions/exp_integral.py +1529 -0
- sage/functions/gamma.py +1087 -0
- sage/functions/generalized.py +672 -0
- sage/functions/hyperbolic.py +747 -0
- sage/functions/hypergeometric.py +1156 -0
- sage/functions/jacobi.py +1705 -0
- sage/functions/log.py +1402 -0
- sage/functions/min_max.py +338 -0
- sage/functions/orthogonal_polys.py +3106 -0
- sage/functions/other.py +2303 -0
- sage/functions/piecewise.py +1505 -0
- sage/functions/prime_pi.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/functions/prime_pi.pyx +262 -0
- sage/functions/special.py +1212 -0
- sage/functions/spike_function.py +278 -0
- sage/functions/transcendental.py +690 -0
- sage/functions/trig.py +1062 -0
- sage/functions/wigner.py +726 -0
- sage/geometry/abc.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/geometry/abc.pyx +82 -0
- sage/geometry/all__sagemath_categories.py +1 -0
- sage/groups/all__sagemath_categories.py +11 -0
- sage/groups/generic.py +1733 -0
- sage/groups/groups_catalog.py +113 -0
- sage/groups/perm_gps/all__sagemath_categories.py +1 -0
- sage/groups/perm_gps/partn_ref/all.py +1 -0
- sage/groups/perm_gps/partn_ref/all__sagemath_categories.py +1 -0
- sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pxd +52 -0
- sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pyx +906 -0
- sage/groups/perm_gps/partn_ref/canonical_augmentation.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/canonical_augmentation.pxd +85 -0
- sage/groups/perm_gps/partn_ref/canonical_augmentation.pyx +534 -0
- sage/groups/perm_gps/partn_ref/data_structures.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/data_structures.pxd +576 -0
- sage/groups/perm_gps/partn_ref/data_structures.pyx +1792 -0
- sage/groups/perm_gps/partn_ref/double_coset.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/double_coset.pxd +45 -0
- sage/groups/perm_gps/partn_ref/double_coset.pyx +739 -0
- sage/groups/perm_gps/partn_ref/refinement_lists.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_lists.pxd +18 -0
- sage/groups/perm_gps/partn_ref/refinement_lists.pyx +82 -0
- sage/groups/perm_gps/partn_ref/refinement_python.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_python.pxd +16 -0
- sage/groups/perm_gps/partn_ref/refinement_python.pyx +564 -0
- sage/groups/perm_gps/partn_ref/refinement_sets.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_sets.pxd +60 -0
- sage/groups/perm_gps/partn_ref/refinement_sets.pyx +858 -0
- sage/interfaces/abc.py +140 -0
- sage/interfaces/all.py +58 -0
- sage/interfaces/all__sagemath_categories.py +1 -0
- sage/interfaces/expect.py +1643 -0
- sage/interfaces/interface.py +1682 -0
- sage/interfaces/process.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/interfaces/process.pxd +5 -0
- sage/interfaces/process.pyx +288 -0
- sage/interfaces/quit.py +167 -0
- sage/interfaces/sage0.py +604 -0
- sage/interfaces/sagespawn.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/interfaces/sagespawn.pyx +308 -0
- sage/interfaces/tab_completion.py +101 -0
- sage/misc/all__sagemath_categories.py +78 -0
- sage/misc/allocator.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/allocator.pxd +6 -0
- sage/misc/allocator.pyx +47 -0
- sage/misc/binary_tree.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/binary_tree.pxd +29 -0
- sage/misc/binary_tree.pyx +537 -0
- sage/misc/callable_dict.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/callable_dict.pyx +89 -0
- sage/misc/citation.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/citation.pyx +159 -0
- sage/misc/converting_dict.py +293 -0
- sage/misc/defaults.py +129 -0
- sage/misc/derivative.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/derivative.pyx +223 -0
- sage/misc/functional.py +2005 -0
- sage/misc/html.py +589 -0
- sage/misc/latex.py +2673 -0
- sage/misc/latex_macros.py +236 -0
- sage/misc/latex_standalone.py +1833 -0
- sage/misc/map_threaded.py +38 -0
- sage/misc/mathml.py +76 -0
- sage/misc/method_decorator.py +88 -0
- sage/misc/mrange.py +755 -0
- sage/misc/multireplace.py +41 -0
- sage/misc/object_multiplexer.py +92 -0
- sage/misc/parser.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/parser.pyx +1107 -0
- sage/misc/random_testing.py +264 -0
- sage/misc/rest_index_of_methods.py +377 -0
- sage/misc/search.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/search.pxd +2 -0
- sage/misc/search.pyx +68 -0
- sage/misc/stopgap.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/stopgap.pyx +95 -0
- sage/misc/table.py +853 -0
- sage/monoids/all__sagemath_categories.py +1 -0
- sage/monoids/indexed_free_monoid.py +1071 -0
- sage/monoids/monoid.py +82 -0
- sage/numerical/all__sagemath_categories.py +1 -0
- sage/numerical/backends/all__sagemath_categories.py +1 -0
- sage/numerical/backends/generic_backend.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/numerical/backends/generic_backend.pxd +61 -0
- sage/numerical/backends/generic_backend.pyx +1893 -0
- sage/numerical/backends/generic_sdp_backend.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/numerical/backends/generic_sdp_backend.pxd +38 -0
- sage/numerical/backends/generic_sdp_backend.pyx +755 -0
- sage/parallel/all.py +6 -0
- sage/parallel/decorate.py +575 -0
- sage/parallel/map_reduce.py +1997 -0
- sage/parallel/multiprocessing_sage.py +76 -0
- sage/parallel/ncpus.py +35 -0
- sage/parallel/parallelism.py +364 -0
- sage/parallel/reference.py +47 -0
- sage/parallel/use_fork.py +333 -0
- sage/rings/abc.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/abc.pxd +31 -0
- sage/rings/abc.pyx +526 -0
- sage/rings/algebraic_closure_finite_field.py +1154 -0
- sage/rings/all__sagemath_categories.py +91 -0
- sage/rings/big_oh.py +227 -0
- sage/rings/continued_fraction.py +2754 -0
- sage/rings/continued_fraction_gosper.py +220 -0
- sage/rings/factorint.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/factorint.pyx +295 -0
- sage/rings/fast_arith.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/fast_arith.pxd +21 -0
- sage/rings/fast_arith.pyx +535 -0
- sage/rings/finite_rings/all__sagemath_categories.py +9 -0
- sage/rings/finite_rings/conway_polynomials.py +542 -0
- sage/rings/finite_rings/element_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/element_base.pxd +12 -0
- sage/rings/finite_rings/element_base.pyx +1176 -0
- sage/rings/finite_rings/finite_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/finite_field_base.pxd +7 -0
- sage/rings/finite_rings/finite_field_base.pyx +2171 -0
- sage/rings/finite_rings/finite_field_constructor.py +827 -0
- sage/rings/finite_rings/finite_field_prime_modn.py +372 -0
- sage/rings/finite_rings/galois_group.py +154 -0
- sage/rings/finite_rings/hom_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/hom_finite_field.pxd +23 -0
- sage/rings/finite_rings/hom_finite_field.pyx +856 -0
- sage/rings/finite_rings/hom_prime_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/hom_prime_finite_field.pxd +15 -0
- sage/rings/finite_rings/hom_prime_finite_field.pyx +164 -0
- sage/rings/finite_rings/homset.py +357 -0
- sage/rings/finite_rings/integer_mod.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/integer_mod.pxd +56 -0
- sage/rings/finite_rings/integer_mod.pyx +4586 -0
- sage/rings/finite_rings/integer_mod_limits.h +11 -0
- sage/rings/finite_rings/integer_mod_ring.py +2044 -0
- sage/rings/finite_rings/residue_field.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/residue_field.pxd +30 -0
- sage/rings/finite_rings/residue_field.pyx +1811 -0
- sage/rings/finite_rings/stdint.pxd +19 -0
- sage/rings/fraction_field.py +1452 -0
- sage/rings/fraction_field_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/fraction_field_element.pyx +1357 -0
- sage/rings/function_field/all.py +7 -0
- sage/rings/function_field/all__sagemath_categories.py +2 -0
- sage/rings/function_field/constructor.py +218 -0
- sage/rings/function_field/element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/function_field/element.pxd +11 -0
- sage/rings/function_field/element.pyx +1008 -0
- sage/rings/function_field/element_rational.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/function_field/element_rational.pyx +513 -0
- sage/rings/function_field/extensions.py +230 -0
- sage/rings/function_field/function_field.py +1468 -0
- sage/rings/function_field/function_field_rational.py +1005 -0
- sage/rings/function_field/ideal.py +1155 -0
- sage/rings/function_field/ideal_rational.py +629 -0
- sage/rings/function_field/jacobian_base.py +826 -0
- sage/rings/function_field/jacobian_hess.py +1053 -0
- sage/rings/function_field/jacobian_khuri_makdisi.py +1027 -0
- sage/rings/function_field/maps.py +1039 -0
- sage/rings/function_field/order.py +281 -0
- sage/rings/function_field/order_basis.py +586 -0
- sage/rings/function_field/order_rational.py +576 -0
- sage/rings/function_field/place.py +426 -0
- sage/rings/function_field/place_rational.py +181 -0
- sage/rings/generic.py +320 -0
- sage/rings/homset.py +332 -0
- sage/rings/ideal.py +1885 -0
- sage/rings/ideal_monoid.py +215 -0
- sage/rings/infinity.py +1890 -0
- sage/rings/integer.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/integer.pxd +45 -0
- sage/rings/integer.pyx +7874 -0
- sage/rings/integer_ring.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/integer_ring.pxd +8 -0
- sage/rings/integer_ring.pyx +1693 -0
- sage/rings/laurent_series_ring.py +931 -0
- sage/rings/laurent_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/laurent_series_ring_element.pxd +11 -0
- sage/rings/laurent_series_ring_element.pyx +1927 -0
- sage/rings/lazy_series.py +7815 -0
- sage/rings/lazy_series_ring.py +4356 -0
- sage/rings/localization.py +1043 -0
- sage/rings/morphism.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/morphism.pxd +39 -0
- sage/rings/morphism.pyx +3299 -0
- sage/rings/multi_power_series_ring.py +1145 -0
- sage/rings/multi_power_series_ring_element.py +2184 -0
- sage/rings/noncommutative_ideals.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/noncommutative_ideals.pyx +423 -0
- sage/rings/number_field/all__sagemath_categories.py +1 -0
- sage/rings/number_field/number_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/number_field/number_field_base.pxd +8 -0
- sage/rings/number_field/number_field_base.pyx +507 -0
- sage/rings/number_field/number_field_element_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/number_field/number_field_element_base.pxd +6 -0
- sage/rings/number_field/number_field_element_base.pyx +36 -0
- sage/rings/number_field/number_field_ideal.py +3550 -0
- sage/rings/padics/all__sagemath_categories.py +4 -0
- sage/rings/padics/local_generic.py +1670 -0
- sage/rings/padics/local_generic_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/padics/local_generic_element.pxd +5 -0
- sage/rings/padics/local_generic_element.pyx +1017 -0
- sage/rings/padics/misc.py +256 -0
- sage/rings/padics/padic_generic.py +1911 -0
- sage/rings/padics/pow_computer.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/padics/pow_computer.pxd +38 -0
- sage/rings/padics/pow_computer.pyx +671 -0
- sage/rings/padics/precision_error.py +24 -0
- sage/rings/polynomial/all__sagemath_categories.py +25 -0
- sage/rings/polynomial/commutative_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/commutative_polynomial.pxd +6 -0
- sage/rings/polynomial/commutative_polynomial.pyx +24 -0
- sage/rings/polynomial/cyclotomic.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/cyclotomic.pyx +404 -0
- sage/rings/polynomial/flatten.py +711 -0
- sage/rings/polynomial/ideal.py +102 -0
- sage/rings/polynomial/infinite_polynomial_element.py +1768 -0
- sage/rings/polynomial/infinite_polynomial_ring.py +1653 -0
- sage/rings/polynomial/laurent_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/laurent_polynomial.pxd +18 -0
- sage/rings/polynomial/laurent_polynomial.pyx +2190 -0
- sage/rings/polynomial/laurent_polynomial_ideal.py +590 -0
- sage/rings/polynomial/laurent_polynomial_ring.py +832 -0
- sage/rings/polynomial/laurent_polynomial_ring_base.py +708 -0
- sage/rings/polynomial/multi_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/multi_polynomial.pxd +12 -0
- sage/rings/polynomial/multi_polynomial.pyx +3082 -0
- sage/rings/polynomial/multi_polynomial_element.py +2570 -0
- sage/rings/polynomial/multi_polynomial_ideal.py +5771 -0
- sage/rings/polynomial/multi_polynomial_ring.py +947 -0
- sage/rings/polynomial/multi_polynomial_ring_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/multi_polynomial_ring_base.pxd +15 -0
- sage/rings/polynomial/multi_polynomial_ring_base.pyx +1855 -0
- sage/rings/polynomial/multi_polynomial_sequence.py +2204 -0
- sage/rings/polynomial/polydict.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polydict.pxd +45 -0
- sage/rings/polynomial/polydict.pyx +2701 -0
- sage/rings/polynomial/polynomial_compiled.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_compiled.pxd +59 -0
- sage/rings/polynomial/polynomial_compiled.pyx +509 -0
- sage/rings/polynomial/polynomial_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_element.pxd +64 -0
- sage/rings/polynomial/polynomial_element.pyx +13255 -0
- sage/rings/polynomial/polynomial_element_generic.py +1637 -0
- sage/rings/polynomial/polynomial_fateman.py +97 -0
- sage/rings/polynomial/polynomial_quotient_ring.py +2465 -0
- sage/rings/polynomial/polynomial_quotient_ring_element.py +779 -0
- sage/rings/polynomial/polynomial_ring.py +3784 -0
- sage/rings/polynomial/polynomial_ring_constructor.py +1051 -0
- sage/rings/polynomial/polynomial_ring_homomorphism.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_ring_homomorphism.pxd +5 -0
- sage/rings/polynomial/polynomial_ring_homomorphism.pyx +121 -0
- sage/rings/polynomial/polynomial_singular_interface.py +549 -0
- sage/rings/polynomial/symmetric_ideal.py +989 -0
- sage/rings/polynomial/symmetric_reduction.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/symmetric_reduction.pxd +8 -0
- sage/rings/polynomial/symmetric_reduction.pyx +669 -0
- sage/rings/polynomial/term_order.py +2279 -0
- sage/rings/polynomial/toy_buchberger.py +449 -0
- sage/rings/polynomial/toy_d_basis.py +387 -0
- sage/rings/polynomial/toy_variety.py +362 -0
- sage/rings/power_series_mpoly.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/power_series_mpoly.pxd +9 -0
- sage/rings/power_series_mpoly.pyx +161 -0
- sage/rings/power_series_poly.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/power_series_poly.pxd +10 -0
- sage/rings/power_series_poly.pyx +1317 -0
- sage/rings/power_series_ring.py +1441 -0
- sage/rings/power_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/power_series_ring_element.pxd +12 -0
- sage/rings/power_series_ring_element.pyx +3028 -0
- sage/rings/puiseux_series_ring.py +487 -0
- sage/rings/puiseux_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/puiseux_series_ring_element.pxd +7 -0
- sage/rings/puiseux_series_ring_element.pyx +1055 -0
- sage/rings/qqbar_decorators.py +167 -0
- sage/rings/quotient_ring.py +1598 -0
- sage/rings/quotient_ring_element.py +979 -0
- sage/rings/rational.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/rational.pxd +20 -0
- sage/rings/rational.pyx +4284 -0
- sage/rings/rational_field.py +1730 -0
- sage/rings/real_double.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/real_double.pxd +16 -0
- sage/rings/real_double.pyx +2218 -0
- sage/rings/real_lazy.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/real_lazy.pxd +30 -0
- sage/rings/real_lazy.pyx +1773 -0
- sage/rings/ring.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/ring.pxd +30 -0
- sage/rings/ring.pyx +850 -0
- sage/rings/semirings/all.py +3 -0
- sage/rings/semirings/non_negative_integer_semiring.py +107 -0
- sage/rings/semirings/tropical_mpolynomial.py +972 -0
- sage/rings/semirings/tropical_polynomial.py +997 -0
- sage/rings/semirings/tropical_semiring.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/semirings/tropical_semiring.pyx +676 -0
- sage/rings/semirings/tropical_variety.py +1701 -0
- sage/rings/sum_of_squares.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/sum_of_squares.pxd +3 -0
- sage/rings/sum_of_squares.pyx +336 -0
- sage/rings/tests.py +504 -0
- sage/schemes/affine/affine_homset.py +508 -0
- sage/schemes/affine/affine_morphism.py +1574 -0
- sage/schemes/affine/affine_point.py +460 -0
- sage/schemes/affine/affine_rational_point.py +308 -0
- sage/schemes/affine/affine_space.py +1264 -0
- sage/schemes/affine/affine_subscheme.py +592 -0
- sage/schemes/affine/all.py +25 -0
- sage/schemes/all__sagemath_categories.py +5 -0
- sage/schemes/generic/algebraic_scheme.py +2092 -0
- sage/schemes/generic/all.py +5 -0
- sage/schemes/generic/ambient_space.py +400 -0
- sage/schemes/generic/divisor.py +465 -0
- sage/schemes/generic/divisor_group.py +313 -0
- sage/schemes/generic/glue.py +84 -0
- sage/schemes/generic/homset.py +820 -0
- sage/schemes/generic/hypersurface.py +234 -0
- sage/schemes/generic/morphism.py +2107 -0
- sage/schemes/generic/point.py +237 -0
- sage/schemes/generic/scheme.py +1190 -0
- sage/schemes/generic/spec.py +199 -0
- sage/schemes/product_projective/all.py +6 -0
- sage/schemes/product_projective/homset.py +236 -0
- sage/schemes/product_projective/morphism.py +517 -0
- sage/schemes/product_projective/point.py +568 -0
- sage/schemes/product_projective/rational_point.py +550 -0
- sage/schemes/product_projective/space.py +1301 -0
- sage/schemes/product_projective/subscheme.py +466 -0
- sage/schemes/projective/all.py +24 -0
- sage/schemes/projective/proj_bdd_height.py +453 -0
- sage/schemes/projective/projective_homset.py +718 -0
- sage/schemes/projective/projective_morphism.py +2792 -0
- sage/schemes/projective/projective_point.py +1484 -0
- sage/schemes/projective/projective_rational_point.py +569 -0
- sage/schemes/projective/projective_space.py +2571 -0
- sage/schemes/projective/projective_subscheme.py +1574 -0
- sage/sets/all.py +17 -0
- sage/sets/cartesian_product.py +376 -0
- sage/sets/condition_set.py +525 -0
- sage/sets/disjoint_set.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/disjoint_set.pxd +36 -0
- sage/sets/disjoint_set.pyx +998 -0
- sage/sets/disjoint_union_enumerated_sets.py +625 -0
- sage/sets/family.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/family.pxd +12 -0
- sage/sets/family.pyx +1556 -0
- sage/sets/finite_enumerated_set.py +406 -0
- sage/sets/finite_set_map_cy.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/finite_set_map_cy.pxd +34 -0
- sage/sets/finite_set_map_cy.pyx +708 -0
- sage/sets/finite_set_maps.py +591 -0
- sage/sets/image_set.py +448 -0
- sage/sets/integer_range.py +829 -0
- sage/sets/non_negative_integers.py +241 -0
- sage/sets/positive_integers.py +93 -0
- sage/sets/primes.py +188 -0
- sage/sets/real_set.py +2760 -0
- sage/sets/recursively_enumerated_set.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/recursively_enumerated_set.pxd +31 -0
- sage/sets/recursively_enumerated_set.pyx +2082 -0
- sage/sets/set.py +2083 -0
- sage/sets/set_from_iterator.py +1021 -0
- sage/sets/totally_ordered_finite_set.py +329 -0
- sage/symbolic/all__sagemath_categories.py +1 -0
- sage/symbolic/function.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/symbolic/function.pxd +29 -0
- sage/symbolic/function.pyx +1488 -0
- sage/symbolic/symbols.py +56 -0
- sage/tests/all__sagemath_categories.py +1 -0
- sage/tests/cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/tests/cython.pyx +37 -0
- sage/tests/stl_vector.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/tests/stl_vector.pyx +171 -0
- sage/typeset/all.py +6 -0
- sage/typeset/ascii_art.py +295 -0
- sage/typeset/character_art.py +789 -0
- sage/typeset/character_art_factory.py +572 -0
- sage/typeset/symbols.py +334 -0
- sage/typeset/unicode_art.py +183 -0
- sage/typeset/unicode_characters.py +101 -0
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
# sage.doctest: optional - ptyprocess
|
|
3
|
+
"""
|
|
4
|
+
Sage wrapper around pexpect's ``spawn`` class and
|
|
5
|
+
the ptyprocess's ``PtyProcess`` class.
|
|
6
|
+
|
|
7
|
+
AUTHOR:
|
|
8
|
+
|
|
9
|
+
- Jeroen Demeyer (2015-02-01): initial version, see :issue:`17686`.
|
|
10
|
+
|
|
11
|
+
- Jeroen Demeyer (2015-12-04): add support for pexpect 4 + ptyprocess,
|
|
12
|
+
see :issue:`10295`.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
# ***************************************************************************
|
|
16
|
+
# Copyright (C) 2015 Jeroen Demeyer <jdemeyer@cage.ugent.be>
|
|
17
|
+
#
|
|
18
|
+
# This program is free software: you can redistribute it and/or modify
|
|
19
|
+
# it under the terms of the GNU General Public License as published by
|
|
20
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
21
|
+
# (at your option) any later version.
|
|
22
|
+
# https://www.gnu.org/licenses/
|
|
23
|
+
# ***************************************************************************
|
|
24
|
+
|
|
25
|
+
from pexpect import *
|
|
26
|
+
from ptyprocess import PtyProcess
|
|
27
|
+
|
|
28
|
+
from cpython.ref cimport Py_INCREF
|
|
29
|
+
|
|
30
|
+
IF UNAME_SYSNAME == "Linux" or UNAME_SYSNAME == "Darwin":
|
|
31
|
+
|
|
32
|
+
from libc.signal cimport *
|
|
33
|
+
|
|
34
|
+
from posix.signal cimport killpg
|
|
35
|
+
from posix.unistd cimport getpid, getpgid, fork
|
|
36
|
+
|
|
37
|
+
ELSE:
|
|
38
|
+
|
|
39
|
+
def getpid():
|
|
40
|
+
return 0
|
|
41
|
+
|
|
42
|
+
def getpgid(x):
|
|
43
|
+
return 0
|
|
44
|
+
|
|
45
|
+
def fork():
|
|
46
|
+
return 0
|
|
47
|
+
|
|
48
|
+
def killpg(x):
|
|
49
|
+
return 0
|
|
50
|
+
|
|
51
|
+
cdef int SIGCONT = 0
|
|
52
|
+
cdef int SIGINT = 0
|
|
53
|
+
cdef int SIGHUP = 0
|
|
54
|
+
cdef int SIGTERM = 0
|
|
55
|
+
cdef int SIGKILL = 0
|
|
56
|
+
|
|
57
|
+
from time import sleep
|
|
58
|
+
|
|
59
|
+
from sage.cpython.string cimport str_to_bytes
|
|
60
|
+
from sage.interfaces.process cimport ContainChildren
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class SageSpawn(spawn):
|
|
64
|
+
def __init__(self, *args, **kwds):
|
|
65
|
+
"""
|
|
66
|
+
Spawn a subprocess in a pseudo-tty.
|
|
67
|
+
|
|
68
|
+
- ``*args``, ``**kwds`` -- see :class:`pexpect.spawn`
|
|
69
|
+
|
|
70
|
+
- ``name`` -- human-readable name for this process, used for
|
|
71
|
+
display purposes only
|
|
72
|
+
|
|
73
|
+
- ``quit_string`` -- (default: ``None``) if not ``None``, send
|
|
74
|
+
this string to the child process before killing it
|
|
75
|
+
|
|
76
|
+
EXAMPLES::
|
|
77
|
+
|
|
78
|
+
sage: from sage.interfaces.sagespawn import SageSpawn
|
|
79
|
+
sage: SageSpawn("sleep 1", name="Sleeping Beauty")
|
|
80
|
+
Sleeping Beauty with PID ... running ...
|
|
81
|
+
"""
|
|
82
|
+
self.__name = kwds.pop("name", self.__class__.__name__)
|
|
83
|
+
self.quit_string = kwds.pop("quit_string", None)
|
|
84
|
+
|
|
85
|
+
kwds.setdefault("ignore_sighup", True)
|
|
86
|
+
|
|
87
|
+
# Use a *serious* read buffer of 4MiB, not the ridiculous 2000 bytes
|
|
88
|
+
# that pexpect uses by default.
|
|
89
|
+
kwds.setdefault("maxread", 4194304)
|
|
90
|
+
|
|
91
|
+
with ContainChildren(silent=True):
|
|
92
|
+
spawn.__init__(self, *args, **kwds)
|
|
93
|
+
|
|
94
|
+
self.delaybeforesend = None
|
|
95
|
+
self.delayafterread = None
|
|
96
|
+
|
|
97
|
+
def _spawnpty(self, args, **kwds):
|
|
98
|
+
"""
|
|
99
|
+
Create an instance of :class:`SagePtyProcess`.
|
|
100
|
+
|
|
101
|
+
EXAMPLES::
|
|
102
|
+
|
|
103
|
+
sage: from sage.interfaces.sagespawn import SageSpawn
|
|
104
|
+
sage: s = SageSpawn("sleep 1")
|
|
105
|
+
sage: s.ptyproc
|
|
106
|
+
SagePtyProcess.spawn(...)
|
|
107
|
+
"""
|
|
108
|
+
ptyproc = SagePtyProcess.spawn(args, **kwds)
|
|
109
|
+
ptyproc.quit_string = self.quit_string
|
|
110
|
+
return ptyproc
|
|
111
|
+
|
|
112
|
+
def __repr__(self):
|
|
113
|
+
"""
|
|
114
|
+
A string representing this subprocess.
|
|
115
|
+
|
|
116
|
+
EXAMPLES::
|
|
117
|
+
|
|
118
|
+
sage: from sage.interfaces.sagespawn import SageSpawn
|
|
119
|
+
sage: s = SageSpawn("true", name="stupid process")
|
|
120
|
+
sage: s # indirect doctest
|
|
121
|
+
stupid process with PID ... running .../true
|
|
122
|
+
sage: while s.isalive(): # Wait until the process finishes
|
|
123
|
+
....: sleep(float(0.1))
|
|
124
|
+
sage: s # indirect doctest
|
|
125
|
+
stupid process finished running .../true
|
|
126
|
+
"""
|
|
127
|
+
try:
|
|
128
|
+
cmd = " ".join(self.args)
|
|
129
|
+
if not self.terminated:
|
|
130
|
+
return "%s with PID %s running %s" % (self.__name, self.pid, cmd)
|
|
131
|
+
else:
|
|
132
|
+
return "%s finished running %s" % (self.__name, cmd)
|
|
133
|
+
except Exception:
|
|
134
|
+
return object.__repr__(self)
|
|
135
|
+
|
|
136
|
+
def _keep_alive(self):
|
|
137
|
+
"""
|
|
138
|
+
Ensure that the child process does not get terminated, even if
|
|
139
|
+
all references to ``self`` are deleted.
|
|
140
|
+
|
|
141
|
+
This is needed in forked Sage processes: a forked process
|
|
142
|
+
should call this method and then delete all references to
|
|
143
|
+
``self``.
|
|
144
|
+
|
|
145
|
+
EXAMPLES::
|
|
146
|
+
|
|
147
|
+
sage: from sage.interfaces.sagespawn import SageSpawn
|
|
148
|
+
sage: s = SageSpawn("sh", ["-c", "while true; do sleep 1; done"])
|
|
149
|
+
sage: s._keep_alive()
|
|
150
|
+
sage: pid = s.pid
|
|
151
|
+
sage: del s
|
|
152
|
+
sage: import gc
|
|
153
|
+
sage: _ = gc.collect()
|
|
154
|
+
|
|
155
|
+
All references to ``s`` have been deleted, but the process is
|
|
156
|
+
still running::
|
|
157
|
+
|
|
158
|
+
sage: from signal import SIGTERM
|
|
159
|
+
sage: os.kill(pid, SIGTERM)
|
|
160
|
+
"""
|
|
161
|
+
Py_INCREF(self)
|
|
162
|
+
|
|
163
|
+
def expect_peek(self, *args, **kwds):
|
|
164
|
+
r"""
|
|
165
|
+
Like :meth:`expect` but restore the read buffer such that it
|
|
166
|
+
looks like nothing was actually read. The next reading will
|
|
167
|
+
continue at the current position.
|
|
168
|
+
|
|
169
|
+
EXAMPLES::
|
|
170
|
+
|
|
171
|
+
sage: from sage.interfaces.sagespawn import SageSpawn
|
|
172
|
+
sage: E = SageSpawn("sh", ["-c", "echo hello world"])
|
|
173
|
+
sage: _ = E.expect_peek("w")
|
|
174
|
+
sage: E.read().decode('ascii')
|
|
175
|
+
'hello world\r\n'
|
|
176
|
+
"""
|
|
177
|
+
ret = self.expect(*args, **kwds)
|
|
178
|
+
self._before = self.buffer_type()
|
|
179
|
+
self._before.write(self.before + self.after + self.buffer)
|
|
180
|
+
return ret
|
|
181
|
+
|
|
182
|
+
def expect_upto(self, *args, **kwds):
|
|
183
|
+
r"""
|
|
184
|
+
Like :meth:`expect` but restore the read buffer starting from
|
|
185
|
+
the matched string. The next reading will continue starting
|
|
186
|
+
with the matched string.
|
|
187
|
+
|
|
188
|
+
EXAMPLES::
|
|
189
|
+
|
|
190
|
+
sage: from sage.interfaces.sagespawn import SageSpawn
|
|
191
|
+
sage: E = SageSpawn("sh", ["-c", "echo hello world"])
|
|
192
|
+
sage: _ = E.expect_upto("w")
|
|
193
|
+
sage: E.read().decode('ascii')
|
|
194
|
+
'world\r\n'
|
|
195
|
+
"""
|
|
196
|
+
ret = self.expect(*args, **kwds)
|
|
197
|
+
self._before = self.buffer_type()
|
|
198
|
+
self._before.write(self.after + self.buffer)
|
|
199
|
+
return ret
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
class SagePtyProcess(PtyProcess):
|
|
203
|
+
def close(self, force=None):
|
|
204
|
+
"""
|
|
205
|
+
Quit the child process: send the quit string, close the
|
|
206
|
+
pseudo-tty and kill the process.
|
|
207
|
+
|
|
208
|
+
This function returns immediately, it doesn't wait for the
|
|
209
|
+
child process to die.
|
|
210
|
+
|
|
211
|
+
EXAMPLES::
|
|
212
|
+
|
|
213
|
+
sage: from sage.interfaces.sagespawn import SageSpawn
|
|
214
|
+
sage: s = SageSpawn("sleep 1000")
|
|
215
|
+
sage: s.close()
|
|
216
|
+
sage: while s.isalive(): # long time (5 seconds)
|
|
217
|
+
....: sleep(float(0.1))
|
|
218
|
+
"""
|
|
219
|
+
if not self.closed:
|
|
220
|
+
if self.quit_string is not None:
|
|
221
|
+
try:
|
|
222
|
+
# This can fail if the process already exited
|
|
223
|
+
# PtyProcess.write takes bytes; ideally we would use
|
|
224
|
+
# an encoding picked specifically for the target process
|
|
225
|
+
# but the default (UTF-8) will do now, since I don't
|
|
226
|
+
# think we have any non-ASCII quit_strings anyways.
|
|
227
|
+
self.write(str_to_bytes(self.quit_string))
|
|
228
|
+
except (OSError, IOError):
|
|
229
|
+
pass
|
|
230
|
+
self.fileobj.close()
|
|
231
|
+
self.fd = -1
|
|
232
|
+
self.closed = 1
|
|
233
|
+
self.terminate_async()
|
|
234
|
+
|
|
235
|
+
def terminate_async(self, interval=5.0):
|
|
236
|
+
"""
|
|
237
|
+
Terminate the child process group asynchronously.
|
|
238
|
+
|
|
239
|
+
This function returns immediately, while the child is slowly
|
|
240
|
+
being killed in the background.
|
|
241
|
+
|
|
242
|
+
INPUT:
|
|
243
|
+
|
|
244
|
+
- ``interval`` -- (default: 5) how much seconds to wait between
|
|
245
|
+
sending two signals
|
|
246
|
+
|
|
247
|
+
EXAMPLES:
|
|
248
|
+
|
|
249
|
+
Run an infinite loop in the shell::
|
|
250
|
+
|
|
251
|
+
sage: from sage.interfaces.sagespawn import SageSpawn
|
|
252
|
+
sage: s = SageSpawn("sh", ["-c", "while true; do sleep 1; done"])
|
|
253
|
+
|
|
254
|
+
Check that the process eventually dies after calling
|
|
255
|
+
``terminate_async``::
|
|
256
|
+
|
|
257
|
+
sage: s.ptyproc.terminate_async(interval=float(0.2))
|
|
258
|
+
sage: while True:
|
|
259
|
+
....: try:
|
|
260
|
+
....: os.kill(s.pid, 0)
|
|
261
|
+
....: except OSError:
|
|
262
|
+
....: sleep(float(0.1))
|
|
263
|
+
....: else:
|
|
264
|
+
....: break # process got killed
|
|
265
|
+
"""
|
|
266
|
+
cdef int pg, counter = 0
|
|
267
|
+
cdef int thispg = getpgid(getpid())
|
|
268
|
+
assert thispg != -1
|
|
269
|
+
|
|
270
|
+
with ContainChildren():
|
|
271
|
+
if fork():
|
|
272
|
+
# Parent process
|
|
273
|
+
return
|
|
274
|
+
|
|
275
|
+
# We need to avoid a race condition where the spawned
|
|
276
|
+
# process has not started up completely yet: we need to
|
|
277
|
+
# wait until the spawned process has changed its process
|
|
278
|
+
# group. See Issue #18741.
|
|
279
|
+
pg = getpgid(self.pid)
|
|
280
|
+
while pg == thispg:
|
|
281
|
+
counter += 1
|
|
282
|
+
if counter >= 20:
|
|
283
|
+
# Something is seriously wrong, give up...
|
|
284
|
+
raise RuntimeError("%r is not starting up" % self)
|
|
285
|
+
sleep(interval * 0.125)
|
|
286
|
+
pg = getpgid(self.pid)
|
|
287
|
+
|
|
288
|
+
# If we failed to determine the process group, probably
|
|
289
|
+
# this child is already dead...
|
|
290
|
+
if pg == -1:
|
|
291
|
+
return
|
|
292
|
+
|
|
293
|
+
# If any of these killpg() calls fail, it's most likely
|
|
294
|
+
# because the process is actually killed.
|
|
295
|
+
if killpg(pg, SIGCONT):
|
|
296
|
+
return
|
|
297
|
+
sleep(interval)
|
|
298
|
+
if killpg(pg, SIGINT):
|
|
299
|
+
return
|
|
300
|
+
sleep(interval)
|
|
301
|
+
if killpg(pg, SIGHUP):
|
|
302
|
+
return
|
|
303
|
+
sleep(interval)
|
|
304
|
+
if killpg(pg, SIGTERM):
|
|
305
|
+
return
|
|
306
|
+
sleep(interval)
|
|
307
|
+
if killpg(pg, SIGKILL):
|
|
308
|
+
return
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
"""
|
|
3
|
+
Mixin For Extra Tab Completions
|
|
4
|
+
|
|
5
|
+
The :class:`ExtraTabCompletion` class helps you to extend the tab
|
|
6
|
+
completions for objects. This is used in interfaces with third-party
|
|
7
|
+
interpreters where we want, for example, ``gap.[TAB]`` to also list
|
|
8
|
+
GAP commands and not only the Python methods of the gap interface. To
|
|
9
|
+
use it, just inherit (usually by multiple inheritance) from
|
|
10
|
+
:class:`ExtraTabCompletion` and implement a ``_tab_completion`` method
|
|
11
|
+
that returns a list of strings. These strings are then included in the
|
|
12
|
+
tab completions on instances. It is up to you to make these "fake"
|
|
13
|
+
method names work, usually by implementing ``__getattr__``.
|
|
14
|
+
|
|
15
|
+
EXAMPLES::
|
|
16
|
+
|
|
17
|
+
sage: from sage.interfaces.tab_completion import ExtraTabCompletion
|
|
18
|
+
sage: class Foo(ExtraTabCompletion, object):
|
|
19
|
+
....: def a(self):
|
|
20
|
+
....: return 1
|
|
21
|
+
....: def _tab_completion(self):
|
|
22
|
+
....: return ['c', 'd']
|
|
23
|
+
sage: f = Foo()
|
|
24
|
+
sage: f.b = 2
|
|
25
|
+
sage: sorted(dir(f))
|
|
26
|
+
[..., '_tab_completion', 'a', 'b', 'c', 'd']
|
|
27
|
+
"""
|
|
28
|
+
import builtins
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class ExtraTabCompletion:
|
|
32
|
+
|
|
33
|
+
def __dir__(self):
|
|
34
|
+
"""
|
|
35
|
+
Add to the ``dir()`` output.
|
|
36
|
+
|
|
37
|
+
This is used by IPython to read off the tab completions.
|
|
38
|
+
|
|
39
|
+
EXAMPLES::
|
|
40
|
+
|
|
41
|
+
sage: from sage.interfaces.tab_completion import ExtraTabCompletion
|
|
42
|
+
sage: obj = ExtraTabCompletion()
|
|
43
|
+
sage: dir(obj)
|
|
44
|
+
Traceback (most recent call last):
|
|
45
|
+
...
|
|
46
|
+
NotImplementedError: <class 'sage.interfaces.tab_completion.ExtraTabCompletion'> must implement _tab_completion() method
|
|
47
|
+
"""
|
|
48
|
+
try:
|
|
49
|
+
tab_fn = self._tab_completion
|
|
50
|
+
except AttributeError:
|
|
51
|
+
raise NotImplementedError(
|
|
52
|
+
'{0} must implement _tab_completion() method'.format(self.__class__))
|
|
53
|
+
return dir(self.__class__) + list(self.__dict__) + tab_fn()
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def completions(s, globs):
|
|
57
|
+
"""
|
|
58
|
+
Return a list of completions in the given context.
|
|
59
|
+
|
|
60
|
+
INPUT:
|
|
61
|
+
|
|
62
|
+
- ``s`` -- string
|
|
63
|
+
|
|
64
|
+
- ``globs`` -- string: object dictionary; context in which to
|
|
65
|
+
search for completions, e.g., :func:`globals()`
|
|
66
|
+
|
|
67
|
+
OUTPUT: list of strings
|
|
68
|
+
|
|
69
|
+
EXAMPLES::
|
|
70
|
+
|
|
71
|
+
sage: X.<x> = PolynomialRing(QQ)
|
|
72
|
+
sage: import sage.interfaces.tab_completion as s
|
|
73
|
+
sage: p = x**2 + 1
|
|
74
|
+
sage: s.completions('p.co',globals()) # indirect doctest
|
|
75
|
+
['p.coefficient',...]
|
|
76
|
+
|
|
77
|
+
sage: s.completions('dic',globals()) # indirect doctest
|
|
78
|
+
['dickman_rho', 'dict']
|
|
79
|
+
"""
|
|
80
|
+
if not s:
|
|
81
|
+
raise ValueError('empty string')
|
|
82
|
+
|
|
83
|
+
if '.' not in s:
|
|
84
|
+
n = len(s)
|
|
85
|
+
v = [x for x in globs if x[:n] == s]
|
|
86
|
+
v += [x for x in builtins.__dict__ if x[:n] == s]
|
|
87
|
+
else:
|
|
88
|
+
i = s.rfind('.')
|
|
89
|
+
method = s[i + 1:]
|
|
90
|
+
obj = s[:i]
|
|
91
|
+
n = len(method)
|
|
92
|
+
try:
|
|
93
|
+
O = eval(obj, globs)
|
|
94
|
+
D = dir(O)
|
|
95
|
+
if not method:
|
|
96
|
+
v = [obj + '.' + x for x in D if x and x[0] != '_']
|
|
97
|
+
else:
|
|
98
|
+
v = [obj + '.' + x for x in D if x[:n] == method]
|
|
99
|
+
except Exception:
|
|
100
|
+
v = []
|
|
101
|
+
return sorted(set(v))
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
|
|
3
|
+
from sage.misc.all__sagemath_objects import *
|
|
4
|
+
|
|
5
|
+
from sage.misc.html import html, pretty_print_default
|
|
6
|
+
|
|
7
|
+
from sage.misc.mathml import mathml
|
|
8
|
+
|
|
9
|
+
from sage.misc.table import table
|
|
10
|
+
|
|
11
|
+
from sage.misc.map_threaded import map_threaded
|
|
12
|
+
|
|
13
|
+
from sage.misc.mrange import xmrange, mrange, xmrange_iter, mrange_iter, cartesian_product_iterator
|
|
14
|
+
|
|
15
|
+
from sage.misc.defaults import (set_default_variable_name,
|
|
16
|
+
series_precision, set_series_precision)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
from sage.misc.functional import (additive_order,
|
|
20
|
+
base_ring,
|
|
21
|
+
base_field,
|
|
22
|
+
basis,
|
|
23
|
+
category,
|
|
24
|
+
charpoly,
|
|
25
|
+
characteristic_polynomial,
|
|
26
|
+
coerce,
|
|
27
|
+
cyclotomic_polynomial,
|
|
28
|
+
decomposition,
|
|
29
|
+
denominator,
|
|
30
|
+
det,
|
|
31
|
+
dimension,
|
|
32
|
+
dim,
|
|
33
|
+
discriminant,
|
|
34
|
+
disc,
|
|
35
|
+
eta,
|
|
36
|
+
fcp,
|
|
37
|
+
gen,
|
|
38
|
+
gens,
|
|
39
|
+
hecke_operator,
|
|
40
|
+
image,
|
|
41
|
+
integral, integrate,
|
|
42
|
+
integral_closure,
|
|
43
|
+
interval,
|
|
44
|
+
xinterval,
|
|
45
|
+
is_even,
|
|
46
|
+
is_odd,
|
|
47
|
+
kernel,
|
|
48
|
+
krull_dimension,
|
|
49
|
+
lift,
|
|
50
|
+
log as log_b,
|
|
51
|
+
minimal_polynomial,
|
|
52
|
+
minpoly,
|
|
53
|
+
multiplicative_order,
|
|
54
|
+
ngens,
|
|
55
|
+
norm,
|
|
56
|
+
numerator,
|
|
57
|
+
numerical_approx,
|
|
58
|
+
n, N,
|
|
59
|
+
objgens,
|
|
60
|
+
objgen,
|
|
61
|
+
order,
|
|
62
|
+
rank,
|
|
63
|
+
regulator,
|
|
64
|
+
round,
|
|
65
|
+
quotient,
|
|
66
|
+
quo,
|
|
67
|
+
isqrt,
|
|
68
|
+
squarefree_part,
|
|
69
|
+
sqrt,
|
|
70
|
+
symbolic_sum as sum,
|
|
71
|
+
symbolic_prod as product,
|
|
72
|
+
transpose)
|
|
73
|
+
|
|
74
|
+
from sage.misc.latex import LatexExpr, latex, view
|
|
75
|
+
|
|
76
|
+
from sage.misc.fpickle import pickle_function, unpickle_function
|
|
77
|
+
|
|
78
|
+
from sage.misc.persist import unpickle_global
|
|
Binary file
|
sage/misc/allocator.pxd
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
from cpython.object cimport *
|
|
3
|
+
|
|
4
|
+
cdef hook_tp_functions_type(object t, newfunc tp_new, destructor tp_dealloc, bint useGC)
|
|
5
|
+
|
|
6
|
+
cdef hook_tp_functions(object global_dummy, newfunc tp_new, destructor tp_dealloc, bint useGC)
|
sage/misc/allocator.pyx
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
from cpython.ref cimport Py_INCREF
|
|
3
|
+
|
|
4
|
+
cdef _hook_tp_functions_type(PyTypeObject *t, newfunc tp_new, destructor tp_dealloc, bint useGC):
|
|
5
|
+
"""
|
|
6
|
+
Initialize the fast integer creation functions.
|
|
7
|
+
"""
|
|
8
|
+
cdef long flag
|
|
9
|
+
|
|
10
|
+
# By default every object created in Pyrex is garbage
|
|
11
|
+
# collected. This means it may have references to other objects
|
|
12
|
+
# the Garbage collector has to look out for. We remove this flag
|
|
13
|
+
# as the only reference an Integer has is to the global Integer
|
|
14
|
+
# ring. As this object is unique we don't need to garbage collect
|
|
15
|
+
# it as we always have a module level reference to it. If another
|
|
16
|
+
# attribute is added to the Integer class this flag removal so as
|
|
17
|
+
# the alloc and free functions may not be used anymore.
|
|
18
|
+
# This object will still be reference counted.
|
|
19
|
+
if not useGC:
|
|
20
|
+
flag = Py_TPFLAGS_HAVE_GC
|
|
21
|
+
t.tp_flags = <long>(t.tp_flags & (~flag))
|
|
22
|
+
|
|
23
|
+
# Finally replace the functions called when an Integer needs
|
|
24
|
+
# to be constructed/destructed.
|
|
25
|
+
t.tp_new = tp_new
|
|
26
|
+
t.tp_dealloc = tp_dealloc
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
cdef hook_tp_functions_type(object tp, newfunc tp_new, destructor tp_dealloc, bint useGC):
|
|
30
|
+
cdef PyTypeObject *t = <PyTypeObject *>tp
|
|
31
|
+
_hook_tp_functions_type(t, tp_new, tp_dealloc, useGC)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
cdef hook_tp_functions(object global_dummy, newfunc tp_new, destructor tp_dealloc, bint useGC):
|
|
35
|
+
"""
|
|
36
|
+
Initialize the fast integer creation functions.
|
|
37
|
+
"""
|
|
38
|
+
# Make sure this never, ever gets collected.
|
|
39
|
+
# This is not necessary for cdef'ed variables as the global
|
|
40
|
+
# dummy integer, as such objects do not get automatically collected.
|
|
41
|
+
# In fact there is no obvious reason to prevent collection when Sage quits
|
|
42
|
+
# and we are certain no further call to the allocation function will be
|
|
43
|
+
# made; so this could be removed when the code is clean enough.
|
|
44
|
+
Py_INCREF(global_dummy)
|
|
45
|
+
|
|
46
|
+
cdef PyTypeObject* t = Py_TYPE(global_dummy)
|
|
47
|
+
_hook_tp_functions_type(t, tp_new, tp_dealloc, useGC)
|
|
Binary file
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
cdef struct binary_tree_node:
|
|
3
|
+
int key
|
|
4
|
+
binary_tree_node *left
|
|
5
|
+
binary_tree_node *right
|
|
6
|
+
void *value
|
|
7
|
+
|
|
8
|
+
# cdef binary_tree_node *BinaryTreeNode(int, object)
|
|
9
|
+
# cdef void free_binary_tree_node(binary_tree_node *)
|
|
10
|
+
# cdef void binary_tree_dealloc(binary_tree_node *)
|
|
11
|
+
# cdef void binary_tree_insert(binary_tree_node *self, int, object)
|
|
12
|
+
# cdef object binary_tree_get(binary_tree_node *, int)
|
|
13
|
+
# cdef object binary_tree_delete(binary_tree_node *, int)
|
|
14
|
+
# cdef binary_tree_node *binary_tree_left_excise(binary_tree_node *)
|
|
15
|
+
# cdef binary_tree_node *binary_tree_right_excise(binary_tree_node *)
|
|
16
|
+
# cdef binary_tree_node *binary_tree_head_excise(binary_tree_node *)
|
|
17
|
+
# cdef object binary_tree_list(binary_tree_node *, int)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
# cdef int LIST_PREORDER, LIST_POSTORDER, LIST_INORDER, LIST_KEYS, LIST_VALUES
|
|
21
|
+
# LIST_PREORDER = 1
|
|
22
|
+
# LIST_INORDER = 2
|
|
23
|
+
# LIST_POSTORDER = 4
|
|
24
|
+
# LIST_KEYS = 8
|
|
25
|
+
# LIST_VALUES = 16
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
cdef class BinaryTree:
|
|
29
|
+
cdef binary_tree_node *head
|