#[cfg(feature = "cpu")]
use crate::adapters::batch::ParallelBatchLoessBuilder;
#[cfg(feature = "cpu")]
use crate::adapters::online::ParallelOnlineLoessBuilder;
#[cfg(feature = "cpu")]
use crate::adapters::streaming::ParallelStreamingLoessBuilder;
use std::fmt::Debug;
use loess_rs::internals::api::Batch as BaseBatch;
use loess_rs::internals::api::Online as BaseOnline;
use loess_rs::internals::api::Streaming as BaseStreaming;
use loess_rs::internals::algorithms::regression::SolverLinalg;
use loess_rs::internals::math::distance::DistanceLinalg;
use loess_rs::internals::math::linalg::FloatLinalg;
pub use loess_rs::internals::adapters::online::UpdateMode;
pub use loess_rs::internals::adapters::streaming::MergeStrategy;
pub use loess_rs::internals::algorithms::regression::{PolynomialDegree, ZeroWeightFallback};
pub use loess_rs::internals::algorithms::robustness::RobustnessMethod;
pub use loess_rs::internals::api::{LoessAdapter, LoessBuilder};
pub use loess_rs::internals::engine::executor::SurfaceMode;
pub use loess_rs::internals::engine::output::LoessResult;
pub use loess_rs::internals::evaluation::cv::{KFold, LOOCV};
pub use loess_rs::internals::math::boundary::BoundaryPolicy;
pub use loess_rs::internals::math::distance::DistanceMetric;
pub use loess_rs::internals::math::kernel::WeightFunction;
pub use loess_rs::internals::math::scaling::ScalingMethod;
pub use loess_rs::internals::primitives::backend::Backend;
pub use loess_rs::internals::primitives::errors::LoessError;
#[allow(non_snake_case)]
pub mod Adapter {
pub use super::{Batch, Online, Streaming};
}
#[derive(Debug, Clone, Copy)]
pub struct Batch;
#[cfg(feature = "cpu")]
impl<T: FloatLinalg + DistanceLinalg + SolverLinalg + Debug + Send + Sync + 'static> LoessAdapter<T>
for Batch
{
type Output = ParallelBatchLoessBuilder<T>;
fn convert(builder: LoessBuilder<T>) -> Self::Output {
let parallel = builder.parallel.unwrap_or(true);
let mut base = <BaseBatch as LoessAdapter<T>>::convert(builder);
base.parallel = Some(parallel);
ParallelBatchLoessBuilder { base }
}
}
#[derive(Debug, Clone, Copy)]
pub struct Streaming;
#[cfg(feature = "cpu")]
impl<T: FloatLinalg + DistanceLinalg + SolverLinalg + Debug + Send + Sync + 'static> LoessAdapter<T>
for Streaming
{
type Output = ParallelStreamingLoessBuilder<T>;
fn convert(builder: LoessBuilder<T>) -> Self::Output {
let parallel = builder.parallel.unwrap_or(true);
let mut base = <BaseStreaming as LoessAdapter<T>>::convert(builder);
base.parallel = Some(parallel);
ParallelStreamingLoessBuilder { base }
}
}
#[derive(Debug, Clone, Copy)]
pub struct Online;
#[cfg(feature = "cpu")]
impl<T: FloatLinalg + DistanceLinalg + SolverLinalg + Debug + Send + Sync + 'static> LoessAdapter<T>
for Online
{
type Output = ParallelOnlineLoessBuilder<T>;
fn convert(builder: LoessBuilder<T>) -> Self::Output {
let parallel = builder.parallel.unwrap_or(false);
let mut base = <BaseOnline as LoessAdapter<T>>::convert(builder);
base.parallel = Some(parallel);
ParallelOnlineLoessBuilder { base }
}
}