hannoy 0.2.0

HNSW Approximate Nearest Neighbors in Rust, based on LMDB and optimized for memory usage
Documentation
import hannoy
from hannoy import Reader


def test_exports() -> None:
    assert hannoy.__all__ == ["Metric", "Database", "Writer", "Reader"]


def test_read(db: hannoy.Database) -> None:
    reader: Reader = db.reader(0)
    query = [0.0, 1.0, 0.0]

    res = reader.by_vec(query, n=2)
    assert len(res) == 2

    (item_id, dist) = res[0]
    assert item_id == 1
    assert dist == 0.0


def test_read_by_item(db: hannoy.Database) -> None:
    reader: Reader = db.reader(0)

    res = reader.by_item(1, n=2)
    assert res is not None
    assert len(res) == 2

    assert {item_id for item_id, _ in res} == {0, 2}
    assert not any(d == 0 for _, d in res)


def test_multithreaded_reads(db) -> None:
    import threading

    def _read(db: hannoy.Database, query: list[float]):
        reader = db.reader(0)
        t_id = threading.get_ident()
        print(f"nns from thread {t_id}: {reader.by_vec(query, 1)}")

    threads = []
    for q in [[1.0, 0.0, 0.0,], [0.0, 1.0, 0.0]]:
        t = threading.Thread(target=_read, args=(db, q))
        threads.append(t)

    for t in threads:
        t.start()

    for t in threads:
        t.join()