conspire/math/tensor/rank_0/list_2d/
mod.rs1use 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}