use rv::data::DataOrSuffStat;
use rv::dist::{Categorical, SymmetricDirichlet};
use rv::prelude::CategoricalData;
use rv::traits::*;
fn main() {
let mut rng = rand::thread_rng();
let ctgrl = Categorical::new(&vec![1.0, 1.0, 1.0, 1.0, 1.0, 5.0]).unwrap();
let rolls: Vec<u8> = ctgrl.sample(1000, &mut rng);
let prior = SymmetricDirichlet::jeffreys(6).unwrap();
let obs: CategoricalData<u8> = DataOrSuffStat::Data(&rolls);
println!("Log P(rolls) = {}", prior.ln_m(&obs));
let pp_5: f64 = prior.pp(&5_u8, &obs);
println!("P(y = 5 | rolls) = {}", pp_5);
let weights: Vec<f64> = prior.posterior(&obs).draw(&mut rng);
println!("Die weight sample: {:?}", weights);
}