use ::num_traits::float::Float;
pub trait Min<T> {
fn min(&self) -> T;
}
pub trait Max<T> {
fn max(&self) -> T;
}
pub trait DiscreteDistribution<T: Float> {
fn mean(&self) -> Option<T> {
None
}
fn variance(&self) -> Option<T> {
None
}
fn std_dev(&self) -> Option<T> {
self.variance().map(|var| var.sqrt())
}
fn entropy(&self) -> Option<T> {
None
}
fn skewness(&self) -> Option<T> {
None
}
}
pub trait Distribution<T: Float> {
fn mean(&self) -> Option<T> {
None
}
fn variance(&self) -> Option<T> {
None
}
fn std_dev(&self) -> Option<T> {
self.variance().map(|var| var.sqrt())
}
fn entropy(&self) -> Option<T> {
None
}
fn skewness(&self) -> Option<T> {
None
}
}
pub trait MeanN<T> {
fn mean(&self) -> Option<T>;
}
pub trait VarianceN<T> {
fn variance(&self) -> Option<T>;
}
pub trait Median<T> {
fn median(&self) -> T;
}
pub trait Mode<T> {
fn mode(&self) -> T;
}