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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
//! Error types for the SciRS2 special functions module
//!
//! This module provides comprehensive error handling for special function computations,
//! with detailed error types that help users understand what went wrong and how to fix it.
//!
//! ## Error Categories
//!
//! The error types are organized into several categories:
//!
//! - **Mathematical Errors**: Domain errors, convergence failures, overflow
//! - **Input Validation**: Value errors, parameter validation failures
//! - **Implementation Status**: Not implemented functionality
//! - **System Errors**: GPU unavailability, IO failures
//! - **Core Integration**: Errors from scirs2-core dependencies
//!
//! ## Usage Examples
//!
//! ```rust,ignore
//! use scirs2_special::{gamma, SpecialError, SpecialResult};
//!
//! // Function that can return different error types
//! fn safe_gamma(x: f64) -> SpecialResult<f64> {
//! if x <= 0.0 && x.fract() == 0.0 {
//! return Err(SpecialError::DomainError(
//! format!("Gamma function undefined for non-positive integer: {x}")
//! ));
//! }
//!
//! let result = gamma(x);
//! if !result.is_finite() {
//! return Err(SpecialError::OverflowError(
//! format!("Gamma({x}) resulted in overflow")
//! ));
//! }
//!
//! Ok(result)
//! }
//! ```
use CoreError;
use Error;
/// Error types for special function computations
///
/// This enum provides detailed error information for different failure modes
/// that can occur during special function computations. Each variant includes
/// contextual information to help users understand and resolve issues.
/// Convenient Result type alias for special function operations
///
/// This type alias simplifies function signatures throughout the special functions module.
/// All special function computations that can fail return this type, allowing for
/// consistent error handling patterns.
///
/// # Usage Examples
///
/// ```rust,ignore
/// use scirs2_special::{SpecialResult, SpecialError};
///
/// fn safe_computation(x: f64) -> SpecialResult<f64> {
/// if x < 0.0 {
/// Err(SpecialError::DomainError("x must be non-negative".to_string()))
/// } else {
/// Ok(x.sqrt())
/// }
/// }
///
/// // Pattern matching for error handling
/// match safe_computation(-1.0) {
/// Ok(result) => println!("Result: {}", result),
/// Err(SpecialError::DomainError(msg)) => eprintln!("Domain error: {msg}"),
/// Err(e) => eprintln!("Other error: {e}"),
/// }
/// ```
pub type SpecialResult<T> = ;
// Automatic error conversions for common error types
/// Convert from standard library float parsing errors
///
/// Automatically converts `ParseFloatError` into `SpecialError::ValueError`
/// for seamless error propagation when parsing numerical input.
/// Convert from standard library IO errors
///
/// Automatically converts `std::io::Error` into `SpecialError::ComputationError`
/// for handling file I/O failures during computation or data loading.