Skip to main content

gamlss_spline/
error.rs

1use gamlss_core::ModelError;
2use thiserror::Error;
3
4/// Ошибки построения spline basis и spline design matrix.
5#[derive(Debug, Clone, PartialEq, Error)]
6pub enum SplineError {
7    /// Входной вектор пуст.
8    #[error("spline input must contain at least one value")]
9    EmptyInput,
10
11    /// Входной вектор содержит `NaN` или infinity.
12    #[error("spline input contains a non-finite value")]
13    NonFiniteValue,
14
15    /// Диапазон данных не имеет двух различных конечных границ.
16    #[error("spline range must have distinct finite boundaries")]
17    InvalidRange,
18
19    /// Число basis-функций недостаточно для степени spline.
20    #[error("B-spline basis count {n_basis} must be greater than degree {degree}")]
21    NotEnoughBasis {
22        /// Запрошенное число basis-функций.
23        n_basis: usize,
24        /// Степень B-spline.
25        degree: usize,
26    },
27
28    /// Knot vector содержит не-finite значения или убывает.
29    #[error("knot vector must be finite and nondecreasing")]
30    InvalidKnots,
31
32    /// Knot vector содержит недостаточно узлов.
33    #[error("spline knot vector must contain at least {min} knots")]
34    NotEnoughKnots {
35        /// Минимальное число узлов.
36        min: usize,
37    },
38
39    /// Период должен быть конечным положительным числом.
40    #[error("spline period must be finite and positive")]
41    InvalidPeriod,
42
43    /// Predictor blocks have different row counts.
44    #[error("spline row count mismatch: expected {expected}, got {actual}")]
45    RowMismatch {
46        /// Expected row count.
47        expected: usize,
48        /// Actual row count.
49        actual: usize,
50    },
51
52    /// Число параметров переполнило `usize`.
53    #[error("spline parameter count overflowed")]
54    ParameterOverflow,
55
56    /// Степень сплайна не поддерживается данным compact predictor-ом.
57    #[error("spline degree {degree} is not supported")]
58    UnsupportedDegree {
59        /// Requested degree.
60        degree: usize,
61    },
62
63    /// Ошибка core design matrix.
64    #[error(transparent)]
65    Model(#[from] ModelError),
66}
67
68/// Ошибки построения Fourier basis и Fourier predictor.
69#[derive(Debug, Clone, PartialEq, Error)]
70pub enum FourierError {
71    /// Входной вектор содержит `NaN` или infinity.
72    #[error("Fourier input contains a non-finite value")]
73    NonFiniteValue,
74
75    /// Период должен быть конечным положительным числом.
76    #[error("Fourier period must be finite and positive")]
77    InvalidPeriod,
78
79    /// Число гармоник должно быть положительным.
80    #[error("Fourier order must be greater than zero")]
81    InvalidOrder,
82
83    /// Число коэффициентов переполнило `usize`.
84    #[error("Fourier coefficient count overflowed")]
85    CoefficientOverflow,
86}