Skip to content

Commit

Permalink
clean up getters and setters
Browse files Browse the repository at this point in the history
  • Loading branch information
kylecarow committed Jan 22, 2025
1 parent 8e60b08 commit 7435151
Show file tree
Hide file tree
Showing 5 changed files with 125 additions and 289 deletions.
194 changes: 125 additions & 69 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ pub enum Interpolator {
/// - [`Strategy::LeftNearest`]
/// - [`Strategy::RightNearest`]
/// - [`Strategy::Nearest`]
///
///
/// Applicable extrapolation strategies:
/// - [`Extrapolate::Enable`]
/// - [`Extrapolate::Clamp`]
Expand Down Expand Up @@ -129,7 +129,7 @@ pub enum Interpolator {
///
/// Applicable interpolation strategies:
/// - [`Strategy::Linear`]
///
///
/// Applicable extrapolation strategies:
/// - [`Extrapolate::Clamp`]
/// - [`Extrapolate::Error`]
Expand Down Expand Up @@ -164,7 +164,7 @@ pub enum Interpolator {
///
/// Applicable interpolation strategies:
/// - [`Strategy::Linear`]
///
///
/// Applicable extrapolation strategies:
/// - [`Extrapolate::Clamp`]
/// - [`Extrapolate::Error`]
Expand Down Expand Up @@ -207,7 +207,7 @@ pub enum Interpolator {
///
/// Applicable interpolation strategies:
/// - [`Strategy::Linear`]
///
///
/// Applicable extrapolation strategies:
/// - [`Extrapolate::Clamp`]
/// - [`Extrapolate::Error`]
Expand Down Expand Up @@ -466,181 +466,237 @@ impl Interpolator {

// Getters and setters
impl Interpolator {
/// Get `strategy` field
/// Get `strategy` field from any interpolator.
pub fn strategy(&self) -> Result<&Strategy, Error> {
match self {
Interpolator::Interp1D(interp) => Ok(interp.strategy()),
Interpolator::Interp2D(interp) => Ok(interp.strategy()),
Interpolator::Interp3D(interp) => Ok(interp.strategy()),
Interpolator::InterpND(interp) => Ok(interp.strategy()),
Interpolator::Interp1D(interp) => Ok(&interp.strategy),
Interpolator::Interp2D(interp) => Ok(&interp.strategy),
Interpolator::Interp3D(interp) => Ok(&interp.strategy),
Interpolator::InterpND(interp) => Ok(&interp.strategy),
_ => Err(Error::NoSuchField),
}
}

/// Set `strategy` field
/// Set `strategy` field on any interpolator.
pub fn set_strategy(&mut self, strategy: Strategy) -> Result<(), Error> {
match self {
Interpolator::Interp1D(interp) => Ok(interp.set_strategy(strategy)?),
Interpolator::Interp2D(interp) => Ok(interp.set_strategy(strategy)?),
Interpolator::Interp3D(interp) => Ok(interp.set_strategy(strategy)?),
Interpolator::InterpND(interp) => Ok(interp.set_strategy(strategy)?),
Interpolator::Interp1D(interp) => {
interp.strategy = strategy;
Ok(interp.validate()?)
}
Interpolator::Interp2D(interp) => {
interp.strategy = strategy;
Ok(interp.validate()?)
}
Interpolator::Interp3D(interp) => {
interp.strategy = strategy;
Ok(interp.validate()?)
}
Interpolator::InterpND(interp) => {
interp.strategy = strategy;
Ok(interp.validate()?)
}
_ => return Err(Error::NoSuchField),
}
}

/// Get `extrapolate` field
/// Get `extrapolate` field from any interpolator.
pub fn extrapolate(&self) -> Result<&Extrapolate, Error> {
match self {
Interpolator::Interp1D(interp) => Ok(interp.extrapolate()),
Interpolator::Interp2D(interp) => Ok(interp.extrapolate()),
Interpolator::Interp3D(interp) => Ok(interp.extrapolate()),
Interpolator::InterpND(interp) => Ok(interp.extrapolate()),
Interpolator::Interp1D(interp) => Ok(&interp.extrapolate),
Interpolator::Interp2D(interp) => Ok(&interp.extrapolate),
Interpolator::Interp3D(interp) => Ok(&interp.extrapolate),
Interpolator::InterpND(interp) => Ok(&interp.extrapolate),
_ => Err(Error::NoSuchField),
}
}

/// Set `extrapolate` field
/// Set `extrapolate` field on any interpolator.
pub fn set_extrapolate(&mut self, extrapolate: Extrapolate) -> Result<(), Error> {
match self {
Interpolator::Interp1D(interp) => Ok(interp.set_extrapolate(extrapolate)?),
Interpolator::Interp2D(interp) => Ok(interp.set_extrapolate(extrapolate)?),
Interpolator::Interp3D(interp) => Ok(interp.set_extrapolate(extrapolate)?),
Interpolator::InterpND(interp) => Ok(interp.set_extrapolate(extrapolate)?),
Interpolator::Interp1D(interp) => {
interp.extrapolate = extrapolate;
Ok(interp.validate()?)
}
Interpolator::Interp2D(interp) => {
interp.extrapolate = extrapolate;
Ok(interp.validate()?)
}
Interpolator::Interp3D(interp) => {
interp.extrapolate = extrapolate;
Ok(interp.validate()?)
}
Interpolator::InterpND(interp) => {
interp.extrapolate = extrapolate;
Ok(interp.validate()?)
}
_ => return Err(Error::NoSuchField),
}
}

/// Get `x` field
/// Get `x` field from 1D/2D/3D interpolator.
pub fn x(&self) -> Result<&[f64], Error> {
match self {
Interpolator::Interp1D(interp) => Ok(interp.x()),
Interpolator::Interp2D(interp) => Ok(interp.x()),
Interpolator::Interp3D(interp) => Ok(interp.x()),
Interpolator::Interp1D(interp) => Ok(&interp.x),
Interpolator::Interp2D(interp) => Ok(&interp.x),
Interpolator::Interp3D(interp) => Ok(&interp.x),
_ => Err(Error::NoSuchField),
}
}

/// Set `x` field
/// Set `x` field on 1D/2D/3D interpolator.
pub fn set_x(&mut self, x: Vec<f64>) -> Result<(), Error> {
match self {
Interpolator::Interp1D(interp) => Ok(interp.set_x(x)?),
Interpolator::Interp2D(interp) => Ok(interp.set_x(x)?),
Interpolator::Interp3D(interp) => Ok(interp.set_x(x)?),
Interpolator::Interp1D(interp) => {
interp.x = x;
Ok(interp.validate()?)
}
Interpolator::Interp2D(interp) => {
interp.x = x;
Ok(interp.validate()?)
}
Interpolator::Interp3D(interp) => {
interp.x = x;
Ok(interp.validate()?)
}
_ => Err(Error::NoSuchField),
}
}

/// Get `y` field
/// Get `y` field from 2D/3D interpolator.
pub fn y(&self) -> Result<&[f64], Error> {
match self {
Interpolator::Interp2D(interp) => Ok(interp.y()),
Interpolator::Interp3D(interp) => Ok(interp.y()),
Interpolator::Interp2D(interp) => Ok(&interp.y),
Interpolator::Interp3D(interp) => Ok(&interp.y),
_ => Err(Error::NoSuchField),
}
}

/// Set `y` field
pub fn set_y(&mut self, new_y: Vec<f64>) -> Result<(), Error> {
/// Set `y` field on 2D/3D interpolator.
pub fn set_y(&mut self, y: Vec<f64>) -> Result<(), Error> {
match self {
Interpolator::Interp2D(interp) => interp.set_y(new_y)?,
Interpolator::Interp3D(interp) => interp.set_y(new_y)?,
Interpolator::Interp2D(interp) => {
interp.y = y;
Ok(interp.validate()?)
}
Interpolator::Interp3D(interp) => {
interp.y = y;
Ok(interp.validate()?)
}
_ => return Err(Error::NoSuchField),
}
Ok(())
}

/// Get `z` field
/// Get `z` field from 3D interpolator.
pub fn z(&self) -> Result<&[f64], Error> {
match self {
Interpolator::Interp3D(interp) => Ok(interp.z()),
Interpolator::Interp3D(interp) => Ok(&interp.z),
_ => Err(Error::NoSuchField),
}
}

/// Set `z` field
pub fn set_z(&mut self, new_z: Vec<f64>) -> Result<(), Error> {
/// Set `z` field on 3D interpolator.
pub fn set_z(&mut self, z: Vec<f64>) -> Result<(), Error> {
match self {
Interpolator::Interp3D(interp) => Ok(interp.set_z(new_z)?),
Interpolator::Interp3D(interp) => {
interp.z = z;
Ok(interp.validate()?)
}
_ => Err(Error::NoSuchField),
}
}

/// Get `f_x` field
/// Get `f_x` field from 1D interpolator.
pub fn f_x(&self) -> Result<&[f64], Error> {
match self {
Interpolator::Interp1D(interp) => Ok(interp.f_x()),
Interpolator::Interp1D(interp) => Ok(&interp.f_x),
_ => Err(Error::NoSuchField),
}
}

/// Set `f_x` field
/// Set `f_x` field on 1D interpolator.
pub fn set_f_x(&mut self, f_x: Vec<f64>) -> Result<(), Error> {
match self {
Interpolator::Interp1D(interp) => Ok(interp.set_f_x(f_x)?),
Interpolator::Interp1D(interp) => {
interp.f_x = f_x;
Ok(interp.validate()?)
}
_ => Err(Error::NoSuchField),
}
}

/// Get `f_xy` field
/// Get `f_xy` field from 2D interpolator.
pub fn f_xy(&self) -> Result<&[Vec<f64>], Error> {
match self {
Interpolator::Interp2D(interp) => Ok(interp.f_xy()),
Interpolator::Interp2D(interp) => Ok(&interp.f_xy),
_ => Err(Error::NoSuchField),
}
}

/// Set `f_xy` field
pub fn set_f_xy(&mut self, new_f_xy: Vec<Vec<f64>>) -> Result<(), Error> {
/// Set `f_xy` field on 2D interpolator.
pub fn set_f_xy(&mut self, f_xy: Vec<Vec<f64>>) -> Result<(), Error> {
match self {
Interpolator::Interp2D(interp) => Ok(interp.set_f_xy(new_f_xy)?),
Interpolator::Interp2D(interp) => {
interp.f_xy = f_xy;
Ok(interp.validate()?)
}
_ => Err(Error::NoSuchField),
}
}

/// Get `f_xyz` field
/// Get `f_xyz` field from 3D interpolator.
pub fn f_xyz(&self) -> Result<&[Vec<Vec<f64>>], Error> {
match self {
Interpolator::Interp3D(interp) => Ok(interp.f_xyz()),
Interpolator::Interp3D(interp) => Ok(&interp.f_xyz),
_ => Err(Error::NoSuchField),
}
}

/// Set `f_xyz` field
pub fn set_f_xyz(&mut self, new_f_xyz: Vec<Vec<Vec<f64>>>) -> Result<(), Error> {
/// Set `f_xyz` field on 3D interpolator.
pub fn set_f_xyz(&mut self, f_xyz: Vec<Vec<Vec<f64>>>) -> Result<(), Error> {
match self {
Interpolator::Interp3D(interp) => Ok(interp.set_f_xyz(new_f_xyz)?),
Interpolator::Interp3D(interp) => {
interp.f_xyz = f_xyz;
Ok(interp.validate()?)
}
_ => Err(Error::NoSuchField),
}
}

/// Get `grid` field
/// Get `grid` field from ND interpolator.
pub fn grid(&self) -> Result<&[Vec<f64>], Error> {
match self {
Interpolator::InterpND(interp) => Ok(interp.grid()),
Interpolator::InterpND(interp) => Ok(&interp.grid),
_ => Err(Error::NoSuchField),
}
}

/// Set `grid` field
pub fn set_grid(&mut self, new_grid: Vec<Vec<f64>>) -> Result<(), Error> {
/// Set `grid` field on ND interpolator.
pub fn set_grid(&mut self, grid: Vec<Vec<f64>>) -> Result<(), Error> {
match self {
Interpolator::InterpND(interp) => Ok(interp.set_grid(new_grid)?),
Interpolator::InterpND(interp) => {
interp.grid = grid;
Ok(interp.validate()?)
}
_ => Err(Error::NoSuchField),
}
}

/// Get `values` field
/// Get `values` field from ND interpolator.
pub fn values(&self) -> Result<&ndarray::ArrayD<f64>, Error> {
match self {
Interpolator::InterpND(interp) => Ok(interp.values()),
Interpolator::InterpND(interp) => Ok(&interp.values),
_ => Err(Error::NoSuchField),
}
}

/// Set `values` gield
pub fn set_values(&mut self, new_values: ndarray::ArrayD<f64>) -> Result<(), Error> {
/// Set `values` field on ND interpolator.
pub fn set_values(&mut self, values: ndarray::ArrayD<f64>) -> Result<(), Error> {
match self {
Interpolator::InterpND(interp) => Ok(interp.set_values(new_values)?),
Interpolator::InterpND(interp) => {
interp.values = values;
Ok(interp.validate()?)
}
_ => Err(Error::NoSuchField),
}
}
Expand Down
46 changes: 0 additions & 46 deletions src/n.rs
Original file line number Diff line number Diff line change
Expand Up @@ -190,52 +190,6 @@ impl InterpMethods for InterpND {
}
}

// Getters and setters
impl InterpND {
/// Get `strategy` field
pub fn strategy(&self) -> &Strategy {
&self.strategy
}

/// Set `strategy` field
pub fn set_strategy(&mut self, strategy: Strategy) -> Result<(), ValidationError> {
self.strategy = strategy;
self.validate()
}

/// Get `extrapolate` field
pub fn extrapolate(&self) -> &Extrapolate {
&self.extrapolate
}

/// Set `extrapolate` field
pub fn set_extrapolate(&mut self, extrapolate: Extrapolate) -> Result<(), ValidationError> {
self.extrapolate = extrapolate;
self.validate()
}

/// Get `grid` field
pub fn grid(&self) -> &[Vec<f64>] {
&self.grid
}

/// Set `grid` field
pub fn set_grid(&mut self, grid: Vec<Vec<f64>>) -> Result<(), ValidationError> {
self.grid = grid;
self.validate()
}

/// Get `values` field
pub fn values(&self) -> &ndarray::ArrayD<f64> {
&self.values
}

/// Set `values` field
pub fn set_values(&mut self, values: ndarray::ArrayD<f64>) -> Result<(), ValidationError> {
self.values = values;
self.validate()
}
}
#[cfg(test)]
mod tests {
use super::*;
Expand Down
Loading

0 comments on commit 7435151

Please sign in to comment.