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
Metadata
Release files for aann 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| aann-0.3.0.tar.gz | 72.2 kB | Without provenance | Details |
Built distributions (wheels)
Total release size: 12.4 MB
Release files / aann-0.3.0.tar.gz
| Download URL | aann-0.3.0.tar.gz |
|---|---|
| Size | 72.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
494bb2a1d9fff50274fe1617b2c756a3f2dbadd4e46a621db70daf577e6d91f3
|
|
BLAKE2b-256 checksum How to use checksums |
3f5ce9c47ca33cef85093b387306a050d1f9538c92f6b6e2cac49cdbe8248c96
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp314-cp314t-win_arm64.whl
| Download URL | aann-0.3.0-cp314-cp314t-win_arm64.whl |
|---|---|
| Size | 245.1 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows ARM64 |
|
SHA-256 checksum How to use checksums |
9aeb95adcb1614c9d6f0750f6c5a7eda65d4656a839ace54c019700fa91e1238
|
|
BLAKE2b-256 checksum How to use checksums |
4fd86393c49471b5498590e9159e7c6d4c98668a7a925c66f6584a14962a338d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp314-cp314t-win_amd64.whl
| Download URL | aann-0.3.0-cp314-cp314t-win_amd64.whl |
|---|---|
| Size | 262.2 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows x86-64 |
|
SHA-256 checksum How to use checksums |
ceb488c34717711a5b9963296dcee52620e25690c7a282e88157dfbf75aa2478
|
|
BLAKE2b-256 checksum How to use checksums |
3e6446b7175ec97130d0da36567d00399a361b4882ec8e76f89db906ec36f72a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp314-cp314t-win32.whl
| Download URL | aann-0.3.0-cp314-cp314t-win32.whl |
|---|---|
| Size | 241.2 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows x86-32 |
|
SHA-256 checksum How to use checksums |
90005b6e587c96d2a042b1aaa4785410dcb6e61076cb3d1aaec7133fc6fe78c4
|
|
BLAKE2b-256 checksum How to use checksums |
49e173845ec547f36c18db250219b1ded66bb0a6f1e461a40ab0b2d2ce9822bc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl
| Download URL | aann-0.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 578.2 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
3555fc6e68e8e5ba6d1856c27cad518d810de416941ab8b30637f4bc10c23fb7
|
|
BLAKE2b-256 checksum How to use checksums |
a39908b2d3bcb74bcb6a80b41a1bc1a30f3ffbc4884c518ac2a76ca203c11c9e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp314-cp314t-musllinux_1_2_i686.whl
| Download URL | aann-0.3.0-cp314-cp314t-musllinux_1_2_i686.whl |
|---|---|
| Size | 606.1 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-32 |
|
SHA-256 checksum How to use checksums |
7480753291fe0717eebab7446dce99c3719d2c967719755fe907b27413955ca1
|
|
BLAKE2b-256 checksum How to use checksums |
01bf7f79dfaf28747c07719b9afd7f2c47707f17f4379f01b67b2f45631dd252
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp314-cp314t-musllinux_1_2_armv7l.whl
| Download URL | aann-0.3.0-cp314-cp314t-musllinux_1_2_armv7l.whl |
|---|---|
| Size | 650.2 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARMv7l |
|
SHA-256 checksum How to use checksums |
391e30d308487b62ef92ccbbb56badfda8d113d2f4bbd02d0bf5067ba13ddb01
|
|
BLAKE2b-256 checksum How to use checksums |
26eb695578887b271e5356b1b33c3f7c7eb10538c7061e9df737e3e3bdd80927
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl
| Download URL | aann-0.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 534.0 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
44e444daaa7952dc010f7e8e1d3eba01adf5ffa2b2355f18bf0353b81cb8b333
|
|
BLAKE2b-256 checksum How to use checksums |
08bee3da113c96b35f67e7507461695435265580fa1e1244e131a49e25a9feea
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | aann-0.3.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 366.0 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
8c62cc2dc7adb70bde7091fae51072a9ff343a84e468a1f951f0519c460afc3e
|
|
BLAKE2b-256 checksum How to use checksums |
86f11bb5ac34248ac9dc37e986d9b8540055cad9b18142dc09c3dc6d82bdd3b2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl
| Download URL | aann-0.3.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl |
|---|---|
| Size | 402.8 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ IBM System/390x |
|
SHA-256 checksum How to use checksums |
66e99d7da4dda588e59bdd57f2c7e2266a44eebac090a2356d280f0f0df4db69
|
|
BLAKE2b-256 checksum How to use checksums |
2ffb3a442f013203845695c7a084aa934db3c9e74b41dbf53331923231d38e8e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
| Download URL | aann-0.3.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl |
|---|---|
| Size | 410.7 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ PowerPC 64-le |
|
SHA-256 checksum How to use checksums |
25339e0822b29759daf2f1d82755d9022f9524fe27a5ec2a35a0434a5c1bf152
|
|
BLAKE2b-256 checksum How to use checksums |
f6c39f00ec645adf24a57f20e18fcc6c621288938c4adfecc098a99f5366a459
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
| Download URL | aann-0.3.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl |
|---|---|
| Size | 374.8 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARMv7l |
|
SHA-256 checksum How to use checksums |
01c6e20f04c0ee8cafa57d2d9ac757f486a69284eb34922fd288dc372253fb7b
|
|
BLAKE2b-256 checksum How to use checksums |
a557c63bd069decb7976e84578b3cbd90ff43f39bf6ed7bcf11b0858ac2e2b28
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | aann-0.3.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 357.4 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
facf26efd0a4baf4c6b131ca88333d8040d5b51070fcd99cf2b49be94bc2f0f9
|
|
BLAKE2b-256 checksum How to use checksums |
13fc7a49290a3bb6503935c0e750ba68f180202c1735f61036d04cb06e1fd129
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl
| Download URL | aann-0.3.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl |
|---|---|
| Size | 387.9 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.5+ x86-32 |
|
SHA-256 checksum How to use checksums |
8b212b88ab031f2835691e48c5d7f5c8e2d6d12cb05048b49db26f54dd26c089
|
|
BLAKE2b-256 checksum How to use checksums |
10572b03ef98e947048d47b6fe561c59339d7bea75660f64070f882280c20ee9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp314-cp314t-macosx_11_0_arm64.whl
| Download URL | aann-0.3.0-cp314-cp314t-macosx_11_0_arm64.whl |
|---|---|
| Size | 334.0 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
3f9ba97b06e743427ba29a42da1b606d439e630b61ef97dcdabbe6094b2f27c0
|
|
BLAKE2b-256 checksum How to use checksums |
e5f72d4725eb3919fff35e246bb0ab5a2659a68a1d0d0815739172f93af05fee
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp314-cp314t-macosx_10_12_x86_64.whl
| Download URL | aann-0.3.0-cp314-cp314t-macosx_10_12_x86_64.whl |
|---|---|
| Size | 353.6 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
cdb06decb3b84015ac762fb09436868b62a079ddcc5efefd98570be3acfefaea
|
|
BLAKE2b-256 checksum How to use checksums |
a6de1a05cf2334883aed17482663c36278c6dd3dcbbfb2ec8b739973abf0fc40
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp310-abi3-win_arm64.whl
| Download URL | aann-0.3.0-cp310-abi3-win_arm64.whl |
|---|---|
| Size | 252.6 kB |
| Tags | CPython 3.10 Windows ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
c42b7c7897fd4f4d2fddeb15bb1a110d4a04e09ae57652f84f86930a5fd2f292
|
|
BLAKE2b-256 checksum How to use checksums |
c25f84c11e8b2b5d81e8f630ee6d8d24a8e50351bc58ff9182a97c0444cad096
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp310-abi3-win_amd64.whl
| Download URL | aann-0.3.0-cp310-abi3-win_amd64.whl |
|---|---|
| Size | 269.1 kB |
| Tags | CPython 3.10 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
f67d5016b16b7d6af3ecba5214b73425fd42ee410a0569be73e462586c08f440
|
|
BLAKE2b-256 checksum How to use checksums |
25481ffb018dab395aa6035edd1e93132c29ce2408b5fc23620e87f8f1e97109
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp310-abi3-win32.whl
| Download URL | aann-0.3.0-cp310-abi3-win32.whl |
|---|---|
| Size | 250.1 kB |
| Tags | CPython 3.10 Windows x86-32 abi3 |
|
SHA-256 checksum How to use checksums |
cbb5be7dd47ca5a5c772b5b4452c4b6f376c54536ed0bd8ffaae69013b421ae5
|
|
BLAKE2b-256 checksum How to use checksums |
66d2b58b42fcb4337b4f30ebd63ef08954af209472b75a90f417a4892519e53b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp310-abi3-musllinux_1_2_x86_64.whl
| Download URL | aann-0.3.0-cp310-abi3-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 584.4 kB |
| Tags | CPython 3.10 Linux musl 1.2+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
2240656f4a3da5b5f43d2ac485625bc64289a906b4a75b84b4faaa9d6600f66e
|
|
BLAKE2b-256 checksum How to use checksums |
81ceb0b3093f9973c1f8e7f47730a4f2d360e48c9939f5283feb475f694acc0f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp310-abi3-musllinux_1_2_i686.whl
| Download URL | aann-0.3.0-cp310-abi3-musllinux_1_2_i686.whl |
|---|---|
| Size | 611.9 kB |
| Tags | CPython 3.10 Linux musl 1.2+ x86-32 abi3 |
|
SHA-256 checksum How to use checksums |
88f51ce734a22d85a1130982b11aac5ebdf2b6289969fc54d4a63565bf9d931d
|
|
BLAKE2b-256 checksum How to use checksums |
91267f3e26de8bd44e172a38796aad7be527864beed304fa0f4d21022131c002
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp310-abi3-musllinux_1_2_armv7l.whl
| Download URL | aann-0.3.0-cp310-abi3-musllinux_1_2_armv7l.whl |
|---|---|
| Size | 656.1 kB |
| Tags | CPython 3.10 Linux musl 1.2+ ARMv7l abi3 |
|
SHA-256 checksum How to use checksums |
4d9fa793192f60951bea94ad51bd94dd6b710ae03e74ba1eaa35ec72f1ca9172
|
|
BLAKE2b-256 checksum How to use checksums |
e732ee50b7835c978aa085646f134362269273c241daee071109a3e0c6bace7d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp310-abi3-musllinux_1_2_aarch64.whl
| Download URL | aann-0.3.0-cp310-abi3-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 540.8 kB |
| Tags | CPython 3.10 Linux musl 1.2+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
b3e52c49dfd3ba32b41c8003044a2f8266196afce10e09ed96242e0a6c78f6e6
|
|
BLAKE2b-256 checksum How to use checksums |
ee243d2e4c0096975a7de092e3de1b08e3cc7ac50e5830e3a2c3db9004993c65
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | aann-0.3.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 372.6 kB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
abad0b2fd919b606f2d1a0dec9724c917de2bacbfea0120a99e5f862acaec121
|
|
BLAKE2b-256 checksum How to use checksums |
46042bcf22ebbea5a255e06a6a7ccc48e63c7561a73ee8c402a4b7526a38e32b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl
| Download URL | aann-0.3.0-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl |
|---|---|
| Size | 408.2 kB |
| Tags | CPython 3.10 Linux glibc 2.17+ IBM System/390x abi3 |
|
SHA-256 checksum How to use checksums |
b77592be5840a12d2dff8f61acbd38a20616d5323cc5eaefd8a0fe9866d7d485
|
|
BLAKE2b-256 checksum How to use checksums |
6ebc2e4f0c268a4b67af300fba7be5f74d38a629607d160de2edbad14e2e5a30
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
| Download URL | aann-0.3.0-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl |
|---|---|
| Size | 417.4 kB |
| Tags | CPython 3.10 Linux glibc 2.17+ PowerPC 64-le abi3 |
|
SHA-256 checksum How to use checksums |
ce4f9d848f41a1520b03a3a2684e562edf9c58e17004d92ac35eed87ea6a19a7
|
|
BLAKE2b-256 checksum How to use checksums |
9d3c32b063cbd08b8e8f695ec2f634da7611e830a338db9ccb7ce75d9e273479
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
| Download URL | aann-0.3.0-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl |
|---|---|
| Size | 380.1 kB |
| Tags | CPython 3.10 Linux glibc 2.17+ ARMv7l abi3 |
|
SHA-256 checksum How to use checksums |
27a053c1c44742cd1d75f8a5318561968feb95251745f826f1b898009e3e3df7
|
|
BLAKE2b-256 checksum How to use checksums |
aaeb34ff7c4ff121b598190d61dcd67f6b91787a127cedc638292bc5aa7d0875
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | aann-0.3.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 365.1 kB |
| Tags | CPython 3.10 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
1d6614e8d6b63dd0c3b34ee65d0650b947b8cfb5a302fb19065db21faae5493f
|
|
BLAKE2b-256 checksum How to use checksums |
6ebe712e83d47b637b918f9165d0d4523a6e8ad55b1c318bf178bcd5fe3496c7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp310-abi3-manylinux_2_5_i686.manylinux1_i686.whl
| Download URL | aann-0.3.0-cp310-abi3-manylinux_2_5_i686.manylinux1_i686.whl |
|---|---|
| Size | 395.6 kB |
| Tags | CPython 3.10 Linux glibc 2.5+ x86-32 abi3 |
|
SHA-256 checksum How to use checksums |
b306f0b7c82aa6b2e4445932dd925d3f807c118e220b2f1382001df106b7885f
|
|
BLAKE2b-256 checksum How to use checksums |
a81591eeddb611d8b6210219d09162847023cb66a65a5fa361d0ca21691ba90c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp310-abi3-macosx_11_0_arm64.whl
| Download URL | aann-0.3.0-cp310-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 341.8 kB |
| Tags | CPython 3.10 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
bb5462558b1c706d66ed047478ae6fa9c83278003c1563d6b75d756c9ddd2514
|
|
BLAKE2b-256 checksum How to use checksums |
ae9f8a8960f4ba8d82c528c6c4c5ee584d442b531655cbab71eeaaa614f7b866
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / aann-0.3.0-cp310-abi3-macosx_10_12_x86_64.whl
| Download URL | aann-0.3.0-cp310-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 354.8 kB |
| Tags | CPython 3.10 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
f6d3150b51877a96e8fd491bdd8235983b36193691b302b9e4712911741564c5
|
|
BLAKE2b-256 checksum How to use checksums |
1728cf6ff05824f502ecdcb0e88d1ae01c3a945f06e84c92cfb325db456e252a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Security for aann 0.3.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.