use crate::core::error::ModelError;
use ndarray::{ArrayView, ArrayViewMut, Dimension, IxDyn};
use std::fmt::Debug;
pub trait ParamCollection: Debug + Send + Sync {
fn get<D: Dimension>(&self, key: &str) -> Result<ArrayView<f64, D>, ModelError>;
fn get_mut<D: Dimension>(&mut self, key: &str) -> Result<ArrayViewMut<f64, D>, ModelError>;
fn set<D: Dimension>(&mut self, key: &str, value: ArrayView<f64, D>) -> Result<(), ModelError>;
fn param_iter(&self) -> Vec<(&str, ArrayView<f64, IxDyn>)>;
}
pub trait GradientCollection {
fn get_gradient<D: Dimension>(&self, key: &str) -> Result<ArrayView<f64, D>, ModelError>;
fn set_gradient<D: Dimension>(
&mut self,
key: &str,
value: ArrayView<f64, D>,
) -> Result<(), ModelError>;
}