wbspatialstats 0.1.1

Unified spatial statistics library: kriging, spatial autocorrelation, spatial regression, point process analysis
Documentation
//! `wbspatialstats`: Unified spatial statistics library
//!
//! Provides kriging, variography, spatial autocorrelation, spatial regression, and point-process tools
//! for interpolation, analysis, and modeling of spatially correlated data.
//!
//! # Modules
//!
//! - `variogram`: Empirical and modeled semivariograms (geostatistics)
//! - `kriging`: Ordinary, Local, Simple, Universal, and Spatio-Temporal Kriging predictions
//! - `cv`: Cross-validation diagnostics and metrics
//! - `weights`: Spatial weights matrices and neighborhood construction (shared by Phase A & C)
//! - `autocorrelation`: Global and local spatial autocorrelation measures (Phase A)
//! - `regression`: Spatial lag, error, and geographically weighted regression (Phase C)
//! - `density_estimation`: Kernel density estimation for inhomogeneous process modeling (Phase D)
//! - `point_process`: Ripley's K/L, envelope testing, and point-pattern analysis (Phase D)

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;

// Re-export key types for convenience
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;

/// Geostatistics library error type
#[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());
    }
}