use numr::dtype::DType;
use numr::error::Result;
use numr::runtime::Runtime;
use numr::tensor::Tensor;
#[derive(Debug, Clone, Copy)]
pub struct LinregressResult {
pub slope: f64,
pub intercept: f64,
pub rvalue: f64,
pub pvalue: f64,
pub stderr: f64,
pub intercept_stderr: f64,
}
#[derive(Debug, Clone)]
pub struct TensorDescriptiveStats<R: Runtime<DType = DType>> {
pub nobs: usize,
pub min: Tensor<R>,
pub max: Tensor<R>,
pub mean: Tensor<R>,
pub variance: Tensor<R>,
pub std: Tensor<R>,
pub skewness: Tensor<R>,
pub kurtosis: Tensor<R>,
}
#[derive(Debug, Clone)]
pub struct TensorTestResult<R: Runtime<DType = DType>> {
pub statistic: Tensor<R>,
pub pvalue: Tensor<R>,
}
#[derive(Debug, Clone)]
pub struct RobustRegressionResult<R: Runtime<DType = DType>> {
pub slope: Tensor<R>,
pub intercept: Tensor<R>,
pub low_slope: Tensor<R>,
pub high_slope: Tensor<R>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum LeveneCenter {
Mean,
Median,
TrimmedMean,
}
pub fn validate_stats_dtype(dtype: DType) -> Result<()> {
use numr::error::Error;
match dtype {
DType::F32 | DType::F64 => Ok(()),
_ => Err(Error::UnsupportedDType {
dtype,
op: "statistics (requires F32 or F64)",
}),
}
}