diff --git a/qiskit/circuit/quantumcircuit.py b/qiskit/circuit/quantumcircuit.py index ab0ad758efb9..1ad87a12dea7 100644 --- a/qiskit/circuit/quantumcircuit.py +++ b/qiskit/circuit/quantumcircuit.py @@ -6875,7 +6875,10 @@ def qubit_stop_time(self, *qubits: Union[Qubit, int]) -> float: if len(qubits) == len([done for done in dones.values() if done]): # all done return max(stop for stop in stops.values()) - return 0 # If there are no instructions over bits + if len(stops) > 0: # not all but some qubits has instructions + return max(stop for stop in stops.values()) + else: + return 0 # If there are no instructions over bits class _OuterCircuitScopeInterface(CircuitScopeInterface): diff --git a/releasenotes/notes/fix-incorrect-qubit-stop-time-d0e056f60a01dd52.yaml b/releasenotes/notes/fix-incorrect-qubit-stop-time-d0e056f60a01dd52.yaml new file mode 100644 index 000000000000..df84deac1e1d --- /dev/null +++ b/releasenotes/notes/fix-incorrect-qubit-stop-time-d0e056f60a01dd52.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - | + Fixed an issue where :meth:`.QuantumCircuit.qubit_stop_time` and + :meth:`.QuantumCircuit.qubit_duration` returned incorrect time (duration) + when some qubits have instructions but the others idle. + Fixed `#8729 `__. diff --git a/test/python/circuit/test_scheduled_circuit.py b/test/python/circuit/test_scheduled_circuit.py index 7ebed694a8db..c3923d511e5e 100644 --- a/test/python/circuit/test_scheduled_circuit.py +++ b/test/python/circuit/test_scheduled_circuit.py @@ -355,6 +355,7 @@ def test_per_qubit_durations_loose_constrain(self): self.assertEqual(sc.qubit_stop_time(2), 0) self.assertEqual(sc.qubit_start_time(0, 1), 300) self.assertEqual(sc.qubit_stop_time(0, 1), 1400) + self.assertEqual(sc.qubit_stop_time(0, 1, 2), 1400) qc.measure_all()