///|
/// Stable input failures. No invalid input silently falls back to another method.
pub(all) suberror ConformalError {
Invalid(String)
ResourceLimit(String)
UnknownGroup(String)
} derive(Debug)
///|
pub extend ConformalError with @debug.Debug::{to_repr}
///|
fn finite(value : Double) -> Bool {
!value.is_nan() && !value.is_inf()
}
///|
fn validate_alpha(alpha : Double) -> Unit raise ConformalError {
if !finite(alpha) || alpha <= 0.0 || alpha >= 1.0 {
raise Invalid("alpha must be finite and strictly between zero and one")
}
}
///|
fn validate_values(
values : Array[Double],
name : String,
) -> Unit raise ConformalError {
if values.is_empty() {
raise Invalid(name + " must not be empty")
}
if values.length() > 100000 {
raise ResourceLimit(name + " exceeds 100000 elements")
}
for value in values {
if !finite(value) {
raise Invalid(name + " contains a nonfinite value")
}
}
}