diff --git a/cirq-core/cirq/circuits/circuit.py b/cirq-core/cirq/circuits/circuit.py index c1b836a1ff1..54b98377647 100644 --- a/cirq-core/cirq/circuits/circuit.py +++ b/cirq-core/cirq/circuits/circuit.py @@ -2129,7 +2129,7 @@ def earliest_available_moment( Index of the earliest matching moment. Returns `end_moment_index` if no moment on left is available. """ - if end_moment_index is None: + if end_moment_index is None or end_moment_index > len(self.moments): end_moment_index = len(self.moments) last_available = end_moment_index k = end_moment_index @@ -2148,10 +2148,7 @@ def earliest_available_moment( or not moment._control_keys_().isdisjoint(op_measurement_keys) ): return last_available - if self._can_add_op_at(k, op): - # Note: Remove the if condition after `self._device` is gone and move the method to - # `cirq.AbstractDevice`. - last_available = k + last_available = k return last_available def _can_add_op_at(self, moment_index: int, operation: cirq.Operation) -> bool: diff --git a/cirq-core/cirq/circuits/circuit_test.py b/cirq-core/cirq/circuits/circuit_test.py index 1f26fcab78c..92ae51d2a1e 100644 --- a/cirq-core/cirq/circuits/circuit_test.py +++ b/cirq-core/cirq/circuits/circuit_test.py @@ -1243,6 +1243,7 @@ def test_earliest_available_moment() -> None: c.earliest_available_moment(cirq.Y(q[1]).with_classical_controls("m"), end_moment_index=1) == 1 ) + assert c.earliest_available_moment(cirq.Y(q[1]), end_moment_index=4) == 2 @pytest.mark.parametrize('circuit_cls', [cirq.Circuit, cirq.FrozenCircuit])