mcx/
mcx.rs

1// SPDX-FileCopyrightText: 2024 Evandro Chagas Ribeiro da Rosa <evandro@quantuloop.com>
2//
3// SPDX-License-Identifier: Apache-2.0
4
5use ket::prelude::*;
6
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}