From 532ac9d2be6021570856e9294eae738a17518ac0 Mon Sep 17 00:00:00 2001 From: Pieter Eendebak Date: Thu, 30 Nov 2023 12:34:48 +0100 Subject: [PATCH 1/7] Improve performance of barrier() --- qiskit/circuit/quantumcircuit.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/qiskit/circuit/quantumcircuit.py b/qiskit/circuit/quantumcircuit.py index 52b709d78350..481c174ccb87 100644 --- a/qiskit/circuit/quantumcircuit.py +++ b/qiskit/circuit/quantumcircuit.py @@ -3329,7 +3329,11 @@ def barrier(self, *qargs: QubitSpecifier, label=None) -> InstructionSet: if qargs else self.qubits.copy() ) - return self.append(Barrier(len(qubits), label=label), qubits, []) + if qargs: + return self.append(Barrier(len(qubits), label=label), qubits, []) + else: + return self._append(Barrier(len(qubits), label=label), qubits, []) + def delay( self, From 9ad432783ad8f34f12d87e4ce2a26560be3d5280 Mon Sep 17 00:00:00 2001 From: Pieter Eendebak Date: Thu, 30 Nov 2023 13:07:18 +0100 Subject: [PATCH 2/7] black --- qiskit/circuit/quantumcircuit.py | 1 - 1 file changed, 1 deletion(-) diff --git a/qiskit/circuit/quantumcircuit.py b/qiskit/circuit/quantumcircuit.py index 481c174ccb87..1c91010fb44e 100644 --- a/qiskit/circuit/quantumcircuit.py +++ b/qiskit/circuit/quantumcircuit.py @@ -3333,7 +3333,6 @@ def barrier(self, *qargs: QubitSpecifier, label=None) -> InstructionSet: return self.append(Barrier(len(qubits), label=label), qubits, []) else: return self._append(Barrier(len(qubits), label=label), qubits, []) - def delay( self, From b5d602bf81f29084eb20e596fa31fd7e0ccdc7be Mon Sep 17 00:00:00 2001 From: Pieter Eendebak Date: Mon, 15 Jan 2024 09:19:42 +0100 Subject: [PATCH 3/7] fix barrier statement in context --- qiskit/circuit/quantumcircuit.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/qiskit/circuit/quantumcircuit.py b/qiskit/circuit/quantumcircuit.py index 1c91010fb44e..be6751f935b4 100644 --- a/qiskit/circuit/quantumcircuit.py +++ b/qiskit/circuit/quantumcircuit.py @@ -3323,16 +3323,14 @@ def barrier(self, *qargs: QubitSpecifier, label=None) -> InstructionSet: """ from .barrier import Barrier - qubits = ( - # This uses a `dict` not a `set` to guarantee a deterministic order to the arguments. - list({q: None for qarg in qargs for q in self.qbit_argument_conversion(qarg)}) - if qargs - else self.qubits.copy() - ) if qargs: - return self.append(Barrier(len(qubits), label=label), qubits, []) + # This uses a `dict` not a `set` to guarantee a deterministic order to the arguments. + qubits = tuple({q: None for qarg in qargs for q in self.qbit_argument_conversion(qarg)}) + return self.append(CircuitInstruction(Barrier(len(qubits), label=label), qubits, ())) else: - return self._append(Barrier(len(qubits), label=label), qubits, []) + qubits = self.qubits.copy() + return self._current_scope().append(CircuitInstruction(Barrier(len(qubits)), qubits, ())) + def delay( self, From e2c6c8366a9c4284e26541d65ecbb8aa456320e9 Mon Sep 17 00:00:00 2001 From: Pieter Eendebak Date: Mon, 15 Jan 2024 09:19:48 +0100 Subject: [PATCH 4/7] add test --- test/python/circuit/test_circuit_operations.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/test/python/circuit/test_circuit_operations.py b/test/python/circuit/test_circuit_operations.py index 7d7a930f7cec..6edbcf6481e9 100644 --- a/test/python/circuit/test_circuit_operations.py +++ b/test/python/circuit/test_circuit_operations.py @@ -550,6 +550,17 @@ def test_barrier(self): self.assertEqual(qc, expected) + def test_barrier_in_context(self): + """Test barrier statement in context, see gh-11345 """ + qc = QuantumCircuit(2, 2) + qc.h(0) + with qc.if_test((qc.clbits[0], False)): + qc.h(0) + qc.barrier() + + operation_names = [c.operation.name for c in qc] + assert 'barrier' not in operation_names + def test_measure_active(self): """Test measure_active Applies measurements only to non-idle qubits. Creates a ClassicalRegister of size equal to From b9ea8fbe96ee60bbdaf3ddc45ae187b0f5c5b6e2 Mon Sep 17 00:00:00 2001 From: Pieter Eendebak Date: Mon, 15 Jan 2024 10:04:36 +0100 Subject: [PATCH 5/7] black --- qiskit/circuit/quantumcircuit.py | 5 +++-- test/python/circuit/test_circuit_operations.py | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/qiskit/circuit/quantumcircuit.py b/qiskit/circuit/quantumcircuit.py index be6751f935b4..4a72f62f9f62 100644 --- a/qiskit/circuit/quantumcircuit.py +++ b/qiskit/circuit/quantumcircuit.py @@ -3329,8 +3329,9 @@ def barrier(self, *qargs: QubitSpecifier, label=None) -> InstructionSet: return self.append(CircuitInstruction(Barrier(len(qubits), label=label), qubits, ())) else: qubits = self.qubits.copy() - return self._current_scope().append(CircuitInstruction(Barrier(len(qubits)), qubits, ())) - + return self._current_scope().append( + CircuitInstruction(Barrier(len(qubits)), qubits, ()) + ) def delay( self, diff --git a/test/python/circuit/test_circuit_operations.py b/test/python/circuit/test_circuit_operations.py index 6edbcf6481e9..c55f7b269b7d 100644 --- a/test/python/circuit/test_circuit_operations.py +++ b/test/python/circuit/test_circuit_operations.py @@ -551,7 +551,7 @@ def test_barrier(self): self.assertEqual(qc, expected) def test_barrier_in_context(self): - """Test barrier statement in context, see gh-11345 """ + """Test barrier statement in context, see gh-11345""" qc = QuantumCircuit(2, 2) qc.h(0) with qc.if_test((qc.clbits[0], False)): @@ -559,7 +559,7 @@ def test_barrier_in_context(self): qc.barrier() operation_names = [c.operation.name for c in qc] - assert 'barrier' not in operation_names + assert "barrier" not in operation_names def test_measure_active(self): """Test measure_active From 6e837a1373aaa7899993598fa40fbdff8060cc1b Mon Sep 17 00:00:00 2001 From: Pieter Eendebak Date: Mon, 15 Jan 2024 11:29:36 +0100 Subject: [PATCH 6/7] fix label argument --- qiskit/circuit/quantumcircuit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qiskit/circuit/quantumcircuit.py b/qiskit/circuit/quantumcircuit.py index 4a72f62f9f62..35de53960686 100644 --- a/qiskit/circuit/quantumcircuit.py +++ b/qiskit/circuit/quantumcircuit.py @@ -3330,7 +3330,7 @@ def barrier(self, *qargs: QubitSpecifier, label=None) -> InstructionSet: else: qubits = self.qubits.copy() return self._current_scope().append( - CircuitInstruction(Barrier(len(qubits)), qubits, ()) + CircuitInstruction(Barrier(len(qubits), label=label), qubits, ()) ) def delay( From ec93e577b80fc746debc29efa48065fb4ecd85cf Mon Sep 17 00:00:00 2001 From: Jake Lishman Date: Mon, 15 Jan 2024 15:19:54 +0000 Subject: [PATCH 7/7] Use `unittest` test method --- test/python/circuit/test_circuit_operations.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/python/circuit/test_circuit_operations.py b/test/python/circuit/test_circuit_operations.py index c55f7b269b7d..2dc2ed592634 100644 --- a/test/python/circuit/test_circuit_operations.py +++ b/test/python/circuit/test_circuit_operations.py @@ -559,7 +559,7 @@ def test_barrier_in_context(self): qc.barrier() operation_names = [c.operation.name for c in qc] - assert "barrier" not in operation_names + self.assertNotIn("barrier", operation_names) def test_measure_active(self): """Test measure_active