pub trait Module {
// Required methods
fn forward(&self, input: &Tensor) -> Tensor;
fn gather_parameters(&self, out: &mut Vec<Tensor>);
// Provided methods
fn parameters(&self) -> Vec<Tensor> { ... }
fn update(&self, _params: &mut HashMap<usize, Tensor>) { ... }
}