conspire/math/tensor/rank_0/list_2d/
mod.rs

1use crate::math::{TensorList, TensorRank0List};
2
3#[cfg(test)]
4use crate::math::{Tensor, TensorRank0, test::ErrorTensor};
5
6pub type TensorRank0List2D<const N: usize> = TensorList<TensorRank0List<N>, N>;
7
8#[cfg(test)]
9impl<const N: usize> ErrorTensor for TensorRank0List2D<N> {
10    fn error_fd(&self, comparator: &Self, epsilon: TensorRank0) -> Option<(bool, usize)> {
11        let error_count = self
12            .iter()
13            .zip(comparator.iter())
14            .map(|(self_i, comparator_i)| {
15                self_i
16                    .iter()
17                    .zip(comparator_i.iter())
18                    .filter(|&(&self_ij, &comparator_ij)| {
19                        (self_ij / comparator_ij - 1.0).abs() >= epsilon
20                            && (self_ij.abs() >= epsilon || comparator_ij.abs() >= epsilon)
21                    })
22                    .count()
23            })
24            .sum();
25        if error_count > 0 {
26            Some((true, error_count))
27        } else {
28            None
29        }
30    }
31}