use thiserror::Error;
#[derive(Error, Debug)]
pub enum Error {
#[error("Shape mismatch: expected {expected:?}, got {got:?}")]
ShapeMismatch { expected: Vec<usize>, got: Vec<usize> },
#[error("Invalid gradient: {0}")]
InvalidGradient(String),
#[error("Backward operation failed: {0}")]
BackwardFailed(String),
#[error("Configuration error: {0}")]
ConfigError(String),
#[error("I/O error: {0}")]
Io(String),
#[error("Serialization error: {0}")]
Serialization(String),
#[error("Invalid parameter: {0}")]
InvalidParameter(String),
#[error("Parse error: {0}")]
Parse(String),
#[error("Validation error: {0}")]
Validation(String),
}
impl From<std::io::Error> for Error {
fn from(err: std::io::Error) -> Self {
Error::Io(err.to_string())
}
}
pub type Result<T> = std::result::Result<T, Error>;