use crate::prelude::{Assembly, AssemblyFrame, TrainingStrategy};
pub struct Trainer<'a, AssemblyType, ATF, TS>
where
AssemblyType: Assembly + Send,
ATF: AssemblyFrame<AssemblyType>,
TS: TrainingStrategy<AssemblyType, ATF>,
{
pub reference_assembly: &'a mut AssemblyType,
pub frame: ATF,
pub strategy: TS,
}
impl<'a, AssemblyType, ATF, TS> Trainer<'a, AssemblyType, ATF, TS>
where
AssemblyType: Assembly + Send,
ATF: AssemblyFrame<AssemblyType>,
TS: TrainingStrategy<AssemblyType, ATF>,
{
pub fn new(
assembly: &'a mut AssemblyType,
frame: ATF,
strategy: TS,
) -> Trainer<AssemblyType, ATF, TS> {
Trainer {
reference_assembly: assembly,
frame,
strategy,
}
}
pub async fn epoch(&mut self) -> Result<f32, String> {
self.strategy
.epoch(self.reference_assembly, &mut self.frame)
.await
}
}