gspx 0.1.2

Sparse graph signal processing and spectral graph wavelets in Rust
Documentation
use gspx::functions::{bandpass, gaussian_wavelet, highpass, lowpass};
use ndarray::Array1;

#[test]
fn lowpass_properties() {
    let x = Array1::linspace(0.0, 10.0, 200);
    let y = lowpass(&x, 1.0);
    assert!((y[0] - 1.0).abs() < 1e-12);
    assert!(y.windows(2).into_iter().all(|w| w[1] <= w[0]));
}

#[test]
fn highpass_properties() {
    let x = Array1::linspace(0.0, 10.0, 200);
    let y = highpass(&x, 1.0);
    assert!(y[0].abs() < 1e-12);
    assert!(y.windows(2).into_iter().all(|w| w[1] >= w[0]));
}

#[test]
fn bandpass_peak() {
    let x = Array1::linspace(0.001, 10.0, 10_000);
    let y = bandpass(&x, 1.0, 1);
    let (idx, _) = y
        .iter()
        .enumerate()
        .max_by(|(_, a), (_, b)| a.partial_cmp(b).unwrap_or(std::cmp::Ordering::Equal))
        .expect("bandpass output should be non-empty");
    let peak = x[idx];
    assert!((peak - 1.0).abs() < 0.2);
}

#[test]
fn gaussian_wavelet_shape_and_type() {
    let t = Array1::linspace(0.0, 10.0, 1000);
    let psi = gaussian_wavelet(&t, 0.5, 5.0, 2.0 * std::f64::consts::PI);
    assert_eq!(psi.len(), t.len());
    assert!(psi.iter().any(|z| z.im.abs() > 0.0));
}