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 Berkely 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 Porcessing. 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 EEducation. 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.1.tar.gz (520.9 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.1-cp39-cp39-win_amd64.whl (245.3 kB view details)

Uploaded CPython 3.9Windows x86-64

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

Uploaded CPython 3.9Windows x86

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

Uploaded CPython 3.9macOS 11.0+ ARM64

connected_components_3d-3.1.1-cp39-cp39-macosx_10_9_x86_64.whl (344.9 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

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

Uploaded CPython 3.8Windows x86-64

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

Uploaded CPython 3.8Windows x86

connected_components_3d-3.1.1-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.1-cp38-cp38-macosx_11_0_arm64.whl (276.5 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

connected_components_3d-3.1.1-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.1-cp37-cp37m-win_amd64.whl (240.8 kB view details)

Uploaded CPython 3.7mWindows x86-64

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

Uploaded CPython 3.7mWindows x86

connected_components_3d-3.1.1-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.1-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.1-cp36-cp36m-win_amd64.whl (240.7 kB view details)

Uploaded CPython 3.6mWindows x86-64

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

Uploaded CPython 3.6mWindows x86

connected_components_3d-3.1.1-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.1-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.1-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.1-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.1-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.1.tar.gz.

File metadata

  • Download URL: connected-components-3d-3.1.1.tar.gz
  • Upload date:
  • Size: 520.9 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.1.tar.gz
Algorithm Hash digest
SHA256 23ae41138b80574f6089389e54ba3de9a1954114cb2973c21f1be21508a34d9e
MD5 347bc562200803fac0a2346d333d0898
BLAKE2b-256 ec29c36c0d4daadad4e7b848fffdcb115a1b1d800b01fcc0dd92504e5fa09a69

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.1.1-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.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 0558bb05ea42927ae825c226792e209e1cf6155ee18bf84f13857859d638e959
MD5 8b31157c4f36ef2e694a522f41af07cd
BLAKE2b-256 a12b7df0b6b46ec68561f832bd69c1bfaa7647610077f0d95988b1569d6a6410

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.1.1-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.1-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 33b7675156dff8d158a71109349856d765bb71088c64da55072b5917a9987dfa
MD5 89e6acb83ed4c6348376b746430664b8
BLAKE2b-256 0ec0fdca60067c749f349c76db07ea21a6d47477264cb23205063a2dedf7165f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.1.1-cp39-cp39-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c0a6e4293cf14a07a9243e5a586bd003a99bd39ea48ffaeb7567399326ea01d4
MD5 2babfb35d7cd9cfe08c04156a7f9612d
BLAKE2b-256 6d2b9990d4fa4af6524ddd54ea861d824a63a4dd1f226bf48a71421ea3f1fec3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.1.1-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.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f9a51bbb79b354dcf9832c513b3f517782031e5ba22962069f87b51216108995
MD5 66abbb7e04a0ce0ce16186ac1919ee13
BLAKE2b-256 ddea0d69ce483267500f10ab6db1ba6deec93ec8d1c5c3e739fd205d05352bda

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.1.1-cp39-cp39-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 344.9 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.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 976112c33bffd456085da9e2b3f644e9263e472f4da0c02edc28fe755469f983
MD5 1b1a4cd269817bb223aea6a71363b05f
BLAKE2b-256 63fc6b9b6adaef1241562ac4540c725ee20e6ebeda56cd92caa0ad692d4740b5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.1.1-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.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 2da293e32f7826a1b4e9e231520290abe3fecad841fea468ca31f9e106e0cde0
MD5 607523d5f940b68fafee4ae95ff51eb1
BLAKE2b-256 b58b19ac55b411c1e72a15a1a8d859d1dad51aca5062f2f5d4d0cccde6a95324

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.1.1-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.1-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 981271cc829a51f646c4ab6a370d1d22bc7da18f2abbdaf0603f9119ee1acec5
MD5 d763dfbcb85eb869b4d8023fe82704a8
BLAKE2b-256 ea6c066566ac73114efcb287a1d2a1bff3d0112e23806de3e300c2c583c24983

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.1.1-cp38-cp38-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7316e98095227126bb0c10ebc068e124ecd817736b62360e918994559968f0ad
MD5 6a5d6b49a803f8832178ca8f851c3a13
BLAKE2b-256 db0c7f78bbcbdf9cc3cc1ef9a8fa0064f64723c5689dfffb543e979806aa7c1f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.1.1-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.1-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 794debd8f1f22cca665577a9a61931d3fd27c25393ea21480e186821b1a9ee5d
MD5 5539c8deb272d70687f69553a7afe3f9
BLAKE2b-256 1dd65c02624d40f1dc8d6560f14da41589a4faa798797cf238b0acfaa25fe7e4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.1.1-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 ea3e6993c1aac71ca95e1fa8d087b580b132feccaa6bc964cc1c0c66a34eaa3e
MD5 fd215e601b863fa5a9c6c98c4c369846
BLAKE2b-256 9a91ae29659e69cbb3ac767b3bab6f5e8ce438a99c50b45ee43e5b9d8ddc2a64

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.1.1-cp38-cp38-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 276.5 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.8.6

File hashes

Hashes for connected_components_3d-3.1.1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a8dec99ae2b4eabb4478f3eb04b984471fa2ed923a75bbc0df67b93fa8a5d387
MD5 b1e93dec39c43ca31977e54fb0c29e79
BLAKE2b-256 f688e7d44c2bf80f6eaac186aa5965d6a9bb9631d4c5215bcf5dea233e8b6735

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.1.1-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.1-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 302198566bf95f85f606c127ad72d7bdc675a641d82bada52bc34a83a565bbf7
MD5 51cfe15010f1726edb58836d08ba6fef
BLAKE2b-256 59ceb3d267e6b462dff4398310e82fb997cc8ee87798ae227576c573f3856597

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.1.1-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.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 72533e93ef9ae0912d68c2353bfa7712bf0908099eb4c478000715a99cd76775
MD5 9066011b58ae457f38cc7a7f7b69d3ab
BLAKE2b-256 7872f8e3bdd613eb95b017cbc0239588c33e21866bbb4a895905221dc4b0df15

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.1.1-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.1-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 0cfd21b1e3d260f635cf8f33ea187caa26b6d47dec28203e22a9fabcb72360ba
MD5 66e08f0302a885a42249102b550d43da
BLAKE2b-256 2ba321d3ed77fe0aa4d422414015e1720d6fdd4839dcc356171d74211ad6a69a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.1.1-cp37-cp37m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 026a1f4528f858bb3138e701140513a2f67f8ec8be56088fadd7bc5f97c33a3e
MD5 3335c11c25f7275311cc867c7cf2a682
BLAKE2b-256 34baf9f7e774352ba2691881c89ddf78cffa9962767ef30f0d181b6261c3deb2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.1.1-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.1-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 4da95cd92c4aec158848e81e1f3bb40a985672426fcaab70c0e254d70a86c5b1
MD5 d540d0fcbe9d828b4b6310c6ed96bfd8
BLAKE2b-256 09169bd6edacb43f7d69b88a67b8f40fb2a70506d20edbc25e27a1042a322425

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.1.1-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 05106489d034013384f203a752ea78693e092740956f03b82f242a15d52970d8
MD5 10f8f7d8b8f074f26edfce25ac2b5e21
BLAKE2b-256 4573d5b91177a44740633c979343b0748d5fb48f8737712c64dce93c31a1201e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.1.1-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.1-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1254810f8f89bb70902b9d0db299e2013d634470957076a4e049b14cf1d61bee
MD5 85089aee0f590bfaac5ef4db95f3670e
BLAKE2b-256 7bc64cd78d44b9887ab4ecb6d5da906e40e946035bec737c99d2f06d58b032c8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.1.1-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.1-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 1ee4dd0864c073383c70331445fbf720f8c09a11129d4738174c48928faf86db
MD5 9b4ced342e9c8649852dff7278e31958
BLAKE2b-256 1a62004832ed64cf27e1af46077b3a4ec805451ae7c84ab4a6558e4c82740abd

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.1.1-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.1-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 501bb751077a3fbb5f25fcf441f8862473522a3bd057b1ad53850d248aedbd1c
MD5 30e80191cbfb38a7674491022cf803ac
BLAKE2b-256 39284590bb92457a526f3855e188aec07a6c0ff755d5ef77c6494fc08b5c11c9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.1.1-cp36-cp36m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d474a9dec320a457a61e283a67076568d47447d3a624e51385fa2223a326df0b
MD5 704f1d0c34c61db18c977f1c569dd53b
BLAKE2b-256 82886c348e337828b113ed454cd7c7c72dbfca5d25e55733ba62604c65e202fc

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.1.1-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.1-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 79eda07fd64a593f06215a6712749d910246b4f92657f143ebea47c8eee13720
MD5 3c2b731767f64bf008ae36ebb227f00b
BLAKE2b-256 39841a464a488d808ece111bf0d5b0ea81129d90dd43211f0fc09783a3d06f1d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.1.1-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 d5cb3a3752db63168a60cfcbbad1b6bdc409e919a2a9c4f2ef9fa35d904cb2c1
MD5 c58ea1ca65d3d7a37aaa551cd7a7e4c5
BLAKE2b-256 4ed788aed59210e4055c9ec99dfa13c637a14fd2d85c48c0137a3eee1361a095

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.1.1-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.1-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 da3f4bec8f3542629d1840ba364de17af780a330f2e85840a0a6189ff79621fd
MD5 85ada6eb38e875c3f5c72a93fc9611da
BLAKE2b-256 e2910a27128f72bccad68b32e15e3c1de5bf3846ef53752d4512e6ee4dcb2011

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.1.1-cp35-cp35m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c3fe40f289dd7b21dfdfd4ca0f53c52ecd8c1776b38b4890f589b5eb450f95da
MD5 a5202f0bf725c9f0cc87f26df6d138c6
BLAKE2b-256 cf4eb31731ece32126e7866ba3158ea3779000ac5a893bc9c62cd33047535cc8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.1.1-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.1-cp35-cp35m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 99e4912d5f209c28dcdb3fa8466a0274c9be9ccd146472a5c7753ab583ddcf6e
MD5 824b9b9ef381fbdfd0d1cbb10a267df9
BLAKE2b-256 c4bb1222672508b93a3eda4311c13761c8f5fd77a6e6b9726b7479acdbb5bdb7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.1.1-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 4ba27681fb58c2177e450bedeac71623be935f72b0a71431c5b37d00fb266062
MD5 c8cc58125c6c4224364149414f1e8aa1
BLAKE2b-256 e63b00c663ae9e2fb7095a1e7de02c47c87f3def128979de2c2dd6ae8f8f7207

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.1.1-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.1-cp27-cp27m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 411cacfa9e01794db5776ee9d88ddafb6f50e891fba1b509e9d7b3e8c4179dd9
MD5 fc1d3cb6685f2002b4ff94fd7098a20b
BLAKE2b-256 2a78ba555818c684eb1bb270eee8cb0f470aea6fdcfe7cdd6ea04b50de160166

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.1.1-cp27-cp27m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 3036270886e5b4196dd8c3d557e1a031b5539f8ec9677bdab7930c73d676277b
MD5 b8a0e64b7fbe4924c5db60bfc7f9fddf
BLAKE2b-256 be400ffc001835e474c14205437aea3b7091310a1a32c2880a055ef035bcae53

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.1.1-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.1-cp27-cp27m-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 2c87a52b0df90bc8451e0199f9abc0ef718828d4c478d9fa00cc30b45589205d
MD5 2556d42aeac5120cddc69279967193eb
BLAKE2b-256 f8521f97ea7e6259b61a50fcefd12196a030086f3f78e5eb407e335f0d979e70

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