vecfit 0.1.0

Pure-Rust relaxed vector fitting for scalar, vector, matrix, and tensor-valued frequency responses.
Documentation
use std::num::ParseFloatError;

use thiserror::Error;

#[derive(Debug, Error)]
pub enum VecfitError {
    #[error("io error: {0}")]
    Io(String),
    #[error("dimension mismatch: {0}")]
    Dimension(String),
    #[error("invalid shape: {0}")]
    Shape(String),
    #[error("invalid input: {0}")]
    InvalidInput(String),
    #[error("numerical failure: {0}")]
    Numerical(String),
    #[error("serialization error: {0}")]
    Serialization(String),
    #[error("csv error: {0}")]
    Csv(String),
    #[error("touchstone error: {0}")]
    Touchstone(String),
}

pub type Result<T> = std::result::Result<T, VecfitError>;

impl From<serde_json::Error> for VecfitError {
    fn from(value: serde_json::Error) -> Self {
        Self::Serialization(value.to_string())
    }
}

impl From<csv::Error> for VecfitError {
    fn from(value: csv::Error) -> Self {
        Self::Csv(value.to_string())
    }
}

impl From<ParseFloatError> for VecfitError {
    fn from(value: ParseFloatError) -> Self {
        Self::InvalidInput(value.to_string())
    }
}

impl From<std::io::Error> for VecfitError {
    fn from(value: std::io::Error) -> Self {
        Self::Io(value.to_string())
    }
}

impl From<faer::linalg::solvers::SvdError> for VecfitError {
    fn from(value: faer::linalg::solvers::SvdError) -> Self {
        Self::Numerical(format!("{value:?}"))
    }
}

impl From<faer::linalg::solvers::EvdError> for VecfitError {
    fn from(value: faer::linalg::solvers::EvdError) -> Self {
        Self::Numerical(format!("{value:?}"))
    }
}