nmslib-rs 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- nmslib_rs-0.1.0/.cargo/config.toml +3 -0
- nmslib_rs-0.1.0/.github/workflows/ci.yml +51 -0
- nmslib_rs-0.1.0/.github/workflows/release.yml +115 -0
- nmslib_rs-0.1.0/.gitignore +5 -0
- nmslib_rs-0.1.0/Cargo.lock +1145 -0
- nmslib_rs-0.1.0/Cargo.toml +41 -0
- nmslib_rs-0.1.0/LICENSE +21 -0
- nmslib_rs-0.1.0/NOTES.md +228 -0
- nmslib_rs-0.1.0/PKG-INFO +208 -0
- nmslib_rs-0.1.0/README.md +191 -0
- nmslib_rs-0.1.0/RELEASING.md +86 -0
- nmslib_rs-0.1.0/bench/brute_force.py +76 -0
- nmslib_rs-0.1.0/bench/check_saved.py +128 -0
- nmslib_rs-0.1.0/bench/common.py +244 -0
- nmslib_rs-0.1.0/bench/compare.py +67 -0
- nmslib_rs-0.1.0/bench/eval_recall.py +149 -0
- nmslib_rs-0.1.0/bench/eval_rust.py +96 -0
- nmslib_rs-0.1.0/bench/mmap_pss.py +131 -0
- nmslib_rs-0.1.0/bench/nmslib_baseline.py +151 -0
- nmslib_rs-0.1.0/bench/results/mmap_pss_nmslib_rs_sift_1M.json +155 -0
- nmslib_rs-0.1.0/bench/results/nmslib_100k.json +774 -0
- nmslib_rs-0.1.0/bench/results/nmslib_100k_mac.json +231 -0
- nmslib_rs-0.1.0/bench/results/nmslib_1M.json +230 -0
- nmslib_rs-0.1.0/bench/results/nmslib_1M_mac.json +231 -0
- nmslib_rs-0.1.0/bench/results/nmslib_native_100k.json +774 -0
- nmslib_rs-0.1.0/bench/results/nmslib_native_1M.json +230 -0
- nmslib_rs-0.1.0/bench/results/nmslib_native_glove_1.18M.json +231 -0
- nmslib_rs-0.1.0/bench/results/nmslib_native_glove_100k.json +775 -0
- nmslib_rs-0.1.0/bench/results/nmslib_rs_100k.json +364 -0
- nmslib_rs-0.1.0/bench/results/nmslib_rs_100k_buildlayout.json +362 -0
- nmslib_rs-0.1.0/bench/results/nmslib_rs_100k_mac.json +364 -0
- nmslib_rs-0.1.0/bench/results/nmslib_rs_100k_phase3.json +325 -0
- nmslib_rs-0.1.0/bench/results/nmslib_rs_100k_phase4.json +365 -0
- nmslib_rs-0.1.0/bench/results/nmslib_rs_100k_phase5.json +362 -0
- nmslib_rs-0.1.0/bench/results/nmslib_rs_1M.json +364 -0
- nmslib_rs-0.1.0/bench/results/nmslib_rs_1M_buildlayout.json +362 -0
- nmslib_rs-0.1.0/bench/results/nmslib_rs_1M_mac.json +364 -0
- nmslib_rs-0.1.0/bench/results/nmslib_rs_1M_mac_prefetch.json +364 -0
- nmslib_rs-0.1.0/bench/results/nmslib_rs_1M_mmap.json +379 -0
- nmslib_rs-0.1.0/bench/results/nmslib_rs_1M_phase5.json +362 -0
- nmslib_rs-0.1.0/bench/results/nmslib_rs_glove_1.18M.json +364 -0
- nmslib_rs-0.1.0/bench/results/nmslib_rs_glove_1.18M_buildlayout.json +363 -0
- nmslib_rs-0.1.0/bench/results/nmslib_rs_glove_100k.json +364 -0
- nmslib_rs-0.1.0/bench/results/nmslib_rs_glove_100k_buildlayout.json +363 -0
- nmslib_rs-0.1.0/bench/results/saved_glove_1.18M.json +64 -0
- nmslib_rs-0.1.0/bench/results/saved_sift_1M.json +64 -0
- nmslib_rs-0.1.0/benches/simd.rs +86 -0
- nmslib_rs-0.1.0/examples/eval_sift.rs +122 -0
- nmslib_rs-0.1.0/examples/query_profile.rs +77 -0
- nmslib_rs-0.1.0/pyproject.toml +20 -0
- nmslib_rs-0.1.0/src/brute/tests.rs +124 -0
- nmslib_rs-0.1.0/src/brute.rs +195 -0
- nmslib_rs-0.1.0/src/frozen/tests.rs +317 -0
- nmslib_rs-0.1.0/src/frozen.rs +678 -0
- nmslib_rs-0.1.0/src/hnsw/tests.rs +456 -0
- nmslib_rs-0.1.0/src/hnsw.rs +1210 -0
- nmslib_rs-0.1.0/src/lib.rs +362 -0
- nmslib_rs-0.1.0/src/simd.rs +386 -0
- nmslib_rs-0.1.0/src/visited.rs +92 -0
- nmslib_rs-0.1.0/tests/test_binding.py +202 -0
- nmslib_rs-0.1.0/tests/test_brute_force.py +91 -0
- nmslib_rs-0.1.0/tests/test_persistence.py +98 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
name: ci
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: ["**"]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: ["**"]
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
test:
|
|
15
|
+
name: test (${{ matrix.os }})
|
|
16
|
+
runs-on: ${{ matrix.os }}
|
|
17
|
+
strategy:
|
|
18
|
+
fail-fast: false
|
|
19
|
+
matrix:
|
|
20
|
+
os: [ubuntu-latest, macos-latest]
|
|
21
|
+
steps:
|
|
22
|
+
- uses: actions/checkout@v6
|
|
23
|
+
|
|
24
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
25
|
+
with:
|
|
26
|
+
components: rustfmt
|
|
27
|
+
|
|
28
|
+
- name: Check formatting
|
|
29
|
+
run: cargo fmt --check
|
|
30
|
+
|
|
31
|
+
- uses: actions/setup-python@v6
|
|
32
|
+
with:
|
|
33
|
+
python-version: "3.12"
|
|
34
|
+
|
|
35
|
+
# .cargo/config.toml points PyO3 at .venv/bin/python, so the venv
|
|
36
|
+
# has to live at that path for cargo test to link.
|
|
37
|
+
- name: Create virtual environment
|
|
38
|
+
run: |
|
|
39
|
+
python -m venv .venv
|
|
40
|
+
.venv/bin/pip install --upgrade pip maturin numpy pytest
|
|
41
|
+
|
|
42
|
+
- name: Rust tests
|
|
43
|
+
run: cargo test
|
|
44
|
+
|
|
45
|
+
- name: Build and install extension
|
|
46
|
+
run: |
|
|
47
|
+
source .venv/bin/activate
|
|
48
|
+
maturin develop --release
|
|
49
|
+
|
|
50
|
+
- name: Python tests
|
|
51
|
+
run: .venv/bin/pytest tests
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
name: release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
# Manual runs build and test every wheel without publishing.
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
check-version:
|
|
15
|
+
name: check-version
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
if: startsWith(github.ref, 'refs/tags/')
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v6
|
|
20
|
+
- name: Tag matches Cargo.toml version
|
|
21
|
+
run: |
|
|
22
|
+
version=$(sed -n 's/^version = "\(.*\)"/\1/p' Cargo.toml | head -1)
|
|
23
|
+
if [ "v$version" != "$GITHUB_REF_NAME" ]; then
|
|
24
|
+
echo "Tag $GITHUB_REF_NAME does not match Cargo.toml version $version" >&2
|
|
25
|
+
exit 1
|
|
26
|
+
fi
|
|
27
|
+
|
|
28
|
+
wheels:
|
|
29
|
+
name: wheels (${{ matrix.platform.name }})
|
|
30
|
+
runs-on: ${{ matrix.platform.runner }}
|
|
31
|
+
strategy:
|
|
32
|
+
fail-fast: false
|
|
33
|
+
matrix:
|
|
34
|
+
platform:
|
|
35
|
+
- { name: linux-x86_64, runner: ubuntu-latest, target: x86_64, manylinux: auto }
|
|
36
|
+
- { name: linux-aarch64, runner: ubuntu-24.04-arm, target: aarch64, manylinux: auto }
|
|
37
|
+
- { name: macos-x86_64, runner: macos-15-intel, target: x86_64 }
|
|
38
|
+
- { name: macos-aarch64, runner: macos-latest, target: aarch64 }
|
|
39
|
+
- { name: windows-x64, runner: windows-latest, target: x64 }
|
|
40
|
+
steps:
|
|
41
|
+
- uses: actions/checkout@v6
|
|
42
|
+
|
|
43
|
+
# --find-interpreter builds one wheel per Python it finds. The manylinux
|
|
44
|
+
# container ships its own interpreters; macOS and Windows use these.
|
|
45
|
+
- uses: actions/setup-python@v6
|
|
46
|
+
with:
|
|
47
|
+
python-version: |
|
|
48
|
+
3.12
|
|
49
|
+
3.13
|
|
50
|
+
3.14
|
|
51
|
+
|
|
52
|
+
- name: Build wheels
|
|
53
|
+
uses: PyO3/maturin-action@v1
|
|
54
|
+
with:
|
|
55
|
+
target: ${{ matrix.platform.target }}
|
|
56
|
+
manylinux: ${{ matrix.platform.manylinux }}
|
|
57
|
+
args: --release --out dist --find-interpreter
|
|
58
|
+
|
|
59
|
+
- uses: astral-sh/setup-uv@v7
|
|
60
|
+
|
|
61
|
+
- name: Test wheel
|
|
62
|
+
shell: bash
|
|
63
|
+
run: |
|
|
64
|
+
set -e
|
|
65
|
+
uv venv --python 3.12 .venv-test
|
|
66
|
+
if [ -d .venv-test/Scripts ]; then source .venv-test/Scripts/activate; else source .venv-test/bin/activate; fi
|
|
67
|
+
uv pip install nmslib-rs --no-index --no-deps --find-links dist
|
|
68
|
+
uv pip install numpy pytest
|
|
69
|
+
pytest tests
|
|
70
|
+
|
|
71
|
+
- uses: actions/upload-artifact@v6
|
|
72
|
+
with:
|
|
73
|
+
name: wheels-${{ matrix.platform.name }}
|
|
74
|
+
path: dist
|
|
75
|
+
|
|
76
|
+
sdist:
|
|
77
|
+
name: sdist
|
|
78
|
+
runs-on: ubuntu-latest
|
|
79
|
+
steps:
|
|
80
|
+
- uses: actions/checkout@v6
|
|
81
|
+
- name: Build sdist
|
|
82
|
+
uses: PyO3/maturin-action@v1
|
|
83
|
+
with:
|
|
84
|
+
command: sdist
|
|
85
|
+
args: --out dist
|
|
86
|
+
- uses: actions/upload-artifact@v6
|
|
87
|
+
with:
|
|
88
|
+
name: wheels-sdist
|
|
89
|
+
path: dist
|
|
90
|
+
|
|
91
|
+
publish:
|
|
92
|
+
name: publish
|
|
93
|
+
runs-on: ubuntu-latest
|
|
94
|
+
needs: [check-version, wheels, sdist]
|
|
95
|
+
if: startsWith(github.ref, 'refs/tags/')
|
|
96
|
+
environment: pypi
|
|
97
|
+
permissions:
|
|
98
|
+
contents: write
|
|
99
|
+
id-token: write
|
|
100
|
+
steps:
|
|
101
|
+
- uses: actions/download-artifact@v7
|
|
102
|
+
with:
|
|
103
|
+
pattern: wheels-*
|
|
104
|
+
path: dist
|
|
105
|
+
merge-multiple: true
|
|
106
|
+
|
|
107
|
+
- name: Publish to PyPI
|
|
108
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
109
|
+
with:
|
|
110
|
+
packages-dir: dist
|
|
111
|
+
|
|
112
|
+
- name: Create GitHub release
|
|
113
|
+
env:
|
|
114
|
+
GH_TOKEN: ${{ github.token }}
|
|
115
|
+
run: gh release create "$GITHUB_REF_NAME" dist/* --repo "$GITHUB_REPOSITORY" --title "$GITHUB_REF_NAME" --generate-notes
|