mod cached;
pub use cached::{cache, CachedKernel};
mod precomputed;
pub use precomputed::PrecomputedKernel;
mod row;
pub use row::{KernelFunction, RowKernel};
pub trait Kernel {
fn compute_row(&self, i: usize, ki: &mut [f64], active_set: &[usize]);
fn size(&self) -> usize;
fn diag(&self, i: usize) -> f64;
fn restrict_active(&mut self, _old: &Vec<usize>, _new: &Vec<usize>) {}
fn set_active(&mut self, _old: &Vec<usize>, _new: &Vec<usize>) {}
fn use_rows(&mut self, idxs: &[usize], active_set: &[usize], fun: &mut dyn FnMut(Vec<&[f64]>)) {
let mut kidxs = Vec::with_capacity(idxs.len());
let active_size = active_set.len();
for &idx in idxs.iter() {
let mut kidx = vec![0.0; active_size];
self.compute_row(idx, &mut kidx, active_set);
kidxs.push(kidx);
}
fun(kidxs.iter().map(|ki| ki.as_slice()).collect());
}
}
pub trait Deriv {
fn compute_row_deriv(&self, i: usize, dkis: &[&mut [f64]], active_set: &[usize]);
fn num_params(&self) -> usize;
}
pub mod gaussian;