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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
use Error;
use fmt;
/// Custom error type for statistical computations in the hypors library.
///
/// This enum represents various error conditions that can occur during
/// statistical hypothesis testing operations. It implements the standard
/// `Error` and `Display` traits to integrate well with Rust's error handling ecosystem.
///
/// # Variants
///
/// * `EmptyData` - Indicates that no data was provided for analysis
/// * `InsufficientData` - Indicates that not enough data points were provided for the statistical test
/// * `ComputeError` - Indicates a computational error occurred during the statistical analysis
///
/// # Examples
///
/// ```rust
/// use hypors::common::StatError;
///
/// // Creating different error types
/// let empty_error = StatError::EmptyData;
/// let insufficient_error = StatError::InsufficientData;
/// let compute_error = StatError::ComputeError("Division by zero".to_string());
///
/// // All variants can be displayed as strings
/// println!("{}", empty_error);
/// println!("{}", insufficient_error);
/// println!("{}", compute_error);
/// ```
///
/// # Error Handling
///
/// This error type integrates seamlessly with Rust's `Result` type and the `?` operator:
///
/// ```rust
/// use hypors::common::StatError;
///
/// fn validate_data(data: &[f64]) -> Result<(), StatError> {
/// if data.is_empty() {
/// return Err(StatError::EmptyData);
/// }
/// if data.len() < 2 {
/// return Err(StatError::InsufficientData);
/// }
/// Ok(())
/// }
///
/// // Usage with ? operator
/// fn process_data(data: &[f64]) -> Result<f64, StatError> {
/// validate_data(data)?; // Propagates StatError if validation fails
/// Ok(data.iter().sum::<f64>() / data.len() as f64)
/// }
/// ```