quantrs2_anneal/universal_annealing_compiler/
compilation.rs1use std::collections::HashMap;
7use std::time::{Duration, Instant};
8
9use super::config::OptimizationLevel;
10use super::platform::QuantumPlatform;
11
12pub struct CompilationEngine {
14 pub config: CompilationEngineConfig,
16 pub platform_compilers: HashMap<QuantumPlatform, PlatformCompiler>,
18 pub optimization_passes: Vec<OptimizationPass>,
20 pub compilation_cache: CompilationCache,
22}
23
24impl CompilationEngine {
25 pub fn new() -> Self {
27 Self {
28 config: CompilationEngineConfig {
29 enable_caching: true,
30 optimization_timeout: Duration::from_secs(300),
31 parallel_compilation: true,
32 verification_level: VerificationLevel::Standard,
33 },
34 platform_compilers: HashMap::new(),
35 optimization_passes: vec![],
36 compilation_cache: CompilationCache {
37 entries: HashMap::new(),
38 config: CacheConfig {
39 max_entries: 1000,
40 entry_ttl: Duration::from_secs(3600),
41 eviction_policy: EvictionPolicy::LRU,
42 },
43 statistics: CacheStatistics {
44 hits: 0,
45 misses: 0,
46 hit_rate: 0.0,
47 cache_size: 0,
48 },
49 },
50 }
51 }
52}
53
54impl Default for CompilationEngine {
55 fn default() -> Self {
56 Self::new()
57 }
58}
59
60#[derive(Debug, Clone)]
62pub struct CompilationEngineConfig {
63 pub enable_caching: bool,
65 pub optimization_timeout: Duration,
67 pub parallel_compilation: bool,
69 pub verification_level: VerificationLevel,
71}
72
73#[derive(Debug, Clone, PartialEq)]
75pub enum VerificationLevel {
76 None,
78 Basic,
80 Standard,
82 Full,
84}
85
86#[derive(Debug, Clone)]
88pub struct PlatformCompiler {
89 pub platform: QuantumPlatform,
91 pub version: String,
93 pub supported_features: Vec<String>,
95}
96
97#[derive(Debug, Clone)]
99pub struct OptimizationPass {
100 pub name: String,
102 pub priority: i32,
104 pub enabled: bool,
106}
107
108#[derive(Debug)]
110pub struct CompilationCache {
111 pub entries: HashMap<String, CacheEntry>,
113 pub config: CacheConfig,
115 pub statistics: CacheStatistics,
117}
118
119#[derive(Debug, Clone)]
121pub struct CacheEntry {
122 pub data: Vec<u8>,
124 pub timestamp: Instant,
126 pub access_count: u64,
128}
129
130#[derive(Debug, Clone)]
132pub struct CacheConfig {
133 pub max_entries: usize,
135 pub entry_ttl: Duration,
137 pub eviction_policy: EvictionPolicy,
139}
140
141#[derive(Debug, Clone, PartialEq)]
143pub enum EvictionPolicy {
144 LRU,
146 LFU,
148 FIFO,
150 Random,
152}
153
154#[derive(Debug, Clone)]
156pub struct CacheStatistics {
157 pub hits: u64,
159 pub misses: u64,
161 pub hit_rate: f64,
163 pub cache_size: usize,
165}
166
167#[derive(Debug, Clone)]
169pub struct CompilationResult {
170 pub platform: QuantumPlatform,
172 pub compiled_representation: CompiledRepresentation,
174 pub metadata: CompilationMetadata,
176 pub resource_requirements: CompiledResourceRequirements,
178 pub performance_predictions: PerformancePredictions,
180}
181
182#[derive(Debug, Clone)]
184pub enum CompiledRepresentation {
185 Native(Vec<u8>),
187 IR(String),
189 Hybrid { native: Vec<u8>, ir: String },
191}
192
193#[derive(Debug, Clone)]
195pub struct CompilationMetadata {
196 pub timestamp: Instant,
198 pub compilation_time: Duration,
200 pub compiler_version: String,
202 pub optimization_level: OptimizationLevel,
204 pub passes_applied: Vec<String>,
206}
207
208#[derive(Debug, Clone)]
210pub struct CompiledResourceRequirements {
211 pub qubits_required: usize,
213 pub estimated_execution_time: Duration,
215 pub memory_requirements: usize,
217 pub classical_compute: ClassicalComputeRequirements,
219}
220
221#[derive(Debug, Clone)]
223pub struct ClassicalComputeRequirements {
224 pub cpu_cores: usize,
226 pub memory_mb: usize,
228 pub disk_space_mb: usize,
230 pub network_bandwidth: f64,
232}
233
234#[derive(Debug, Clone)]
236pub struct PerformancePredictions {
237 pub success_probability: f64,
239 pub expected_quality: f64,
241 pub time_to_solution: Duration,
243 pub cost_estimate: f64,
245 pub confidence_intervals: ConfidenceIntervals,
247}
248
249#[derive(Debug, Clone)]
251pub struct ConfidenceIntervals {
252 pub success_probability: (f64, f64),
254 pub quality: (f64, f64),
256 pub time: (Duration, Duration),
258 pub cost: (f64, f64),
260}