hyper-fingerprints 0.2.1__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 (40) hide show
  1. hyper_fingerprints-0.2.1/.github/workflows/ci.yml +201 -0
  2. hyper_fingerprints-0.2.1/.gitignore +10 -0
  3. hyper_fingerprints-0.2.1/CHANGELOG.md +84 -0
  4. hyper_fingerprints-0.2.1/CLAUDE.md +6 -0
  5. hyper_fingerprints-0.2.1/Cargo.lock +339 -0
  6. hyper_fingerprints-0.2.1/Cargo.toml +18 -0
  7. hyper_fingerprints-0.2.1/DEVELOP.md +193 -0
  8. hyper_fingerprints-0.2.1/LICENSE +21 -0
  9. hyper_fingerprints-0.2.1/PKG-INFO +14 -0
  10. hyper_fingerprints-0.2.1/README.md +226 -0
  11. hyper_fingerprints-0.2.1/RUST_EXTENSION.md +479 -0
  12. hyper_fingerprints-0.2.1/banner.png +0 -0
  13. hyper_fingerprints-0.2.1/build.sh +73 -0
  14. hyper_fingerprints-0.2.1/examples/00_quickstart.ipynb +373 -0
  15. hyper_fingerprints-0.2.1/experiments/benchmark_fps.py +416 -0
  16. hyper_fingerprints-0.2.1/experiments/molecules.smi +10000 -0
  17. hyper_fingerprints-0.2.1/experiments/profile_hdf.py +343 -0
  18. hyper_fingerprints-0.2.1/experiments/results/benchmark.csv +28 -0
  19. hyper_fingerprints-0.2.1/experiments/results/benchmark.png +0 -0
  20. hyper_fingerprints-0.2.1/experiments/results/profile_hdf.csv +8 -0
  21. hyper_fingerprints-0.2.1/hyper_fingerprints/VERSION +1 -0
  22. hyper_fingerprints-0.2.1/hyper_fingerprints/__init__.py +32 -0
  23. hyper_fingerprints-0.2.1/hyper_fingerprints/_core.pyi +73 -0
  24. hyper_fingerprints-0.2.1/hyper_fingerprints/codebook.py +51 -0
  25. hyper_fingerprints-0.2.1/hyper_fingerprints/encoder.py +380 -0
  26. hyper_fingerprints-0.2.1/hyper_fingerprints/features.py +173 -0
  27. hyper_fingerprints-0.2.1/hyper_fingerprints/utils.py +161 -0
  28. hyper_fingerprints-0.2.1/noxfile.py +41 -0
  29. hyper_fingerprints-0.2.1/pyproject.toml +36 -0
  30. hyper_fingerprints-0.2.1/release.sh +107 -0
  31. hyper_fingerprints-0.2.1/src/lib.rs +704 -0
  32. hyper_fingerprints-0.2.1/tests/benchmark_encoder.py +88 -0
  33. hyper_fingerprints-0.2.1/tests/fixtures/benchmark_torch.json +266 -0
  34. hyper_fingerprints-0.2.1/tests/fixtures/regression_data.npz +0 -0
  35. hyper_fingerprints-0.2.1/tests/generate_fixtures.py +121 -0
  36. hyper_fingerprints-0.2.1/tests/test_encoder.py +227 -0
  37. hyper_fingerprints-0.2.1/tests/test_features.py +87 -0
  38. hyper_fingerprints-0.2.1/tests/test_regression.py +158 -0
  39. hyper_fingerprints-0.2.1/tests/test_rust_backend.py +224 -0
  40. hyper_fingerprints-0.2.1/uv.lock +956 -0
@@ -0,0 +1,201 @@
1
+ # CI: build wheels for all platforms, run tests, publish to PyPI on tags.
2
+ #
3
+ # How it works:
4
+ #
5
+ # 1. TRIGGERS:
6
+ # - Push to master: builds wheels + runs tests (no publish)
7
+ # - Pull request: builds wheels + runs tests (no publish)
8
+ # - Tag push (v*): builds wheels + runs tests + publishes to PyPI
9
+ # - Manual trigger: builds wheels + runs tests (optionally publish)
10
+ #
11
+ # 2. BUILD JOBS (linux, macos, windows):
12
+ # Each uses PyO3/maturin-action which:
13
+ # - Installs Rust + maturin inside the runner
14
+ # - For Linux: runs inside a manylinux Docker container (glibc compat)
15
+ # - For macOS/Windows: builds natively on the runner
16
+ # - Produces an abi3 wheel (one wheel per platform, all Python 3.9+)
17
+ # - Uploads the wheel as a GitHub Actions artifact
18
+ #
19
+ # 3. TEST JOB:
20
+ # Downloads the Linux x86_64 wheel, installs it in a fresh venv,
21
+ # and runs the full pytest suite. This catches packaging issues
22
+ # (missing files, broken imports, etc.)
23
+ #
24
+ # 4. RELEASE JOB (tag pushes only):
25
+ # Downloads all wheel artifacts + sdist, publishes to PyPI.
26
+ # Uses PyPI trusted publishing (OIDC) -- no API token needed.
27
+ # Set up at: https://pypi.org/manage/project/.../settings/publishing/
28
+ #
29
+ # Prerequisites for PyPI publishing:
30
+ # 1. Create the project on PyPI
31
+ # 2. Add a "trusted publisher" for this GitHub repo:
32
+ # - Owner: <github-user>
33
+ # - Repository: hyper-fingerprints
34
+ # - Workflow: ci.yml
35
+ # - Environment: release
36
+ # 3. Push a tag: git tag v0.1.0 && git push origin v0.1.0
37
+
38
+ name: CI
39
+
40
+ on:
41
+ push:
42
+ branches: [master]
43
+ tags: ['v*']
44
+ pull_request:
45
+ workflow_dispatch:
46
+
47
+ permissions:
48
+ contents: read
49
+
50
+ jobs:
51
+ # -----------------------------------------------------------------------
52
+ # Build Linux wheels (manylinux, x86_64 + aarch64)
53
+ # -----------------------------------------------------------------------
54
+ linux:
55
+ runs-on: ${{ matrix.target == 'aarch64' && 'ubuntu-22.04' || 'ubuntu-22.04' }}
56
+ strategy:
57
+ matrix:
58
+ target: [x86_64, aarch64]
59
+ steps:
60
+ - uses: actions/checkout@v6
61
+ - uses: actions/setup-python@v6
62
+ with:
63
+ python-version: '3.11'
64
+
65
+ - name: Build wheels
66
+ uses: PyO3/maturin-action@v1
67
+ with:
68
+ target: ${{ matrix.target }}
69
+ # -i python3.11: tell maturin which interpreter to use inside the
70
+ # manylinux container so it produces abi3 wheels (not cp38)
71
+ args: --release --out dist -i python3.11
72
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
73
+ manylinux: auto
74
+
75
+ - name: Upload wheels
76
+ uses: actions/upload-artifact@v6
77
+ with:
78
+ name: wheels-linux-${{ matrix.target }}
79
+ path: dist
80
+
81
+ # -----------------------------------------------------------------------
82
+ # Build macOS wheels (arm64 native, x86_64 cross-compiled)
83
+ # -----------------------------------------------------------------------
84
+ macos:
85
+ runs-on: macos-latest
86
+ strategy:
87
+ matrix:
88
+ target: [x86_64, aarch64]
89
+ steps:
90
+ - uses: actions/checkout@v6
91
+ - uses: actions/setup-python@v6
92
+ with:
93
+ python-version: '3.11'
94
+
95
+ - name: Build wheels
96
+ uses: PyO3/maturin-action@v1
97
+ with:
98
+ target: ${{ matrix.target }}
99
+ args: --release --out dist
100
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
101
+
102
+ - name: Upload wheels
103
+ uses: actions/upload-artifact@v6
104
+ with:
105
+ name: wheels-macos-${{ matrix.target }}
106
+ path: dist
107
+
108
+ # -----------------------------------------------------------------------
109
+ # Build Windows wheels (x86_64)
110
+ # -----------------------------------------------------------------------
111
+ windows:
112
+ runs-on: windows-latest
113
+ steps:
114
+ - uses: actions/checkout@v6
115
+ - uses: actions/setup-python@v6
116
+ with:
117
+ python-version: '3.11'
118
+
119
+ - name: Build wheels
120
+ uses: PyO3/maturin-action@v1
121
+ with:
122
+ target: x64
123
+ args: --release --out dist
124
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
125
+
126
+ - name: Upload wheels
127
+ uses: actions/upload-artifact@v6
128
+ with:
129
+ name: wheels-windows-x64
130
+ path: dist
131
+
132
+ # -----------------------------------------------------------------------
133
+ # Build source distribution
134
+ # -----------------------------------------------------------------------
135
+ sdist:
136
+ runs-on: ubuntu-latest
137
+ steps:
138
+ - uses: actions/checkout@v6
139
+ - name: Build sdist
140
+ uses: PyO3/maturin-action@v1
141
+ with:
142
+ command: sdist
143
+ args: --out dist
144
+ - name: Upload sdist
145
+ uses: actions/upload-artifact@v6
146
+ with:
147
+ name: wheels-sdist
148
+ path: dist
149
+
150
+ # -----------------------------------------------------------------------
151
+ # Test: install the Linux wheel and run pytest
152
+ # -----------------------------------------------------------------------
153
+ test:
154
+ needs: [linux]
155
+ runs-on: ubuntu-latest
156
+ steps:
157
+ - uses: actions/checkout@v6
158
+ - uses: actions/setup-python@v6
159
+ with:
160
+ python-version: '3.11'
161
+
162
+ - name: Download Linux x86_64 wheel
163
+ uses: actions/download-artifact@v7
164
+ with:
165
+ name: wheels-linux-x86_64
166
+ path: dist
167
+
168
+ - name: Install wheel and test dependencies
169
+ run: |
170
+ pip install dist/hyper_fingerprints-*.whl
171
+ pip install pytest pytest-cov
172
+
173
+ - name: Run tests
174
+ run: pytest tests/ -v
175
+
176
+ # -----------------------------------------------------------------------
177
+ # Publish to PyPI (only on tag push)
178
+ # -----------------------------------------------------------------------
179
+ release:
180
+ name: Publish to PyPI
181
+ runs-on: ubuntu-latest
182
+ if: startsWith(github.ref, 'refs/tags/v')
183
+ needs: [linux, macos, windows, sdist, test]
184
+ environment: release
185
+ permissions:
186
+ id-token: write # required for trusted publishing
187
+ steps:
188
+ - name: Download all wheel artifacts
189
+ uses: actions/download-artifact@v7
190
+ with:
191
+ pattern: wheels-*
192
+ merge-multiple: true
193
+ path: dist
194
+
195
+ - name: List artifacts
196
+ run: ls -lh dist/
197
+
198
+ - name: Publish to PyPI
199
+ uses: pypa/gh-action-pypi-publish@release/v1
200
+ with:
201
+ packages-dir: dist/
@@ -0,0 +1,10 @@
1
+ __pycache__/
2
+ *.pyc
3
+ *.egg-info/
4
+ dist/
5
+ build/
6
+ .venv/
7
+ .nox/
8
+ .pytest_cache/
9
+ target/
10
+ *.so
@@ -0,0 +1,84 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/).
6
+
7
+ ## [0.2.1] - 2026-04-01
8
+
9
+ ### Fixed
10
+
11
+ - CI: pass `-i python3.11` to maturin in manylinux builds to produce correct
12
+ `abi3` wheel tags (was producing `cp38` wheels due to container default Python)
13
+ - CI: use `macos-latest` for macOS x86_64 builds (`macos-13` runner unavailable)
14
+
15
+ ## [0.2.0] - 2026-04-01
16
+
17
+ ### Added
18
+
19
+ - **Rust extension backend** for ~22x end-to-end encoding speedup
20
+ - `encode_batch_rs`: HRR message-passing via `realfft` (r2c/c2r FFT) with
21
+ molecule-level rayon parallelism and row-level FFT parallelism
22
+ - `prepare_batch_rs`: SMILES parsing and atom feature extraction via the
23
+ `purr` crate, replacing RDKit for the Rust path (~23x faster than Python
24
+ stages 1-4)
25
+ - GIL released during all Rust computation (`py.detach()`)
26
+ - Thread-local FFT scratch buffers to avoid allocation and contention
27
+ - **Configurable atom features** via `features` parameter on `Encoder`
28
+ - `features=["element", "degree", "charge", "hydrogens", "aromatic"]` (default)
29
+ - Any subset in any order; codebook size adapts automatically
30
+ - Feature registry in `features.py` with named extractors
31
+ - Works with both Python and Rust backends
32
+ - **Backend selection** via `backend` parameter on `Encoder`
33
+ - `"auto"` (default): use Rust if available, else NumPy
34
+ - `"rust"`: require Rust extension
35
+ - `"numpy"`: force pure-Python path
36
+ - **Cross-backend test suite** (`tests/test_rust_backend.py`)
37
+ - Parameterized regression tests across both backends
38
+ - Edge case tests: single-atom, disconnected graphs, charged atoms,
39
+ all supported elements, depth 0/1, large batches, normalize mode
40
+ - 35 new tests (76 total Python + 9 Rust `#[cfg(test)]`)
41
+ - **Benchmarking experiments** (`experiments/`)
42
+ - `benchmark_fps.py`: configurable sweep comparing Morgan, HDF-Rust, and
43
+ HDF-Python across fingerprint sizes with console table, CSV, and plot output
44
+ - `profile_hdf.py`: per-stage timing breakdown of the HDF pipeline for
45
+ both backends with stacked bar chart
46
+ - `molecules.smi`: 10,000 PubChem molecules for benchmarking
47
+ - **Build and release infrastructure**
48
+ - `build.sh`: build release wheels and sdist
49
+ - `release.sh`: bump version, test, tag, and push (CI publishes to PyPI)
50
+ - `nox -s build_test`: build wheel, install in clean venv, run full test suite
51
+ - GitHub Actions CI (`.github/workflows/ci.yml`): builds wheels for
52
+ Linux (x86_64, aarch64), macOS (x86_64, arm64), Windows (x64),
53
+ runs tests, and publishes to PyPI on tag push via trusted publishing
54
+ - Type stubs for the Rust module (`hyper_fingerprints/_core.pyi`)
55
+ - `DEVELOP.md` with development setup, CI, and release documentation
56
+ - `RUST_EXTENSION.md` with design notes and implementation status
57
+
58
+ ### Changed
59
+
60
+ - Build backend switched from hatchling to maturin (Rust toolchain required)
61
+ - `FeatureEncoder.encode()` refactored to use `encode_indices()` internally
62
+ - `features.py` refactored from hardcoded extraction to registry-based system
63
+ - `Encoder.save()` / `Encoder.load()` now persists the `features` list
64
+ (backward compatible: old files without `features` key default to all 5)
65
+
66
+ ## [0.1.0] - 2026-03-14
67
+
68
+ Initial release.
69
+
70
+ ### Added
71
+
72
+ - `Encoder` class for encoding molecules into fixed-size HRR hypervectors
73
+ - `encode()` for order-N fingerprints via message passing
74
+ - `encode_joint()` for combined order-0 + order-N representations
75
+ - `Encoder.save()` / `Encoder.load()` for persisting encoders as `.npz` files
76
+ - `cosine_similarity()` helper for pairwise vector comparison
77
+ - Configurable atom vocabulary, dimension, depth, and normalization
78
+ - 5-feature atom scheme: atom type, degree, formal charge, total Hs, aromaticity
79
+ - Deterministic codebook generation via seeded RNG
80
+ - Batch encoding of multiple molecules in a single call
81
+ - Support for both SMILES strings and RDKit `Mol` objects as input
82
+ - Regression test suite for numerical stability
83
+ - Multi-version testing with nox (Python 3.9-3.13)
84
+ - Quickstart notebook (`examples/00_quickstart.ipynb`)
@@ -0,0 +1,6 @@
1
+ # CLAUDE.md
2
+
3
+ ## Environment
4
+
5
+ - Always use `uv pip install` instead of `pip install` for installing packages.
6
+ - Always use the `.venv` virtual environment for running anything (e.g., `.venv/bin/python`).
@@ -0,0 +1,339 @@
1
+ # This file is automatically @generated by Cargo.
2
+ # It is not intended for manual editing.
3
+ version = 4
4
+
5
+ [[package]]
6
+ name = "autocfg"
7
+ version = "1.5.0"
8
+ source = "registry+https://github.com/rust-lang/crates.io-index"
9
+ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
10
+
11
+ [[package]]
12
+ name = "crossbeam-deque"
13
+ version = "0.8.6"
14
+ source = "registry+https://github.com/rust-lang/crates.io-index"
15
+ checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
16
+ dependencies = [
17
+ "crossbeam-epoch",
18
+ "crossbeam-utils",
19
+ ]
20
+
21
+ [[package]]
22
+ name = "crossbeam-epoch"
23
+ version = "0.9.18"
24
+ source = "registry+https://github.com/rust-lang/crates.io-index"
25
+ checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
26
+ dependencies = [
27
+ "crossbeam-utils",
28
+ ]
29
+
30
+ [[package]]
31
+ name = "crossbeam-utils"
32
+ version = "0.8.21"
33
+ source = "registry+https://github.com/rust-lang/crates.io-index"
34
+ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
35
+
36
+ [[package]]
37
+ name = "either"
38
+ version = "1.15.0"
39
+ source = "registry+https://github.com/rust-lang/crates.io-index"
40
+ checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
41
+
42
+ [[package]]
43
+ name = "heck"
44
+ version = "0.5.0"
45
+ source = "registry+https://github.com/rust-lang/crates.io-index"
46
+ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
47
+
48
+ [[package]]
49
+ name = "hyper_fingerprints_rs"
50
+ version = "0.1.0"
51
+ dependencies = [
52
+ "ndarray",
53
+ "num-complex",
54
+ "numpy",
55
+ "purr",
56
+ "pyo3",
57
+ "rayon",
58
+ "realfft",
59
+ ]
60
+
61
+ [[package]]
62
+ name = "libc"
63
+ version = "0.2.183"
64
+ source = "registry+https://github.com/rust-lang/crates.io-index"
65
+ checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d"
66
+
67
+ [[package]]
68
+ name = "matrixmultiply"
69
+ version = "0.3.10"
70
+ source = "registry+https://github.com/rust-lang/crates.io-index"
71
+ checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08"
72
+ dependencies = [
73
+ "autocfg",
74
+ "rawpointer",
75
+ ]
76
+
77
+ [[package]]
78
+ name = "ndarray"
79
+ version = "0.17.2"
80
+ source = "registry+https://github.com/rust-lang/crates.io-index"
81
+ checksum = "520080814a7a6b4a6e9070823bb24b4531daac8c4627e08ba5de8c5ef2f2752d"
82
+ dependencies = [
83
+ "matrixmultiply",
84
+ "num-complex",
85
+ "num-integer",
86
+ "num-traits",
87
+ "portable-atomic",
88
+ "portable-atomic-util",
89
+ "rawpointer",
90
+ ]
91
+
92
+ [[package]]
93
+ name = "num-complex"
94
+ version = "0.4.6"
95
+ source = "registry+https://github.com/rust-lang/crates.io-index"
96
+ checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
97
+ dependencies = [
98
+ "num-traits",
99
+ ]
100
+
101
+ [[package]]
102
+ name = "num-integer"
103
+ version = "0.1.46"
104
+ source = "registry+https://github.com/rust-lang/crates.io-index"
105
+ checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
106
+ dependencies = [
107
+ "num-traits",
108
+ ]
109
+
110
+ [[package]]
111
+ name = "num-traits"
112
+ version = "0.2.19"
113
+ source = "registry+https://github.com/rust-lang/crates.io-index"
114
+ checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
115
+ dependencies = [
116
+ "autocfg",
117
+ ]
118
+
119
+ [[package]]
120
+ name = "numpy"
121
+ version = "0.28.0"
122
+ source = "registry+https://github.com/rust-lang/crates.io-index"
123
+ checksum = "778da78c64ddc928ebf5ad9df5edf0789410ff3bdbf3619aed51cd789a6af1e2"
124
+ dependencies = [
125
+ "libc",
126
+ "ndarray",
127
+ "num-complex",
128
+ "num-integer",
129
+ "num-traits",
130
+ "pyo3",
131
+ "pyo3-build-config",
132
+ "rustc-hash",
133
+ ]
134
+
135
+ [[package]]
136
+ name = "once_cell"
137
+ version = "1.21.4"
138
+ source = "registry+https://github.com/rust-lang/crates.io-index"
139
+ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
140
+
141
+ [[package]]
142
+ name = "portable-atomic"
143
+ version = "1.13.1"
144
+ source = "registry+https://github.com/rust-lang/crates.io-index"
145
+ checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
146
+
147
+ [[package]]
148
+ name = "portable-atomic-util"
149
+ version = "0.2.6"
150
+ source = "registry+https://github.com/rust-lang/crates.io-index"
151
+ checksum = "091397be61a01d4be58e7841595bd4bfedb15f1cd54977d79b8271e94ed799a3"
152
+ dependencies = [
153
+ "portable-atomic",
154
+ ]
155
+
156
+ [[package]]
157
+ name = "primal-check"
158
+ version = "0.3.4"
159
+ source = "registry+https://github.com/rust-lang/crates.io-index"
160
+ checksum = "dc0d895b311e3af9902528fbb8f928688abbd95872819320517cc24ca6b2bd08"
161
+ dependencies = [
162
+ "num-integer",
163
+ ]
164
+
165
+ [[package]]
166
+ name = "proc-macro2"
167
+ version = "1.0.106"
168
+ source = "registry+https://github.com/rust-lang/crates.io-index"
169
+ checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
170
+ dependencies = [
171
+ "unicode-ident",
172
+ ]
173
+
174
+ [[package]]
175
+ name = "purr"
176
+ version = "0.9.0"
177
+ source = "registry+https://github.com/rust-lang/crates.io-index"
178
+ checksum = "f65ecf8f6541cb5191a715bcd065373e1d49dfc64ad39f6a3d2cba4c8c20108a"
179
+
180
+ [[package]]
181
+ name = "pyo3"
182
+ version = "0.28.2"
183
+ source = "registry+https://github.com/rust-lang/crates.io-index"
184
+ checksum = "cf85e27e86080aafd5a22eae58a162e133a589551542b3e5cee4beb27e54f8e1"
185
+ dependencies = [
186
+ "libc",
187
+ "once_cell",
188
+ "portable-atomic",
189
+ "pyo3-build-config",
190
+ "pyo3-ffi",
191
+ "pyo3-macros",
192
+ ]
193
+
194
+ [[package]]
195
+ name = "pyo3-build-config"
196
+ version = "0.28.2"
197
+ source = "registry+https://github.com/rust-lang/crates.io-index"
198
+ checksum = "8bf94ee265674bf76c09fa430b0e99c26e319c945d96ca0d5a8215f31bf81cf7"
199
+ dependencies = [
200
+ "target-lexicon",
201
+ ]
202
+
203
+ [[package]]
204
+ name = "pyo3-ffi"
205
+ version = "0.28.2"
206
+ source = "registry+https://github.com/rust-lang/crates.io-index"
207
+ checksum = "491aa5fc66d8059dd44a75f4580a2962c1862a1c2945359db36f6c2818b748dc"
208
+ dependencies = [
209
+ "libc",
210
+ "pyo3-build-config",
211
+ ]
212
+
213
+ [[package]]
214
+ name = "pyo3-macros"
215
+ version = "0.28.2"
216
+ source = "registry+https://github.com/rust-lang/crates.io-index"
217
+ checksum = "f5d671734e9d7a43449f8480f8b38115df67bef8d21f76837fa75ee7aaa5e52e"
218
+ dependencies = [
219
+ "proc-macro2",
220
+ "pyo3-macros-backend",
221
+ "quote",
222
+ "syn",
223
+ ]
224
+
225
+ [[package]]
226
+ name = "pyo3-macros-backend"
227
+ version = "0.28.2"
228
+ source = "registry+https://github.com/rust-lang/crates.io-index"
229
+ checksum = "22faaa1ce6c430a1f71658760497291065e6450d7b5dc2bcf254d49f66ee700a"
230
+ dependencies = [
231
+ "heck",
232
+ "proc-macro2",
233
+ "pyo3-build-config",
234
+ "quote",
235
+ "syn",
236
+ ]
237
+
238
+ [[package]]
239
+ name = "quote"
240
+ version = "1.0.45"
241
+ source = "registry+https://github.com/rust-lang/crates.io-index"
242
+ checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
243
+ dependencies = [
244
+ "proc-macro2",
245
+ ]
246
+
247
+ [[package]]
248
+ name = "rawpointer"
249
+ version = "0.2.1"
250
+ source = "registry+https://github.com/rust-lang/crates.io-index"
251
+ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3"
252
+
253
+ [[package]]
254
+ name = "rayon"
255
+ version = "1.11.0"
256
+ source = "registry+https://github.com/rust-lang/crates.io-index"
257
+ checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f"
258
+ dependencies = [
259
+ "either",
260
+ "rayon-core",
261
+ ]
262
+
263
+ [[package]]
264
+ name = "rayon-core"
265
+ version = "1.13.0"
266
+ source = "registry+https://github.com/rust-lang/crates.io-index"
267
+ checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91"
268
+ dependencies = [
269
+ "crossbeam-deque",
270
+ "crossbeam-utils",
271
+ ]
272
+
273
+ [[package]]
274
+ name = "realfft"
275
+ version = "3.5.0"
276
+ source = "registry+https://github.com/rust-lang/crates.io-index"
277
+ checksum = "f821338fddb99d089116342c46e9f1fbf3828dba077674613e734e01d6ea8677"
278
+ dependencies = [
279
+ "rustfft",
280
+ ]
281
+
282
+ [[package]]
283
+ name = "rustc-hash"
284
+ version = "2.1.2"
285
+ source = "registry+https://github.com/rust-lang/crates.io-index"
286
+ checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe"
287
+
288
+ [[package]]
289
+ name = "rustfft"
290
+ version = "6.4.1"
291
+ source = "registry+https://github.com/rust-lang/crates.io-index"
292
+ checksum = "21db5f9893e91f41798c88680037dba611ca6674703c1a18601b01a72c8adb89"
293
+ dependencies = [
294
+ "num-complex",
295
+ "num-integer",
296
+ "num-traits",
297
+ "primal-check",
298
+ "strength_reduce",
299
+ "transpose",
300
+ ]
301
+
302
+ [[package]]
303
+ name = "strength_reduce"
304
+ version = "0.2.4"
305
+ source = "registry+https://github.com/rust-lang/crates.io-index"
306
+ checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82"
307
+
308
+ [[package]]
309
+ name = "syn"
310
+ version = "2.0.117"
311
+ source = "registry+https://github.com/rust-lang/crates.io-index"
312
+ checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
313
+ dependencies = [
314
+ "proc-macro2",
315
+ "quote",
316
+ "unicode-ident",
317
+ ]
318
+
319
+ [[package]]
320
+ name = "target-lexicon"
321
+ version = "0.13.5"
322
+ source = "registry+https://github.com/rust-lang/crates.io-index"
323
+ checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
324
+
325
+ [[package]]
326
+ name = "transpose"
327
+ version = "0.2.3"
328
+ source = "registry+https://github.com/rust-lang/crates.io-index"
329
+ checksum = "1ad61aed86bc3faea4300c7aee358b4c6d0c8d6ccc36524c96e4c92ccf26e77e"
330
+ dependencies = [
331
+ "num-integer",
332
+ "strength_reduce",
333
+ ]
334
+
335
+ [[package]]
336
+ name = "unicode-ident"
337
+ version = "1.0.24"
338
+ source = "registry+https://github.com/rust-lang/crates.io-index"
339
+ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
@@ -0,0 +1,18 @@
1
+ [package]
2
+ name = "hyper_fingerprints_rs"
3
+ version = "0.1.0"
4
+ edition = "2021"
5
+ readme = "README.md"
6
+
7
+ [lib]
8
+ name = "_core"
9
+ crate-type = ["cdylib"]
10
+
11
+ [dependencies]
12
+ pyo3 = { version = "0.28", features = ["abi3-py39", "extension-module"] }
13
+ numpy = "0.28"
14
+ ndarray = "0.17"
15
+ purr = "0.9"
16
+ realfft = "3.5"
17
+ num-complex = "0.4"
18
+ rayon = "1.10"