use crate::DType;
use super::TensorDescriptiveStats;
use numr::error::Result;
use numr::ops::TensorOps;
use numr::runtime::Runtime;
use numr::tensor::Tensor;
pub trait DescriptiveStatisticsAlgorithms<R: Runtime<DType = DType>>: TensorOps<R> {
fn describe(&self, x: &Tensor<R>) -> Result<TensorDescriptiveStats<R>>;
fn percentile(&self, x: &Tensor<R>, p: f64) -> Result<Tensor<R>>;
fn median(&self, x: &Tensor<R>) -> Result<Tensor<R>> {
DescriptiveStatisticsAlgorithms::percentile(self, x, 50.0)
}
fn iqr(&self, x: &Tensor<R>) -> Result<Tensor<R>>;
fn skewness(&self, x: &Tensor<R>) -> Result<Tensor<R>>;
fn kurtosis(&self, x: &Tensor<R>) -> Result<Tensor<R>>;
fn zscore(&self, x: &Tensor<R>) -> Result<Tensor<R>>;
fn sem(&self, x: &Tensor<R>) -> Result<Tensor<R>>;
}