1pub mod prelude;
3
4#[derive(Debug, Clone, PartialOrd, PartialEq, Eq)]
6pub enum ArrayError {
7 BroadcastShapeMismatch,
9 ConcatenateShapeMismatch,
11 ShapeMustMatchValuesLength,
13 ShapesMustMatch {
15 shape_1: Vec<usize>,
17 shape_2: Vec<usize>,
19 },
20 SqueezeShapeOfAxisMustBeOne,
22 AxisOutOfBounds,
24 OutOfBounds {
26 value: &'static str,
28 },
29 ParameterError {
31 param: &'static str,
33 message: &'static str,
35 },
36 UnsupportedDimension {
38 supported: Vec<usize>,
40 },
41 MustBeUnique {
43 value: String,
45 },
46 MustBeEqual {
48 value1: String,
50 value2: String,
52 },
53 MustBeAtLeast {
55 value1: String,
57 value2: String,
59 },
60 MustBeOneOf {
62 value1: String,
64 value2: String,
66 },
67 NotImplemented,
69 SingularMatrix,
71}
72
73impl std::error::Error for ArrayError {}
74
75impl std::fmt::Display for ArrayError {
76 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
77 match self {
78 Self::BroadcastShapeMismatch => write!(f, "Incompatible shapes for broadcasting"),
79 Self::ConcatenateShapeMismatch => write!(f, "Incompatible shapes for concatenate"),
80 Self::ShapeMustMatchValuesLength => write!(f, "Shape must match values length"),
81 Self::ShapesMustMatch { shape_1, shape_2 } => write!(f, "Shapes of {shape_1:?} and {shape_2:?} must match"),
82 Self::SqueezeShapeOfAxisMustBeOne => write!(f, "cannot select an axis to squeeze out which has size not equal to one"),
83 Self::AxisOutOfBounds => write!(f, "`axis` is out of bounds for array"),
84 Self::OutOfBounds { value } => write!(f, "`{value}` is out of bounds"),
85 Self::ParameterError { param, message } => write!(f, "parameter error: `{param}`: {message}"),
86 Self::UnsupportedDimension { supported } => write!(f, "supported dimensions are: {supported:?}"),
87 Self::MustBeUnique { value } => write!(f, "`{value}` must be unique"),
88 Self::MustBeEqual { value1, value2 } => write!(f, "`{value1}` and `{value2}` must be equal"),
89 Self::MustBeAtLeast { value1, value2 } => write!(f, "`{value1}` must be at least `{value2}`"),
90 Self::MustBeOneOf { value1, value2 } => write!(f, "`{value1}` must be one of `{value2}`"),
91 Self::NotImplemented => write!(f, "not implemented"),
92 Self::SingularMatrix => write!(f, "matrix is singular"),
93 }
94 }
95}