1use std::collections::{HashMap, HashSet};
12use std::time::Duration;
13
14use quantrs2_circuit::prelude::*;
15use serde::{Deserialize, Serialize};
16
17use crate::translation::HardwareBackend;
18
19mod analysis;
20mod engine;
21#[cfg(test)]
22mod tests;
23
24pub use engine::CircuitMigrationEngine;
25
26#[derive(Debug, Clone, Serialize, Deserialize)]
28pub struct MigrationConfig {
29 pub source_platform: HardwareBackend,
31 pub target_platform: HardwareBackend,
33 pub strategy: MigrationStrategy,
35 pub optimization: MigrationOptimizationConfig,
37 pub mapping_config: MigrationMappingConfig,
39 pub translation_config: MigrationTranslationConfig,
41 pub performance_requirements: MigrationPerformanceRequirements,
43 pub validation_config: MigrationValidationConfig,
45}
46
47#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
49pub enum MigrationStrategy {
50 Direct,
52 Optimized,
54 FidelityPreserving,
56 TimeOptimized,
58 ResourceOptimized,
60 Custom {
62 fidelity_weight: f64,
63 time_weight: f64,
64 resource_weight: f64,
65 },
66}
67
68#[derive(Debug, Clone, Serialize, Deserialize)]
70pub struct MigrationOptimizationConfig {
71 pub enable_optimization: bool,
73 pub optimization_passes: Vec<OptimizationPass>,
75 pub max_iterations: usize,
77 pub convergence_threshold: f64,
79 pub enable_scirs2_optimization: bool,
81 pub multi_objective_weights: HashMap<String, f64>,
83}
84
85#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
87pub enum OptimizationPass {
88 GateSetReduction,
90 DepthMinimization,
92 LayoutOptimization,
94 SchedulingOptimization,
96 ErrorMitigation,
98 Parallelization,
100 ResourceOptimization,
102}
103
104#[derive(Debug, Clone, Serialize, Deserialize)]
106pub struct MigrationMappingConfig {
107 pub strategy: MappingStrategy,
109 pub consider_connectivity: bool,
111 pub optimize_for_topology: bool,
113 pub max_swap_overhead: f64,
115 pub enable_adaptive_mapping: bool,
117 pub scirs2_config_placeholder: bool,
120}
121
122#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
124pub enum MappingStrategy {
125 PreserveIndices,
127 HighestFidelity,
129 MinimizeSwaps,
131 CircuitAware,
133 GraphBased,
135 SciRS2Optimized,
137}
138
139#[derive(Debug, Clone, Serialize, Deserialize)]
141pub struct MigrationTranslationConfig {
142 pub gate_strategy: GateTranslationStrategy,
144 pub allow_decomposition: bool,
146 pub max_decomposition_depth: usize,
148 pub preserve_semantics: bool,
150 pub target_gate_set: Option<HashSet<String>>,
152 pub custom_mappings: HashMap<String, Vec<String>>,
154}
155
156#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
158pub enum GateTranslationStrategy {
159 PreferNative,
161 MinimizeGates,
163 PreserveFidelity,
165 MinimizeDepth,
167 CustomPriority(Vec<String>),
169}
170
171#[derive(Debug, Clone, Serialize, Deserialize)]
173pub struct MigrationPerformanceRequirements {
174 pub min_fidelity: Option<f64>,
176 pub max_execution_time: Option<Duration>,
178 pub max_depth_increase: Option<f64>,
180 pub max_gate_increase: Option<f64>,
182 pub accuracy_level: AccuracyLevel,
184}
185
186#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
188pub enum AccuracyLevel {
189 BestEffort,
191 Statistical,
193 QuantumAdvantage,
195 Exact,
197}
198
199#[derive(Debug, Clone, Serialize, Deserialize)]
201pub struct MigrationValidationConfig {
202 pub enable_validation: bool,
204 pub validation_methods: Vec<ValidationMethod>,
206 pub confidence_level: f64,
208 pub validation_runs: usize,
210 pub enable_cross_validation: bool,
212}
213
214#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
216pub enum ValidationMethod {
217 FunctionalEquivalence,
219 StatisticalComparison,
221 FidelityMeasurement,
223 ProcessTomography,
225 BenchmarkTesting,
227}
228
229#[derive(Debug, Clone)]
231pub struct MigrationResult<const N: usize> {
232 pub migrated_circuit: Circuit<N>,
234 pub metrics: MigrationMetrics,
236 pub transformations: Vec<AppliedTransformation>,
238 pub validation: Option<ValidationResult>,
240 pub warnings: Vec<MigrationWarning>,
242 pub success: bool,
244}
245
246#[derive(Debug, Clone, Serialize, Deserialize)]
248pub struct MigrationMetrics {
249 pub original: CircuitMetrics,
251 pub migrated: CircuitMetrics,
253 pub migration_stats: MigrationStatistics,
255 pub performance_comparison: PerformanceComparison,
257}
258
259#[derive(Debug, Clone, Serialize, Deserialize)]
261pub struct CircuitMetrics {
262 pub qubit_count: usize,
264 pub depth: usize,
266 pub gate_count: usize,
268 pub gate_counts: HashMap<String, usize>,
270 pub estimated_fidelity: f64,
272 pub estimated_execution_time: Duration,
274 pub resource_requirements: ResourceMetrics,
276}
277
278#[derive(Debug, Clone, Serialize, Deserialize)]
280pub struct ResourceMetrics {
281 pub memory_mb: f64,
283 pub cpu_time: Duration,
285 pub qpu_time: Duration,
287 pub network_bandwidth: Option<f64>,
289}
290
291#[derive(Debug, Clone, Serialize, Deserialize)]
293pub struct MigrationStatistics {
294 pub migration_time: Duration,
296 pub transformations_applied: usize,
298 pub optimization_iterations: usize,
300 pub mapping_overhead: f64,
302 pub translation_efficiency: f64,
304}
305
306#[derive(Debug, Clone, Serialize, Deserialize)]
308pub struct PerformanceComparison {
309 pub fidelity_change: f64,
311 pub execution_time_change: f64,
313 pub depth_change: f64,
315 pub gate_count_change: f64,
317 pub resource_change: f64,
319 pub quality_score: f64,
321}
322
323#[derive(Debug, Clone, Serialize, Deserialize)]
325pub struct AppliedTransformation {
326 pub transformation_type: TransformationType,
328 pub description: String,
330 pub impact: TransformationImpact,
332 pub stage: MigrationStage,
334}
335
336#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
338pub enum TransformationType {
339 GateTranslation,
340 QubitMapping,
341 CircuitOptimization,
342 ErrorMitigation,
343 Decomposition,
344 Parallelization,
345 Scheduling,
346}
347
348#[derive(Debug, Clone, Serialize, Deserialize)]
350pub struct TransformationImpact {
351 pub fidelity_impact: f64,
353 pub time_impact: f64,
355 pub resource_impact: f64,
357 pub confidence: f64,
359}
360
361#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
363pub enum MigrationStage {
364 Analysis,
365 Translation,
366 Mapping,
367 Optimization,
368 Validation,
369 Finalization,
370}
371
372#[derive(Debug, Clone, Serialize, Deserialize)]
374pub struct ValidationResult {
375 pub overall_success: bool,
377 pub method_results: HashMap<ValidationMethod, ValidationMethodResult>,
379 pub statistical_results: StatisticalValidationResult,
381 pub confidence_score: f64,
383}
384
385#[derive(Debug, Clone, Serialize, Deserialize)]
387pub struct ValidationMethodResult {
388 pub success: bool,
390 pub score: f64,
392 pub details: String,
394 pub p_value: Option<f64>,
396}
397
398#[derive(Debug, Clone, Serialize, Deserialize)]
400pub struct StatisticalValidationResult {
401 pub distribution_comparison: DistributionComparison,
403 pub fidelity_comparison: FidelityComparison,
405 pub error_analysis: ErrorAnalysis,
407}
408
409#[derive(Debug, Clone, Serialize, Deserialize)]
411pub struct DistributionComparison {
412 pub ks_test_p_value: f64,
414 pub chi_square_p_value: f64,
416 pub distance: f64,
418 pub similarity_score: f64,
420}
421
422#[derive(Debug, Clone, Serialize, Deserialize)]
424pub struct FidelityComparison {
425 pub original_fidelity: f64,
427 pub migrated_fidelity: f64,
429 pub fidelity_loss: f64,
431 pub significance: f64,
433}
434
435#[derive(Debug, Clone, Serialize, Deserialize)]
437pub struct ErrorAnalysis {
438 pub error_rate_comparison: f64,
440 pub error_correlation: f64,
442 pub systematic_errors: Vec<String>,
444 pub random_error_estimate: f64,
446}
447
448#[derive(Debug, Clone, Serialize, Deserialize)]
450pub struct MigrationWarning {
451 pub warning_type: WarningType,
453 pub message: String,
455 pub severity: WarningSeverity,
457 pub suggested_actions: Vec<String>,
459}
460
461#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
463pub enum WarningType {
464 FidelityLoss,
465 PerformanceDegradation,
466 UnsupportedGates,
467 TopologyMismatch,
468 ResourceLimitations,
469 ValidationFailure,
470 ApproximationUsed,
471}
472
473#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
475pub enum WarningSeverity {
476 Info,
477 Warning,
478 Error,
479 Critical,
480}
481
482impl Default for MigrationConfig {
483 fn default() -> Self {
484 Self {
485 source_platform: HardwareBackend::IBMQuantum,
486 target_platform: HardwareBackend::AmazonBraket,
487 strategy: MigrationStrategy::Optimized,
488 optimization: MigrationOptimizationConfig {
489 enable_optimization: true,
490 optimization_passes: vec![
491 OptimizationPass::GateSetReduction,
492 OptimizationPass::LayoutOptimization,
493 OptimizationPass::DepthMinimization,
494 ],
495 max_iterations: 100,
496 convergence_threshold: 1e-6,
497 enable_scirs2_optimization: true,
498 multi_objective_weights: [
499 ("fidelity".to_string(), 0.4),
500 ("time".to_string(), 0.3),
501 ("resources".to_string(), 0.3),
502 ]
503 .iter()
504 .cloned()
505 .collect(),
506 },
507 mapping_config: MigrationMappingConfig {
508 strategy: MappingStrategy::SciRS2Optimized,
509 consider_connectivity: true,
510 optimize_for_topology: true,
511 max_swap_overhead: 2.0,
512 enable_adaptive_mapping: true,
513 scirs2_config_placeholder: true,
514 },
515 translation_config: MigrationTranslationConfig {
516 gate_strategy: GateTranslationStrategy::PreferNative,
517 allow_decomposition: true,
518 max_decomposition_depth: 3,
519 preserve_semantics: true,
520 target_gate_set: None,
521 custom_mappings: HashMap::new(),
522 },
523 performance_requirements: MigrationPerformanceRequirements {
524 min_fidelity: Some(0.95),
525 max_execution_time: None,
526 max_depth_increase: Some(2.0),
527 max_gate_increase: Some(1.5),
528 accuracy_level: AccuracyLevel::Statistical,
529 },
530 validation_config: MigrationValidationConfig {
531 enable_validation: true,
532 validation_methods: vec![
533 ValidationMethod::FunctionalEquivalence,
534 ValidationMethod::StatisticalComparison,
535 ValidationMethod::FidelityMeasurement,
536 ],
537 confidence_level: 0.95,
538 validation_runs: 100,
539 enable_cross_validation: true,
540 },
541 }
542 }
543}