use std::collections::{HashMap, VecDeque};
use std::time::{Duration, SystemTime};
use super::types::{
AdvancedVisualizationManager, AnalysisError, ComparisonMetric, ComparisonResult,
ConvergenceAnalysis, ConvergenceData, DashboardData, Dataset, ExportFormat, InteractiveFeature,
PerformanceHistory, PerformancePrediction, PredictionError, QuantumState, RealTimeAnalysis,
RenderingQuality, StateVisualization, StatisticalTest, VisualizationConfig, VisualizationError,
WidgetConfig, WidgetRender, WidgetType,
};
pub trait StateVisualizationMethod: Send + Sync {
fn name(&self) -> &str;
fn visualize(&self, state: &QuantumState) -> Result<StateVisualization, VisualizationError>;
fn supported_dimensions(&self) -> Vec<usize>;
fn interactive_features(&self) -> Vec<InteractiveFeature>;
}
pub trait DashboardWidget: Send + Sync {
fn name(&self) -> &str;
fn widget_type(&self) -> WidgetType;
fn update(&mut self, data: &DashboardData) -> Result<(), VisualizationError>;
fn render(&self) -> Result<WidgetRender, VisualizationError>;
fn configure(&mut self, config: WidgetConfig) -> Result<(), VisualizationError>;
}
pub trait PerformancePredictor: Send + Sync {
fn name(&self) -> &str;
fn predict(
&self,
historical_data: &PerformanceHistory,
) -> Result<PerformancePrediction, PredictionError>;
fn confidence(&self) -> f64;
fn prediction_horizon(&self) -> Duration;
}
pub trait ComparisonAlgorithm: Send + Sync {
fn name(&self) -> &str;
fn compare(&self, datasets: &[Dataset]) -> Result<ComparisonResult, AnalysisError>;
fn comparison_metrics(&self) -> Vec<ComparisonMetric>;
fn statistical_tests(&self) -> Vec<StatisticalTest>;
}
pub trait ConvergenceAnalyzer: Send + Sync {
fn name(&self) -> &str;
fn analyze(&self, data: &ConvergenceData) -> Result<ConvergenceAnalysis, AnalysisError>;
fn real_time_analysis(&self, data: &ConvergenceData)
-> Result<RealTimeAnalysis, AnalysisError>;
}
pub fn create_advanced_visualization_manager() -> AdvancedVisualizationManager {
AdvancedVisualizationManager::new(VisualizationConfig::default())
}
pub fn create_lightweight_visualization_manager() -> AdvancedVisualizationManager {
let config = VisualizationConfig {
interactive_mode: false,
real_time_updates: false,
enable_3d_rendering: false,
quantum_state_viz: false,
performance_dashboard: false,
update_frequency: Duration::from_secs(1),
max_data_points: 1000,
export_formats: vec![ExportFormat::PNG],
rendering_quality: RenderingQuality::Low,
color_schemes: HashMap::new(),
};
AdvancedVisualizationManager::new(config)
}