optirs_core/
error.rs

1// Error types for the ML optimization module
2
3use std::error::Error;
4use std::fmt;
5
6/// Error type for ML optimization operations
7#[derive(Debug)]
8pub enum OptimError {
9    /// Invalid configuration
10    InvalidConfig(String),
11    /// Invalid parameter
12    InvalidParameter(String),
13    /// Optimization error
14    OptimizationError(String),
15    /// Dimension mismatch error
16    DimensionMismatch(String),
17    /// Privacy budget exhausted
18    PrivacyBudgetExhausted {
19        consumed_epsilon: f64,
20        target_epsilon: f64,
21    },
22    /// Invalid privacy configuration
23    InvalidPrivacyConfig(String),
24    /// Privacy accounting error
25    PrivacyAccountingError(String),
26    /// Configuration error
27    ConfigurationError(String),
28    /// Invalid state error
29    InvalidState(String),
30    /// Monitoring error
31    MonitoringError(String),
32    /// Analysis error
33    AnalysisError(String),
34    /// Analytics error
35    AnalyticsError(String),
36    /// Unsupported operation
37    UnsupportedOperation(String),
38    /// Resource error
39    ResourceError(String),
40    /// Resource unavailable error
41    ResourceUnavailable(String),
42    /// Execution error
43    ExecutionError(String),
44    /// Environment error
45    Environment(String),
46    /// Lock error
47    LockError(String),
48    /// Thread error
49    ThreadError(String),
50    /// Computation error
51    ComputationError(String),
52    /// Plugin still in use error
53    PluginStillInUse(String),
54    /// Missing dependency error
55    MissingDependency(String),
56    /// Plugin not found error
57    PluginNotFound(String),
58    /// Plugin disabled error
59    PluginDisabled(String),
60    /// Plugin load error
61    PluginLoadError(String),
62    /// Plugin in maintenance error
63    PluginInMaintenance(String),
64    /// Unsupported data type error
65    UnsupportedDataType(String),
66    /// Input/Output error
67    IO(std::io::Error),
68    /// Other error
69    Other(String),
70}
71
72/// Alias for backward compatibility
73pub type OptimizerError = OptimError;
74
75impl fmt::Display for OptimError {
76    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
77        match self {
78            OptimError::InvalidConfig(msg) => write!(f, "Invalid configuration: {msg}"),
79            OptimError::InvalidParameter(msg) => write!(f, "Invalid parameter: {msg}"),
80            OptimError::OptimizationError(msg) => write!(f, "Optimization error: {msg}"),
81            OptimError::DimensionMismatch(msg) => write!(f, "Dimension mismatch: {msg}"),
82            OptimError::PrivacyBudgetExhausted {
83                consumed_epsilon,
84                target_epsilon,
85            } => {
86                write!(
87                    f,
88                    "Privacy budget exhausted: consumed ε={consumed_epsilon:.4}, target ε={target_epsilon:.4}"
89                )
90            }
91            OptimError::InvalidPrivacyConfig(msg) => {
92                write!(f, "Invalid privacy configuration: {msg}")
93            }
94            OptimError::PrivacyAccountingError(msg) => {
95                write!(f, "Privacy accounting error: {msg}")
96            }
97            OptimError::ConfigurationError(msg) => {
98                write!(f, "Configuration error: {msg}")
99            }
100            OptimError::InvalidState(msg) => {
101                write!(f, "Invalid state error: {msg}")
102            }
103            OptimError::MonitoringError(msg) => {
104                write!(f, "Monitoring error: {msg}")
105            }
106            OptimError::AnalysisError(msg) => {
107                write!(f, "Analysis error: {msg}")
108            }
109            OptimError::AnalyticsError(msg) => {
110                write!(f, "Analytics error: {msg}")
111            }
112            OptimError::UnsupportedOperation(msg) => {
113                write!(f, "Unsupported operation: {msg}")
114            }
115            OptimError::ResourceError(msg) => {
116                write!(f, "Resource error: {msg}")
117            }
118            OptimError::ResourceUnavailable(msg) => {
119                write!(f, "Resource unavailable: {msg}")
120            }
121            OptimError::ExecutionError(msg) => {
122                write!(f, "Execution error: {msg}")
123            }
124            OptimError::Environment(msg) => {
125                write!(f, "Environment error: {msg}")
126            }
127            OptimError::LockError(msg) => {
128                write!(f, "Lock error: {msg}")
129            }
130            OptimError::ThreadError(msg) => {
131                write!(f, "Thread error: {msg}")
132            }
133            OptimError::ComputationError(msg) => {
134                write!(f, "Computation error: {msg}")
135            }
136            OptimError::PluginStillInUse(msg) => {
137                write!(f, "Plugin still in use: {msg}")
138            }
139            OptimError::MissingDependency(msg) => {
140                write!(f, "Missing dependency: {msg}")
141            }
142            OptimError::PluginNotFound(msg) => {
143                write!(f, "Plugin not found: {msg}")
144            }
145            OptimError::PluginDisabled(msg) => {
146                write!(f, "Plugin disabled: {msg}")
147            }
148            OptimError::PluginLoadError(msg) => {
149                write!(f, "Plugin load error: {msg}")
150            }
151            OptimError::PluginInMaintenance(msg) => {
152                write!(f, "Plugin in maintenance: {msg}")
153            }
154            OptimError::UnsupportedDataType(msg) => {
155                write!(f, "Unsupported data type: {msg}")
156            }
157            OptimError::IO(err) => {
158                write!(f, "I/O error: {err}")
159            }
160            OptimError::Other(msg) => write!(f, "Error: {msg}"),
161        }
162    }
163}
164
165impl Error for OptimError {}
166
167/// From implementations for common error types
168impl From<std::time::SystemTimeError> for OptimError {
169    fn from(error: std::time::SystemTimeError) -> Self {
170        OptimError::Other(format!("System time error: {error}"))
171    }
172}
173
174impl From<scirs2_core::ndarray::ShapeError> for OptimError {
175    fn from(error: scirs2_core::ndarray::ShapeError) -> Self {
176        OptimError::DimensionMismatch(format!("Shape error: {error}"))
177    }
178}
179
180impl From<serde_json::Error> for OptimError {
181    fn from(error: serde_json::Error) -> Self {
182        OptimError::Other(format!("Serde JSON error: {error}"))
183    }
184}
185
186impl From<std::io::Error> for OptimError {
187    fn from(error: std::io::Error) -> Self {
188        OptimError::IO(error)
189    }
190}
191
192/// Result type for ML optimization operations
193pub type Result<T> = std::result::Result<T, OptimError>;