use crate::ising::IsingError;
use thiserror::Error;
#[derive(Error, Debug)]
pub enum AdvancedQuantumError {
#[error("Ising error: {0}")]
IsingError(#[from] IsingError),
#[error("Quantum circuit error: {0}")]
QuantumCircuitError(String),
#[error("Algorithm convergence error: {0}")]
ConvergenceError(String),
#[error("Parameter optimization error: {0}")]
ParameterError(String),
#[error("Zeno effect error: {0}")]
ZenoError(String),
#[error("Adiabatic error: {0}")]
AdiabaticError(String),
#[error("Counterdiabatic error: {0}")]
CounterdiabaticError(String),
#[error("Noise model error: {0}")]
NoiseModelError(String),
#[error("No algorithm available")]
NoAlgorithmAvailable,
#[error("Ensemble optimization failed")]
EnsembleFailed,
#[error("Algorithm not found: {0}")]
AlgorithmNotFound(String),
#[error("Invalid algorithm: {0}")]
InvalidAlgorithm(String),
}
pub type AdvancedQuantumResult<T> = Result<T, AdvancedQuantumError>;