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 GitHub stars

Fast KNN search without compromise. Exact when you need exact, approximate when you need speed.

HNSW for text-embedding RAG · SQ8 for 4× memory · MIH for binary descriptors, ~40× faster than Faiss's brute-force scan at d=512, 100% recall · drop-in for scikit-learn · SIMD on x86 (AVX2/AVX-512) and ARM (NEON) · zero native deps beyond NumPy.

PyNear demo

PyNear is a metric-space nearest-neighbour library with a C++ core covering exact (VP-Trees up to ~256-D), approximate float (HNSW + IVF-Flat, with optional int8 quantisation, for 384–1024-D embeddings / RAG), and binary / Hamming (MIH + IVF-Binary + the novel MIH-seeded HNSW) search — one small NumPy-only API with a scikit-learn drop-in and pre-built wheels (pip install pynear).


Table of Contents


Introduction

Search, recommendation, deduplication, and retrieval-augmented generation all reduce to the same primitive: turn an item — an image, an audio clip, a document, a face — into a descriptor (a fixed-length vector or bit-string), then find the descriptors nearest to it. Similar items map to nearby points, so "find similar" becomes "find nearest neighbours."

The right way to search depends on the data, and PyNear gives you one API for all three regimes instead of forcing every problem through the same tool:

  • Low-to-mid dimensions (a few up to ~256-D) — exact tree search wins. A VP-Tree prunes by distance to vantage points and returns the true nearest neighbours, no recall loss, no tuning.
  • High-dimensional float vectors (512–1024-D embeddings) — exact pruning collapses (the curse of dimensionality), so IVF-Flat trades a sliver of recall for large speed-ups.
  • Binary descriptors (ORB, BRIEF, perceptual hashes, SimHash) — Hamming distance plus Multi-Index Hashing uses the pigeonhole principle to find near-duplicates without scanning the whole dataset.

What people build with it:

  • Image / video deduplication & copy detection — perceptual-hash / ORB descriptors + MIHBinaryIndex.
  • Audio fingerprinting (Shazam-style) — spectrogram-peak descriptors + Hamming search.
  • Semantic & RAG retrieval — text/image embeddings + IVFFlatCosineIndex.
  • Classic ML — drop-in KNeighborsClassifier / Regressor backed by VP-Trees.

New to nearest-neighbour search? See docs/intro.md for a gentle, jargon-free introduction — or the deep dive, The shared recipe behind image search, Shazam, and RAG.


Why PyNear?

PyNear Faiss Annoy scikit-learn
Metric agnostic ✅ L2, L1, L∞, cosine, Hamming L2 / IP / cosine L2 / cosine / Hamming L2 / others
HNSW (incl. binary) ✅ + novel MIH-seeded variant for binary
Binary / Hamming approx ✅ MIH + IVF, ~40× Faiss flat at d=512; faster than Faiss MIH at matched recall ✅ MIH + IVF
scikit-learn drop-in ✅ adapter classes
Zero native deps ✅ NumPy only ❌ compiled lib + optional GPU

Full comparison →


Choosing an index

Your situation Use
Text / image embeddings (cosine, 384-1024 D, want fast queries) HNSWCosineIndex
Same but memory-tight (millions of vectors on one box) HNSWL2IndexSQ8 — 4× less RAM, ~1-3% recall hit
Generic float L2 ANN HNSWL2Index
Exact answers required (small / moderate D ≤ 256) VPTreeL2Index (or L1, Chebyshev, Cosine)
Binary descriptors (perceptual hash, ORB, BRIEF, SimHash) — near-duplicate detection MIHBinaryIndex (exact at small Hamming radius; ~40× faster than Faiss brute-force IndexBinaryFlat on 512-bit near-duplicates at 100% recall)
Binary + want graph fallback for larger queries MIHSeededHNSWBinaryIndex (novel — MIH seeds the HNSW beam search)
Range / threshold queries on binary descriptors BKTreeBinaryIndex
Already on sklearn.neighbors.* pynear.sklearn_adapter.PyNearKNeighborsClassifier etc. — drop-in
Building from scratch and want the closest match to "what hnswlib does" HNSWL2Index(M=16, ef_construction=200, ef_search=50)

When in doubt: HNSWCosineIndex for embeddings, MIHBinaryIndex for binary, VPTreeL2Index for exact.

📖 For HNSW specifically — including the add() / remove() / rebuild() mutation API, filtered search, parameter tuning, and a per-variant decision guide — see docs/hnsw.md.


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

PyNear's two headline indices: exact VP-Trees for low-to-mid dimensions, and Multi-Index Hashing for binary descriptors.

Low-dimensional exact search (VPTreeL2Index)

VP-Trees partition points by distance to a vantage point, so they prune whole branches in any metric space and return exact neighbours — no recall loss, no tuning — and stay effective up to ~256-D. The same API backs L2, L1, L∞, cosine, and Hamming.

import numpy as np
import pynear

# 100,000 vectors in 32-D
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)

High-dimensional binary descriptors (MIHBinaryIndex)

MIHBinaryIndex is pynear's flagship for binary descriptors (ORB, BRIEF, AKAZE, perceptual hashes, SimHash). Multi-Index Hashing splits each d-bit descriptor into m sub-strings and hashes them; by the pigeonhole principle, any neighbour within radius Hamming bits is guaranteed to be found. On wide descriptors it retrieves near-duplicates ~40× faster than Faiss's brute-force scan at 100% recall — and faster than Faiss's own MIH.

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)
queries = np.random.randint(0, 256, size=(100, 64), dtype=np.uint8)

mih = pynear.MIHBinaryIndex(m=8)   # 8 sub-tables of 64 bits (m=4 for 128/256-bit)
mih.set(db)
indices, distances = mih.searchKNN(queries, k=10, radius=8)
# radius: any true neighbour within this Hamming distance is guaranteed found
# (pigeonhole). Increase for higher recall on noisier data.

When you'd rather cap the cost per query than reason about a radius, IVFFlatBinaryIndex scans a fixed number of clusters instead:

ivf = pynear.IVFFlatBinaryIndex(nlist=512, nprobe=16)
ivf.set(db)
indices, distances = ivf.searchKNN(queries, k=10)
ivf.set_nprobe(32)   # trade speed for recall at runtime

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 (near-duplicate) 0.008 ms 1.82 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)

For wide float vectors (512-D–1024-D embeddings, e.g. text / RAG) reach for IVFFlatL2Index / IVFFlatCosineIndex. Every index type and its tuning knobs are covered in docs/README.md.


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, cosine, 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

Approximate ANN — float / cosine (graph-based, the modern default):

Index Distance Notes
HNSWL2Index L2 (Euclidean) Paper-faithful HNSW (Malkov & Yashunin 2016) with α-heuristic + keepPrunedConnections. Opt-in parallel build via n_threads. AVX-512 paths gated on __AVX512F__.
HNSWCosineIndex Cosine HNSW on L2-normalised vectors. Default for text embeddings / RAG.
HNSWL2IndexSQ8 L2 (Euclidean) HNSW with int8 scalar quantisation — 4× less RAM, ~2-3× faster queries, ~1-3% recall hit.
IVFFlatL2Index L2 (Euclidean) IVF with BLAS SGEMV inner scan; best when memory layout matters more than per-query latency.
IVFFlatCosineIndex Cosine Spherical K-Means + BLAS SGEMV.

Approximate ANN — binary / Hamming (image / document deduplication, perceptual hashes):

Index Distance Notes
MIHBinaryIndex Hamming Multi-Index Hashing; ~40× faster than Faiss IndexBinaryFlat on 512-bit near-duplicates at 100% Recall@10, and faster than Faiss's own IndexBinaryMultiHash at matched recall on SIFT1M. Exact within a configurable Hamming radius.
MIHSeededHNSWBinaryIndex Hamming Novel — HNSW beam search seeded by MIH lookups. Exact for small-radius queries, graph-robust for larger ones. (Design doc.)
HNSWBinaryIndex Hamming Plain HNSW with hardware popcount distance.
IVFFlatBinaryIndex Hamming Binary K-Means IVF; faster build than Faiss binary IVF.

Exact (small / moderate dim, when recall must be 1.0):

Index Distance Data type Notes
VPTreeL2Index / L1Index / ChebyshevIndex / CosineIndex L2 / L1 / L∞ / Cosine float32 SIMD-accelerated VP-Tree pruning.
VPTreeBinaryIndex Hamming uint8 Hardware popcount.
BKTreeBinaryIndex Hamming uint8 Threshold / range search (find_threshold(q, t)).

Every index above supports pickle round-trip (build once, persist, restore in seconds). All HNSW classes accept n_threads=N for parallel build. 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 pruning loses traction as dimensionality grows: in high-$n$ spaces, nearly all points concentrate in a thin shell near the boundary and distances between any two points become almost equal, leaving the tree nothing to prune. That's why exact tree search offers diminishing returns beyond $d \approx 256$ and why approximate methods (IVF-style probing) take over.

Full derivation, with volume integrals and a numerical illustration →

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

HNSW family (v2.4) — query latency vs Faiss IndexHNSWFlat

Single machine, N=20k, ef_construction=200, ef_search=256, k=10, 8-thread build:

Dim HNSWL2Index HNSWL2IndexSQ8 Faiss IndexHNSWFlat Recall (pynear / Faiss)
128 88 µs 70 µs 9 µs 0.94 / 0.96 (at M=16); 0.99 / 0.99 at M=32
384 181 µs 113 µs 24 µs 0.88 / 0.89
768 349 µs 173 µs 94 µs 0.86 / 0.86

Build time at N=20k, d=128 with n_threads=24: pynear 0.18s vs Faiss 0.20s — competitive.

Use HNSWL2IndexSQ8 when memory matters: ~4× smaller index, query 2-3× faster than the float HNSW. Recall drops ~1-3% at the same ef_search.

Binary / Hamming (the long-standing wedge)

QPS vs Recall@10 on SIFT1M binary

See the SIFT1M results below and the reproducible, thread-matched pynear vs Faiss comparison — ~40× faster than Faiss's brute-force IndexBinaryFlat on 512-bit near-duplicates, and faster than Faiss's own IndexBinaryMultiHash at matched recall on SIFT1M.

Full benchmark report (PDF) — formal evaluation against Faiss, scikit-learn, and Annoy across L2 / L1 / Hamming, dimensionalities from 2-D to 1024-D, both exact and approximate modes. (Its binary-descriptor numbers are superseded by the thread-matched results/faiss_comparison.md.)

Quick standalone runs:

python bench_run.py                                  # general suite
python -m pynear.benchmark.hnsw_benchmark            # HNSW vs Faiss
python -m pynear.benchmark.arm64_neon_benchmark      # ARM64 NEON path (on an M-series Mac)

Real-World Benchmark — SIFT1M Binary

Performance of pynear's approximate Hamming-distance indices on the INRIA TEXMEX SIFT1M dataset: 1,000,000 × 128-dim float SIFT descriptors sign-quantised to 128-bit binary (16 bytes/descriptor). Ground truth computed by exact brute-force Hamming k-NN over 500 queries, k=10. Machine: Intel(R) Core(TM) Ultra 9 285K.

The baseline below is a naive numpy scan. For the apples-to-apples comparison against Faiss's optimised brute-force (IndexBinaryFlat) and Faiss's own Multi-Index Hashing, see results/faiss_comparison.md.

QPS vs Recall@10

Index Configuration Build (s) ms / query QPS Recall@10
numpy brute-force (naive) N=1,000,000 50.1 20 1.000
IVFFlatBinaryIndex nlist=500, nprobe=31 6.24 1.47 679 0.825
IVFFlatBinaryIndex nlist=500, nprobe=62 6.24 2.85 351 0.842
IVFFlatBinaryIndex nlist=500, nprobe=125 6.24 5.65 177 0.845
IVFFlatBinaryIndex nlist=500, nprobe=250 6.24 10.74 93 0.845
IVFFlatBinaryIndex nlist=500, nprobe=500 6.24 20.95 48 0.845
MIHBinaryIndex m=8, radius=4 2.81 0.09 10825 0.585
MIHBinaryIndex m=8, radius=8 2.81 0.97 1031 0.829
MIHBinaryIndex m=8, radius=12 2.81 0.95 1053 0.829
MIHBinaryIndex m=8, radius=16 2.81 4.73 211 0.842
MIHBinaryIndex m=8, radius=24 2.81 12.37 81 0.844
MIHBinaryIndex m=8, radius=32 2.81 19.79 51 0.843
MIHBinaryIndex m=8, radius=48 2.81 36.34 28 0.843

Recall@10 is the standard |returned ∩ true| / k, measured against a fixed exact-Hamming ground truth. Because Hamming distances are integers, the 10-th-nearest boundary is often tied, so even an exact scan can score below 1.0 against this reference — the value reflects tie-breaking, not missed neighbours.

Key takeaways:

  • IVFFlatBinaryIndex (nprobe=125) reaches Recall@10=0.845 at 177 QPS (9× faster than the naive numpy scan).
  • MIHBinaryIndex (radius=4) is the lowest-latency single configuration at 10825 QPS (Recall@10=0.585).
  • MIH's real advantage shows on wide descriptors (256–512-bit) and small-radius / near-duplicate retrieval. On narrow 128-bit data at high recall, an optimised brute-force scan can outperform it — pick the index to the workload.

Reproduce: python demo_binary.py · add --small for a 10 K quick test · --n-gt-queries N to adjust evaluation size.

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

Star history

Star history of pablocael/pynear

If pynear saved you time, consider starring the repo — it's the cheapest way to support the project and helps others discover it.

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.4.0.tar.gz (116.6 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.4.0-cp312-cp312-win_amd64.whl (371.6 kB view details)

Uploaded CPython 3.12Windows x86-64

pynear-2.4.0-cp312-cp312-musllinux_1_2_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

pynear-2.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pynear-2.4.0-cp312-cp312-macosx_11_0_arm64.whl (484.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pynear-2.4.0-cp312-cp312-macosx_10_13_x86_64.whl (505.3 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

pynear-2.4.0-cp311-cp311-win_amd64.whl (369.0 kB view details)

Uploaded CPython 3.11Windows x86-64

pynear-2.4.0-cp311-cp311-musllinux_1_2_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

pynear-2.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pynear-2.4.0-cp311-cp311-macosx_11_0_arm64.whl (479.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pynear-2.4.0-cp311-cp311-macosx_10_9_x86_64.whl (490.6 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

pynear-2.4.0-cp310-cp310-win_amd64.whl (367.6 kB view details)

Uploaded CPython 3.10Windows x86-64

pynear-2.4.0-cp310-cp310-musllinux_1_2_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

pynear-2.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

pynear-2.4.0-cp310-cp310-macosx_11_0_arm64.whl (478.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

pynear-2.4.0-cp310-cp310-macosx_10_9_x86_64.whl (488.9 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

pynear-2.4.0-cp39-cp39-win_amd64.whl (367.8 kB view details)

Uploaded CPython 3.9Windows x86-64

pynear-2.4.0-cp39-cp39-musllinux_1_2_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

pynear-2.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

pynear-2.4.0-cp39-cp39-macosx_11_0_arm64.whl (478.6 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

pynear-2.4.0-cp39-cp39-macosx_10_9_x86_64.whl (488.9 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

pynear-2.4.0-cp38-cp38-win_amd64.whl (367.5 kB view details)

Uploaded CPython 3.8Windows x86-64

pynear-2.4.0-cp38-cp38-musllinux_1_2_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ x86-64

pynear-2.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

pynear-2.4.0-cp38-cp38-macosx_11_0_arm64.whl (478.1 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

pynear-2.4.0-cp38-cp38-macosx_10_9_x86_64.whl (488.4 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

File details

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

File metadata

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

File hashes

Hashes for pynear-2.4.0.tar.gz
Algorithm Hash digest
SHA256 54a62d2e2825304c9bd0376b95ce17d9abbd23af6c26f044e5f725d9db16f71b
MD5 f8166ee710045a0832be2c5019a0ba2b
BLAKE2b-256 98392632ecb389a7ff51803793b68e540b6a52180adcd109efade56e8599f321

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.4.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.4.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pynear-2.4.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 371.6 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pynear-2.4.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4d3e0ff4555474fef381a54cbacdfc4c99ab91ef70ebe4b33e35c6983b4f5128
MD5 71d09d59ad91466116e2e329c69799e6
BLAKE2b-256 b55b226d9421f65bd60b00a4172cd3e26a478570b970695ecc12710448d0f46c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.4.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.4.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.4.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 bb1af62e59e974eedd48823312f20c704e6cbfc64e430403f694634bdcc3de8c
MD5 5be071e2a0b757c8fbc012f056d8054f
BLAKE2b-256 8552ad9966dba940712067adccd39223eb9ee5feec5d889953a68ba2c585a156

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.4.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.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 270f717bb7e9a23280298425776bcae70435a69c67128a6cc14db25db79cc80c
MD5 b028aa7b69f34a38bc179fa2c2851556
BLAKE2b-256 88abcc2d5c45bb037dfdd21cb8063fa1699dc881c01b70047d3346d796dc7f55

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.4.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.4.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pynear-2.4.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 67ccad57138beb6bbc019be2e4dcc9c6a1d054eec181dfb16f04efa3ff01fb50
MD5 ad6101b73abff63004f4e11bdd42fac8
BLAKE2b-256 ddfd7b604b2a5f89ce30cde946d209294fe56d1d735884753322f4cdd1d7ff4b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.4.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.4.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.4.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 09cd929d69145e13688e8b30de79b568382d3f81afc557ca66c1d2f25164a46c
MD5 f420ae0c0e7ee20947aa652ddaae3228
BLAKE2b-256 0d6cf206b65786a1a30cde4748d35c6778f2aa37b65baa1dbb29b867af490e3e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.4.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.4.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pynear-2.4.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 369.0 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pynear-2.4.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 3f8d6cc034e80efa1f632df93514d20d78a1da91a2cf83e267d5d4bee8b3dd28
MD5 447713f307ea2654ae7a73a9e1820bf9
BLAKE2b-256 ccfd1feeb768192e5b3d9c5f5c906f7ccbcf1f8cd19bedf4128f9421a6001d2c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.4.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.4.0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.4.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 48ba71dc8020eaff6acd176d38a1592bd79fbdf6a2527f139bc75e40473e23b7
MD5 3cec326d3adf1c808a9383424bae6d5d
BLAKE2b-256 c556ac45ca6ef9039678e41478d8965a7c0443ba8037139d6cdcf98ec5ca48ac

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.4.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.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 00c48b3321af91c8bfbc0df322d56d8e1f2bf802d3703555c24a95c1781d9ce5
MD5 b76a0f7bda8571d111a0911289dd96b2
BLAKE2b-256 accb9aeb7f23b2bee6ee0b48ef776d49360847d94d810e43d2da86d13d55ac56

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.4.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.4.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pynear-2.4.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d03c94914043361ee418aa66e3bf00b5d1296eac760c585eae689c934f017a6b
MD5 8d89aca08c6ea98b54d4ebf09bacf132
BLAKE2b-256 82276186d2998c858316032398d9e6c2e88b7a7619f3ae0bb07230f361f9d875

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.4.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.4.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.4.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 938fd74add7776b28d83a703c5ad09b1e4d45516319a675ac797aa4092eccedc
MD5 9ebf2feebb35123a91ba4be9cc0c156a
BLAKE2b-256 358eebcd74ec2c5d759aceb3cc09f3c0bb6136ae02ceffe6acadc447e434c7d3

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.4.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.4.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: pynear-2.4.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 367.6 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pynear-2.4.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 802b4b7930a48f6708d843e494bf6093cf6dfa576ddc31625c83dab26dc8a68f
MD5 c15a43c4e0dc968f427077dbb4c21eee
BLAKE2b-256 b8be8fc2f88c4520a5d90379ae6c5e19636c8090fd4749576eec36c81d638b27

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.4.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.4.0-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.4.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 56006a8341130e0484b354bba8b24b181b35c1cdf055fc43b2b1f3c97e1dc06c
MD5 52026dc95677f3f1da7d5e8328ef24d6
BLAKE2b-256 0571dfa66ba9c2dd6710399ebf5e7a17808f375eaa9cb1067c756f245ae24800

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.4.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.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 27c6e41e3cc5b627868dba95b1f5953e0ca72f270afd1c0d962bcb4b9ef48193
MD5 77ce6466d97134f00e9724bcc8dc3a81
BLAKE2b-256 38756c4bd23bc318accacd1d76ac171887e4173aeebef18b812dd8620d9f0966

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.4.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.4.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pynear-2.4.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 122f7e40a85dd9c5e1b5e820259776e74b78d86fcc3ae968bdfce2de3d996841
MD5 ac028e0926b713c32da10ed465ef7a91
BLAKE2b-256 415cc89aa510c24df07a0c845675c79c274c0e01bfea3a51341211d43d7fee4c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.4.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.4.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.4.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 cc4fed2dbf168276c6841df3f06edd9666acdd8ce344fbfb0c6d2b647628ff55
MD5 d5d78a677517a055bf3e731478457ff1
BLAKE2b-256 304fd2a4d59f16bb99fe03341a89dcb276904804ec601c01abc65bf5061742f8

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.4.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.4.0-cp39-cp39-win_amd64.whl.

File metadata

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

File hashes

Hashes for pynear-2.4.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 ea9c394097c4e37f0d3a80eff0013ba4a2c01f13047783b91f0f4db907f0645f
MD5 1ab03f37e30776fa11bd7192be7a9bf1
BLAKE2b-256 2fe25bf740392ab38eca48fe4ab1d95f3696b50870e44ddb7240651918711f12

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.4.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.4.0-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.4.0-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 cad60e3007be44db6bf54ac7e32cc7cdc9166dd439828a9b92bc80ca1b50b5f8
MD5 8687308f7fd4cf25fc535ae6fc5eccfa
BLAKE2b-256 447e3bfa3e5e8efe6c4fbab2adcdb79f226491a10f57b2cb90986b75a0ed213a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.4.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.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 19841be96150205011249440b37ff21ff02b08591672b6c77dac35cd724ae1d8
MD5 60ffad727af70c62a54393e437c08289
BLAKE2b-256 ec04262d7ccf0a1177cb100530ecc7808e10914d07f5ae752f7eb84cf6ce106d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.4.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.4.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pynear-2.4.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dd007db367db2293023f80d6816cda74a684eb9eddead8bef605259317b25860
MD5 bf2b01960308abea067ad8da0978a670
BLAKE2b-256 9b8777dcd99acca4d365e6203c8bb19276d53d47ff5fc83673ce3f1a382234f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.4.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.4.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.4.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 e2a20d8f55db5a7d9a9b15f5a2139d3f87219022412b16938806e59dccbd873c
MD5 1b71fda0c792615bd6724dbc2934f67d
BLAKE2b-256 5a72af16369da73dfe171e064821bb4f3c5692ac2219e4935280d9e7a159cb78

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.4.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.4.0-cp38-cp38-win_amd64.whl.

File metadata

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

File hashes

Hashes for pynear-2.4.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 1f99ea66fa0bf24a4d00f7b5dca9d76bab77701605fdab82f6f07906e09cc597
MD5 547eea1083b7d35800fbd683fa4a4748
BLAKE2b-256 6038efa352392bbad0a4bf3db22c184db51fed40ecf8e43f3e2745bd50ac7165

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.4.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.4.0-cp38-cp38-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.4.0-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b5bb0a484b182a8847d085d82f7c907e9dd99e59d158dfe774d93074232f7d26
MD5 8eb8bd8ab376b7f95acd9e02a5bf12f4
BLAKE2b-256 74e311deebf1b36ba5095a16a5b7928ba245902651eb785c177eec1ae3a7be88

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.4.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.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6a2017e2fdff89b24689627d7c088a3ce9ec8dff7384e146a749921cfff997e2
MD5 2ce1eb8402f0c170fe09538dc6bc26d5
BLAKE2b-256 22e084e2a80cf026479664806c8c91d6f9ec85570e2cb1bb8c8377a78d9e81dc

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.4.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.4.0-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pynear-2.4.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a5129c363c9d6736dda9bceac627811a3e94419af7fcff359bcc58a6c7a719f0
MD5 b0448bfd4270f668397386785b742d88
BLAKE2b-256 2ed326f77b1eef1730bffe4bafc51cd8918d1af048944ba9032cbf132152dcb6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.4.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.4.0-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pynear-2.4.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 73c30aed4c379b20564423f797592b43b525c43a45cf76119b965fc0dda6a1dc
MD5 24a62c746ed0c7c9c8a2ce54404b9812
BLAKE2b-256 487ea5de5247b170e0a77f10bbe3ad5bc02768d9034c8f555a71b25729f90f85

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynear-2.4.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