diff --git a/Cargo.toml b/Cargo.toml index c70de2d..8d0e315 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,6 @@ license = "MIT OR Apache-2.0" [dependencies] cblas = "0.2" -derivative = "2.1" lapacke = "0.2" ndarray = "0.13" ordered-float = "1.0" diff --git a/src/fitter/recursive.rs b/src/fitter/recursive.rs index f0d7c69..1b107a7 100644 --- a/src/fitter/recursive.rs +++ b/src/fitter/recursive.rs @@ -1,4 +1,6 @@ -use derivative::Derivative; +use std::fmt; + +// use derivative::Derivative; use ndarray::prelude::*; use ndarray::stack; @@ -6,11 +8,8 @@ use crate::kernel::Kernel; use super::Fitter; -#[derive(Derivative)] -#[derivative(Debug)] pub struct RecursiveFitter { ts_new: Vec, - #[derivative(Debug = "ignore")] kernel: Box, ts: Vec, ms: ArrayD, // TODO Replace with a vec @@ -58,6 +57,30 @@ impl RecursiveFitter { } } +impl fmt::Debug for RecursiveFitter { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("RecursiveFitter") + .field("ts_new", &self.ts_new) + .field("ts", &self.ts) + .field("ms", &self.ms) + .field("vs", &self.vs) + .field("ns", &self.ns) + .field("xs", &self.xs) + .field("is_fitted", &self.is_fitted) + .field("h", &self.h) + .field("i", &self.i) + .field("a", &self.a) + .field("q", &self.q) + .field("m_p", &self.m_p) + .field("p_p", &self.p_p) + .field("m_f", &self.m_f) + .field("p_f", &self.p_f) + .field("m_s", &self.m_s) + .field("p_s", &self.p_s) + .finish() + } +} + impl Fitter for RecursiveFitter { fn add_sample(&mut self, t: f64) -> usize { let idx = self.ts.len() + self.ts_new.len(); @@ -146,8 +169,6 @@ impl Fitter for RecursiveFitter { let k = self.p_p[i].dot(&self.h) / (1.0 + self.xs[i] * self.h.dot(&self.p_p[i]).dot(&self.h)); - // let k = Array1::from(k); - self.m_f[i] = &self.m_p[i] + &(&k * (self.ns[i] - self.xs[i] * self.h.dot(&self.m_p[i])));