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.
Files changed (62) hide show
  1. nmslib_rs-0.1.0/.cargo/config.toml +3 -0
  2. nmslib_rs-0.1.0/.github/workflows/ci.yml +51 -0
  3. nmslib_rs-0.1.0/.github/workflows/release.yml +115 -0
  4. nmslib_rs-0.1.0/.gitignore +5 -0
  5. nmslib_rs-0.1.0/Cargo.lock +1145 -0
  6. nmslib_rs-0.1.0/Cargo.toml +41 -0
  7. nmslib_rs-0.1.0/LICENSE +21 -0
  8. nmslib_rs-0.1.0/NOTES.md +228 -0
  9. nmslib_rs-0.1.0/PKG-INFO +208 -0
  10. nmslib_rs-0.1.0/README.md +191 -0
  11. nmslib_rs-0.1.0/RELEASING.md +86 -0
  12. nmslib_rs-0.1.0/bench/brute_force.py +76 -0
  13. nmslib_rs-0.1.0/bench/check_saved.py +128 -0
  14. nmslib_rs-0.1.0/bench/common.py +244 -0
  15. nmslib_rs-0.1.0/bench/compare.py +67 -0
  16. nmslib_rs-0.1.0/bench/eval_recall.py +149 -0
  17. nmslib_rs-0.1.0/bench/eval_rust.py +96 -0
  18. nmslib_rs-0.1.0/bench/mmap_pss.py +131 -0
  19. nmslib_rs-0.1.0/bench/nmslib_baseline.py +151 -0
  20. nmslib_rs-0.1.0/bench/results/mmap_pss_nmslib_rs_sift_1M.json +155 -0
  21. nmslib_rs-0.1.0/bench/results/nmslib_100k.json +774 -0
  22. nmslib_rs-0.1.0/bench/results/nmslib_100k_mac.json +231 -0
  23. nmslib_rs-0.1.0/bench/results/nmslib_1M.json +230 -0
  24. nmslib_rs-0.1.0/bench/results/nmslib_1M_mac.json +231 -0
  25. nmslib_rs-0.1.0/bench/results/nmslib_native_100k.json +774 -0
  26. nmslib_rs-0.1.0/bench/results/nmslib_native_1M.json +230 -0
  27. nmslib_rs-0.1.0/bench/results/nmslib_native_glove_1.18M.json +231 -0
  28. nmslib_rs-0.1.0/bench/results/nmslib_native_glove_100k.json +775 -0
  29. nmslib_rs-0.1.0/bench/results/nmslib_rs_100k.json +364 -0
  30. nmslib_rs-0.1.0/bench/results/nmslib_rs_100k_buildlayout.json +362 -0
  31. nmslib_rs-0.1.0/bench/results/nmslib_rs_100k_mac.json +364 -0
  32. nmslib_rs-0.1.0/bench/results/nmslib_rs_100k_phase3.json +325 -0
  33. nmslib_rs-0.1.0/bench/results/nmslib_rs_100k_phase4.json +365 -0
  34. nmslib_rs-0.1.0/bench/results/nmslib_rs_100k_phase5.json +362 -0
  35. nmslib_rs-0.1.0/bench/results/nmslib_rs_1M.json +364 -0
  36. nmslib_rs-0.1.0/bench/results/nmslib_rs_1M_buildlayout.json +362 -0
  37. nmslib_rs-0.1.0/bench/results/nmslib_rs_1M_mac.json +364 -0
  38. nmslib_rs-0.1.0/bench/results/nmslib_rs_1M_mac_prefetch.json +364 -0
  39. nmslib_rs-0.1.0/bench/results/nmslib_rs_1M_mmap.json +379 -0
  40. nmslib_rs-0.1.0/bench/results/nmslib_rs_1M_phase5.json +362 -0
  41. nmslib_rs-0.1.0/bench/results/nmslib_rs_glove_1.18M.json +364 -0
  42. nmslib_rs-0.1.0/bench/results/nmslib_rs_glove_1.18M_buildlayout.json +363 -0
  43. nmslib_rs-0.1.0/bench/results/nmslib_rs_glove_100k.json +364 -0
  44. nmslib_rs-0.1.0/bench/results/nmslib_rs_glove_100k_buildlayout.json +363 -0
  45. nmslib_rs-0.1.0/bench/results/saved_glove_1.18M.json +64 -0
  46. nmslib_rs-0.1.0/bench/results/saved_sift_1M.json +64 -0
  47. nmslib_rs-0.1.0/benches/simd.rs +86 -0
  48. nmslib_rs-0.1.0/examples/eval_sift.rs +122 -0
  49. nmslib_rs-0.1.0/examples/query_profile.rs +77 -0
  50. nmslib_rs-0.1.0/pyproject.toml +20 -0
  51. nmslib_rs-0.1.0/src/brute/tests.rs +124 -0
  52. nmslib_rs-0.1.0/src/brute.rs +195 -0
  53. nmslib_rs-0.1.0/src/frozen/tests.rs +317 -0
  54. nmslib_rs-0.1.0/src/frozen.rs +678 -0
  55. nmslib_rs-0.1.0/src/hnsw/tests.rs +456 -0
  56. nmslib_rs-0.1.0/src/hnsw.rs +1210 -0
  57. nmslib_rs-0.1.0/src/lib.rs +362 -0
  58. nmslib_rs-0.1.0/src/simd.rs +386 -0
  59. nmslib_rs-0.1.0/src/visited.rs +92 -0
  60. nmslib_rs-0.1.0/tests/test_binding.py +202 -0
  61. nmslib_rs-0.1.0/tests/test_brute_force.py +91 -0
  62. nmslib_rs-0.1.0/tests/test_persistence.py +98 -0
@@ -0,0 +1,3 @@
1
+ [env]
2
+ # Use the project venv (Python 3.12) for pyo3 builds, matching maturin.
3
+ PYO3_PYTHON = { value = ".venv/bin/python", relative = true }
@@ -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
@@ -0,0 +1,5 @@
1
+ target/
2
+ .venv/
3
+ bench/data/
4
+ __pycache__/
5
+ .venv-nmslib-native/