pub mod online;
pub mod quantum;
pub mod deep;
pub mod quantum_algorithms;
pub mod reinforcement;
pub mod transfer;
pub use online::{adaptive_online_clustering, AdaptiveOnlineClustering, AdaptiveOnlineConfig};
pub use quantum::{quantum_kmeans, QuantumConfig, QuantumKMeans, QuantumState};
pub use deep::*;
pub use quantum_algorithms::*;
pub use reinforcement::*;
pub use transfer::*;
pub fn default_quantum_config() -> QuantumConfig {
QuantumConfig::default()
}
pub fn default_adaptive_online_config() -> AdaptiveOnlineConfig {
AdaptiveOnlineConfig::default()
}
pub fn quick_quantum_clustering<F>(
data: scirs2_core::ndarray::ArrayView2<F>,
n_clusters: usize,
) -> crate::error::Result<(
scirs2_core::ndarray::Array2<F>,
scirs2_core::ndarray::Array1<usize>,
)>
where
F: scirs2_core::numeric::Float + scirs2_core::numeric::FromPrimitive + std::fmt::Debug,
{
quantum_kmeans(data, n_clusters, None)
}
pub fn quick_online_clustering<F>(
data: scirs2_core::ndarray::ArrayView2<F>,
) -> crate::error::Result<(
scirs2_core::ndarray::Array2<F>,
scirs2_core::ndarray::Array1<usize>,
)>
where
F: scirs2_core::numeric::Float + scirs2_core::numeric::FromPrimitive + std::fmt::Debug,
{
adaptive_online_clustering(data, None)
}
#[cfg(test)]
mod tests {
use super::*;
use scirs2_core::ndarray::Array2;
#[test]
fn test_default_quantum_config() {
let config = default_quantum_config();
assert_eq!(config.n_quantum_states, 8);
assert_eq!(config.quantum_iterations, 50);
}
#[test]
fn test_default_adaptive_online_config() {
let config = default_adaptive_online_config();
assert_eq!(config.initial_learning_rate, 0.1);
assert_eq!(config.max_clusters, 50);
}
#[test]
fn test_quick_quantum_clustering() {
let data = Array2::from_shape_vec((8, 2), (0..16).map(|x| x as f64).collect())
.expect("Operation failed");
let result = quick_quantum_clustering(data.view(), 2);
assert!(result.is_ok());
let (centroids, labels) = result.expect("Operation failed");
assert_eq!(centroids.nrows(), 2);
assert_eq!(labels.len(), 8);
}
#[test]
fn test_quick_online_clustering() {
let data = Array2::from_shape_vec((6, 2), (0..12).map(|x| x as f64).collect())
.expect("Operation failed");
let result = quick_online_clustering(data.view());
assert!(result.is_ok());
let (centers, labels) = result.expect("Operation failed");
assert_eq!(labels.len(), 6);
}
}