#![doc(
html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk.png",
html_favicon_url = "https://www.rust-lang.org/favicon.ico"
)]
#![forbid(unsafe_code)]
#![deny(missing_docs)]
#![deny(missing_debug_implementations)]
#![allow(
clippy::excessive_precision,
clippy::float_cmp,
clippy::unreadable_literal
)]
#![allow(clippy::neg_cmp_op_on_partial_ord)] #![no_std]
#[cfg(feature = "alloc")]
extern crate alloc;
#[cfg(feature = "std")]
extern crate std;
#[allow(unused)]
use rand::Rng;
pub use rand::distr::{
Alphanumeric, Bernoulli, BernoulliError, Distribution, Iter, Open01, OpenClosed01,
StandardUniform, Uniform, uniform,
};
pub use self::beta::{Beta, Error as BetaError};
pub use self::binomial::{Binomial, Error as BinomialError};
pub use self::cauchy::{Cauchy, Error as CauchyError};
pub use self::chi_squared::{ChiSquared, Error as ChiSquaredError};
pub use self::exponential::{Error as ExpError, Exp, Exp1};
pub use self::fisher_f::{Error as FisherFError, FisherF};
pub use self::frechet::{Error as FrechetError, Frechet};
pub use self::gamma::{Error as GammaError, Gamma};
pub use self::geometric::{Error as GeoError, Geometric, StandardGeometric};
pub use self::gumbel::{Error as GumbelError, Gumbel};
pub use self::hypergeometric::{Error as HyperGeoError, Hypergeometric};
pub use self::inverse_gaussian::{Error as InverseGaussianError, InverseGaussian};
pub use self::normal::{Error as NormalError, LogNormal, Normal, StandardNormal};
pub use self::normal_inverse_gaussian::{
Error as NormalInverseGaussianError, NormalInverseGaussian,
};
pub use self::pareto::{Error as ParetoError, Pareto};
pub use self::pert::{Pert, PertBuilder, PertError};
pub use self::poisson::{Error as PoissonError, Poisson};
pub use self::skew_normal::{Error as SkewNormalError, SkewNormal};
pub use self::triangular::{Triangular, TriangularError};
pub use self::unit_ball::UnitBall;
pub use self::unit_circle::UnitCircle;
pub use self::unit_disc::UnitDisc;
pub use self::unit_sphere::UnitSphere;
pub use self::weibull::{Error as WeibullError, Weibull};
pub use self::zeta::{Error as ZetaError, Zeta};
pub use self::zipf::{Error as ZipfError, Zipf};
pub use student_t::StudentT;
pub use num_traits;
#[cfg(feature = "alloc")]
pub mod multi;
#[cfg(feature = "alloc")]
pub mod weighted;
#[cfg(test)]
#[macro_use]
mod test {
pub struct VoidRng;
impl rand::TryRng for VoidRng {
type Error = rand::rand_core::Infallible;
fn try_next_u32(&mut self) -> Result<u32, Self::Error> {
panic!("usage of VoidRng")
}
fn try_next_u64(&mut self) -> Result<u64, Self::Error> {
panic!("usage of VoidRng")
}
fn try_fill_bytes(&mut self, _: &mut [u8]) -> Result<(), Self::Error> {
panic!("usage of VoidRng")
}
}
pub fn rng(seed: u64) -> impl rand::RngExt {
const INC: u64 = 11634580027462260723;
rand_pcg::Pcg32::new(seed, INC)
}
macro_rules! assert_almost_eq {
($a:expr, $b:expr, $prec:expr) => {
let diff = ($a - $b).abs();
assert!(
diff <= $prec,
"assertion failed: `abs(left - right) = {:.1e} < {:e}`, \
(left: `{}`, right: `{}`)",
diff,
$prec,
$a,
$b
);
};
}
}
mod beta;
mod binomial;
mod cauchy;
mod chi_squared;
mod exponential;
mod fisher_f;
mod frechet;
mod gamma;
mod geometric;
mod gumbel;
mod hypergeometric;
mod inverse_gaussian;
mod normal;
mod normal_inverse_gaussian;
mod pareto;
mod pert;
pub(crate) mod poisson;
mod skew_normal;
mod student_t;
mod triangular;
mod unit_ball;
mod unit_circle;
mod unit_disc;
mod unit_sphere;
mod utils;
mod weibull;
mod zeta;
mod ziggurat_tables;
mod zipf;