lasprs 0.14.1

Library for Acoustic Signal Processing (Rust edition, with optional Python bindings via pyo3)
use itertools::Itertools;
use serde::{Deserialize, Serialize};

use super::*;

/// A Dummy fillter just does 'nothing', its input equals its output. It is
/// equal to [Biquad::unit], but then with the option to fully optimize it away.
#[derive(Clone, Copy, Debug, Serialize, Deserialize)]
pub struct DummyFilter;

impl FilterMethods for DummyFilter {
    #[inline]
    fn filter(&mut self, input: &[Flt], output: &mut [Flt]) {
        // Just returns a copy
        output.copy_from_slice(input);
    }
    fn reset(&mut self) {}

    fn filter_iter<'a>(
        &mut self,
        input: impl Iterator<Item = &'a Flt>,
        output: impl Iterator<Item = &'a mut Flt>,
    ) {
        for (i, o) in input.zip(output) {
            *o = *i;
        }
    }
}
impl<'a, T: AsArray<'a, Flt>> TransferFunction<'a, T> for DummyFilter {
    fn tf(&self, _fs: StrictlyPositive, freq: T) -> Ccol {
        let freq = freq.into();
        Ccol::ones(freq.len())
    }
}