1use std::f64::consts::FRAC_PI_4;
6
7use ket::prelude::*;
8
9fn main() -> Result<(), KetError> {
10 set_log_level(3);
11
12 let config = Configuration {
13 num_qubits: 12,
14 qpu: Some(QPU::new(
15 Some(ket::ex_arch::GRID12.to_vec()),
21 12,
22 U2Gates::RzSx,
23 U4Gate::CZ,
24 )),
25 ..Default::default()
26 };
27
28 let mut process = Process::new(config);
29
30 let size = 8;
31
32 let qubits: Vec<_> = (0..size).map(|_| process.alloc().unwrap()).collect();
33
34 for qubit in &qubits {
35 process.gate(QuantumGate::Hadamard, *qubit)?;
36 }
37
38 let steps = ((FRAC_PI_4) * f64::sqrt((1 << size) as f64)) as i64;
39
40 for _ in 0..steps {
41 around(
42 &mut process,
43 |process| {
44 for qubit in &qubits {
45 process.gate(QuantumGate::PauliX, *qubit)?;
46 }
47 Ok(())
48 },
49 |process| {
50 ctrl(process, &qubits[1..], |process| {
51 process.gate(QuantumGate::PauliZ, qubits[0])
52 })
53 },
54 )?;
55
56 around(
57 &mut process,
58 |process| {
59 for qubit in &qubits {
60 process.gate(QuantumGate::Hadamard, *qubit)?;
61 }
62
63 for qubit in &qubits {
64 process.gate(QuantumGate::PauliX, *qubit)?;
65 }
66 Ok(())
67 },
68 |process| {
69 ctrl(process, &qubits[1..], |process| {
70 process.gate(QuantumGate::PauliZ, qubits[0])
71 })
72 },
73 )?;
74 }
75
76 let _ = process.sample(&qubits, 1024)?;
77 process.transpile();
78
79 println!("{:#?}", process.metadata());
80
81 Ok(())
82}