npyci 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.
- npyci-0.1.0/.github/workflows/ci.yml +105 -0
- npyci-0.1.0/.github/workflows/release.yml +85 -0
- npyci-0.1.0/.gitignore +11 -0
- npyci-0.1.0/Cargo.toml +28 -0
- npyci-0.1.0/LICENSE +661 -0
- npyci-0.1.0/PKG-INFO +53 -0
- npyci-0.1.0/README.md +308 -0
- npyci-0.1.0/benches/benchmarks.rs +2269 -0
- npyci-0.1.0/ci-local.sh +64 -0
- npyci-0.1.0/examples/benchmark_viz.rs +502 -0
- npyci-0.1.0/examples/common/mod.rs +330 -0
- npyci-0.1.0/examples/explore.rs +779 -0
- npyci-0.1.0/examples/filter_demo.rs +531 -0
- npyci-0.1.0/examples/pipeline_demo.rs +360 -0
- npyci-0.1.0/examples/spatial_demo.rs +497 -0
- npyci-0.1.0/explore.toml +101 -0
- npyci-0.1.0/pyproject.toml +32 -0
- npyci-0.1.0/python/.gitignore +20 -0
- npyci-0.1.0/python/Cargo.lock +283 -0
- npyci-0.1.0/python/Cargo.toml +14 -0
- npyci-0.1.0/python/README.md +34 -0
- npyci-0.1.0/python/src/analysis.rs +944 -0
- npyci-0.1.0/python/src/artifact.rs +780 -0
- npyci-0.1.0/python/src/csp.rs +579 -0
- npyci-0.1.0/python/src/deconvolution.rs +219 -0
- npyci-0.1.0/python/src/detection.rs +763 -0
- npyci-0.1.0/python/src/filters.rs +993 -0
- npyci-0.1.0/python/src/lib.rs +285 -0
- npyci-0.1.0/python/src/percentile.rs +264 -0
- npyci-0.1.0/python/src/pipeline.rs +173 -0
- npyci-0.1.0/python/src/resampling.rs +472 -0
- npyci-0.1.0/python/src/riemannian.rs +190 -0
- npyci-0.1.0/python/src/spatial.rs +956 -0
- npyci-0.1.0/python/src/spectral.rs +765 -0
- npyci-0.1.0/python/src/stats.rs +334 -0
- npyci-0.1.0/python/src/sync.rs +402 -0
- npyci-0.1.0/python/src/utils.rs +14 -0
- npyci-0.1.0/python/src/wavelet.rs +398 -0
- npyci-0.1.0/python/src/window.rs +102 -0
- npyci-0.1.0/python/src/xcorr.rs +285 -0
- npyci-0.1.0/python/tests/test_analysis.py +325 -0
- npyci-0.1.0/python/tests/test_artifact.py +322 -0
- npyci-0.1.0/python/tests/test_csp.py +267 -0
- npyci-0.1.0/python/tests/test_deconvolution.py +106 -0
- npyci-0.1.0/python/tests/test_detection.py +284 -0
- npyci-0.1.0/python/tests/test_filters.py +543 -0
- npyci-0.1.0/python/tests/test_hilbert.py +153 -0
- npyci-0.1.0/python/tests/test_iir.py +122 -0
- npyci-0.1.0/python/tests/test_online_cov.py +129 -0
- npyci-0.1.0/python/tests/test_percentile.py +231 -0
- npyci-0.1.0/python/tests/test_pipeline.py +342 -0
- npyci-0.1.0/python/tests/test_resampling.py +267 -0
- npyci-0.1.0/python/tests/test_riemannian.py +119 -0
- npyci-0.1.0/python/tests/test_scipy_validation.py +513 -0
- npyci-0.1.0/python/tests/test_spatial.py +366 -0
- npyci-0.1.0/python/tests/test_spectral.py +398 -0
- npyci-0.1.0/python/tests/test_stats.py +184 -0
- npyci-0.1.0/python/tests/test_sync.py +231 -0
- npyci-0.1.0/python/tests/test_wavelet.py +260 -0
- npyci-0.1.0/python/tests/test_window.py +138 -0
- npyci-0.1.0/python/tests/test_xcorr.py +294 -0
- npyci-0.1.0/python/validation/compare_scipy.py +497 -0
- npyci-0.1.0/src/artifact.rs +921 -0
- npyci-0.1.0/src/bandpower.rs +1032 -0
- npyci-0.1.0/src/buffer.rs +296 -0
- npyci-0.1.0/src/csp.rs +1129 -0
- npyci-0.1.0/src/decimate.rs +354 -0
- npyci-0.1.0/src/deconvolution.rs +705 -0
- npyci-0.1.0/src/detector.rs +1758 -0
- npyci-0.1.0/src/envelope.rs +406 -0
- npyci-0.1.0/src/fft.rs +477 -0
- npyci-0.1.0/src/filter/ac.rs +370 -0
- npyci-0.1.0/src/filter/car.rs +401 -0
- npyci-0.1.0/src/filter/fir.rs +285 -0
- npyci-0.1.0/src/filter/iir.rs +575 -0
- npyci-0.1.0/src/filter/laplacian.rs +908 -0
- npyci-0.1.0/src/filter/lms.rs +697 -0
- npyci-0.1.0/src/filter/median.rs +923 -0
- npyci-0.1.0/src/filter/mod.rs +17 -0
- npyci-0.1.0/src/filter/nlms.rs +627 -0
- npyci-0.1.0/src/hilbert.rs +758 -0
- npyci-0.1.0/src/interpolate.rs +575 -0
- npyci-0.1.0/src/lib.rs +126 -0
- npyci-0.1.0/src/linalg.rs +1029 -0
- npyci-0.1.0/src/percentile.rs +676 -0
- npyci-0.1.0/src/pipeline.rs +905 -0
- npyci-0.1.0/src/riemannian.rs +659 -0
- npyci-0.1.0/src/rms.rs +545 -0
- npyci-0.1.0/src/router.rs +584 -0
- npyci-0.1.0/src/stats.rs +395 -0
- npyci-0.1.0/src/stft.rs +697 -0
- npyci-0.1.0/src/sync.rs +1184 -0
- npyci-0.1.0/src/wavelet.rs +925 -0
- npyci-0.1.0/src/window.rs +558 -0
- npyci-0.1.0/src/xcorr.rs +945 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, dev]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main, dev]
|
|
8
|
+
|
|
9
|
+
env:
|
|
10
|
+
CARGO_TERM_COLOR: always
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
fmt:
|
|
14
|
+
name: Format
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
19
|
+
with:
|
|
20
|
+
components: rustfmt
|
|
21
|
+
- run: cargo fmt --all --check
|
|
22
|
+
|
|
23
|
+
clippy:
|
|
24
|
+
name: Clippy
|
|
25
|
+
runs-on: ubuntu-latest
|
|
26
|
+
steps:
|
|
27
|
+
- uses: actions/checkout@v4
|
|
28
|
+
- name: Install system dependencies
|
|
29
|
+
run: |
|
|
30
|
+
sudo apt-get update
|
|
31
|
+
sudo apt-get install -y libfontconfig1-dev
|
|
32
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
33
|
+
with:
|
|
34
|
+
components: clippy
|
|
35
|
+
- uses: Swatinem/rust-cache@v2
|
|
36
|
+
- run: cargo clippy --all-targets -- -D warnings
|
|
37
|
+
|
|
38
|
+
test:
|
|
39
|
+
name: Test (${{ matrix.os }})
|
|
40
|
+
runs-on: ${{ matrix.os }}
|
|
41
|
+
strategy:
|
|
42
|
+
fail-fast: false
|
|
43
|
+
matrix:
|
|
44
|
+
os: [ubuntu-latest, macos-latest]
|
|
45
|
+
steps:
|
|
46
|
+
- uses: actions/checkout@v4
|
|
47
|
+
- name: Install system dependencies (Linux)
|
|
48
|
+
if: runner.os == 'Linux'
|
|
49
|
+
run: |
|
|
50
|
+
sudo apt-get update
|
|
51
|
+
sudo apt-get install -y libfontconfig1-dev
|
|
52
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
53
|
+
- uses: Swatinem/rust-cache@v2
|
|
54
|
+
- run: cargo test
|
|
55
|
+
|
|
56
|
+
python:
|
|
57
|
+
name: Python Bindings (${{ matrix.os }})
|
|
58
|
+
runs-on: ${{ matrix.os }}
|
|
59
|
+
strategy:
|
|
60
|
+
fail-fast: false
|
|
61
|
+
matrix:
|
|
62
|
+
os: [ubuntu-latest, macos-latest]
|
|
63
|
+
python-version: ['3.9', '3.10', '3.11', '3.12', '3.13']
|
|
64
|
+
steps:
|
|
65
|
+
- uses: actions/checkout@v4
|
|
66
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
67
|
+
uses: actions/setup-python@v5
|
|
68
|
+
with:
|
|
69
|
+
python-version: ${{ matrix.python-version }}
|
|
70
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
71
|
+
- uses: Swatinem/rust-cache@v2
|
|
72
|
+
- name: Install maturin and pytest
|
|
73
|
+
run: pip install maturin pytest numpy
|
|
74
|
+
- name: Clean old wheels
|
|
75
|
+
run: rm -rf python/target/wheels/
|
|
76
|
+
- name: Build Python wheel
|
|
77
|
+
working-directory: python
|
|
78
|
+
run: maturin build --release
|
|
79
|
+
env:
|
|
80
|
+
PYO3_USE_ABI3_FORWARD_COMPATIBILITY: 1
|
|
81
|
+
- name: Install wheel
|
|
82
|
+
run: pip install python/target/wheels/npyci-*.whl --force-reinstall
|
|
83
|
+
- name: Run Python tests
|
|
84
|
+
run: pytest python/tests/ -v
|
|
85
|
+
|
|
86
|
+
doc:
|
|
87
|
+
name: Documentation
|
|
88
|
+
runs-on: ubuntu-latest
|
|
89
|
+
steps:
|
|
90
|
+
- uses: actions/checkout@v4
|
|
91
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
92
|
+
- uses: Swatinem/rust-cache@v2
|
|
93
|
+
- run: cargo doc --no-deps
|
|
94
|
+
env:
|
|
95
|
+
RUSTDOCFLAGS: -D warnings
|
|
96
|
+
|
|
97
|
+
# Minimum supported Rust version check
|
|
98
|
+
msrv:
|
|
99
|
+
name: MSRV (1.70.0)
|
|
100
|
+
runs-on: ubuntu-latest
|
|
101
|
+
steps:
|
|
102
|
+
- uses: actions/checkout@v4
|
|
103
|
+
- uses: dtolnay/rust-toolchain@1.70.0
|
|
104
|
+
- uses: Swatinem/rust-cache@v2
|
|
105
|
+
- run: cargo check
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
name: Release to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'v*' # Trigger on version tags: v0.1.0, v1.2.3, etc.
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
build-wheels:
|
|
13
|
+
name: Build wheels (${{ matrix.os }}-${{ matrix.target }})
|
|
14
|
+
runs-on: ${{ matrix.os }}
|
|
15
|
+
strategy:
|
|
16
|
+
fail-fast: false
|
|
17
|
+
matrix:
|
|
18
|
+
include:
|
|
19
|
+
# Linux x86_64
|
|
20
|
+
- os: ubuntu-latest
|
|
21
|
+
target: x86_64-unknown-linux-gnu
|
|
22
|
+
# Linux aarch64 (cross-compile)
|
|
23
|
+
- os: ubuntu-latest
|
|
24
|
+
target: aarch64-unknown-linux-gnu
|
|
25
|
+
# macOS universal2 (Intel + Apple Silicon in one wheel)
|
|
26
|
+
- os: macos-latest
|
|
27
|
+
target: universal2-apple-darwin
|
|
28
|
+
# Windows x86_64
|
|
29
|
+
- os: windows-latest
|
|
30
|
+
target: x86_64-pc-windows-msvc
|
|
31
|
+
|
|
32
|
+
steps:
|
|
33
|
+
- uses: actions/checkout@v4
|
|
34
|
+
|
|
35
|
+
- name: Build wheels
|
|
36
|
+
uses: PyO3/maturin-action@v1
|
|
37
|
+
with:
|
|
38
|
+
target: ${{ matrix.target }}
|
|
39
|
+
args: --release --out dist --manifest-path python/Cargo.toml
|
|
40
|
+
sccache: 'true'
|
|
41
|
+
manylinux: auto
|
|
42
|
+
|
|
43
|
+
- name: Upload wheels
|
|
44
|
+
uses: actions/upload-artifact@v4
|
|
45
|
+
with:
|
|
46
|
+
name: wheels-${{ matrix.os }}-${{ matrix.target }}
|
|
47
|
+
path: dist
|
|
48
|
+
|
|
49
|
+
build-sdist:
|
|
50
|
+
name: Build source distribution
|
|
51
|
+
runs-on: ubuntu-latest
|
|
52
|
+
steps:
|
|
53
|
+
- uses: actions/checkout@v4
|
|
54
|
+
|
|
55
|
+
- name: Build sdist
|
|
56
|
+
uses: PyO3/maturin-action@v1
|
|
57
|
+
with:
|
|
58
|
+
command: sdist
|
|
59
|
+
args: --out dist --manifest-path python/Cargo.toml
|
|
60
|
+
|
|
61
|
+
- name: Upload sdist
|
|
62
|
+
uses: actions/upload-artifact@v4
|
|
63
|
+
with:
|
|
64
|
+
name: wheels-sdist
|
|
65
|
+
path: dist
|
|
66
|
+
|
|
67
|
+
publish:
|
|
68
|
+
name: Publish to PyPI
|
|
69
|
+
runs-on: ubuntu-latest
|
|
70
|
+
needs: [build-wheels, build-sdist]
|
|
71
|
+
environment:
|
|
72
|
+
name: pypi
|
|
73
|
+
url: https://pypi.org/project/npyci/
|
|
74
|
+
permissions:
|
|
75
|
+
id-token: write # Required for trusted publishing
|
|
76
|
+
steps:
|
|
77
|
+
- name: Download all wheels
|
|
78
|
+
uses: actions/download-artifact@v4
|
|
79
|
+
with:
|
|
80
|
+
pattern: wheels-*
|
|
81
|
+
merge-multiple: true
|
|
82
|
+
path: dist
|
|
83
|
+
|
|
84
|
+
- name: Publish to PyPI
|
|
85
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
npyci-0.1.0/.gitignore
ADDED
npyci-0.1.0/Cargo.toml
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
[package]
|
|
2
|
+
name = "zerostone"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
edition = "2021"
|
|
5
|
+
description = "High-performance, zero-allocation signal processing primitives for BCI and real-time systems"
|
|
6
|
+
license = "AGPL-3.0"
|
|
7
|
+
keywords = ["bci", "signal-processing", "dsp", "neuroscience", "no-std"]
|
|
8
|
+
categories = ["science", "no-std::no-alloc", "embedded"]
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
|
|
11
|
+
[dependencies]
|
|
12
|
+
libm = "0.2"
|
|
13
|
+
|
|
14
|
+
[dev-dependencies]
|
|
15
|
+
criterion = { version = "0.5", default-features = false }
|
|
16
|
+
plotters = "0.3"
|
|
17
|
+
csv = "1.3"
|
|
18
|
+
clap = { version = "4.0", features = ["derive"] }
|
|
19
|
+
serde = { version = "1.0", features = ["derive"] }
|
|
20
|
+
toml = "0.8"
|
|
21
|
+
|
|
22
|
+
[[bench]]
|
|
23
|
+
name = "benchmarks"
|
|
24
|
+
harness = false
|
|
25
|
+
|
|
26
|
+
[[example]]
|
|
27
|
+
name = "filter_demo"
|
|
28
|
+
path = "examples/filter_demo.rs"
|