Skip to main content

quantrs2_core/hardware_compilation/
neutralatomoptimizer_traits.rs

1//! # NeutralAtomOptimizer - Trait Implementations
2//!
3//! This module contains trait implementations for `NeutralAtomOptimizer`.
4//!
5//! ## Implemented Traits
6//!
7//! - `PlatformOptimizer`
8//!
9//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
10
11use crate::{
12    error::{QuantRS2Error, QuantRS2Result},
13    gate::GateOp,
14    matrix_ops::DenseMatrix,
15    pulse::PulseSequence,
16    qubit::QubitId,
17    synthesis::decompose_two_qubit_kak,
18};
19
20use super::functions::PlatformOptimizer;
21use super::types::{
22    CompiledGate, ErrorModel, HardwareCompilationConfig, NeutralAtomOptimizer, OptimizationMetrics,
23    OptimizedSequence, PlatformConstraints, TimingConstraints,
24};
25use std::collections::HashMap;
26use std::time::Duration;
27
28impl PlatformOptimizer for NeutralAtomOptimizer {
29    fn optimize_sequence(
30        &self,
31        gates: &[CompiledGate],
32        _config: &HardwareCompilationConfig,
33    ) -> QuantRS2Result<OptimizedSequence> {
34        let optimized_gates = gates.to_vec();
35        let total_fidelity = self.estimate_fidelity(&optimized_gates);
36        let total_time = optimized_gates.iter().map(|g| g.duration).sum();
37        Ok(OptimizedSequence {
38            gates: optimized_gates,
39            total_fidelity,
40            total_time,
41            metrics: OptimizationMetrics {
42                original_gate_count: gates.len(),
43                optimized_gate_count: gates.len(),
44                gate_count_reduction: 0.0,
45                original_depth: gates.len(),
46                optimized_depth: gates.len(),
47                depth_reduction: 0.0,
48                fidelity_improvement: total_fidelity,
49                compilation_time: Duration::from_millis(1),
50            },
51        })
52    }
53    fn estimate_fidelity(&self, sequence: &[CompiledGate]) -> f64 {
54        sequence.iter().map(|g| g.fidelity).product()
55    }
56    fn get_constraints(&self) -> PlatformConstraints {
57        PlatformConstraints {
58            max_qubits: 256,
59            gate_limitations: vec![],
60            timing_constraints: TimingConstraints {
61                min_gate_separation: Duration::from_micros(1),
62                max_parallel_ops: 20,
63                qubit_timing: HashMap::new(),
64            },
65            error_model: ErrorModel {
66                single_qubit_errors: HashMap::new(),
67                two_qubit_errors: HashMap::new(),
68                readout_errors: HashMap::new(),
69                idle_decay_rates: HashMap::new(),
70            },
71        }
72    }
73}