Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion cirq-core/cirq/transformers/dynamical_decoupling.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
from cirq import ops, protocols
from cirq.circuits import Circuit, FrozenCircuit, Moment
from cirq.protocols import unitary_protocol
from cirq.protocols.control_key_protocol import control_keys
from cirq.protocols.has_stabilizer_effect_protocol import has_stabilizer_effect
from cirq.protocols.has_unitary_protocol import has_unitary
from cirq.transformers import transformer_api
Expand Down Expand Up @@ -121,7 +122,7 @@ def _is_single_qubit_gate_moment(moment: Moment) -> bool:


def _is_clifford_op(op: ops.Operation) -> bool:
return has_unitary(op) and has_stabilizer_effect(op)
return has_unitary(op) and has_stabilizer_effect(op) and not control_keys(op)


def _calc_busy_moment_range_of_each_qubit(circuit: FrozenCircuit) -> dict[ops.Qid, list[int]]:
Expand Down
18 changes: 17 additions & 1 deletion cirq-core/cirq/transformers/dynamical_decoupling_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
import pytest

import cirq
from cirq import add_dynamical_decoupling, CNOT, CZ, CZPowGate, H, X, Y, Z
from cirq import add_dynamical_decoupling, CNOT, CZ, CZPowGate, H, I, measure, X, Y, Z
from cirq.transformers.dynamical_decoupling import _CellType, _Grid


Expand Down Expand Up @@ -55,6 +55,22 @@ def assert_dd(
assert_sim_eq(input_circuit, transformed_circuit)


def test_classically_controlled_no_update_succeeds():
"""Test case diagrams.
Input:
a: ───M───I───
║ ║
a: ═══@═══^═══
"""
a = cirq.NamedQubit('a')

input_circuit = cirq.Circuit(
cirq.Moment(measure(a, key="a")), cirq.Moment(I(a).with_classical_controls("a"))
)
output_circuit = add_dynamical_decoupling(input_circuit)
cirq.testing.assert_same_circuits(input_circuit, output_circuit)


def test_no_insertion() -> None:
"""Test case diagrams.
Input:
Expand Down