1#![allow(missing_docs)]
2use super::geometry::TcbLevel;
5use std::fmt;
6
7#[derive(Debug, Clone)]
9pub enum TilingError {
10 InvalidHierarchy { reason: String },
12 DivisibilityError { level: &'static str, dimension: &'static str, larger: u32, smaller: u32 },
14 CacheOverflow { level: TcbLevel, required_bytes: usize, available_bytes: usize },
16 AlignmentError { required: u32, actual: u32 },
18 QuantAlignmentError { format: &'static str, required_k: u32, actual_k: u32 },
20}
21
22impl fmt::Display for TilingError {
23 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
24 match self {
25 TilingError::InvalidHierarchy { reason } => {
26 write!(f, "Invalid tiling hierarchy: {}", reason)
27 }
28 TilingError::DivisibilityError { level, dimension, larger, smaller } => {
29 write!(
30 f,
31 "Tiling divisibility error at {}: {} ({}) not divisible by {}",
32 level, dimension, larger, smaller
33 )
34 }
35 TilingError::CacheOverflow { level, required_bytes, available_bytes } => {
36 write!(
37 f,
38 "Tile exceeds {:?} cache: {} bytes required, {} available",
39 level, required_bytes, available_bytes
40 )
41 }
42 TilingError::AlignmentError { required, actual } => {
43 write!(f, "Alignment error: required {} bytes, actual {} bytes", required, actual)
44 }
45 TilingError::QuantAlignmentError { format, required_k, actual_k } => {
46 write!(
47 f,
48 "Quantization alignment error for {}: K must be multiple of {}, got {}",
49 format, required_k, actual_k
50 )
51 }
52 }
53 }
54}
55
56impl std::error::Error for TilingError {}