Skip to main content

Connected components on discrete and continuous multilabel 3D and 2D images. Handles 26, 18, and 6 connected variants; periodic boundaries (4, 8, & 6).

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. Black is the background color (zero). (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

The following functions are available with examples below:

  • Connected Component Labeling (CCL)
  • Removal of small objects ("dust")
  • Extraction of k largest objects
  • Fast extraction of all objects one-by-one
  • Calculation of contact surface area and contact network
  • Extraction of a per voxel connectivity graph
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 the borders to wrap around (e.g. for simulations, world maps)
# specify periodic_boundary=True, currently only supported for
# 4 and 8 (2d) and 6 (3d) connectivities.
labels_out = cc3d.connected_components(
  labels_in, connectivity=connectivity, periodic_boundary=True
)

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

# If you're working with an image that's larger than memory you can
# use mmapped files. The input and output files can be used independently.
# In this case an array labels.bin that is 5000x5000x2000 voxels and uint32_t
# in Fortran order is computed and the results are written to out.bin in Fortran
# order. You can find the properties of the file (shape, dtype, order) by inspecting
# labels_out.
labels_in = np.memmap("labels.bin", order="F", dtype=np.uint32, shape=(5000, 5000, 2000))
labels_out = cc3d.connected_components(labels_in, out_file="out.bin")

# 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.14.0.tar.gz (650.4 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.14.0-cp312-cp312-win_amd64.whl (424.5 kB view details)

Uploaded CPython 3.12Windows x86-64

connected_components_3d-3.14.0-cp312-cp312-win32.whl (447.2 kB view details)

Uploaded CPython 3.12Windows x86

connected_components_3d-3.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

connected_components_3d-3.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

connected_components_3d-3.14.0-cp312-cp312-macosx_11_0_arm64.whl (509.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

connected_components_3d-3.14.0-cp312-cp312-macosx_10_9_x86_64.whl (581.9 kB view details)

Uploaded CPython 3.12macOS 10.9+ x86-64

connected_components_3d-3.14.0-cp311-cp311-win_amd64.whl (438.9 kB view details)

Uploaded CPython 3.11Windows x86-64

connected_components_3d-3.14.0-cp311-cp311-win32.whl (455.7 kB view details)

Uploaded CPython 3.11Windows x86

connected_components_3d-3.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

connected_components_3d-3.14.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (3.6 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686

connected_components_3d-3.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

connected_components_3d-3.14.0-cp311-cp311-macosx_11_0_arm64.whl (518.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

connected_components_3d-3.14.0-cp311-cp311-macosx_10_9_x86_64.whl (597.0 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

connected_components_3d-3.14.0-cp310-cp310-win_amd64.whl (439.0 kB view details)

Uploaded CPython 3.10Windows x86-64

connected_components_3d-3.14.0-cp310-cp310-win32.whl (456.5 kB view details)

Uploaded CPython 3.10Windows x86

connected_components_3d-3.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

connected_components_3d-3.14.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (3.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ i686

connected_components_3d-3.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

connected_components_3d-3.14.0-cp310-cp310-macosx_11_0_arm64.whl (518.1 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

connected_components_3d-3.14.0-cp310-cp310-macosx_10_9_x86_64.whl (597.3 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

connected_components_3d-3.14.0-cp39-cp39-win_amd64.whl (438.8 kB view details)

Uploaded CPython 3.9Windows x86-64

connected_components_3d-3.14.0-cp39-cp39-win32.whl (456.1 kB view details)

Uploaded CPython 3.9Windows x86

connected_components_3d-3.14.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.5 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

connected_components_3d-3.14.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (3.5 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ i686

connected_components_3d-3.14.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.3 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

connected_components_3d-3.14.0-cp39-cp39-macosx_11_0_arm64.whl (518.2 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

connected_components_3d-3.14.0-cp39-cp39-macosx_10_9_x86_64.whl (597.2 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

connected_components_3d-3.14.0-cp38-cp38-win_amd64.whl (441.6 kB view details)

Uploaded CPython 3.8Windows x86-64

connected_components_3d-3.14.0-cp38-cp38-win32.whl (457.9 kB view details)

Uploaded CPython 3.8Windows x86

connected_components_3d-3.14.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.6 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

connected_components_3d-3.14.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (3.6 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ i686

connected_components_3d-3.14.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.4 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64

connected_components_3d-3.14.0-cp38-cp38-macosx_11_0_arm64.whl (513.9 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

connected_components_3d-3.14.0-cp38-cp38-macosx_10_9_x86_64.whl (596.4 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

connected_components_3d-3.14.0-cp37-cp37m-win_amd64.whl (425.6 kB view details)

Uploaded CPython 3.7mWindows x86-64

connected_components_3d-3.14.0-cp37-cp37m-win32.whl (451.5 kB view details)

Uploaded CPython 3.7mWindows x86

connected_components_3d-3.14.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.4 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

connected_components_3d-3.14.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl (3.3 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ i686

connected_components_3d-3.14.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.1 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ ARM64

connected_components_3d-3.14.0-cp37-cp37m-macosx_10_9_x86_64.whl (586.1 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: connected-components-3d-3.14.0.tar.gz
  • Upload date:
  • Size: 650.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.3

File hashes

Hashes for connected-components-3d-3.14.0.tar.gz
Algorithm Hash digest
SHA256 c3df3f9c190895823192e47786b0c4aa25164d46af8f6585d9e6a8a8ad53ccf3
MD5 51ce603cfd52419f4a3c7dd654ec53fc
BLAKE2b-256 f9d901378deac5a0d69e572e6000c95a17a3cd52471ec6e548cd4d8e4c89ffc5

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.14.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 7a1ea0ad9eb3bf5a51620a21cd5c5fb20bef2bf38ade91e4c2237a1dee2740f9
MD5 7c23bce1050e36fd588a602c0198408b
BLAKE2b-256 65d2c8c550c3d53b765ed93805653ea1b1cc0cf0a1dabe76e4fcd2368e2cfb66

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.14.0-cp312-cp312-win32.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 2833a2f0b9d19b897a5c7d634b55a2e44c13974503282d28867c64b1f19b3e4a
MD5 6ed07c94627dd5f6e63b10649e4b9792
BLAKE2b-256 c7301b7f24bbd8c3baa7064cb37d7a41e45ba76963fd462bdbd218a1fd0e944d

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2be2f00e03ba2b8554180df75c2c9094567ff1e1b5107e09794491e477b0d50d
MD5 0679a9bdf8fa2617a948e28305278114
BLAKE2b-256 5f2537415e0fba167021ce006505fa9fb6a9dbda5a3160c269e640f28c7e4ec0

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2d0e59f356c68f2627b57445a949bafbe060f421be3878a3ff17c852713d73f0
MD5 37cd0cd75e6356b6506ad317edd114ca
BLAKE2b-256 5b60e94f97b3241f50dd768c5bc673ae674b4281a8acca302e4a2c0afe69e2d5

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.14.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6a277a70273435c06f39096305104e19aba197847d20472227a2be18ae166dfa
MD5 3c74882beb1a1222e4a761816a037783
BLAKE2b-256 9ced22941113e0441e054af2bbb1af58c3f6041d4650b53d3e6e9b045d2cc6ef

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.14.0-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4befd2b7e23ce2e76ffb47e5572165e85deafc87b7b81b0b89e1cda03fe9d300
MD5 71c1f19d16e69f3a9a8080949a9a304b
BLAKE2b-256 4c572ffbd87caeaada353f75a65379090de1e562a66b061d8147356651e36857

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.14.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 9b20d9d129ee30a60f7d35620cb6f8e6762c16924d7b6b80ad9c6dad6867eeb3
MD5 a55b02fb0aa9532399c9e06e32bc877a
BLAKE2b-256 224e2755b62d935395a1043e668dfa28bfaa76d92e5e10642cd1cfe1d490961d

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.14.0-cp311-cp311-win32.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 3afa116bb029a3c5bf1ea88e8137048580ab2c1058c2a285bbbfc8eb3e9a0e11
MD5 90f0a0fc0ece79e5f4a953e1c9a52473
BLAKE2b-256 3086744a5319bbd962c337fdb558a29efb2a42c971640eec12efab86407c08c4

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 efcb8df8d0957d64327a67225b6b8fee9d6bf44b751d82ddc20f231918bb00bf
MD5 0763f44f3e6b1900bff9f9d1d441881c
BLAKE2b-256 2a9933596ceb0db7c21069a76c9849e3b826f8a592ae684dc5326c484a69f3d0

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.14.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 a21620cece7432839012f28207d80aa60e6a25581bf6cea9f8a5f2e7387e9cc4
MD5 8e08d16e742222c438c6c7efc2958cac
BLAKE2b-256 703295ed71ba7f1045e15e5d926f29cf21e47120a98867c61015bb7b94f4e26e

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ca4d3dae5163d86f165290a99013e31048dad4d8b89b7e73fc2d5e9295d6035e
MD5 a1760de8ef4747a9741ad8aa41cc0243
BLAKE2b-256 9a40e01ba451fc18f67f29a095114fde81c17745b2ba67e907598a9d18da876a

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.14.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d700acb80d01ba7bde8f7abcd1090f088b7a9a66890cb1df036924904b5ce5da
MD5 b52b602473f4cf3290a7316b98b2c508
BLAKE2b-256 5a6ea3a65843e6310a0947ae619213f454cc61425bfeb26968104b0c9379ccbf

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.14.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 aa6be90a5da3f18e7fae543099746798fe90d68c7567ae4fcd8a2bc5e3280f91
MD5 1f17a00d7e5daa41a6fe6bfc665ba1a4
BLAKE2b-256 ed1b02c5e642668f08ba2c196545e5afe564ecd5baec0136fbf350b20c2e4544

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 577019e5db3883c50c7a1b3930f8eb3f9e06ec46d05ce9773ca7203a4a4037c1
MD5 ca6886f979cd8307145c4fbb7ac9bad9
BLAKE2b-256 d70fe4c61f6e82d33eace3c1407d027e778aa370ad48f8efbca72f44040ffc87

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 93aa7bdc24b6a87b1bd3cc50f1a9174c39aab0e8302b3007bbbe015ff1d1917a
MD5 b3967b3081ce311c1815876cc71c1cd7
BLAKE2b-256 e91c68397791a7af5a1c147e5999d78dace9885d95867d496366495ab8805236

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6fb18f1e33bec8efb1be7c9777ed55296650e1023019df4ea7ff3a8ff0a0216b
MD5 70cc0a8d01b26a1cb8a19728e5df6c63
BLAKE2b-256 47c0b390875c1b2087a7d94ef0d21505584a8ad68e327c18e2db6e569a0e01a8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 d6f3d496d2aff228df4f71684c935cd2122daf3cd9c3cbf19d728e0f4044096f
MD5 3df19450ace4497736146e711c99d847
BLAKE2b-256 26e876974c7d1f727865689f563e402f833d78ea36f1c764ac2755c3a6aab429

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ecc1bdf644a8cf8e884629b653411a93857766b7eb7331cdd356f6a5aa2ae68c
MD5 9866a798ac44ae4863755e9e748a3e8d
BLAKE2b-256 72ebd49be0cd98e94c4d75011bd6f01262d9a95c07acf7f99de092eadab0e644

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.14.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3cf188f4e6bcdd8d3e07fc72d74231692b7d835c0cda29f7b62bcdf56daaf047
MD5 4bb4add49f0e222a6dec6e99d6790ca4
BLAKE2b-256 093347c55ec67a34c18e89da70b814a2da3a4b919d5ce31ade9983f5dd416929

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6518cd566730c5dfada8860af2cf36e870deb9f0ebc648518e10dba75f7a7f91
MD5 76cd1dcabca17abf0a393131b05f0823
BLAKE2b-256 c0ada1e22b7c609a26267a4f1b937479f149904bead1707807254f15349d6cbc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 73cb31610f6376f414bd2b01e86b6bc2adb39bfb1f9ba7b38e15d1496630156b
MD5 6528a84f098f07aceccbf7742735d467
BLAKE2b-256 f5c2828ba12202a40aa0aead6a5f57d5363b331bc966663c8a8e9d2150d233c6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 d52520994293a6e12030a82f1a88540bb78537f3c1ec070d53d9918fcdd1bada
MD5 987f8591366e2e8d580b5c935fa9954f
BLAKE2b-256 ba3eea246e82dd67569bfa58a19261cdf099a993f53736b8b724d6859fa2ab30

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 744177e377caf11a5af3dfc3485d3e0a8f62b1e787691cde3fc612bdf7a32adc
MD5 0ed89b1f0de1c45b4855e1bc86a51006
BLAKE2b-256 f0286970623a80c3d927b4dc799ffd6b1e963a0754780ead860a2896034209b2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 0ac1e4da7af98e104a947215b90d18fc4b6a29e3519ba9cf2d89b51e777d8d46
MD5 b67bc6dd5026bdbcef96a0511aa41b6c
BLAKE2b-256 3024904908a826faff9a2a8a54c9373bde8fef3e23b9363cc284c4427bdcfb69

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b35064a64e3ba2f322212c3fc014c144f778d41eb5bfc74042c2768d1e326ee4
MD5 ea7233353672327927816b148242d7b8
BLAKE2b-256 718b8c66bbeda9868543b8f965c95e5057b04feab94af0775b1a6240d42ca640

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dfc9d86949d033ce8dbd453175bac483833893a77e310bb8cd992e68f3c8aafc
MD5 d592a14441a64b1affb4f42195920ec3
BLAKE2b-256 3292e1ef4d310b7d0b014ea1f66fd6efc5d9bbf5dbfde787320c069f1fec48d8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 35cb79cbf91ca21572df54a5cc78ced92a8ea7c5b7abc2a6ba460ac1eece0a6f
MD5 e58bc62332cc632b9a150ba7e696403d
BLAKE2b-256 43426f2f4e875124fbeb009962c67f541512bd159c31ce9ee4580c59ab9cd63f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 409ccae366124750988991c7dbc8948b7b477bf581544fa5b8ac09d76b46d61b
MD5 9a0755ba8a8a1ca260c0d690ce658391
BLAKE2b-256 d9abcc4bb213ee25c54a5afac1a61309e1cc636e91e9971b631d770ca2b33807

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 942030fdd24575a4d67bd811bd39b468f48b44c5224dfcfb6764701ebb63bb25
MD5 0c3eb4c6bdc36b75ce2c51548d486a62
BLAKE2b-256 75a994cd7943612435aa9e600966e82239d14e2df3e9dc0fb62903f0f8ab266a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2fdd61a0bd5021fc3206400ee32dacdbba657d3bc78179a42f74560c27bcd37c
MD5 50e1a7d21c5466d98fb3eb7f6bedaceb
BLAKE2b-256 5bec4b5269a0a94d2bbfd9d3c14cfb96955230cd12a798607c62e21806e0da67

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 c07340c83f1a0654cc53394212a861d0e6038023bcaf84e3180713113e3f6ed4
MD5 a98ac80c3b9e1f791da85aea1fc76e02
BLAKE2b-256 e67aa2b2b2ec9152576d46292cf7468a691b177ce2d387da05526d7c0d623b2d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2b7587a29d9bd36b018733bea9775f549f8f0f8dcee1a7f25c47fe330995093d
MD5 66a24a3e3d7960a436d87f441e028479
BLAKE2b-256 ac6e8f99d419cc21e1cf80a72e5d398d9b1f9526423fabe2129abe25f40eb3aa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7e96422bb6048bbefaf553876592698f7aea8655abfb1fa0d85e88efde91ac3a
MD5 da079888022433b68d6b87bab656acf0
BLAKE2b-256 9b0b5bc79d438084555c2069630dc6ec09131996fdddd0122fde9b7c242705fb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 eb2fd1edc7f67dde3466a8611a4a2009e0adf9b008d0e2c1f97149661760948b
MD5 0b43058fe8a5a7a1ad54d0a7faf47d27
BLAKE2b-256 70c50366d03e6ee4ce91a1b5da43462868a7a618209d5e899c9456107adee2a8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 8c0ba42b22755a0952ff4baef3cb79b8270a8df9b75a78c05a1a726b06c0eaa5
MD5 68a4889ba291b13888e0f52adaeaec90
BLAKE2b-256 94ab91fa80dbb221687829c48d799df5e7daa8b932608740befb748e054a06a8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 e1a1c36899525ff70ab9dc97b774def1c037d23310ead217a2baa8fa8d7856ee
MD5 5365e3e8b0c62b3bc6cf39d598c2525c
BLAKE2b-256 6a00f3acbaad0eda0c17725ff2a144c06f0f1236eb5be741e63bd8c50f4a5b8f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 237e486d8c746919bb688b637420046ddeb871f3bce00902a373482f2b95a436
MD5 11695549c9ac33a805e29153150a158f
BLAKE2b-256 dc8a511948f5cf1727ee36c3d04c3d814fabd2120d6f16981d187a833a789f77

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 2178c74986ea6dd6cc9b1f77d23fc12c1f88b7e43b02e4358c4146b7d3749be8
MD5 eec69f87150160d308b8fd303915b3c4
BLAKE2b-256 aad1bb3e2ca9d2528b03b5f617bfb380fd82876157a455ea0f3c69347a41640f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8dbed00cb18b10bb073a2de60b50ca5c0602f97c514b42166d4d5e8c7878fc4c
MD5 23f088356d34dfcdb347ca3707bbe3b0
BLAKE2b-256 737895c06e0754ec20cf523b58e95e78db262a803cf9915792185bef1ee38734

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.14.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4c10485ec0d8e659cf784984d45cc2aa3bf8b2341ac957c85651d2efefc09ab0
MD5 aa499e3b214846fc3062327473164751
BLAKE2b-256 935a95a2cd0ed18a9eabab6b03ab98ced4732078ee1c57b563512449960c4eb8

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