compute 0.2.3

A crate for statistical computing.
Documentation
#[derive(Debug, Clone, Copy)]
pub struct LBFGS {}

impl LBFGS {
    fn linesearch() {}

    fn twoloop() {}

    fn optimize() {}
}

#[cfg(test)]
mod tests {
    use crate::prelude::{Float, F1};
    use std::f64::consts::PI;

    #[test]
    fn test_lbfgs() {
        fn loglikelihood(params: &[F1], data: &[&[f64]]) -> F1 {
            assert_eq!(params.len(), 3);
            assert_eq!(data.len(), 2);
            assert_eq!(data[0].len(), data[1].len());
            let (b, m, sigma) = (params[0], params[1], params[2]);
            let n = data[0].len() as f64;
            let mu: Vec<F1> = data[0].iter().map(|&v| m * v + b).collect();
            let ymusqsig: F1 = data[1]
                .iter()
                .zip(mu)
                .map(|(yv, muv)| (*yv - muv).powi(2) / (2. * sigma.powi(2)))
                .sum();
            return -n / 2. * (2. * PI * sigma.powi(2)) - ymusqsig;
        }

        dbg!(loglikelihood(
            &[2., 3., 1.].iter().map(|x| F1::var(*x)).collect::<Vec<_>>(),
            &[&[1., 2.], &[2., 4.]]
        ));
    }
}