gamlss_core/error.rs
1use thiserror::Error;
2
3/// Ошибки построения и проверки GAMLSS-моделей.
4#[derive(Debug, Clone, PartialEq, Eq, Error)]
5pub enum ModelError {
6 /// Response vector пуст.
7 #[error("response vector must contain at least one observation")]
8 EmptyResponse,
9
10 /// Скалярный параметр модели имеет недопустимое значение.
11 #[error("{parameter} must be {expected}")]
12 InvalidParameter {
13 /// Имя параметра.
14 parameter: &'static str,
15 /// Ожидаемый инвариант.
16 expected: &'static str,
17 },
18
19 /// Dense matrix получила неверное число row-major значений.
20 ///
21 /// Число переданных значений `actual_values` не совпадает с `nrows * ncols`.
22 #[error("design matrix has {actual_values} values, expected {expected_values}")]
23 DesignSize {
24 /// Ожидаемое число значений.
25 expected_values: usize,
26 /// Фактическое число значений.
27 actual_values: usize,
28 },
29
30 /// Число строк design matrix не совпадает с длиной response.
31 #[error(
32 "{parameter} design has {actual_rows} rows, expected {expected_rows} rows from response"
33 )]
34 DesignRowMismatch {
35 /// Имя или роль проверяемого параметра.
36 parameter: &'static str,
37 /// Ожидаемое число строк.
38 expected_rows: usize,
39 /// Фактическое число строк.
40 actual_rows: usize,
41 },
42
43 /// Длина response не совпадает с ожидаемой.
44 #[error("response length is {actual}, expected {expected}")]
45 ResponseLength {
46 /// Ожидаемая длина.
47 expected: usize,
48 /// Фактическая длина.
49 actual: usize,
50 },
51
52 /// Длина beta-вектора не совпадает с числом коэффициентов модели.
53 #[error("beta length is {actual}, expected {expected}")]
54 BetaLength {
55 /// Ожидаемая длина.
56 expected: usize,
57 /// Фактическая длина.
58 actual: usize,
59 },
60
61 /// Длина gradient-вектора не совпадает с числом коэффициентов модели.
62 #[error("gradient length is {actual}, expected {expected}")]
63 GradientLength {
64 /// Ожидаемая длина.
65 expected: usize,
66 /// Фактическая длина.
67 actual: usize,
68 },
69
70 /// Два parameter block используют пересекающиеся диапазоны beta.
71 #[error("{first} parameter block overlaps with {second} parameter block")]
72 BlockOverlap {
73 /// Первый пересекающийся блок.
74 first: &'static str,
75 /// Второй пересекающийся блок.
76 second: &'static str,
77 },
78}