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