use thiserror::Error;
pub type Result<T> = std::result::Result<T, TrainError>;
#[derive(Error, Debug)]
pub enum TrainError {
#[error("Forward pass failed: {0}")]
ForwardError(String),
#[error("Backward pass failed: {0}")]
BackwardError(String),
#[error("Optimizer step failed: {0}")]
OptimizerError(String),
#[error("Invalid learning rate: {0}")]
InvalidLearningRate(String),
#[error("Checkpoint error: {0}")]
CheckpointError(String),
#[error("Callback error: {0}")]
CallbackError(String),
#[error("Data error: {0}")]
DataError(#[from] tsai_data::DataError),
#[error("Core error: {0}")]
CoreError(#[from] tsai_core::CoreError),
#[error("I/O error: {0}")]
IoError(#[from] std::io::Error),
#[error("Serialization error: {0}")]
SerializationError(String),
#[error("Training interrupted: {0}")]
Interrupted(String),
#[error("{0}")]
Other(String),
}