Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
281 changes: 251 additions & 30 deletions .github/workflows/ci.yml

Large diffs are not rendered by default.

11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,17 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).

### Added

- **Pyraview from pre-built wheels, never from source.** New `pyraview`
extra (`pyraview==0.4.2`). Pyraview is not on PyPI, so the wheels on its
GitHub release are named in a committed flat index,
`install/pyraview-wheels.html` (each link with its `#sha256`; the sdist left
out), with the same hashes in `install/pyraview-constraints.txt` for uv.
`tools/make_pyraview_index.py` regenerates both from a release tag.
`ndi_install.py` no longer clones Pyraview and compiles its C++; it installs
the wheel with `--only-binary pyraview`. CI installs it without git, CMake
or a compiler on Linux x86_64/aarch64, Windows, macOS arm64, macOS Intel and
x86_64-under-Rosetta.

- **File CRC-32 checksums for NDI Cloud** (ndi-cloud-node#162, mirroring
NDI-matlab#1025), so an importer can resume an interrupted upload by
re-uploading only the files whose cloud copy does not match.
Expand Down
29 changes: 29 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ NDI-Python requires these VH-Lab packages (installed automatically by `ndi_insta
|---------|-----------|---------|
| [DID-python](https://github.com/VH-Lab/DID-python) | VH-Lab/DID-python | Document database backend (SQLite, queries) |
| [vhlab-toolbox-python](https://github.com/VH-Lab/vhlab-toolbox-python) | VH-Lab/vhlab-toolbox-python | Data utilities, file formats, signal processing |
| [Pyraview](https://github.com/VH-Lab/Pyraview) | VH-Lab/Pyraview | Multi-resolution signal pyramids for `ndi.gui.app.pyraview` (pre-built wheels, `pyraview` extra) |

Additional dependencies (installed automatically): `numpy`, `networkx`, `jsonschema`, `requests`, `scipy`, `pandas`, `matplotlib`.

Expand All @@ -81,6 +82,34 @@ pip install scipy pandas matplotlib opencv-python-headless portalocker openminds

</details>

### Pyraview (signal pyramids)

[Pyraview](https://github.com/VH-Lab/Pyraview) is not on PyPI. Its GitHub
release ships a pre-built wheel for every platform and CPython version (Linux
x86_64/aarch64, macOS Apple Silicon *and* Intel, Windows), with the compiled
library inside, so no compiler is ever needed. `ndi_install.py` installs it
for you. In your own environment, from the repo root:

```bash
pip install -e ".[pyraview]" --find-links install/pyraview-wheels.html --only-binary pyraview
```

or, with uv (which needs the index as a URL, and checks hashes only through
the constraints file):

```bash
uv pip install -e ".[pyraview]" --only-binary pyraview -c install/pyraview-constraints.txt \
-f https://raw.githubusercontent.com/Waltham-Data-Science/NDI-python/main/install/pyraview-wheels.html
```

`install/pyraview-wheels.html` lists each release wheel with its sha256 and
deliberately leaves out the source archive; `--only-binary pyraview` makes a
missing wheel an error instead of a C++ build. The extra is not part of `gui`,
so `pip install ".[gui]"` keeps working without these flags. On a new Pyraview
release, bump the pin in `pyproject.toml` and run
`python tools/make_pyraview_index.py vX.Y.Z` to regenerate both files in
`install/`.

## Quick Start

```python
Expand Down
58 changes: 58 additions & 0 deletions install/pyraview-constraints.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# Generated by tools/make_pyraview_index.py from VH-Lab/Pyraview release v0.4.2.
# Do not edit by hand. One --hash per wheel in install/pyraview-wheels.html;
# passed as --constraint, uv refuses any pyraview file not listed here.
pyraview==0.4.2 \
--hash=sha256:6d2b3d23fa256c9dd109bc163885271e4ab976ebf271c95152dee2d7347a8bb2 \
--hash=sha256:a42b43c8e767a7fe817cef4cb0c52ceed25261e5be7de0067a206b43d73e3c35 \
--hash=sha256:d17765bdd6da2b8b07e107b679eb3d36ad78178a7ffa692de7cda2eb1af6afdc \
--hash=sha256:d3e411ce9ec07ed13170abd78286ec4f9b6cf048a4e5bb28797171837226ba25 \
--hash=sha256:f49acf7b8b8045ca6d923f3727987f4ff9e86d966b24be81d4eb2335218d7cbd \
--hash=sha256:a2c73e3bd4fb295c4c25ac142359312d02ae7fc2c57e08ec822275eb2429b5eb \
--hash=sha256:562ef3139545b2c739983b8d8dc97e3f5a96fede40c12a1d8d35bbe12b896b95 \
--hash=sha256:d914925de98f1436dac7ab1010cba3ef9a3ce036043c957fc3fb3793d910c01e \
--hash=sha256:fabeca334872749733f9ab737826c171078ab45a787805c7451027040986a98d \
--hash=sha256:bf07bc0c44ea8e6a7746a36650d23acd0a0725b86957ef1cbd0e190b03b11575 \
--hash=sha256:64502646e3bc947468c25836691c303df169d2cb40a2b51fc20197259fe199b0 \
--hash=sha256:3436f70f5fe6ff30cac860eb7c0b05b3bdd7bfec2527aacaa568e4bc29c2b307 \
--hash=sha256:68d8f401b2d59ee89065514e5d6446db5d2220e425884e192d0d68fe4f071e06 \
--hash=sha256:55c06a89846c7abce208c1b984b16e1b74ea2b03291e9d5b386f0aa935c18377 \
--hash=sha256:3ad3bcf8f921f1700037b7007155fc05acc3822b60df18cb410c085d2c290de4 \
--hash=sha256:2a550481d87ac65352845938e10c2204eb593945bef836a1a19bf9c02814a9ca \
--hash=sha256:7944371ff263351c7bca47752f9c2ff3ad03bae1ff34221fa447bab03b52f54f \
--hash=sha256:df12ad189e1d61a6c92dae78114fe002feb7d3e964c893f8392850a93c413031 \
--hash=sha256:befd683939157d403cbc7638b92fd20773906512317c341e6c42171bc531fb07 \
--hash=sha256:ddc41d3a2ceeab165f7877c36cb2ac8b73f07de5ae702a53eadc573cb7057d00 \
--hash=sha256:8b55ee5eb36d9c21d3d7fc33c76c5becd225393c516da5eaa3beefdd0a5c8d84 \
--hash=sha256:631fd383814a82de4a340c94c060cc93cedf8d7ca23c9ccc91762f3964034a57 \
--hash=sha256:8447ee11d6e3c178c6f6fd033b63952f0d6e84dafd3c812f697a933c10d78d1e \
--hash=sha256:43f210414b2a25ebe3722bd9d53530d133ff485bd73207eb143c26bac4590bd3 \
--hash=sha256:f6883a716af3ca03821c9848196a7a431af3b1b4f0a86973177f6ddd00535ced \
--hash=sha256:47c03390155f96de29b932df72bf31b0f56f5f5b8516b631716d01a82d820942 \
--hash=sha256:27f556e53caee131358ae17f2d75302b8c4d1f1023d63cc1217d053ddb47926e \
--hash=sha256:c90f274801e45ee8281d3aaa9addca5c4f922db5686553f056537f0b0d22aaea \
--hash=sha256:f8e42a34a4dfa65f4eacbb7d5ae216ad8060caed12916d6709658847662cf09e \
--hash=sha256:22f2fd5f811d68ba8679b082f78bc7577d24488196e7841035cbee44b2fa8aa1 \
--hash=sha256:f212530d7d3cee7a5f76209342451d18bc641cdaab94a6b45c6f7ef4a518b401 \
--hash=sha256:20bf3c85e4236dadc3a9edc7b39f0bc75858b25952ef6ba7b1b2d73d38229ad9 \
--hash=sha256:63bc47a205f19ef7dac581ab0ff00324912868de8c95c438cb73c7331c270f7a \
--hash=sha256:f5ba2a7b6060186e8523ce7a61e742fec566299ce5fcb3a5dfecfa7836e9b61b \
--hash=sha256:2f08d9798e00f37d50c1601ae48a3197764e950facb757ad4452da96d3659bdb \
--hash=sha256:7f08caeddaafc30529a38ed93aa492bf05116ce5340b465bb60ebe5a115b45aa \
--hash=sha256:689db0f9014a3621b2373e7a926d7f54889cc68df70d77a22af4635e72f7a535 \
--hash=sha256:c5f3cc644b24f4d40e6f57e8d49e1d81cf615fdd72e02225c5e10694df5cddb3 \
--hash=sha256:943696a0c8ba3b6dd5b18dded1bb80d899615f5e892e3e02c7fdf93e0134403a \
--hash=sha256:e7ea993c1c6dfa1b4e4a231bd6a88cad3065193305c3df7d829930c0999c2b4e \
--hash=sha256:58b7a06023ce4c85cc96fec60fe203463b5dc23085fb1e792559cf1e1e3a334f \
--hash=sha256:1e1883466eb002ff118625cec5e390057d5d7e9f1feda17e25ee10f2f8408c5b \
--hash=sha256:f53dc9258c1c4ab68d528e93cc3168d0c0dcd18f293e6ec25a3df5d36651524e \
--hash=sha256:aac9ed374c8517e772090a949a032006fe2cc91ff0f554d1395eafa89b5adc19 \
--hash=sha256:0b130beef553bcc467160de15dc3a3d1b236bfca9c3d3815f5b79a641a323a97 \
--hash=sha256:f50547f6418230c966ab0de8fa3fd010b97d4ec2bf4d7578ff93b421ae97d80d \
--hash=sha256:57317c12f4a2403c5b164ae24a48fb5cb0a78d9911f6bdb2f74367498d34b1a3 \
--hash=sha256:090a614d50494d30402039cc331dcca83ee157afdd5760facb58f72f11a0dcae \
--hash=sha256:351d9a78a52962b29d2f7fa59229a119714c945bc2cc0d9363d040c2454f8831 \
--hash=sha256:92a7dc1868c378805f688561adb7a283fce3c9689739a1e59ea46d0a021400ab \
--hash=sha256:4aacc1c83c4922dd1150d9e7d54046c3cc6504710dc40c229fd2608d59955267 \
--hash=sha256:a2d008942281e391586bf8e247c6d7ef50a24c0971fd2e13152fd6f4e1ff08fb \
--hash=sha256:3b19700d0b2090832619376ea646dbf8ef13025a8f90a2fd80212dc07d94de56 \
--hash=sha256:dcf41699112b5c7e3135739e693a6e2d2f1287864145b120950392e912610db3
Loading
Loading