use crate::DType;
use crate::interpolate::error::InterpolateResult;
use numr::runtime::Runtime;
use numr::tensor::Tensor;
#[derive(Debug, Clone, Default)]
pub enum SplineBoundary {
#[default]
Natural,
Clamped { left: f64, right: f64 },
NotAKnot,
}
pub type SplineCoefficients<R> = (Tensor<R>, Tensor<R>, Tensor<R>, Tensor<R>);
pub trait CubicSplineAlgorithms<R: Runtime<DType = DType>> {
fn cubic_spline_coefficients(
&self,
x: &Tensor<R>,
y: &Tensor<R>,
boundary: &SplineBoundary,
) -> InterpolateResult<SplineCoefficients<R>>;
}