use crate::{
dae::DAE,
error::Error,
stats::Evals,
status::Status,
traits::{Real, State},
};
pub trait AlgebraicNumericalMethod<T, V>
where
T: Real,
V: State<T>,
{
fn init<F>(&mut self, dae: &F, t0: T, tf: T, y0: &V) -> Result<Evals, Error<T, V>>
where
F: DAE<T, V>;
fn step<F>(&mut self, dae: &F) -> Result<Evals, Error<T, V>>
where
F: DAE<T, V>;
fn t(&self) -> T;
fn y(&self) -> &V;
fn t_prev(&self) -> T;
fn y_prev(&self) -> &V;
fn h(&self) -> T;
fn set_h(&mut self, h: T);
fn status(&self) -> &Status<T, V>;
fn set_status(&mut self, status: Status<T, V>);
}