mod forward;
pub use forward::*;
mod importance;
pub use importance::*;
use crate::{
models::{BN, CTBN},
types::Result,
};
pub trait BNSampler<T>
where
T: BN,
{
type Sample;
type Samples;
fn sample(&self) -> Result<Self::Sample>;
fn sample_n(&self, n: usize) -> Result<Self::Samples>;
}
pub trait ParBNSampler<T>
where
T: BN,
{
type Samples;
fn par_sample_n(&self, n: usize) -> Result<Self::Samples>;
}
pub trait CTBNSampler<T>
where
T: CTBN,
{
type Sample;
type Samples;
fn sample_by_length(&self, max_length: usize) -> Result<Self::Sample>;
fn sample_by_time(&self, max_time: f64) -> Result<Self::Sample>;
fn sample_by_length_or_time(&self, max_length: usize, max_time: f64) -> Result<Self::Sample>;
fn sample_n_by_length(&self, max_length: usize, n: usize) -> Result<Self::Samples>;
fn sample_n_by_time(&self, max_time: f64, n: usize) -> Result<Self::Samples>;
fn sample_n_by_length_or_time(
&self,
max_length: usize,
max_time: f64,
n: usize,
) -> Result<Self::Samples>;
}
pub trait ParCTBNSampler<T>
where
T: CTBN,
{
type Samples;
fn par_sample_n_by_length(&self, max_length: usize, n: usize) -> Result<Self::Samples>;
fn par_sample_n_by_time(&self, max_time: f64, n: usize) -> Result<Self::Samples>;
fn par_sample_n_by_length_or_time(
&self,
max_length: usize,
max_time: f64,
n: usize,
) -> Result<Self::Samples>;
}