pub fn ctrl<F>(
process: &mut Process,
control: &[LogicalQubit],
f: F,
) -> Result<()>Examples found in repository?
examples/mcx.rs (lines 49-51)
7fn main() -> Result<(), KetError> {
8 set_log_level(4);
9
10 let config = Configuration {
11 num_qubits: 12,
12 qpu: Some(QPU::new(
13 // 0--1--2--3
14 // | | | |
15 // 4--5--6--7
16 // | | | |
17 // 8--9--A--B
18 Some(vec![
19 (0, 4),
20 (0, 1),
21 (1, 2),
22 (1, 5),
23 (2, 3),
24 (2, 6),
25 (3, 7),
26 (4, 8),
27 (4, 5),
28 (5, 9),
29 (5, 6),
30 (6, 10),
31 (6, 7),
32 (7, 11),
33 (8, 9),
34 (9, 10),
35 (10, 11),
36 ]),
37 12,
38 Default::default(),
39 Default::default(),
40 )),
41 ..Default::default()
42 };
43
44 let mut process = Process::new(config);
45
46 let size = 6;
47
48 let qubits: Vec<_> = (0..size).map(|_| process.alloc().unwrap()).collect();
49 ctrl(&mut process, &qubits[1..], |process| {
50 process.gate(QuantumGate::PauliZ, qubits[0])
51 })?;
52
53 let _ = process.sample(&qubits, 1024)?;
54 process.transpile();
55
56 println!("Instructions:");
57 for line in process.instructions() {
58 println!("\t{:?}", line);
59 }
60
61 println!("ISA Instructions:");
62 if let Some(isa) = process.isa_instructions() {
63 for line in isa {
64 println!("\t{:?}", line);
65 }
66 }
67
68 Ok(())
69}More examples
examples/grover.rs (lines 50-52)
9fn main() -> Result<(), KetError> {
10 set_log_level(3);
11
12 let config = Configuration {
13 num_qubits: 12,
14 qpu: Some(QPU::new(
15 // 0--1--2--3
16 // | | | |
17 // 4--5--6--7
18 // | | | |
19 // 8--9--A--B
20 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}