Approximate all-nearest-neighbor search using neighborhood graphs, implemented in Rust with Python bindings.
Project description
AANN
Approximate All Nearest-Neighbor ("aann") search using neighborhood graphs. Implemented in Rust with Python bindings. Based on Soudani & Karami (2018).
It is optimised for many nearest-neighbour joins that reuse the same clouds — build each cloud's index once, then query it again and again (e.g. an all-by-all join). See Usage.
Problem
Given two point clouds Q and P, for each point q in Q find its nearest neighbor p among the points in P.
Solution
- Calculate neighborhood (e.g. Delaunay) graphs for both point clouds.
- Start with a random vertex
qinQand traversePusing an A* search to find its nearest neighborp. - Move to a vertex adjacent to
qand searchPfor its nearest neighbor usingpas the start. Since we start the search where we have already established spatial proximity the A* search should finish quickly. - Rinse-repeat until we found nearest neighbors for all points in
Q.
Limitations
We currently only support 3D point clouds and Euclidean distances but may extend this to N-dimensions and other metrics in the future.
Install
We provide prebuilt wheels for Linux, macOS, and Windows on PyPI:
pip install aann
Usage
aann is built for repeated nearest-neighbour queries against prepared
indices. Building an AANN index does the expensive work up front — triangulate
the cloud into a neighbourhood graph, SIMD-pack its coordinates, and (by default)
reorder them for cache locality — so that every subsequent .query is cheap. The
payoff grows the more you reuse an index; for a single one-off search the build
cost dominates and a plain KD-tree is simpler.
Build an index once, query it many times
import aann
import numpy as np
target = np.random.rand(10_000, 3)
index = aann.AANN(target) # pay the build cost once...
for query in query_clouds: # ...then amortise it over many queries
distances, indices = index.query(query)
# k nearest neighbours per point -> (N, k) arrays, rows sorted by distance
# (k>1 is approximate; raise `ef` to trade search breadth for recall):
distances, indices = index.query(query, k=4)
# Ignore matches beyond a cutoff (scipy convention: misses get
# distance=inf and neighbour index=len(target)):
distances, indices = index.query(query, distance_upper_bound=0.05)
The query cloud can be a raw (N, 3) array, a scipy/shull Delaunay, or
another AANN — passing a prepared AANN skips re-triangulating it (the fast
path the all-by-all below uses). k counts returned neighbours (as in
scipy.spatial.cKDTree.query); the degree of the optional graph="knn"
neighbourhood graph is graph_k.
All-by-all: every cloud against every other
This is where aann pulls ahead. Build one index per cloud with prepare_many
(parallel), then join them with all_by_all: every index is built and packed
once and reused across every pair it appears in, and the Rust search releases
the GIL so the pairs run concurrently across cores.
indexes = aann.prepare_many(clouds) # list[AANN], built in parallel
results = aann.all_by_all(indexes) # every ordered i != j pair
results = aann.all_by_all(indexes, pairs=[(0, 1)]) # ...or a specific subset
# results[m] is the (distances, indices) for pairs[m] (query = i, target = j)
Because a cloud that appears in many pairs is triangulated and packed only once,
a full all-by-all over n clouds does O(n) index builds rather than O(n²) —
the reason aann suits workloads like NBLAST neuron-vs-neuron matrices.
Blocked and grouped descents (faster, k=1, experimental)
Two opt-in variants speed up the k=1 descent without changing the result (they
are exact up to occasional equal-distance ties in the returned index):
# Blocked: reuse each target vertex's neighbour gather across a block of query
# points (~1.4x on the descent). Works per query too; supports distance_upper_bound.
# Assumes Morton-coherent query order (the aann default, reorder=True); a block
# size in ~8-64 is the useful range.
d, i = index.query(other_index, blocked=True, block=8)
results = aann.all_by_all(indexes, blocked=True)
# Grouped: concatenate ALL query neurons' points and Morton-sort them ONCE, then
# descend that shared set against each target so co-located points from different
# neurons share gathers. Fastest for a large multi-threaded all-by-all (~4x
# multi-thread / ~2x single-thread here at block=32); k=1 only. See the docstring
# for the scaling caveats (memory, parallelism = #targets, data-dependent speedup,
# and that it descends the whole query set per target).
results = aann.all_by_all_grouped(indexes, distance_upper_bound=40.0) # block=32
aann vs a KD-tree
Unlike a KD-tree, aann is a cloud-vs-cloud method: the query points are
themselves triangulated into a graph, so the warm-started descent starts each
query near the previous answer. That is what makes it fast on coherent clouds
(neurons, meshes, space-filling data) — but pass a whole cloud, not a handful of
scattered points, and expect approximate results for k>1 (k=1 is exact on a
Delaunay graph).
Using from Rust
The core search is a plain Rust library — the Python bindings sit behind the
non-default python cargo feature. It builds on stable Rust (SIMD comes
from the wide crate):
[dependencies]
aann-graph = { git = "https://github.com/schlegelp/aann" }
The package is named aann-graph (plain aann is taken on crates.io by an
unrelated project) but its library target is aann, so in code you import it
as aann:
use aann::{graph_from_simplices, PreparedF64};
use aann::ndarray::array; // re-exported ndarray
// Target cloud + its Delaunay simplices (rows of 4 vertex ids):
let points = array![[0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]];
let (indptr, indices) = graph_from_simplices(array![[0u64, 1, 2, 3]].view(), 4);
let target = PreparedF64::new(points.view(), indptr.view(), indices.view());
// Query cloud with its own CSR neighbourhood graph (`u32` indices -- the
// adjacency is the largest allocation in a big run, and a single cloud never
// approaches 2^32 points):
let queries = array![[0.1, 0.0, 0.0], [0.9, 0.1, 0.0]];
let (qptr, qidx) = (array![0u32, 1, 2], array![1u32, 0]);
let (dists, idxs) = target.query(queries.view(), qptr.view(), qidx.view());
PreparedF64::query_k(..., k, ef) gives k nearest neighbours,
query_prepared(&other) is the pack-free prepared-vs-prepared fast path, and
everything exists in an F32 flavour too (see the crate docs for the full
API, including the lower-level Neighborhood*/search_* functions).
Benchmark
bench.py contrasts aann with scipy.spatial.KDTree on uniform random 3D
clouds, single-threaded (so it compares the algorithms, not the thread pools).
It makes the trade-off concrete — an aann index is expensive to build but cheap
to query, so it only pays off once reused. Representative run (N = 5000
points/cloud, float64; numbers are indicative and machine-dependent):
| build | query | |
|---|---|---|
| scipy KDTree | 0.6 ms | 2.5 ms |
| aann index | 19 ms | 0.5 ms |
The index costs ~30× more to build but answers each query ~5× faster, so it
breaks even after ~9 reuses. In a full all-by-all — where every cloud's index is
built once and reused across all its pairs — aann's total wall-clock
(build + every pair) overtakes scipy at roughly a dozen clouds and keeps
pulling ahead (≈1.6× faster at n = 20). Recall vs the exact KDTree is 100% on
this uniform data. Reproduce with python bench.py.
TODOs
- use SIMD (singe instruction multiple data) for distance calculations
- implement k-all-nearest neighbors (
k>1uses an approximate best-first search; recall tunable viaef) - benchmarks
- test other neighborhood graphs (e.g. Gabriel, relative neighborhood, etc.) and compare performance/recall
- implement
query_radius(analagous toscipy.spatial.cKDTree.query_ball_tree) - add alternative distance metrics (currently only Euclidean)
- generalize to N-dimensions (currently only 3D)
Build
Requires Python ≥ 3.10. The extension is built against the stable ABI
(abi3-py310), so a single wheel works across all supported CPython versions.
cdinto directory- Activate virtual environment:
source .venv/bin/activate - Run
maturin build --releaseto build a wheel or usematurin developto compile and install in development mode
SIMD
aann uses the wide crate for SIMD, which
works on stable Rust. One thing to be aware of:
- By default, only the oldest SIMD extension
sse2is enabled during compilation (on x86-64). It is very likely that your processor supports newer extensions such asavx2or evenavx512f. To check what's supported run:$ cargo install cargo-simd-detect --force $ cargo simd-detect extension width available enabled sse2 128-bit/16-bytes true true avx2 256-bit/32-bytes true false avx512f 512-bit/64-bytes true false
You can tell the compiler to use newer extensions by setting rust flags:# To activate a specific extension export RUSTFLAGS="-C target-feature=+avx2" # Alternatively to activate all available extensions export RUSTFLAGS="-C target-cpu=native"
Test
First make sure pytest and pandas are installed:
pip install pytest -U
Then run the test-suite like so:
pytest --verbose -s
Note that unless you compiled with maturin develop --release the timings will
be much slower (up to 10x) than in a release build.
References
Soudani, N. M., & Karami, A. (2018). All nearest neighbor calculation based on Delaunay graphs (Version 1). arXiv. https://doi.org/10.48550/ARXIV.1802.09594
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
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aann-0.3.0.tar.gz.
File metadata
- Download URL: aann-0.3.0.tar.gz
- Upload date:
- Size: 72.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
494bb2a1d9fff50274fe1617b2c756a3f2dbadd4e46a621db70daf577e6d91f3
|
|
| MD5 |
d0c7d63c058afe87dea778c639055553
|
|
| BLAKE2b-256 |
3f5ce9c47ca33cef85093b387306a050d1f9538c92f6b6e2cac49cdbe8248c96
|
File details
Details for the file aann-0.3.0-cp314-cp314t-win_arm64.whl.
File metadata
- Download URL: aann-0.3.0-cp314-cp314t-win_arm64.whl
- Upload date:
- Size: 245.1 kB
- Tags: CPython 3.14t, Windows ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9aeb95adcb1614c9d6f0750f6c5a7eda65d4656a839ace54c019700fa91e1238
|
|
| MD5 |
253fd89d7811dc0b8858998e7a6f9101
|
|
| BLAKE2b-256 |
4fd86393c49471b5498590e9159e7c6d4c98668a7a925c66f6584a14962a338d
|
File details
Details for the file aann-0.3.0-cp314-cp314t-win_amd64.whl.
File metadata
- Download URL: aann-0.3.0-cp314-cp314t-win_amd64.whl
- Upload date:
- Size: 262.2 kB
- Tags: CPython 3.14t, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ceb488c34717711a5b9963296dcee52620e25690c7a282e88157dfbf75aa2478
|
|
| MD5 |
9ef551db59488e6bfdcb9de9fe6da8d0
|
|
| BLAKE2b-256 |
3e6446b7175ec97130d0da36567d00399a361b4882ec8e76f89db906ec36f72a
|
File details
Details for the file aann-0.3.0-cp314-cp314t-win32.whl.
File metadata
- Download URL: aann-0.3.0-cp314-cp314t-win32.whl
- Upload date:
- Size: 241.2 kB
- Tags: CPython 3.14t, Windows x86
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90005b6e587c96d2a042b1aaa4785410dcb6e61076cb3d1aaec7133fc6fe78c4
|
|
| MD5 |
4c5722fd1ffac14d3edc6d32ceeb3f03
|
|
| BLAKE2b-256 |
49e173845ec547f36c18db250219b1ded66bb0a6f1e461a40ab0b2d2ce9822bc
|
File details
Details for the file aann-0.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: aann-0.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 578.2 kB
- Tags: CPython 3.14t, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3555fc6e68e8e5ba6d1856c27cad518d810de416941ab8b30637f4bc10c23fb7
|
|
| MD5 |
5fb6e548ade0e3619931a5d0077ea8aa
|
|
| BLAKE2b-256 |
a39908b2d3bcb74bcb6a80b41a1bc1a30f3ffbc4884c518ac2a76ca203c11c9e
|
File details
Details for the file aann-0.3.0-cp314-cp314t-musllinux_1_2_i686.whl.
File metadata
- Download URL: aann-0.3.0-cp314-cp314t-musllinux_1_2_i686.whl
- Upload date:
- Size: 606.1 kB
- Tags: CPython 3.14t, musllinux: musl 1.2+ i686
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7480753291fe0717eebab7446dce99c3719d2c967719755fe907b27413955ca1
|
|
| MD5 |
3157c4fadf5d5c6662f73e187c6e1a27
|
|
| BLAKE2b-256 |
01bf7f79dfaf28747c07719b9afd7f2c47707f17f4379f01b67b2f45631dd252
|
File details
Details for the file aann-0.3.0-cp314-cp314t-musllinux_1_2_armv7l.whl.
File metadata
- Download URL: aann-0.3.0-cp314-cp314t-musllinux_1_2_armv7l.whl
- Upload date:
- Size: 650.2 kB
- Tags: CPython 3.14t, musllinux: musl 1.2+ ARMv7l
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
391e30d308487b62ef92ccbbb56badfda8d113d2f4bbd02d0bf5067ba13ddb01
|
|
| MD5 |
ff6f0a7a1bd4987170ede9b2ce087c35
|
|
| BLAKE2b-256 |
26eb695578887b271e5356b1b33c3f7c7eb10538c7061e9df737e3e3bdd80927
|
File details
Details for the file aann-0.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: aann-0.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 534.0 kB
- Tags: CPython 3.14t, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
44e444daaa7952dc010f7e8e1d3eba01adf5ffa2b2355f18bf0353b81cb8b333
|
|
| MD5 |
f8e85d6cce9f49965d09a959c053ac50
|
|
| BLAKE2b-256 |
08bee3da113c96b35f67e7507461695435265580fa1e1244e131a49e25a9feea
|
File details
Details for the file aann-0.3.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: aann-0.3.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 366.0 kB
- Tags: CPython 3.14t, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8c62cc2dc7adb70bde7091fae51072a9ff343a84e468a1f951f0519c460afc3e
|
|
| MD5 |
106d5524fc1750b866bf09bdcf82d480
|
|
| BLAKE2b-256 |
86f11bb5ac34248ac9dc37e986d9b8540055cad9b18142dc09c3dc6d82bdd3b2
|
File details
Details for the file aann-0.3.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl.
File metadata
- Download URL: aann-0.3.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl
- Upload date:
- Size: 402.8 kB
- Tags: CPython 3.14t, manylinux: glibc 2.17+ s390x
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
66e99d7da4dda588e59bdd57f2c7e2266a44eebac090a2356d280f0f0df4db69
|
|
| MD5 |
736267c08eef91546048b3ef47759cb3
|
|
| BLAKE2b-256 |
2ffb3a442f013203845695c7a084aa934db3c9e74b41dbf53331923231d38e8e
|
File details
Details for the file aann-0.3.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.
File metadata
- Download URL: aann-0.3.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
- Upload date:
- Size: 410.7 kB
- Tags: CPython 3.14t, manylinux: glibc 2.17+ ppc64le
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
25339e0822b29759daf2f1d82755d9022f9524fe27a5ec2a35a0434a5c1bf152
|
|
| MD5 |
c04526af11eeadaec2c8287b84709a64
|
|
| BLAKE2b-256 |
f6c39f00ec645adf24a57f20e18fcc6c621288938c4adfecc098a99f5366a459
|
File details
Details for the file aann-0.3.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.
File metadata
- Download URL: aann-0.3.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
- Upload date:
- Size: 374.8 kB
- Tags: CPython 3.14t, manylinux: glibc 2.17+ ARMv7l
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
01c6e20f04c0ee8cafa57d2d9ac757f486a69284eb34922fd288dc372253fb7b
|
|
| MD5 |
2ae185926856eac16742d9cc0f0e3772
|
|
| BLAKE2b-256 |
a557c63bd069decb7976e84578b3cbd90ff43f39bf6ed7bcf11b0858ac2e2b28
|
File details
Details for the file aann-0.3.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: aann-0.3.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 357.4 kB
- Tags: CPython 3.14t, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
facf26efd0a4baf4c6b131ca88333d8040d5b51070fcd99cf2b49be94bc2f0f9
|
|
| MD5 |
71d97e79051810c6328d56cc1a6854b9
|
|
| BLAKE2b-256 |
13fc7a49290a3bb6503935c0e750ba68f180202c1735f61036d04cb06e1fd129
|
File details
Details for the file aann-0.3.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl.
File metadata
- Download URL: aann-0.3.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl
- Upload date:
- Size: 387.9 kB
- Tags: CPython 3.14t, manylinux: glibc 2.5+ i686
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8b212b88ab031f2835691e48c5d7f5c8e2d6d12cb05048b49db26f54dd26c089
|
|
| MD5 |
1884ecfebca0120ef8eaacd3faf95562
|
|
| BLAKE2b-256 |
10572b03ef98e947048d47b6fe561c59339d7bea75660f64070f882280c20ee9
|
File details
Details for the file aann-0.3.0-cp314-cp314t-macosx_11_0_arm64.whl.
File metadata
- Download URL: aann-0.3.0-cp314-cp314t-macosx_11_0_arm64.whl
- Upload date:
- Size: 334.0 kB
- Tags: CPython 3.14t, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3f9ba97b06e743427ba29a42da1b606d439e630b61ef97dcdabbe6094b2f27c0
|
|
| MD5 |
549972ffbf1986df181e6232e6bf3ed1
|
|
| BLAKE2b-256 |
e5f72d4725eb3919fff35e246bb0ab5a2659a68a1d0d0815739172f93af05fee
|
File details
Details for the file aann-0.3.0-cp314-cp314t-macosx_10_12_x86_64.whl.
File metadata
- Download URL: aann-0.3.0-cp314-cp314t-macosx_10_12_x86_64.whl
- Upload date:
- Size: 353.6 kB
- Tags: CPython 3.14t, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cdb06decb3b84015ac762fb09436868b62a079ddcc5efefd98570be3acfefaea
|
|
| MD5 |
2a3d2a72b1506f664dd4e58fa296f9f3
|
|
| BLAKE2b-256 |
a6de1a05cf2334883aed17482663c36278c6dd3dcbbfb2ec8b739973abf0fc40
|
File details
Details for the file aann-0.3.0-cp310-abi3-win_arm64.whl.
File metadata
- Download URL: aann-0.3.0-cp310-abi3-win_arm64.whl
- Upload date:
- Size: 252.6 kB
- Tags: CPython 3.10+, Windows ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c42b7c7897fd4f4d2fddeb15bb1a110d4a04e09ae57652f84f86930a5fd2f292
|
|
| MD5 |
47644f530258fbe499732514c7caf650
|
|
| BLAKE2b-256 |
c25f84c11e8b2b5d81e8f630ee6d8d24a8e50351bc58ff9182a97c0444cad096
|
File details
Details for the file aann-0.3.0-cp310-abi3-win_amd64.whl.
File metadata
- Download URL: aann-0.3.0-cp310-abi3-win_amd64.whl
- Upload date:
- Size: 269.1 kB
- Tags: CPython 3.10+, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f67d5016b16b7d6af3ecba5214b73425fd42ee410a0569be73e462586c08f440
|
|
| MD5 |
78828fd21110adc907f298ebacebc4fd
|
|
| BLAKE2b-256 |
25481ffb018dab395aa6035edd1e93132c29ce2408b5fc23620e87f8f1e97109
|
File details
Details for the file aann-0.3.0-cp310-abi3-win32.whl.
File metadata
- Download URL: aann-0.3.0-cp310-abi3-win32.whl
- Upload date:
- Size: 250.1 kB
- Tags: CPython 3.10+, Windows x86
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cbb5be7dd47ca5a5c772b5b4452c4b6f376c54536ed0bd8ffaae69013b421ae5
|
|
| MD5 |
a6901e21bd3bfabd860c24249b889a94
|
|
| BLAKE2b-256 |
66d2b58b42fcb4337b4f30ebd63ef08954af209472b75a90f417a4892519e53b
|
File details
Details for the file aann-0.3.0-cp310-abi3-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: aann-0.3.0-cp310-abi3-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 584.4 kB
- Tags: CPython 3.10+, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2240656f4a3da5b5f43d2ac485625bc64289a906b4a75b84b4faaa9d6600f66e
|
|
| MD5 |
a6cc7fa4e5dc2daf05d80723ab26bb4d
|
|
| BLAKE2b-256 |
81ceb0b3093f9973c1f8e7f47730a4f2d360e48c9939f5283feb475f694acc0f
|
File details
Details for the file aann-0.3.0-cp310-abi3-musllinux_1_2_i686.whl.
File metadata
- Download URL: aann-0.3.0-cp310-abi3-musllinux_1_2_i686.whl
- Upload date:
- Size: 611.9 kB
- Tags: CPython 3.10+, musllinux: musl 1.2+ i686
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
88f51ce734a22d85a1130982b11aac5ebdf2b6289969fc54d4a63565bf9d931d
|
|
| MD5 |
6232b84619983bb37d74c192dba2673d
|
|
| BLAKE2b-256 |
91267f3e26de8bd44e172a38796aad7be527864beed304fa0f4d21022131c002
|
File details
Details for the file aann-0.3.0-cp310-abi3-musllinux_1_2_armv7l.whl.
File metadata
- Download URL: aann-0.3.0-cp310-abi3-musllinux_1_2_armv7l.whl
- Upload date:
- Size: 656.1 kB
- Tags: CPython 3.10+, musllinux: musl 1.2+ ARMv7l
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4d9fa793192f60951bea94ad51bd94dd6b710ae03e74ba1eaa35ec72f1ca9172
|
|
| MD5 |
5f127d99b8a05187f138696dcacd161f
|
|
| BLAKE2b-256 |
e732ee50b7835c978aa085646f134362269273c241daee071109a3e0c6bace7d
|
File details
Details for the file aann-0.3.0-cp310-abi3-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: aann-0.3.0-cp310-abi3-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 540.8 kB
- Tags: CPython 3.10+, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b3e52c49dfd3ba32b41c8003044a2f8266196afce10e09ed96242e0a6c78f6e6
|
|
| MD5 |
26f6a79b3d2789654054cfd9eb12db52
|
|
| BLAKE2b-256 |
ee243d2e4c0096975a7de092e3de1b08e3cc7ac50e5830e3a2c3db9004993c65
|
File details
Details for the file aann-0.3.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: aann-0.3.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 372.6 kB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
abad0b2fd919b606f2d1a0dec9724c917de2bacbfea0120a99e5f862acaec121
|
|
| MD5 |
643e662859e7fe2c3c932db62a436575
|
|
| BLAKE2b-256 |
46042bcf22ebbea5a255e06a6a7ccc48e63c7561a73ee8c402a4b7526a38e32b
|
File details
Details for the file aann-0.3.0-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl.
File metadata
- Download URL: aann-0.3.0-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl
- Upload date:
- Size: 408.2 kB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ s390x
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b77592be5840a12d2dff8f61acbd38a20616d5323cc5eaefd8a0fe9866d7d485
|
|
| MD5 |
5bf2151bbe5e79c0bf4202a36561432a
|
|
| BLAKE2b-256 |
6ebc2e4f0c268a4b67af300fba7be5f74d38a629607d160de2edbad14e2e5a30
|
File details
Details for the file aann-0.3.0-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.
File metadata
- Download URL: aann-0.3.0-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
- Upload date:
- Size: 417.4 kB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ ppc64le
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ce4f9d848f41a1520b03a3a2684e562edf9c58e17004d92ac35eed87ea6a19a7
|
|
| MD5 |
76ab3742ce4a8e1fe9c791afd9c97aa8
|
|
| BLAKE2b-256 |
9d3c32b063cbd08b8e8f695ec2f634da7611e830a338db9ccb7ce75d9e273479
|
File details
Details for the file aann-0.3.0-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.
File metadata
- Download URL: aann-0.3.0-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
- Upload date:
- Size: 380.1 kB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ ARMv7l
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
27a053c1c44742cd1d75f8a5318561968feb95251745f826f1b898009e3e3df7
|
|
| MD5 |
dca60f264ba3044ade8f669adc8093c8
|
|
| BLAKE2b-256 |
aaeb34ff7c4ff121b598190d61dcd67f6b91787a127cedc638292bc5aa7d0875
|
File details
Details for the file aann-0.3.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: aann-0.3.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 365.1 kB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1d6614e8d6b63dd0c3b34ee65d0650b947b8cfb5a302fb19065db21faae5493f
|
|
| MD5 |
cd1ab495b3e1d2fc929778792bd74baa
|
|
| BLAKE2b-256 |
6ebe712e83d47b637b918f9165d0d4523a6e8ad55b1c318bf178bcd5fe3496c7
|
File details
Details for the file aann-0.3.0-cp310-abi3-manylinux_2_5_i686.manylinux1_i686.whl.
File metadata
- Download URL: aann-0.3.0-cp310-abi3-manylinux_2_5_i686.manylinux1_i686.whl
- Upload date:
- Size: 395.6 kB
- Tags: CPython 3.10+, manylinux: glibc 2.5+ i686
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b306f0b7c82aa6b2e4445932dd925d3f807c118e220b2f1382001df106b7885f
|
|
| MD5 |
7adb2cfbc6a1f2707568214996b521e4
|
|
| BLAKE2b-256 |
a81591eeddb611d8b6210219d09162847023cb66a65a5fa361d0ca21691ba90c
|
File details
Details for the file aann-0.3.0-cp310-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: aann-0.3.0-cp310-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 341.8 kB
- Tags: CPython 3.10+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bb5462558b1c706d66ed047478ae6fa9c83278003c1563d6b75d756c9ddd2514
|
|
| MD5 |
bc9b13781dfaf212d2f307d46628bbeb
|
|
| BLAKE2b-256 |
ae9f8a8960f4ba8d82c528c6c4c5ee584d442b531655cbab71eeaaa614f7b866
|
File details
Details for the file aann-0.3.0-cp310-abi3-macosx_10_12_x86_64.whl.
File metadata
- Download URL: aann-0.3.0-cp310-abi3-macosx_10_12_x86_64.whl
- Upload date:
- Size: 354.8 kB
- Tags: CPython 3.10+, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f6d3150b51877a96e8fd491bdd8235983b36193691b302b9e4712911741564c5
|
|
| MD5 |
b36787db2fda5ad730715a65d3c2b52f
|
|
| BLAKE2b-256 |
1728cf6ff05824f502ecdcb0e88d1ae01c3a945f06e84c92cfb325db456e252a
|