1use scirs2_datasets::{
7 create_adaptive_engine_with_config,
9 make_classification,
11 quick_quality_assessment,
12 AdaptiveStreamConfig,
13 AdvancedDatasetAnalyzer,
14 AdvancedGpuOptimizer,
15 ChunkMetadata,
16 DataCharacteristics,
17 Dataset,
18 GpuBackend,
19 GpuConfig,
20 GpuContext,
21 StatisticalMoments,
22 StreamChunk,
23 TrendDirection,
24 TrendIndicators,
25};
26use statrs::statistics::Statistics;
27use std::time::Instant;
28
29#[allow(dead_code)]
30fn main() -> Result<(), Box<dyn std::error::Error>> {
31 println!("š SciRS2-Datasets Advanced Mode Showcase");
32 println!("===========================================\n");
33
34 let dataset = create_sampledataset()?;
36 println!(
37 "š Created sample dataset: {} samples, {} features",
38 dataset.n_samples(),
39 dataset.n_features()
40 );
41
42 demonstrate_advanced_analytics(&dataset)?;
44
45 demonstrate_advanced_gpu_optimization()?;
47
48 demonstrate_adaptive_streaming(&dataset)?;
50
51 println!("\nā
Advanced mode demonstration completed successfully!");
52 Ok(())
53}
54
55#[allow(dead_code)]
57fn create_sampledataset() -> Result<Dataset, Box<dyn std::error::Error>> {
58 println!("š§ Generating sample classification dataset...");
59
60 let dataset = make_classification(
61 1000, 10, 3, 2, 5, Some(42), )?;
68
69 Ok(dataset)
70}
71
72#[allow(dead_code)]
74fn demonstrate_advanced_analytics(dataset: &Dataset) -> Result<(), Box<dyn std::error::Error>> {
75 println!("\nš§ Advanced Analytics Demonstration");
76 println!("==========================================");
77
78 println!("š Running quick quality assessment...");
80 let quick_quality = quick_quality_assessment(dataset)?;
81 println!(" Quality Score: {quick_quality:.3}");
82
83 println!("š¬ Running comprehensive advanced-analysis...");
85 let start_time = Instant::now();
86
87 let analyzer = AdvancedDatasetAnalyzer::new()
88 .with_gpu(true)
89 .with_advanced_precision(true)
90 .with_significance_threshold(0.01);
91
92 let metrics = analyzer.analyze_dataset_quality(dataset)?;
93 let analysis_time = start_time.elapsed();
94
95 println!(" Analysis completed in: {analysis_time:?}");
96 println!(" Complexity Score: {:.3}", metrics.complexity_score);
97 println!(" Entropy: {:.3}", metrics.entropy);
98 println!(" Outlier Score: {:.3}", metrics.outlier_score);
99 println!(" ML Quality Score: {:.3}", metrics.ml_quality_score);
100
101 println!(" Normality Assessment:");
103 println!(
104 " Overall Normality: {:.3}",
105 metrics.normality_assessment.overall_normality
106 );
107 println!(
108 " Shapiro-Wilk (avg): {:.3}",
109 metrics.normality_assessment.shapiro_wilk_scores.mean()
110 );
111
112 println!(" Correlation Insights:");
114 println!(
115 " Feature Importance (top 3): {:?}",
116 metrics
117 .correlation_insights
118 .feature_importance
119 .iter()
120 .take(3)
121 .map(|&x| format!("{x:.3}"))
122 .collect::<Vec<_>>()
123 );
124
125 Ok(())
126}
127
128#[allow(dead_code)]
130fn demonstrate_advanced_gpu_optimization() -> Result<(), Box<dyn std::error::Error>> {
131 println!("\nā” Advanced-GPU Optimization Demonstration");
132 println!("=====================================");
133
134 println!("š§ Initializing GPU context...");
136 let gpu_config = GpuConfig {
137 backend: GpuBackend::Cpu,
138 ..Default::default()
139 };
140 let gpu_context = GpuContext::new(gpu_config)?; println!(" Backend: {:?}", gpu_context.backend());
142
143 let optimizer = AdvancedGpuOptimizer::new()
145 .with_adaptive_kernels(true)
146 .with_memory_prefetch(true)
147 .with_multi_gpu(false) .with_auto_tuning(true);
149
150 println!("š„ Generating advanced-optimized matrix...");
152 let start_time = Instant::now();
153 let matrix = optimizer.generate_advanced_optimized_matrix(
154 &gpu_context,
155 500, 200, "normal", )?;
159 let generation_time = start_time.elapsed();
160
161 println!(
162 " Generated {}x{} matrix in: {:?}",
163 matrix.nrows(),
164 matrix.ncols(),
165 generation_time
166 );
167 let matrix_mean = matrix.clone().mean();
168 let matrix_std = matrix.var(1.0).sqrt();
169 println!(
170 " Matrix stats: mean={:.3}, std={:.3}",
171 matrix_mean, matrix_std
172 );
173
174 println!("š Running performance benchmarks...");
176 let datashapes = vec![(100, 50), (500, 200), (1000, 500)];
177 let benchmark_results =
178 optimizer.benchmark_performance(&gpu_context, "matrix_generation", &datashapes)?;
179
180 println!(" Benchmark Results:");
181 println!(
182 " Best Speedup: {:.2}x",
183 benchmark_results.best_speedup()
184 );
185 println!(
186 " Average Speedup: {:.2}x",
187 benchmark_results.average_speedup()
188 );
189 println!(
190 " Total Memory Usage: {:.1} MB",
191 benchmark_results.total_memory_usage()
192 );
193
194 Ok(())
195}
196
197#[allow(dead_code)]
199fn demonstrate_adaptive_streaming(dataset: &Dataset) -> Result<(), Box<dyn std::error::Error>> {
200 println!("\nš Adaptive Streaming Demonstration");
201 println!("===================================");
202
203 let config = AdaptiveStreamConfig::default();
205
206 println!("š§ Initializing adaptive streaming engine...");
207 let mut engine = create_adaptive_engine_with_config(config);
208
209 println!("š” Simulating data stream...");
211 let data = &dataset.data;
212 let chunksize = 20;
213 let num_chunks = (data.nrows() / chunksize).min(10); let mut total_processed = 0;
216 let start_time = Instant::now();
217
218 for i in 0..num_chunks {
219 let start_row = i * chunksize;
220 let end_row = (start_row + chunksize).min(data.nrows());
221
222 let chunkdata = data.slice(ndarray::s![start_row..end_row, ..]).to_owned();
224
225 let chunk = StreamChunk {
226 data: chunkdata,
227 timestamp: Instant::now(),
228 metadata: ChunkMetadata {
229 source_id: format!("demo_source_{i}"),
230 sequence_number: i as u64,
231 characteristics: DataCharacteristics {
232 moments: StatisticalMoments {
233 mean: 0.0,
234 variance: 1.0,
235 skewness: 0.0,
236 kurtosis: 0.0,
237 },
238 entropy: 1.0,
239 trend: TrendIndicators {
240 linear_slope: 0.1,
241 trend_strength: 0.5,
242 direction: TrendDirection::Increasing,
243 seasonality: 0.2,
244 },
245 anomaly_score: 0.1,
246 },
247 },
248 quality_score: 0.9,
249 };
250
251 let results = engine.process_stream(chunk)?;
253 total_processed += results.len();
254
255 if !results.is_empty() {
256 println!(
257 " Processed batch {}: {} datasets generated",
258 i + 1,
259 results.len()
260 );
261 }
262 }
263
264 let streaming_time = start_time.elapsed();
265
266 println!(" Streaming completed in: {streaming_time:?}");
267 println!(" Total datasets processed: {total_processed}");
268
269 println!("š Getting performance metrics...");
271 let perf_metrics = engine.get_performance_metrics()?;
272 println!(" Processing Latency: {:?}", perf_metrics.latency);
273 println!(" Throughput: {:.1} chunks/sec", perf_metrics.throughput);
274 println!(
275 " Memory Efficiency: {:.1}%",
276 perf_metrics.memory_efficiency * 100.0
277 );
278
279 let quality_metrics = engine.get_quality_metrics()?;
281 println!(" Quality Metrics:");
282 println!(
283 " Integrity: {:.1}%",
284 quality_metrics.integrity_score * 100.0
285 );
286 println!(
287 " Completeness: {:.1}%",
288 quality_metrics.completeness_score * 100.0
289 );
290 println!(
291 " Overall Quality: {:.1}%",
292 quality_metrics.overall_score * 100.0
293 );
294
295 let buffer_stats = engine.get_buffer_statistics()?;
297 println!(" Buffer Statistics:");
298 println!(" Utilization: {:.1}%", buffer_stats.utilization * 100.0);
299 println!(" Memory Usage: {} bytes", buffer_stats.memory_usage);
300
301 Ok(())
302}
303
304#[cfg(test)]
305mod tests {
306 use super::*;
307
308 #[test]
309 fn test_sample_dataset_creation() {
310 let result = create_sampledataset();
311 assert!(result.is_ok());
312 let dataset = result.unwrap();
313 assert_eq!(dataset.n_samples(), 1000);
314 assert_eq!(dataset.n_features(), 10);
315 }
316
317 #[test]
318 fn test_advanced_analytics_integration() {
319 let dataset = create_sampledataset().unwrap();
320 let result = demonstrate_advanced_analytics(&dataset);
321 assert!(result.is_ok());
322 }
323
324 #[test]
325 fn test_gpu_optimization_integration() {
326 let result = demonstrate_advanced_gpu_optimization();
327 assert!(result.is_ok());
328 }
329
330 #[test]
331 fn test_adaptive_streaming_integration() {
332 let dataset = create_sampledataset().unwrap();
333 let result = demonstrate_adaptive_streaming(&dataset);
334 assert!(result.is_ok());
335 }
336}