Skip to main content

quantrs2_anneal/universal_annealing_compiler/
compilation.rs

1//! Compilation engine and related types.
2//!
3//! This module contains types for the compilation process,
4//! including compilation results, caching, and optimization passes.
5
6use std::collections::HashMap;
7use std::time::{Duration, Instant};
8
9use super::config::OptimizationLevel;
10use super::platform::QuantumPlatform;
11
12/// Compilation engine
13pub struct CompilationEngine {
14    /// Engine configuration
15    pub config: CompilationEngineConfig,
16    /// Platform-specific compilers
17    pub platform_compilers: HashMap<QuantumPlatform, PlatformCompiler>,
18    /// Optimization passes
19    pub optimization_passes: Vec<OptimizationPass>,
20    /// Compilation cache
21    pub compilation_cache: CompilationCache,
22}
23
24impl CompilationEngine {
25    /// Create a new compilation engine
26    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/// Compilation engine configuration
61#[derive(Debug, Clone)]
62pub struct CompilationEngineConfig {
63    /// Enable compilation caching
64    pub enable_caching: bool,
65    /// Optimization timeout
66    pub optimization_timeout: Duration,
67    /// Enable parallel compilation
68    pub parallel_compilation: bool,
69    /// Verification level
70    pub verification_level: VerificationLevel,
71}
72
73/// Verification levels
74#[derive(Debug, Clone, PartialEq)]
75pub enum VerificationLevel {
76    /// No verification
77    None,
78    /// Basic verification
79    Basic,
80    /// Standard verification
81    Standard,
82    /// Full verification
83    Full,
84}
85
86/// Platform-specific compiler
87#[derive(Debug, Clone)]
88pub struct PlatformCompiler {
89    /// Platform
90    pub platform: QuantumPlatform,
91    /// Compiler version
92    pub version: String,
93    /// Supported features
94    pub supported_features: Vec<String>,
95}
96
97/// Optimization pass
98#[derive(Debug, Clone)]
99pub struct OptimizationPass {
100    /// Pass name
101    pub name: String,
102    /// Pass priority
103    pub priority: i32,
104    /// Pass enabled
105    pub enabled: bool,
106}
107
108/// Compilation cache
109#[derive(Debug)]
110pub struct CompilationCache {
111    /// Cache entries
112    pub entries: HashMap<String, CacheEntry>,
113    /// Cache configuration
114    pub config: CacheConfig,
115    /// Cache statistics
116    pub statistics: CacheStatistics,
117}
118
119/// Cache entry
120#[derive(Debug, Clone)]
121pub struct CacheEntry {
122    /// Compiled data
123    pub data: Vec<u8>,
124    /// Entry timestamp
125    pub timestamp: Instant,
126    /// Access count
127    pub access_count: u64,
128}
129
130/// Cache configuration
131#[derive(Debug, Clone)]
132pub struct CacheConfig {
133    /// Maximum entries
134    pub max_entries: usize,
135    /// Entry TTL
136    pub entry_ttl: Duration,
137    /// Eviction policy
138    pub eviction_policy: EvictionPolicy,
139}
140
141/// Eviction policies
142#[derive(Debug, Clone, PartialEq)]
143pub enum EvictionPolicy {
144    /// Least recently used
145    LRU,
146    /// Least frequently used
147    LFU,
148    /// FIFO
149    FIFO,
150    /// Random
151    Random,
152}
153
154/// Cache statistics
155#[derive(Debug, Clone)]
156pub struct CacheStatistics {
157    /// Cache hits
158    pub hits: u64,
159    /// Cache misses
160    pub misses: u64,
161    /// Hit rate
162    pub hit_rate: f64,
163    /// Current cache size
164    pub cache_size: usize,
165}
166
167/// Compilation result
168#[derive(Debug, Clone)]
169pub struct CompilationResult {
170    /// Target platform
171    pub platform: QuantumPlatform,
172    /// Compiled representation
173    pub compiled_representation: CompiledRepresentation,
174    /// Compilation metadata
175    pub metadata: CompilationMetadata,
176    /// Resource requirements
177    pub resource_requirements: CompiledResourceRequirements,
178    /// Performance predictions
179    pub performance_predictions: PerformancePredictions,
180}
181
182/// Compiled representation
183#[derive(Debug, Clone)]
184pub enum CompiledRepresentation {
185    /// Native platform format
186    Native(Vec<u8>),
187    /// Intermediate representation
188    IR(String),
189    /// Hybrid representation
190    Hybrid { native: Vec<u8>, ir: String },
191}
192
193/// Compilation metadata
194#[derive(Debug, Clone)]
195pub struct CompilationMetadata {
196    /// Compilation timestamp
197    pub timestamp: Instant,
198    /// Compilation time
199    pub compilation_time: Duration,
200    /// Compiler version
201    pub compiler_version: String,
202    /// Optimization level
203    pub optimization_level: OptimizationLevel,
204    /// Passes applied
205    pub passes_applied: Vec<String>,
206}
207
208/// Compiled resource requirements
209#[derive(Debug, Clone)]
210pub struct CompiledResourceRequirements {
211    /// Qubits required
212    pub qubits_required: usize,
213    /// Estimated execution time
214    pub estimated_execution_time: Duration,
215    /// Memory requirements
216    pub memory_requirements: usize,
217    /// Classical compute requirements
218    pub classical_compute: ClassicalComputeRequirements,
219}
220
221/// Classical compute requirements
222#[derive(Debug, Clone)]
223pub struct ClassicalComputeRequirements {
224    /// CPU cores
225    pub cpu_cores: usize,
226    /// Memory in MB
227    pub memory_mb: usize,
228    /// Disk space in MB
229    pub disk_space_mb: usize,
230    /// Network bandwidth in Mbps
231    pub network_bandwidth: f64,
232}
233
234/// Performance predictions
235#[derive(Debug, Clone)]
236pub struct PerformancePredictions {
237    /// Success probability
238    pub success_probability: f64,
239    /// Expected solution quality
240    pub expected_quality: f64,
241    /// Time to solution
242    pub time_to_solution: Duration,
243    /// Cost estimate
244    pub cost_estimate: f64,
245    /// Confidence intervals
246    pub confidence_intervals: ConfidenceIntervals,
247}
248
249/// Confidence intervals
250#[derive(Debug, Clone)]
251pub struct ConfidenceIntervals {
252    /// Success probability interval
253    pub success_probability: (f64, f64),
254    /// Quality interval
255    pub quality: (f64, f64),
256    /// Time interval
257    pub time: (Duration, Duration),
258    /// Cost interval
259    pub cost: (f64, f64),
260}