easy-ml 1.10.0

Machine learning library providing matrices, named tensors, linear algebra and automatic differentiation aimed at being easy to use
Documentation
extern crate easy_ml;

#[cfg(test)]
mod tensors {
    use easy_ml::tensors::indexing::ShapeIterator;

    #[test]
    fn test_shape_iterator_exact_size() {
        let mut iterator = ShapeIterator::from([("x", 3), ("y", 2)]);
        assert_eq!(iterator.size_hint(), (6, Some(6)));

        let a = iterator.next();
        assert_eq!(a, Some([0, 0]));
        assert_eq!(iterator.size_hint(), (5, Some(5)));

        let b = iterator.next();
        assert_eq!(b, Some([0, 1]));
        assert_eq!(iterator.size_hint(), (4, Some(4)));

        let c = iterator.next();
        assert_eq!(c, Some([1, 0]));
        assert_eq!(iterator.size_hint(), (3, Some(3)));

        let d = iterator.next();
        assert_eq!(d, Some([1, 1]));
        assert_eq!(iterator.size_hint(), (2, Some(2)));

        let e = iterator.next();
        assert_eq!(e, Some([2, 0]));
        assert_eq!(iterator.size_hint(), (1, Some(1)));

        let f = iterator.next();
        assert_eq!(f, Some([2, 1]));
        assert_eq!(iterator.size_hint(), (0, Some(0)));

        let g = iterator.next();
        assert_eq!(g, None);
        assert_eq!(iterator.size_hint(), (0, Some(0)));
    }

    #[test]
    fn higher_dimensional_shape_iterator_len_test() {
        use std::iter::ExactSizeIterator;

        let mut iterator =
            ShapeIterator::from([("a", 1), ("b", 2), ("c", 1), ("d", 2), ("e", 1), ("f", 2)]);
        assert_eq!(iterator.len(), 8);

        let a = iterator.next();
        assert_eq!(a, Some([0, 0, 0, 0, 0, 0]));
        assert_eq!(iterator.len(), 7);

        let b = iterator.next();
        assert_eq!(b, Some([0, 0, 0, 0, 0, 1]));
        assert_eq!(iterator.len(), 6);

        let c = iterator.next();
        assert_eq!(c, Some([0, 0, 0, 1, 0, 0]));
        assert_eq!(iterator.len(), 5);

        let d = iterator.next();
        assert_eq!(d, Some([0, 0, 0, 1, 0, 1]));
        assert_eq!(iterator.len(), 4);

        let e = iterator.next();
        assert_eq!(e, Some([0, 1, 0, 0, 0, 0]));
        assert_eq!(iterator.len(), 3);

        let f = iterator.next();
        assert_eq!(f, Some([0, 1, 0, 0, 0, 1]));
        assert_eq!(iterator.len(), 2);

        let g = iterator.next();
        assert_eq!(g, Some([0, 1, 0, 1, 0, 0]));
        assert_eq!(iterator.len(), 1);

        let h = iterator.next();
        assert_eq!(h, Some([0, 1, 0, 1, 0, 1]));
        assert_eq!(iterator.len(), 0);

        let i = iterator.next();
        assert_eq!(i, None);
        assert_eq!(iterator.len(), 0);
    }
}