mod table;
pub use table::*;
mod trajectory;
use itertools::Either;
pub use trajectory::*;
use crate::types::{Map, Set};
pub trait Dataset {
type Values;
fn values(&self) -> &Self::Values;
fn sample_size(&self) -> f64;
fn select(&self, x: &Set<usize>) -> Self;
}
#[non_exhaustive]
#[derive(Clone, Copy, Debug)]
pub enum MissingMethod {
LW,
PW,
IPW,
AIPW,
}
pub trait IncDataset: Dataset + Sized {
type Missing;
const MISSING: Self::Missing;
type Complete;
type Weighted;
fn missing(&self) -> &MissingTable;
fn apply_missing_method(
&self,
m: &MissingMethod,
x: Option<&Set<usize>>,
pr: Option<&Map<usize, Set<usize>>>,
) -> Either<Self::Complete, Self::Weighted>;
fn lw_deletion(&self) -> Self::Complete;
fn pw_deletion(&self, x: &Set<usize>) -> Self::Complete;
fn ipw_deletion(&self, x: &Set<usize>, pr: &Map<usize, Set<usize>>) -> Self::Weighted;
fn aipw_deletion(&self, x: &Set<usize>, pr: &Map<usize, Set<usize>>) -> Self::Weighted;
}