CKmeans: Optimal Univariate Clustering
Ckmeans clustering is an improvement on 1-dimensional (univariate) heuristic-based clustering approaches such as Jenks. The algorithm was developed by Haizhou Wang and Mingzhou Song (2011) as a dynamic programming approach to the problem of clustering numeric data into groups with the least within-group sum-of-squared-deviations.
Minimising the difference within groups – what Wang & Song refer to as withinss, or within sum-of-squares – means that groups are optimally homogeneous within and the data is split into representative groups. This is useful for visualisation, where one may wish to represent a continuous variable in discrete colour or style groups.
Being a dynamic approach, this algorithm is based on two matrices that store incrementally-computed values for squared deviations and backtracking indexes.
If you do not know the number of clusters, ckmeans_optimal chooses it with the Bayesian Information Criterion (BIC), following Song & Zhong (2020).
Implementation
This library uses the ckmeans Rust crate, by the same author.
All functions accept any one-dimensional array-like input (a NumPy array of any numeric dtype, a list or a tuple), and convert it to float64. They release the GIL during the calculation.
ckmeans(data, k)
Cluster data into k groups with the least within-group sum of squares. Returns a list of float64 arrays, one for each cluster, in ascending order of value. Each cluster is sorted.
If data has fewer than k distinct values, there is one cluster for each distinct value.
breaks(data, k)
Calculate the breaks between k clusters, for labels and legends. Returns one break fewer than the number of clusters.
The lower bounds of the clusters from ckmeans can have many decimal places, which makes them unsuitable for a legend. Rounding them can be too loose (spurious decimal places) or too strict (classes ranging "from x to x"). Each break b is instead the roundest number between the highest value of a cluster (last) and the lowest value of the next cluster (first), so that last < b <= first. It is a multiple of the largest power of ten that has a multiple in that interval; of those multiples, it is the one nearest the midpoint.
This method is based on the visionscarto method of the same name.
ckmeans_optimal(data, k_min=1, k_max=9)
Find the best number of clusters for data, and cluster the data. Use this function when you do not know how many clusters the data has.
The function clusters data once for each number of clusters k from k_min to k_max. It then chooses the k with the lowest Bayesian Information Criterion (BIC), which balances how closely the clusters fit the data against the number of clusters. k_max is capped at the number of distinct values in data.
The default range of 1 to 9 is the same as in the R package Ckmeans.1d.dp. If the data can have more than 9 clusters, set a higher k_max (up to 255).
Returns an OptimalResult, with these attributes:
| Attribute | Type | Content |
|---|---|---|
k |
int |
The chosen number of clusters |
clusters |
list of float64 arrays |
The clusters, as returned by ckmeans |
centers |
float64 array |
The mean of each cluster |
sizes |
intp array |
The number of values in each cluster |
withinss |
float64 array |
The within-cluster sum of squares of each cluster |
ks |
intp array |
The candidate numbers of clusters |
bic |
float64 array |
The BIC of each candidate number of clusters |
Errors
All functions raise CkmeansError, a subclass of ValueError, if:
k(ork_min) is less than 1k,k_minork_maxis greater than 255kis greater than the number of values, ork_minis greater than the number of distinct valuesk_minis greater thank_maxdatacontains NaN
Numerical limits
- Infinite values are accepted, but a cluster that contains one has no finite sum of squares. The result is then a partition of the input with no optimality guarantee.
ckmeans_optimalreturns NaN BIC values for such input and usesk_min. - The costs are calculated in
float64from cumulative sums. If the data spans a very large range (for example, values that differ by 1 alongside values of order 1e8), cost differences belowfloat64resolution are lost. The result can then be sub-optimal by that amount, and equal values can be put in adjacent clusters.breaksthen returns the first value of the upper cluster as the break.
Upgrading from 0.2
- Invalid input raises
CkmeansError, a subclass ofValueError. Version 0.2 raisedRuntimeError, orPanicExceptionfor NaN input,kgreater than 255 and non-contiguous arrays. breaksuses the method of version 2.0 of the crate, and can return different values. For example,breaks([1.0, 2.0, 3.0, 4.0, 100.0, 101.0, 102.0, 103.0], 2)returns[100.0], not[50.0].- The clusters from
ckmeansare views of one sorted copy of the input. dataandkcan be given as keyword arguments.- Python 3.11 or later is required.
Install for local development
- Ensure that
maturinand a recent Rust toolchain are installed maturin develop --release(you will need to re-run this command if you're hacking on the source and want to e.g. benchmark your changes).uv runrebuilds the extension when the Rust sources change.
Benchmarks
Benchmarks can be run using uv run pytest --benchmark-only.
The benchmarks compare this Rust implementation against ckmeans-1d-dp (C++ implementation) across different data sizes and cluster counts:
- 110k samples with 5 or 20 clusters
- 1M samples with 5 or 20 clusters
Results are grouped for meaningful comparison between implementations with identical parameters. Benchmark results also generate histogram visualisations saved as SVG files.
Results
ckmeans is around 10 % faster than ckmeans.1d.dp, and around 20 % faster than the original R package that wraps the same CPP library ckmeans.1d.dp.
Note: The ckmeans-1d-dp Python package only returns indices identifying each cluster to which the input belongs. If you want to cluster your data, you need to do that yourself.
Examples
import numpy as np
from ckmeans import ckmeans
data = np.array([1.0, 2.0, 3.0, 4.0, 100.0, 101.0, 102.0, 103.0])
result = ckmeans(data, 2)
np.testing.assert_array_equal(result[0], [1.0, 2.0, 3.0, 4.0])
np.testing.assert_array_equal(result[1], [100.0, 101.0, 102.0, 103.0])
from ckmeans import breaks
result = breaks([0.12, 0.13, 0.21, 0.24, 0.87, 0.91], k=2)
assert result.tolist() == [0.6]
from ckmeans import ckmeans_optimal
data = [1.0, 1.1, 1.2, 50.0, 51.0, 52.0, 100.0, 101.0, 102.0]
result = ckmeans_optimal(data)
assert result.k == 3
assert result.sizes.tolist() == [3, 3, 3]
License
Metadata
Release files for ckmeans 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ckmeans-1.0.1.tar.gz | 24.2 kB | Details |
Built distributions (wheels)
Total release size: 3.8 MB
Release files / ckmeans-1.0.1.tar.gz
| Download URL | ckmeans-1.0.1.tar.gz |
|---|---|
| Size | 24.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b3ca634e26eb75c029d12519bd2756070cd34616148cec4ccfb73094976e97a5
|
|
BLAKE2b-256 checksum How to use checksums |
4f06a13528d8fbb170748d66e21b40b2248062fefeb2357a4b7797b5ff95054d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ckmeans-1.0.1-cp314-cp314t-win_arm64.whl
| Download URL | ckmeans-1.0.1-cp314-cp314t-win_arm64.whl |
|---|---|
| Size | 163.3 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows ARM64 |
|
SHA-256 checksum How to use checksums |
ef54f2fb04577f82f525d86d9457302384e3fe4d1084f42bfc1fe4fa49a04ee8
|
|
BLAKE2b-256 checksum How to use checksums |
58e2979bf40b3e98c21c289e09b28153730e2a47149808523499295743fa3c25
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ckmeans-1.0.1-cp314-cp314t-win_amd64.whl
| Download URL | ckmeans-1.0.1-cp314-cp314t-win_amd64.whl |
|---|---|
| Size | 170.9 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows x86-64 |
|
SHA-256 checksum How to use checksums |
48e32805e5fa736599552283ca330e326cb3d7b9f3c42274b81682e2c33db5af
|
|
BLAKE2b-256 checksum How to use checksums |
e7244259e0e83e63d317593057f6db1d470dfe63b4b4696408a62bf39b2ef3a8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ckmeans-1.0.1-cp314-cp314t-win32.whl
| Download URL | ckmeans-1.0.1-cp314-cp314t-win32.whl |
|---|---|
| Size | 159.8 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows x86-32 |
|
SHA-256 checksum How to use checksums |
936411c0f94bc41aaa878bb1b40dffbc78aa055a8492a94efd79af0fd2dc3f08
|
|
BLAKE2b-256 checksum How to use checksums |
db67b7d3041fb48937add3697434f9d8223051fb1e7b569294162a7d318aebe4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ckmeans-1.0.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | ckmeans-1.0.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 286.3 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
efde9ec4b12959e798e71819a9f8bb4108baba93be0b4c3d380f8af85562bfb5
|
|
BLAKE2b-256 checksum How to use checksums |
37188298844cf3cb1258e357990d81669a4cd72de74e5c9c7990a9e505dbc18d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ckmeans-1.0.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | ckmeans-1.0.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 282.8 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
33ffcbf08261392aa77e3f35d3d29af4d174a77904942b15cd1b6f1bc962b9ce
|
|
BLAKE2b-256 checksum How to use checksums |
604ae8b274ea6b3f9bf938a3a6ea907a4c4386796cffe770944328c20dfba9d3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ckmeans-1.0.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl
| Download URL | ckmeans-1.0.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl |
|---|---|
| Size | 304.9 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.5+ x86-32 |
|
SHA-256 checksum How to use checksums |
87befadb2e0fadfb550d5a366380df7822ac2797bfd50a9cadf3e344080d87d2
|
|
BLAKE2b-256 checksum How to use checksums |
0e6e6fd4c2b81d0052388b412f9dda6b8f44b56c7ce8568bfba78f0b411c7760
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ckmeans-1.0.1-cp314-cp314t-macosx_11_0_arm64.whl
| Download URL | ckmeans-1.0.1-cp314-cp314t-macosx_11_0_arm64.whl |
|---|---|
| Size | 259.1 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
52a675fb0fe5d230a8a6d9fa6964372e7f576edd58522af07d0b4c8e488cb959
|
|
BLAKE2b-256 checksum How to use checksums |
c5a72c984986a3174cc2a94365595ebd3e8e0e5e291c5b63b0ec1b0ed13fcd75
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ckmeans-1.0.1-cp314-cp314t-macosx_10_12_x86_64.whl
| Download URL | ckmeans-1.0.1-cp314-cp314t-macosx_10_12_x86_64.whl |
|---|---|
| Size | 270.0 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
334554edf631cec5c0942d3a30f1cf66c9b87562888790734c218bcdc054c15c
|
|
BLAKE2b-256 checksum How to use checksums |
3b62c68c3fee185f12f4c45dd68e9f481cf5457a374bc1f192106b0e39c7a155
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ckmeans-1.0.1-cp311-abi3-win_arm64.whl
| Download URL | ckmeans-1.0.1-cp311-abi3-win_arm64.whl |
|---|---|
| Size | 166.6 kB |
| Tags | CPython 3.11 Windows ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
6e0beaa8d90b5a4384923e57f962ad6c03007e719540ed78e942c2b5b2d9e66f
|
|
BLAKE2b-256 checksum How to use checksums |
385420cbca9db030843fb7966db6bc41cc5bc56678ce8827be447fe2392cf3ac
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ckmeans-1.0.1-cp311-abi3-win_amd64.whl
| Download URL | ckmeans-1.0.1-cp311-abi3-win_amd64.whl |
|---|---|
| Size | 174.0 kB |
| Tags | CPython 3.11 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
b430b66b232fb92d0c82c1288a2776a47f6f2643bcc2a591665fda3f3c286596
|
|
BLAKE2b-256 checksum How to use checksums |
38140d2e69680359b3e28ed3e14a8856f356f0a2f3ffceb4c581b1d03e1ba378
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ckmeans-1.0.1-cp311-abi3-win32.whl
| Download URL | ckmeans-1.0.1-cp311-abi3-win32.whl |
|---|---|
| Size | 162.5 kB |
| Tags | CPython 3.11 Windows x86-32 abi3 |
|
SHA-256 checksum How to use checksums |
0cc7107857a3f65b9234ab2f5aa99452e287675589d136bcc3afa70df48adea4
|
|
BLAKE2b-256 checksum How to use checksums |
02a19c8c2abdbcdc605cdce425ac00cf49f2224000cc71e9430f2071e396cdb5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ckmeans-1.0.1-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | ckmeans-1.0.1-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 288.1 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
c69417f4d7bdce3831f60a374054a6def3d465ea898c9b8ebcd29120d4e310a6
|
|
BLAKE2b-256 checksum How to use checksums |
91d15f0e58fa094676aba1cbe155a3d64bbca32e1babbd73011e7b257d05426d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ckmeans-1.0.1-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | ckmeans-1.0.1-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 284.3 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
2dae33e98e3eb2f45b06f9befcf94fe34728a1e15cf677967222c067af9c2e21
|
|
BLAKE2b-256 checksum How to use checksums |
b44168fc3bbc9ea2a3828ac2d91d4d43634da2acf11354b0c5a16185a345202d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ckmeans-1.0.1-cp311-abi3-manylinux_2_5_i686.manylinux1_i686.whl
| Download URL | ckmeans-1.0.1-cp311-abi3-manylinux_2_5_i686.manylinux1_i686.whl |
|---|---|
| Size | 308.0 kB |
| Tags | CPython 3.11 Linux glibc 2.5+ x86-32 abi3 |
|
SHA-256 checksum How to use checksums |
d0dda90d1fca925aa5b6e9e9633175c34dcc98caafcda94b5e5b7e045ae705e9
|
|
BLAKE2b-256 checksum How to use checksums |
c6ee32e1227eb427dee5c3adff3dc82de688a24a03c6b06055dd0b4954399719
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ckmeans-1.0.1-cp311-abi3-macosx_11_0_arm64.whl
| Download URL | ckmeans-1.0.1-cp311-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 263.3 kB |
| Tags | CPython 3.11 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
04e21a94e873ae5ee03d444e112fe74105a487f6a728c11079a46e922400e846
|
|
BLAKE2b-256 checksum How to use checksums |
0f9f3a6c171578400df9888617527fe282135c8f475b1dd5de2f8fe401056709
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ckmeans-1.0.1-cp311-abi3-macosx_10_12_x86_64.whl
| Download URL | ckmeans-1.0.1-cp311-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 270.2 kB |
| Tags | CPython 3.11 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
0ab3852a885de63195a09a84bf19b978ee7cf60c5471c437a0acc27d2649af06
|
|
BLAKE2b-256 checksum How to use checksums |
66c8860191d26f7f0f342be96eb80effb3fa03711031b07c75c9cfdca5d51130
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|