#![deny(missing_docs)]
#![allow(non_upper_case_globals)]
extern crate approx;
extern crate nalgebra;
extern crate rand;
extern crate regex;
use std::cell::RefCell;
use rand::rngs::ThreadRng;
thread_local!(
pub static GLOBAL_RNG: RefCell<ThreadRng> = RefCell::new(ThreadRng::default())
);
pub mod gfi;
pub mod address;
pub mod trie;
pub mod modeling;
pub mod inference;
mod mathutils;
pub use trie::Trie;
pub use address::{SplitAddr, normalize_addr};
pub use gfi::{Trace, GenFn, GfDiff};
pub use modeling::dists::{u01,Distribution,bernoulli,uniform_continuous,uniform,uniform_discrete,categorical,normal,mvnormal};
pub use modeling::triefn::{TrieFn,TrieFnState,AddrTrie};
pub use modeling::unfold::Unfold;
pub use mathutils::logsumexp;
pub use inference::importance_sampling;
pub use inference::metropolis_hastings;
pub use inference::mh;
pub use inference::ParticleSystem;