ndarray-linalg 0.1.4

Linear algebra package for rust-ndarray using LAPACK
Documentation

extern crate rand;
extern crate ndarray;
extern crate ndarray_rand;
extern crate ndarray_linalg;

use rand::distributions::*;
use ndarray::prelude::*;
use ndarray_linalg::prelude::*;
use ndarray_rand::RandomExt;

fn all_close(a: &Array<f64, Ix2>, b: &Array<f64, Ix2>) {
    if !a.all_close(b, 1.0e-7) {
        panic!("\nTwo matrices are not equal:\na = \n{:?}\nb = \n{:?}\n",
               a,
               b);
    }
}

#[test]
fn ssqrt_symmetric_random() {
    let r_dist = Range::new(0., 1.);
    let mut a = Array::<f64, _>::random((3, 3), r_dist);
    a = a.dot(&a.t());
    let ar = a.clone().ssqrt().unwrap();
    all_close(&ar.clone().reversed_axes(), &ar);
}

#[test]
fn ssqrt_symmetric_random_t() {
    let r_dist = Range::new(0., 1.);
    let mut a = Array::<f64, _>::random((3, 3), r_dist);
    a = a.dot(&a.t()).reversed_axes();
    let ar = a.clone().ssqrt().unwrap();
    all_close(&ar.clone().reversed_axes(), &ar);
}

#[test]
fn ssqrt_sqrt_random() {
    let r_dist = Range::new(0., 1.);
    let mut a = Array::<f64, _>::random((3, 3), r_dist);
    a = a.dot(&a.t());
    let ar = a.clone().ssqrt().unwrap();
    all_close(&ar.dot(&ar), &a);
}

#[test]
fn ssqrt_sqrt_random_t() {
    let r_dist = Range::new(0., 1.);
    let mut a = Array::<f64, _>::random((3, 3), r_dist);
    a = a.dot(&a.t()).reversed_axes();
    let ar = a.clone().ssqrt().unwrap();
    all_close(&ar.dot(&ar), &a);
}