Python bindings for Dynamic Learned Index - efficient approximate nearest neighbor search using learned models
Project description
py-dynamic-learned-index
Python bindings for Dynamic Learned Index - a high-performance approximate nearest neighbor search library that uses learned neural network models to efficiently index and query unstructured data.
Overview
The Dynamic Learned Index uses a multi-level hierarchical structure where each level contains a neural network model trained to predict the most likely bucket containing the requested data. This learned approach significantly improves search performance compared to traditional indexing methods.
Installation
Install from PyPI:
pip install py-dynamic-learned-index
Quick Start
from py_dynamic_learned_index import Index
# Create an index
index = Index(
input_shape=768, # Dimension of your vectors
buffer_size=5000, # Write buffer size
bucket_size=5000, # Max records per bucket
arity=3, # Fanout for compaction
device="cpu" # Use "cpu" or "cuda"
)
# Insert vectors with IDs
vector = [0.1, 0.2, 0.3, ...] # 768-dimensional vector
index.insert(vector, id=1)
# Search for k nearest neighbors
query = [0.15, 0.25, 0.35, ...]
results = index.search(query, k=10) # Returns top-10 nearest neighbors
# Delete an entry
index.delete(id=1)
Configuration
The index supports various configuration options to optimize for your use case:
- input_shape: Vector dimension (must match your data)
- buffer_size: Size of write buffer before flushing to index
- bucket_size: Maximum records per bucket before splitting
- arity: Fanout for tree compaction
- device: Compute device ("cpu" or "cuda")
- distance_fn: Distance metric ("dot" for cosine similarity, "l2" for euclidean)
For more details on configuration, see the main project README.
Features
- Learned Indexing: Uses neural networks to guide search, not just data distribution
- Dynamic: Supports online insertions and deletions
- Multi-level: Hierarchical structure for better scalability
- Fast: Optimized Rust implementation with Python bindings
- Flexible: Configurable models, distance functions, and compaction strategies
Examples
Full example with data loading and querying:
import numpy as np
from py_dynamic_learned_index import Index
# Create index for 768-dimensional vectors (e.g., embeddings)
index = Index(input_shape=768, buffer_size=5000, bucket_size=5000)
# Generate sample data
n_vectors = 100000
vectors = np.random.randn(n_vectors, 768).astype(np.float32)
# Insert vectors
for i, vector in enumerate(vectors):
index.insert(vector, id=i)
# Search
query = vectors[0] # Use first vector as query
neighbors = index.search(query, k=10)
print(f"Top 10 neighbors: {neighbors}")
For more examples, check the example.py file in the repository.
Performance
The Dynamic Learned Index is optimized for:
- High-dimensional vector search (e.g., embeddings from language/vision models)
- Large-scale datasets (millions of vectors)
- Both batch and online query scenarios
Performance depends on your data distribution, vector dimensionality, and hardware configuration.
Heavy Users: Building from Source
Simple Development Build
For a quick development build:
git clone https://github.com/plhis/DynamicLearnedIndex.git
cd DynamicLearnedIndex/py_dynamic_learned_index
pip install maturin
maturin develop --release
Sdist Installation with Custom Features
For advanced users building from source distribution with specific features:
# Set up environment
export CARGO_TARGET_DIR=$SCRATCHDIR/cargo-target
mkdir -p $CARGO_TARGET_DIR
# Install Rust (if not already installed)
if ! command -v rustup &> /dev/null; then
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source $HOME/.cargo/env
fi
# Install and set Rust nightly
rustup install nightly
rustup default nightly
# Install build dependencies
pip install maturin meson-python meson ninja cython
# Set compiler flags (optional)
export CC=gcc
export CXX=g++
export UV_LINK_MODE=copy
# Build with custom features (e.g., measure_time, mix)
export MATURIN_BUILD_ARGS="--features measure_time,mix"
# Install from source distribution without binary wheels
pip install --force-reinstall --no-binary :all: py-dynamic-learned-index --no-build-isolation
# Verify installation
python -c "import py_dynamic_learned_index; print(py_dynamic_learned_index.__version__)"
Note: Set MATURIN_BUILD_ARGS with the features you need (e.g., measure_time, mix, tch, candle, mkl).
Requirements
- Python >= 3.9
- For GPU support (cuda feature): NVIDIA GPU and CUDA toolkit
Documentation
For detailed configuration and usage documentation, see the main project repository.
License
Licensed under the GNU Lesser General Public License v3.0 or later (LGPL-3.0-or-later).
See the LICENSE file in the main repository for full license text.
Contributing
Contributions are welcome! Please see the main repository for contribution guidelines.
Project details
Release history Release notifications | RSS feed
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 py_dynamic_learned_index-0.1.12.tar.gz.
File metadata
- Download URL: py_dynamic_learned_index-0.1.12.tar.gz
- Upload date:
- Size: 121.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3130cdd610c4e97546befa5ff059c635ecd661beb52ea52e4eef79ce906fba93
|
|
| MD5 |
95f583ef511d134318df0b7d74f18000
|
|
| BLAKE2b-256 |
91dab8246433fcbb64e4f5067467ba3311e5d14200d9a88e43d772de14316117
|
Provenance
The following attestation bundles were made for py_dynamic_learned_index-0.1.12.tar.gz:
Publisher:
publish-pypi.yml on simonplhak/DynamicLearnedIndex
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
py_dynamic_learned_index-0.1.12.tar.gz -
Subject digest:
3130cdd610c4e97546befa5ff059c635ecd661beb52ea52e4eef79ce906fba93 - Sigstore transparency entry: 1442009964
- Sigstore integration time:
-
Permalink:
simonplhak/DynamicLearnedIndex@43a5b7895e1999e85e176cbf3c7c0a863d46cbcb -
Branch / Tag:
refs/heads/master - Owner: https://github.com/simonplhak
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@43a5b7895e1999e85e176cbf3c7c0a863d46cbcb -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file py_dynamic_learned_index-0.1.12-cp312-cp312-manylinux_2_39_x86_64.whl.
File metadata
- Download URL: py_dynamic_learned_index-0.1.12-cp312-cp312-manylinux_2_39_x86_64.whl
- Upload date:
- Size: 1.4 MB
- Tags: CPython 3.12, manylinux: glibc 2.39+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b1c070bbb19497b5c89dc67333e3f971afb0e7dd5ddb3dd71f73291edc5fa376
|
|
| MD5 |
781ba822e344c9970b95827259eff01b
|
|
| BLAKE2b-256 |
269a2ca4cc7eef87d05fac9ebe3e2294715f57381166bec0d1947903144fc0fb
|
Provenance
The following attestation bundles were made for py_dynamic_learned_index-0.1.12-cp312-cp312-manylinux_2_39_x86_64.whl:
Publisher:
publish-pypi.yml on simonplhak/DynamicLearnedIndex
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
py_dynamic_learned_index-0.1.12-cp312-cp312-manylinux_2_39_x86_64.whl -
Subject digest:
b1c070bbb19497b5c89dc67333e3f971afb0e7dd5ddb3dd71f73291edc5fa376 - Sigstore transparency entry: 1442010203
- Sigstore integration time:
-
Permalink:
simonplhak/DynamicLearnedIndex@43a5b7895e1999e85e176cbf3c7c0a863d46cbcb -
Branch / Tag:
refs/heads/master - Owner: https://github.com/simonplhak
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@43a5b7895e1999e85e176cbf3c7c0a863d46cbcb -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file py_dynamic_learned_index-0.1.12-cp312-cp312-manylinux_2_39_aarch64.whl.
File metadata
- Download URL: py_dynamic_learned_index-0.1.12-cp312-cp312-manylinux_2_39_aarch64.whl
- Upload date:
- Size: 1.4 MB
- Tags: CPython 3.12, manylinux: glibc 2.39+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5c472d657f8917b10c13cc4814184fafb029435d3cd2b49adbfa40fb5981c3e1
|
|
| MD5 |
53fc27b8c430a6892af2d46f0aff574a
|
|
| BLAKE2b-256 |
5e8f19974c73b106f3d70142e465000c1723422cbd6181f4a697bacd56eb0f9a
|
Provenance
The following attestation bundles were made for py_dynamic_learned_index-0.1.12-cp312-cp312-manylinux_2_39_aarch64.whl:
Publisher:
publish-pypi.yml on simonplhak/DynamicLearnedIndex
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
py_dynamic_learned_index-0.1.12-cp312-cp312-manylinux_2_39_aarch64.whl -
Subject digest:
5c472d657f8917b10c13cc4814184fafb029435d3cd2b49adbfa40fb5981c3e1 - Sigstore transparency entry: 1442010062
- Sigstore integration time:
-
Permalink:
simonplhak/DynamicLearnedIndex@43a5b7895e1999e85e176cbf3c7c0a863d46cbcb -
Branch / Tag:
refs/heads/master - Owner: https://github.com/simonplhak
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@43a5b7895e1999e85e176cbf3c7c0a863d46cbcb -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file py_dynamic_learned_index-0.1.12-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: py_dynamic_learned_index-0.1.12-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
89dc88d0ad1729db0c5603a5f030bf2bb68251d01e1ffe6bbdf618fd4e8edc28
|
|
| MD5 |
f12cad4b5c3ac1182fb1a5f4e104a0a9
|
|
| BLAKE2b-256 |
54d25a3fce8e92a7ecf63bcef4390a70c27d0d02e786ebdbb4feb1527d6e67fb
|
Provenance
The following attestation bundles were made for py_dynamic_learned_index-0.1.12-cp312-cp312-macosx_11_0_arm64.whl:
Publisher:
publish-pypi.yml on simonplhak/DynamicLearnedIndex
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
py_dynamic_learned_index-0.1.12-cp312-cp312-macosx_11_0_arm64.whl -
Subject digest:
89dc88d0ad1729db0c5603a5f030bf2bb68251d01e1ffe6bbdf618fd4e8edc28 - Sigstore transparency entry: 1442010324
- Sigstore integration time:
-
Permalink:
simonplhak/DynamicLearnedIndex@43a5b7895e1999e85e176cbf3c7c0a863d46cbcb -
Branch / Tag:
refs/heads/master - Owner: https://github.com/simonplhak
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@43a5b7895e1999e85e176cbf3c7c0a863d46cbcb -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file py_dynamic_learned_index-0.1.12-cp312-cp312-macosx_10_12_x86_64.whl.
File metadata
- Download URL: py_dynamic_learned_index-0.1.12-cp312-cp312-macosx_10_12_x86_64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.12, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
72daba5659f8330715a644c447dffc62d56e04aaa81951bdcfd6df8755c0615e
|
|
| MD5 |
a4623b6185f56d15828651d403e760b2
|
|
| BLAKE2b-256 |
6b3e1dd70bb8de64183751cbdf40f74ead4b7f5fb9ce4f5a15500ae46cd3ba40
|
Provenance
The following attestation bundles were made for py_dynamic_learned_index-0.1.12-cp312-cp312-macosx_10_12_x86_64.whl:
Publisher:
publish-pypi.yml on simonplhak/DynamicLearnedIndex
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
py_dynamic_learned_index-0.1.12-cp312-cp312-macosx_10_12_x86_64.whl -
Subject digest:
72daba5659f8330715a644c447dffc62d56e04aaa81951bdcfd6df8755c0615e - Sigstore transparency entry: 1442010136
- Sigstore integration time:
-
Permalink:
simonplhak/DynamicLearnedIndex@43a5b7895e1999e85e176cbf3c7c0a863d46cbcb -
Branch / Tag:
refs/heads/master - Owner: https://github.com/simonplhak
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@43a5b7895e1999e85e176cbf3c7c0a863d46cbcb -
Trigger Event:
workflow_dispatch
-
Statement type: