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}