From fe2df8bcc0f35c405d31d6acc07c82aa858f2e36 Mon Sep 17 00:00:00 2001 From: Leon Camus Date: Thu, 14 Jul 2022 20:39:04 +0200 Subject: [PATCH] feat: Add example --- examples/bernstein-vazirani.rs | 43 ++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 examples/bernstein-vazirani.rs diff --git a/examples/bernstein-vazirani.rs b/examples/bernstein-vazirani.rs new file mode 100644 index 0000000..99688b7 --- /dev/null +++ b/examples/bernstein-vazirani.rs @@ -0,0 +1,43 @@ +use qukit::api::derive::{Algorithm, controlled_pauli_x, hadamard, measurement_z, pauli_z}; + +fn main() { + let hidden = Vec::from([ + true, true, false, true, false, + ]); + let mut algorithm = Algorithm::new(|gate_builder| { + let qbits = (0..hidden.len()).map(|_| gate_builder.qbit()).collect::>(); + let bits = (0..hidden.len()).map(|_| gate_builder.bit()).collect::>(); + let target = gate_builder.qbit(); + + hadamard(target); + pauli_z(target); + + for qbit in qbits.iter() { + hadamard(*qbit); + } + + for idx in 0..qbits.len() { + if *hidden.get(idx).unwrap() { + controlled_pauli_x(*qbits.get(idx).unwrap(), target); + } + } + + for qbit in qbits.iter() { + hadamard(*qbit); + } + hadamard(target); + + for idx in 0..qbits.len() { + measurement_z(*qbits.get(idx).unwrap(), *bits.get(idx).unwrap()); + } + + gate_builder + }); + + let (quantum_register, classical_register) = algorithm.run(); + + println!("{}", quantum_register); + for (hidden, measured) in hidden.iter().zip(classical_register.state().iter()) { + assert_eq!(*hidden, *measured); + } +}