quantrs2_device/compiler_passes/
config.rs1use std::collections::HashSet;
4use std::time::Duration;
5
6use crate::adaptive_compilation::AdaptiveCompilationConfig;
7
8#[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#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
25pub enum OptimizationObjective {
26 MinimizeDepth,
28 MinimizeGateCount,
30 MinimizeError,
32 MaximizeFidelity,
34 MinimizeExecutionTime,
36 MinimizeResources,
38 MinimizeCrosstalk,
40}
41
42#[derive(Debug, Clone)]
44pub struct CompilerConfig {
45 pub enable_gate_synthesis: bool,
47 pub enable_error_optimization: bool,
49 pub enable_timing_optimization: bool,
51 pub enable_crosstalk_mitigation: bool,
53 pub enable_resource_optimization: bool,
55 pub max_iterations: usize,
57 pub tolerance: f64,
59 pub target: super::types::CompilationTarget,
61 pub scirs2_config: SciRS2Config,
63 pub parallel_config: ParallelConfig,
65 pub adaptive_config: Option<AdaptiveCompilationConfig>,
67 pub performance_monitoring: bool,
69 pub analysis_depth: AnalysisDepth,
71 pub objectives: Vec<OptimizationObjective>,
73 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#[derive(Debug, Clone)]
105pub struct SciRS2Config {
106 pub enable_graph_optimization: bool,
108 pub enable_statistical_analysis: bool,
110 pub enable_advanced_optimization: bool,
112 pub enable_linalg_optimization: bool,
114 pub optimization_method: SciRS2OptimizationMethod,
116 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#[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#[derive(Debug, Clone)]
148pub struct ParallelConfig {
149 pub enable_parallel_passes: bool,
151 pub num_threads: usize,
153 pub chunk_size: usize,
155 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#[derive(Debug, Clone, PartialEq)]
172pub struct HardwareConstraints {
173 pub max_depth: Option<usize>,
175 pub max_gates: Option<usize>,
177 pub max_execution_time: Option<f64>,
179 pub min_fidelity_threshold: f64,
181 pub max_error_rate: f64,
183 pub forbidden_pairs: HashSet<(usize, usize)>,
185 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#[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#[derive(Debug, Clone)]
214pub struct PassConfig {
215 pub name: String,
217 pub priority: PassPriority,
219 pub timeout: Duration,
221 pub collect_metrics: bool,
223 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}