Skip to main content

numra_ocp/
error.rs

1//! Error types for ODE-constrained optimization.
2//!
3//! Author: Moussa Leblouba
4//! Date: 8 February 2026
5//! Modified: 2 May 2026
6
7use numra_core::NumraError;
8use thiserror::Error;
9
10/// Errors from ODE-constrained optimization.
11#[derive(Debug, Error)]
12pub enum OcpError {
13    #[error("ODE integration failed: {0}")]
14    IntegrationFailed(String),
15    #[error("optimization failed: {0}")]
16    OptimFailed(#[from] numra_optim::OptimError),
17    #[error("no model specified")]
18    NoModel,
19    #[error("no data specified")]
20    NoData,
21    #[error("no initial state specified")]
22    NoInitialState,
23    #[error("no dynamics specified")]
24    NoDynamics,
25    #[error("dimension mismatch: {0}")]
26    DimensionMismatch(String),
27    #[error("{0}")]
28    Other(String),
29}
30
31impl From<OcpError> for NumraError {
32    fn from(e: OcpError) -> Self {
33        NumraError::Ocp(e.to_string())
34    }
35}