pub trait BaseAugmenter<T, K> {
fn augment(&self, input: T, rng: &mut dyn rand::RngCore) -> T {
let input = self.convert_to_inner(input);
let output = self.augment_inner(input, rng);
self.convert_to_outer(output)
}
fn augment_batch(&self, inputs: Vec<T>, rng: &mut dyn rand::RngCore) -> Vec<T> {
inputs.into_iter().map(|input| self.augment(input, rng)).collect()
}
fn augment_inner(&self, input: K, rng: &mut dyn rand::RngCore) -> K;
fn convert_to_inner(&self, input: T) -> K;
fn convert_to_outer(&self, input: K) -> T;
}