Sampleable

Trait Sampleable 

Source
pub trait Sampleable<X> {
    // Required method
    fn draw<R: Rng>(&self, rng: &mut R) -> X;

    // Provided methods
    fn sample<R: Rng>(&self, n: usize, rng: &mut R) -> Vec<X> { ... }
    fn sample_stream<'r, R: Rng>(
        &'r self,
        rng: &'r mut R,
    ) -> Box<dyn Iterator<Item = X> + 'r> { ... }
}

Required Methods§

Source

fn draw<R: Rng>(&self, rng: &mut R) -> X

Single draw from the Rv

§Example

Flip a coin

use rv::dist::Bernoulli;
use rv::traits::*;

let b = Bernoulli::uniform();
let mut rng = rand::rng();
let x: bool = b.draw(&mut rng); // could be true, could be false.

Provided Methods§

Source

fn sample<R: Rng>(&self, n: usize, rng: &mut R) -> Vec<X>

Multiple draws of the Rv

§Example

Flip a lot of coins

use rv::dist::Bernoulli;
use rv::traits::*;

let b = Bernoulli::uniform();
let mut rng = rand::rng();
let xs: Vec<bool> = b.sample(22, &mut rng);

assert_eq!(xs.len(), 22);

Estimate Gaussian mean

use rv::dist::Gaussian;
use rv::traits::*;

let gauss = Gaussian::standard();
let mut rng = rand::rng();
let xs: Vec<f64> = gauss.sample(100_000, &mut rng);

assert::close(xs.iter().sum::<f64>()/100_000.0, 0.0, 1e-2);
Source

fn sample_stream<'r, R: Rng>( &'r self, rng: &'r mut R, ) -> Box<dyn Iterator<Item = X> + 'r>

Create a never-ending iterator of samples

§Example

Estimate the mean of a Gamma distribution

use rv::traits::*;
use rv::dist::Gamma;

let mut rng = rand::rng();

let gamma = Gamma::new(2.0, 1.0).unwrap();

let n = 1_000_000_usize;
let mean = <Gamma as Sampleable<f64>>::sample_stream(&gamma, &mut rng)
    .take(n)
    .sum::<f64>() / n as f64;;

assert::close(mean, 2.0, 1e-2);

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl Sampleable<()> for ()

Source§

fn draw<R: Rng>(&self, rng: &mut R)

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11> Sampleable<(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11)> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)
where T0: Sampleable<X0>, T1: Sampleable<X1>, T2: Sampleable<X2>, T3: Sampleable<X3>, T4: Sampleable<X4>, T5: Sampleable<X5>, T6: Sampleable<X6>, T7: Sampleable<X7>, T8: Sampleable<X8>, T9: Sampleable<X9>, T10: Sampleable<X10>, T11: Sampleable<X11>,

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10> Sampleable<(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10)> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)
where T0: Sampleable<X0>, T1: Sampleable<X1>, T2: Sampleable<X2>, T3: Sampleable<X3>, T4: Sampleable<X4>, T5: Sampleable<X5>, T6: Sampleable<X6>, T7: Sampleable<X7>, T8: Sampleable<X8>, T9: Sampleable<X9>, T10: Sampleable<X10>,

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, X0, X1, X2, X3, X4, X5, X6, X7, X8, X9> Sampleable<(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9)> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)
where T0: Sampleable<X0>, T1: Sampleable<X1>, T2: Sampleable<X2>, T3: Sampleable<X3>, T4: Sampleable<X4>, T5: Sampleable<X5>, T6: Sampleable<X6>, T7: Sampleable<X7>, T8: Sampleable<X8>, T9: Sampleable<X9>,

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, X0, X1, X2, X3, X4, X5, X6, X7, X8> Sampleable<(X0, X1, X2, X3, X4, X5, X6, X7, X8)> for (T0, T1, T2, T3, T4, T5, T6, T7, T8)
where T0: Sampleable<X0>, T1: Sampleable<X1>, T2: Sampleable<X2>, T3: Sampleable<X3>, T4: Sampleable<X4>, T5: Sampleable<X5>, T6: Sampleable<X6>, T7: Sampleable<X7>, T8: Sampleable<X8>,

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, X0, X1, X2, X3, X4, X5, X6, X7> Sampleable<(X0, X1, X2, X3, X4, X5, X6, X7)> for (T0, T1, T2, T3, T4, T5, T6, T7)
where T0: Sampleable<X0>, T1: Sampleable<X1>, T2: Sampleable<X2>, T3: Sampleable<X3>, T4: Sampleable<X4>, T5: Sampleable<X5>, T6: Sampleable<X6>, T7: Sampleable<X7>,

Source§

impl<T0, T1, T2, T3, T4, T5, T6, X0, X1, X2, X3, X4, X5, X6> Sampleable<(X0, X1, X2, X3, X4, X5, X6)> for (T0, T1, T2, T3, T4, T5, T6)
where T0: Sampleable<X0>, T1: Sampleable<X1>, T2: Sampleable<X2>, T3: Sampleable<X3>, T4: Sampleable<X4>, T5: Sampleable<X5>, T6: Sampleable<X6>,

Source§

impl<T0, T1, T2, T3, T4, T5, X0, X1, X2, X3, X4, X5> Sampleable<(X0, X1, X2, X3, X4, X5)> for (T0, T1, T2, T3, T4, T5)
where T0: Sampleable<X0>, T1: Sampleable<X1>, T2: Sampleable<X2>, T3: Sampleable<X3>, T4: Sampleable<X4>, T5: Sampleable<X5>,

Source§

impl<T0, T1, T2, T3, T4, X0, X1, X2, X3, X4> Sampleable<(X0, X1, X2, X3, X4)> for (T0, T1, T2, T3, T4)
where T0: Sampleable<X0>, T1: Sampleable<X1>, T2: Sampleable<X2>, T3: Sampleable<X3>, T4: Sampleable<X4>,

Source§

impl<T0, T1, T2, T3, X0, X1, X2, X3> Sampleable<(X0, X1, X2, X3)> for (T0, T1, T2, T3)
where T0: Sampleable<X0>, T1: Sampleable<X1>, T2: Sampleable<X2>, T3: Sampleable<X3>,

Source§

fn draw<R: Rng>(&self, rng: &mut R) -> (X0, X1, X2, X3)

Source§

impl<T0, T1, T2, X0, X1, X2> Sampleable<(X0, X1, X2)> for (T0, T1, T2)
where T0: Sampleable<X0>, T1: Sampleable<X1>, T2: Sampleable<X2>,

Source§

fn draw<R: Rng>(&self, rng: &mut R) -> (X0, X1, X2)

Source§

impl<T0, T1, X0, X1> Sampleable<(X0, X1)> for (T0, T1)
where T0: Sampleable<X0>, T1: Sampleable<X1>,

Source§

fn draw<R: Rng>(&self, rng: &mut R) -> (X0, X1)

Source§

impl<T0, X0> Sampleable<(X0,)> for (T0,)
where T0: Sampleable<X0>,

Source§

fn draw<R: Rng>(&self, rng: &mut R) -> (X0,)

Implementors§

Source§

impl Sampleable<f16> for Gaussian

Source§

impl Sampleable<f32> for Beta

Source§

impl Sampleable<f32> for Cauchy

Source§

impl Sampleable<f32> for ChiSquared

Source§

impl Sampleable<f32> for Delta

Source§

impl Sampleable<f32> for Exponential

Source§

impl Sampleable<f32> for Gamma

Source§

impl Sampleable<f32> for Gaussian

Source§

impl Sampleable<f32> for Gev

Source§

impl Sampleable<f32> for InvChiSquared

Source§

impl Sampleable<f32> for InvGamma

Source§

impl Sampleable<f32> for InvGaussian

Source§

impl Sampleable<f32> for KsTwoAsymptotic

Source§

impl Sampleable<f32> for Kumaraswamy

Source§

impl Sampleable<f32> for Laplace

Source§

impl Sampleable<f32> for LogNormal

Source§

impl Sampleable<f32> for Pareto

Source§

impl Sampleable<f32> for ScaledInvChiSquared

Source§

impl Sampleable<f32> for StudentsT

Source§

impl Sampleable<f32> for Uniform

Source§

impl Sampleable<f32> for UnitPowerLaw

Source§

impl Sampleable<f32> for VonMises

Source§

impl Sampleable<f64> for Beta

Source§

impl Sampleable<f64> for BetaPrime

Source§

impl Sampleable<f64> for Cauchy

Source§

impl Sampleable<f64> for ChiSquared

Source§

impl Sampleable<f64> for Delta

Source§

impl Sampleable<f64> for Empirical

Source§

impl Sampleable<f64> for Exponential

Source§

impl Sampleable<f64> for Gamma

Source§

impl Sampleable<f64> for Gaussian

Source§

impl Sampleable<f64> for Gev

Source§

impl Sampleable<f64> for InvChiSquared

Source§

impl Sampleable<f64> for InvGamma

Source§

impl Sampleable<f64> for InvGaussian

Source§

impl Sampleable<f64> for KsTwoAsymptotic

Source§

impl Sampleable<f64> for Kumaraswamy

Source§

impl Sampleable<f64> for Laplace

Source§

impl Sampleable<f64> for LogNormal

Source§

impl Sampleable<f64> for Pareto

Source§

impl Sampleable<f64> for ScaledInvChiSquared

Source§

impl Sampleable<f64> for StudentsT

Source§

impl Sampleable<f64> for Uniform

Source§

impl Sampleable<f64> for UnitPowerLaw

Source§

impl Sampleable<f64> for VonMises

Source§

impl Sampleable<i8> for BetaBinomial

Source§

impl Sampleable<i8> for Binomial

Source§

impl Sampleable<i8> for Skellam

Source§

impl Sampleable<i16> for BetaBinomial

Source§

impl Sampleable<i16> for Binomial

Source§

impl Sampleable<i16> for Skellam

Source§

impl Sampleable<i32> for BetaBinomial

Source§

impl Sampleable<i32> for Binomial

Source§

impl Sampleable<i32> for Skellam

Source§

impl Sampleable<i64> for BetaBinomial

Source§

impl Sampleable<i64> for Binomial

Source§

impl Sampleable<u8> for BetaBinomial

Source§

impl Sampleable<u8> for Binomial

Source§

impl Sampleable<u8> for NegBinomial

Source§

impl Sampleable<u8> for Poisson

Source§

impl Sampleable<u16> for BetaBinomial

Source§

impl Sampleable<u16> for Binomial

Source§

impl Sampleable<u16> for NegBinomial

Source§

impl Sampleable<u16> for Poisson

Source§

impl Sampleable<u32> for BetaBinomial

Source§

impl Sampleable<u32> for Binomial

Source§

impl Sampleable<u32> for NegBinomial

Source§

impl Sampleable<u32> for Poisson

Source§

impl Sampleable<u64> for BetaBinomial

Source§

impl Sampleable<u64> for Binomial

Source§

impl Sampleable<usize> for BetaBinomial

Source§

impl Sampleable<usize> for Binomial

Source§

impl Sampleable<usize> for Cdvm

Source§

impl Sampleable<usize> for Poisson

Source§

impl Sampleable<usize> for StickBreakingDiscrete

Enables sampling from StickBreakingDiscrete.

Source§

impl Sampleable<Partition> for Crp

Source§

impl Sampleable<Bernoulli> for Beta

Source§

impl Sampleable<Bernoulli> for UnitPowerLaw

Source§

impl Sampleable<Categorical> for Dirichlet

Source§

impl Sampleable<Categorical> for SymmetricDirichlet

Source§

impl Sampleable<Gaussian> for NormalGamma

Source§

impl Sampleable<Gaussian> for NormalInvChiSquared

Source§

impl Sampleable<Gaussian> for NormalInvGamma

Source§

impl Sampleable<MvGaussian> for NormalInvWishart

Source§

impl Sampleable<Poisson> for Gamma

Source§

impl Sampleable<StickBreakingDiscrete> for BetaPrime

Available on crate feature experimental only.
Source§

impl Sampleable<StickBreakingDiscrete> for StickBreaking

Implements the Sampleable trait for StickBreaking.

Source§

impl Sampleable<StickSequence> for StickBreaking

Source§

impl Sampleable<Vec<f64>> for Dirichlet

Source§

impl Sampleable<Vec<f64>> for SymmetricDirichlet

Source§

impl Sampleable<Matrix<f64, Dyn, Const<1>, VecStorage<f64, Dyn, Const<1>>>> for MvGaussian

Source§

impl Sampleable<Matrix<f64, Dyn, Dyn, VecStorage<f64, Dyn, Dyn>>> for InvWishart

Source§

impl<D> Sampleable<f64> for Scaled<D>
where D: Sampleable<f64>,

Source§

impl<D> Sampleable<f64> for Shifted<D>
where D: Sampleable<f64>,

Source§

impl<K> Sampleable<Matrix<f64, Dyn, Const<1>, VecStorage<f64, Dyn, Const<1>>>> for GaussianProcessPrediction<K>
where K: Kernel,

Source§

impl<Pr, Fx> Sampleable<Scaled<Fx>> for ScaledPrior<Pr, Fx>
where Pr: Sampleable<Fx>, Fx: Scalable,

Source§

impl<Pr, Fx> Sampleable<Shifted<Fx>> for ShiftedPrior<Pr, Fx>
where Pr: Sampleable<Fx>, Fx: Shiftable,

Source§

impl<X> Sampleable<X> for Geometric

Source§

impl<X, Fx> Sampleable<X> for Mixture<Fx>
where Fx: Rv<X>,

Source§

impl<X, Fx, Pr> Sampleable<X> for ConjugateModel<X, Fx, Pr>
where Fx: Rv<X> + HasSuffStat<X>, Pr: ConjugatePrior<X, Fx>,

Source§

impl<X, T> Sampleable<X> for DiscreteUniform<T>
where T: DuParam + SampleUniform + Copy, X: Integer + From<T>,

Source§

impl<X: Booleable> Sampleable<X> for Bernoulli

Source§

impl<X: CategoricalDatum> Sampleable<X> for Categorical