mod beta;
mod cauchy;
mod chi_squared;
mod dirichlet;
mod exponential;
mod f_distribution;
mod gamma;
mod gumbel;
mod inverse_gamma;
mod laplace;
mod lognormal;
mod normal;
mod pareto;
mod student_t;
mod truncated_normal;
mod uniform;
mod weibull;
mod wishart;
pub use beta::Beta;
pub use cauchy::Cauchy;
pub use chi_squared::ChiSquared;
pub use dirichlet::Dirichlet;
pub use exponential::Exponential;
pub use f_distribution::FDistribution;
pub use gamma::Gamma;
pub use gumbel::{Gumbel, GumbelMin};
pub use inverse_gamma::InverseGamma;
pub use laplace::Laplace;
pub use lognormal::LogNormal;
pub use normal::Normal;
pub use pareto::Pareto;
pub use student_t::StudentT;
pub use truncated_normal::TruncatedNormal;
pub use uniform::Uniform;
pub use weibull::Weibull;
pub use wishart::Wishart;
pub(crate) mod special {
use numr::algorithm::special::scalar as numr_special;
pub const INV_SQRT_2PI: f64 = 0.3989422804014327;
pub const LN_SQRT_2PI: f64 = 0.9189385332046727;
#[allow(dead_code)]
pub fn erf(x: f64) -> f64 {
numr_special::erf_scalar(x)
}
pub fn erfc(x: f64) -> f64 {
numr_special::erfc_scalar(x)
}
pub fn erfinv(x: f64) -> f64 {
numr_special::erfinv_scalar(x)
}
pub fn norm_cdf(x: f64) -> f64 {
0.5 * erfc(-x / std::f64::consts::SQRT_2)
}
pub fn norm_ppf(p: f64) -> f64 {
std::f64::consts::SQRT_2 * erfinv(2.0 * p - 1.0)
}
#[allow(dead_code)]
pub fn gamma(x: f64) -> f64 {
numr_special::gamma_scalar(x)
}
pub fn lgamma(x: f64) -> f64 {
numr_special::lgamma_scalar(x)
}
#[allow(dead_code)]
pub fn beta(a: f64, b: f64) -> f64 {
numr_special::beta_scalar(a, b)
}
pub fn lbeta(a: f64, b: f64) -> f64 {
lgamma(a) + lgamma(b) - lgamma(a + b)
}
pub fn betainc(a: f64, b: f64, x: f64) -> f64 {
numr_special::betainc_scalar(a, b, x)
}
pub fn betaincinv(a: f64, b: f64, p: f64) -> f64 {
numr_special::betaincinv_scalar(a, b, p)
}
pub fn gammainc(a: f64, x: f64) -> f64 {
numr_special::gammainc_scalar(a, x)
}
pub fn gammaincc(a: f64, x: f64) -> f64 {
numr_special::gammaincc_scalar(a, x)
}
pub fn gammaincinv(a: f64, p: f64) -> f64 {
numr_special::gammaincinv_scalar(a, p)
}
pub fn digamma(x: f64) -> f64 {
numr_special::digamma_scalar(x)
}
}