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