Skip to main content

Fast exact KNN search with Vantage Point Trees — L2, L1, Chebyshev and Hamming, SIMD-accelerated

Project description

PyNear

PyPI version Python versions CI License: MIT

Fast, exact and approximate K-nearest-neighbour search for Python

PyNear is a Python library with a C++ core for exact or approximate (fast) KNN search over metric spaces. It is built around Vantage Point Trees, a metric tree that scales well to higher dimensionalities where kd-trees degrade, and uses SIMD intrinsics (AVX2 on x86-64, portable fallbacks on arm64/Apple Silicon) to accelerate the hot distance computation paths. Already using scikit-learn's KNN? PyNear ships drop-in adapter classes that implement the same fit / predict / score / kneighbors API — migrate in one line.

Why PyNear?

PyNear Faiss Annoy scikit-learn
Exact results ✅ VPTree always ✅ flat index ❌ approximate
Approximate (fast, tunable) ✅ IVFFlatL2Index ✅ IVF
Metric agnostic ✅ L2, L1, L∞, Hamming L2 / inner product L2 / cosine / Hamming L2 / others
Low-dim sweet spot
High-dim (512-D – 1024-D) ✅ IVFFlatL2Index
Binary / Hamming exact ✅ hardware popcount
Binary / Hamming approx ✅ MIH + IVFFlat ⚠️ slow build
Threshold / range search ✅ BKTree
Pickle serialization
No extra native deps ✅ NumPy only ❌ compiled lib + optional GPU
scikit-learn compatible API ✅ drop-in adapters

PyNear covers the full spectrum: use VPTree indices when you need guaranteed exact answers (2-D to ~256-D), IVFFlatL2Index for fast approximate float search on high-dimensional data (512-D to 1024-D), or MIHBinaryIndex / IVFFlatBinaryIndex for approximate Hamming search on binary descriptors — achieving up to 257× speedup over exact binary brute-force at N=1M, d=512 with 100% Recall@10.

For the Layman

K-Nearest Neighbours (KNN) is simply the idea of finding the k most similar items to a given query in a collection.

Think of it like asking: "given this song I like, what are the 5 most similar songs in my library?" The algorithm measures the "distance" between items (how different they are) and returns the closest ones.

The two key parameters are:

  • k — how many neighbours to return (e.g. the 5 most similar)
  • distance metric — how "similarity" is measured (e.g. Euclidean, Manhattan, Hamming)

Everything else — VP-Trees, SIMD, approximate search — is just engineering to make that search fast at scale.

Main applications of KNN search
  1. Image retrieval — finding visually similar images by searching nearest neighbours in an embedding space (e.g. face recognition, reverse image search).
  2. Recommendation systems — suggesting similar items (products, songs, articles) by finding the closest user or item embeddings.
  3. Anomaly detection — flagging data points whose nearest neighbours are unusually distant as potential outliers or fraud cases.
  4. Semantic search — retrieving documents or passages whose dense vector representations are closest to a query embedding (e.g. RAG pipelines).
  5. Broad-phase collision detection — quickly finding candidate object pairs that might be colliding by looking up the nearest neighbours of each object's bounding volume, before running the expensive narrow-phase test.
  6. Soft body / cloth simulation — finding the nearest mesh vertices or particles to resolve contact constraints and self-collision.
  7. Particle systems (SPH, fluid sim) — each particle needs to know its neighbours within a radius to compute pressure and density forces.

Installation

pip install pynear

Requires Python 3.8+ and NumPy ≥ 1.21.2. Pre-built wheels are available for Linux, macOS (x86-64 and Apple Silicon), and Windows — no compiler needed.


Quick start

import numpy as np
import pynear

# Build index from 100 000 vectors of dimension 32
data = np.random.rand(100_000, 32).astype(np.float32)
index = pynear.VPTreeL2Index()
index.set(data)

# KNN search — returns (indices, distances) per query, sorted nearest-first
queries = np.random.rand(10, 32).astype(np.float32)
indices, distances = index.searchKNN(queries, k=5)

# 1-NN shortcut (slightly faster than searchKNN with k=1)
nn_indices, nn_distances = index.search1NN(queries)

For all index types and advanced usage see docs/README.md.

Approximate binary search (image descriptors)

For large-scale image retrieval with binary descriptors (ORB, BRIEF, AKAZE), PyNear provides two approximate Hamming-distance indices that are orders of magnitude faster than exact brute-force:

import numpy as np
import pynear

# 1M × 512-bit descriptors (64 bytes each)
db = np.random.randint(0, 256, size=(1_000_000, 64), dtype=np.uint8)

# ── Multi-Index Hashing ───────────────────────────────────────────────────────
# Best for d=512 (m=8 sub-tables of 64 bits).
# 257× faster than brute-force at N=1M; 100% Recall@10 for near-duplicates.
mih = pynear.MIHBinaryIndex(m=8)   # m=4 for d=128/256, m=8 for d=512
mih.set(db)

queries = np.random.randint(0, 256, size=(100, 64), dtype=np.uint8)
indices, distances = mih.searchKNN(queries, k=10, radius=8)
# radius: any true neighbour within Hamming distance ≤ radius is guaranteed
# to be found (pigeonhole principle). Increase for higher recall on noisier data.

# ── IVF Flat Binary ───────────────────────────────────────────────────────────
# Predictable cost: scans nprobe clusters per query.
# Good when the query radius is unknown or data is non-uniform.
ivf = pynear.IVFFlatBinaryIndex(nlist=512, nprobe=16)
ivf.set(db)

indices, distances = ivf.searchKNN(queries, k=10)
ivf.set_nprobe(32)  # increase nprobe at runtime to trade speed for recall

Choosing between MIH and IVFFlat:

MIHBinaryIndex IVFFlatBinaryIndex
Best for Near-duplicate retrieval (small Hamming radius) General approximate Hamming KNN
d=512, N=1M query time 0.037 ms 1.95 ms
Recall guarantee Exact for distance ≤ radius (pigeonhole) Probabilistic (depends on nprobe)
Recall control radius parameter nprobe parameter
Recommended m d/8 bytes (e.g. m=8 for 512-bit)

Migrating from scikit-learn

PyNear provides adapter classes that implement the same interface as sklearn.neighbors.NearestNeighbors, KNeighborsClassifier, and KNeighborsRegressor. Changing the import is all that is required in most cases:

# Before
from sklearn.neighbors import KNeighborsClassifier
clf = KNeighborsClassifier(n_neighbors=5, metric='euclidean')

# After — identical API, backed by a VP-Tree
from pynear.sklearn_adapter import PyNearKNeighborsClassifier
clf = PyNearKNeighborsClassifier(n_neighbors=5, metric='euclidean')

All three adapters follow the standard scikit-learn workflow:

from pynear.sklearn_adapter import (
    PyNearNearestNeighbors,
    PyNearKNeighborsClassifier,
    PyNearKNeighborsRegressor,
)

# Unsupervised neighbour lookup
nn = PyNearNearestNeighbors(n_neighbors=5, metric='euclidean')
nn.fit(X_train)
distances, indices = nn.kneighbors(X_query)

# Classification
clf = PyNearKNeighborsClassifier(n_neighbors=5, weights='distance')
clf.fit(X_train, y_train)
clf.predict(X_test)          # class labels
clf.predict_proba(X_test)    # per-class probabilities
clf.score(X_test, y_test)    # accuracy

# Regression
reg = PyNearKNeighborsRegressor(n_neighbors=5, weights='uniform')
reg.fit(X_train, y_train)
reg.predict(X_test)          # predicted values
reg.score(X_test, y_test)    # R²

Supported metrics: euclidean / l2, manhattan / l1, chebyshev / linf, hamming

Supported weights: uniform, distance (inverse-distance-weighted)

Note: Input arrays are cast to float32 (or uint8 for Hamming) before indexing. scikit-learn uses float64 internally, so very small numerical differences may appear at the precision boundary, but nearest-neighbour results are identical for all practical datasets.


Features

Available indices

Exact indices — always return the true k nearest neighbours:

Index Distance Data type Notes
VPTreeL2Index L2 (Euclidean) float32 SIMD-accelerated
VPTreeL1Index L1 (Manhattan) float32 SIMD-accelerated
VPTreeChebyshevIndex L∞ (Chebyshev) float32 SIMD-accelerated
VPTreeBinaryIndex Hamming uint8 Hardware popcount
BKTreeBinaryIndex Hamming uint8 Threshold / range search

Approximate indices — trade a small recall budget for large speed gains; tunable via n_probe / radius:

Index Distance Data type Notes
IVFFlatL2Index L2 (Euclidean) float32 BLAS SGEMV inner scan; best for 512-D – 1024-D
IVFFlatBinaryIndex Hamming uint8 Binary K-Means IVF; faster build than Faiss binary IVF
MIHBinaryIndex Hamming uint8 Multi-Index Hashing; 257× faster than brute-force at N=1M, d=512

All VPTree and IVFFlat indices support searchKNN(queries, k). BKTreeBinaryIndex supports find_threshold(queries, threshold) for range queries. Set n_probe = n_clusters on IVFFlatL2Index to make it exact.

See docs/approximate.md for a full guide on measuring recall and tuning n_probe for your dataset.

Why approximate search? The curse of dimensionality

Tree-based exact search relies on pruning: a branch is discarded when its closest possible point is provably farther than the current best candidate. This pruning becomes ineffective as dimensionality grows — a phenomenon rooted in a fundamental geometric property of high-dimensional spaces.

Volume concentration near the boundary. Consider $N$ points drawn uniformly at random inside an $n$-dimensional ball of radius $R$. A point at distance $r$ from the origin is closer to the boundary than to the origin whenever $R - r < r$, i.e. $r > R/2$. The fraction of the ball's volume satisfying this condition is:

$$F(n) = \frac{V_n(R) - V_n\left(\tfrac{R}{2}\right)}{V_n(R)} = 1 - \left(\frac{1}{2}\right)^{n}$$

where $V_n(r) = \dfrac{\pi^{n/2}}{\Gamma\left(\tfrac{n}{2}+1\right)} r^n$ is the volume of an $n$-ball of radius $r$. Because $V_n$ scales as $r^n$, the ratio simplifies cleanly to $1 - 2^{-n}$, independent of $R$.

Median distance from the origin. The median distance $r_m$ is the radius such that exactly half the volume lies within it:

$$\frac{V_n(r_m)}{V_n(R)} = \frac{1}{2} ;\Longrightarrow; \left(\frac{r_m}{R}\right)^n = \frac{1}{2} ;\Longrightarrow; r_m = R \cdot 2^{-1/n}$$

As $n \to \infty$, $r_m \to R$: the typical point is arbitrarily close to the surface of the ball.

Numerical illustration:

Dimensionality $n$ Points closer to border than origin $F(n)$ Median distance $r_m / R$
1 50.0 % 0.500
2 75.0 % 0.707
5 96.9 % 0.871
10 99.9 % 0.933
100 ≈ 100 % 0.993

Consequence for KNN trees. When $n$ is large, nearly all points are concentrated in a thin shell near the boundary, and the distances between any two points become almost equal. With no contrast in distances, a tree has nothing to prune — every branch must be explored — and search degrades to exhaustive linear scan, $O(N)$. This is the fundamental reason why exact tree search offers diminishing returns beyond $d \approx 256$, and why approximate methods such as IVFFlatL2Index (probing only a fraction of clusters) or Faiss IVF are necessary at high dimensionalities.

Pickle serialisation

All VPTree and IVFFlat indices are pickle-serialisable — save a built index to disk and reload it without rebuilding:

import pickle, numpy as np, pynear

data = np.random.rand(20_000, 32).astype(np.float32)
index = pynear.VPTreeL2Index()
index.set(data)

blob = pickle.dumps(index)
index2 = pickle.loads(blob)

Tree inspection

print(index.to_string())
####################
# [VPTree state]
Num Data Points: 100
Total Memory: 8000 bytes
####################
[+] Root Level:
 Depth: 0
 Height: 14
 Num Sub Nodes: 100
...

Note: to_string() traverses the whole tree — use it for debugging only.


Demos

Two interactive desktop demos ship in demo/ and run with a single command:

pip install PySide6
python demo/point_cloud.py    # KNN Explorer — hover over 1M points to find neighbours
python demo/voronoi.py    # Voronoi diagram — drag seed points, watch cells reshape live
  • KNN Explorer — scatter up to 1 million 2-D points and hover to see k nearest neighbours highlighted in real time. Supports zoom, pan, and configurable point size.
  • Voronoi Diagram — every canvas pixel is coloured by its nearest seed point. Add, drag, and remove seeds; the diagram redraws live using pynear's batch 1-NN.

See docs/demos.md for full details.


Benchmarks

Benchmark Report (PDF)

A formal evaluation of PyNear against Faiss, scikit-learn, and Annoy across Euclidean, Manhattan, and Hamming distance metrics, dimensionalities from 2-D to 1024-D, and both exact and approximate search modes. Includes TikZ-rendered latency charts, a recall–latency Pareto analysis of IVFFlatL2Index vs Faiss IndexIVFFlat, and approximate binary-descriptor benchmarks showing MIHBinaryIndex achieving 257× speedup over Faiss exact binary brute-force at N=1M, d=512 with 100% Recall@10.

To run a quick standalone benchmark:

python bench_run.py

Development

Building and installing locally

pip install .

Running tests

make test

Debugging C++ code on Unix

CMake build files are provided for building and running C++ tests independently:

make cpp-test

Tests are built in Debug mode by default, so you can debug with GDB:

gdb ./build/tests/vptree-tests

Debugging C++ code on Windows

Install CMake (py -m pip install cmake) and pybind11 (py -m pip install pybind11), then:

mkdir build
cd build
cmake ..\pynear

You may need to pass extra arguments, for example:

cmake ..\pynear -G "Visual Studio 17 2022" -A x64 ^
  -DPYTHON_EXECUTABLE="C:\Program Files\Python312\python.exe" ^
  -Dpybind11_DIR="C:\Program Files\Python312\Lib\site-packages\pybind11\share\cmake\pybind11"

Build and run vptree-tests.exe from the generated solution.

Formatting code

make fmt

Project details


Download files

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

Source Distribution

pynear-2.2.0.tar.gz (66.3 kB view details)

Uploaded Source

Built Distributions

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

pynear-2.2.0-cp312-cp312-win_amd64.whl (231.6 kB view details)

Uploaded CPython 3.12Windows x86-64

pynear-2.2.0-cp312-cp312-musllinux_1_2_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

pynear-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (927.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pynear-2.2.0-cp312-cp312-macosx_11_0_arm64.whl (319.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pynear-2.2.0-cp312-cp312-macosx_10_13_x86_64.whl (331.1 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

pynear-2.2.0-cp311-cp311-win_amd64.whl (230.1 kB view details)

Uploaded CPython 3.11Windows x86-64

pynear-2.2.0-cp311-cp311-musllinux_1_2_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

pynear-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (917.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pynear-2.2.0-cp311-cp311-macosx_11_0_arm64.whl (317.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pynear-2.2.0-cp311-cp311-macosx_10_9_x86_64.whl (320.7 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

pynear-2.2.0-cp310-cp310-win_amd64.whl (229.4 kB view details)

Uploaded CPython 3.10Windows x86-64

pynear-2.2.0-cp310-cp310-musllinux_1_2_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

pynear-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (915.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

pynear-2.2.0-cp310-cp310-macosx_11_0_arm64.whl (316.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

pynear-2.2.0-cp310-cp310-macosx_10_9_x86_64.whl (318.8 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

pynear-2.2.0-cp39-cp39-win_amd64.whl (238.0 kB view details)

Uploaded CPython 3.9Windows x86-64

pynear-2.2.0-cp39-cp39-musllinux_1_2_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

pynear-2.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (916.5 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

pynear-2.2.0-cp39-cp39-macosx_11_0_arm64.whl (316.4 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

pynear-2.2.0-cp39-cp39-macosx_10_9_x86_64.whl (319.0 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

pynear-2.2.0-cp38-cp38-win_amd64.whl (229.3 kB view details)

Uploaded CPython 3.8Windows x86-64

pynear-2.2.0-cp38-cp38-musllinux_1_2_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ x86-64

pynear-2.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (914.8 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

pynear-2.2.0-cp38-cp38-macosx_11_0_arm64.whl (315.8 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

pynear-2.2.0-cp38-cp38-macosx_10_9_x86_64.whl (318.4 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

File details

Details for the file pynear-2.2.0.tar.gz.

File metadata

  • Download URL: pynear-2.2.0.tar.gz
  • Upload date:
  • Size: 66.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pynear-2.2.0.tar.gz
Algorithm Hash digest
SHA256 3c9df83556ff238c545d4735016264d3ef93cdc8f1fb1ad368fb9bf21a2c82fc
MD5 44b0afb99eba7628210fb17588c6fd9c
BLAKE2b-256 4c11df6b1b98f54c263302424dc39af35b7afc455abbade06c48f21f981a534f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.2.0.tar.gz:

Publisher: pythonpackage.yml on pablocael/pynear

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

File details

Details for the file pynear-2.2.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pynear-2.2.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 231.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 pynear-2.2.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 0188f68f09d37d685aa3aeed09cfd2be89731d08441053ccf0335de501585be1
MD5 61ef8084e62b7cc21d64e65618ceee45
BLAKE2b-256 3e26fb0de31425a84e2584efd9803b0fb960cc4ad70e55b01f829249645203ca

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.2.0-cp312-cp312-win_amd64.whl:

Publisher: pythonpackage.yml on pablocael/pynear

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

File details

Details for the file pynear-2.2.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.2.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3496f3ac9dea12816bfd7a819b0dbcc2e7c7842703fcfa0944a86ebe00758a6f
MD5 2867b48b5925ec15873a2ba97253adbb
BLAKE2b-256 4953f856f4299fce36bf6fd61bdf097f0510a52f1e97b873766f03cd704e13a1

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.2.0-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: pythonpackage.yml on pablocael/pynear

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

File details

Details for the file pynear-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 415d6ee7593b438f91cf6dc546dbb0b7151078d154c31d7617914bae9bacdd0a
MD5 6cf70e5f63a1cab3d116200256017e32
BLAKE2b-256 9abefd596451a507d82275f3afe2ff1e89e2ecd649b61add29fecf246a1259ce

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: pythonpackage.yml on pablocael/pynear

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

File details

Details for the file pynear-2.2.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pynear-2.2.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7b59cfb2e2df219c0e72f40a60d58a718a85420c14964a5d3e90c7db5fe0d341
MD5 86f06b99e022576edd66e50da1ee2935
BLAKE2b-256 3d823d911b2f3f2ab71acf2c725ce5dbfa799fa61d0bfb2ad053ca0c7d4bb69d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.2.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: pythonpackage.yml on pablocael/pynear

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

File details

Details for the file pynear-2.2.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.2.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 bf66ae04226c799274366da57c3dec04c559de1b56fbc29557168886e782eddc
MD5 3b792df4cb773c3a3f90d7ea7d82812a
BLAKE2b-256 ed1b971b98f3e1237c511901dd0308265603735aed8929bdc597a76c572909b0

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.2.0-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: pythonpackage.yml on pablocael/pynear

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

File details

Details for the file pynear-2.2.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pynear-2.2.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 230.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 pynear-2.2.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 6f1acfbbacc07e5f0074734069d6bc90e5668e9fcb3a9159cc09f53900f7fab1
MD5 676be748e11707b446775d470847fc6e
BLAKE2b-256 35e38093dfa1b1cfcda0d25241055a5106f878f565be374a8bbcd08e1ee2e0c5

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.2.0-cp311-cp311-win_amd64.whl:

Publisher: pythonpackage.yml on pablocael/pynear

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

File details

Details for the file pynear-2.2.0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.2.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f1aa670ae0632280c1bafb9b3367e2fe745af51a1ef58220eb289ae7a4c7db2e
MD5 89353b315d7060e1f6b17728b3cf0921
BLAKE2b-256 07acfb7a68de969ddcff262cae11ab494c1b4720a49f461900b6045842dc0e60

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.2.0-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: pythonpackage.yml on pablocael/pynear

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

File details

Details for the file pynear-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4c63ed0a577efb02facb631b3b497f0c842217610fbf389c1dc265cf0a70e0b9
MD5 875c53422dcbe94f1b84d7b934268cc1
BLAKE2b-256 bc3c71762ff6f1d662211207349da9db61612d40a20d864f68e55d0480daeb35

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: pythonpackage.yml on pablocael/pynear

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

File details

Details for the file pynear-2.2.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pynear-2.2.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fb839bea2e7a46ff5ca3a773d4a7d4a4a64060d875bdc6270d12f414bce96a3e
MD5 725fd867908d68c3ed2e83996a4d78c2
BLAKE2b-256 c47a1e87d8845cdd882d63f0ee1cbe2899dea6fbcb5cb7ff4efda320b308ad9e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.2.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: pythonpackage.yml on pablocael/pynear

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

File details

Details for the file pynear-2.2.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.2.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d12070836cd85fd8b5c56dd4bec47452331c7dc8d55ba71c2614533690d89107
MD5 db366d42007d46ad829c26b3974cd601
BLAKE2b-256 304b1219f7942efb91634992a013ba6e2bc9f75ba4f54a92e04dc25c1f0bddb8

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.2.0-cp311-cp311-macosx_10_9_x86_64.whl:

Publisher: pythonpackage.yml on pablocael/pynear

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

File details

Details for the file pynear-2.2.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: pynear-2.2.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 229.4 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 pynear-2.2.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 4152393949f926bc016069e222eb8357b99b8219456fcaccf632eedbc79c8e5f
MD5 cea1c8996c9a65f6705e81e6287e917f
BLAKE2b-256 87b2438fd467eac459bca6644449105c6ee79a105c17a53d8e2e0ad81e995c76

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.2.0-cp310-cp310-win_amd64.whl:

Publisher: pythonpackage.yml on pablocael/pynear

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

File details

Details for the file pynear-2.2.0-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.2.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a9c7c5b6eb49d6c651d54ee395a9331bf41df02881c04a9b9fcf0d1c1bae38e2
MD5 f328c5ac342364d11d8ecdbd7d3af7c0
BLAKE2b-256 bce1af9fee1030a40d553174cc73d8601486caec925214fd5c3068b225b079a6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.2.0-cp310-cp310-musllinux_1_2_x86_64.whl:

Publisher: pythonpackage.yml on pablocael/pynear

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

File details

Details for the file pynear-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 51c09fde9f69369d67bce0ebf72b97912d730c4416ea47ef195c616f7e483584
MD5 4a95ad6959dd3d347966b91b9bbbaa56
BLAKE2b-256 30a9699af350afbf21682cd35b4f2fb3cddfa77014bd45c0adc4097a3c85d0e7

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: pythonpackage.yml on pablocael/pynear

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

File details

Details for the file pynear-2.2.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pynear-2.2.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 22796107e6a02902f2a1a33836e64dba3492077587cd9a2ef0086a2dda2024cb
MD5 10587d6f78a78fd228693dc5efb4d369
BLAKE2b-256 f2e54f2bf1dae0586514831848aa52a71c1d326fca712446e6b831014d381993

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.2.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: pythonpackage.yml on pablocael/pynear

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

File details

Details for the file pynear-2.2.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.2.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 fd711bca4b05bac0869bdc5b06f4d3d0730e4a77dadc6a5d263d8b417162c256
MD5 6bff9625ed1c79843309297ce9eca955
BLAKE2b-256 36b203068ca66268b1f795e7989c69458d6a1da1b0b360d9bc7a668ef9b04ccf

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.2.0-cp310-cp310-macosx_10_9_x86_64.whl:

Publisher: pythonpackage.yml on pablocael/pynear

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

File details

Details for the file pynear-2.2.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: pynear-2.2.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 238.0 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pynear-2.2.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 ae63104c070a760e4085de8f63c255c464be14ea7e6ab2d50fffb82cb20e7d26
MD5 6e1fd28ee54b7318290383b5d350c490
BLAKE2b-256 52d1bb5176a59ecb68bef5fdf70c2c93a0b599a3d0f2d0bbb13e1df3f197fde8

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.2.0-cp39-cp39-win_amd64.whl:

Publisher: pythonpackage.yml on pablocael/pynear

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

File details

Details for the file pynear-2.2.0-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.2.0-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ae6e10a5826f19f0c542f171b8b1334375784a82068c4b740534b8200b69f9b0
MD5 d067a0e74394e2cf5ce8d66d6cd6d5a8
BLAKE2b-256 2eabadbec61be2d242e039b532a0877d48581aa07f3585c83aad8af7f90df8c4

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.2.0-cp39-cp39-musllinux_1_2_x86_64.whl:

Publisher: pythonpackage.yml on pablocael/pynear

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

File details

Details for the file pynear-2.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7829ca8a1abd6d558e36ea2621fc50c918485dc2b4309c032ab70b3016b48213
MD5 9a2fb3095c85e5991811077f60b6781e
BLAKE2b-256 13ed724a0b1c4ab2218abc38da49190d10aa26a0f9fe76c8ed6d167ede1d96e9

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: pythonpackage.yml on pablocael/pynear

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

File details

Details for the file pynear-2.2.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pynear-2.2.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a8e69227e7d766339c64bbcc94425b8ce45f157c26451481544b74981149e13a
MD5 0c86edfed0e3ab9c3812b85e284ecefa
BLAKE2b-256 28c6d7cdecdf750107c592c44b5a4fa6a22b882436a67185e77cd575f106d5a2

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.2.0-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: pythonpackage.yml on pablocael/pynear

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

File details

Details for the file pynear-2.2.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.2.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5cdd530414a4b6e8675ad80e65a5d1cbf99dccd5f28e3eb7afdf47856f7dfd62
MD5 9ef2bdb9a29733ad7eeae7dd6f186d77
BLAKE2b-256 307252d9cc019331775a321485e7b6be5f18e9e82318e3cceb294cfbb18bbe22

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.2.0-cp39-cp39-macosx_10_9_x86_64.whl:

Publisher: pythonpackage.yml on pablocael/pynear

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

File details

Details for the file pynear-2.2.0-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: pynear-2.2.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 229.3 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pynear-2.2.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 302205270f0e8f0e8065a3b270c552c7fe710c978cf9609f30fc4768704bf447
MD5 bf36ecc4dd807a538c9b4940537f6d53
BLAKE2b-256 8e00d94e4826a1f51649c3a7269f716eb926f8efe9f672bff68977f899a38e81

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.2.0-cp38-cp38-win_amd64.whl:

Publisher: pythonpackage.yml on pablocael/pynear

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

File details

Details for the file pynear-2.2.0-cp38-cp38-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.2.0-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 aedf261faa284071300f24a4c5646a856c08ac6fe39bb7d94d3fd94fca58b167
MD5 6e96d3b1501b506c70cddf16665918f3
BLAKE2b-256 04e650a61c9ab3c4014c9e30e0f535744b01fb90af132b9b18727e85dcf322fe

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.2.0-cp38-cp38-musllinux_1_2_x86_64.whl:

Publisher: pythonpackage.yml on pablocael/pynear

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

File details

Details for the file pynear-2.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 17339744620c659be05f0427467de20aab3b014e697471c704fd789b8d7c2620
MD5 a91f3c02837290ef4afd3dee1d690b5d
BLAKE2b-256 5923a17f866ccd0cdb2f40e665d9c7d420228eb40022b9146f38667794173d18

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: pythonpackage.yml on pablocael/pynear

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

File details

Details for the file pynear-2.2.0-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pynear-2.2.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1f44741c434c44f796da1eb99ea4bbf14e3e2288577b4c98a9baed535c8f745f
MD5 45b6f93cd07666cbf7455e4879323fe1
BLAKE2b-256 122b0cdccb9997d1577f36e18a4dbc019a203c8567955b471cf25cb8244d57f1

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.2.0-cp38-cp38-macosx_11_0_arm64.whl:

Publisher: pythonpackage.yml on pablocael/pynear

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

File details

Details for the file pynear-2.2.0-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.2.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 92fc40d6f8ca21bb2a3dfd97d8069f60e0b20d5f90c3b7090b1cce96008488ee
MD5 b3b45a9a0d6d08c5316872a86e78c842
BLAKE2b-256 074622aec050c93f6d83b094a35af0a7f69d3f17e84a0dea321454e1e404af85

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.2.0-cp38-cp38-macosx_10_9_x86_64.whl:

Publisher: pythonpackage.yml on pablocael/pynear

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