use thiserror::Error;
#[derive(Debug, Error, Clone, PartialEq)]
pub enum RegressionError {
#[error("empty input: {what}")]
EmptyInput {
what: &'static str,
},
#[error("shape mismatch: {what} expected {expected}, got {got}")]
ShapeMismatch {
what: &'static str,
expected: usize,
got: usize,
},
#[error(
"non-positive residual degrees of freedom: {n} observations with {p} \
parameters leaves n - p = {df}, which must be >= 1"
)]
NoResidualDegreesOfFreedom {
n: usize,
p: usize,
df: isize,
},
#[error("rank-deficient design matrix: columns are linearly dependent (perfect collinearity)")]
RankDeficient,
#[error("invalid parameter: {msg}")]
InvalidParameter {
msg: String,
},
#[error("invalid binary response: {msg}")]
InvalidResponse {
msg: String,
},
#[error("iterative fit did not converge within {iterations} iterations: {msg}")]
NotConverged {
iterations: usize,
msg: String,
},
}
pub type Result<T> = std::result::Result<T, RegressionError>;