use crate::EstimationError;
use ndarray::Array1;
pub fn ensure_finite_scalar_estimation(
name: &str,
value: f64,
) -> Result<(), EstimationError> {
if value.is_finite() {
Ok(())
} else {
Err(EstimationError::InvalidInput(format!(
"{name} must be finite, got {value}"
)))
}
}
pub fn validate_all_finite_estimation<I>(
label: &str,
values: I,
) -> Result<(), EstimationError>
where
I: IntoIterator<Item = f64>,
{
for (idx, value) in values.into_iter().enumerate() {
if !value.is_finite() {
return Err(EstimationError::InvalidInput(format!(
"{label}[{idx}] must be finite, got {value}"
)));
}
}
Ok(())
}
#[inline]
pub fn bail_if_cached_beta_non_finite(beta: &Array1<f64>) -> Result<(), EstimationError> {
if beta.iter().any(|v| !v.is_finite()) {
return Err(EstimationError::InvalidInput(
"cached inner beta contains non-finite entries".to_string(),
));
}
Ok(())
}
pub fn ensure_finite_scalar(name: &str, value: f64) -> Result<(), String> {
ensure_finite_scalar_estimation(name, value).map_err(|err| err.to_string())
}
pub fn validate_all_finite<I: IntoIterator<Item = f64>>(
label: &str,
values: I,
) -> Result<(), String> {
validate_all_finite_estimation(label, values).map_err(|err| err.to_string())
}