use thiserror::Error;
pub type SolverResult<T> = Result<T, SolverError>;
#[derive(Error, Debug, Clone)]
pub enum SolverError {
#[error("Dimension mismatch: expected {expected}, got {actual}")]
DimensionMismatch { expected: String, actual: String },
#[error("Invalid problem: {message}")]
InvalidProblem { message: String },
#[error("Numerical error: {message}")]
NumericalError { message: String },
#[error("Failed to converge: {message}")]
ConvergenceError { message: String },
#[error("Problem is infeasible: {message}")]
InfeasibleProblem { message: String },
#[error("Problem is unbounded: {message}")]
UnboundedProblem { message: String },
}