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, Default)]
10pub enum AnalysisDepth {
11 #[default]
12 Basic,
13 Intermediate,
14 Advanced,
15 Comprehensive,
16}
17
18#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
20pub enum OptimizationObjective {
21 MinimizeDepth,
23 MinimizeGateCount,
25 MinimizeError,
27 MaximizeFidelity,
29 MinimizeExecutionTime,
31 MinimizeResources,
33 MinimizeCrosstalk,
35}
36
37#[derive(Debug, Clone)]
39pub struct CompilerConfig {
40 pub enable_gate_synthesis: bool,
42 pub enable_error_optimization: bool,
44 pub enable_timing_optimization: bool,
46 pub enable_crosstalk_mitigation: bool,
48 pub enable_resource_optimization: bool,
50 pub max_iterations: usize,
52 pub tolerance: f64,
54 pub target: super::types::CompilationTarget,
56 pub scirs2_config: SciRS2Config,
58 pub parallel_config: ParallelConfig,
60 pub adaptive_config: Option<AdaptiveCompilationConfig>,
62 pub performance_monitoring: bool,
64 pub analysis_depth: AnalysisDepth,
66 pub objectives: Vec<OptimizationObjective>,
68 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#[derive(Debug, Clone)]
100pub struct SciRS2Config {
101 pub enable_graph_optimization: bool,
103 pub enable_statistical_analysis: bool,
105 pub enable_advanced_optimization: bool,
107 pub enable_linalg_optimization: bool,
109 pub optimization_method: SciRS2OptimizationMethod,
111 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#[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#[derive(Debug, Clone)]
143pub struct ParallelConfig {
144 pub enable_parallel_passes: bool,
146 pub num_threads: usize,
148 pub chunk_size: usize,
150 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#[derive(Debug, Clone, PartialEq)]
167pub struct HardwareConstraints {
168 pub max_depth: Option<usize>,
170 pub max_gates: Option<usize>,
172 pub max_execution_time: Option<f64>,
174 pub min_fidelity_threshold: f64,
176 pub max_error_rate: f64,
178 pub forbidden_pairs: HashSet<(usize, usize)>,
180 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#[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#[derive(Debug, Clone)]
209pub struct PassConfig {
210 pub name: String,
212 pub priority: PassPriority,
214 pub timeout: Duration,
216 pub collect_metrics: bool,
218 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}