use crate::{
ebi_traits::ebi_trait_finite_stochastic_language::EbiTraitFiniteStochasticLanguage,
math::{distances::WeightedDistances, distances_matrix::WeightedDistanceMatrix},
};
use ebi_objects::{anyhow::Result, ebi_arithmetic::Fraction};
pub trait EarthMoversStochasticConformance {
fn earth_movers_stochastic_conformance(
&mut self,
lang_b: &mut dyn EbiTraitFiniteStochasticLanguage,
) -> Result<Fraction>;
}
impl EarthMoversStochasticConformance for dyn EbiTraitFiniteStochasticLanguage {
fn earth_movers_stochastic_conformance(
&mut self,
lang_b: &mut dyn EbiTraitFiniteStochasticLanguage,
) -> Result<Fraction> {
lang_b.translate_using_activity_key(self.activity_key_mut());
let distances = WeightedDistanceMatrix::new(self, lang_b);
let distances: Box<dyn WeightedDistances> = Box::new(distances);
distances.earth_movers_stochastic_conformance()
}
}