///|
pub(all) suberror SolverError {
Invalid(String)
Shape(String)
Budget(String)
Numerical(String)
} derive(@debug.Debug, Eq)
///|
fn require_finite(x : Double, name : String) -> Unit raise SolverError {
if x.is_nan() || x.is_inf() {
raise Invalid("\{name} must be finite")
}
}
///|
fn require_positive(x : Double, name : String) -> Unit raise SolverError {
require_finite(x, name)
if x <= 0.0 {
raise Invalid("\{name} must be positive")
}
}
///|
pub extend SolverError with @debug.Debug::{to_repr}
///|
pub extend SolverError with Eq::{equal, not_equal}