scirs2_cluster/advanced/
mod.rs1pub mod online;
33pub mod quantum;
34
35pub mod deep;
38pub mod quantum_algorithms;
39pub mod reinforcement;
40pub mod transfer;
41
42pub use online::{adaptive_online_clustering, AdaptiveOnlineClustering, AdaptiveOnlineConfig};
44pub use quantum::{quantum_kmeans, QuantumConfig, QuantumKMeans, QuantumState};
45
46pub use deep::*;
48pub use quantum_algorithms::*;
49pub use reinforcement::*;
50pub use transfer::*;
51
52pub fn default_quantum_config() -> QuantumConfig {
54 QuantumConfig::default()
55}
56
57pub fn default_adaptive_online_config() -> AdaptiveOnlineConfig {
59 AdaptiveOnlineConfig::default()
60}
61
62pub fn quick_quantum_clustering<F>(
64 data: scirs2_core::ndarray::ArrayView2<F>,
65 n_clusters: usize,
66) -> crate::error::Result<(
67 scirs2_core::ndarray::Array2<F>,
68 scirs2_core::ndarray::Array1<usize>,
69)>
70where
71 F: scirs2_core::numeric::Float + scirs2_core::numeric::FromPrimitive + std::fmt::Debug,
72{
73 quantum_kmeans(data, n_clusters, None)
74}
75
76pub fn quick_online_clustering<F>(
78 data: scirs2_core::ndarray::ArrayView2<F>,
79) -> crate::error::Result<(
80 scirs2_core::ndarray::Array2<F>,
81 scirs2_core::ndarray::Array1<usize>,
82)>
83where
84 F: scirs2_core::numeric::Float + scirs2_core::numeric::FromPrimitive + std::fmt::Debug,
85{
86 adaptive_online_clustering(data, None)
87}
88
89#[cfg(test)]
90mod tests {
91 use super::*;
92 use scirs2_core::ndarray::Array2;
93
94 #[test]
95 fn test_default_quantum_config() {
96 let config = default_quantum_config();
97 assert_eq!(config.n_quantum_states, 8);
98 assert_eq!(config.quantum_iterations, 50);
99 }
100
101 #[test]
102 fn test_default_adaptive_online_config() {
103 let config = default_adaptive_online_config();
104 assert_eq!(config.initial_learning_rate, 0.1);
105 assert_eq!(config.max_clusters, 50);
106 }
107
108 #[test]
109 fn test_quick_quantum_clustering() {
110 let data = Array2::from_shape_vec((8, 2), (0..16).map(|x| x as f64).collect()).unwrap();
111 let result = quick_quantum_clustering(data.view(), 2);
112 assert!(result.is_ok());
113
114 let (centroids, labels) = result.unwrap();
115 assert_eq!(centroids.nrows(), 2);
116 assert_eq!(labels.len(), 8);
117 }
118
119 #[test]
120 fn test_quick_online_clustering() {
121 let data = Array2::from_shape_vec((6, 2), (0..12).map(|x| x as f64).collect()).unwrap();
122 let result = quick_online_clustering(data.view());
123 assert!(result.is_ok());
124
125 let (centers, labels) = result.unwrap();
126 assert_eq!(labels.len(), 6);
127 }
128}