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
|
Binary file
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
/* sage_setup: distribution = sagemath-categories
|
|
2
|
+
*/
|
|
3
|
+
/*
|
|
4
|
+
* Pairing heap
|
|
5
|
+
*
|
|
6
|
+
* Implements a pairing heap data structure as described in [1]. See also [2]
|
|
7
|
+
* for more details.
|
|
8
|
+
*
|
|
9
|
+
* This implementation is templated by the type TI of items and the type TV of
|
|
10
|
+
* the value associated with an item. The type TI must be either a standard type
|
|
11
|
+
* (int, size_t, etc.) or a type equipped with a has function as supported by
|
|
12
|
+
* std::unordered_map. The top of the heap is the item with smallest value,
|
|
13
|
+
* i.e., this is a min heap data structure. The number of items in the heap is
|
|
14
|
+
* not fixed. It supports the following operations:
|
|
15
|
+
*
|
|
16
|
+
* - empty(): return true if the heap is empty, and false otherwise.
|
|
17
|
+
*
|
|
18
|
+
* - push(item, value): push an item to the heap with specified value.
|
|
19
|
+
*
|
|
20
|
+
* - top(): access the pair (item, value) at the top of the heap, i.e., with
|
|
21
|
+
* smallest value in time O(1).
|
|
22
|
+
* This operation assumes that the heap is not empty.
|
|
23
|
+
*
|
|
24
|
+
* - top_item(): access the item at the top of the heap in time O(1).
|
|
25
|
+
* This operation assumes that the heap is not empty.
|
|
26
|
+
*
|
|
27
|
+
* - top_value(): access the value of the item at the top of the heap in O(1).
|
|
28
|
+
* This operation assumes that the heap is not empty.
|
|
29
|
+
*
|
|
30
|
+
* - pop(): remove top item from the heap in amortize time O(log(n)).
|
|
31
|
+
*
|
|
32
|
+
* - decrease(item, new_value): change the value associated with the item to the
|
|
33
|
+
* specified value ``new_value`` in time o(log(n)). The new value must be
|
|
34
|
+
* smaller than the previous one. Otherwise the structure of the heap is no
|
|
35
|
+
* longer guaranteed.
|
|
36
|
+
* If the item is not already in the heap, this method calls method ``push``.
|
|
37
|
+
*
|
|
38
|
+
* - contains(item): check whether specified item is in the heap in time O(1).
|
|
39
|
+
*
|
|
40
|
+
* - value(item): return the value associated with the item in the heap.
|
|
41
|
+
* This operation assumes that the item is already in the heap.
|
|
42
|
+
*
|
|
43
|
+
* References:
|
|
44
|
+
*
|
|
45
|
+
* [1] M. L. Fredman, R. Sedgewick, D. D. Sleator, and R. E. Tarjan.
|
|
46
|
+
* "The pairing heap: a new form of self-adjusting heap".
|
|
47
|
+
* Algorithmica. 1 (1): 111-129, 1986. doi:10.1007/BF01840439.
|
|
48
|
+
*
|
|
49
|
+
* [2] https://en.wikipedia.org/wiki/Pairing_heap
|
|
50
|
+
*
|
|
51
|
+
* Author:
|
|
52
|
+
* - David Coudert <david.coudert@inria.fr>
|
|
53
|
+
*
|
|
54
|
+
*/
|
|
55
|
+
|
|
56
|
+
#ifndef PAIRING_HEAP_H
|
|
57
|
+
#define PAIRING_HEAP_H
|
|
58
|
+
|
|
59
|
+
#include <stdexcept>
|
|
60
|
+
#include <unordered_map>
|
|
61
|
+
|
|
62
|
+
namespace pairing_heap {
|
|
63
|
+
|
|
64
|
+
template<
|
|
65
|
+
typename TV, // type of values
|
|
66
|
+
typename T // type of the child class
|
|
67
|
+
>
|
|
68
|
+
struct PairingHeapNodeBase {
|
|
69
|
+
public:
|
|
70
|
+
|
|
71
|
+
bool operator<=(PairingHeapNodeBase const& other) const {
|
|
72
|
+
return static_cast<T const*>(this)->le_implem(static_cast<T const&>(other));
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Pair list of heaps and return pointer to the top of resulting heap
|
|
76
|
+
static T *_pair(T *p) {
|
|
77
|
+
if (p == nullptr) {
|
|
78
|
+
return nullptr;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/*
|
|
82
|
+
* Move toward the end of the list, counting elements along the way.
|
|
83
|
+
* This is done in order to:
|
|
84
|
+
* - know whether the list has odd or even number of nodes
|
|
85
|
+
* - speed up going-back through the list
|
|
86
|
+
*/
|
|
87
|
+
size_t children = 1;
|
|
88
|
+
T *it = p;
|
|
89
|
+
while (it->next != nullptr) {
|
|
90
|
+
it = it->next;
|
|
91
|
+
children++;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
T *result;
|
|
95
|
+
|
|
96
|
+
if (children % 2 == 1) {
|
|
97
|
+
T *a = it;
|
|
98
|
+
it = it->prev;
|
|
99
|
+
a->prev = a->next = nullptr;
|
|
100
|
+
result = a;
|
|
101
|
+
} else {
|
|
102
|
+
T *a = it;
|
|
103
|
+
T *b = it->prev;
|
|
104
|
+
it = it->prev->prev;
|
|
105
|
+
a->prev = a->next = b->prev = b->next = nullptr;
|
|
106
|
+
result = _merge(a, b);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
for (size_t i = 0; i < (children - 1) / 2; i++) {
|
|
110
|
+
T *a = it;
|
|
111
|
+
T *b = it->prev;
|
|
112
|
+
it = it->prev->prev;
|
|
113
|
+
a->prev = a->next = b->prev = b->next = nullptr;
|
|
114
|
+
result = _merge(_merge(a, b), result);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return result;
|
|
118
|
+
} // end _pair
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
// Merge 2 heaps and return pointer to the top of resulting heap
|
|
122
|
+
static T *_merge(T *a, T *b) {
|
|
123
|
+
if (*a <= *b) { // Use comparison method of PairingHeapNodeBase
|
|
124
|
+
_link(a, b);
|
|
125
|
+
return a;
|
|
126
|
+
} else {
|
|
127
|
+
_link(b, a);
|
|
128
|
+
return b;
|
|
129
|
+
}
|
|
130
|
+
} // end _merge
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
// Make b a child of a
|
|
134
|
+
static void _link(T *a, T *b) {
|
|
135
|
+
if (a->child != nullptr) {
|
|
136
|
+
b->next = a->child;
|
|
137
|
+
a->child->prev = b;
|
|
138
|
+
}
|
|
139
|
+
b->prev = a;
|
|
140
|
+
a->child = b;
|
|
141
|
+
} // end _link
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
// Remove p from its parent children list
|
|
145
|
+
static void _unlink(T *p) {
|
|
146
|
+
if (p->prev->child == p) {
|
|
147
|
+
p->prev->child = p->next;
|
|
148
|
+
} else {
|
|
149
|
+
p->prev->next = p->next;
|
|
150
|
+
}
|
|
151
|
+
if (p->next != nullptr) {
|
|
152
|
+
p->next->prev = p->prev;
|
|
153
|
+
}
|
|
154
|
+
p->prev = nullptr;
|
|
155
|
+
p->next = nullptr;
|
|
156
|
+
} // end _unlink
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
TV value; // value associated to the node
|
|
160
|
+
T * prev; // Previous sibling of the node or parent
|
|
161
|
+
T * next; // Next sibling of the node
|
|
162
|
+
T * child; // First child of the node
|
|
163
|
+
|
|
164
|
+
protected:
|
|
165
|
+
// Only derived class can build a PairingHeapNodeBase
|
|
166
|
+
explicit PairingHeapNodeBase(const TV &some_value)
|
|
167
|
+
: value{some_value}, prev{nullptr}, next{nullptr}, child{nullptr} {
|
|
168
|
+
}
|
|
169
|
+
}; // end struct PairingHeapNodeBase
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
template<
|
|
173
|
+
typename TI, // type of items stored in the node
|
|
174
|
+
typename TV // type of values associated with the stored item
|
|
175
|
+
// Assumes TV is a comparable type
|
|
176
|
+
>
|
|
177
|
+
class PairingHeapNode
|
|
178
|
+
: public PairingHeapNodeBase<TV, PairingHeapNode<TI, TV>> {
|
|
179
|
+
|
|
180
|
+
public:
|
|
181
|
+
PairingHeapNode(TI const& some_item, TV const& some_value)
|
|
182
|
+
: Base_(some_value), item(some_item) {
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
bool le_implem(PairingHeapNode const& other) const {
|
|
186
|
+
return this->value <= other.value;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
TI item; // item contained in the node
|
|
190
|
+
|
|
191
|
+
private:
|
|
192
|
+
using Base_ = PairingHeapNodeBase<TV, PairingHeapNode<TI, TV>>;
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
class PairingHeapNodePy
|
|
197
|
+
: public PairingHeapNodeBase<PyObject *, PairingHeapNodePy> {
|
|
198
|
+
public:
|
|
199
|
+
PairingHeapNodePy(PyObject *some_value)
|
|
200
|
+
: Base_(some_value) {
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
bool le_implem(PairingHeapNodePy const& other) const {
|
|
204
|
+
return PyObject_RichCompareBool(this->value, other.value, Py_LE);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
private:
|
|
208
|
+
using Base_ = PairingHeapNodeBase<PyObject *, PairingHeapNodePy>;
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
template<
|
|
214
|
+
typename TI, // type of items stored in the node
|
|
215
|
+
typename TV // type of values associated with the stored item
|
|
216
|
+
// Assume TV is a comparable type
|
|
217
|
+
>
|
|
218
|
+
class PairingHeap
|
|
219
|
+
{
|
|
220
|
+
public:
|
|
221
|
+
using HeapNodeType = PairingHeapNode<TI, TV>;
|
|
222
|
+
|
|
223
|
+
// Constructor
|
|
224
|
+
explicit PairingHeap()
|
|
225
|
+
: root(nullptr) {
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
// Copy constructor
|
|
229
|
+
PairingHeap(PairingHeap<TI, TV> const *other)
|
|
230
|
+
: root(nullptr) {
|
|
231
|
+
for (auto const& it: other->nodes) {
|
|
232
|
+
push(it.first, it.second->value);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// Destructor
|
|
237
|
+
virtual ~PairingHeap() {
|
|
238
|
+
for (auto const& it: nodes) {
|
|
239
|
+
delete it.second;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// Return true if the heap is empty, else false
|
|
244
|
+
bool empty() const {
|
|
245
|
+
return root == nullptr;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// Return true if the heap is not empty, else false
|
|
249
|
+
explicit operator bool() const {
|
|
250
|
+
return root != nullptr;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// Insert an item into the heap with specified value (priority)
|
|
254
|
+
void push(const TI &some_item, const TV &some_value) {
|
|
255
|
+
if (contains(some_item)) {
|
|
256
|
+
throw std::invalid_argument("item already in the heap");
|
|
257
|
+
}
|
|
258
|
+
PairingHeapNode<TI, TV> *p = new PairingHeapNode<TI, TV>(some_item, some_value);
|
|
259
|
+
nodes[some_item] = p;
|
|
260
|
+
root = empty() ? p : HeapNodeType::_merge(root, p);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// Return the top pair (item, value) of the heap
|
|
264
|
+
std::pair<TI, TV> top() const {
|
|
265
|
+
if (empty()) {
|
|
266
|
+
throw std::domain_error("trying to access the top of an empty heap");
|
|
267
|
+
}
|
|
268
|
+
return std::make_pair(root->item, root->value);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// Return the top item of the heap
|
|
272
|
+
TI top_item() const {
|
|
273
|
+
if (empty()) {
|
|
274
|
+
throw std::domain_error("trying to access the top of an empty heap");
|
|
275
|
+
}
|
|
276
|
+
return root->item;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// Return the top value of the heap
|
|
280
|
+
TV top_value() const {
|
|
281
|
+
if (empty()) {
|
|
282
|
+
throw std::domain_error("trying to access the top of an empty heap");
|
|
283
|
+
}
|
|
284
|
+
return root->value;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// Remove the top element from the heap. Do nothing if empty
|
|
288
|
+
void pop() {
|
|
289
|
+
if (!empty()) {
|
|
290
|
+
PairingHeapNode<TI, TV> *p = root->child;
|
|
291
|
+
nodes.erase(root->item);
|
|
292
|
+
delete root;
|
|
293
|
+
root = HeapNodeType::_pair(p);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// Decrease the value of specified item
|
|
298
|
+
// If the item is not in the heap, push it
|
|
299
|
+
void decrease(const TI &some_item, const TV &new_value) {
|
|
300
|
+
if (contains(some_item)) {
|
|
301
|
+
PairingHeapNode<TI, TV> *p = nodes[some_item];
|
|
302
|
+
if (p->value <= new_value) {
|
|
303
|
+
throw std::invalid_argument("the new value must be less than the current value");
|
|
304
|
+
}
|
|
305
|
+
p->value = new_value;
|
|
306
|
+
if (p->prev != nullptr) {
|
|
307
|
+
HeapNodeType::_unlink(p);
|
|
308
|
+
root = HeapNodeType::_merge(root, p);
|
|
309
|
+
}
|
|
310
|
+
} else {
|
|
311
|
+
push(some_item, new_value);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// Check if specified item is in the heap
|
|
316
|
+
bool contains(TI const& some_item) const {
|
|
317
|
+
return nodes.find(some_item) != nodes.end();
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// Return the value associated with the item
|
|
321
|
+
TV value(const TI &some_item) const {
|
|
322
|
+
auto it = nodes.find(some_item);
|
|
323
|
+
if (it == nodes.end()) {
|
|
324
|
+
throw std::invalid_argument("the specified item is not in the heap");
|
|
325
|
+
}
|
|
326
|
+
return it->second->value;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
// Return the number of items in the heap
|
|
330
|
+
size_t size() const {
|
|
331
|
+
return nodes.size();
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
private:
|
|
335
|
+
|
|
336
|
+
// Pointer to the top of the heap
|
|
337
|
+
PairingHeapNode<TI, TV> *root;
|
|
338
|
+
|
|
339
|
+
// Map used to access stored items
|
|
340
|
+
std::unordered_map<TI, PairingHeapNode<TI, TV> *> nodes;
|
|
341
|
+
|
|
342
|
+
}; // end class PairingHeap
|
|
343
|
+
|
|
344
|
+
} // end namespace pairing_heap
|
|
345
|
+
|
|
346
|
+
#endif
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
# ******************************************************************************
|
|
3
|
+
# Copyright (C) 2024 David Coudert <david.coudert@inria.fr>
|
|
4
|
+
#
|
|
5
|
+
# This program is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
|
7
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
# https://www.gnu.org/licenses/
|
|
10
|
+
# ******************************************************************************
|
|
11
|
+
|
|
12
|
+
from cpython cimport PyObject
|
|
13
|
+
from libcpp.pair cimport pair
|
|
14
|
+
from sage.data_structures.bitset_base cimport bitset_t
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# ==============================================================================
|
|
18
|
+
# Interface to pairing heap data structure from ./pairing_heap.h
|
|
19
|
+
# ==============================================================================
|
|
20
|
+
|
|
21
|
+
cdef extern from "./pairing_heap.h" namespace "pairing_heap":
|
|
22
|
+
cdef cppclass PairingHeap[TypeOfItem, TypeOfValue]:
|
|
23
|
+
PairingHeap() except +
|
|
24
|
+
PairingHeap(PairingHeap[TypeOfItem, TypeOfValue]) except +
|
|
25
|
+
bint empty()
|
|
26
|
+
void push(TypeOfItem, TypeOfValue) except +
|
|
27
|
+
pair[TypeOfItem, TypeOfValue] top() except +
|
|
28
|
+
TypeOfItem top_item() except +
|
|
29
|
+
TypeOfValue top_value() except +
|
|
30
|
+
void pop() except +
|
|
31
|
+
void decrease(TypeOfItem, TypeOfValue) except +
|
|
32
|
+
bint contains(TypeOfItem)
|
|
33
|
+
TypeOfValue value(TypeOfItem) except +
|
|
34
|
+
size_t size()
|
|
35
|
+
|
|
36
|
+
cdef cppclass PairingHeapNodePy:
|
|
37
|
+
PyObject * value # value associated with the item
|
|
38
|
+
PairingHeapNodePy * prev # Previous sibling of the node or parent
|
|
39
|
+
PairingHeapNodePy * next # Next sibling of the node
|
|
40
|
+
PairingHeapNodePy * child # First child of the node
|
|
41
|
+
|
|
42
|
+
@staticmethod
|
|
43
|
+
PairingHeapNodePy * _merge(PairingHeapNodePy * a, PairingHeapNodePy * b) except +
|
|
44
|
+
|
|
45
|
+
@staticmethod
|
|
46
|
+
PairingHeapNodePy * _pair(PairingHeapNodePy * p) except +
|
|
47
|
+
|
|
48
|
+
@staticmethod
|
|
49
|
+
void _link(PairingHeapNodePy * a, PairingHeapNodePy * b)
|
|
50
|
+
|
|
51
|
+
@staticmethod
|
|
52
|
+
void _unlink(PairingHeapNodePy * p)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
# ==============================================================================
|
|
56
|
+
# Pairing heap data structure with fixed capacity n
|
|
57
|
+
# ==============================================================================
|
|
58
|
+
|
|
59
|
+
cdef class PairingHeap_class:
|
|
60
|
+
cdef size_t n # maximum number of items
|
|
61
|
+
cdef PairingHeapNodePy * root # pointer to the top of the heap
|
|
62
|
+
cdef PairingHeapNodePy * nodes # array of size n to store items
|
|
63
|
+
cdef size_t number_of_items # number of active items
|
|
64
|
+
cpdef bint empty(self) noexcept
|
|
65
|
+
cpdef bint full(self) noexcept
|
|
66
|
+
cpdef size_t capacity(self) noexcept
|
|
67
|
+
cpdef size_t size(self) noexcept
|
|
68
|
+
cpdef tuple top(self)
|
|
69
|
+
cpdef object top_value(self)
|
|
70
|
+
cpdef void pop(self) noexcept
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
cdef class PairingHeap_of_n_integers(PairingHeap_class):
|
|
74
|
+
cdef bitset_t active # bitset to identify active items
|
|
75
|
+
cpdef void push(self, size_t item, object value) except *
|
|
76
|
+
cpdef size_t top_item(self) except *
|
|
77
|
+
cpdef void decrease(self, size_t item, object new_value) except *
|
|
78
|
+
cpdef object value(self, size_t item)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
cdef class PairingHeap_of_n_hashables(PairingHeap_class):
|
|
82
|
+
cdef list _int_to_item # mapping from integers to items
|
|
83
|
+
cdef dict _item_to_int # mapping from items to integers
|
|
84
|
+
cdef list free_idx # list of free indexes
|
|
85
|
+
cpdef void push(self, object item, object value) except *
|
|
86
|
+
cpdef object top_item(self)
|
|
87
|
+
cpdef void decrease(self, object item, object new_value) except *
|
|
88
|
+
cpdef object value(self, object item)
|