use serde::{Deserialize, Serialize};
#[allow(clippy::trivially_copy_pass_by_ref)]
fn is_zero_usize(n: &usize) -> bool {
*n == 0
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Tensor3DPlaneStatEntry {
pub plane: usize,
pub n_pos: usize,
pub min: f64,
pub max: f64,
pub mean: f64,
#[serde(skip_serializing_if = "Option::is_none")]
pub stdev: Option<f64>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Tensor3DGlobalStats {
pub n_pos: usize,
#[serde(default, skip_serializing_if = "is_zero_usize")]
pub n_nan: usize,
#[serde(default, skip_serializing_if = "is_zero_usize")]
pub n_inf: usize,
pub min: f64,
pub max: f64,
pub mean: f64,
#[serde(skip_serializing_if = "Option::is_none")]
pub stdev: Option<f64>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Tensor3DPlaneStats {
pub along_axis: u8,
pub elements_sampled: usize,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub global: Option<Tensor3DGlobalStats>,
pub planes: Vec<Tensor3DPlaneStatEntry>,
}