mod algorithms;
mod common;
mod hyperparams;
mod methods;
pub use algorithms::RandomProjection;
pub use hyperparams::{RandomProjectionParams, RandomProjectionValidParams};
use self::methods::{Gaussian, Sparse};
pub type GaussianRandomProjection<F> = RandomProjection<Gaussian, F>;
pub type GaussianRandomProjectionParams<R> = RandomProjectionParams<Gaussian, R>;
pub type GaussianRandomProjectionValidParams<R> = RandomProjectionValidParams<Gaussian, R>;
pub type SparseRandomProjection<F> = RandomProjection<Sparse, F>;
pub type SparseRandomProjectionParams<R> = RandomProjectionParams<Sparse, R>;
pub type SparseRandomProjectionValidParams<R> = RandomProjectionValidParams<Sparse, R>;
#[cfg(test)]
mod tests {
use super::*;
use rand_xoshiro::Xoshiro256Plus;
#[test]
fn autotraits_gaussian() {
fn has_autotraits<T: Send + Sync + Sized + Unpin>() {}
has_autotraits::<GaussianRandomProjection<f64>>();
has_autotraits::<GaussianRandomProjection<f32>>();
has_autotraits::<GaussianRandomProjectionValidParams<Xoshiro256Plus>>();
has_autotraits::<GaussianRandomProjectionParams<Xoshiro256Plus>>();
}
#[test]
fn autotraits_sparse() {
fn has_autotraits<T: Send + Sync + Sized + Unpin>() {}
has_autotraits::<SparseRandomProjection<f64>>();
has_autotraits::<SparseRandomProjection<f32>>();
has_autotraits::<SparseRandomProjectionValidParams<Xoshiro256Plus>>();
has_autotraits::<SparseRandomProjectionParams<Xoshiro256Plus>>();
}
use linfa::{traits::Fit, Dataset};
#[test]
fn gaussian_dim_increase_error() {
let records = array![[10., 10.], [1., 12.], [20., 30.], [-20., 30.],];
let dataset = Dataset::from(records);
let res = GaussianRandomProjection::<f32>::params()
.target_dim(10)
.fit(&dataset);
assert!(res.is_err())
}
#[test]
fn sparse_dim_increase_error() {
let records = array![[10., 10.], [1., 12.], [20., 30.], [-20., 30.],];
let dataset = Dataset::from(records);
let res = SparseRandomProjection::<f32>::params()
.target_dim(10)
.fit(&dataset);
assert!(res.is_err())
}
}