use super::GradientsParams;
use crate::LearningRate;
use crate::module::AutodiffModule;
use crate::record::Record;
use crate::tensor::backend::AutodiffBackend;
pub trait Optimizer<M, B>: Send
where
M: AutodiffModule<B>,
B: AutodiffBackend,
{
type Record: Record<B>;
fn step(&mut self, lr: LearningRate, module: M, grads: GradientsParams) -> M;
fn to_record(&self) -> Self::Record;
fn load_record(self, record: Self::Record) -> Self;
}