pub struct OptimizationReport {
pub initial_metrics: CircuitMetrics,
pub final_metrics: CircuitMetrics,
pub applied_passes: Vec<String>,
}
Expand description
Optimization report
Fields§
§initial_metrics: CircuitMetrics
Initial circuit metrics
final_metrics: CircuitMetrics
Final circuit metrics
applied_passes: Vec<String>
List of applied optimization passes
Implementations§
Source§impl OptimizationReport
impl OptimizationReport
Sourcepub fn improvement(&self) -> MetricImprovement
pub fn improvement(&self) -> MetricImprovement
Get improvement metrics
Examples found in repository?
examples/optimization_demo.rs (line 85)
62fn demo_optimization_levels(circuit: &Circuit<4>) {
63 println!("Demo 1: Optimization Levels");
64 println!("----------------------------");
65
66 let levels = [
67 OptimizationLevel::None,
68 OptimizationLevel::Light,
69 OptimizationLevel::Medium,
70 OptimizationLevel::Heavy,
71 ];
72
73 for level in levels {
74 println!("\nOptimization Level: {:?}", level);
75
76 let start = Instant::now();
77 let mut optimizer = CircuitOptimizer2::<4>::with_level(level);
78
79 match optimizer.optimize(circuit) {
80 Ok(report) => {
81 let duration = start.elapsed();
82 println!(" Optimization time: {:?}", duration);
83 println!(" Initial gates: {}", report.initial_metrics.gate_count);
84 println!(" Final gates: {}", report.final_metrics.gate_count);
85 println!(" Gate reduction: {:.1}%", report.improvement().gate_count);
86 println!(" Applied passes: {:?}", report.applied_passes);
87 }
88 Err(e) => {
89 println!(" Optimization failed: {:?}", e);
90 }
91 }
92 }
93 println!();
94}
95
96fn demo_hardware_optimization(circuit: &Circuit<4>) {
97 println!("\nDemo 2: Hardware-Specific Optimization");
98 println!("--------------------------------------");
99
100 let backends = ["ibm", "google", "aws"];
101
102 for backend in backends {
103 println!("\nBackend: {}", backend);
104
105 let mut optimizer = CircuitOptimizer2::<4>::for_hardware(backend);
106
107 match optimizer.optimize(circuit) {
108 Ok(report) => {
109 println!(
110 " Initial cost: {:.2}",
111 report.initial_metrics.execution_time
112 );
113 println!(" Final cost: {:.2}", report.final_metrics.execution_time);
114 println!(
115 " Time reduction: {:.1}%",
116 report.improvement().execution_time
117 );
118 println!(
119 " Error reduction: {:.1}%",
120 report.improvement().total_error
121 );
122 }
123 Err(e) => {
124 println!(" Optimization failed: {:?}", e);
125 }
126 }
127 }
128 println!();
129}
Sourcepub fn print_summary(&self)
pub fn print_summary(&self)
Print a summary of the optimization
Examples found in repository?
examples/optimization_demo.rs (line 160)
131fn demo_custom_optimization(circuit: &Circuit<4>) {
132 println!("\nDemo 3: Custom Optimization Pipeline");
133 println!("------------------------------------");
134
135 // Create a custom pass manager
136 let mut pass_manager = PassManager::new();
137
138 // Configure with specific passes
139 let config = PassConfig {
140 max_iterations: 5,
141 aggressive: true,
142 level: OptimizationLevel::Custom,
143 ..Default::default()
144 };
145 pass_manager.configure(config.clone());
146
147 // Add specific passes in a custom order
148 pass_manager.add_pass(Box::new(GateCancellation::new(true)));
149 pass_manager.add_pass(Box::new(RotationMerging::new(1e-10)));
150 pass_manager.add_pass(Box::new(GateCommutation::new(10)));
151 pass_manager.add_pass(Box::new(TemplateMatching::new()));
152
153 // Create optimizer with custom configuration
154 let mut optimizer = CircuitOptimizer2::<4>::new();
155 optimizer.configure(config);
156
157 match optimizer.optimize(circuit) {
158 Ok(report) => {
159 println!("Custom optimization results:");
160 report.print_summary();
161 }
162 Err(e) => {
163 println!("Custom optimization failed: {:?}", e);
164 }
165 }
166}
Sourcepub fn detailed_report(&self) -> String
pub fn detailed_report(&self) -> String
Generate a detailed report as string
Examples found in repository?
examples/optimization_demo.rs (line 267)
219fn benchmark_optimization_passes(circuit: &Circuit<4>) {
220 println!("\nDemo 5: Pass Benchmarking");
221 println!("-------------------------");
222
223 // Benchmark individual passes
224 let passes: Vec<(&str, Box<dyn OptimizationPass>)> = vec![
225 ("Gate Cancellation", Box::new(GateCancellation::new(false))),
226 ("Rotation Merging", Box::new(RotationMerging::new(1e-10))),
227 ("Gate Commutation", Box::new(GateCommutation::new(5))),
228 ("Template Matching", Box::new(TemplateMatching::new())),
229 (
230 "Two-Qubit Opt",
231 Box::new(TwoQubitOptimization::new(false, true)),
232 ),
233 ];
234
235 let cost_model = AbstractCostModel::default();
236
237 for (name, pass) in passes {
238 let start = Instant::now();
239
240 match pass.apply(circuit, &cost_model) {
241 Ok(_) => {
242 let duration = start.elapsed();
243 println!(" {}: {:?}", name, duration);
244 }
245 Err(e) => {
246 println!(" {} failed: {:?}", name, e);
247 }
248 }
249 }
250
251 // Benchmark full optimization
252 println!("\nFull Optimization Benchmark:");
253 let start = Instant::now();
254 let mut optimizer = CircuitOptimizer2::<4>::with_level(OptimizationLevel::Heavy);
255
256 match optimizer.optimize(circuit) {
257 Ok(report) => {
258 let duration = start.elapsed();
259 println!(" Total time: {:?}", duration);
260 println!(
261 " Gates reduced: {} → {}",
262 report.initial_metrics.gate_count, report.final_metrics.gate_count
263 );
264
265 // Show detailed report
266 println!("\nDetailed Report:");
267 println!("{}", report.detailed_report());
268 }
269 Err(e) => {
270 println!(" Benchmark failed: {:?}", e);
271 }
272 }
273}
Trait Implementations§
Auto Trait Implementations§
impl Freeze for OptimizationReport
impl RefUnwindSafe for OptimizationReport
impl Send for OptimizationReport
impl Sync for OptimizationReport
impl Unpin for OptimizationReport
impl UnwindSafe for OptimizationReport
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self
from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self
is actually part of its subset T
(and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset
but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self
to the equivalent element of its superset.