use std::fmt::Debug;
use ndarray::{ArrayBase, ArrayViewMut, Data, Dimension, Ix1};
use num_traits::Num;
use super::Interp1D;
use crate::{BuilderError, InterpolateError};
mod cubic_spline;
mod linear;
pub use cubic_spline::CubicSpline;
pub use linear::Linear;
pub trait Interp1DStrategyBuilder<Sd, Sx, D>
where
Sd: Data,
Sd::Elem: Num + Debug,
Sx: Data<Elem = Sd::Elem>,
D: Dimension,
Self: Sized,
{
const MINIMUM_DATA_LENGHT: usize;
type FinishedStrat: Interp1DStrategy<Sd, Sx, D>;
fn build<Sx2>(
self,
x: &ArrayBase<Sx2, Ix1>,
data: &ArrayBase<Sd, D>,
) -> Result<Self::FinishedStrat, BuilderError>
where
Sx2: Data<Elem = Sd::Elem>;
}
pub trait Interp1DStrategy<Sd, Sx, D>
where
Sd: Data,
Sd::Elem: Num + Debug,
Sx: Data<Elem = Sd::Elem>,
D: Dimension,
Self: Sized,
{
fn interp_into(
&self,
interpolator: &Interp1D<Sd, Sx, D, Self>,
target: ArrayViewMut<'_, Sd::Elem, D::Smaller>,
x: Sx::Elem,
) -> Result<(), InterpolateError>;
}