pub mod variogram;
pub mod kriging;
pub mod cv;
pub mod weights;
pub mod autocorrelation;
pub mod regression;
pub mod density_estimation;
pub mod point_process;
pub use kriging::{OrdinaryKriging, LocalOrdinaryKriging, SimpleKriging, UniversalKriging, SpaceTimeKriging, KrigingResult};
pub use variogram::{VariogramModel, VariogramModelFamily, VariogramFitter, RobustVariogramFitter, RobustLossFunction};
pub use weights::{SpatialWeightsGraph, SpatialWeightsMode, IslandPolicy, SpatialWeightsDiagnostics};
use thiserror::Error;
#[derive(Error, Debug)]
pub enum GeostatError {
#[error("Invalid variogram: {0}")]
InvalidVariogram(String),
#[error("Kriging solve failed: {0}")]
KrigingSolveFailed(String),
#[error("Numerical instability: {0}")]
NumericalInstability(String),
#[error("Invalid parameters: {0}")]
InvalidParameters(String),
#[error("Invalid parameter: {0}")]
InvalidParameter(String),
#[error("Insufficient data: {0}")]
InsufficientData(String),
#[error("IO error: {0}")]
IoError(#[from] std::io::Error),
#[error("JSON error: {0}")]
JsonError(#[from] serde_json::error::Error),
}
pub type GeostatResult<T> = Result<T, GeostatError>;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_error_propagation() {
let err: GeostatResult<()> = Err(GeostatError::InvalidVariogram(
"test".to_string(),
));
assert!(err.is_err());
}
}