candle-approx 0.6.0

Approximate comparison of Candle tensors
Documentation
use crate::{assert_abs_diff_eq, assert_relative_eq};
use candle_core::{Device::Cpu, Tensor};

const EPS: f64 = 0.99 * crate::DEFAULT_EPSILON;
const REL_EPS: f64 = 0.99 * crate::DEFAULT_MAX_RELATIVE;
const SHAPE: (usize, usize, usize) = (20, 30, 40);

#[test]
fn abs_diff_eq() {
    let a = Tensor::randn(0.0f32, 1.0, SHAPE, &Cpu).unwrap();
    let noise = a.rand_like(-EPS, EPS).unwrap();
    let b = a.add(&noise).unwrap();
    assert_abs_diff_eq!(a, b);
}

#[test]
#[should_panic]
fn abs_diff_ne() {
    let a = Tensor::randn(0.0f32, 1.0, SHAPE, &Cpu).unwrap();
    let b = (&a + 2.0 * EPS).unwrap();
    assert_abs_diff_eq!(a, b);
}

#[test]
fn relative() {
    let a = Tensor::randn(0.0f32, 1.0, SHAPE, &Cpu).unwrap();
    let factor = 1.0 + REL_EPS;
    let b = a.mul(&a.rand_like(1.0 / factor, factor).unwrap()).unwrap();
    assert_relative_eq!(a, b);
}

#[test]
#[should_panic]
fn relative_panic() {
    let a = Tensor::randn(0.0f32, 1.0, SHAPE, &Cpu).unwrap();
    let b = (&a * (1.0 + 2.0 * REL_EPS)).unwrap();
    assert_relative_eq!(a, b);
}