quantrs2_device/compiler_passes/
config.rs

1//! Configuration types for hardware compiler passes
2
3use std::collections::HashSet;
4use std::time::Duration;
5
6use crate::adaptive_compilation::AdaptiveCompilationConfig;
7
8/// Analysis depth levels
9#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
10pub enum AnalysisDepth {
11    #[default]
12    Basic,
13    Intermediate,
14    Advanced,
15    Comprehensive,
16}
17
18/// Optimization objectives
19#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
20pub enum OptimizationObjective {
21    /// Minimize circuit depth
22    MinimizeDepth,
23    /// Minimize gate count
24    MinimizeGateCount,
25    /// Minimize error probability
26    MinimizeError,
27    /// Maximize fidelity
28    MaximizeFidelity,
29    /// Minimize execution time
30    MinimizeExecutionTime,
31    /// Minimize resource usage
32    MinimizeResources,
33    /// Minimize crosstalk effects
34    MinimizeCrosstalk,
35}
36
37/// Advanced compiler pass configuration with SciRS2 integration
38#[derive(Debug, Clone)]
39pub struct CompilerConfig {
40    /// Enable hardware-aware gate synthesis
41    pub enable_gate_synthesis: bool,
42    /// Enable error-aware optimization
43    pub enable_error_optimization: bool,
44    /// Enable timing-aware scheduling
45    pub enable_timing_optimization: bool,
46    /// Enable crosstalk mitigation
47    pub enable_crosstalk_mitigation: bool,
48    /// Enable resource optimization
49    pub enable_resource_optimization: bool,
50    /// Maximum optimization iterations
51    pub max_iterations: usize,
52    /// Optimization tolerance
53    pub tolerance: f64,
54    /// Target compilation platform
55    pub target: super::types::CompilationTarget,
56    /// SciRS2 optimization integration
57    pub scirs2_config: SciRS2Config,
58    /// Parallel compilation settings
59    pub parallel_config: ParallelConfig,
60    /// Adaptive compilation settings
61    pub adaptive_config: Option<AdaptiveCompilationConfig>,
62    /// Performance monitoring
63    pub performance_monitoring: bool,
64    /// Circuit analysis depth
65    pub analysis_depth: AnalysisDepth,
66    /// Optimization objectives
67    pub objectives: Vec<OptimizationObjective>,
68    /// Hardware constraints
69    pub constraints: HardwareConstraints,
70}
71
72impl Default for CompilerConfig {
73    fn default() -> Self {
74        Self {
75            enable_gate_synthesis: true,
76            enable_error_optimization: true,
77            enable_timing_optimization: false,
78            enable_crosstalk_mitigation: false,
79            enable_resource_optimization: true,
80            max_iterations: 50,
81            tolerance: 1e-6,
82            target: super::types::CompilationTarget::Custom {
83                name: "default".to_string(),
84                capabilities: crate::backend_traits::BackendCapabilities::default(),
85                constraints: HardwareConstraints::default(),
86            },
87            scirs2_config: SciRS2Config::default(),
88            parallel_config: ParallelConfig::default(),
89            adaptive_config: None,
90            performance_monitoring: false,
91            analysis_depth: AnalysisDepth::Basic,
92            objectives: vec![OptimizationObjective::MinimizeError],
93            constraints: HardwareConstraints::default(),
94        }
95    }
96}
97
98/// SciRS2 optimization configuration
99#[derive(Debug, Clone)]
100pub struct SciRS2Config {
101    /// Enable graph optimization algorithms
102    pub enable_graph_optimization: bool,
103    /// Enable statistical analysis
104    pub enable_statistical_analysis: bool,
105    /// Enable advanced optimization methods
106    pub enable_advanced_optimization: bool,
107    /// Enable linear algebra optimization
108    pub enable_linalg_optimization: bool,
109    /// Optimization method selection
110    pub optimization_method: SciRS2OptimizationMethod,
111    /// Statistical significance threshold
112    pub significance_threshold: f64,
113}
114
115impl Default for SciRS2Config {
116    fn default() -> Self {
117        Self {
118            enable_graph_optimization: true,
119            enable_statistical_analysis: true,
120            enable_advanced_optimization: false,
121            enable_linalg_optimization: true,
122            optimization_method: SciRS2OptimizationMethod::NelderMead,
123            significance_threshold: 0.05,
124        }
125    }
126}
127
128/// SciRS2 optimization methods
129#[derive(Debug, Clone, PartialEq, Eq)]
130pub enum SciRS2OptimizationMethod {
131    NelderMead,
132    BFGS,
133    ConjugateGradient,
134    SimulatedAnnealing,
135    GeneticAlgorithm,
136    ParticleSwarm,
137    DifferentialEvolution,
138    Custom(String),
139}
140
141/// Parallel compilation configuration
142#[derive(Debug, Clone)]
143pub struct ParallelConfig {
144    /// Enable parallel pass execution
145    pub enable_parallel_passes: bool,
146    /// Number of worker threads
147    pub num_threads: usize,
148    /// Chunk size for parallel processing
149    pub chunk_size: usize,
150    /// Enable SIMD optimization
151    pub enable_simd: bool,
152}
153
154impl Default for ParallelConfig {
155    fn default() -> Self {
156        Self {
157            enable_parallel_passes: true,
158            num_threads: num_cpus::get(),
159            chunk_size: 50,
160            enable_simd: true,
161        }
162    }
163}
164
165/// Hardware constraints for compilation
166#[derive(Debug, Clone, PartialEq)]
167pub struct HardwareConstraints {
168    /// Maximum circuit depth
169    pub max_depth: Option<usize>,
170    /// Maximum number of gates
171    pub max_gates: Option<usize>,
172    /// Maximum execution time (microseconds)
173    pub max_execution_time: Option<f64>,
174    /// Minimum fidelity threshold
175    pub min_fidelity_threshold: f64,
176    /// Maximum allowed error rate
177    pub max_error_rate: f64,
178    /// Forbidden qubit pairs
179    pub forbidden_pairs: HashSet<(usize, usize)>,
180    /// Minimum idle time between operations (nanoseconds)
181    pub min_idle_time: f64,
182}
183
184impl Default for HardwareConstraints {
185    fn default() -> Self {
186        Self {
187            max_depth: None,
188            max_gates: None,
189            max_execution_time: None,
190            min_fidelity_threshold: 0.9,
191            max_error_rate: 0.1,
192            forbidden_pairs: HashSet::new(),
193            min_idle_time: 100.0,
194        }
195    }
196}
197
198/// Pass execution priority levels
199#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
200pub enum PassPriority {
201    Low = 0,
202    Medium = 1,
203    High = 2,
204    Critical = 3,
205}
206
207/// Pass execution configuration
208#[derive(Debug, Clone)]
209pub struct PassConfig {
210    /// Pass name
211    pub name: String,
212    /// Execution priority
213    pub priority: PassPriority,
214    /// Maximum execution time
215    pub timeout: Duration,
216    /// Enable detailed metrics collection
217    pub collect_metrics: bool,
218    /// Pass-specific parameters
219    pub parameters: std::collections::HashMap<String, String>,
220}
221
222impl Default for PassConfig {
223    fn default() -> Self {
224        Self {
225            name: "default".to_string(),
226            priority: PassPriority::Medium,
227            timeout: Duration::from_secs(30),
228            collect_metrics: true,
229            parameters: std::collections::HashMap::new(),
230        }
231    }
232}