Skip to main content

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

Project description

Build Status PyPI version DOI

cc3d: Connected Components on Multilabel 3D Images

Binary and multilabel connected components. (a) A binary image (foreground white,  background black) (b) 4-connected CCL of binary image (c) 8-connected CCL of binary image (d) A multilabel image (e) 4-connected CCL of multilabel image (f) 8-connected CCL of multilabel image
Fig. 1. Binary and Multilabel Connected Components Labeling (CCL) 2D images are shown for simplicity. (a) A binary image (foreground white, background black) (b) 4-connected CCL of binary image (c) 8-connected CCL of binary image (d) A multilabel image (e) 4-connected CCL of multilabel image (f) 8-connected CCL of multilabel image

Continuous value connected components (top) A three tone grayscale image with signed additive low magnitude noise (bottom) Extracted components using continuous value CCL with a delta value greater than the noise magnitude but smaller than the difference between tones
Fig. 2. Continuous Value Connected Components Labeling (CCL) (top) A three tone grayscale image with signed additive low magnitude noise (bottom) Extracted components using continuous value CCL with a delta value greater than the noise magnitude but smaller than the difference between tones

cc3d is an 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 also supports continuously valued images such as grayscale microscope images with an algorithm that joins together nearby values.

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)

# If you need a particular dtype you can specify np.uint16, np.uint32, or np.uint64
# You can go bigger, not smaller, than the default which is selected
# to be the smallest that can be safely used. This can save you the copy
# operation needed by labels_out.astype(...).
labels_out = cc3d.connected_components(labels_in, out_dtype=np.uint64)

# If you're working with continuously valued images like microscopy
# images you can use cc3d to perform a very rough segmentation. 
# If delta = 0, standard high speed processing. If delta > 0, then
# neighbor voxel values <= delta are considered the same component.
# The algorithm can be 2-10x slower though. Zero is considered
# background and will not join to any other voxel.
labels_out = cc3d.connected_components(labels_in, delta=10)

# 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) # stand in for whatever you'd like to do

# 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) # stand in for whatever you'd like to do

# Image statistics like voxel counts, bounding boxes, and centroids.
stats = cc3d.statistics(labels_out)

# Remove dust from the input image. Removes objects with
# fewer than `threshold` voxels.
labels_out = cc3d.dust(
  labels_in, threshold=100, 
  connectivity=26, in_place=False
)

# Get a labeling of the k largest objects in the image.
# The output will be relabeled from 1 to N.
labels_out, N = cc3d.largest_k(
  labels_in, k=10, 
  connectivity=26, delta=0,
  return_N=True,
)
labels_in *= (labels_out > 0) # to get original labels

# Compute the contact surface area between all labels.
# Only face contacts are counted as edges and corners
# have zero area. To get a simple count of all contacting
# voxels, set `surface_area=False`. 
# { (1,2): 16 } aka { (label_1, label_2): contact surface area }
surface_per_contact = cc3d.contacts(
  labels_out, connectivity=connectivity,
  surface_area=True, anisotropy=(4,4,40)
)
# same as set(surface_per_contact.keys())
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)

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
);

size_t N = 0;
uint16_t* cc_labels = cc3d::connected_components3d<int, uint16_t>(
  labels, /*sx=*/512, /*sy=*/512, /*sz=*/512, 
  /*connectivity=*/26, /*N=*/N // writes number of labels to N
);

#include "cc3d_continuous.hpp"

// For handling grayscale images. Note that the difference
// is the addition of the "delta" argument.
uint16_t* cc_labels = cc3d::connected_components3d<int, uint16_t>(
  labels, /*sx=*/512, /*sy=*/512, /*sz=*/512, 
  /*delta=*/10, /*connectivity=*/6 // 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.10.2.tar.gz (590.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.10.2-cp310-cp310-win_amd64.whl (330.8 kB view details)

Uploaded CPython 3.10Windows x86-64

connected_components_3d-3.10.2-cp310-cp310-win32.whl (365.2 kB view details)

Uploaded CPython 3.10Windows x86

connected_components_3d-3.10.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

connected_components_3d-3.10.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (2.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ i686

connected_components_3d-3.10.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.6 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

connected_components_3d-3.10.2-cp310-cp310-macosx_10_9_x86_64.whl (499.8 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

connected_components_3d-3.10.2-cp310-cp310-macosx_10_9_universal2.whl (913.7 kB view details)

Uploaded CPython 3.10macOS 10.9+ universal2 (ARM64, x86-64)

connected_components_3d-3.10.2-cp39-cp39-win_amd64.whl (334.7 kB view details)

Uploaded CPython 3.9Windows x86-64

connected_components_3d-3.10.2-cp39-cp39-win32.whl (368.2 kB view details)

Uploaded CPython 3.9Windows x86

connected_components_3d-3.10.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

connected_components_3d-3.10.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (2.8 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ i686

connected_components_3d-3.10.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.6 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

connected_components_3d-3.10.2-cp39-cp39-macosx_10_9_x86_64.whl (503.5 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

connected_components_3d-3.10.2-cp39-cp39-macosx_10_9_universal2.whl (921.6 kB view details)

Uploaded CPython 3.9macOS 10.9+ universal2 (ARM64, x86-64)

connected_components_3d-3.10.2-cp38-cp38-win_amd64.whl (336.7 kB view details)

Uploaded CPython 3.8Windows x86-64

connected_components_3d-3.10.2-cp38-cp38-win32.whl (369.8 kB view details)

Uploaded CPython 3.8Windows x86

connected_components_3d-3.10.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

connected_components_3d-3.10.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (2.8 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ i686

connected_components_3d-3.10.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.7 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64

connected_components_3d-3.10.2-cp38-cp38-macosx_11_0_universal2.whl (906.9 kB view details)

Uploaded CPython 3.8macOS 11.0+ universal2 (ARM64, x86-64)

connected_components_3d-3.10.2-cp38-cp38-macosx_10_9_x86_64.whl (495.3 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

connected_components_3d-3.10.2-cp37-cp37m-win_amd64.whl (323.2 kB view details)

Uploaded CPython 3.7mWindows x86-64

connected_components_3d-3.10.2-cp37-cp37m-win32.whl (362.4 kB view details)

Uploaded CPython 3.7mWindows x86

connected_components_3d-3.10.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

connected_components_3d-3.10.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl (2.6 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ i686

connected_components_3d-3.10.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.5 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ ARM64

connected_components_3d-3.10.2-cp37-cp37m-macosx_10_9_x86_64.whl (486.5 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: connected-components-3d-3.10.2.tar.gz
  • Upload date:
  • Size: 590.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.21.0 setuptools/56.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.8.10

File hashes

Hashes for connected-components-3d-3.10.2.tar.gz
Algorithm Hash digest
SHA256 a26f3993a8ccbc4c4d378efbdc3f95a5b6cc575dea9d8a52759ea8fa6fd71bc5
MD5 51edb2c4b781716860e7834a2a3d9f06
BLAKE2b-256 995f8adb3c5247afefd69015ff3372ec84978ef76d1503718f1635a856a90c2b

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.10.2-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: connected_components_3d-3.10.2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 330.8 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.21.0 setuptools/56.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.8.10

File hashes

Hashes for connected_components_3d-3.10.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 558b4670c0cdca14de75a2edaeac31d219f79298042498daf12625353d0bbfb3
MD5 8b8cf3b22e03d2125a8362f1841b5672
BLAKE2b-256 a9a3caa66056b79c21b1b473a7752bf046026b9d56d031c0fa06585cd9364c02

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.10.2-cp310-cp310-win32.whl.

File metadata

  • Download URL: connected_components_3d-3.10.2-cp310-cp310-win32.whl
  • Upload date:
  • Size: 365.2 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.21.0 setuptools/56.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.8.10

File hashes

Hashes for connected_components_3d-3.10.2-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 de900337189ba80e8810bf583b3c5366fe29b66892ff75f497b34538cb855910
MD5 47b4eeb96005928e905b0cf2cfa519de
BLAKE2b-256 97ee0a17a7b9c9224b9d2ddfb0bd6f44484c5dcfdadac2ea64106fb54242782c

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.10.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.10.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0729146a0ba8682c1fd2e62cda755960517fa2ae6b09efd56509759a6e0840e0
MD5 0b624d927e3ec81f13caa7b4d36d0e79
BLAKE2b-256 56ef7d8c9b978fc0ae5aed626dc3f204c162b1317a0cf8d30f200db31aecbbfc

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.10.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.10.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 c4b3bdc48ef78e1676cf41b5ba8ad8a913e499eb4b625853f712d22f07725bb0
MD5 39fc7729a4f1faac3b1b8a55d5b9e2ea
BLAKE2b-256 8ff0c74868839158fd84f08ca55a6580dd4bcd6218ae3a0ad4c7dec2533e10a9

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.10.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.10.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a13a0e9b2224a01ebff65abc192235a3cc07299532028352e3171b9da7cf8431
MD5 1de8990360f7e290dc133ed153f543d1
BLAKE2b-256 5fc6775772748888eef4bea116300223c22588e34f139430834629e1964c50d1

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.10.2-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.10.2-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c0bd27c32d5a0a9a07c8b151358cfc4fd1a91926f8a57f12298b97ff78cbe339
MD5 5087d37698251057bbf845e0e7631d0d
BLAKE2b-256 af3a1f1a446f01488b16bb5c2722dad1ffd827b07082ed6ee2d3a8def364104f

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.10.2-cp310-cp310-macosx_10_9_universal2.whl.

File metadata

  • Download URL: connected_components_3d-3.10.2-cp310-cp310-macosx_10_9_universal2.whl
  • Upload date:
  • Size: 913.7 kB
  • Tags: CPython 3.10, macOS 10.9+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.21.0 setuptools/56.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.8.10

File hashes

Hashes for connected_components_3d-3.10.2-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 fd1d01f352d252e8b83fa0126e009e4201142949d9cb4d284e392c2d3cbe0097
MD5 a865c4afde62852a4722b98eb7832996
BLAKE2b-256 f5d2cefd0dab9eac8c1c57dc362139cd27ad79893afb0c80b5d5f1552e0b3715

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.10.2-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 334.7 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.21.0 setuptools/56.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.8.10

File hashes

Hashes for connected_components_3d-3.10.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 d0734db4b92c6f408f08000291185497e4ff06b485f926c181f43316ed8efe27
MD5 3d8a6e439c6d3ed975cc32225a1ab91d
BLAKE2b-256 0830ae3a4fa050fdbc056610f1c3f2876d8c2f31a9303b8cc14fafcaaab53566

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.10.2-cp39-cp39-win32.whl
  • Upload date:
  • Size: 368.2 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.21.0 setuptools/56.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.8.10

File hashes

Hashes for connected_components_3d-3.10.2-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 22a2f69eabb915d24287d52f2aee59d744e5e380abdb1699d220be633eac9185
MD5 db3785c7fba73aa17dfb7af1b2aef11c
BLAKE2b-256 d0ae86b81e21451150e1945a86497e75e9ef123517bd77f3c80b1861cf48c14d

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.10.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.10.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 dcde656446b36dc18326a207d6fe243c23bc311e6273dcafdaa74dd70d5b04f3
MD5 52e67321dc680992c754af952edadff2
BLAKE2b-256 101e648f29f40f686cb0611770f1156799d1bd26177365bd7123716d05d385f9

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.10.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.10.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 b836eede0f609d560f999553741bb1d9633a5678f3192ca8b7a6700aab6ec67f
MD5 93751a0a9ee9a4fbd77cc6040f4a110a
BLAKE2b-256 79f33ff9954159d5d93338211de304033c111a3dfb1a215f677c095ed996241a

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.10.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.10.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7ef8c6fd49bbbead1480941ce1e53a932f307b98ab2a8378f2dda97c0c8d77ad
MD5 b9e845e006e1bb9ec3570985246a4aea
BLAKE2b-256 8ce734ad26c36dc63eff950f211f94cd38983a3cb3470884cc244104f992cc64

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.10.2-cp39-cp39-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 503.5 kB
  • Tags: CPython 3.9, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.21.0 setuptools/56.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.8.10

File hashes

Hashes for connected_components_3d-3.10.2-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d7ab69a67c60d8f8755eb1e913146ec5d0c32e06eae35e00865b4399c8d995c3
MD5 bdc11dd69e26335588cbfc7645159948
BLAKE2b-256 ad16fc5f2d57463b330f0295a49dc14420b85b92fa9515c8e3cb8a51538acf5e

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.10.2-cp39-cp39-macosx_10_9_universal2.whl.

File metadata

  • Download URL: connected_components_3d-3.10.2-cp39-cp39-macosx_10_9_universal2.whl
  • Upload date:
  • Size: 921.6 kB
  • Tags: CPython 3.9, macOS 10.9+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.21.0 setuptools/56.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.8.10

File hashes

Hashes for connected_components_3d-3.10.2-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 823ad2aa8238fbac95029799aa976585f09f06373442e518fa3827c6b522349b
MD5 39d00242f9b3c16af91d8d4bb6b085c7
BLAKE2b-256 3caeae00e5c9a1a387de1cb0b5d89b9b2d2afaa1bc9aa2fc43a542d5e7e3e969

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.10.2-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 336.7 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.21.0 setuptools/56.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.8.10

File hashes

Hashes for connected_components_3d-3.10.2-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 892d1e9898faddc57d670f0af1a224b97a0cc6162fc3b63b81e6714d930261d9
MD5 89a9bfd2f618c0a37bbe06797f1fc448
BLAKE2b-256 2e7d1e0592f31f4591209a3c0f4a94893d999a3cf30188a66594697e1930eee2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.10.2-cp38-cp38-win32.whl
  • Upload date:
  • Size: 369.8 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.21.0 setuptools/56.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.8.10

File hashes

Hashes for connected_components_3d-3.10.2-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 fae37c0290e1dd1fd21cb9582e8d7c47fb1c41677446635d21aa43ed5eac8347
MD5 5ab56dc8a48b502defbaf57a7b7f2be9
BLAKE2b-256 1d25476fa46236aed66ad76be6398049fab47cfdb64f590fc292f6a6a3df9f34

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.10.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.10.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 267f513f7aa77a23da519d0c1ee3b0ac474d17cc26fbcdcaf4a03b9001404ca2
MD5 86742e62c154a424b6f05937aa85e84b
BLAKE2b-256 687de072914194f4fc455dd9735cac203c6bea2e2bfb4952b3fa39c715dab830

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.10.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.10.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 bfeedc95b5ea6e452e6613aa97dd2860a80f98abee51c2e8c1529ef7b76952cd
MD5 3883f79cae7803ee8acc5862b99081ff
BLAKE2b-256 bfd4150201bc1ef3a94d2c198876113ae4244f58f0764e5591c83319718517d7

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.10.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.10.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 03ca65f8bce80ce6bfd4b7e357192efab4c2c2d6b826d548f639e8838cc3618e
MD5 b90f063757619f73aefe0e0582085c0f
BLAKE2b-256 1c6d6ed532647f2bb946d19ffac09db7592c36ed12ee37f11417020a4540792f

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.10.2-cp38-cp38-macosx_11_0_universal2.whl.

File metadata

  • Download URL: connected_components_3d-3.10.2-cp38-cp38-macosx_11_0_universal2.whl
  • Upload date:
  • Size: 906.9 kB
  • Tags: CPython 3.8, macOS 11.0+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.21.0 setuptools/56.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.8.10

File hashes

Hashes for connected_components_3d-3.10.2-cp38-cp38-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 4645d6f6276a4bf53abad31572bda79143fc91e3a67a49ccac1cb21b1a6f8eb5
MD5 d5fdde0dd0110cdc13f31011927c92c6
BLAKE2b-256 258f13ecfe754ecb13f31f851e55c2e9f73805de692ca7aaca654d9928c94224

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.10.2-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 495.3 kB
  • Tags: CPython 3.8, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.21.0 setuptools/56.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.8.10

File hashes

Hashes for connected_components_3d-3.10.2-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a02dd6552fdbce8037194784908c744143f614bbc98fe0db3fba085130b4e5ea
MD5 ba74855428187cb95758d94649e25cb5
BLAKE2b-256 4f11681517f8dfec433ec2686bf985a141b3f07b9a74314cb469513a5578b8a1

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.10.2-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 323.2 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.21.0 setuptools/56.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.8.10

File hashes

Hashes for connected_components_3d-3.10.2-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 272a2da631cb86f6f75ad69e1cf14bb059eb2855b8f17c417d0cc25d1aecd9bc
MD5 a5a3a462be88edf7cf1d9ec9298e7069
BLAKE2b-256 f15ff981e2f17949e0f069a6d3125f7c5ec0f9f7be50484a459676ad372aa630

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.10.2-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 362.4 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.21.0 setuptools/56.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.8.10

File hashes

Hashes for connected_components_3d-3.10.2-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 0cc46ce0e50a11b0e87a18d0d412c92c0ca0bd5a75d589a5e8613efa27db2b1b
MD5 26e63520f51f4541944953910fb1170f
BLAKE2b-256 5a65396c4537bd5cd122181a941c90bf9ea74b5d3975ddca6ad1eaf88cc678a9

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.10.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.10.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6f812de42237f8657edeff62229592d05f93861da718f46773464a30448504bc
MD5 ea019200e5ad91578840946f22864382
BLAKE2b-256 d9ce75db915d5c75eee3730ba07d247138bd839fefd89cce4833ba6f8b4b2d40

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.10.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.10.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 9ee6cf22fae8fc6b30beff849deb8173c88a5a11ed4f840b7064d49980cae73d
MD5 3b8d50b43bca8522ea6e58be0e2f8133
BLAKE2b-256 811d31bbb6938935e52fc6a9b497422b4124a37232830c0ddd01980e641ed049

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.10.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.10.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8b1bfba9709d47d957c002a7b49d8724ba4c20bd782f30d2c557d3a5d9927f46
MD5 cb91cf2ef28fbf87466a5e8dc24ee226
BLAKE2b-256 12a24efea44588717d61b13e322d4e06eb71379eccc865ce517c7de538f2c732

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-3.10.2-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 486.5 kB
  • Tags: CPython 3.7m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.21.0 setuptools/56.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.8.10

File hashes

Hashes for connected_components_3d-3.10.2-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 88c73381c68e8a476f2e75346564c050708a4203805f327e19173ae9b06c6c96
MD5 5a8d7b82bb3defac2f63d8f29103d703
BLAKE2b-256 13ce2bfccbcac3be807872b7fcc40eb342b8d69b3db88ea06699f2e3427afa05

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