Skip to main content

cut pursuit algorithms

Project description

Cut-Pursuit Algorithms, Parallelized Along Components (fork)

About this fork

The original code in available in this repository. https://gitlab.com/1a7r0ch3/parallel-cut-pursuit.

This a fork for python packaging purposes.

Please post issues in this repos only if you are sure your problem is related to the packaging... and please post issue on the upstream repository only if you are sure your problem is not related to the packaging.

See below the original README (only the python section was modified)

Original README

Generic C++ classes for implementing cut-pursuit algorithms.
Specialization to convex problems involving graph total variation, and nonconvex problems involving contour length, as explained in our articles (Landrieu and Obozinski, 2016; Raguet and Landrieu, 2018).
Parallel implementation with OpenMP.
MEX interfaces for GNU Octave or Matlab.
Extension modules for Python.

This Git repository uses submodules.
Clone with

git clone --recurse-submodules https://gitlab.com/1a7r0ch3/parallel-cut-pursuit  

Pull changes with

git pull --recurse-submodules  

Table of Contents

  1. General problem statement
  2. C++ classes and Specializations
    2.1. Proximity operator of the graph total variation
    2.2. Quadratic functional and graph total variation
    2.3. Separable multidimensional loss and graph total variation
    2.4. Separable distance and contour length
  3. Documentation
    3.1. Directory tree
    3.2. Graph structure
    3.3. C++ documentation
    3.4. GNU Octave or Matlab
    3.5. Python
  4. References
  5. License

General problem statement

The cut-pursuit algorithms minimize functionals structured, over a weighted graph G = (V, E, w), as

    F: x ∈ ΩVf(x) + ∑(u,v) ∈ E w(u,v) ψ(xu, xv) ,

where Ω is some base set, and the functional ψ: Ω² → ℝ penalizes dissimilarity between its arguments, in order to enforce solutions which are piecewise constant along the graph G.

The cut-pursuit approach is to seek partitions V of the set of vertices V, constituting the constant connected components of the solution, by successively solving the corresponding problem, structured over the reduced graph G = (V, E), that is

  arg minξ ∈ ΩV  F(x) ,    such that ∀ UV, ∀ uU, xu = ξU ,

and then refining the partition.
A key requirement is thus the ability to solve the reduced problem, which often have the exact same structure as the original one, but with much less vertices |V| ≪ |V|. If the solution of the original problem has only few constant connected components in comparison to the number of vertices, the cut-pursuit strategy can speed-up minimization by several orders of magnitude.

Cut-pursuit algorithms come in two main flavors, namely “directionally differentiable” and “noncontinuous”.

  • In the directionally differentiable case, the base set Ω is typically a vector space, and it is required that f is differentiable, or at least that its nondifferentiable part is separable along the graph and admits (potentially infinite) directional derivatives. This comprises notably many convex problems, where ψ(xu, xv) = ║xuxv║, that is to say involving a graph total variation. The refinement of the partition is based on the search for a steep directional derivative, and the reduced problem is solved using convex or continuous optimization; optimality guarantees can be provided.

  • In the noncontinuous case, the dissimilarity penalization typically uses ψ(xu, xv) = 0 if xu =xv, 1 otherwise, resulting in a measure of the contour length of the constant connected components. The functional f is typically required to be separable along the graph, and to have computational properties favorable enough for solving reduced problems. The refinement of the partition relies on greedy heuristics.

Both flavors admit multidimensional extensions, that is to say Ω is not required to be only a set of scalars.

C++ classes and Specializations

The module maxflow implements the class Maxflow, a modification of the Graph class of Y. Boykov and V. Kolmogorov, for making use of their maximum flow algorithm.

The module cut_pursuit implements the base class Cp, defining all steps of the cut-pursuit approach in virtual methods.

The module cut_pursuit_d1 implements the class Cp_d1 derived from Cp, specializing cut-pursuit for directionally differentiable cases involving the graph total variation.

The module cut_pursuit_d0 implements the class Cp_d0 derived from Cp, specializing cut-pursuit for noncontinuous cases involving the contour length penalization.

Cp_prox_tv: proximity operator of the graph total variation

Also coined “graph total variation denoising” or “general fused LASSO signal approximation”. The objective functional is

    F: x ∈ ℝDV ↦ 1/2 ║yxM2 + ∑(u,v) ∈ E w(u,v)xuxvp, Mδ ,

where D is the dimension of the signal on each vertex, y ∈ ℝDV, M is a diagonal metric weighting the square ℓ2 norm, w ∈ ℝE are regularization weights, and the norm on the finite differences is defined by p being 1 or 2 and a weighting diagonal metric Mδ.

The reduced problem is solved using the preconditioned forward-Douglas–Rachford splitting algorithm, included as a git submodule pcd-prox-split.

Cp_d1_ql1b: quadratic functional, ℓ1 norm, bounds, and graph total variation

The base set is Ω = ℝ, and the general form is

    F: x ∈ ℝV ↦ 1/2 ║y(ℓ2)Ax2 + ∑vV λv |y(ℓ1)xv| +
vV ι[mv, Mv](xv) + ∑(u,v) ∈ E w(u,v) |xuxv| ,

where y(ℓ2) ∈ ℝn, A: ℝV → ℝn is a linear operator, y(ℓ1) ∈ ℝV and λ ∈ ℝV and w ∈ ℝE are regularization weights, m, M ∈ ℝV are parameters and ι[a,b] is the convex indicator of [a, b] : x ↦ 0 if x ∈ [a, b], +∞ otherwise.

When y(ℓ1) is zero, the combination of ℓ1 norm and total variation is sometimes coined fused LASSO.

When A is the identity, λ is zero and there are no box constraints, the problem boils down to the proximity operator of the graph total variation.

Currently, A must be provided as a matrix. See the documentation for special cases.

The reduced problem is solved using the preconditioned forward-Douglas–Rachford splitting algorithm, included as a git submodule pcd-prox-split.

An example with GNU Octave or Matlab and Python interfaces, where A is a full ill-conditioned matrix, with positivity and fused LASSO constraints, on a task of brain source identification from electroencephalography.

ground truth raw retrieved activity identified sources

Cp_d1_lsx: separable loss, simplex constraints, and graph total variation

The base set is Ω = ℝD, where D can be seen as a set of labels, and the general form is

    F: x ∈ ℝDVf(y, x) + ∑vV ιΔD(xv) +
(u,v) ∈ E w(d1)(u,v)dD λd |xu,dxv,d| ,

where y ∈ ℝDV, f is a loss functional (see below), w(d1) ∈ ℝE and λ ∈ ℝD are regularization weights, and ιΔD is the convex indicator of the simplex ΔD = {x ∈ ℝD | ∑d xd = 1 and ∀ d, xd ≥ 0}: x ↦ 0 if x ∈ ΔD, +∞ otherwise.

The following loss functionals are available, where w(f) ∈ ℝV are weights on vertices.
Linear: f(y, x) = − ∑vV w(f)vdD xv,d yv,d
Quadratic: f(y, x) = ∑vV w(f)vdD (xv,dyv,d)2
Smoothed Kullback–Leibler divergence (equivalent to cross-entropy):
f(y, x) = ∑vV w(f)v KL(α u + (1 − α) yv, α u + (1 − α) xv),
where α ∈ ]0,1[, u ∈ ΔD is the uniform discrete distribution over D, and KL: (p, q) ↦ ∑dD pd log(pd/qd).

The reduced problem is solved using the preconditioned forward-Douglas–Rachford splitting algorithm, included as a git submodule pcd-prox-split.

An example with the smoothed Kullback–Leibler is provided with GNU Octave or Matlab and Python interfaces, on a task of spatial regularization of semantic classification of a 3D point cloud.

ground truth random forest classifier regularized classification

Cp_d0_dist: separable distance and weighted contour length

The base set is Ω = ℝD or ΔD and the general form is

    F: x ∈ ℝDVf(y, x) + ∑(u,v) ∈ E w(d0)(u,v)xuxv0 ,

where y ∈ ΩV, f is a loss functional akin to a distance (see below), and ║·║0 is the ℓ0 pseudo-norm x ↦ 0 if x = 0, 1 otherwise.

The following loss functionals are available, where w(f) ∈ ℝV are weights on vertices and m(f) ∈ ℝD are weights on coordinates.
Weighted quadratic: Ω = ℝD and f(y, x) = ∑vV w(f)vdD m(f)d (xv,dyv,d)2
Weighted smoothed Kullback–Leibler divergence (equivalent to cross-entropy): Ω = ΔD and
f(y, x) = ∑vV w(f)v KLm(f)(α u + (1 − α) yv, α u + (1 − α) xv),
where α ∈ ]0,1[, u ∈ ΔD is the uniform discrete distribution over D, and
KLm(f): (p, q) ↦ ∑dD m(f)d pd log(pd/qd).

The reduced problem amounts to averaging, and the split step uses k-means++ algorithm.

When the loss is quadratic, the resulting problem is sometimes coined “minimal partition problem”.

An example with the smoothed Kullback–Leibler is provided with GNU Octave or Matlab interface, on a task of spatial regularization of semantic classification of a 3D point cloud.

Documentation

Directory tree

.   
├── include/        C++ headers, with some doc  
├── octave/         GNU Octave or Matlab code  
│   ├── doc/        some documentation  
│   └── mex/        MEX C++ interfaces
├── pcd-prox-split/ git submodule preconditionned forward-Douglas–Rachford 
│                   algorithm (required only for directionnaly 
│                   differentiable cases and example data)
├── python/         Python code  
│   ├── cpython/    C Python interfaces  
│   └── wrappers/   python wrappers and documentation  
├── src/            C++ sources  
└── wth-element/    git submodule for weighted quantiles search
                    (required only for cp_d1_ql1b) 

C++ documentation

Requires C++11.
Be sure to have OpenMP enabled with your compiler to enjoy parallelization. Note that, as of 2020, MSVC still does not support OpenMP 3.0 (published in 2008); consider switching to a decent compiler.

The number of parallel threads used in parallel regions is crucial for good performance; it is roughly controlled by a preprocessor macro MIN_OPS_PER_THREAD which can be again set with-D compilation flag. A rule of thumb is to set it to 10000 on personal computers with a handful of cores, and up to 100000 for large computer clusters with tens of cores.

The C++ classes are documented within the corresponding headers in include/.

Graph structure

Graph structures must be given as forward-star representation. For conversion from simple adjacency list representation, or for creation from scratch for regular N-dimensionnal grids (2D for images, 3D for volumes, etc.), see the pcd-prox-split/grid-graph git submodule.

GNU Octave or Matlab

See the script compile_parallel_cut_pursuit_mex.m for typical compilation commands; it can be run directly from the GNU Octave interpreter, but Matlab users must set compilation flags directly on the command line CXXFLAGS = ... and LDFLAGS = ....

The integer type holding the components assignment is by defaut on 16 bits. For applications expecting a large number of components, this can be extended to 32 bits with the compilation option -DCOMP_T_ON_32_BITS.

Extensive documentation of the MEX interfaces can be found within dedicated .m files in octave/doc/.

The script example_prox_tv.m exemplifies the use of Cp_prox_tv, on a task of color image denoising.

The script example_EEG.m exemplifies the use of Cp_d1_ql1b, on a task of brain source identification from electroencephalography.

The scripts example_labeling_3D.m and example_labeling_3D_d0.m exemplify the use of, respectively, Cp_d1_lsx and Cp_d0_dist, on a task of spatial regularization of semantic classification of a 3D point cloud.

Python

Requires numpy package.
See the script setup.py for compiling modules with setuptools; it can be run simply by using pip e.g. python -m pip install .. pre compiled binaries for Windows and Linux will soon be available on PyPI.

if more than 65535 components are expected in you graph you can force the use of 32 bit indices by setting the COMP_T_ON_32_BITS environement variable to 1 e.g. export COMP_T_ON_32_BITS=1 on bash.

Extensive documentation of the Python wrappers can be found in the corresponding .py files.

The script example_prox_tv.py exemplifies the use of Cp_prox_tv, on a task of color image denoising.

The script example_EEG.py exemplifies the use of Cp_d1_ql1b, on a task of brain source identification from electroencephalography.

The scripts example_labeling_3D.py and example_labeling_3D_d0.py exemplify the use of, respectively, Cp_d1_lsx and Cp_d0_dist, on a task of spatial regularization of semantic classification of a 3D point cloud.

References

L. Landrieu and G. Obozinski, Cut Pursuit: Fast Algorithms to Learn Piecewise Constant Functions on Weighted Graphs, 2017.

H. Raguet and L. Landrieu, Cut-pursuit Algorithm for Regularizing Nonsmooth Functionals with Graph Total Variation, 2018.

Y. Boykov and V. Kolmogorov, An Experimental Comparison of Min-Cut/Max-Flow Algorithms for Energy Minimization in Vision, IEEE Transactions on Pattern Analysis and Machine Intelligence, 2004.

License

This software is under the GPLv3 license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pycut_pursuit-0.1.4-cp313-cp313-win_amd64.whl (361.1 kB view details)

Uploaded CPython 3.13Windows x86-64

pycut_pursuit-0.1.4-cp313-cp313-musllinux_1_1_x86_64.whl (7.3 MB view details)

Uploaded CPython 3.13musllinux: musl 1.1+ x86-64

pycut_pursuit-0.1.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pycut_pursuit-0.1.4-cp313-cp313-macosx_14_0_arm64.whl (852.3 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

pycut_pursuit-0.1.4-cp312-cp312-win_amd64.whl (360.7 kB view details)

Uploaded CPython 3.12Windows x86-64

pycut_pursuit-0.1.4-cp312-cp312-musllinux_1_1_x86_64.whl (7.3 MB view details)

Uploaded CPython 3.12musllinux: musl 1.1+ x86-64

pycut_pursuit-0.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pycut_pursuit-0.1.4-cp312-cp312-macosx_14_0_arm64.whl (851.6 kB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

pycut_pursuit-0.1.4-cp311-cp311-win_amd64.whl (360.3 kB view details)

Uploaded CPython 3.11Windows x86-64

pycut_pursuit-0.1.4-cp311-cp311-musllinux_1_1_x86_64.whl (7.3 MB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ x86-64

pycut_pursuit-0.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pycut_pursuit-0.1.4-cp311-cp311-macosx_14_0_arm64.whl (851.2 kB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

pycut_pursuit-0.1.4-cp310-cp310-win_amd64.whl (360.3 kB view details)

Uploaded CPython 3.10Windows x86-64

pycut_pursuit-0.1.4-cp310-cp310-musllinux_1_1_x86_64.whl (7.3 MB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ x86-64

pycut_pursuit-0.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

pycut_pursuit-0.1.4-cp310-cp310-macosx_14_0_arm64.whl (851.2 kB view details)

Uploaded CPython 3.10macOS 14.0+ ARM64

File details

Details for the file pycut_pursuit-0.1.4-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for pycut_pursuit-0.1.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 044449de9f03e9d43539fec84ec0a1a3d7e473b8dbadad276a914d61eb31d47f
MD5 ae7fec989e9ef26326dadaa243aee228
BLAKE2b-256 92d702be453f6cd07c3b916a91715a000e24baa0de9d5c41eba9ed2f710559af

See more details on using hashes here.

File details

Details for the file pycut_pursuit-0.1.4-cp313-cp313-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pycut_pursuit-0.1.4-cp313-cp313-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 9b5afb80464549ba04e562a00e7a53c6f91fd1d5166e05ec7862e2534e028bd9
MD5 717cd89fd5126dede2d2a9e7b1aee4b4
BLAKE2b-256 d76a64d808b3e6ad7603ed6e5400838e792c8ce211631738bca93a05b7e0f47a

See more details on using hashes here.

File details

Details for the file pycut_pursuit-0.1.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pycut_pursuit-0.1.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 450dfc11662383f3e2f8ae041ecd6422cc711df40fc6c976b0f58ae72d5cb30a
MD5 d59c5b7b7cb0d2479e1e6108327add3f
BLAKE2b-256 dda0ef8f02ddadfc9aeefcf9908c9b0422d48985a21711d1a16b5112b85d60f2

See more details on using hashes here.

File details

Details for the file pycut_pursuit-0.1.4-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pycut_pursuit-0.1.4-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 b274cf2036c0bc0d8747419d3e9af93f8edbb5aee4a1e08e7dc4e21fceac196d
MD5 a51fa591fd1118ba8de27badb3343d8c
BLAKE2b-256 a6320559cc773e36666f47aa7a19ec4a07a79a001368ef7c356dfa131b211b98

See more details on using hashes here.

File details

Details for the file pycut_pursuit-0.1.4-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for pycut_pursuit-0.1.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c6d29793ff9ebb9c36dec6aa97b9fe7c07cdb9e79f202b862e14904cf7a191f9
MD5 7f8b987b15e0c6e35da2d13a0e68e158
BLAKE2b-256 884a48f8b242b037955ef22f7e54f1aa44d647ca2c22e3b52aff0cb607dac91e

See more details on using hashes here.

File details

Details for the file pycut_pursuit-0.1.4-cp312-cp312-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pycut_pursuit-0.1.4-cp312-cp312-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 03f2139a984f5c3a6f41123445b2858e59b226480885c6625657cc25ecce0367
MD5 95dcad4bd915bc4dbb41b03fdf2e19cd
BLAKE2b-256 fb1b516eecf24fdc4e63ed516587abd9890a94b230dac7831a6fd82a8ad171a0

See more details on using hashes here.

File details

Details for the file pycut_pursuit-0.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pycut_pursuit-0.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 32698636080d91e45d6acf7e8e5587b54f76f3d4167fa353a60ca94a6866d07b
MD5 288560ab52d18c3f9eaa0b93dc11d398
BLAKE2b-256 5b5584e8901c1c1f99b4bc43927f2e75f390ca690a4601a6afdf54b536fcf849

See more details on using hashes here.

File details

Details for the file pycut_pursuit-0.1.4-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pycut_pursuit-0.1.4-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 2883801aca4ef4a46eca28a6ecce808530ea55bfcacdc51eb16bfc51f3f9796d
MD5 4ddac884f124b45b808f363159a98fdf
BLAKE2b-256 a1ae8ff4a8026b2ba67f90a2304740089777d8ac1255dd569096c1a8af6cd363

See more details on using hashes here.

File details

Details for the file pycut_pursuit-0.1.4-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for pycut_pursuit-0.1.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 ba6334a289b4487083e2bb4c4e648564b468597858a02519b423d426585e3038
MD5 c697350c7297a6fda0a301ee1a2c971c
BLAKE2b-256 71fea791f04309fb6100895167b8aa7f25efa66d491355f96c54ae26fb07a0c0

See more details on using hashes here.

File details

Details for the file pycut_pursuit-0.1.4-cp311-cp311-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pycut_pursuit-0.1.4-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 120f092d2338a6592b54ab4398f539933856a40c012dc77270aef58408b8feea
MD5 168ec5a11e7a814ad130d28615b44941
BLAKE2b-256 b4593834d5133ad17d62ac29a714b34b3632cfc2ca9c8e6925a71d270ad9e56b

See more details on using hashes here.

File details

Details for the file pycut_pursuit-0.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pycut_pursuit-0.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0bb4a62b03d4640b6fac0c17fc976da852f871f888adf233fae4b3352554410b
MD5 b034c437aa953378d9d31deed8e4b8d5
BLAKE2b-256 9a2c0b393d0a334f7f2f20b2986f943498e11179d93961afd0a87cdafb1bef0b

See more details on using hashes here.

File details

Details for the file pycut_pursuit-0.1.4-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pycut_pursuit-0.1.4-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 2b5835c0a2bfa1f6b36e0bf2a1fda5adc0a255b494efe71f740b7d32d6b86c59
MD5 cf45a8e49c1e098db181ee558d387898
BLAKE2b-256 cafb0a4bf3db9c4e63042a221b97da6a39b7d55d552095173945a968b2934efb

See more details on using hashes here.

File details

Details for the file pycut_pursuit-0.1.4-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for pycut_pursuit-0.1.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 14348a067f74050449ad2abf91be4ebaaec5a28e97db4f186279b08067ea4426
MD5 ccb4f8a31b487db5b18aacba59490e2b
BLAKE2b-256 696f88c7c247d5820bea7ccdf43e94009072e0e8f44dce480f46b7b6ae72d7c1

See more details on using hashes here.

File details

Details for the file pycut_pursuit-0.1.4-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pycut_pursuit-0.1.4-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 58a6d89fc3cab510e4863db6d001af2da2ff519fdfd477588df2e2104aef427f
MD5 1a93641f207d629ad1608998c99f6899
BLAKE2b-256 d1c8d5eae30b568ace19c15cf8b06241e2f60996efd94b01cd97902b77ce4b27

See more details on using hashes here.

File details

Details for the file pycut_pursuit-0.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pycut_pursuit-0.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 395603750013f6b35b544af2da5bc138dbb56b47ce87a4f267f5fe9aa1beac61
MD5 4288ae4ac8ad11c4a1a31e36fc8250f9
BLAKE2b-256 9d69ee6d7896cfb4ea74ad583937dde8da05df2c6fc78471e5fa786dae9d6418

See more details on using hashes here.

File details

Details for the file pycut_pursuit-0.1.4-cp310-cp310-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pycut_pursuit-0.1.4-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 416302b33a4ea8994be8e2d4ce652deff3c485d61485690aa4e7893db2343697
MD5 d3c08ac580bedabba3b43b62f5ce5552
BLAKE2b-256 dbad678cfdb1ac57fa779808cc0937381645cc6485765a92d9a5fa960514fa50

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page