Skip to main content

Portable mixed-precision BLAS-like vector math library for x86 and ARM

Project description

NumKong for Python

NumKong for Python is the main high-level SDK in the project. It targets the gap between numpy and low-level native kernels: you keep buffer-protocol interoperability and shape-aware outputs, but you stop giving up mixed precision, widened accumulators, packed reuse, and backend-specific optimizations every time you leave float64. It combines NumPy-friendly buffers with native mixed-precision kernels, zero-copy tensor views, packed and symmetric matrix operations, sparse helpers, geometric mesh alignment, and MaxSim. The API feels NumPy-shaped with familiar scalar, batched, and all-pairs entrypoints, while Tensor keeps shape, dtype, and strides visible through a memoryview-backed container. Low-precision dtypes (BFloat16, Float8, Float6, packed bits) flow through the same API, and dense, packed, and symmetric kernels release the GIL around native work.

Ecosystem Comparison

Feature NumKong NumPy/SciPy PyTorch
Operation families dots, distances, binary, probability, geospatial, curved, mesh, sparse, MaxSim, elementwise, reductions, cast, trig dots, distances, elementwise, reductions, some probability via cdist dots, distances, elementwise, reductions
Precision BFloat16 through sub-byte — Float8, Float6, Int4, packed bits; automatic widening; Kahan summation; 0 ULP in Float32/Float64 Float16, partial BFloat16; no auto-widening; standard accuracy Float16, BFloat16, partial Float8; explicit AMP required; standard accuracy
Runtime SIMD dispatch auto-selects best ISA per-thread at runtime on x86, ARM, RISC-V compile-time only CPU: compile-time; CUDA: runtime
Packed matrix, GEMM-like pack once, reuse across query batches np.dot/@ — no persistent packing torch.mm — no persistent distance-oriented packing
Symmetric kernels, SYRK-like skip duplicate pairs, up to 2x speedup for self-distance pdist computes one triangle; cdist recomputes both X @ X.T recomputes both triangles
Output parameter out= Yes — all major entrypoints Yes — most ufuncs and functions; SciPy: some functions only Yes for torch.mm, torch.matmul; No for torch.cdist
Fast CPython calling convention Yes — direct METH_FASTCALL Yes — vectorcall in 2.0+ No — tensor dispatch overhead
GIL release batched, packed, and symmetric kernels some ops only most ops

Quickstart

import numpy as np
import numkong as nk

a, b = np.random.randn(1536).astype(np.float32), np.random.randn(1536).astype(np.float32)
dot = nk.dot(a, b)  # widened accumulation, not same-dtype
print(dot)

Installation

From PyPI:

python -m pip install numkong

From a local checkout:

python -m pip install .

Quick runtime check:

python -c "import numkong as nk; print(nk.get_capabilities())"

Wheel Compatibility and Building from Source

Pre-built wheels are available on PyPI for Linux (x86_64, aarch64, riscv64, plus i686, ppc64le, s390x), macOS (x86_64, arm64), and Windows (AMD64, ARM64). Python 3.9 through 3.14 is supported, including free-threading variants (3.13t, 3.14t). Every wheel is built with NK_DYNAMIC_DISPATCH=1, so a single wheel covers all CPU generations on a given architecture.

When building from source, the compiler requirements depend on the platform. On macOS x86 only AVX2 is available; on macOS ARM NEON is always present, but SME requires Apple M4+ with Xcode 16+ (AppleClang 16+). RISC-V builds require Clang and LLD because GCC lacks zvfh, zvfbfwma, and zvbb support. On Windows, MSVC 19.44+ (Visual Studio 2022 17.14+) is recommended for full AVX-512 with FP16/BF16/VNNI. Build parallelism is controlled by NK_BUILD_PARALLEL, which defaults to min(cpu_count, 4) and should be lowered in memory-constrained containers. There is no OpenMP dependency. Python-side parallelism uses concurrent.futures with GIL-free kernels.

NK_BUILD_PARALLEL=2 pip install . --no-build-isolation

Dot Products

Dot products are their own family because storage type, conjugation rules, and output widening matter.

import numpy as np
import numkong as nk

a = (np.random.randn(256) + 1j * np.random.randn(256)).astype(np.complex64)
b = (np.random.randn(256) + 1j * np.random.randn(256)).astype(np.complex64)

dot = nk.dot(a, b)   # numpy.dot(a, b)
vdot = nk.vdot(a, b) # numpy.vdot(a, b)

print(dot, vdot)

Real low-precision inputs can also be routed through explicit dtype tags when the storage buffer itself is raw bytes.

Dense Distances

The dense distance entrypoints cover sqeuclidean, euclidean, and angular. The first important difference from NumPy or SciPy is that the accumulator policy is not forced to match the storage dtype.

import numpy as np
import numkong as nk

a = np.random.randn(768).astype(np.float16)
b = np.random.randn(768).astype(np.float16)

sqeuclidean = nk.sqeuclidean(a, b)
euclidean = nk.euclidean(a, b)
angular = nk.angular(a, b)

For float16, a naive same-dtype implementation is exactly the kind of path that loses precision or widens too late. NumKong's API makes the widening policy part of the kernel contract.

Output Control: out=, dtype=, and out_dtype=

Most distance and dot-product entrypoints accept out=, dtype=, and out_dtype= keyword arguments. Passing them avoids dynamic memory allocations for temporary objects.

import numpy as np
import numkong as nk

queries = np.random.randn(100, 768).astype(np.float32)
database = np.random.randn(100, 768).astype(np.float32)

# Pre-allocated output with out=
out = nk.zeros((100,), dtype="float32")
nk.sqeuclidean(queries, database[:100], out=out)  # writes in-place, returns None

# Explicit input dtype for raw byte buffers
raw = np.frombuffer(some_bytes, dtype=np.uint16)
nk.dot(raw, raw, dtype=nk.bfloat16)  # reinterpret uint16 as bf16

# Output dtype override
nk.euclidean(queries[0], database[0], out_dtype="float32")  # accumulate in f64, downcast result

When out= is provided, the function writes results in-place and returns None. The out array must be pre-allocated with the correct shape and a supported dtype. For custom float types (bfloat16, float16, float8_e4m3, float8_e5m2, float6_e2m3, float6_e3m2), type objects are preferred over strings — they are faster to dispatch and provide IDE autocomplete:

nk.dot(a, b, dtype=nk.bfloat16) # works faster
nk.dot(a, b, dtype="bfloat16")  # works a bit slower

Set Similarity

Packed-binary metrics operate on packed bits. That is why the right NumPy equivalent uses np.packbits, not bool arrays fed to scalar Python code.

import numpy as np
import numkong as nk

a_bits = np.random.randint(0, 2, size=256, dtype=np.uint8)
b_bits = np.random.randint(0, 2, size=256, dtype=np.uint8)
a, b = np.packbits(a_bits), np.packbits(b_bits)

hamming = nk.hamming(a, b, dtype="uint1")
jaccard = nk.jaccard(a, b, dtype="uint1")

Integer set Jaccard works on sorted ascending arrays of integer identifiers. Both inputs must be sorted in ascending order for correct results.

set_a = np.array([1, 3, 5, 7, 9], dtype=np.uint32)  # must be sorted ascending
set_b = np.array([3, 5, 8, 9, 10], dtype=np.uint32)  # must be sorted ascending
jaccard_sets = nk.jaccard(set_a, set_b) # |A ∩ B| / |A ∪ B|
assert 0.0 < jaccard_sets < 1.0, "|A ∩ B| / |A ∪ B| should be in (0, 1)"

Probability Metrics

Probability divergences deserve their own section because they are not just "one more distance".

import numpy as np
import numkong as nk

p = np.array([0.2, 0.3, 0.5], dtype=np.float32)
q = np.array([0.1, 0.3, 0.6], dtype=np.float32)

kl_forward, kl_reverse = nk.kullbackleibler(p, q), nk.kullbackleibler(q, p)
assert kl_forward != kl_reverse, "KLD is asymmetric"

js_forward, js_reverse = nk.jensenshannon(p, q), nk.jensenshannon(q, p)
np.testing.assert_allclose(js_forward, js_reverse, atol=1e-6)  # JSD is symmetric

Geospatial Metrics

Geospatial kernels take four coordinate arrays. Inputs are in radians. Outputs are in meters.

import numpy as np
import numkong as nk

# Statue of Liberty (40.6892°N, 74.0445°W) → Big Ben (51.5007°N, 0.1246°W)
liberty_lat, liberty_lon = np.array([0.7101605100], dtype=np.float64), np.array([-1.2923203180], dtype=np.float64)
big_ben_lat, big_ben_lon = np.array([0.8988567821], dtype=np.float64), np.array([-0.0021746802], dtype=np.float64)

vincenty = nk.vincenty(liberty_lat, liberty_lon, big_ben_lat, big_ben_lon)    # ≈ 5,589,857 m (ellipsoidal, baseline)
haversine = nk.haversine(liberty_lat, liberty_lon, big_ben_lat, big_ben_lon)  # ≈ 5,543,723 m (spherical, ~46 km less)

# Vincenty in f32 — drifts ~2 m from f64
liberty_lat32 = liberty_lat.astype(np.float32)
liberty_lon32 = liberty_lon.astype(np.float32)
big_ben_lat32 = big_ben_lat.astype(np.float32)
big_ben_lon32 = big_ben_lon.astype(np.float32)
vincenty_f32 = nk.vincenty(liberty_lat32, liberty_lon32, big_ben_lat32, big_ben_lon32)  # ≈ 5,589,859 m (+2 m drift)

Curved Metrics

Curved-space kernels use an extra metric tensor or inverse covariance and should not be mixed into the Euclidean section.

import numpy as np
import numkong as nk

# Complex bilinear form: aᴴ M b
a = (np.ones(16) + 1j * np.zeros(16)).astype(np.complex64)
b = (np.zeros(16) + 1j * np.ones(16)).astype(np.complex64)
m = np.eye(16, dtype=np.complex64)
bilinear = nk.bilinear(a, b, m)

# Real Mahalanobis distance: √((a−b)ᵀ M⁻¹ (a−b))
x = np.ones(32, dtype=np.float32)
y = np.full(32, 2.0, dtype=np.float32)
inv_cov = np.eye(32, dtype=np.float32)
mahalanobis = nk.mahalanobis(x, y, inv_cov)

Scalar Types and Low-Precision Formats

NumKong exposes two different low-precision stories in Python. It exposes Python scalar objects for a few formats. And it exposes tensor dtypes for the broader buffer-oriented path.

The six scalar types have stable payload sizes even though Python object headers are not:

Type Bits Bytes Range Inf NaN
nk.float16 1+5+10 2 ±65504 yes yes
nk.bfloat16 1+8+7 2 ±3.4×10³⁸ yes yes
nk.float8_e4m3 1+4+3 1 ±448 no yes
nk.float8_e5m2 1+5+2 1 ±57344 yes yes
nk.float6_e2m3 1+2+3 1 ±7.5 no no
nk.float6_e3m2 1+3+2 1 ±28 no no

The Bits column shows sign + exponent + mantissa bit counts. The Bytes column is the stable payload size; float8_* and float6_* both store 1 byte because the sub-byte formats are padded to byte alignment.

The full object footprint is interpreter-dependent. Use sys.getsizeof(nk.float16(1.0)) if you need the heap footprint of the Python wrapper object itself. Use Tensor.itemsize and Tensor.nbytes for the stable payload sizes of array storage.

ml_dtypes matters here because NumKong explicitly interoperates with the formats that NumPy still does not model well. The test suite compares bfloat16, float8_e4m3, float8_e5m2, float6_e2m3, and float6_e3m2 behavior against ml_dtypes where that comparison is meaningful.

Promotion is intentional. Mixed exotic floats are routed through wider compute types rather than pretending a same-width accumulator is good enough.

ml_dtypes Interoperability

NumKong accepts ml_dtypes arrays directly — no .view(np.uint8) workaround needed:

import ml_dtypes
a = np.random.randn(100, 768).astype(np.float32).astype(ml_dtypes.bfloat16)
b = np.random.randn(100, 768).astype(np.float32).astype(ml_dtypes.bfloat16)
result = nk.cdist(a, b, "dot")  # just works

NumKong scalars also work as NumPy dtype specifiers:

arr = np.array([1.0, 2.0, 3.0], dtype=nk.bfloat16)
float(arr[0])  # → 1.0

Type name mapping between the two libraries:

ml_dtypes NumKong Status
ml_dtypes.bfloat16 nk.bfloat16 / "bfloat16" Identical format
ml_dtypes.float8_e4m3 nk.float8_e4m3 / "e4m3" Identical (IEEE E4M3)
ml_dtypes.float8_e4m3fn nk.float8_e4m3 / "e4m3" Identical (E4M3FN = no inf)
ml_dtypes.float8_e5m2 nk.float8_e5m2 / "e5m2" Identical format
ml_dtypes.float6_e2m3fn nk.float6_e2m3 / "e2m3" Identical (MX E2M3)
ml_dtypes.float6_e3m2fn nk.float6_e3m2 / "e3m2" Identical (MX E3M2)
ml_dtypes.float8_e4m3fnuz Rejected: different bias, NaN, and zero
ml_dtypes.float8_e5m2fnuz Rejected: different NaN and zero encoding
ml_dtypes.float8_e4m3b11fnuz Rejected: bias=11, incompatible encoding
ml_dtypes.float8_e8m0fnu Not supported: exponent-only MX scale format
ml_dtypes.float8_e3m4 Not supported: no NumKong kernel
ml_dtypes.float4_e2m1fn Not supported: 4-bit MX float
ml_dtypes.int4 "int4" Compatible via buffer protocol
ml_dtypes.uint4 "uint4" Compatible via buffer protocol
ml_dtypes.int2 Not supported
ml_dtypes.uint2 Not supported

Tensor Objects and Buffer Interop

Tensor is a memoryview-backed object with NumPy-like metadata. It is the central container for strided views, transpose, reshape, flatten, and axis reductions.

import numpy as np
import numkong as nk

t = nk.Tensor(np.arange(12, dtype=np.float32).reshape(3, 4))

print(t.shape, t.dtype, t.ndim, t.strides, t.itemsize, t.nbytes)
print(np.asarray(t))      # zero-copy array view when layout allows it
print(t.T.shape)          # transposed Tensor view
print(t.reshape(2, 6).shape)
print(t.flatten().shape)

# Slicing — row, column, and scalar access
row0 = t[0, :]            # first row, shape (4,)
col2 = t[:, 2]            # third column, strided view, shape (3,)
val  = t[1, 2]            # scalar element access → 6.0

# Reductions compose with sliced views
idx = col2.argmin()        # index of the minimum in the third column
mn, i0, mx, i1 = col2.minmax()

The important layout rules are:

  • Tensor preserves shape and byte strides.
  • Transpose and slicing can produce non-contiguous views.
  • General reductions accept those views.
  • Matrix-style packed kernels require row-contiguous left operands.
  • Packed and symmetric outputs require C-contiguous out buffers.

Memory Layout Requirements

API family Input requirement Output requirement
Dense distances (dot, euclidean, etc.) Rows must be contiguous (strides[last] <= itemsize). Strided rows (sliced columns) are rejected. out= can have any stride along dim 0, but inner dim must be contiguous.
cdist Same as dense distances out= must be rank-2 with shape (a.count, b.count)
Elementwise (scale, blend, fma) Arbitrary strides (strided views are supported) out= must match input shape; strides are preserved
Packed matrix (dots_packed) Left operand: rank-2, contiguous rows, no negative strides Output: C-contiguous with expected dtype
Symmetric (dots_symmetric) Contiguous rows out=: C-contiguous square matrix
Tensor reductions (sum, min, argmin, etc.) Arbitrary strides (strided views supported) N/A (returns scalar or reduced tensor)

All-Pairs APIs and cdist

cdist is the NumPy/SciPy-shaped all-pairs entrypoint. It handles rectangular matrix pairs and symmetric self-distance cases.

import numpy as np
import numkong as nk

queries = np.random.randn(100, 768).astype(np.float32)
database = np.random.randn(10_000, 768).astype(np.float32)

pairwise = nk.angular(queries, database[:100])             # rectangular broadcasted pairwise call
all_pairs = nk.cdist(queries, database, metric="angular")  # scipy.spatial.distance.cdist analogue

assert np.asarray(pairwise).shape == (100, 100)
assert np.asarray(all_pairs).shape == (100, 10_000)

The intended large-scale parallel model for packed and symmetric kernels is external partitioning with row ranges, not a hidden threads= argument.

Elementwise Operations

Elementwise arithmetic and fused operations are their own family. They share the tensor infrastructure but should not be collapsed into the reduction or matrix sections.

import numpy as np
import numkong as nk

a = np.arange(8, dtype=np.float32)
b = np.arange(8, dtype=np.float32)[::-1].copy()

scaled = nk.scale(a, alpha=2.0, beta=1.0)     # 2 * a + 1
blended = nk.blend(a, b, alpha=0.25, beta=0.75)
fused = nk.fma(a, b, a, alpha=1.0, beta=1.0)  # a * b + a

assert np.asarray(scaled).shape == (8,)
assert np.asarray(fused).shape == (8,)

Moments Reductions

Moments reductions return (sum, sum_of_squares). The key property is that NumKong does not force you into same-storage accumulation.

import numpy as np
import numkong as nk

x = np.full(4096, 255, dtype=np.uint8)

nk_sum, nk_sumsq = nk.moments(nk.Tensor(x))
naive_sum = np.sum(x, dtype=np.uint8)      # overflows immediately
naive_sumsq = np.sum(x * x, dtype=np.uint8) # also overflows

print(nk_sum, nk_sumsq, naive_sum, naive_sumsq)
assert nk_sum > int(naive_sum)
assert nk_sumsq > int(naive_sumsq)

Same-width accumulation is a bad default for low-precision storage.

Min/Max Reductions

Min/max reductions are in a separate section because they cover strided reduction cases. NumKong provides SIMD-accelerated strided reductions that are not common in other libraries.

import numpy as np
import numkong as nk

matrix = nk.Tensor(np.array([
    [ 3.0,  0.0, 7.0],
    [ 1.0,  2.0, 5.0],
    [ 4.0, -1.0, 6.0],
], dtype=np.float32))

second_column = matrix[:, 1]  # strided view into a row-major Nx3 tensor

idx = second_column.argmin()
mn, i0, mx, i1 = second_column.minmax()

assert idx == 2
assert int(i0) == 2
assert float(np.asarray(mn)) == -1.0

Fresh measurement for the rewritten docs: on an Apple M2 Pro, np.argmin(matrix[:, 1]) on a row-major 2,000,000 x 3 float32 array took about 1.63 ms median. The equivalent NumKong Tensor(... )[:, 1].argmin() took about 0.67 ms median. That is about 2.45x faster on this strided reduction case.

Sparse Operations and Intersections

Sparse helpers cover both sorted-index intersections and weighted sparse dot products.

import numpy as np
import numkong as nk

idx_a, idx_b = np.array([1, 3, 5, 7], dtype=np.uint32), np.array([3, 4, 5, 8], dtype=np.uint32)
intersection_size = nk.intersect(idx_a, idx_b) # len(np.intersect1d(idx_a, idx_b))
assert intersection_size == 2, "indices 3 and 5"

val_a, val_b = np.array([1.0, 2.0, 3.0, 4.0], dtype=np.float32), np.array([5.0, 6.0, 7.0, 8.0], dtype=np.float32)
sparse_dot = nk.sparse_dot(idx_a, val_a, idx_b, val_b)
assert sparse_dot > 0, "weighted dot over shared indices"

Packed Matrix Kernels for GEMM-Like Workloads

Packed matrix kernels are the right tool when the right-hand side is reused across many query batches. This is the GEMM-like story.

import numpy as np
import numkong as nk

left = np.random.randn(128, 768).astype(np.float32)
right = np.random.randn(10_000, 768).astype(np.float32)

right_packed = nk.dots_pack(right, dtype="float32")  # pack once, reuse many times
scores = nk.dots_packed(left, right_packed)          # equivalent to left @ right.T

assert scores.shape == (128, 10_000)
assert right_packed.nbytes == nk.PackedMatrix.packed_size(10_000, 768, dtype="float32")

Important runtime rules from the current implementation:

  • a must be rank-2
  • a must have contiguous rows
  • negative strides are rejected for these matrix kernels
  • out, when provided, must be C-contiguous with the expected dtype
  • start_row and end_row split the left operand rows

The arithmetic advantages are:

  • one-time packing of B
  • one-time internal layout conversion and depth padding
  • norm reuse for angulars_packed and euclideans_packed
  • no repeated scan of the original right-hand-side layout

Packing itself does not require aligned caller buffers. The packed object owns its internal payload and handles the layout under the hood.

Tensor @ PackedMatrix is also supported and maps to the same packed dot-product path.

Symmetric Kernels for SYRK-Like Workloads

Symmetric kernels solve a different problem from packed cross-matrix kernels. They compute self-similarity or self-distance matrices. This is the SYRK-like story.

import numpy as np
import numkong as nk

vectors = np.random.randn(1024, 768).astype(np.float32)
out = nk.zeros((1024, 1024), dtype="float64")

nk.dots_symmetric(vectors, out=out, start_row=0, end_row=256)
nk.dots_symmetric(vectors, out=out, start_row=256, end_row=512)

assert out.shape == (1024, 1024)

This family has different economics from packed GEMM-like work. It avoids duplicate (i, j) and (j, i) evaluations. It is naturally partitioned by row windows of one square output.

angulars_symmetric and euclideans_symmetric also benefit from reuse of dot-product-derived work inside the symmetric sweep. That is why these APIs are faster than a nested Python loop over angular(a[i], a[j]).

Geometric Mesh Alignment

Mesh alignment returns a structured result object. The current implementation exposes rotation, scale, rmsd, a_centroid, and b_centroid.

import numpy as np
import numkong as nk

source = np.array(
    [[0.0, 0.0, 0.0],
     [1.0, 0.0, 0.0],
     [0.0, 1.0, 0.0]],
    dtype=np.float32,
)

result = nk.kabsch(source, source.copy())
assert np.asarray(result.rotation).shape == (3, 3)
assert float(np.asarray(result.scale)) == 1.0

# Umeyama with known 2x scaling
target = source * 2.0
result = nk.umeyama(source, target)
assert float(np.asarray(result.rmsd)) < 1e-6, "umeyama should recover exact alignment"
assert abs(float(np.asarray(result.scale)) - 2.0) < 0.01, "umeyama should recover 2x scale"

That field-level check is the right style for this API family. It tells the reader exactly what the result object owns.

MaxSim and ColBERT-Style Late Interaction

MaxSim is the late-interaction primitive used by systems such as ColBERT. It is not generic matrix multiplication.

import numpy as np
import numkong as nk

queries = np.random.randn(32, 128).astype(np.float32)
documents = np.random.randn(192, 128).astype(np.float32)

q = nk.maxsim_pack(queries, dtype="float32")
d = nk.maxsim_pack(documents, dtype="float32")
score = nk.maxsim_packed(q, d)

assert np.isfinite(score)
assert q.nbytes == nk.MaxSimPackedMatrix.packed_size(32, 128, dtype="float32")

Capabilities, GIL Behavior, and Parallel Partitioning

Capability detection is explicit:

import numkong as nk

caps = nk.get_capabilities()
print({k: v for k, v in caps.items() if v})

The current implementation releases the GIL around the native dense metric calls and around the packed and symmetric matrix kernels. The repository also has threading tests for packed and symmetric row-range partitioning.

GEMM-like packed work and SYRK-like symmetric work should be documented differently:

import concurrent.futures
import numpy as np
import numkong as nk

left = np.random.randn(4096, 768).astype(np.float32)
right = np.random.randn(8192, 768).astype(np.float32)
packed = nk.dots_pack(right, dtype="float32")
out = nk.zeros((4096, 8192), dtype="float64")  # out must be pre-allocated with correct shape and dtype

def packed_chunk(start, end):
    nk.dots_packed(left, packed, out=out, start_row=start, end_row=end) # split left rows against one shared packed RHS

with concurrent.futures.ThreadPoolExecutor(max_workers=4) as pool:
    for start in range(0, 4096, 1024):
        pool.submit(packed_chunk, start, min(start + 1024, 4096))
import concurrent.futures
import numpy as np
import numkong as nk

vectors = np.random.randn(4096, 768).astype(np.float32)
out = nk.zeros((4096, 4096), dtype="float64")  # out must be pre-allocated with correct shape and dtype

def symmetric_chunk(start, end):
    nk.dots_symmetric(vectors, out=out, start_row=start, end_row=end) # split row windows of one square output

with concurrent.futures.ThreadPoolExecutor(max_workers=4) as pool:
    for start in range(0, 4096, 1024):
        pool.submit(symmetric_chunk, start, min(start + 1024, 4096))

OpenMP and other native schedulers still matter in lower layers. For Python, the intended user-facing story is external partitioning around the GIL-free kernels you actually use.

Addressing External Memory

NumKong implements the Python buffer protocol for zero-copy interop with NumPy, PyTorch, and other buffer-aware libraries. Two additional primitives cover pointer-level workflows: data_ptr reads the integer address out of any Tensor, and from_pointer() wraps any integer address back into one.

data_ptr returns the raw address, suitable for passing into ctypes, CUDA, or any FFI boundary. from_pointer(address, shape, dtype, *, strides=None, owner=None) creates a non-owning Tensor view. The optional owner keeps the source object alive for the lifetime of the view.

import numpy as np
import numkong as nk

# Round-trip through an integer address
matrix = nk.zeros((3, 4), dtype='float32')
address = matrix.data_ptr
matrix_view = nk.from_pointer(address, (3, 4), 'float32', owner=matrix)

# Wrap a NumPy array with zero copies
embeddings = np.random.randn(1024).astype(np.float32)
embeddings_view = nk.from_pointer(embeddings.ctypes.data, (1024,), 'float32', owner=embeddings)
nk.dot(embeddings, embeddings_view)  # same underlying data

PyTorch tensors already implement the buffer protocol, so most functions accept them directly. For explicit pointer-level control, or to go the other direction, the same primitives apply:

import torch

query = torch.randn(512)
nk.dot(query, query)  # buffer protocol, zero copy

# Explicit pointer wrap
query_view = nk.from_pointer(query.data_ptr(), tuple(query.shape), 'float32', owner=query)

# NumKong → PyTorch: 1D via buffer protocol, N-D via numpy bridge
flat = torch.frombuffer(memoryview(nk_tensor), dtype=torch.float32)
shaped = torch.as_tensor(np.asarray(nk_tensor))

CUDA unified memory, pinned buffers, and mmap'd files all work the same way — any CPU-accessible pointer is valid.

import ctypes, mmap

# CUDA unified memory (ensure CPU accessibility first)
cudart = ctypes.CDLL("libcudart.so")
unified_ptr = ctypes.c_void_p()
cudart.cudaMallocManaged(ctypes.byref(unified_ptr), 4096, 1)
cudart.cudaDeviceSynchronize()
unified = nk.from_pointer(unified_ptr.value, (1024,), 'float32')

# Memory-mapped file
with open("data.bin", "r+b") as f:
    mapping = mmap.mmap(f.fileno(), 0)
    mapped = nk.from_pointer(ctypes.addressof(
        ctypes.c_char.from_buffer(mapping)),
        (1024,), 'float32', owner=mapping)

NumKong: Mixed Precision for All

NumKong (previously SimSIMD) is a portable mixed-precision math library with over 2000 kernels for x86, Arm, RISC-V, and WASM. It covers numeric types from 6-bit floats to 64-bit complex numbers, hardened against in-house 118-bit extended-precision baselines. Built alongside the USearch vector-search engine, it provides wider accumulators to avoid the overflow and precision loss typical of naive same-type arithmetic.

NumKong banner

Latency, Throughput, & Numerical Stability

Most libraries return dot products in the same type as the input — Float16 × Float16 → Float16, Int8 × Int8 → Int8. This leads to quiet overflow: a 2048-dimensional i8 dot product can reach ±10 million, but i8 maxes out at 127. NumKong promotes to wider accumulators — Float16 → Float32, BFloat16 → Float32, Int8 → Int32, Float32 → Float64 — so results stay in range.

Single 2048-d dot product on Intel Sapphire Rapids, single-threaded. Each cell shows gso/s, mean relative error vs higher-precision reference. gso/s = Giga Scalar Operations per Second — a more suitable name than GFLOP/s when counting both integer and floating-point work. NumPy 2.4, PyTorch 2.10, JAX 0.9.

Input NumPy + OpenBLAS PyTorch + MKL JAX NumKong
░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░
f64 2.0 gso/s, 1e-15 err 0.6 gso/s, 1e-15 err 0.4 gso/s, 1e-14 err 5.8 gso/s, 1e-16 err
f32 1.5 gso/s, 2e-6 err 0.6 gso/s, 2e-6 err 0.4 gso/s, 5e-6 err 7.1 gso/s, 2e-7 err
bf16 0.5 gso/s, 1.9% err 0.5 gso/s, 1.9% err 9.7 gso/s, 1.8% err
f16 0.2 gso/s, 0.25% err 0.5 gso/s, 0.25% err 0.4 gso/s, 0.25% err 11.5 gso/s, 0.24% err
e5m2 0.7 gso/s, 4.6% err 0.5 gso/s, 4.6% err 7.1 gso/s, 0% err
i8 1.1 gso/s, overflow 0.5 gso/s, overflow 0.5 gso/s, overflow 14.8 gso/s, 0% err

A fair objection: PyTorch and JAX are designed for throughput, not single-call latency. They lower execution graphs through XLA or vendored BLAS libraries like Intel MKL and Nvidia cuBLAS. So here's the same comparison on a throughput-oriented workload — matrix multiplication:

Matrix multiplication (2048 × 2048) × (2048 × 2048) on Intel Sapphire Rapids, single-threaded. gso/s = Giga Scalar Operations per Second, same format. NumPy 2.4, PyTorch 2.10, JAX 0.9, same versions.

Input NumPy + OpenBLAS PyTorch + MKL JAX NumKong
░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░
f64 65.5 gso/s, 1e-15 err 68.2 gso/s, 1e-15 err ~14.3 gso/s, 1e-15 err 8.6 gso/s, 1e-16 err
f32 140 gso/s, 9e-7 err 145 gso/s, 1e-6 err ~60.5 gso/s, 1e-6 err 37.7 gso/s, 4e-7 err
bf16 851 gso/s, 1.8% err ~25.8 gso/s, 3.4% err 458 gso/s, 3.6% err
f16 0.3 gso/s, 0.25% err 140 gso/s, 0.37% err ~26.1 gso/s, 0.35% err 103 gso/s, 0.26% err
e5m2 0.4 gso/s, 4.6% err ~26.4 gso/s, 4.6% err 398 gso/s, 0% err
i8 0.4 gso/s, overflow 50.0 gso/s, overflow ~0.0 gso/s, overflow 1279 gso/s, 0% err

For f64, compensated "Dot2" summation reduces error by 10–50× compared to naive Float64 accumulation, depending on vector length. For f32, widening to Float64 gives 5–10× lower error. The library ships as a relatively small binary:

Package Size Parallelism & Memory Available For
PyTorch + MKL 705 MB Vector & Tile SIMD, OpenMP Threads, Hidden Allocs Python, C++, Java
JAX + jaxlib 357 MB Vector SIMD, XLA Threads, Hidden Allocs Python
NumPy + OpenBLAS 30 MB Vector SIMD, Built-in Threads, Hidden Allocs Python
mathjs 9 MB No SIMD, No Threads, Many Allocs JS
NumKong 5 MB Vector & Tile SIMD, Your Threads, Your Allocs 7 languages

Every kernel is validated against 118-bit extended-precision baselines with per-type ULP budgets across log-normal, uniform, and Cauchy input distributions. Tests check triangle inequality, Cauchy-Schwarz bounds, NaN propagation, overflow detection, and probability-simplex constraints for each ISA variant. Results are cross-validated against OpenBLAS, Intel MKL, and Apple Accelerate. A broader throughput comparison is maintained in NumWars.

Quick Start

Language Install Compatible with Guide
C / C++ CMake, headers, & prebuilt Linux, macOS, Windows, Android include/README.md
Python pip install Linux, macOS, Windows python/README.md
Rust cargo add Linux, macOS, Windows rust/README.md
JS npm install & import Node.js, Bun, Deno & browsers javascript/README.md
Swift Swift Package Manager macOS, iOS, tvOS, watchOS swift/README.md
Go go get Linux, macOS, Windows via cGo golang/README.md

What's Inside

NumKong covers 17 numeric types — from 6-bit floats to 64-bit complex numbers — across dozens of operations and 30+ SIMD backends, with hardware-aware defaults: Arm prioritizes f16, x86 prioritizes bf16.

Operations × Backend

Backend dot dots spatial spatials set sets cast reduce trig maxsim mesh
x86
Haswell
Skylake · · ·
Ice Lake · ·
Genoa · · · · ·
Sapphire · · · · · · · ·
Sapphire AMX · · · · · · · ·
Diamond · · · · · · ·
Alder Lake · · · · ·
Sierra Forest · · · · · ·
Turin · · · · · · · · · · ·
Arm
NEON ·
NEON Half · · · · ·
NEON FHM · · · · · · ·
NEON BF16 · · · · ·
NEON SDot · · · · ·
NEON FP8 · · · · · · ·
SVE · · · · · · · ·
SVE Half · · · · · · · · ·
SVE BF16 · · · · · · · · ·
SVE SDot · · · · · · · · · · ·
SVE2 · · · · · · · · · · ·
SME · · · · · · · ·
SME F64 · · · · · · · · ·
SME BI32 · · · · · · · · ·
Other
Power VSX · · · · ·
LoongArch LASX · · · · ·
RVV · ·
RVV Half · · · · · · · · ·
RVV BF16 · · · · · · · · ·
RVV BB · · · · · · · · ·
WASM V128 ·
Serial

Numeric Types × Backend

Backend f64 f32 bf16 f16 e5m2 e4m3 e3m2 e2m3 i8 u8 i4 u4 u1 f64c f32c bf16c f16c
x86
Haswell
Skylake · ·
Ice Lake · · · · · · · ·
Genoa · · · · · · · · · · · · ·
Sapphire · · · · · · · · · · ·
Sapphire AMX · · · · · · · ·
Diamond · · · · · · · · · · · · · ·
Alder Lake · · · · · · · · · ·
Sierra Forest · · · · · · · · · · · · ·
Turin · · · · · · · · · · · · · · ·
Arm
NEON · · · · · ·
NEON Half · · · · · · · · · · · · ·
NEON FHM · · · · · · · · · · · · ·
NEON BF16 · · · · · · · · · · · · ·
NEON SDot · · · · · · · ·
NEON FP8 · · · · · · · · · · · · ·
SVE · · · · · · · ·
SVE Half · · · · · · · · · · · · · · ·
SVE BF16 · · · · · · · · · · · · · · · ·
SVE SDot · · · · · · · · · · · · · · · · ·
SVE2 · · · · · · · · · · · · · · ·
SME · · · · · ·
SME F64 · · · · · · · · · · · · ·
SME BI32 · · · · · · · · · · · · · · ·
Other
Power VSX · · · · · · · · · ·
LoongArch LASX · · · · · · · · · ·
RVV · ·
RVV Half · · · · · · · · · · · · · ·
RVV BF16 · · · · · · · · · · · · · ·
RVV BB · · · · · · · · · · · · · · · ·
WASM V128 · · · ·

Language Bindings

Operation C/C++ Python Rust JavaScript Swift Go
dot
dots
spatial
spatials
set
sets ·
cast · ·
reduce · · ·
trig · · ·
geospatial ·
maxsim ·
mesh · · ·

Not every combination is implemented — only the ones that unlock real performance gains. The icelake level doesn't get a dot_bf16 variant, for example, and falls through to dot_bf16_skylake. Every operation has a serial fallback, but even types no CPU supports today get optimized via lookup tables and bit-twiddling hacks rather than scalar loops. For details on compile-time and run-time dispatch, see the contributor guide.

Design Decisions

  • Avoid loop unrolling and scalar tails.
  • Don't manage threads and be compatible with any parallelism models.
  • Don't manage memory and be compatible with arbitrary allocators & alignment.
  • Don't constrain ourselves to traditional BLAS-like Matrix Multiplication APIs.
  • Don't throw exceptions and pass values by pointers.
  • Prefer saturated arithmetic and avoid overflows, where needed.
  • Cover most modern CPUs with flexible dispatch and wait for them to converge with GPUs.

The rest of this document unpacks the functionality and the logic behind the design decisions.

Auto-Vectorization & Loop Unrolling

Most "optimized SIMD code" is a 2–4x unrolled data-parallel for-loop over f32 arrays with a serial scalar tail for the last few elements:

float boring_dot_product_f32(float const *a, float const *b, size_t n) {
    __m256 sum0 = _mm256_setzero_ps(), sum1 = _mm256_setzero_ps();
    size_t i = 0;
    for (; i + 16 <= n; i += 16) {
        sum0 = _mm256_fmadd_ps(_mm256_loadu_ps(a + i), _mm256_loadu_ps(b + i), sum0);
        sum1 = _mm256_fmadd_ps(_mm256_loadu_ps(a + i + 8), _mm256_loadu_ps(b + i + 8), sum1);
    }
    float result = _mm256_reduce_add_ps(_mm256_add_ps(sum0, sum1));
    for (; i < n; i++) result += a[i] * b[i]; // serial tail
    return result;
}

This kind of unrolling has been a common request for NumKong, but the library avoids it by design.

Modern CPUs already "unroll" in hardware. Out-of-order engines with reorder buffers of 320–630 entries (Zen 4: 320, Golden Cove: 512, Apple Firestorm: ~630) can keep a dozen of loop iterations in-flight simultaneously. The physical register file is much larger than the ISA-visible architectural registers — Skylake has ~180 physical integer registers behind 16 architectural GPRs, and ~168 physical vector registers behind 32 architectural ZMMs. The register renaming unit maps the same zmm0 in iteration N and iteration N+1 to different physical registers, extracting cross-iteration parallelism automatically — exactly the benefit that source-level unrolling was historically supposed to provide.

Unrolling works against NumKong's goals. Every unrolled copy is a distinct instruction in the binary. With 1,500+ kernel endpoints across 30+ backends, even 2x unrolling would inflate the .text section by megabytes — directly impacting install size for Python wheels, NPM packages, and Rust crates. Larger loop bodies also increase instruction-cache and micro-op-cache pressure; Agner Fog also recommends:

"avoid loop unrolling where possible in order to economize the use of the micro-op cache".

A loop that spills out of the uop cache falls back to the slower legacy decoder, making the "optimized" version slower than the compact original. For a header-only library, unrolling also compounds compilation time: register allocation is NP-hard (reducible to graph coloring), and unrolling multiplies the number of simultaneously live ranges the allocator must consider, increasing compile time super-linearly across every translation unit that includes the headers.

Serial tails are a correctness hazard. The leftover elements after the last full SIMD chunk run through a scalar loop that silently drops FMA fusion, compensated accumulation, and saturating arithmetic — producing results with different numerical properties than the SIMD body. NumKong often uses masked loads instead (_mm512_maskz_loadu_ps on AVX-512, predicated svld1_f32 on SVE), processing every element through the same arithmetic path regardless of alignment. It's not exactly orthogonal to loop-unrolling, but makes a different kernel layout more compatible.

The gains come from elsewhere. On Intel Sapphire Rapids, NumKong was benchmarked against auto-vectorized code compiled with GCC 12. GCC handles single-precision float well, but struggles with _Float16 and other mixed-precision paths:

Kind GCC 12 f32 GCC 12 f16 NumKong f16 f16 improvement
Inner Product 3,810 K/s 192 K/s 5,990 K/s 31 x
Cosine Distance 3,280 K/s 336 K/s 6,880 K/s 20 x
Euclidean Distance ² 4,620 K/s 147 K/s 5,320 K/s 36 x
Jensen-Shannon Divergence 1,180 K/s 18 K/s 2,140 K/s 118 x

NumKong's f16 kernels are faster than GCC's f32 output — not because of unrolling, but because they use F16C conversion instructions, widening FMA pipelines, and compensated accumulation that compilers do not synthesize from a plain for loop. The same story repeats for bf16, e4m3, i8, and i4: these types require algorithmic transformations — lookup tables, algebraic domain shifts, asymmetric VNNI tricks — that live beyond the reach of auto-vectorization.

Parallelism & Multi-Threading

BLAS libraries traditionally manage their own thread pools. OpenBLAS spawns threads controlled by OPENBLAS_NUM_THREADS, Intel MKL forks its own OpenMP runtime via MKL_NUM_THREADS, and Apple Accelerate delegates to GCD (Grand Central Dispatch). This works in isolation — but the moment your application adds its own parallelism (joblib, std::thread, Tokio, GCD, OpenMP), you get thread oversubscription: MKL spawns 8 threads inside each of your 8 joblib workers, producing 64 threads on 8 cores, thrashing caches and stalling on context switches. The Python ecosystem has built entire libraries just to work around this problem, and scikit-learn's documentation devotes a full page to managing the interaction between joblib parallelism and BLAS thread pools.

NumKong takes a different position: the numerics layer should not own threads. Modern hardware makes the "spawn N threads and split evenly" model increasingly untenable:

  • Server-grade CPUs have hundreds of cores split across sockets, chiplets, and tiles, resulting in dozens of physical NUMA domains with vastly different memory access latencies. A thread pool that ignores NUMA topology will spend more time on remote memory stalls than on arithmetic.
  • Consumer-grade CPUs pack heterogeneous Quality-of-Service core types on the same die — Intel P-cores and E-cores run at different frequencies and sometimes support different ISA extensions. A naive work-split gives equal chunks to fast and slow cores, and the whole task stalls waiting for the slowest partition.
  • Real-time operating systems in robotics and edge AI cannot afford to yield the main thread to a BLAS-managed pool. These systems need deterministic latency, not maximum throughput.

Instead, NumKong exposes row-range parameters that let the caller partition work across any threading model. For GEMM-shaped dots_packed, this is straightforward — pass a slice of A's rows and the full packed B to compute the corresponding slice of C. For SYRK-shaped dots_symmetric, explicit start_row / end_row parameters control which rows of the symmetric output matrix a given thread computes. The GIL (Global Interpreter Lock) is released around every kernel call, making NumKong compatible with concurrent.futures, multiprocessing, or any other parallelism model:

import concurrent.futures, numkong as nk, numpy as np

vectors, num_threads = np.random.randn(1000, 768).astype(np.float32), 4
output = nk.zeros((1000, 1000), dtype="float32")

def compute_slice(t):
    start = t * (len(vectors) // num_threads)
    end = start + len(vectors) // num_threads if t < num_threads - 1 else len(vectors)
    nk.dots_symmetric(vectors, out=output, start_row=start, end_row=end)

with concurrent.futures.ThreadPoolExecutor(max_workers=num_threads) as pool:
    list(pool.map(compute_slice, range(num_threads)))

For users who want a ready-made low-latency thread pool without the oversubscription baggage of OpenMP, we built ForkUnion — a minimalist fork-join library for C, C++, and Rust that avoids mutexes, CAS atomics, and dynamic allocations on the critical path, with optional NUMA pinning on Linux.

Memory Allocation & Management

BLAS libraries typically allocate internal buffers during GEMM — OpenBLAS packs matrices into L2/L3-sized panels via per-thread buffer pools backed by mmap or shmget. This hidden allocation has caused real problems: 14 lock/unlock pairs per small GEMM call throttling 12-thread scaling to 2x, silently incorrect results from thread-unsafe allocation in np.dot, and deadlocks after fork() due to mutex state not being reset in child processes. The BLASFEO library was created specifically for embedded model-predictive control where malloc during computation is unacceptable.

NumKong never allocates memory. Following the same philosophy as Intel MKL's packed GEMM API (cblas_sgemm_pack_get_sizecblas_sgemm_packcblas_sgemm_compute), NumKong exposes typed three-phase interfaces — nk_dots_packed_size_*nk_dots_pack_*nk_dots_packed_* — where the caller owns the buffer and NumKong only fills it.

The reason GEMM libraries repack matrices at all is that every hardware target has a different preferred layout — Intel AMX expects B in a VNNI-interleaved tile format (pairs of BFloat16 values packed into DWORDs across the K dimension), while Arm SME wants column vectors for its FMOPA outer-product instructions. Since GEMM is $O(N^3)$ and repacking is $O(N^2)$, the cost is asymptotically free — but the allocation and locking overhead is not.

NumKong's nk_dots_pack_* family performs five transformations beyond simple reordering:

  • Type pre-conversion — mini-floats (E4M3, BFloat16, etc.) are upcast to the compute type once during packing, not on every GEMM call. This amortizes the conversion cost across all rows of A that will be multiplied against the packed B.
  • SIMD depth padding — rows are zero-padded to the SIMD vector width (16 for AVX-512 Float32, 64 for AVX-512 Int8), allowing inner loops to load without boundary checks.
  • Per-column norm precomputation — squared norms ($|b_j|^2$) are computed and stored alongside the packed data, so distance kernels (angulars_packed, euclideans_packed) can reuse them without a separate pass.
  • ISA-specific tile layout — AMX packing interleaves BFloat16 pairs into 16×32 tiles matching TDPBF16PS expectations; SME packing arranges vectors at SVE granularity for FMOPA outer products; generic backends use simple column-major with depth padding.
  • Power-of-2 stride breaking — when the padded row stride is a power of 2, one extra SIMD step of padding is added. Power-of-2 strides cause cache set aliasing where consecutive rows map to the same cache sets, effectively shrinking usable L1/L2 capacity — stride-256 traversals can be ~10x slower than stride-257.
import numkong as nk, numpy as np

right_matrix = np.random.randn(1000, 768).astype(np.float16)
right_packed = nk.dots_pack(right_matrix, dtype=nk.float16)                        # pack once
for query_batch in stream: results = nk.dots_packed(query_batch, right_packed)    # reuse many times

Why Not Just GEMM? The Evolution of Matrix Multiplication APIs

The classic BLAS GEMM computes $C = \alpha A B + \beta C$ for Float32/Float64 matrices. It covers many use cases, but LLM inference, vector search, and quantum simulation expose three ways in which the traditional interface falls short.

Frozen weights justify separating packing from computation. During LLM inference, a very large share of GEMM calls use a static weight matrix — weights don't change after loading. This makes offline repacking a one-time cost amortized over the entire serving lifetime: NVIDIA's TurboMind explicitly splits GEMM into offline weight packing (hardware-aware layout conversion) and online mixed-precision computation, and Intel MKL's packed GEMM API exposes the same two-phase pattern. NumKong's nk_dots_pack_*nk_dots_packed_* path follows this philosophy — pack the weight matrix once, reuse it across all queries.

Mixed precision demands more than an epilogue addition. Modern transformer layers operate in a precision sandwich: weights stored in BFloat16/Float8, GEMM accumulated in Float32, output downcast back to BFloat16 for the next layer. Between GEMM calls, LayerNorm or RMSNorm re-normalizes hidden states, so the next layer is often much closer to an angular or normalized similarity computation than to a plain raw dot product. nGPT takes this to its logical conclusion: all vectors live on the unit hypersphere, and every matrix-vector product is a pure angular distance. This means many "GEMM" workloads in production are semantically closer to many-to-many angular distance computation — which is exactly what NumKong's angulars_packed and euclideans_packed kernels compute directly, fusing norm handling and type conversion into a single pass.

The GEMM-for-distances trick has real costs. A common shortcut in vector search is to decompose pairwise Euclidean distance as $|a - b|^2 = |a|^2 + |b|^2 - 2 \langle a, b \rangle$, precompute norms, and call sgemm for the inner-product matrix. Both FAISS and scikit-learn use this approach — and both document its limitations. Scikit-learn's docs warn of "catastrophic cancellation" in the subtraction; this has caused real bugs with ~37% error on near-identical Float32 vectors. The $O(N^2)$ postprocessing pass (adding norms, square roots, divisions) is not free either — NVIDIA's RAFT measured a 20–25% speedup from fusing it into the GEMM epilogue. Even FAISS switches to direct SIMD when the query count drops below 20. The standard BLAS interface was never designed for sub-byte types either — no vendor supports Int4, and sub-byte types cannot even be strided without bit-level repacking.

Some operations need more than GEMM + postprocessing. NumKong implements several GEMM-shaped operations where the "epilogue" is too complex for a simple addition:

  • Bilinear forms ($a^T C b$) in quantum computing compute a scalar expectation value — the naive approach materializes an $N$-dimensional intermediate vector $Cb$, but NumKong's typed nk_bilinear_* kernels stream through rows of $C$ with nested compensated dot products, never allocating beyond registers. For complex-valued quantum states, where the intermediate would be a 2N-element complex vector, the savings double.
  • MaxSim scoring for ColBERT-style late-interaction retrieval computes $\sum_i \min_j \text{angular}(q_i, d_j)$ — a sum-of-min-distances across token pairs. A GEMM would produce the full $M \times N$ similarity matrix, but NumKong's typed nk_maxsim_packed_* kernels fuse a coarse Int8-quantized screening with full-precision angular refinement on winning pairs only, packing both query and document matrices to use all 4 SME tiles as accumulators. PLAID and maxsim-cpu have independently shown that dedicated MaxSim kernels can outperform the GEMM decomposition by 5–10x.

NumKong treats these as first-class operations — dots_packed, euclideans_packed, angulars_packed, typed nk_bilinear_* kernels, and typed nk_maxsim_packed_* kernels — rather than decomposing everything into GEMM + postprocessing.

Precision by Design: Saturation, Rounding, & Float6 Over Float8

Floating-point arithmetic on computers is not associative: $(a + b) + c \neq a + (b + c)$ in general, and upcasting to wider types is not always sufficient. NumKong makes operation-specific decisions about where to spend precision and where to economize, rather than applying one rule uniformly.

Saturation depends on the operation. A reduction over a 4 GB array of i8 values contains ~4 billion elements — but Int32 wrapping overflow occurs after just ~17 million Int8 summands ($127 \times 16.9\text{M} > 2^{31}$). Reductions in NumKong use saturating arithmetic because the input can be arbitrarily long. Matrix multiplications don't need saturation because GEMM depth rarely exceeds tens of thousands — well within Int32 range. x86 provides no saturating 32-bit SIMD add (only byte/word variants), so NumKong implements saturation via overflow detection with XOR-based unsigned comparison on platforms that lack native support.

Square roots & special math ops are platform-specific. Angular distance requires $1/\sqrt{|a|^2 \cdot |b|^2}$ — but the cost of computing this normalization varies dramatically across hardware. x86 VSQRTPS takes ~12 cycles, followed by VDIVPS at ~11 cycles — totalling ~23 cycles for a precise 1/sqrt(x). The VRSQRT14PS alternative starts with a 14-bit estimate in ~4 cycles, then one Newton-Raphson iteration ($y = y \cdot (1.5 - 0.5 x y^2)$, ~4 more cycles) reaches full Float32 precision — roughly 3x faster. ARM's FRSQRTE provides only ~8 bits, requiring two Newton-Raphson iterations to match. NumKong selects the iteration count per platform so the final ULP bound is consistent across ISAs, rather than exposing different precision to different users.

E2M3 and E3M2 can outperform E4M3 and E5M2. 6-bit MX formats can be scaled to exact integers, enabling integer accumulation that avoids E5M2's catastrophic cancellation risk. This works because E2M3's narrower exponent range means every representable value maps to an integer after a fixed shift — no rounding, no cancellation. See Mini-Floats for a worked example.

Every such decision — saturation thresholds, Newton-Raphson iteration counts, integer vs floating-point paths — is documented per operation and per type in the module-specific READMEs.

Calling Convention & Error Handling

NumKong never throws exceptions, never sets errno, and never calls setjmp/longjmpexceptions bloat call sites with unwind tables and are invisible to C, Python, Rust, Swift, Go, and JavaScript FFI; errno is thread-local state whose storage model varies across C runtimes. Instead, every function takes inputs as const pointers, writes outputs through caller-provided pointers, and returns void:

void nk_dot_f32(nk_f32_t const *a, nk_f32_t const *b, nk_size_t n, nk_f64_t *result);
void nk_dot_bf16(nk_bf16_t const *a, nk_bf16_t const *b, nk_size_t n, nk_f32_t *result);

Pointers eliminate implicit casts for types with platform-dependent storage — this is why they matter for half-precision types. nk_f16_t and nk_bf16_t resolve to native __fp16 / __bf16 when available but fall back to unsigned short otherwise — if passed by value, the compiler would silently apply integer promotion instead of preserving the bit pattern. Passing by pointer keeps the representation opaque: kernels read raw and convert explicitly when needed, so the same binary works regardless of whether the compiler understands _Float16.

The only place that requires error signaling is dynamic dispatch — looking up the best kernel for the current CPU at runtime. When no kernel matches, the dispatcher sets the capabilities mask to zero and fills the function pointer with a family-specific error stub such as nk_error_dense_ from c/dispatch.h and c/numkong.c that writes 0xFF into the output — NaN for floats, −1 for signed integers, TYPE_MAX for unsigned.

Compile-Time and Run-Time Dispatch

NumKong provides two dispatch mechanisms. Compile-time dispatch selects the fastest kernel supported by the target platform at build time — thinner binaries, no indirection overhead, but requires knowing your deployment hardware. Run-time dispatch compiles every supported kernel into the binary and picks the best one on the target machine via nk_capabilities() — one pointer indirection per call, but a single binary runs everywhere. The run-time path is common in DBMS products (ClickHouse), web browsers (Chromium), and other upstream projects that ship to heterogeneous fleets.

All kernel names follow the pattern nk_{operation}_{type}_{backend}. If you need to resolve the best kernel manually, use nk_find_kernel_punned with a nk_kernel_kind_t, nk_dtype_t, and a viable capabilities mask:

nk_metric_dense_punned_t angular = 0;
nk_capability_t used = nk_cap_serial_k;
nk_find_kernel_punned(
    nk_kernel_angular_k, nk_f32_k,            // what functionality? for which input type?
    nk_capabilities(),                        // which capabilities are viable?
    (nk_kernel_punned_t *)&angular, &used);   // the kernel found and capabilties used!

The first call to nk_capabilities() initializes the dispatch table; all subsequent calls are lock-free.

Numeric Types

Float64 & Float32: IEEE Precision

Float64 — NumKong uses compensated summation that tracks numerical errors separately. On serial paths, we use Neumaier's algorithm (1974), an improvement over Kahan-Babuška that correctly handles cases where added terms are larger than the running sum, achieving $O(1)$ error growth instead of $O(n)$. On SIMD paths with FMA support, we implement the Dot2 algorithm (Ogita-Rump-Oishi, 2005), maintaining separate error compensators for both multiplication and accumulation via TwoProd and TwoSum operations. The accuracy differences are visible in the benchmark tables above — compensated Float64 suits scientific computing where numerical stability matters more than raw speed.

Float32 — SIMD implementations load Float32 values, upcast to Float64 for full-precision multiplication and accumulation, then downcast only during finalization. This avoids catastrophic cancellation at minimal cost since modern CPUs have dedicated Float64 vector units operating at nearly the same throughput as Float32. The same compensated accumulation strategy applies to Mahalanobis distance, bilinear forms, and KL/JS divergences.

// Dot2 TwoProd: Capture multiplication rounding error
h = a * b;
r = fma(a, b, -h);  // Extracts rounding error

// Dot2 TwoSum: Capture addition rounding error
t = sum + product;
e = (sum - t) + product;  // Compensator term

BFloat16 & Float16: Half Precision

BFloat16 — not an IEEE 754 standard type, but widely adopted for AI workloads. BFloat16 shares Float32's 8-bit exponent but truncates the mantissa to 7 bits, prioritizing dynamic range over precision (±3.4×10³⁸ with coarser granularity). On old CPUs, upcasting BFloat16 to Float32 requires just an unpack and left-shift by 16 bits (essentially free); on newer CPUs, both Arm and x86 provide widening mixed-precision dot products via DPBF16PS (AVX-512 on Genoa/Sapphire Rapids) and BFDOT (NEON on ARMv8.6-A Graviton 3+). NumKong's Float8 types (E4M3/E5M2) upcast to BFloat16 before using DPBF16PS, creating a three-tier precision hierarchy: Float8 for storage, BFloat16 for compute, Float32 for accumulation.

Float16 — IEEE 754 half-precision with 1 sign bit, 5 exponent bits (bias=15), and 10 mantissa bits, giving a range of ±65504. Float16 prioritizes precision over range (10 vs 7 mantissa bits), making it better suited for values near zero and gradients during training. On x86, older CPUs use F16C extensions (Ivy Bridge+) for fast Float16 → Float32 conversion; Sapphire Rapids+ adds native AVX-512-FP16 with dedicated Float16 arithmetic. On Arm, ARMv8.4-A adds FMLAL/FMLAL2 instructions for fused Float16 → Float32 widening multiply-accumulate, reducing the total latency from 7 cycles to 4 cycles and achieving 20–48% speedup over the separate convert-then-FMA path.

Platform BFloat16 Path Elem/Op Float16 Path Elem/Op
x86
Sapphire Rapids (2023) ↓ Genoa 32 ↓ Skylake 16
Genoa (2022) VDPBF16PS widening dot 32 ↓ Skylake 16
Skylake (2015) SLLI + VFMADD 16 VCVTPH2PS + VFMADD 16
Haswell (2013) SLLI + VFMADD 8 VCVTPH2PS + VFMADD 8
Arm
Graviton 3 (2021) SVBFDOT widening dot 4–32 SVCVTSVFMLA 4–32
Apple M2+ (2022) BFDOT widening dot 8 ↓ FP16FML 8
Apple M1 (2020) ↓ NEON 8 FMLAL widening FMA 8
Graviton 2 (2019) ↓ NEON 8 FCVTL + FMLA 4
Graviton 1 (2018) SHLL + FMLA 8 bit-manip → FMLA 8

BFloat16 shares Float32's 8-bit exponent, so upcasting is a 16-bit left shift (SLLI on x86, SHLL on Arm) that zero-pads the truncated mantissa — essentially free. Float16 has a different exponent width (5 vs 8 bits), requiring a dedicated convert: VCVTPH2PS (x86 F16C) or FCVTL (Arm NEON). Widening dot products (VDPBF16PS, BFDOT, FMLAL) fuse the conversion and multiply-accumulate into one instruction. Sapphire Rapids has native VFMADDPH for Float16 arithmetic, but NumKong does not use it for general dot products — Float16 accumulation loses precision. It is only used for mini-float (E2M3/E3M2) paths where periodic flush-to-Float32 windows keep error bounded.

Mini-Floats: E4M3, E5M2, E3M2, & E2M3

Format Bits Range NumKong Promotion Rules Support in GPUs
E5M2FN 8 ±57344 BFloat16 → Float32 H100+, MI300+
E4M3FN 8 ±448 BFloat16 → Float32 H100+, MI300+
E3M2FN 6 → 8 ±28 BFloat16 & Float16 → Float32,
Int16 → Int32
only block-scaled
E2M3FN 6 → 8 ±7.5 BFloat16 & Float16 → Float32,
Int8 → Int32
only block-scaled
Block-scaled NVFP4 4 ±6 B200+
Block-scaled MXFP4 / E2M1 4 ±6 B200+, MI325+

Block scaling. NumKong does not implement block-scaled variants (MXFP4, NVFP4, or block-scaled E3M2/E2M3). Block scaling couples elements through a shared exponent per block, introducing structural bias into a fundamentally uniform operation. NumKong treats each element independently; block-scaled inputs should be dequantized before processing.

FNUZ variants. AMD MI300 (CDNA 3) uses FNUZ encoding (negative-zero-is-NaN) rather than the OCP standard. MI350+ and NVIDIA H100/B200 both use OCP-standard E4M3FN/E5M2FN. NumKong follows the OCP convention; FNUZ inputs require conversion before processing.

8-bit floats (E4M3 & E5M2) follow the OCP FP8 standard. E4M3FN (no infinities, NaN only) is preferred for training where precision near zero matters; E5M2FN (with infinities) provides wider dynamic range for inference. On x86 Genoa/Sapphire Rapids, E4M3/E5M2 values upcast to BFloat16 via lookup tables, then use native DPBF16PS for 2-per-lane dot products accumulating to Float32. On Arm Graviton 3+, the same BFloat16 upcast happens via NEON table lookups, then BFDOT instructions complete the computation.

6-bit floats (E3M2 & E2M3) follow the OCP MX v1.0 standard. Their smaller range allows scaling to exact integers that fit in i8/i16, enabling integer VPDPBUSD/SDOT accumulation instead of the floating-point pipeline. Float16 can also serve as an accumulator, accurately representing ~50 products of E3M2FN pairs or ~20 products of E2M3FN pairs before overflow. On Arm, NEON FHM extensions bring widening FMLAL dot-products for Float16 — both faster and more widely available than BFDOT for BFloat16.

E4M3 and E5M2 cannot use the integer path. E4M3 scaled by 16 reaches 7,680 — too large for Int8, barely fitting Int16 with a 128-entry table. E5M2's range (±57,344) makes the scaled product exceed Int32 entirely. Without the integer path, E5M2 falls back to Float32 accumulation — where its 2-bit mantissa (only 4 values per binade) creates a catastrophic cancellation risk that E2M3's integer path avoids completely:

i = 0 i = 1 i = 2 i = 3 i = 4 i = 5 i = 6
aᵢ 0.00122 20480 −0.00122 1.5 −3072 −640 0.00146
bᵢ −40 320 −1280 −7.63e⁻⁵ 0.000427 10240 −4.58e⁻⁵
aᵢ·bᵢ −0.04883 6553600 1.5625 −0.000114 −1.3125 −6553600 ≈ 0

Why Float32 accumulation fails here. The accurate sum of these 7 products is ≈ 0.201. A vfmaq_f32 call accumulates 4 lanes at a time; the first batch already carries values around ±6.5 M. At that magnitude the Float32 ULP is 0.5 — so the small meaningful terms (−0.049, 1.563, −1.313, −0.0001) are all below one ULP and get absorbed during lane reduction. The large terms then cancel exactly to zero, and the information is gone. Final Float32 result: 0.0 instead of 0.201.

Int8 & Int4: Integer Types

Both signed and unsigned 8-bit and 4-bit integers are supported with Int32 accumulation to prevent overflow. A notable optimization is the VNNI algebraic transform: on Ice Lake+ with AVX-512 VNNI, the native DPBUSD instruction is asymmetric (unsigned × signed → signed), but NumKong uses it for both Int8×Int8 and UInt8×UInt8. For signed Int8×Int8, we convert the signed operand to unsigned via XOR with 0x80, compute DPBUSD(a⊕0x80, b) = (a+128)×b, then subtract a correction term 128×sum(b) to recover the true result. For unsigned UInt8×UInt8, we XOR the second operand to make it signed, compute DPBUSD(a, b⊕0x80) = a×(b-128), then add correction 128×sum(a) via the fast SAD instruction.

Int4 values pack two nibbles per byte, requiring bitmask extraction: low nibbles (byte & 0x0F) and high nibbles (byte >> 4). For signed Int4, the transformation (nibble ⊕ 8) - 8 maps the unsigned range [0,15] to signed range [−8,7]. Separate accumulators for low and high nibbles avoid expensive nibble-interleaving and allow SIMD lanes to work in parallel.

// Asymmetric transform for i8×i8 using DPBUSD (unsigned×signed)
a_unsigned = a XOR 0x80;           // Convert signed→unsigned
result = DPBUSD(a_unsigned, b);    // Computes (a+128)×b
correction = 128 * sum(b);         // Parallel on different port
final = result - correction;       // True a×b value

Binary: Packed Bits

The u1x8 type packs 8 binary values per byte, enabling Hamming distance and Jaccard similarity via population-count instructions. On x86, VPOPCNTDQ (Ice Lake+) counts set bits in 512-bit registers directly; on Arm, CNT (NEON) operates on 8-bit lanes with a horizontal add. Results accumulate into u32 — sufficient for vectors up to 4 billion bits. Binary representations are the most compact option for locality-sensitive hashing and binary neural network inference.

Complex Types

NumKong supports four complex types — f16c, bf16c, f32c, and f64c — stored as interleaved real/imaginary pairs. Complex types are essential in quantum simulation (state vectors, density matrices), signal processing (FFT coefficients, filter design), and electromagnetic modeling. The dot operation computes the unconjugated dot product $\sum a_k b_k$, while vdot computes the conjugated inner product $\sum \bar{a}_k b_k$ standard in physics and signal processing.

For complex dot products, NumKong defers sign flips until after the accumulation loop: instead of using separate FMA and FMS (fused multiply-subtract) instructions for the real component, we compute $a_r b_r + a_i b_i$ treating all products as positive, then apply a single bitwise XOR with 0x80000000 to flip the sign bits. This avoids execution port contention between FMA and FMS, letting dual FMA units stay occupied.

for (...) { // Complex multiply optimization: XOR sign flip after the loop
    sum_real = fma(a, b, sum_real);   // No sign flip in loop
    sum_imag = fma(a, b_swapped, sum_imag);
}
sum_real = xor(sum_real, 0x80000000);  // Single XOR after loop

Reading Materials

Beyond the READMEs in this repository, there are several standalone articles covering different evolution steps and features of this library.

License

Feel free to use the project under Apache 2.0 or the Three-clause BSD license at your preference.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

numkong-7.2.2.tar.gz (1.1 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

numkong-7.2.2-cp314-cp314t-win_arm64.whl (495.4 kB view details)

Uploaded CPython 3.14tWindows ARM64

numkong-7.2.2-cp314-cp314t-win_amd64.whl (573.2 kB view details)

Uploaded CPython 3.14tWindows x86-64

numkong-7.2.2-cp314-cp314t-musllinux_1_2_s390x.whl (2.9 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ s390x

numkong-7.2.2-cp314-cp314t-musllinux_1_2_ppc64le.whl (3.3 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ppc64le

numkong-7.2.2-cp314-cp314t-musllinux_1_2_i686.whl (2.9 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ i686

numkong-7.2.2-cp314-cp314t-musllinux_1_2_aarch64.whl (5.6 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

numkong-7.2.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl (3.2 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ s390xmanylinux: glibc 2.28+ s390x

numkong-7.2.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl (3.3 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ppc64lemanylinux: glibc 2.28+ ppc64le

numkong-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (5.6 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

numkong-7.2.2-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl (2.7 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ i686manylinux: glibc 2.5+ i686

numkong-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

numkong-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl (752.5 kB view details)

Uploaded CPython 3.14tmacOS 10.15+ x86-64

numkong-7.2.2-cp314-cp314-win_arm64.whl (493.9 kB view details)

Uploaded CPython 3.14Windows ARM64

numkong-7.2.2-cp314-cp314-win_amd64.whl (570.4 kB view details)

Uploaded CPython 3.14Windows x86-64

numkong-7.2.2-cp314-cp314-musllinux_1_2_s390x.whl (2.9 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ s390x

numkong-7.2.2-cp314-cp314-musllinux_1_2_ppc64le.whl (3.2 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ ppc64le

numkong-7.2.2-cp314-cp314-musllinux_1_2_i686.whl (2.9 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ i686

numkong-7.2.2-cp314-cp314-musllinux_1_2_aarch64.whl (5.5 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ ARM64

numkong-7.2.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl (3.2 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ s390xmanylinux: glibc 2.28+ s390x

numkong-7.2.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl (3.3 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ppc64lemanylinux: glibc 2.28+ ppc64le

numkong-7.2.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (5.6 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

numkong-7.2.2-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl (2.7 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ i686manylinux: glibc 2.5+ i686

numkong-7.2.2-cp314-cp314-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

numkong-7.2.2-cp314-cp314-macosx_10_15_x86_64.whl (750.0 kB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

numkong-7.2.2-cp313-cp313t-win_arm64.whl (472.5 kB view details)

Uploaded CPython 3.13tWindows ARM64

numkong-7.2.2-cp313-cp313t-win_amd64.whl (553.7 kB view details)

Uploaded CPython 3.13tWindows x86-64

numkong-7.2.2-cp313-cp313t-musllinux_1_2_s390x.whl (2.9 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ s390x

numkong-7.2.2-cp313-cp313t-musllinux_1_2_ppc64le.whl (3.3 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ ppc64le

numkong-7.2.2-cp313-cp313t-musllinux_1_2_i686.whl (2.9 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ i686

numkong-7.2.2-cp313-cp313t-musllinux_1_2_aarch64.whl (5.6 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ ARM64

numkong-7.2.2-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl (3.2 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ s390xmanylinux: glibc 2.28+ s390x

numkong-7.2.2-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl (3.3 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ ppc64lemanylinux: glibc 2.28+ ppc64le

numkong-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (5.6 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

numkong-7.2.2-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl (2.7 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.28+ i686manylinux: glibc 2.5+ i686

numkong-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

numkong-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl (752.3 kB view details)

Uploaded CPython 3.13tmacOS 10.13+ x86-64

numkong-7.2.2-cp313-cp313-win_arm64.whl (471.7 kB view details)

Uploaded CPython 3.13Windows ARM64

numkong-7.2.2-cp313-cp313-win_amd64.whl (551.6 kB view details)

Uploaded CPython 3.13Windows x86-64

numkong-7.2.2-cp313-cp313-musllinux_1_2_s390x.whl (2.9 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ s390x

numkong-7.2.2-cp313-cp313-musllinux_1_2_ppc64le.whl (3.2 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ppc64le

numkong-7.2.2-cp313-cp313-musllinux_1_2_i686.whl (2.9 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ i686

numkong-7.2.2-cp313-cp313-musllinux_1_2_aarch64.whl (5.5 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

numkong-7.2.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl (3.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ s390xmanylinux: glibc 2.28+ s390x

numkong-7.2.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl (3.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ppc64lemanylinux: glibc 2.28+ ppc64le

numkong-7.2.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (5.6 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

numkong-7.2.2-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl (2.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ i686manylinux: glibc 2.5+ i686

numkong-7.2.2-cp313-cp313-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

numkong-7.2.2-cp313-cp313-macosx_10_13_x86_64.whl (749.9 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

numkong-7.2.2-cp312-cp312-win_arm64.whl (471.7 kB view details)

Uploaded CPython 3.12Windows ARM64

numkong-7.2.2-cp312-cp312-win_amd64.whl (551.6 kB view details)

Uploaded CPython 3.12Windows x86-64

numkong-7.2.2-cp312-cp312-musllinux_1_2_s390x.whl (2.9 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ s390x

numkong-7.2.2-cp312-cp312-musllinux_1_2_ppc64le.whl (3.2 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ppc64le

numkong-7.2.2-cp312-cp312-musllinux_1_2_i686.whl (2.9 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ i686

numkong-7.2.2-cp312-cp312-musllinux_1_2_aarch64.whl (5.5 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

numkong-7.2.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl (3.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ s390xmanylinux: glibc 2.28+ s390x

numkong-7.2.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl (3.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ppc64lemanylinux: glibc 2.28+ ppc64le

numkong-7.2.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (5.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

numkong-7.2.2-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl (2.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ i686manylinux: glibc 2.5+ i686

numkong-7.2.2-cp312-cp312-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

numkong-7.2.2-cp312-cp312-macosx_10_13_x86_64.whl (749.9 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

numkong-7.2.2-cp311-cp311-win_arm64.whl (471.6 kB view details)

Uploaded CPython 3.11Windows ARM64

numkong-7.2.2-cp311-cp311-win_amd64.whl (551.1 kB view details)

Uploaded CPython 3.11Windows x86-64

numkong-7.2.2-cp311-cp311-musllinux_1_2_s390x.whl (2.9 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ s390x

numkong-7.2.2-cp311-cp311-musllinux_1_2_ppc64le.whl (3.2 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ppc64le

numkong-7.2.2-cp311-cp311-musllinux_1_2_i686.whl (2.9 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ i686

numkong-7.2.2-cp311-cp311-musllinux_1_2_aarch64.whl (5.5 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

numkong-7.2.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl (3.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ s390xmanylinux: glibc 2.28+ s390x

numkong-7.2.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl (3.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ppc64lemanylinux: glibc 2.28+ ppc64le

numkong-7.2.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (5.6 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

numkong-7.2.2-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl (2.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ i686manylinux: glibc 2.5+ i686

numkong-7.2.2-cp311-cp311-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

numkong-7.2.2-cp311-cp311-macosx_10_9_x86_64.whl (755.4 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

numkong-7.2.2-cp310-cp310-win_arm64.whl (471.6 kB view details)

Uploaded CPython 3.10Windows ARM64

numkong-7.2.2-cp310-cp310-win_amd64.whl (551.1 kB view details)

Uploaded CPython 3.10Windows x86-64

numkong-7.2.2-cp310-cp310-musllinux_1_2_s390x.whl (2.9 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ s390x

numkong-7.2.2-cp310-cp310-musllinux_1_2_ppc64le.whl (3.2 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ ppc64le

numkong-7.2.2-cp310-cp310-musllinux_1_2_i686.whl (2.8 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ i686

numkong-7.2.2-cp310-cp310-musllinux_1_2_aarch64.whl (5.5 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

numkong-7.2.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl (3.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ s390xmanylinux: glibc 2.28+ s390x

numkong-7.2.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl (3.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ppc64lemanylinux: glibc 2.28+ ppc64le

numkong-7.2.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (5.6 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

numkong-7.2.2-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl (2.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ i686manylinux: glibc 2.5+ i686

numkong-7.2.2-cp310-cp310-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

numkong-7.2.2-cp310-cp310-macosx_10_9_x86_64.whl (755.6 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

Details for the file numkong-7.2.2.tar.gz.

File metadata

  • Download URL: numkong-7.2.2.tar.gz
  • Upload date:
  • Size: 1.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for numkong-7.2.2.tar.gz
Algorithm Hash digest
SHA256 edf23729a9111bd49ae829963522383f757986457b60609983a404e3f5a66aba
MD5 f02955896a1b278e497c91c99b3a9baa
BLAKE2b-256 3c09356f0e81827f4e6b214c2f33162cbcfd37d487f7ba432ffbdf3a630ec323

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2.tar.gz:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp314-cp314t-win_arm64.whl.

File metadata

  • Download URL: numkong-7.2.2-cp314-cp314t-win_arm64.whl
  • Upload date:
  • Size: 495.4 kB
  • Tags: CPython 3.14t, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for numkong-7.2.2-cp314-cp314t-win_arm64.whl
Algorithm Hash digest
SHA256 de0e25fd640ea0911acc655111458106b87187ac0263b3ef50dc0e19e70d924a
MD5 d0c6f9db2fcae44d7176a41a6527416f
BLAKE2b-256 2bdce2e36e8b86f16f64964a704d19f1ee40e1868eb24b4ad67c9dbc0f0fe845

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp314-cp314t-win_arm64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp314-cp314t-win_amd64.whl.

File metadata

  • Download URL: numkong-7.2.2-cp314-cp314t-win_amd64.whl
  • Upload date:
  • Size: 573.2 kB
  • Tags: CPython 3.14t, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for numkong-7.2.2-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 986863fec9a14acad8a15521fffc17723279483a1bab70707e95e913156add47
MD5 e8dfddae430a240c4c872ed40afd1055
BLAKE2b-256 83b52827ed79ca75021a2378a710e9b8f41c35b923f9c2f03ebea5b93a070424

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp314-cp314t-win_amd64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp314-cp314t-musllinux_1_2_s390x.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp314-cp314t-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 84cf28a820f3437d82436780c4d0ae7f69f6352d374ff217778d4dac61616bf2
MD5 64b3ce604dc0badd4ae7945bebea51ca
BLAKE2b-256 f94c1e3e91fccf9798da257649fe3e9713f5048ebb71b272f760d2a5db8837fc

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp314-cp314t-musllinux_1_2_s390x.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp314-cp314t-musllinux_1_2_ppc64le.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp314-cp314t-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 c893226c39ead36bb4398c906a5fa6d755b68be667d0e7c8a0e7261ffbcf41a6
MD5 c0ac053e9d3b747010222dcbf7449abf
BLAKE2b-256 817169bac9459c316ea8bcb7e76f45a29f9d197f96cc10cf9fbd2301cd78b193

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp314-cp314t-musllinux_1_2_ppc64le.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp314-cp314t-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp314-cp314t-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 c965c1474c4b8d1abba579e4a0bf9a51a7b34a46a1527834ab7aaad2f6d36a00
MD5 66f659b14054c8e34a89ba709076a660
BLAKE2b-256 9ecebe01882254c44d74379d8b31387cf05a18fc093df5e5be6f23cf1ab007fb

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp314-cp314t-musllinux_1_2_i686.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp314-cp314t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a21ab7313f5cf54a4e73f8f31144ce036fc4c7a323e68bc44ced5a6978e78906
MD5 333fab00628973c0cd818fb708159571
BLAKE2b-256 d13d6310498336da7f257c66a3780e3007f833af89611938898cac4aa331ed63

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp314-cp314t-musllinux_1_2_aarch64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 1c86d505a79f1c56447e878d5d45f54327de956c9adde9f67b8fa6afbb40cf28
MD5 220036417a73a15dd5ee9b3bbd0c4894
BLAKE2b-256 c525af9f29fba80bd8ccb0b628cff5c967a56a4974a651c65075db8631a20cd3

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 1974b0f3deb6c66fbe5efcf833475a0ef5f1af9db701b25abd5f9de60248190b
MD5 75a51a9240396c755ab2e2cadf4deb59
BLAKE2b-256 87d64a7dea1b103047ff854bcc7df6111c4051bd950c6b75bbde7bafe93f17be

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 052f8af6708d66b392ea91411022f757cf720900abe15d493b33d922bffc8f09
MD5 9c9d63173f7394a319c64465f0561266
BLAKE2b-256 dab667402ca7c6b5de0096021961d3cb30ee188d61dfb4243273f5ee1b9a70f8

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl
Algorithm Hash digest
SHA256 2f1e77b5da3a3b3de76fa0f88558ff47624c27357c62db12a057980d79e66e8d
MD5 f7977e2db5aae735643bb1dbab07516b
BLAKE2b-256 6d23dfb4c22e988874a2c7d46202790c2d74c518bb28b0b9dd638fc7f09afd08

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 985b81f5d4e7096726557d87dfaf64dfc8aac0f678b59b76d399aef0095abfd0
MD5 44b094af721c025f56c8d40f92f6d5c4
BLAKE2b-256 5493c1a53facd60bfb40a03b9016c8855d75e5b3b9443ff487b8325ce7063d5b

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 6762b0bf2f07af9b309f1ecda4756befe86a4b45586ae53e98ccf6d790135800
MD5 060a8a773f7bea7f8202455b53a4e3ad
BLAKE2b-256 a9ecabb27b9b2635062d37c4f39375fc4d00d2a3b7533d5713eb525a9a20c6fb

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp314-cp314-win_arm64.whl.

File metadata

  • Download URL: numkong-7.2.2-cp314-cp314-win_arm64.whl
  • Upload date:
  • Size: 493.9 kB
  • Tags: CPython 3.14, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for numkong-7.2.2-cp314-cp314-win_arm64.whl
Algorithm Hash digest
SHA256 83a6898e987621a774922018c60f7d102d028111de3740ce0130c98d1bdfb9c6
MD5 42ced2f1c0a8fca9e70b47f99f82bfb9
BLAKE2b-256 2e08bf7f91a7c0235e7974cecd79bab1c83c5efbc60979952ff545ecd4eb95b0

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp314-cp314-win_arm64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: numkong-7.2.2-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 570.4 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for numkong-7.2.2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 2d5e4df142b52e2798710dd304700e7d2d585764699fa668f4c1e4e5ea8d6bc2
MD5 28f93f14cd68dcab1103332e330213d5
BLAKE2b-256 10849dcf83ae8598e433b9c22d4a60a8a4e85ab1eb84c54b73cdf573a3187574

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp314-cp314-win_amd64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp314-cp314-musllinux_1_2_s390x.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp314-cp314-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 894314e81f9762a1138ee953d8dad6b9485ab1051395d94cafa5797d22787a9b
MD5 5d49ba1e69718d4c601cc81682f57c4f
BLAKE2b-256 6cfa29377819d0df7056ee782e3ad6d32034f47e576a040b57d93af9bfc517d2

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp314-cp314-musllinux_1_2_s390x.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp314-cp314-musllinux_1_2_ppc64le.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp314-cp314-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 d5c2ddd7d4d2bf0aed758327e544799a1579221597426b635c020784ba054aa6
MD5 ca1bb089c0054476e7ff7502e52d8875
BLAKE2b-256 40e857d8fdc030ee80e0dd1f74f851b568c297ae8291d431bc128528060b6a06

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp314-cp314-musllinux_1_2_ppc64le.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp314-cp314-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp314-cp314-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 8a6cf3b65030326a703e741b7ea61ec6bcaa47a0cb96ff4af6776ff5f40f2d9f
MD5 212584dcce89569ef2363fe8e0a1ddb0
BLAKE2b-256 e9da132f4c344e527ca63f1ed4b1f51df4c7f9ed1091bc76371c2a07807beb1c

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp314-cp314-musllinux_1_2_i686.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp314-cp314-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp314-cp314-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 094179eb932e879bae55fdd9441d2c4e8b565686367258f1c43404d02e451b9b
MD5 f82df49dc392a982fe14de295aad4720
BLAKE2b-256 ddc77efa2b244690910f146bd01f43aa3ac5b1775e3ba41d65d12ef3487c75cd

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp314-cp314-musllinux_1_2_aarch64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 6210a5298cdddb6500e976bdd0df6ca1e8d2ba5c7c14a551771bb0f893d96ba2
MD5 b5a1b95dcec45cc6ac70e3209ee57ecf
BLAKE2b-256 55fb52bf2d0df5e5563283cf4208bfdad8eaa5fa7d426762821653de899b5798

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 99a81a960d690f73397512248e2c0920ce0b1d12e604c0fa5e43a4f78b849d7a
MD5 6517d53b6f9cd71210c8ebd10323e636
BLAKE2b-256 0cad40cb34a64328c120cc6e10718e7e64d4189f004dae60daa39d1e82a7f761

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 fa3fba909f232c156178457a74edccf30749a874b85aa63b8fb6866e1b87df2b
MD5 927d91d338ad27f186da6acda62af450
BLAKE2b-256 ad505ab5e82b960e0d172d84810cf5a97149cccecfe2d984c9bb59a1a02615f5

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl
Algorithm Hash digest
SHA256 0656e6bbdb9a32b4549fa4ec7ceefdb365d0852c93ba748b0ee73152d077ddd6
MD5 5658cc35c391d4417d169b94215f9ddf
BLAKE2b-256 c92481952b4ab3d9142370e9d8aa8d8e7867f62a2f602e25a348b5e06044a5ed

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 56ba1ee69b39f59b0c6cfee75d90beaee3e3e0e657d25ab4ee2e83b330434e87
MD5 571d28deb9215add209fed9fb0856ba9
BLAKE2b-256 52c5fe5019bba82abcaae12477ae42122ab79fd02d0913c7106da5860e02aa04

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp314-cp314-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 2f3b650a75981c62e71920c6477ffa21ebb28f8b97509560a4a1f93bdd9be4af
MD5 405ce78bd84a1a043e700b6348904bd3
BLAKE2b-256 8363d4669849128395fd9376472313fa60b3c00644120625ae04d93307ab7947

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp314-cp314-macosx_10_15_x86_64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp313-cp313t-win_arm64.whl.

File metadata

  • Download URL: numkong-7.2.2-cp313-cp313t-win_arm64.whl
  • Upload date:
  • Size: 472.5 kB
  • Tags: CPython 3.13t, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for numkong-7.2.2-cp313-cp313t-win_arm64.whl
Algorithm Hash digest
SHA256 df7f4f9bb4cfc49882e2df270138363ad9af9f2de2c1cc609553ceffa4f2acca
MD5 d6fd83f1a59030333adae61be7a87013
BLAKE2b-256 aa2da4365460b9dc634b1cc88bfb1746481d7cc91b470b2fde8c93242ecbddd8

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp313-cp313t-win_arm64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp313-cp313t-win_amd64.whl.

File metadata

  • Download URL: numkong-7.2.2-cp313-cp313t-win_amd64.whl
  • Upload date:
  • Size: 553.7 kB
  • Tags: CPython 3.13t, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for numkong-7.2.2-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 586872fdf82545ba5bcce23699f3f43cb8da52ebc9cc532de655f4e9ec8b0cb4
MD5 2b7938221b3f58183f0664f66ad27e00
BLAKE2b-256 856336dcd3032948cea05d98ca0b23cb1bbc97bb7d52da6e81a9e02c298fcc26

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp313-cp313t-win_amd64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp313-cp313t-musllinux_1_2_s390x.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp313-cp313t-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 753e49bee1c258213b9fc61551d0cfd30d4a16711da7a04f9a5265890ee3031a
MD5 2bceabb54fb74bd0beb029419ca88488
BLAKE2b-256 27211042d9e6729c04c2cc6236a5d6be2cec50a3930903814b08279bc3eb0c68

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp313-cp313t-musllinux_1_2_s390x.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp313-cp313t-musllinux_1_2_ppc64le.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp313-cp313t-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 56f06081103b538b876ae0a50bbc30c4ba852a46346172f3d9cb5f15aa7ccae6
MD5 e5def6c05bdd353dfb24dfba7b268731
BLAKE2b-256 f79378e6a4b265dcde8d13a504fd35471a45f4e9d7370c9c5c6077b287a6b9b8

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp313-cp313t-musllinux_1_2_ppc64le.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp313-cp313t-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp313-cp313t-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 ebbb3de43e62a5b7ee772a379587581d287de501ae3680ecd4b431fdbd9ee186
MD5 290727c6cddafa3486137dd44e263077
BLAKE2b-256 e78285160b1491920edce1236f62872c9efaf1c8cbbd0adade65c92a25b444a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp313-cp313t-musllinux_1_2_i686.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp313-cp313t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp313-cp313t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 977ca126088aa9bb68ab987d94cdf23533367e635ac8a96d19ccfa2169478ad2
MD5 50d7227708770f95de443b97ad876c03
BLAKE2b-256 73f9049f993beee6285e73a315751334c769ec4c3f3ca6edb3a740fdb65d73f6

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp313-cp313t-musllinux_1_2_aarch64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 0591ef2a004a9247615b118a0768af1e96ac9cb945f9d75584526a5fd3d65003
MD5 5711692b388fcfb6a1b3418ae17b5209
BLAKE2b-256 faa81257cfe7d34a97912333b2eeed57e7587430e70ac446b2bc443ce9cd617f

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 0e09f422138af676bc636d65270caab6ffcac09f1dfc5066a487e3b4e1c00282
MD5 569ae58544b57191a9bbd6df14339d11
BLAKE2b-256 f84b41a9e0d0479e8e9839c534b580028e593316c3dc137ab20cbfeb8e450446

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 07de515559e65ffb13df77cbdcfd4562bc29f228c33fe6a654c4853ba6fcf03c
MD5 4cbaa2ec24ad4ea02084ac40489641eb
BLAKE2b-256 b673e09b3d8fb862c89916006f54ac6b33b1e4a27d913ae309e58d54d781d38b

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl
Algorithm Hash digest
SHA256 0054cac3c3b90527f13bc54fc15f16dda78cae2f02f77ce4f9366773d7345bff
MD5 64636b29b31e6cc751e0efb678b06996
BLAKE2b-256 9d1b7f1e1a25ca8650d0e605f1c5d8521dfa780063a5cbd619221d83e6a5939b

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 921aaaa7228d4c1a070383b72d5285e68f2724906cf265b3096648ee448a4283
MD5 60f912026141ecf62e1b6223b7b3033f
BLAKE2b-256 038cea821f0f99dd27bcc3989ddc2b53dd02bcf4e0306ac435d92ecb0946d833

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 46fa6e14bc16767af23799c9578ad47fd059e5f5d1dd2fa7c1d18d62e0cf09e6
MD5 ada273e6802228b3a61dad603fe6c95e
BLAKE2b-256 534eb4b51e4bd4db1779ffda9de3c214499f592d78e0c2e88ee447331b0ba06d

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp313-cp313-win_arm64.whl.

File metadata

  • Download URL: numkong-7.2.2-cp313-cp313-win_arm64.whl
  • Upload date:
  • Size: 471.7 kB
  • Tags: CPython 3.13, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for numkong-7.2.2-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 389dc5bc616df41cdc65c1ce2c40fc46759d23950a357b49e7b11dbe0bcedf3a
MD5 2d8538d9fe6c2940cada04875be6d257
BLAKE2b-256 b566f25415f5b690a871d9ecddc845410af0d7d85e97442137eb74e0de918b11

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp313-cp313-win_arm64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: numkong-7.2.2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 551.6 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for numkong-7.2.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 05bce718091c4bee850c931d79bac6cc31146d2bf508209effbe64b2e79da15b
MD5 abc18272e17268cb5c8e73eb474084be
BLAKE2b-256 b6332f3db9817b881ee2976f0bb88af3e80f06644107a99997b4334746d8b4d8

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp313-cp313-win_amd64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp313-cp313-musllinux_1_2_s390x.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp313-cp313-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 096cbe9d965df9d59a45eb631ad8a9c1d5da2c27aa933daaf0b71b41ca2a7f31
MD5 5145cfe4953876ecea22cd4b885b4261
BLAKE2b-256 c21b1d277a8eeaa8a41dc21b45390c9118fc52fcf119ed614f58ff3e0194a005

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp313-cp313-musllinux_1_2_s390x.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp313-cp313-musllinux_1_2_ppc64le.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp313-cp313-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 a12d52399f2649f71fab81fdd3ad2789b4d31301198661cc02e51c6bbc7988b9
MD5 1fcd0b85ef5bc7080d17b1d5284f514f
BLAKE2b-256 7c25369cbdfaf8e062e0ebe354cfe52cf23324387696a88e90189b03c7dcd35e

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp313-cp313-musllinux_1_2_ppc64le.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp313-cp313-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp313-cp313-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 4f03cc963817e1f28e87be882ede4bda7729ce1a3a2aacd327ef40458a67fa12
MD5 5c512ec775f7b2c816652e4a59a9deaf
BLAKE2b-256 d80dade54394b7bda3b9a8cfc743b7cb80efacfb7a968dede3b8fa62f2bafead

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp313-cp313-musllinux_1_2_i686.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 39c9de63a5d74f9f782664f878430b5fbbf804d7995e57af85a685c4a43853bb
MD5 b77dd0fd8fe35b9b73c9a29b87ded75b
BLAKE2b-256 704c778eb8a32f9db7f21b8deab7db39e57d85585de8c6675fabda078409f7e6

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp313-cp313-musllinux_1_2_aarch64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 06081cb41f110aba9ae9b1e723a2398b65a5d4c63cb00cbb4fa7174e1102482e
MD5 8e773ff00fd167e4d262ef371f9f85b6
BLAKE2b-256 70b1582b57abdd44b0d7d4ae3f58183f8e526cad413c9a8e19ec45412e3943ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 6bdaebf1b8ba43cffb403ae181d71e2f86fd870a041076b5716b22e887e05b31
MD5 f1cd0d30b46fe85692e24a8f00764f86
BLAKE2b-256 fea0a4a07ee8858bda7ba34afc23193dc48364444169c458cf207fd80014c82a

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6c99b57e49c6c1b799c9cfa4510cd09100350f0cf706044e234f024fed810d4e
MD5 89927ab09817233e039ae8320a8d4c04
BLAKE2b-256 483e2dd7468e7880cc5451d0793fdaf0a6276a45d117e9ddc0107a6dba5784c9

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl
Algorithm Hash digest
SHA256 6265df478e6370c8dbf868cd0976109c953c92673960adf610c1c5e22fb34734
MD5 ed5470e03d3614376a1710c66a47cbe5
BLAKE2b-256 c77985e71ea3fb0acdf36235db1190caa3cfa395774faab2b39cb741824370e3

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1286098aafb30d2347ff49387f352891d698bd306620400c7ea8208c0a9ebbd9
MD5 3f64818eab2c10b691bf6ca5b14edde8
BLAKE2b-256 b68bc408175d3700cf21a9f27b8df3fe1e28d2835bbc99891d0e579e6a300467

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 67a52d79ab020e9b0a0209d74261aa9c3bf644747184295bae793268eef5c6e2
MD5 f7d5699e8df47b94c757c7b767792438
BLAKE2b-256 abad3ae90967c0299fc30550c510e6e31e7e8cb8ac35e071a9de0d1569263946

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp312-cp312-win_arm64.whl.

File metadata

  • Download URL: numkong-7.2.2-cp312-cp312-win_arm64.whl
  • Upload date:
  • Size: 471.7 kB
  • Tags: CPython 3.12, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for numkong-7.2.2-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 a45aab2dc33ddc14fd133c5011ee8f49a243ab837926abbf4610eade8e79ba4d
MD5 1ca764f21b4aacf231465630970b1f11
BLAKE2b-256 e602d8554af9b0a08ca55ca7bae9d7da660d3b6e7863e3b1fed2e14d16dcf5fb

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp312-cp312-win_arm64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: numkong-7.2.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 551.6 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for numkong-7.2.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c5dc1e7e28bc983c35e1da0ed8210955f022da7390efd3987e43281742332fa9
MD5 714ae59372b8427fbefd8d44cb8d1c70
BLAKE2b-256 0c6b7fe0c9f3b307c4e259fdeba46ecafb3e4eec342391e520e6ab669ea8e3ec

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp312-cp312-win_amd64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp312-cp312-musllinux_1_2_s390x.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp312-cp312-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 df001477c617266d7c87ad9a8afcde5d07b233d54119963402efce950cf98542
MD5 4fde2267882a961267780bbb99e8e6e0
BLAKE2b-256 f8d81e5e35d37dc97d170b41db04cf14b6e945bef9113696de60eae3c58554f7

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp312-cp312-musllinux_1_2_s390x.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp312-cp312-musllinux_1_2_ppc64le.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp312-cp312-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 e90a86feebbb0e359ab4a92ce4f83871cde788e88754935b9bbe3f66abbfdf6b
MD5 6708675953d2731d6d4f48fc12c36958
BLAKE2b-256 132480c2425484dd1052aa41cf86944e11dc5343698a4f21a462d73d5e092390

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp312-cp312-musllinux_1_2_ppc64le.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp312-cp312-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp312-cp312-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 b794a8c7f200146a2dcc5fcff6dfffb36614af9b5784b8acf2c3dfeae88ea559
MD5 6209b8f682625251a404a9c9999c705a
BLAKE2b-256 479917e83f5ffb21c1e980f3d3697f7e26c8730ecf836e4785b4727e46d54940

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp312-cp312-musllinux_1_2_i686.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 341b302c8b4eac4343a11778f055c9d1d21d5959cce38967cfeec9169ee94f7d
MD5 be64de314703fcf8dd88be489ed6f23c
BLAKE2b-256 c3a76a40e8a7e661131429ff8b48c89e3675d6492e7c46e1cd7756cfdd1b88f8

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp312-cp312-musllinux_1_2_aarch64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 2d549723df2c268cb53c34e94b221ea632576b12d8d42043761c5ef8f824b210
MD5 441771a32ef9561f5fc9ba75dbd10296
BLAKE2b-256 a6d68d1870aa760ac33bba15184ed10c4e41bb627b57133ee2c3cbac2258b5f1

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 5bd9b779ad38afbc0b9f664b3368c541f82aa26330222a84944f45e6bb91a6f0
MD5 1aca00fd4a78544c2f14b0d341d3e2cd
BLAKE2b-256 013df5418a7a3d9a65415f81484281424fec1c694dca3a25fce5d4dd76b5a340

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0d389ebcef1ab84ebaaec791d2c28a0be7da82750a59e3b3200041a663cdb08f
MD5 0e1c8dabfc07d649691a8adfccb2e6bc
BLAKE2b-256 a904a35552b3d8bd6e4e5066b5235653b79e2a23a635e9ff324f2bc8a749795c

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl
Algorithm Hash digest
SHA256 2e53e7dab0244e5d0d5f1ed36a190a82bfc1f3e45ab64c68b43b1539d0f481b1
MD5 0be710c811d6887550e5c88a2e695296
BLAKE2b-256 1bc96590af8401030b8d21a85ed5dd5e200227e71133b2f03a3b0250af5d13ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 51379c73e029cd8f89efb828499980bb551e7e5ebdcf7b34f3fd7c579a987ae0
MD5 3ce9814b11a7318e0c18b4a5f441f2e0
BLAKE2b-256 0aa2b49a4f76914fa7b53445acb2c860ba3983d9d84fdfd0d49b002095cd4132

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 33fef2847af2e04d7d64270c156ab8844dde8897777f140a968e4e58d599c485
MD5 b3e4f88ce3bcabb7499ffa5c812909dd
BLAKE2b-256 492af9ee8d6cbdf5bc8fd5da09da33d936319206bfca52a01637bbc16ac43c7c

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp311-cp311-win_arm64.whl.

File metadata

  • Download URL: numkong-7.2.2-cp311-cp311-win_arm64.whl
  • Upload date:
  • Size: 471.6 kB
  • Tags: CPython 3.11, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for numkong-7.2.2-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 2e9d1c89b76d7f9989d660732b66875ffc43a310446a2ee22b33913238f29257
MD5 b3cf744ef567f394a09b8038fea17682
BLAKE2b-256 44bcc82068ddca51864a5c110b1b809567a098feb8f5f797d3e901d69c25d93b

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp311-cp311-win_arm64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: numkong-7.2.2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 551.1 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for numkong-7.2.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d64117b495fa59646d9b1a578a56862fca9d42f1780062b1531eefc7b54e2ab4
MD5 e468518faf85ec0a99b57a6477f1ccab
BLAKE2b-256 58a13b275849a598a44ec39259efcff1a199e14d25f48354ba320d49bf016281

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp311-cp311-win_amd64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp311-cp311-musllinux_1_2_s390x.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp311-cp311-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 cb10a18bf0e4c65436faa348cd320d54ecc15096dc9c744ef5f45c03b17f2c13
MD5 13eeb01333449c3516cba1907b82cd70
BLAKE2b-256 f6759b6dfdfacd3c7dba5109d3c9e6d585e43e8ee720523755bfc577199d8886

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp311-cp311-musllinux_1_2_s390x.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp311-cp311-musllinux_1_2_ppc64le.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp311-cp311-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 e12229a0da0e9f009d7969cda13c910de8652c494e9fcb3c82b70ac9f9ca87eb
MD5 a4e576634ade8c9bba42f7034e6aa813
BLAKE2b-256 de850f332144a1573275c7d9f526384ae4cce942bde31fd6109314e024c0d3d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp311-cp311-musllinux_1_2_ppc64le.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp311-cp311-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp311-cp311-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 b3c808462a14492d2a682888d2f39a99581743be98760a3ad05c5891bc21d0d0
MD5 6e743315c63edc4e7dc3b10460074ccf
BLAKE2b-256 b8217889ede1a3637b1c3d43cc947d515ebf5b5ddd0113ea960093d7a4d6814d

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp311-cp311-musllinux_1_2_i686.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 99997b26f633eb973903681607309c8ddd76d932550f887ca632764cfb808060
MD5 9faed18953ec03342da12c430cb2c24f
BLAKE2b-256 fbba62ecfeed87233403ad672de1b06f7736ddadca06add18f0c5333ad42f0a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp311-cp311-musllinux_1_2_aarch64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 d3b8b2bc66d00371ce2c98a9e2a3a783116b1febafdc8ee519473676a37a3b03
MD5 ee0abe0e5795984f36a5bb430b2d6ee6
BLAKE2b-256 6a533a6fd7edc2264e46f08aec6705113cce331391a186c254f1baf51f657537

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 1688e58b9c2ff007e71e379b29b3f7b70233ab221f433c45fd51bc06d4fff41e
MD5 8f99b8eebb2d83bd27773a9fa423f245
BLAKE2b-256 0c7cdd00f2b78555a05282156a691c5715fe60d7ffd717fa093a0a8464efede4

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4fdcc28d1ac29ca9e27a16fcbac3cce56522d0996f8d1b20c8e32f04d6be46c9
MD5 a34d7a080d3af47bea8a3b3579445f41
BLAKE2b-256 aada3532e497d3d53af1b46acc2cdd4317ab367cf07aef154aefd01be4e249ee

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl
Algorithm Hash digest
SHA256 9f77bb7a9c8befa5b0374ab27f4e15f563b1c65999c092e17c14b622b7ea0fc9
MD5 c992d9da0858d1d486ea96514372b97a
BLAKE2b-256 81a7e6ce46934f59b4a933f2588a26da688eabcf5f35e1bacbd27e08d5425de7

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5b44e2cd92fc7fee72e3ff2b169e2a6aba021fc3d48f21e7de0f3e150da7feda
MD5 ccd6bde0f06532a1cb8aa0521bb24852
BLAKE2b-256 c6be86fb2e58e6099d377801a8fb1ec901db18c2a2c49286645c6d7ea65a9b36

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 546dbfb3146336475f0632a8154b878197a13ee90b0e979ebe193dad2ddea4e3
MD5 06ba59e6a096b9e5bee25396ac85bad4
BLAKE2b-256 e4d5213bdc1ee7e560c89ef0d62d68098aeab432692e48501051ce9541a58b12

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp311-cp311-macosx_10_9_x86_64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp310-cp310-win_arm64.whl.

File metadata

  • Download URL: numkong-7.2.2-cp310-cp310-win_arm64.whl
  • Upload date:
  • Size: 471.6 kB
  • Tags: CPython 3.10, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for numkong-7.2.2-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 2757b35be6384ab7299559cabadd75d8445341671bf809d6e3fccf561a2ce73e
MD5 970adafc47980dfe361536492f823c34
BLAKE2b-256 2461f813248261989bd4068bcb51114efc852598c06d0daac517a21dc790f136

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp310-cp310-win_arm64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: numkong-7.2.2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 551.1 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for numkong-7.2.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 092f1368c36d6f16a7ddec00b0f60634f02f9caa1e8cdfcc08dc4696ee1eb8be
MD5 46c28caf168598a7378b45402847b99f
BLAKE2b-256 504736c7a4bafc363636a06bf6a242235d45cd5a0d29a2c70e08fd0f4fd0e849

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp310-cp310-win_amd64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp310-cp310-musllinux_1_2_s390x.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp310-cp310-musllinux_1_2_s390x.whl
Algorithm Hash digest
SHA256 7aa69f5344e4db8d4b87af51e223a7f82b5c9f5e407c4813385298b9cb367550
MD5 d16291e5396154612b3bc5315f99d5de
BLAKE2b-256 523fac54c609ee4ad0c1edbc54e3d90fb7e9aa67bca721b93975c1bb8ad61281

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp310-cp310-musllinux_1_2_s390x.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp310-cp310-musllinux_1_2_ppc64le.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp310-cp310-musllinux_1_2_ppc64le.whl
Algorithm Hash digest
SHA256 2a388ab20b5cf78cfdeb42e34589fe2abe579bc75e33b16ecdba7d19da914a05
MD5 781a8422f2e35e2138ec9b6c46930397
BLAKE2b-256 910681ce1d411eb779a785ea0547265ff5a4b4f32395b12b7859dd6a11ac8a55

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp310-cp310-musllinux_1_2_ppc64le.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp310-cp310-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp310-cp310-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 157b0a5ff7668842173cea618e28393e4807f160af0311eca1ce9d0de4a7b216
MD5 090f5322d0afae968783a3fd731d754d
BLAKE2b-256 07ed6f34847526364c29cae358dac05dceab3960ddab304f6e908b3ef8704363

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp310-cp310-musllinux_1_2_i686.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp310-cp310-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 91b167c18f46c5c88c0c401fa51b2990530999a41b6c8adccd3225b1fab096ad
MD5 912bc9770d74ac35480010a84a63e123
BLAKE2b-256 23f226e6d20161a5d1279cb1e08bdf01b459604e8cdfbc268adfaae25e724adc

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp310-cp310-musllinux_1_2_aarch64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 a55f6b72fb046edea08b601e3a148826fc6e4936371217b766a6fa587c16f616
MD5 5db1f142f419e866e2fa2da14baf1124
BLAKE2b-256 7eaf702e4065fdb19b3a396125e070c329cb5e7cb5908768295b9701fa026a8a

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 ddac7b99d7deb2e51641f64d38d4ea8c2e31f47117cc6cd8629854f5c286dae6
MD5 e3cf30deaf8a00c0ec241b122fe59b30
BLAKE2b-256 e27eff4e39f33f14c6d61c12deca8ff35c38dda530a88ad74899a0ac6bf068fb

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 cb2e11f86dac3824c04f893258834ff703bbd4ac5b249864375f820c6984b699
MD5 7c67a237436b9b4ebbd5493c17360376
BLAKE2b-256 39ce95132c467458d92e093a2c257af04080717743473b053983270b6be13e8c

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl
Algorithm Hash digest
SHA256 db2de5506d893b549563366cbcab8d018e6e9059f4f6059e97c373bd2834ac6e
MD5 6f8791614c434e68341e1b603444bff8
BLAKE2b-256 6900f62fda501a39ad17debc175ff8aaf17d3d44181d4780476018f68a0702d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 03307441763d66027cb580f9597a0c8dc171ab000b036b4127da0b96df93f488
MD5 fe3584c585cf1bcf95bc50efecb83fd8
BLAKE2b-256 7e79d2f3deb8483429ecf18076d8f297471fd3097aaeff1b4edfe33d1214cd6d

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numkong-7.2.2-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for numkong-7.2.2-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 37c633bb2ba46471e2e76feee9803861f867fdda064bb702a5ab0a9d5f3cbb03
MD5 4016fc0109952ef03649225e9b647c28
BLAKE2b-256 8f35c04f314c98a17a1fec849cdddba1d997d2cff6c46177356d9f42f7aa601e

See more details on using hashes here.

Provenance

The following attestation bundles were made for numkong-7.2.2-cp310-cp310-macosx_10_9_x86_64.whl:

Publisher: release-python.yml on ashvardanian/NumKong

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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