1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
use thiserror::Error;
/// FibQuant crate result type.
pub type Result<T> = std::result::Result<T, FibQuantError>;
/// Fail-closed FibQuant error taxonomy.
#[derive(Debug, Error, Clone, PartialEq)]
pub enum FibQuantError {
/// Ambient dimension is zero.
#[error("ambient dimension must be nonzero")]
ZeroDimension,
/// Block dimension is invalid for the ambient dimension.
#[error("invalid block dimension {block_dim} for ambient dimension {ambient_dim}")]
InvalidBlockDim {
/// Ambient vector dimension.
ambient_dim: usize,
/// Requested block dimension.
block_dim: usize,
},
/// `d` is not divisible by `k`.
#[error("ambient dimension {ambient_dim} is not divisible by block dimension {block_dim}")]
DimensionNotDivisible {
/// Ambient vector dimension.
ambient_dim: usize,
/// Requested block dimension.
block_dim: usize,
},
/// Codebook size is invalid.
#[error("invalid codebook size {0}")]
InvalidCodebookSize(usize),
/// Input contains a non-finite value.
#[error("non-finite input at index {0}")]
NonFiniteInput(usize),
/// Normal encode path received a zero vector.
#[error("zero norm vector is not valid on the normal FibQuant encode path")]
ZeroNorm,
/// Stored profile digest did not match the expected digest.
#[error("profile digest mismatch: expected {expected}, actual {actual}")]
ProfileDigestMismatch {
/// Expected digest.
expected: String,
/// Actual digest.
actual: String,
},
/// Stored codebook digest did not match the expected digest.
#[error("codebook digest mismatch: expected {expected}, actual {actual}")]
CodebookDigestMismatch {
/// Expected digest.
expected: String,
/// Actual digest.
actual: String,
},
/// Stored rotation digest did not match the expected digest.
#[error("rotation digest mismatch: expected {expected}, actual {actual}")]
RotationDigestMismatch {
/// Expected digest.
expected: String,
/// Actual digest.
actual: String,
},
/// Payload is malformed.
#[error("corrupt payload: {0}")]
CorruptPayload(String),
/// Requested dimensions or payload sizes exceed alpha release resource limits.
#[error("resource limit exceeded: {0}")]
ResourceLimitExceeded(String),
/// Decoded index is outside the codebook range.
#[error("index {index} is outside codebook size {codebook_size}")]
IndexOutOfRange {
/// Invalid index.
index: u32,
/// Codebook size.
codebook_size: u32,
},
/// Numerical algorithm failed.
#[error("numerical failure: {0}")]
NumericalFailure(String),
/// Empty-cell repair failed during Lloyd-Max refinement.
#[error("empty-cell repair failed: {0}")]
EmptyCellRepairFailed(String),
/// Required dependency behavior is unsupported.
#[error("dependency unsupported: {0}")]
DependencyUnsupported(String),
}