use std::collections::HashSet;
use std::time::Duration;
use crate::adaptive_compilation::AdaptiveCompilationConfig;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum AnalysisDepth {
#[default]
Basic,
Intermediate,
Advanced,
Comprehensive,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum OptimizationObjective {
MinimizeDepth,
MinimizeGateCount,
MinimizeError,
MaximizeFidelity,
MinimizeExecutionTime,
MinimizeResources,
MinimizeCrosstalk,
}
#[derive(Debug, Clone)]
pub struct CompilerConfig {
pub enable_gate_synthesis: bool,
pub enable_error_optimization: bool,
pub enable_timing_optimization: bool,
pub enable_crosstalk_mitigation: bool,
pub enable_resource_optimization: bool,
pub max_iterations: usize,
pub tolerance: f64,
pub target: super::types::CompilationTarget,
pub scirs2_config: SciRS2Config,
pub parallel_config: ParallelConfig,
pub adaptive_config: Option<AdaptiveCompilationConfig>,
pub performance_monitoring: bool,
pub analysis_depth: AnalysisDepth,
pub objectives: Vec<OptimizationObjective>,
pub constraints: HardwareConstraints,
}
impl Default for CompilerConfig {
fn default() -> Self {
Self {
enable_gate_synthesis: true,
enable_error_optimization: true,
enable_timing_optimization: false,
enable_crosstalk_mitigation: false,
enable_resource_optimization: true,
max_iterations: 50,
tolerance: 1e-6,
target: super::types::CompilationTarget::Custom {
name: "default".to_string(),
capabilities: crate::backend_traits::BackendCapabilities::default(),
constraints: HardwareConstraints::default(),
},
scirs2_config: SciRS2Config::default(),
parallel_config: ParallelConfig::default(),
adaptive_config: None,
performance_monitoring: false,
analysis_depth: AnalysisDepth::Basic,
objectives: vec![OptimizationObjective::MinimizeError],
constraints: HardwareConstraints::default(),
}
}
}
#[derive(Debug, Clone)]
pub struct SciRS2Config {
pub enable_graph_optimization: bool,
pub enable_statistical_analysis: bool,
pub enable_advanced_optimization: bool,
pub enable_linalg_optimization: bool,
pub optimization_method: SciRS2OptimizationMethod,
pub significance_threshold: f64,
}
impl Default for SciRS2Config {
fn default() -> Self {
Self {
enable_graph_optimization: true,
enable_statistical_analysis: true,
enable_advanced_optimization: false,
enable_linalg_optimization: true,
optimization_method: SciRS2OptimizationMethod::NelderMead,
significance_threshold: 0.05,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum SciRS2OptimizationMethod {
NelderMead,
BFGS,
ConjugateGradient,
SimulatedAnnealing,
GeneticAlgorithm,
ParticleSwarm,
DifferentialEvolution,
Custom(String),
}
#[derive(Debug, Clone)]
pub struct ParallelConfig {
pub enable_parallel_passes: bool,
pub num_threads: usize,
pub chunk_size: usize,
pub enable_simd: bool,
}
impl Default for ParallelConfig {
fn default() -> Self {
Self {
enable_parallel_passes: true,
num_threads: num_cpus::get(),
chunk_size: 50,
enable_simd: true,
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct HardwareConstraints {
pub max_depth: Option<usize>,
pub max_gates: Option<usize>,
pub max_execution_time: Option<f64>,
pub min_fidelity_threshold: f64,
pub max_error_rate: f64,
pub forbidden_pairs: HashSet<(usize, usize)>,
pub min_idle_time: f64,
}
impl Default for HardwareConstraints {
fn default() -> Self {
Self {
max_depth: None,
max_gates: None,
max_execution_time: None,
min_fidelity_threshold: 0.9,
max_error_rate: 0.1,
forbidden_pairs: HashSet::new(),
min_idle_time: 100.0,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub enum PassPriority {
Low = 0,
Medium = 1,
High = 2,
Critical = 3,
}
#[derive(Debug, Clone)]
pub struct PassConfig {
pub name: String,
pub priority: PassPriority,
pub timeout: Duration,
pub collect_metrics: bool,
pub parameters: std::collections::HashMap<String, String>,
}
impl Default for PassConfig {
fn default() -> Self {
Self {
name: "default".to_string(),
priority: PassPriority::Medium,
timeout: Duration::from_secs(30),
collect_metrics: true,
parameters: std::collections::HashMap::new(),
}
}
}