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