Skip to content

Commit bce1b79

Browse files
feat: support barrier (#275)
* feat: support barrier * clean up comments * test empty circuit with barrier --------- Co-authored-by: Cody Wang <speller26@gmail.com>
1 parent 20131af commit bce1b79

File tree

2 files changed

+56
-5
lines changed

2 files changed

+56
-5
lines changed

qiskit_braket_provider/providers/adapter.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -990,7 +990,8 @@ def _translate_to_braket(
990990
clbit = circuit.find_bit(circuit_instruction.clbits[0]).index
991991
measured_qubits[clbit] = qubit_index
992992
case "barrier":
993-
warnings.warn("The Qiskit circuit contains barrier instructions that are ignored.")
993+
qubit_indices = [qubit_labels[circuit.find_bit(qubit).index] for qubit in qubits]
994+
braket_circuit.barrier(target=qubit_indices if qubit_indices else None)
994995
case "reset":
995996
raise NotImplementedError(
996997
"reset operation not supported by qiskit to braket adapter"

tests/providers/test_adapter.py

Lines changed: 54 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -579,10 +579,50 @@ def test_barrier(self):
579579
qiskit_circuit.barrier()
580580
qiskit_circuit.x(1)
581581

582-
with pytest.warns(UserWarning, match="contains barrier instructions"):
583-
braket_circuit = to_braket(qiskit_circuit)
582+
braket_circuit = to_braket(qiskit_circuit)
583+
expected_braket_circuit = Circuit().x(0).barrier([0, 1]).x(1)
584+
self.assertEqual(braket_circuit, expected_braket_circuit)
584585

585-
expected_braket_circuit = Circuit().x(0).x(1)
586+
def test_barrier_with_qubits(self):
587+
"""Tests conversion with barrier on specific qubits."""
588+
qiskit_circuit = QuantumCircuit(3)
589+
qiskit_circuit.x(0)
590+
qiskit_circuit.barrier([0, 1])
591+
qiskit_circuit.x(2)
592+
593+
braket_circuit = to_braket(qiskit_circuit)
594+
expected_braket_circuit = Circuit().x(0).barrier([0, 1]).x(2)
595+
self.assertEqual(braket_circuit, expected_braket_circuit)
596+
597+
def test_multiple_barriers(self):
598+
"""Tests conversion with multiple barriers."""
599+
qiskit_circuit = QuantumCircuit(2)
600+
qiskit_circuit.h(0)
601+
qiskit_circuit.barrier()
602+
qiskit_circuit.x(1)
603+
qiskit_circuit.barrier([0])
604+
qiskit_circuit.y(0)
605+
braket_circuit = to_braket(qiskit_circuit)
606+
607+
barriers = [
608+
instr for instr in braket_circuit.instructions if instr.operator.name == "Barrier"
609+
]
610+
self.assertEqual(len(barriers), 2)
611+
612+
barrier_targets = [set(instr.target) for instr in barriers]
613+
self.assertIn({0, 1}, barrier_targets) # Global barrier
614+
self.assertIn({0}, barrier_targets) # Single qubit barrier
615+
616+
def test_barrier_single_qubit(self):
617+
"""Tests conversion with barrier on single qubit."""
618+
qiskit_circuit = QuantumCircuit(3)
619+
qiskit_circuit.h(0)
620+
qiskit_circuit.barrier([1])
621+
qiskit_circuit.x(2)
622+
623+
braket_circuit = to_braket(qiskit_circuit)
624+
625+
expected_braket_circuit = Circuit().h(0).barrier([1]).x(2)
586626

587627
self.assertEqual(braket_circuit, expected_braket_circuit)
588628

@@ -717,6 +757,7 @@ def test_measure_all(self):
717757
.cnot(0, 1)
718758
.cnot(1, 2)
719759
.cnot(2, 3)
760+
.barrier([0, 1, 2, 3])
720761
.measure(0)
721762
.measure(1)
722763
.measure(2)
@@ -1067,7 +1108,9 @@ def test_all_braket_noises_converted_simulated(self):
10671108
res_orig = LocalSimulator("braket_dm").run(qc, shots=0).result().values[0]
10681109
res_conv = LocalSimulator("braket_dm").run(bqc, shots=0).result().values[0]
10691110

1070-
assert len(bqc.instructions) == len(qc.instructions)
1111+
# The converted circuit will have one more instruction (barrier) due to measure_all()
1112+
# adding a barrier before measurements in Qiskit
1113+
assert len(bqc.instructions) == len(qc.instructions) + 1
10711114
assert np.all(np.isclose(res_orig, res_conv))
10721115

10731116
def test_kraus_braket_bit_ordering(self):
@@ -1611,3 +1654,10 @@ def test_missing_qubit_in_properties_handled_gracefully(self):
16111654

16121655
# Verify the target still works with remaining qubits
16131656
self.assertEqual(target.num_qubits, len(MOCK_RIGETTI_TOPOLOGY_GRAPH.nodes))
1657+
1658+
def test_empty_circuit_with_barrier(self):
1659+
"""Test edge case: empty Qiskit circuit with global barrier."""
1660+
circuit = QuantumCircuit(0)
1661+
circuit.barrier()
1662+
braket_circuit = to_braket(circuit)
1663+
self.assertEqual(len(braket_circuit.instructions), 0)

0 commit comments

Comments
 (0)