pub trait Layer<const IN: usize, const OUT: usize> {
// Required methods
fn forward(&self, input: &[Float; IN], output: &mut [Float; OUT]);
fn backward(
&mut self,
input: &[Float; IN],
output: &[Float; OUT],
output_grad: &[Float; OUT],
input_grad: &mut [Float; IN],
);
// Provided methods
fn zero_grad(&mut self) { ... }
fn apply_gradients(
&mut self,
_optimizer: &mut dyn Optimizer,
_slot: &mut usize,
_scale: Float,
) { ... }
}