Skip to main content

Connected components on 2D and 3D images. Supports multiple labels.

Project description

Build Status PyPI version

Connected Components 3D

Implementation of connected components in three dimensions using a 26, 18, or 6 connected neighborhood in 3D or 4 and 8-connected in 2D. This package uses a 3D variant of the two pass method by Rosenfeld and Pflatz augmented with Union-Find and a decision tree based on the 2D 8-connected work of Wu, Otoo, and Suzuki. This implementation is compatible with images containing many different labels, not just binary images. It can be used with 2D or 3D images.

I wrote this package because I was working on densely labeled 3D biomedical images of brain tissue (e.g. 512x512x512 voxels). Other off the shelf implementations I reviewed were limited to binary images. This rendered these other packages too slow for my use case as it required masking each label and running the connected components algorithm once each time. For reference, there are often between hundreds to thousands of labels in a given volume. The benefit of this package is that it labels all connected components in one shot, improving performance by one or more orders of magnitude.

In general, binary images are much more common (usually resulting from image thresholding), but multi-label images crop up in instance segmentation and semantic labeling as a classifier may label touching clusters of adjacent pixels differently. If a gap between different labels is guaranteed, then the problem degenerates into the binary version.

Check out benchmarks to see a comparison with SciPy on a few different tasks.

Python pip Installaction

If compatible binaries are available for your platform, installation is particularly simple.

pip install connected-components-3d

If compatible binaries are not available, you can install from source as follows.

Requires a C++ compiler.

pip install numpy
pip install connected-components-3d --no-binary :all:

Occasionally, you may appear to successfully install cc3d, but on import you'll see an error that includes: numpy.ufunc size changed, may indicate binary incompatibility. You can either try upgrading numpy or compiling cc3d from source in this case.

Python Manual Installation

Requires a C++ compiler.

pip install -r requirements.txt
python setup.py develop

Python Use

import cc3d
import numpy as np

labels_in = np.ones((512, 512, 512), dtype=np.int32)
labels_out = cc3d.connected_components(labels_in) # 26-connected

connectivity = 6 # only 4,8 (2D) and 26, 18, and 6 (3D) are allowed
labels_out = cc3d.connected_components(labels_in, connectivity=connectivity)

# You can extract the number of labels (which is also the maximum 
# label value) like so:
labels_out, N = cc3d.connected_components(labels_in, return_N=True) # free
# -- OR -- 
labels_out = cc3d.connected_components(labels_in) 
N = np.max(labels_out) # costs a full read

# You can extract individual components using numpy operators
# This approach is slow, but makes a mutable copy.
for segid in range(1, N+1):
  extracted_image = labels_out * (labels_out == segid)
  process(extracted_image)

# If a read-only image is ok, this approach is MUCH faster
# if the image has many contiguous regions. A random image 
# can be slower. binary=True yields binary images instead
# of numbered images.
for label, image in cc3d.each(labels_out, binary=False, in_place=True):
  process(image)

# We also include a region adjacency graph function 
# that returns a set of undirected edges.
edges = cc3d.region_graph(labels_out, connectivity=connectivity) 

# You can also generate a voxel connectivty graph that encodes
# which directions are passable from a given voxel as a bitfield.
# This could also be seen as a method of eroding voxels fractionally
# based on their label adjacencies.
# See help(cc3d.voxel_connectivity_graph) for details.
graph = cc3d.voxel_connectivity_graph(labels, connectivity=connectivity)

If you know approximately how many labels you are going to generate, you can save some memory by specifying a number a safety factor above that range. The max label ID in your input labels must be less than max_labels. This option is only recommended for expert users.

labels_out = connected_components(labels_in, max_labels=20000)

Note: C and Fortran order arrays will be processed in row major and column major order respectively, so the numbering of labels will be "transposed". The scare quotes are there because the dimensions of the array will not change.

C++ Use

#include "cc3d.hpp"

// 3d array represented as 1d array
int* labels = new int[512*512*512](); 

uint32_t* cc_labels = cc3d::connected_components3d<int>(
  labels, /*sx=*/512, /*sy=*/512, /*sz=*/512
);

// The default template parameter for output type is uint32_t
uint64_t* cc_labels = cc3d::connected_components3d<int, uint64_t>(
  labels, /*sx=*/512, /*sy=*/512, /*sz=*/512
);

uint16_t* cc_labels = cc3d::connected_components3d<int, uint16_t>(
  labels, /*sx=*/512, /*sy=*/512, /*sz=*/512, 
  /*connectivity=*/18 // default is 26 connected
);

#include "cc3d_graphs.hpp"

// edges is [ e11, e12, e21, e22, ... ]
std::vector<uint64_t> edges = cc3d::extract_region_graph<uint64_t>(
  labels, /*sx=*/512, /*sy=*/512, /*sz=*/512, 
  /*connectivity=*/18 // default is 26 connected
);

// graph is a series of bitfields that describe inter-voxel
// connectivity based on adjacent labels. See "cc3d_graphs.hpp"
// for details on the bitfield. 
uint32_t* graph = extract_voxel_connectivity_graph<T>(
  labels, /*sx=*/512, /*sy=*/512, /*sz=*/512, 
  /*connectivity=*/6 // default is 26 connected
);

26-Connected CCL Algorithm

The algorithm contained in this package is an elaboration into 3D images of the 2D image connected components algorithm described by Rosenfeld and Pflatz (RP) in 1968 [1] (which is well illustrated by this youtube video) using an equivalency list implemented as Tarjan's Union-Find disjoint set with path compression and balancing [2] and augmented with a decision tree based on work by Wu, Otoo, and Suzuki (WOS), an approach commonly known as Scan plus Array-based Union-Find (SAUF). [3] The description below describes the 26-connected algorithm, but once you understand it, deriving 18 and 6 are simple. However, we recently made some changes that warrant further discursion on 6-connected.

First Principles in 2D

In RP's 4-connected two-pass method for binary 2D images, the algorithm raster scans and every time it first encounters a foreground pixel (the pixels to its top and left are background), it marks it with a new label. If there is a preexisting label in its neighborhood, it uses that label instead. Whenever two labels are adjacent, it records they are equivalent so that they can be relabeled consistently in the second pass. This equivalency table can be constructed in several ways, but some popular approaches are Union-Find with path compression with balancing by rank and Selkow's algorithm (which can avoid pipeline stalls). [4] However, Selkow's algorithm is designed for two trees of depth two, appropriate for binary images. We would like to process multiple labels at the same time, making Union-Find preferable.

In the second pass, the pixels are relabeled using the equivalency table. Union-Find establishes one label as the root label of a tree, and the root is considered the representative label. Each pixel is then labeled with the representative label. Union-Find is therefore appropriate for representing disjoint sets. Path compression with balancing radically reduces the height of the tree, which accelerates the second pass.

WOS approached the problem of accelerating 8-connected 2D connected components on binary images. 8-connected labeling is achieved by extending RP's forward pass mask to the top left and top right corner pixels. In Union-Find based connected components algorithms, the unify step in the first pass is the most expensive step. WOS showed how to optimize away a large fraction of these calls using a decision tree that takes advantage of local topology. For example, since the top-center neighbor of the current pixel is also adjacent to the other mask elements, all of which have already been processed by virtue of the raster scan direction, if it is present it is sufficient to copy its value and move on. If it is absent, pick one of the remaining foreground pixels, copy their value, and use unify for the mask element on the right as it is now known to be non-neighboring with the left hand side. WOS's algorithm continues in this fashion until a match is found or all mask elements are processed at which point a new label is created.

For several years, this algorithm was the world's fastest, though it has been superceded by a newer work that exchanges the static decision tree for a dynamic one or precalculated generated one amongst other improvements. However, WOS's work is significant for both its simplicity and speed and thus serves as the inspiration for this library. For 2D 8-connected images, we provide a specialization using Wu et al's original decision tree for a slight performance boost.

We're interested in exploring the block based approaches of Grana, Borghesani, and Cucchiara ([5],[7]), however their approach appears to critically rely on binary images. We'll continue to think about ways to incorporate it. We also considered the approach of He et al [8] which is also supposed to modestly faster than than WOS. However, it substitutes the Union-Find data structure (one array) with three arrays, which imposes a memory requirement that is at odds with our goal of processing large images.

Extending to 3D

The approach presented below is very similar to that of Sutheebanjard [6]. To move to a 3D 26-connected neighborhood, the mask must be extended into three dimensions in order to connect neighboring planes. Observe that the 8-connected mask covers the trailing half of the neighborhood (the part that will have been already processed) such that the current pixel can rely on those labels. Thus the mask for the 26-connected neighborhood covers only two out of three potential planes: the entire lower plane (nine voxels), and a mask identical to WOS's (four voxels) on the current plane. While some further optimizations are possible, to begin, the problem can be conceptually decomposed into two parts: establishing a 9-connected link to the bottom plane and then an 8-connected link to the current plane. This works because the current pixel functions as a hub that transmits the connection information from the 9-connected step to the 8-connected step.

Fig. 1: Mask for an 8-connected plane. If J,K,L, and M are all eliminated, only N remains and a new label is assigned.

j k l
m n .
. . .

The very first Z plane (Z=0) the algorithm runs against is special: the edge effect omits the bottom plane of the mask. Therefore, as the remaining mask is only comprosed of the 8-connected 2D mask, after this pass, the bottom of the image is 8-connected. At Z=1, the 9-connected part of the mask kicks in, forming connections to Z=0, making the current plane now (8 + 9) 17-connected. At Z=2, the 9-connected bottom mask now forms connections from Z=1 to Z=2 on the top, making Z=1 (17 + 9) 26-connected. By induction, when this process proceeds to completion it results in a 26-connected labeling of the volume.

Following inspiration from WOS, we construct a decision tree on the densely labeled bottom plane that minimizes the number of unifications we need to perform.

Fig 2. The mask for the lower plane in 3D.

a b c
d e f
g h i

As e is connected to all other voxels, if present, it can simply be copied. If e is absent, b and h fully cover the mask. If b is absent, h, a, c comprise a covering. If h is absent, b, g, i are one. Below is a list of coverings such that each proceeding entry in the list assumes the first letters in the entries above are background.

  1. e
  2. k, (h | g, i)
  3. b, (h | g, i)
  4. h, a, c
  5. m, (f | c, i)
  6. d, (f | c, i)
  7. f, g, a
  8. a, c, g, i
  9. c, g, i
  10. g, i
  11. i

The decision tree is then constructed such that each of these coverings will be evaluated using the fewest unifications possible. It's possible to further optimize this by noting that e and b are both fully connected to the upper 2D mask. Therefore, if either of them are present, we can skip the 8-connected unification step. It's also possible to try the DF covering first if B is background, which would save one unification versus HAC given even statistics, but it seems to be slightly slower on the dataset I attempted. To move from binary data to multilabel data, I simply replaced tests for foreground and background with tests for matching labels.

In order to make a reasonably fast implementation, I implemented union-find with path compression. I conservatively used an IDs array qual to the size of the image for the union-find data structure instead of a sparse map. The union-find data structure plus the output labels means the memory consumption will be input + output + rank + equivalences. If your input labels are 32-bit, the memory usage will be 4x the input size. This becomes more problematic when 64-bit labels are used, but if you know something about your data, you can decrease the size of the union-find data structure. I previously used union-by-size but for some reason it merely reduced performance and increased memory usage so it was removed.

For more information on the history of connected components algorithms, and an even faster approach for 2D 8-connected components, consult Grana et al's paper on Block Based Decision Trees. [5,7]

Phantom Labels

In the course of thinking of improvements to several algorithms, we developed a technique we term "Phantom Labeling" for improving the SAUF method directly.

Definition: Phantom Labels are elements of a CCL mask that 
transmit connectivity information between other elements of the 
mask but cannot directly pass their value to the current pixel 
during the first pass of a SAUF derived algorithm.

Reproducing Fig. 1 again, but with new letters for the more limited problem, the standard SAUF mask appears like so:

Fig. 3: Mask for an 8-connected plane.

a b c
d x .
. . .

This results in a decision tree like so assuming x is a foreground pixel.

if b:
    x := b
elif a:
    x := a 
    if c:
        unify(a,c)
elif d:
    x := d
    if c: 
        unify(c,d)
elif c:
    x := c
else:
    x := new label

There is an opportunity here for eliminating up to half of the unify calls, one of the more expensive operations in modern CCL by slightly modifying the mask:

Fig. 4: 8-connected mask modified to include phantom label P.

. P .
a b c
d x .
. . .

This results in a modified decision tree.

if b:
    x := b
elif a:
    x := a 
    if c and not P: <--- change here
        unify(a,c)
elif d:
    x := d
    if c: 
        unify(c,d)
elif c:
    x := c
else:
    x := new label

The novelty of this technique is unclear, but it is very simple to apply and results in substantial speed ups for the 4 and 6 connected problems, a minor improvement for 8-connected, and is readily compatible with the multi-label approach unlike block based approaches.

4 and 6-Connected CCL Algorithm

Here is where the phantom label technique shines. It's a bit harder to find 4 and 6 connected algorithms in the literature, I assume because many of the techniques invented for the 8-way problem, such as the Union-Find data structure for the equivalency table and run-based approaches, are applicable to the simpler problem. However, the SAUF decision tree approach was lacking as every pixel required a unify call in the 4-way problem and two in the 6-way problem.

Fig. 5: 4-connected mask modified to include phantom label P.

P b .
a x .
if a:
    x := a
    if b and not P:
        unify(a,b)
elif b:
    x := b
else:
    x := new label

This gives a decent improvement on the order of 10-20%. If you're lucky, you might not incur even a single label merge operation. In the 6-way problem, there are three phantom labels that can be exploited and the improvement is closer to 50% on our data, a fairly substantial amount. Again, with luck you might avoid any unify operations at all.

Fig. 6: Mask for the 6-way problem with phantom labels P, Q, and R added.

P b
a x
. Q
R c

You can even use multiple routes to propagate information if a label is missing. For example, if path (a,P,b) is unavailable due to a missing P, you could potentially transmit information using path (a,R,c,Q,b).

Four Pass Algorithm

We introduce two additional passes over the image label prior to running the two-pass SAUF algorithm. These additional passes are used to collect statistcs for optimizing the SAUF passes.

Estimating Provisional Labels

The first additional pass is used to over-estimate the number of provisional labels generated by the first SAUF pass. A better estimation allows a smaller allocation for the Union-Find datastructure. For some operating systems, the reduced size of the allocation and improved caching recovers more time than is spent collecting statistics.

This can be computed by counting the number of transitions between labels along each row of the image. This scan is easily written such that the instructions can be vectorized to minimize the cost of the scan. The number of transitions is guaranteed to be larger than or equal to the number of provisional labels as all provisional labels are generated in this fashion and then reduced by stealing a label from a neighboring voxel.

A hierarchy of estimators can be written as:

0 <= provisional labels <= X transitions <= static estimate <= voxels

Binary images can also be estimated statically as voxels / 2 for 4 and 6-way, voxels / 4 for 8 and 18 way, and voxels / 8 for 26 connected. For multi-label images, the best static estimate is voxels as no assumptions can be made about how labels connect to each other (in the worst case all eight voxels in a cube have different labels).

It is also possible to check XY and XYZ transitions to get a tighter bound, but in experiments, the amount of time spent checking those directions exceeded the benefit obtained by checking the X pass. Often the X pass alone results in factors as high as voxels / 100.

Estimation of the number of labels also allows aborting processing before the first SAUF pass in the case of an all background cube.

Estimating Foreground Location

The second additional pass is estimating the location of the foreground. In the literature, this strategy is sometimes referred to as a "one-and-a-half pass" where the foreground location is computed during the first SAUF pass and then used to skip processing of background voxels during the relabeling pass.

Here we perform this check up front so that it can be performed minimally. Instead of integrating the calculation into the first pass which could force some computation on every voxel, we scan each row from the left to find the first foreground voxel and then scan from the right to the find the foreground voxel at the end. The results are tabulated in a uint32 table of starts and ends to each row of size 2 * sy * sz. This ensures that the volume is scanned at most once, and most likely much less if the shapes fill the space reasonably well. Then, both passes of the SAUF method scan only the part of each row indicated by this table.

Certain shapes and distributions defeat the efficiency of scanning only the starts and ends of the row (such as random images or an image with foreground on the start and end of each row and nowhere else). However, for a great many shapes, this provides substantial efficiencies and minimal downside for a dense multi-label image as only two YZ slices of the images are scanned before the table is completed.

Early Abortion Points

There are three locations in the algorithm at which further processing can be aborted early without changing the result.

  1. After estimating provisional labels if zero transitions are detected (an all zeros volume). A black image is returned.
  2. After the first SAUF pass if the number of provisional labels is zero or one. In this case, the provisional labels are guaranteed to be identical to final labels.
  3. After assigning final labels to each provisional label in a translation array. If the number of final labels equals the number of provisional labels, the provisional labels were accurately assigned and the relabeling scan can be skipped.

Papers Using cc3d

A number of papers are using cc3d now. Many of them seem to be deep learning applications as instance segmentation is liable to generate touching non-binary labels. Some are in geoscience, neuroscience, and medical fields. If cc3d is helpful to you, please feel free to email us and let us know. We might be able to offer some tips if its performance critical (though we can't guarantee timeliness of response). There are so many variations of the CCL problem, you might be surprised at what you can do.

https://scholar.google.com/scholar?as_ylo=2019&q=connected-components-3d&hl=en&as_sdt=0,31

References

  1. A. Rosenfeld and J. Pfaltz. "Sequential Operations in Digital Picture Processing". Journal of the ACM. Vol. 13, Issue 4, Oct. 1966, Pg. 471-494. doi: 10.1145/321356.321357 (link)
  2. R. E. Tarjan. "Efficiency of a good but not linear set union algorithm". Journal of the ACM, 22:215-225, 1975. (link)
  3. K. Wu, E. Otoo, K. Suzuki. "Two Strategies to Speed up Connected Component Labeling Algorithms". Lawrence Berkeley National Laboratory. LBNL-29102, 2005. (link)
  4. S. Selkow. "The Tree-to-Tree Editing Problem". Information Processing Letters. Vol. 6, No. 6. June 1977. doi: 10.1016/0020-0190(77)90064-3 (link)
  5. C. Grana, D. Borghesani, R. Cucchiara. "Optimized Block-based Connected Components Labeling with Decision Trees". IEEE Transactions on Image Processing. Vol. 19, Iss. 6. June 2010. doi: 10.1109/TIP.2010.2044963 (link)
  6. P. Sutheebanjard. "Decision Tree for 3-D Connected Components Labeling". Proc. 2012 International Symposium on Information Technology in Medicine and Education. doi: 10.1109/ITiME.2012.6291402 (link)
  7. C. Grana, D. Borghesani, R. Cucchiara. "Fast Block Based Connected Components Labeling". Proc. 16th IEEE Intl. Conf. on Image Processing. 2009. doi: 10.1109/ICIP.2009.5413731 (link)
  8. L. He, Y. Chao and K. Suzuki, "A Linear-Time Two-Scan Labeling Algorithm", IEEE International Conference on Image Processing, vol. 5, pp. 241-244, 2007.

Project details


Download files

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

Source Distribution

connected-components-3d-3.1.2.tar.gz (521.1 kB view details)

Uploaded Source

Built Distributions

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

connected_components_3d-3.1.2-cp39-cp39-win_amd64.whl (245.3 kB view details)

Uploaded CPython 3.9Windows x86-64

connected_components_3d-3.1.2-cp39-cp39-win32.whl (252.2 kB view details)

Uploaded CPython 3.9Windows x86

connected_components_3d-3.1.2-cp39-cp39-macosx_11_0_arm64.whl (268.1 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

connected_components_3d-3.1.2-cp39-cp39-macosx_10_9_x86_64.whl (344.8 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

connected_components_3d-3.1.2-cp38-cp38-win_amd64.whl (248.2 kB view details)

Uploaded CPython 3.8Windows x86-64

connected_components_3d-3.1.2-cp38-cp38-win32.whl (254.8 kB view details)

Uploaded CPython 3.8Windows x86

connected_components_3d-3.1.2-cp38-cp38-manylinux2010_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ x86-64

connected_components_3d-3.1.2-cp38-cp38-macosx_11_0_arm64.whl (276.4 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

connected_components_3d-3.1.2-cp38-cp38-macosx_10_9_x86_64.whl (337.9 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

connected_components_3d-3.1.2-cp37-cp37m-win_amd64.whl (240.8 kB view details)

Uploaded CPython 3.7mWindows x86-64

connected_components_3d-3.1.2-cp37-cp37m-win32.whl (247.5 kB view details)

Uploaded CPython 3.7mWindows x86

connected_components_3d-3.1.2-cp37-cp37m-manylinux2010_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ x86-64

connected_components_3d-3.1.2-cp37-cp37m-macosx_10_9_x86_64.whl (333.7 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

connected_components_3d-3.1.2-cp36-cp36m-win_amd64.whl (240.7 kB view details)

Uploaded CPython 3.6mWindows x86-64

connected_components_3d-3.1.2-cp36-cp36m-win32.whl (247.5 kB view details)

Uploaded CPython 3.6mWindows x86

connected_components_3d-3.1.2-cp36-cp36m-manylinux2010_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.12+ x86-64

connected_components_3d-3.1.2-cp36-cp36m-macosx_10_9_x86_64.whl (346.8 kB view details)

Uploaded CPython 3.6mmacOS 10.9+ x86-64

connected_components_3d-3.1.2-cp35-cp35m-manylinux2010_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.5mmanylinux: glibc 2.12+ x86-64

connected_components_3d-3.1.2-cp27-cp27m-manylinux2010_x86_64.whl (1.6 MB view details)

Uploaded CPython 2.7mmanylinux: glibc 2.12+ x86-64

connected_components_3d-3.1.2-cp27-cp27m-macosx_10_15_x86_64.whl (331.7 kB view details)

Uploaded CPython 2.7mmacOS 10.15+ x86-64

File details

Details for the file connected-components-3d-3.1.2.tar.gz.

File metadata

  • Download URL: connected-components-3d-3.1.2.tar.gz
  • Upload date:
  • Size: 521.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected-components-3d-3.1.2.tar.gz
Algorithm Hash digest
SHA256 d3bab5a7680588a3e85f3dd3d03e9d99ef93b03f191dd17f2200c064f23e385e
MD5 a02eebd287e5ef2c66d612ec10ee2b4c
BLAKE2b-256 55e53940b6ceac01107f8a7161d7bfd70f011db133768a221d16367e4190a809

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: connected_components_3d-3.1.2-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 245.3 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-3.1.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 f2f7ddc02e0760a25d25e360e8a8c399244173a37c3e1401af17aa4f68d08904
MD5 922e73fe47850fba7e0b9696b190e1be
BLAKE2b-256 bb00c5788e11cd2f7799194e1fe2f8d40ee69a2c4e1674cb255d681b1fc00ca3

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp39-cp39-win32.whl.

File metadata

  • Download URL: connected_components_3d-3.1.2-cp39-cp39-win32.whl
  • Upload date:
  • Size: 252.2 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-3.1.2-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 8d08021b64ec5a0fd22c3f554a54a03096a151b738750f273786cd02386ecc79
MD5 40c4f5c73992d5ecfc81aa23c9c7bb4a
BLAKE2b-256 b8fff0aa2b1bd9cbe36f156c5fe125af91d5a341fa2b4cefbb87c36af92a6d40

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp39-cp39-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.1.2-cp39-cp39-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 addb2d1bbe45566347914021d4caab3946a7a3550e36af39318e48de39207ddf
MD5 a6fdad7db1debfdb5bfccb036bf97bad
BLAKE2b-256 5054865da0dda05b16fb6b600fca7da7a5eb1674f67764b5231790e616e9de59

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

  • Download URL: connected_components_3d-3.1.2-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 268.1 kB
  • Tags: CPython 3.9, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.6.0.post20210108 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for connected_components_3d-3.1.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 735ad7ac767bec62a78138a0aeb5b97723410fc5b76c2c4f30492ebe66a5f0db
MD5 33693a31c3fe403ac75596e331b2c42d
BLAKE2b-256 1ef6e0462c688492a90766a1387a545c4336159626e456fed4999aad94f133aa

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: connected_components_3d-3.1.2-cp39-cp39-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 344.8 kB
  • Tags: CPython 3.9, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-3.1.2-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6a3673cd4d9dce6e369164b6656a6b3435dbf63c9827d903000128209e5aa859
MD5 515a587bd8405fcc3b2c79341b38d455
BLAKE2b-256 68285f510940056ba548a3e337d0ae0f5309bd311cc09719f1a8e949f4cdb77c

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: connected_components_3d-3.1.2-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 248.2 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-3.1.2-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 a825611d6bf2201b3001b9c799dbc9cd4a1466ccb51b2eb91bdad36e20ed4df9
MD5 5858500612795e84d8f7a8cfc90d2145
BLAKE2b-256 de06a67070630d52aa49ef69202417e52497a7d7b9b85c4fd710e661a3677543

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp38-cp38-win32.whl.

File metadata

  • Download URL: connected_components_3d-3.1.2-cp38-cp38-win32.whl
  • Upload date:
  • Size: 254.8 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-3.1.2-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 197cd67458569f309f382a7f10c9bff2408dba3b39986606a597a2edd1e52b43
MD5 f0adfe5e910e63bc75fc506cd4402750
BLAKE2b-256 764ff6f2a680f855c81e6d55593a0ed102cc6b434e07529f237e0c9d2845d515

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp38-cp38-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.1.2-cp38-cp38-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 67aec26f9de0f78396df19305ac0e75d77c3771431ce35a66bf0a7c8b9b7bdf2
MD5 86bc7b2c4bce77faa4c2c6f1ad1b5c8c
BLAKE2b-256 2e370e4c82ec4141b5a60d25d9c06316c9d1cd3f4abd793508833402f19911c9

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp38-cp38-manylinux2010_x86_64.whl.

File metadata

  • Download URL: connected_components_3d-3.1.2-cp38-cp38-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-3.1.2-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 9d5a52b3f42875bb3f60920cd8f0b23a9d14f739ea2428a343a2643c1789dee5
MD5 3a32335f16cc1563b7a3623fb75fc480
BLAKE2b-256 7a4893f5036ac84bd85a33477a6185512c203a5cc7ffc77535d0158c01204884

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp38-cp38-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.1.2-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 72b3b1d7f784287cb887765c6fd4899f0d97be29c7fdc4daf44c4e3430c82d67
MD5 236c21541fb6ce14c34fb5a5b99c0b66
BLAKE2b-256 d56abce9b197aa166eaa0c111ee3f27a5300a54730919c8a6e334093fb451236

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

  • Download URL: connected_components_3d-3.1.2-cp38-cp38-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 276.4 kB
  • Tags: CPython 3.8, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.6.0.post20210108 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for connected_components_3d-3.1.2-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9696ec7226b82d6c1b85cd0de81639d6d9fb5e61d9e14fcd3ca78c6a0be0c543
MD5 c70af46edf18e0755029502f8aa2d636
BLAKE2b-256 3a62d3edaa6381d80cd15b9f5f9899827cd260fb8058487bfeae4e57e61b42ce

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: connected_components_3d-3.1.2-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 337.9 kB
  • Tags: CPython 3.8, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-3.1.2-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 cc2ece35ab81de5b5997dc327c900ef285ab79614cd162b8d37633a28672344a
MD5 ba27852e491d660002f08f002ca535a6
BLAKE2b-256 cfec69332b58d11ce5bcf3c1b507c8c198c52198d098c71068b6b4d11587f3e7

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: connected_components_3d-3.1.2-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 240.8 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-3.1.2-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 613997555d16b8ac80e06f299e93bb27397c8cd69e7475ea93ad9ff1a631e0b8
MD5 d9744f8eb0b9fcf3286559df3a11e157
BLAKE2b-256 24db5efa639f06b843adb019832a694bc04e0725ed88a847a2de6fb82e9b2c0f

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp37-cp37m-win32.whl.

File metadata

  • Download URL: connected_components_3d-3.1.2-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 247.5 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-3.1.2-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 b131bd99d4951ecea5448e0170f734ce6609bcacc33c6c023d8ace37907f7d1d
MD5 041cb284d64c4c397271b4e715139e51
BLAKE2b-256 5b37d2d2a9b1d7ff9282a2799c358e8f99c229e0b0f9197bdcf86258e1686e32

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp37-cp37m-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.1.2-cp37-cp37m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1559279ea1f570d09be6889e5b7be6655b6e223765dd76f9288e5a8c7609ebe7
MD5 0a9dba30b12896eb927c457670a1787c
BLAKE2b-256 6df4da6db9f0b6a0fc73fa711c4e6df6b08a2ee4c49ea2c656d712adc66cb937

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp37-cp37m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: connected_components_3d-3.1.2-cp37-cp37m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-3.1.2-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 c751fb82937e99c323a1bc92065212925020a40bee031b24769de574f0eb3807
MD5 b5af331233561bfe3e220a47b1b6d74f
BLAKE2b-256 e2bd25c5064a5b25cbbc5f45cd3a0af2a30149e51a484948ada1b1f1b5dda11b

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.1.2-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 ba954e038f9f8b40729f93bd54d7dd63f779f2f41506fe4db2cb4b0e95a721b3
MD5 413b96d016d98efb6f0078035109e9df
BLAKE2b-256 b458ae4d94e08bfdce29b701c0044992c76b135bfce04ee25eb81f6ffc497b8e

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: connected_components_3d-3.1.2-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 333.7 kB
  • Tags: CPython 3.7m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-3.1.2-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5a141728e4f605bf7dc372116e1665904eb36ebcac614ababc141023d4e5f530
MD5 9e914a7dd4b1dcf35b23944a38ad37ef
BLAKE2b-256 8f8eaa824304770520ef3aa6efa4282615f2ccd076db4b8be3204ad36056a10c

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: connected_components_3d-3.1.2-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 240.7 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-3.1.2-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 e83cd8163c055309cd8b51728aecb876ea94866e0b5487c80c122a15c3809600
MD5 6c57d93babad6888c33d20816a77826a
BLAKE2b-256 0f2ff59dbc0094611e54117820f0bc574b5f41ddd548ac3d76961575443e0757

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp36-cp36m-win32.whl.

File metadata

  • Download URL: connected_components_3d-3.1.2-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 247.5 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-3.1.2-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 855f0e13da835a7def2438bcd7dcd605ed14dc8dfe844d7e95c61e8cc8878a97
MD5 b8fb92a566d210b706a1a3fac96ac815
BLAKE2b-256 0c1e50c93d0b33ebca5fa344d38c41f1eb0f38af1f61c186c5b17c38e3c87f53

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp36-cp36m-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.1.2-cp36-cp36m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3cfca755c0ab17f13c88f0bb4f76b7019568fd27cee65ca8821ebb46153b1c4e
MD5 87db1f46d2211f486e8b1f223b328b45
BLAKE2b-256 3cfd4cc6e8f613f0512ffdaa94173042485b3d92b0cb4821e8cf1f905efad6bf

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp36-cp36m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: connected_components_3d-3.1.2-cp36-cp36m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.6m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-3.1.2-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 0858d27d09d8607ede539ae7ab6927616304d449e3e417145cdea2aeb23ce3cd
MD5 2c4fde7eeaeccb5a78077d8344d36f67
BLAKE2b-256 fb99fcd6bede3d316297be33a5eef46b31ba2d45812988d23c65c8ba8390f73a

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.1.2-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 281f5e1bddba35cc2897b974972fe9c8d52712f7b8d8c796f1cae70e594ad002
MD5 43c8ea6e30a23ee165bb5b358621b789
BLAKE2b-256 13e86e157fd2d1eee9913952dc22743f4ed15e47cd90b62063506e2742f5fc7a

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp36-cp36m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: connected_components_3d-3.1.2-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 346.8 kB
  • Tags: CPython 3.6m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-3.1.2-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 24f9224c69acaf04881afc940386d36baa6195198633ab9ec9e279ce490e240f
MD5 84fee4716f3cb9de7aea1df752ca789e
BLAKE2b-256 75c0faeb6a97349539ade8eba439a41d2d792b4118d1f48a90404ba6af916987

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp35-cp35m-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.1.2-cp35-cp35m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 23c021e7f749fef40e5cf8434791956b37105c80f25a7efb5436030eb0aaaf1b
MD5 7df7b442431f2440793e02496a7b36ca
BLAKE2b-256 f0e29ff660ab5846c9fb1f3dced12ef28ca11ed03a11d46c4d1ae2a44362aa72

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp35-cp35m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: connected_components_3d-3.1.2-cp35-cp35m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.5m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-3.1.2-cp35-cp35m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 9b773f4bb04035403739be3f0767d923336eb0a70f6d02da13c8f82c7ae695b9
MD5 2f94251f2aa5844f4df43dadf44de2c0
BLAKE2b-256 8dbdc0dea8a41367340a0a586d71ea5ba956ddcf9a9376c6fce337f289499a12

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.1.2-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 7d75de0ec7a6956ea42b878315fc2f2323d57792262de5444307ac89d6a0fbdf
MD5 6a7afd9f30f2abfc8bb2060404b958bd
BLAKE2b-256 e06c3be7a67e3c3dc896bd7cacdbaa0115c916eddcd6972ef2b0ed6a114a028b

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp27-cp27m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: connected_components_3d-3.1.2-cp27-cp27m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.6 MB
  • Tags: CPython 2.7m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-3.1.2-cp27-cp27m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 f19436489717db9b8c18101f4e8d72b21034979bfbb93b60858dde85bb9cd7ac
MD5 a39205667aab2c6fe281c1045fede352
BLAKE2b-256 f8d2abdfb1548a02fc59bcf586951559ca1c98d1359b4ae411eedabc9c0f2bfe

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp27-cp27m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.1.2-cp27-cp27m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 54fc7c7f656f475f2c182213a092cf053ea132c40dd5e6373ebd3895b434ee1b
MD5 c9b73d16645fdecd97da49f584c25fb4
BLAKE2b-256 ae2d49a16ae668b081560261d41158bd583ea05343e5de116c4558a2c38dfd07

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.1.2-cp27-cp27m-macosx_10_15_x86_64.whl.

File metadata

  • Download URL: connected_components_3d-3.1.2-cp27-cp27m-macosx_10_15_x86_64.whl
  • Upload date:
  • Size: 331.7 kB
  • Tags: CPython 2.7m, macOS 10.15+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-3.1.2-cp27-cp27m-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 983d16ee94baffeb0d450f68a88e76cbfd801162b295990e30c2c4405396527c
MD5 92feffe3a29e28acfecbb11da5e888fe
BLAKE2b-256 9c970af342853be7ddf65d06a00c41445eb5bbaa34d717e4c7e8b915ab2f8d03

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