use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::time::Duration;
#[derive(Debug, Clone)]
pub struct DatasetSplit {
pub train: Vec<(String, String, String)>,
pub validation: Vec<(String, String, String)>,
pub test: Vec<(String, String, String)>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DatasetStatistics {
pub num_triples: usize,
pub num_entities: usize,
pub num_relations: usize,
pub entity_frequency: HashMap<String, usize>,
pub relation_frequency: HashMap<String, usize>,
pub avg_degree: f64,
pub density: f64,
}
#[derive(Debug, Clone)]
pub struct EmbeddingDistributionStats {
pub mean: f64,
pub std_dev: f64,
pub variance: f64,
pub min: f64,
pub max: f64,
pub median: f64,
pub num_parameters: usize,
}
#[derive(Debug, Clone)]
pub struct SimilarityStats {
pub mean_similarity: f64,
pub min_similarity: f64,
pub max_similarity: f64,
pub median_similarity: f64,
pub num_comparisons: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GraphMetrics {
pub num_entities: usize,
pub num_relations: usize,
pub num_triples: usize,
pub avg_degree: f64,
pub max_degree: usize,
pub min_degree: usize,
pub density: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BenchmarkConfig {
pub warmup_iterations: usize,
pub measurement_iterations: usize,
pub confidence_level: f64,
pub enable_memory_profiling: bool,
pub enable_detailed_timing: bool,
}
impl Default for BenchmarkConfig {
fn default() -> Self {
Self {
warmup_iterations: 100,
measurement_iterations: 1000,
confidence_level: 0.95,
enable_memory_profiling: true,
enable_detailed_timing: true,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MemoryStats {
pub peak_memory_bytes: usize,
pub avg_memory_bytes: usize,
pub allocations: usize,
pub deallocations: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BenchmarkResult {
pub operation: String,
pub iterations: usize,
pub total_duration: Duration,
pub avg_duration: Duration,
pub min_duration: Duration,
pub max_duration: Duration,
pub std_deviation: Duration,
pub ops_per_second: f64,
pub memory_stats: MemoryStats,
pub custom_metrics: HashMap<String, f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BenchmarkSummary {
pub total_duration: Duration,
pub total_operations: usize,
pub overall_throughput: f64,
pub efficiency_score: f64,
pub bottlenecks: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BenchmarkComparison {
pub baseline_name: String,
pub comparison_name: String,
pub throughput_improvement: f64,
pub latency_improvement: f64,
pub consistency_improvement: f64,
pub is_improvement: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RegressionAnalysis {
pub throughput_change: f64,
pub is_regression: bool,
pub confidence_level: f64,
pub analysis_notes: Vec<String>,
}
impl Default for RegressionAnalysis {
fn default() -> Self {
Self {
throughput_change: 0.0,
is_regression: false,
confidence_level: 0.0,
analysis_notes: vec!["No historical data available".to_string()],
}
}
}