diff --git a/circuit_knitting/utils/transforms.py b/circuit_knitting/utils/transforms.py index 2849d093e..68579da24 100644 --- a/circuit_knitting/utils/transforms.py +++ b/circuit_knitting/utils/transforms.py @@ -172,6 +172,8 @@ def _partition_labels_from_circuit( # Determine which qubit wires are idle/unused idle_wires = set(range(circuit.num_qubits)) for instruction in circuit.data: + if instruction.operation.name == "barrier": + continue for q1 in instruction.qubits: q1_id = circuit.find_bit(q1).index idle_wires.discard(q1_id) diff --git a/test/utils/test_transforms.py b/test/utils/test_transforms.py index 181a7b27f..d082fc95c 100644 --- a/test/utils/test_transforms.py +++ b/test/utils/test_transforms.py @@ -262,6 +262,48 @@ def test_separate_circuit(self): [("A", 0), ("B", 0), ("C", 0)], separated_circuits.qubit_map ) + with self.subTest("barriers are ignored"): + qreg = QuantumRegister(3) + circuit = QuantumCircuit(qreg) + circuit.h(0) + circuit.x(0) + circuit.barrier(0) + circuit.x(1) + circuit.h(1) + circuit.y(2) + circuit.h(2) + + separated_circuits = separate_circuit(circuit, partition_labels="ABC") + + compare1 = QuantumCircuit(1) + compare1.h(0) + compare1.x(0) + compare2 = QuantumCircuit(1) + compare2.x(0) + compare2.h(0) + compare3 = QuantumCircuit(1) + compare3.y(0) + compare3.h(0) + + for i, operation in enumerate(compare1.data): + self.assertEqual( + operation.operation.name, + separated_circuits.subcircuits["A"].data[i].operation.name, + ) + for i, operation in enumerate(compare2.data): + self.assertEqual( + operation.operation.name, + separated_circuits.subcircuits["B"].data[i].operation.name, + ) + for i, operation in enumerate(compare3.data): + self.assertEqual( + operation.operation.name, + separated_circuits.subcircuits["C"].data[i].operation.name, + ) + self.assertEqual( + [("A", 0), ("B", 0), ("C", 0)], separated_circuits.qubit_map + ) + with self.subTest("Test bit mapping with partition labels"): # Prepare a HWEA and add some measurements to clbits in a random order circuit = prepare_hwea()