causal-hub 0.0.6

A library for causal models, inference and discovery.
Documentation
use crate::{
    estimators::{CSSEstimator, ParCSSEstimator, SSE},
    models::{MixedCPDS, MixedIncTable, MixedTable, MixedWtdTable},
    types::Set,
};

macro_rules! impl_css_for_mixed {
    ($enum:ident) => {
        impl CSSEstimator<MixedCPDS> for SSE<'_, $enum> {
            fn fit(&self, x: &Set<usize>, z: &Set<usize>) -> crate::types::Result<MixedCPDS> {
                match self.dataset {
                    $enum::Categorical(t) => SSE::new(t)
                        .with_missing_method(self.missing_method, self.missing_mechanism.clone())?
                        .fit(x, z)
                        .map(MixedCPDS::Categorical),
                    $enum::Gaussian(t) => SSE::new(t)
                        .with_missing_method(self.missing_method, self.missing_mechanism.clone())?
                        .fit(x, z)
                        .map(|stats| MixedCPDS::Gaussian(Box::new(stats))),
                }
            }
        }
        impl ParCSSEstimator<MixedCPDS> for SSE<'_, $enum> {
            fn par_fit(&self, x: &Set<usize>, z: &Set<usize>) -> crate::types::Result<MixedCPDS> {
                match self.dataset {
                    $enum::Categorical(t) => SSE::new(t)
                        .with_missing_method(self.missing_method, self.missing_mechanism.clone())?
                        .par_fit(x, z)
                        .map(MixedCPDS::Categorical),
                    $enum::Gaussian(t) => SSE::new(t)
                        .with_missing_method(self.missing_method, self.missing_mechanism.clone())?
                        .par_fit(x, z)
                        .map(|stats| MixedCPDS::Gaussian(Box::new(stats))),
                }
            }
        }
    };
}

impl_css_for_mixed!(MixedTable);
impl_css_for_mixed!(MixedIncTable);
impl_css_for_mixed!(MixedWtdTable);