Skip to main content

do_memory_mcp/patterns/predictive/
mod.rs

1//! # Predictive Analysis Module
2//!
3//! Provides forecasting models, anomaly detection, and causal inference capabilities
4//! using advanced algorithms from augurs and deep_causality.
5
6#[allow(clippy::cast_precision_loss)]
7#[allow(clippy::cast_possible_wrap)]
8#[allow(clippy::cast_sign_loss)]
9use anyhow::Result;
10use std::collections::HashMap;
11use tracing::{info, instrument};
12
13// Re-export submodules
14pub mod anomaly;
15pub mod causal;
16pub mod dbscan;
17pub mod extraction;
18pub mod forecasting;
19pub mod kdtree;
20
21#[cfg(test)]
22mod dbscan_tests;
23
24// Re-export main types for convenience
25pub use anomaly::AnomalyDetector;
26pub use causal::CausalAnalyzer;
27pub use dbscan::{AdaptiveDBSCAN, Cluster, ClusterLabel, DBSCANConfig, StreamingClusters};
28pub use forecasting::{
29    engine::ForecastingEngine,
30    ets_types::{ETSErrorType, ETSSeasonalType, ETSTrendType, SeasonalityResult},
31    types::{ForecastResult, PredictiveConfig, PredictiveMetadata, PredictiveResults},
32};
33pub use kdtree::{KDTree, Point};
34
35// Re-export result types
36pub use anomaly::AnomalyResult;
37pub use causal::{CausalResult, CausalType};
38pub use extraction::{
39    ClusterCharacteristics, ExtractedPattern, ExtractionConfig, PatternExtractor, PatternType,
40};
41
42/// Comprehensive predictive analysis combining all methods
43#[instrument(skip(data))]
44pub fn run_predictive_analysis(
45    data: &HashMap<String, Vec<f64>>,
46    config: PredictiveConfig,
47) -> Result<PredictiveResults> {
48    let start_time = std::time::Instant::now();
49
50    info!("Starting comprehensive predictive analysis");
51
52    // Forecasting
53    let mut forecaster = ForecastingEngine::with_config(config.clone())?;
54    let forecasts = forecaster.forecast(data)?;
55
56    // Anomaly detection
57    let mut anomaly_detector = AnomalyDetector::with_config(config.clone())?;
58    let anomalies = anomaly_detector.detect_anomalies(data)?;
59
60    // Causal inference
61    let causal_analyzer = CausalAnalyzer::with_config(config.clone())?;
62    let causal_relationships = causal_analyzer.analyze_causality(data)?;
63
64    // Calculate metadata
65    let duration = start_time.elapsed();
66    let metadata = PredictiveMetadata {
67        variables_analyzed: data.len(),
68        duration_ms: duration.as_millis() as u64,
69        memory_usage: data.values().map(|v| v.len() * 8).sum(),
70        methods_used: vec![
71            "ETS Forecasting".to_string(),
72            "DBSCAN Anomaly Detection".to_string(),
73            "Granger Causality".to_string(),
74        ],
75    };
76
77    let results = PredictiveResults {
78        forecasts,
79        anomalies,
80        causal_relationships,
81        metadata,
82    };
83
84    info!(
85        "Predictive analysis completed in {}ms",
86        results.metadata.duration_ms
87    );
88
89    Ok(results)
90}