Implements the Deferred Measurement Principle.

Used in the notebooks

Used in the tutorials

Uses the Deferred Measurement Principle to move all measurements to the end of the circuit. All non-terminal measurements are changed to conditional quantum gates onto ancilla qubits, and classically controlled operations are transformed to quantum controls from those ancilla qubits. Finally, measurements of all ancilla qubits are appended to the end of the circuit.

Optimizing deferred measurements is an area of active research, and future iterations may contain optimizations that reduce the number of ancilla qubits, so one should not depend on the exact shape of the output from this function. Only the logical equivalence is guaranteed to remain unchanged. Moment and subcircuit structure is not preserved.

circuit The circuit to transform. It will not be modified.
context cirq.TransformerContext storing common configurable options for transformers.

A circuit with equivalent logic, but all measurements at the end of the circuit.

ValueError If sympy-based classical conditions are used, or if conditions based on multi-qubit measurements exist. (The latter of these is planned to be implemented soon).
NotImplementedError When attempting to defer a measurement with a confusion map. (