1#[derive(Debug, thiserror::Error, Clone, PartialEq)]
2pub enum Error {
3 #[error("Invalid number of measurements: {0}")]
9 InvalidNumberOfMeasurements(usize),
10
11 #[error("Control qubit index {0} overlaps with target qubit index {1}")]
19 OverlappingControlAndTargetQubits(usize, usize),
20
21 #[error("Invalid number of qubits: {0}")]
27 InvalidNumberOfQubits(usize),
28
29 #[error("Invalid qubit index: {0} for {1} qubits")]
36 InvalidQubitIndex(usize, usize),
37
38 #[error("State vector is not normalised")]
40 StateVectorNotNormalised,
41
42 #[error("Non-unitary matrix")]
44 NonUnitaryMatrix,
45
46 #[error("Unexpected number of inputs: expected {1}, got {0}")]
53 InvalidNumberOfInputs(usize, usize),
54
55 #[error("An unknown error occurred")]
57 UnknownError,
58
59 #[error("OpenCL error: {0}")]
65 OpenCLError(String),
66
67 #[error("Failed to lock GPU context")]
69 GpuContextLockError,
70}
71
72#[derive(Debug, thiserror::Error, Clone, PartialEq)]
73pub enum CompilerError {
74 #[error("I/O error: {0}")]
75 IOError(String),
76
77 #[error("An unsupported operation was encountered: {0}")]
78 UnsupportedOperator(String),
79
80 #[error("Invalid operands ({0}) for operator {1}")]
81 InvalidOperands(String, String),
82}
83
84#[cfg(feature = "gpu")]
85impl From<ocl::Error> for Error {
86 fn from(err: ocl::Error) -> Self {
87 Error::OpenCLError(err.to_string())
88 }
89}