autograd 0.8.0

Tensors and differentiable operations in Rust
Documentation
extern crate autograd as ag;
extern crate ndarray;

#[test]
fn scalar_add() {
    let ref ones = ag::constant(ndarray::arr1(&[1., 1., 1.]));
    let ref z: ag::Tensor = 3. + ones + 2;
    assert_eq!(z.eval(&[]), Some(ndarray::arr1(&[6., 6., 6.]).into_dyn()));
}

#[test]
fn scalar_sub() {
    let ref ones = ag::constant(ndarray::arr1(&[1., 1., 1.]));
    let ref z: ag::Tensor = 3. - ones - 2;
    assert_eq!(z.eval(&[]), Some(ndarray::arr1(&[0., 0., 0.]).into_dyn()));
}

#[test]
fn scalar_mul() {
    let ref ones = ag::constant(ndarray::arr1(&[1., 1., 1.]));
    let ref z: ag::Tensor = 3. * ones * 2;
    assert_eq!(z.eval(&[]), Some(ndarray::arr1(&[6., 6., 6.]).into_dyn()));
}

#[test]
fn scalar_div() {
    let ref ones = ag::constant(ndarray::arr1(&[1., 1., 1.]));
    let ref z: ag::Tensor = 3. / ones / 2;
    assert_eq!(
        z.eval(&[]),
        Some(ndarray::arr1(&[1.5, 1.5, 1.5]).into_dyn())
    );
}