cox_hazards/
error.rs

1use thiserror::Error;
2
3pub type Result<T> = std::result::Result<T, CoxError>;
4
5#[derive(Error, Debug, Clone)]
6pub enum CoxError {
7    #[error("dimensions don't match: {message}")]
8    InvalidDimensions { message: String },
9    
10    #[error("optimization blew up: {message}")]
11    OptimizationFailed { message: String },
12    
13    #[error("model not fitted yet - call fit() first")]
14    ModelNotFitted,
15    
16    #[error("bad parameter: {parameter} = {value}")]
17    InvalidParameter { parameter: String, value: String },
18    
19    #[error("numerical issues: {message}")]
20    NumericalError { message: String },
21    
22    #[error("survival data is broken: {message}")]
23    InvalidSurvivalData { message: String },
24}
25
26impl CoxError {
27    pub fn invalid_dimensions(message: impl Into<String>) -> Self {
28        Self::InvalidDimensions { message: message.into() }
29    }
30    
31    pub fn optimization_failed(message: impl Into<String>) -> Self {
32        Self::OptimizationFailed { message: message.into() }
33    }
34    
35    pub fn invalid_parameter(parameter: impl Into<String>, value: impl Into<String>) -> Self {
36        Self::InvalidParameter { 
37            parameter: parameter.into(), 
38            value: value.into() 
39        }
40    }
41    
42    pub fn numerical_error(message: impl Into<String>) -> Self {
43        Self::NumericalError { message: message.into() }
44    }
45    
46    pub fn invalid_survival_data(message: impl Into<String>) -> Self {
47        Self::InvalidSurvivalData { message: message.into() }
48    }
49}