use std::panic::Location;
use rand_distr::{
BernoulliError, BetaError, ChiSquaredError, ExpError, GammaError, GumbelError, NormalError,
NormalInverseGaussianError, ParetoError, PoissonError, TriangularError, WeibullError,
ZipfError,
};
use thiserror::Error;
use super::base::TensorError;
#[derive(Debug, Error)]
pub enum RandomError {
#[error("Beta distribution error: {source} at {location}")]
Beta {
source: BetaError,
location: &'static Location<'static>,
},
#[error("Normal distribution error: {source} at {location}")]
Normal {
source: NormalError,
location: &'static Location<'static>,
},
#[error("Chi-square distribution error: {source} at {location}")]
ChiSquare {
source: ChiSquaredError,
location: &'static Location<'static>,
},
#[error("Exponential distribution error: {source} at {location}")]
Exp {
source: ExpError,
location: &'static Location<'static>,
},
#[error("Gamma distribution error: {source} at {location}")]
Gamma {
source: GammaError,
location: &'static Location<'static>,
},
#[error("Gumbel distribution error: {source} at {location}")]
Gumbel {
source: GumbelError,
location: &'static Location<'static>,
},
#[error("Inverse Gaussian distribution error: {source} at {location}")]
NormalInverseGaussian {
source: NormalInverseGaussianError,
location: &'static Location<'static>,
},
#[error("Pareto distribution error: {source} at {location}")]
Pareto {
source: ParetoError,
location: &'static Location<'static>,
},
#[error("Poisson distribution error: {source} at {location}")]
Poisson {
source: PoissonError,
location: &'static Location<'static>,
},
#[error("Weibull distribution error: {source} at {location}")]
Weibull {
source: WeibullError,
location: &'static Location<'static>,
},
#[error("Zipf distribution error: {source} at {location}")]
Zipf {
source: ZipfError,
location: &'static Location<'static>,
},
#[error("Triangular distribution error: {source} at {location}")]
Triangular {
source: TriangularError,
location: &'static Location<'static>,
},
#[error("Bernoulli distribution error: {source} at {location}")]
Bernoulli {
source: BernoulliError,
location: &'static Location<'static>,
},
#[error("Uniform distribution error: {source} at {location}")]
Uniform {
source: rand_distr::uniform::Error,
location: &'static Location<'static>,
},
}
impl From<BetaError> for TensorError {
#[track_caller]
fn from(source: BetaError) -> Self {
Self::Random(RandomError::Beta {
source,
location: Location::caller(),
})
}
}
impl From<NormalError> for TensorError {
#[track_caller]
fn from(source: NormalError) -> Self {
Self::Random(RandomError::Normal {
source,
location: Location::caller(),
})
}
}
impl From<ChiSquaredError> for TensorError {
#[track_caller]
fn from(source: ChiSquaredError) -> Self {
Self::Random(RandomError::ChiSquare {
source,
location: Location::caller(),
})
}
}
impl From<ExpError> for TensorError {
#[track_caller]
fn from(source: ExpError) -> Self {
Self::Random(RandomError::Exp {
source,
location: Location::caller(),
})
}
}
impl From<GammaError> for TensorError {
#[track_caller]
fn from(source: GammaError) -> Self {
Self::Random(RandomError::Gamma {
source,
location: Location::caller(),
})
}
}
impl From<GumbelError> for TensorError {
#[track_caller]
fn from(source: GumbelError) -> Self {
Self::Random(RandomError::Gumbel {
source,
location: Location::caller(),
})
}
}
impl From<NormalInverseGaussianError> for TensorError {
#[track_caller]
fn from(source: NormalInverseGaussianError) -> Self {
Self::Random(RandomError::NormalInverseGaussian {
source,
location: Location::caller(),
})
}
}
impl From<ParetoError> for TensorError {
#[track_caller]
fn from(source: ParetoError) -> Self {
Self::Random(RandomError::Pareto {
source,
location: Location::caller(),
})
}
}
impl From<PoissonError> for TensorError {
#[track_caller]
fn from(source: PoissonError) -> Self {
Self::Random(RandomError::Poisson {
source,
location: Location::caller(),
})
}
}
impl From<WeibullError> for TensorError {
#[track_caller]
fn from(source: WeibullError) -> Self {
Self::Random(RandomError::Weibull {
source,
location: Location::caller(),
})
}
}
impl From<ZipfError> for TensorError {
#[track_caller]
fn from(source: ZipfError) -> Self {
Self::Random(RandomError::Zipf {
source,
location: Location::caller(),
})
}
}
impl From<TriangularError> for TensorError {
#[track_caller]
fn from(source: TriangularError) -> Self {
Self::Random(RandomError::Triangular {
source,
location: Location::caller(),
})
}
}
impl From<BernoulliError> for TensorError {
#[track_caller]
fn from(source: BernoulliError) -> Self {
Self::Random(RandomError::Bernoulli {
source,
location: Location::caller(),
})
}
}
impl From<rand_distr::uniform::Error> for TensorError {
#[track_caller]
fn from(source: rand_distr::uniform::Error) -> Self {
Self::Random(RandomError::Uniform {
source,
location: Location::caller(),
})
}
}