1use thiserror::Error;
2
3pub type Result<T> = std::result::Result<T, FibQuantError>;
5
6#[derive(Debug, Error, Clone, PartialEq)]
8pub enum FibQuantError {
9 #[error("ambient dimension must be nonzero")]
11 ZeroDimension,
12 #[error("invalid block dimension {block_dim} for ambient dimension {ambient_dim}")]
14 InvalidBlockDim {
15 ambient_dim: usize,
17 block_dim: usize,
19 },
20 #[error("ambient dimension {ambient_dim} is not divisible by block dimension {block_dim}")]
22 DimensionNotDivisible {
23 ambient_dim: usize,
25 block_dim: usize,
27 },
28 #[error("invalid codebook size {0}")]
30 InvalidCodebookSize(usize),
31 #[error("non-finite input at index {0}")]
33 NonFiniteInput(usize),
34 #[error("zero norm vector is not valid on the normal FibQuant encode path")]
36 ZeroNorm,
37 #[error("profile digest mismatch: expected {expected}, actual {actual}")]
39 ProfileDigestMismatch {
40 expected: String,
42 actual: String,
44 },
45 #[error("codebook digest mismatch: expected {expected}, actual {actual}")]
47 CodebookDigestMismatch {
48 expected: String,
50 actual: String,
52 },
53 #[error("rotation digest mismatch: expected {expected}, actual {actual}")]
55 RotationDigestMismatch {
56 expected: String,
58 actual: String,
60 },
61 #[error("corrupt payload: {0}")]
63 CorruptPayload(String),
64 #[error("resource limit exceeded: {0}")]
66 ResourceLimitExceeded(String),
67 #[error("index {index} is outside codebook size {codebook_size}")]
69 IndexOutOfRange {
70 index: u32,
72 codebook_size: u32,
74 },
75 #[error("numerical failure: {0}")]
77 NumericalFailure(String),
78 #[error("empty-cell repair failed: {0}")]
80 EmptyCellRepairFailed(String),
81 #[error("dependency unsupported: {0}")]
83 DependencyUnsupported(String),
84}