diff --git a/qiskit/visualization/circuit/matplotlib.py b/qiskit/visualization/circuit/matplotlib.py index a0d4d0ff8047..8d83fecb8969 100644 --- a/qiskit/visualization/circuit/matplotlib.py +++ b/qiskit/visualization/circuit/matplotlib.py @@ -1544,7 +1544,7 @@ def _flow_op_gate(self, node, node_data, glob_data): while end_x > 0.0: x_shift = fold_level * self._fold y_shift = fold_level * (glob_data["n_lines"] + 1) - end_x = xpos + box_width - x_shift + end_x = xpos + box_width - x_shift if self._fold > 0 else 0.0 if isinstance(node.op, IfElseOp): flow_text = " If" diff --git a/releasenotes/notes/fix-control-flow-fold-minus-one-f2af168a5313385f.yaml b/releasenotes/notes/fix-control-flow-fold-minus-one-f2af168a5313385f.yaml new file mode 100644 index 000000000000..5f8567da70e2 --- /dev/null +++ b/releasenotes/notes/fix-control-flow-fold-minus-one-f2af168a5313385f.yaml @@ -0,0 +1,8 @@ +--- +fixes: + - | + Fixed an issue with the :func:`circuit_drawer` or :meth:`QuantumCircuit.draw` + when using the ``mpl`` output option where the program would hang if the + circuit being drawn had a ControlFlow operation in it and the ``fold`` option + was set to -1 (meaning no fold). + Fixed `#12012 `__. diff --git a/test/visual/mpl/circuit/references/control_flow_fold_minus_one.png b/test/visual/mpl/circuit/references/control_flow_fold_minus_one.png new file mode 100644 index 000000000000..41dccaa03ec3 Binary files /dev/null and b/test/visual/mpl/circuit/references/control_flow_fold_minus_one.png differ diff --git a/test/visual/mpl/circuit/test_circuit_matplotlib_drawer.py b/test/visual/mpl/circuit/test_circuit_matplotlib_drawer.py index e785bdf79599..e99cb3f628d8 100644 --- a/test/visual/mpl/circuit/test_circuit_matplotlib_drawer.py +++ b/test/visual/mpl/circuit/test_circuit_matplotlib_drawer.py @@ -2228,6 +2228,27 @@ def test_control_flow_nested_layout(self): ) self.assertGreaterEqual(ratio, self.threshold) + def test_control_flow_with_fold_minus_one(self): + """Test control flow works with fold=-1. Qiskit issue #12012""" + qreg = QuantumRegister(2, "qr") + creg = ClassicalRegister(2, "cr") + circuit = QuantumCircuit(qreg, creg) + with circuit.if_test((creg[1], 1)): + circuit.h(0) + circuit.cx(0, 1) + + fname = "control_flow_fold_minus_one.png" + self.circuit_drawer(circuit, output="mpl", filename=fname, fold=-1) + + ratio = VisualTestUtilities._save_diff( + self._image_path(fname), + self._reference_path(fname), + fname, + FAILURE_DIFF_DIR, + FAILURE_PREFIX, + ) + self.assertGreaterEqual(ratio, self.threshold) + def test_annotated_operation(self): """Test AnnotatedOperations and other non-Instructions.""" circuit = QuantumCircuit(3)