pub mod bicubic;
pub mod bilinear;
pub mod cubic;
pub mod flat;
pub mod linear;
pub mod loglinear;
use crate::errors::QlResult;
use crate::types::{Real, Size};
pub trait Interpolation {
fn value(&self, x: Real) -> QlResult<Real>;
fn derivative(&self, x: Real) -> QlResult<Real>;
fn primitive(&self, x: Real) -> QlResult<Real>;
fn x_min(&self) -> Real;
fn x_max(&self) -> Real;
fn is_in_range(&self, x: Real) -> bool;
}
pub trait Interpolator {
type Output: Interpolation;
fn interpolate(&self, x: &[Real], y: &[Real]) -> QlResult<Self::Output>;
fn required_points(&self) -> Size {
2
}
}
pub trait Interpolation2D {
fn value(&self, x: Real, y: Real) -> QlResult<Real>;
fn x_min(&self) -> Real;
fn x_max(&self) -> Real;
fn y_min(&self) -> Real;
fn y_max(&self) -> Real;
fn is_in_range(&self, x: Real, y: Real) -> bool;
fn set_extrapolation(&mut self, allow: bool);
}
pub trait Interpolator2D {
type Output: Interpolation2D;
fn interpolate(&self, x: Vec<Real>, y: Vec<Real>, z: Vec<Vec<Real>>) -> QlResult<Self::Output>;
}