use crate::DType;
use super::{LeveneCenter, TensorTestResult};
use numr::error::Result;
use numr::ops::TensorOps;
use numr::runtime::Runtime;
use numr::tensor::Tensor;
pub trait HypothesisTestingAlgorithms<R: Runtime<DType = DType>>: TensorOps<R> {
fn ttest_1samp(&self, x: &Tensor<R>, popmean: f64) -> Result<TensorTestResult<R>>;
fn ttest_ind(&self, a: &Tensor<R>, b: &Tensor<R>) -> Result<TensorTestResult<R>>;
fn ttest_rel(&self, a: &Tensor<R>, b: &Tensor<R>) -> Result<TensorTestResult<R>>;
fn pearsonr(&self, x: &Tensor<R>, y: &Tensor<R>) -> Result<TensorTestResult<R>>;
fn spearmanr(&self, x: &Tensor<R>, y: &Tensor<R>) -> Result<TensorTestResult<R>>;
fn f_oneway(&self, groups: &[&Tensor<R>]) -> Result<TensorTestResult<R>>;
fn kruskal(&self, groups: &[&Tensor<R>]) -> Result<TensorTestResult<R>>;
fn friedmanchisquare(&self, groups: &[&Tensor<R>]) -> Result<TensorTestResult<R>>;
fn shapiro(&self, x: &Tensor<R>) -> Result<TensorTestResult<R>>;
fn normaltest(&self, x: &Tensor<R>) -> Result<TensorTestResult<R>>;
fn levene(&self, groups: &[&Tensor<R>], center: LeveneCenter) -> Result<TensorTestResult<R>>;
fn bartlett(&self, groups: &[&Tensor<R>]) -> Result<TensorTestResult<R>>;
}