Skip to main content

PyPI version Downloads Tests Coverage

ncolor bacteria

Fast remapping of instance labels 1,2,3,...,M to a smaller set of repeating, disjoint labels 1,2,...,N. The four color theorem guarantees N <= 4 for planar adjacency graphs. Raster contacts can produce nonplanar graphs. The picker will fall back to N = 5 if a 4-coloring cannot be found within the time budget. Also works for 3D labels (< 8 typically) and higher dimensions.

Install

pip install ncolor

Pulls a precompiled wheel (Linux x86_64 / aarch64, macOS arm64 / x86_64, Windows AMD64 / ARM64) for CPython 3.11 to 3.15. Only runtime deps are numpy and platformdirs.

Usage

import ncolor
ncolor_masks = ncolor.label(masks)                    # 4-color
ncolor_masks, n = ncolor.label(masks, return_n=True)  # + color count
labels = ncolor.format_labels(masks)                  # compact to 1..N
labels = ncolor.format_labels(masks, clean=True)      # + split disjoint pieces, drop tiny components
ncolor.release_buffers()                              # free the scratch kept between calls (optional)

Expand-labels is on by default (so that close-but-not-touching cells tend to be assigned distinct colors). Pass expand=False for 3D inputs where cells can over-expand. Thanks to Ryan Peters (@ryanirl) for the original suggestion.

Threading needs nothing special. A lone call uses every core; calls that overlap are handed narrower engines whose threads add up to about one machine, so several images color at once:

import concurrent.futures as cf, ncolor

with cf.ThreadPoolExecutor(4) as pool:
    colored = list(pool.map(ncolor.label, images))   # 1.4-3.1x faster than taking turns

Nothing is calibrated or configured for this. With four threads labeling images from 512 by 512 to 4096 by 4096, overlapping calls ran 1.4x to 3.1x faster than taking turns on an Apple M5 Max and an AMD Ryzen 9 7950X (benchmarks). NCOLOR_MAX_ENGINES=1 turns it off and calls take turns on one pool as they always have. Engines are built only when calls actually overlap, so a single-threaded program holds one, and once the parallel phase is over calls go back to full width. At most NCOLOR_MAX_ENGINES (4) are created; each keeps the working set of the largest image it has seen, roughly 20 bytes per pixel. ncolor.Engine does the same by hand for callers who would rather size the threads themselves.

Any integer, bool or float label array is accepted; the cast to the engine's int32 runs in parallel inside the call. Labels beyond the int32 range are compacted automatically by label and format_labels. The engine keeps the scratch memory of the largest image it has processed until release_buffers() is called.

Repeated coloring

For an unchanged label image, prepare its expansion and contact graphs once:

prepared = ncolor.prepare_labels(masks, expand_mode="clean")
colored = prepared.color(n=4)
colored_again = prepared.color(n=5)
print(prepared.nbytes)  # owned array bytes

Preparation owns a snapshot, so later edits to masks do not affect it. Create a new snapshot when the geometry, expansion, connectivity, or weight settings change. Each coloring call can change the color target, search depth, and perceptual palette. Engine.prepare_labels(...) and prepared.color(engine=engine) provide explicit worker control. A snapshot uses one, two, or four bytes per pixel according to label count, plus its graph arrays. Large sparse images can instead store only foreground positions and labels. Empty snapshots retain no per-pixel map. Compact storage reduces snapshot memory and repeated rendering time, though preparation can cost more. The snapshot's memory is freed when the object is deleted (del prepared). prepared.color(return_lut=True) skips image rendering when no output buffer is supplied.

Vector geometry (GeoDataFrames, GeoJSON)

Data that starts out as polygons does not have to be rasterized to be colored. ncolor.geo.label reads the adjacency straight off the geometry, so nothing is lost on the way in:

pip install "ncolor[geo]"      # adds shapely; geopandas is optional
import geopandas as gpd
from ncolor import geo

gdf = gpd.read_file("cells.geojson")
gdf["color"] = geo.label(gdf)                         # 4-color, one per feature
gdf.plot(column="color", cmap="viridis")

It accepts a GeoDataFrame, a GeoSeries, a GeoJSON file / string / dict, a list of Shapely geometries, or anything with a __geo_interface__, and returns a uint8 array of colors in 1..n in input order (0 for missing or empty geometries). Pass return_frame=True for a GeoDataFrame with the colors in a column instead.

Two knobs mirror the raster ones:

kwarg meaning raster analogue
min_shared_length contact must be a shared border, not a point. The default 0.0 drops corner-only touches (the "Four Corners" rule), which is what keeps the graph planar and 4-colorable. None counts them, and then n = 5 is likely. conn=1 vs conn=2
tolerance treat features within this distance as touching, for polygons whose neighbors are separated by a hairline gap after vectorization or reprojection. In CRS units. connect_radius

With a tolerance, a positive min_shared_length is the vector form of the raster min_contact filter: dilating polygons to close gaps also creates one-point leaks between features that were never really neighbors, and those are what push a coloring from 4 up to 5. On a 5000-cell Voronoi tessellation with hairline gaps, tolerance=0.2 alone needs 5 colors; adding min_shared_length=1.0 brings it back to 4.

Pairs the filters reject become soft constraints: they still get different colors where that is free, without constraining the coloring. ncolor.geo.connect returns the adjacency pairs alone (0-indexed by row), and ncolor.color_graph colors any edge list you build yourself:

colors = ncolor.color_graph(edges, n_vertices=len(nodes))   # 0-indexed pairs

New in v2

v2 is a complete C++ rewrite. With matched settings, label runs 6.3x to 25.3x faster than 1.5.3 on 4 workers and 2.7x to 7.3x faster on one across 2D images and sparse 3D boxes, and 63x faster on 4 workers (18x on one) on a 128 x 128 x 128 volume of cells packed like tissue. These are measured on six test images on an Apple M5 Max and an AMD Ryzen 9 7950X; see BENCHMARKS.md for per-image times, methods, and how to reproduce them. The new default expand removes 1-pixel bridges and spurs before the picker sees them, and an auto-soft constraint refines the hard 4-coloring via local search to differentiate near-adjacent cells. Together these break the K₅-shaped convergence clusters that forced the v1 numba pipeline up to N = 5. See CHANGELOG.md for the full list of changes and the migration table from v1.

The rewrite also brings drop-in C++ replacements for the image-analysis and distance-transform calls the old pipeline relied on, with no extra install:

ncolor replaces speed, 1 worker speed, 4 workers
ncolor.connected_components skimage.measure.label 0.39x to 2.4x 0.96x to 6.5x
ncolor.regionprops skimage.measure.regionprops_table (area, bbox, centroid) 1.9x to 27.8x 5.4x to 34.5x
ncolor.expand_labels scipy.ndimage.distance_transform_edt nearest-label fill 2.6x to 7.6x 6.5x to 25.8x
ncolor.expand_labels skimage.segmentation.expand_labels 3.5x to 8.5x 9.9x to 29.2x
ncolor.delete_spurs hand-rolled morphology, not in scikit-image not compared not compared

Speeds are ranges over the benchmark inputs on both machines, measured against SciPy 1.18.1 and scikit-image 0.26.0, which run these operations on one thread. expand_labels also supports L1 expansion in any dimension. scikit-image's measure.label is faster on some dense masks: down to 0.39x on one thread on a 70% filled 3D volume at full connectivity, and 0.96x with four workers on the same volume.

All of these run on the engine's workers, and Engine(n_threads=...) sets the budget per call. Results never depend on the worker count.

Connected components is a separate utility and is also used by format_labels(clean=True) to split disconnected pieces of a label. Ordinary label() calls do not run it: their expand_mode="clean" uses bridge and spur cleanup within label expansion. Large component jobs now use parallel slabs and boundary merging; small arrays stay serial. Engine(n_threads=4).connected_components(mask) selects an explicit worker budget. Component IDs retain the serial scan order.

For C++ engine internals, file-by-file architecture, and threadpool design, see ARCHITECTURE.md.

Metadata

Release files for ncolor 2.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ncolor 2.3.0
File Size Uploaded
ncolor-2.3.0.tar.gz 370.6 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for ncolor 2.3.0
File
ncolor-2.3.0-cp315-cp315-win_arm64.whl CPython 3.15 CPython 3.15 Windows ARM64 Details
ncolor-2.3.0-cp315-cp315-win_amd64.whl CPython 3.15 CPython 3.15 Windows x86-64 Details
ncolor-2.3.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.15 CPython 3.15 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
ncolor-2.3.0-cp315-cp315-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.15 CPython 3.15 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details
ncolor-2.3.0-cp315-cp315-macosx_11_0_arm64.whl CPython 3.15 CPython 3.15 macOS 11.0+ ARM64 Details
ncolor-2.3.0-cp315-cp315-macosx_10_15_x86_64.whl CPython 3.15 CPython 3.15 macOS 10.15+ x86-64 Details
ncolor-2.3.0-cp314-cp314-win_arm64.whl CPython 3.14 CPython 3.14 Windows ARM64 Details
ncolor-2.3.0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
ncolor-2.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
ncolor-2.3.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details
ncolor-2.3.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
ncolor-2.3.0-cp314-cp314-macosx_10_15_x86_64.whl CPython 3.14 CPython 3.14 macOS 10.15+ x86-64 Details
ncolor-2.3.0-cp313-cp313-win_arm64.whl CPython 3.13 CPython 3.13 Windows ARM64 Details
ncolor-2.3.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
ncolor-2.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
ncolor-2.3.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details
ncolor-2.3.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
ncolor-2.3.0-cp313-cp313-macosx_10_14_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.14+ x86-64 Details
ncolor-2.3.0-cp312-cp312-win_arm64.whl CPython 3.12 CPython 3.12 Windows ARM64 Details
ncolor-2.3.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
ncolor-2.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
ncolor-2.3.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details
ncolor-2.3.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
ncolor-2.3.0-cp312-cp312-macosx_10_14_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.14+ x86-64 Details
ncolor-2.3.0-cp311-cp311-win_arm64.whl CPython 3.11 CPython 3.11 Windows ARM64 Details
ncolor-2.3.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
ncolor-2.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
ncolor-2.3.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details
ncolor-2.3.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
ncolor-2.3.0-cp311-cp311-macosx_10_14_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.14+ x86-64 Details

Total release size: 27.7 MB

Release files / ncolor-2.3.0.tar.gz

Download URL ncolor-2.3.0.tar.gz
Size 370.6 kB
Tags Source
SHA-256 checksum
How to use checksums
ebff8516234815153e86a8570b1e69a4e53fdcc02259483ba3d5cfd2567186c9
BLAKE2b-256 checksum
How to use checksums
3cf6b0df519eb8bb98528c717156806abf5358836d70818b0dc9602a82ae3e74
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp315-cp315-win_arm64.whl

Download URL ncolor-2.3.0-cp315-cp315-win_arm64.whl
Size 853.4 kB
Tags CPython 3.15 Windows ARM64
SHA-256 checksum
How to use checksums
ea3dfac3619cf72be53783f6a3f6346b99d7e83fcca1927834b8b6170db88599
BLAKE2b-256 checksum
How to use checksums
e422a69fdd27941aed06e2165ba645338b4986ed93907cbce1971c40e2978b94
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp315-cp315-win_amd64.whl

Download URL ncolor-2.3.0-cp315-cp315-win_amd64.whl
Size 722.1 kB
Tags CPython 3.15 Windows x86-64
SHA-256 checksum
How to use checksums
8c5947f5f83e636ef619ac5d24e40f53644001f8db7c1b8c8e7bf92910d2450f
BLAKE2b-256 checksum
How to use checksums
00916e03d202ab0815994dfc9035de670a2a2894d6f6f2b9a39e247a46fab623
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL ncolor-2.3.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.3 MB
Tags CPython 3.15 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
2226e27385757bf62dcaafab5dbb1dd53c926305f56129cf59c540a9d5259a25
BLAKE2b-256 checksum
How to use checksums
d13703a70f8f56c05ac5e6d030dabcd7c41ad82362fd9f43aa7309c87920aeea
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp315-cp315-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL ncolor-2.3.0-cp315-cp315-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 1.2 MB
Tags CPython 3.15 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
8908290680bbca7a5aee19314180e6870ebbd218cfe501e102f891f133b6779c
BLAKE2b-256 checksum
How to use checksums
76d311e30ad9736f69764ab869611be2e04bef280c3ca7459735ce8f41577477
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp315-cp315-macosx_11_0_arm64.whl

Download URL ncolor-2.3.0-cp315-cp315-macosx_11_0_arm64.whl
Size 695.4 kB
Tags CPython 3.15 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
2d60c92b80b8c9fdcae5388bc7ee8da477988c6032287967fc4408bab6a82a89
BLAKE2b-256 checksum
How to use checksums
720e64a464164ba71afab3a314d23192ba00cc51629973fafff4cd564fa8f3e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp315-cp315-macosx_10_15_x86_64.whl

Download URL ncolor-2.3.0-cp315-cp315-macosx_10_15_x86_64.whl
Size 708.2 kB
Tags CPython 3.15 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
ba2ae51c06acad5647b6dcb7a34d88ad3e998bfbd59a74ffc51c506ab3e024bf
BLAKE2b-256 checksum
How to use checksums
41c5491c2c9fc11a3ab3bb55c1d1daeba9cde524acc2368592176f1b039b3068
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp314-cp314-win_arm64.whl

Download URL ncolor-2.3.0-cp314-cp314-win_arm64.whl
Size 853.4 kB
Tags CPython 3.14 Windows ARM64
SHA-256 checksum
How to use checksums
0f32bababd199786880abbe1a58caa17ee8d0bfc9cacc8cb592896eba266d404
BLAKE2b-256 checksum
How to use checksums
b37625510684c874c2a0605f787c12f501d101857f6e57ac577c5568479b6d3a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp314-cp314-win_amd64.whl

Download URL ncolor-2.3.0-cp314-cp314-win_amd64.whl
Size 722.1 kB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
c3de2eac2a8eacb560974e91dfe6b92cb7c4874a8fd0d4d10a2f357908564ec7
BLAKE2b-256 checksum
How to use checksums
5f0a3582ea13525fb47ab65c94e105f0a96f1ce3f769fe27ce22cb292cb8137c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL ncolor-2.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.3 MB
Tags CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
97f2b7e33676a6b38563f77076f46f6fa7bf9849bac0bddbe0c8e6aec8d7384c
BLAKE2b-256 checksum
How to use checksums
f3df2bc24d0dc9c71c2f5fbb99ff9aa1c0916e95e4c520dde7426609c083d132
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL ncolor-2.3.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 1.2 MB
Tags CPython 3.14 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
987071e924e75ed79eff1dab125e730b9907a6a8b3926187beb31746ff328da4
BLAKE2b-256 checksum
How to use checksums
f3d0c87d541c0c78ed847aab54bbd23e3e4904c2fe3f9782d039ba4bf1f68c95
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL ncolor-2.3.0-cp314-cp314-macosx_11_0_arm64.whl
Size 693.8 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
69e01397ef3268770e603343302cc7ce868f0bc6869b9efe36bc3888dec5d1d6
BLAKE2b-256 checksum
How to use checksums
a86e44d20bf570549bb75df20fd0dc9afa4be26a9dc93054798458f40238fef6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp314-cp314-macosx_10_15_x86_64.whl

Download URL ncolor-2.3.0-cp314-cp314-macosx_10_15_x86_64.whl
Size 708.2 kB
Tags CPython 3.14 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
55d9fd2a03e57126678256a00f9eb573a5d163ed8306f0e24c86c37a050069e3
BLAKE2b-256 checksum
How to use checksums
902deb83ad32a6716f543ecfec4ad0ce9b5bae753d0c08b37c5215c07ba5e0f5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp313-cp313-win_arm64.whl

Download URL ncolor-2.3.0-cp313-cp313-win_arm64.whl
Size 827.1 kB
Tags CPython 3.13 Windows ARM64
SHA-256 checksum
How to use checksums
ab0f43ece2f15760a7ce4390bc1c97a67ccb8bd573ed9ebc6ce340683a0e9238
BLAKE2b-256 checksum
How to use checksums
e4f231fdf52941388856a9c3751d67ef6560cbacc594c1fd4b611fb4efb5456c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp313-cp313-win_amd64.whl

Download URL ncolor-2.3.0-cp313-cp313-win_amd64.whl
Size 702.0 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
4d1ff1600bea0e534a7f5817599bfa0ca43538a61289b52781df7730d1f08e0e
BLAKE2b-256 checksum
How to use checksums
467dcec2ef1b5e41eb18f563a4bb801b99efa01600ca3f097ea68ac30cb42711
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL ncolor-2.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.3 MB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
7e90df25a72a1bebfceaae7d581ba5c955186b553572865ec9fa0a2197d8af9b
BLAKE2b-256 checksum
How to use checksums
0da0dd40ff246c0d89dabd7b29850e1cb591f5b9aa81dab4cfe5efbcedddadbc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL ncolor-2.3.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 1.2 MB
Tags CPython 3.13 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
45dfc02dfb49e61a0b005dffd34c811cf3d9cb0e822d2386a398a5132f4a3300
BLAKE2b-256 checksum
How to use checksums
3756ac01dd380be0ff15da6ca5dda70c93809472856106b49f97e407ce807d58
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL ncolor-2.3.0-cp313-cp313-macosx_11_0_arm64.whl
Size 692.9 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
51761fc4acb4e645fa05b39cac9e25acd724c5d0da4f7270b5c25860a12e0e72
BLAKE2b-256 checksum
How to use checksums
a3589557a4bf409dc97ea258c17a4bc1e89e6a8d83cb36e177d29f6c386fe195
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp313-cp313-macosx_10_14_x86_64.whl

Download URL ncolor-2.3.0-cp313-cp313-macosx_10_14_x86_64.whl
Size 708.0 kB
Tags CPython 3.13 macOS 10.14+ x86-64
SHA-256 checksum
How to use checksums
324bb66ba8dd43f1e11c997f518708b1cb5a028b08ac059c2acceca72f5774ba
BLAKE2b-256 checksum
How to use checksums
10b25f1e77c559ed3fc6db51f3f2d0af2010601f63409f4a69e966b8bb5d0297
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp312-cp312-win_arm64.whl

Download URL ncolor-2.3.0-cp312-cp312-win_arm64.whl
Size 827.1 kB
Tags CPython 3.12 Windows ARM64
SHA-256 checksum
How to use checksums
a8d15c3645e26072f8151217f2368093a98c0537e39ce34736b05affe7bd4e45
BLAKE2b-256 checksum
How to use checksums
29bd35e1976e723b62d9e13bf73168a61a8fd6db5ea7bf3fa74ba6608882384f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp312-cp312-win_amd64.whl

Download URL ncolor-2.3.0-cp312-cp312-win_amd64.whl
Size 701.9 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
cbc292b5f388e18bc3e6e7f7ddb840c907613fb08158f031a640c0ebe5f9503f
BLAKE2b-256 checksum
How to use checksums
1f867897534b8153b0faa0ba3b205aa3f624a2d9812214982b48c0345db87948
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL ncolor-2.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.3 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
220d5bcea76a0ef234f673b7dc840678a3175bbf243ce682b1323edc322667b9
BLAKE2b-256 checksum
How to use checksums
25db85012fbc781bac4ce62b6f54a3d2aaeeb2119234cf754ed6ce23cc227c5a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL ncolor-2.3.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 1.2 MB
Tags CPython 3.12 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
def4fa5f26c749b9473a799f2fddaf8ec1333512e0d198c2cf4ed7377c4d1c5d
BLAKE2b-256 checksum
How to use checksums
980672ca1eae4a8cbc958e616071e594772cb805833d7ce1b1c860872d25c42f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL ncolor-2.3.0-cp312-cp312-macosx_11_0_arm64.whl
Size 692.9 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
8bfbfff868e95fc968de943a94f0a8256e54fd5dd5922c22e6239ada3d89ba3d
BLAKE2b-256 checksum
How to use checksums
99b7ccffc3053136c01b4f31c16ac87bc8e17a70a59dc22738ba1e80f5fd1ff8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp312-cp312-macosx_10_14_x86_64.whl

Download URL ncolor-2.3.0-cp312-cp312-macosx_10_14_x86_64.whl
Size 707.9 kB
Tags CPython 3.12 macOS 10.14+ x86-64
SHA-256 checksum
How to use checksums
103b12ec993f54b473c8cfe32ef6ba778b9a7309be0400581dfaec1cd12ba9e1
BLAKE2b-256 checksum
How to use checksums
546cb0965fb63ab71bd9bbd6340b5b8cb95c0835be43a00585fb678ab88d19cf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp311-cp311-win_arm64.whl

Download URL ncolor-2.3.0-cp311-cp311-win_arm64.whl
Size 823.8 kB
Tags CPython 3.11 Windows ARM64
SHA-256 checksum
How to use checksums
67aff401d351b2dc3e4706b10cbe5e050c2c454369a82ecd9c43f24939b13ab2
BLAKE2b-256 checksum
How to use checksums
82eb573931420fc1c3f46c2977aeefa8d82d34e183db801b996d84bd5a44ab2b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp311-cp311-win_amd64.whl

Download URL ncolor-2.3.0-cp311-cp311-win_amd64.whl
Size 698.7 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
63d73508fd21b1ec3ae8338c6cec4e7886d332ca9e3d6237a78ba40306c52836
BLAKE2b-256 checksum
How to use checksums
468427a8d68f268699cc8d029c36217ac8b8a0ab99432b0ee5c62a8f598e0de4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL ncolor-2.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.3 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
c441ef0aafbdcad8a6a20e551fc83401c79991122470e6fbe765d7d60374f42d
BLAKE2b-256 checksum
How to use checksums
f2a6fbfd76f47b8248da51071d47dae6d7eb9763f37a2b3c3806caa109f44866
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL ncolor-2.3.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 1.2 MB
Tags CPython 3.11 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
2ba7a56f5eb5bc2d039dc045a08ce2d2a78eb9da6b399a9341b2c20cdd929670
BLAKE2b-256 checksum
How to use checksums
004a63e759ffe6b256daf74b92fb8bb44a6a6b22922ff5f635ccfcf529004b0b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL ncolor-2.3.0-cp311-cp311-macosx_11_0_arm64.whl
Size 692.5 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
f4a4b5ff477e2c9163ab77d35acb72f75e4a802c707ef5f03343f7df321674e5
BLAKE2b-256 checksum
How to use checksums
179ca7e98318e46303cf388cbcd4c9447ded27d16312d596c9b4e400e0a46646
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / ncolor-2.3.0-cp311-cp311-macosx_10_14_x86_64.whl

Download URL ncolor-2.3.0-cp311-cp311-macosx_10_14_x86_64.whl
Size 706.1 kB
Tags CPython 3.11 macOS 10.14+ x86-64
SHA-256 checksum
How to use checksums
24e2fb9f8c396f6c538eb9a3733c1e8898cda748a6cb4b64dafc5460e5caace5
BLAKE2b-256 checksum
How to use checksums
c8c5caf3d8906b7d31428c26d5f2a1a7b2cbe9885b81ebb20578b543dea8283f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2.3.0 This release

31 release files

2.2.0

31 release files

2.0.2

21 release files

1.5.3

2 release files

1.5.2

2 release files

1.5.1

2 release files

1.5.0

2 release files

1.4.5

2 release files

1.4.4

2 release files

1.4.3

2 release files

1.4.2

2 release files

1.4.1

2 release files

1.3.0

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.8

2 release files

1.1.5

1 release file

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page