pub trait Optimizer: Debug {
// Required method
fn update_parameter(
&mut self,
slot: usize,
params: &mut [Float],
grads: &[Float],
scale: Float,
);
// Provided method
fn begin_step(&mut self) { ... }
}