use crate::advanced::enhanced_kriging::{AnisotropicCovariance, TrendFunction};
use crate::advanced::kriging::CovarianceFunction;
use crate::error::{InterpolateError, InterpolateResult};
use scirs2_core::ndarray::{Array1, Array2, ArrayView1, ArrayView2};
use scirs2_core::numeric::{Float, FromPrimitive};
use std::fmt::{Debug, Display};
use std::marker::PhantomData;
use std::ops::{Add, Div, Mul, Sub};
type SparseComponents<F> = (Vec<(usize, usize)>, Vec<F>);
const DEFAULT_MAX_NEIGHBORS: usize = 50;
const DEFAULT_RADIUS_MULTIPLIER: f64 = 3.0;
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum FastKrigingMethod {
Local,
FixedRank(usize),
Tapering(f64),
HODLR(usize), }
#[derive(Debug, Clone)]
pub struct FastPredictionResult<F: Float> {
pub value: Array1<F>,
pub variance: Array1<F>,
pub method: FastKrigingMethod,
pub computation_time_ms: Option<f64>,
}
#[derive(Debug, Clone)]
pub struct FastKriging<F>
where
F: Float
+ FromPrimitive
+ Debug
+ Display
+ Div<Output = F>
+ Mul<Output = F>
+ Sub<Output = F>
+ Add<Output = F>
+ std::ops::AddAssign
+ std::ops::SubAssign
+ std::ops::MulAssign
+ std::ops::DivAssign
+ std::ops::RemAssign,
{
points: Array2<F>,
values: Array1<F>,
anisotropic_cov: AnisotropicCovariance<F>,
trend_fn: TrendFunction,
approx_method: FastKrigingMethod,
max_neighbors: usize,
radius_multiplier: F,
low_rank_components: Option<(Array2<F>, Array1<F>, Array2<F>)>,
sparse_components: Option<SparseComponents<F>>,
weights: Array1<F>,
basis_functions: Option<Array2<F>>,
trend_coeffs: Option<Array1<F>>,
optimize_parameters: bool,
compute_exact_variance: bool,
_phantom: PhantomData<F>,
}
#[derive(Debug, Clone)]
pub struct FastKrigingBuilder<F>
where
F: Float
+ FromPrimitive
+ Debug
+ Display
+ Div<Output = F>
+ Mul<Output = F>
+ Sub<Output = F>
+ Add<Output = F>
+ std::ops::AddAssign
+ std::ops::SubAssign
+ std::ops::MulAssign
+ std::ops::DivAssign
+ std::ops::RemAssign,
{
points: Option<Array2<F>>,
values: Option<Array1<F>>,
cov_fn: CovarianceFunction,
length_scales: Option<Array1<F>>,
sigma_sq: F,
nugget: F,
trend_fn: TrendFunction,
approx_method: FastKrigingMethod,
max_neighbors: usize,
radius_multiplier: F,
_phantom: PhantomData<F>,
}
pub use super::fast_kriging_reexports::*;