rv
Random variables for rust
Developed and tested on nightly.
Design
Random variables are designed to be flexible. For example, we don't just want a
Beta
distribution that works with f64
; we want it to work with a bunch of
things.
extern crate rand;
extern crate rv;
use *;
// Beta(0.5, 0.5)
let beta = jeffreys;
let mut rng = thread_rng;
// 100 f64 weights in (0, 1)
let f64s: = beta.sample;
let pdf_x = beta.ln_pdf;
// 100 f32 weights in (0, 1)
let f32s: = beta.sample;
let pdf_y = beta.ln_pdf;
// 100 Bernoulli distributions -- Beta is a prior on the weight
let berns: = beta.sample;
let pdf_bern = beta.ln_pdf;
Contributing
- Please create an issue before starting any work. We're far from stable, so we might actually be working on what you want, or might be working on something that will change hoe you might implement it.
- If you plan on implementing a new distribution, implement at least
Rv
,Support
, and eitherContinuousDistr
orDiscreteDistr
. Of course, more is better! - Implement new distributions for the appropriate types. For example, don't
just implement
Rv<f64>
, also implementRv<f32>
. Check out other distributions to see how it can be done easily with macros. - Write tests, docs, and doc tests.
- Use
rustfmt
. We've included a.rustfmt.toml
in the project directory.