diff --git a/CHANGELOG.md b/CHANGELOG.md index 12f94da6b3..94c0678c3d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,9 @@ The format is based on [Keep a Changelog]. ## [UNRELEASED] +### Fixed +- Fixed a bug in drawing conditional gates with matplotlib circuit drawer. + ### Removed - Removed `DeviceSpecification` in favor of `PulseChannelSpec`. (\#3033) diff --git a/qiskit/visualization/matplotlib.py b/qiskit/visualization/matplotlib.py index 57b940ab53..f4ab91221d 100644 --- a/qiskit/visualization/matplotlib.py +++ b/qiskit/visualization/matplotlib.py @@ -727,7 +727,7 @@ class MatplotlibDrawer: ii in self._creg_dict] mask = 0 for index, cbit in enumerate(self._creg): - if cbit.reg == op.condition[0]: + if cbit.register == op.condition[0]: mask |= (1 << index) val = op.condition[1] # cbit list to consider diff --git a/test/python/visualization/references/matplotlib_conditional_ref.png b/test/python/visualization/references/matplotlib_conditional_ref.png new file mode 100644 index 0000000000..1ee4667d48 Binary files /dev/null and b/test/python/visualization/references/matplotlib_conditional_ref.png differ diff --git a/test/python/visualization/test_circuit_matplotlib_drawer.py b/test/python/visualization/test_circuit_matplotlib_drawer.py index 7d65ec9403..dc65a202b8 100644 --- a/test/python/visualization/test_circuit_matplotlib_drawer.py +++ b/test/python/visualization/test_circuit_matplotlib_drawer.py @@ -144,3 +144,29 @@ class TestMatplotlibDrawer(QiskitVisualizationTestCase): 'visualization/references/matplotlib_long_name_ref.png') self.assertImagesAreEqual(ref_filename, long_name_filename) + + @unittest.skipIf(not visualization.HAS_MATPLOTLIB, + 'matplotlib not available.') + @unittest.skip('Test is unreliable on some platforms') + @unittest.skipIf(os.name == 'nt', 'Rendered image differs on windows') + def test_conditional(self): + """Test that circuits with conditionals draw correctly + """ + qr = QuantumRegister(2, 'q') + cr = ClassicalRegister(2, 'c') + circuit = QuantumCircuit(qr, cr) + + # check gates are shifted over accordingly + circuit.h(qr) + circuit.measure(qr, cr) + circuit.h(qr[0]).c_if(cr, 2) + + conditional_filename = self._get_resource_path('current_conditional_matplotlib_ref.png') + visualization.circuit_drawer(circuit, output='mpl', + filename=conditional_filename) + self.addCleanup(os.remove, conditional_filename) + + ref_filename = self._get_resource_path( + 'visualization/references/matplotlib_conditional_ref.png') + + self.assertImagesAreEqual(ref_filename, conditional_filename)