Implements the Deferred Measurement Principle.
cirq.defer_measurements(
circuit: 'cirq.AbstractCircuit',
*,
context: Optional['cirq.TransformerContext'] = None
) -> 'cirq.Circuit'
Used in the notebooks
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.
Args |
circuit
|
The circuit to transform. It will not be modified.
|
context
|
cirq.TransformerContext storing common configurable options
for transformers.
|
Returns |
A circuit with equivalent logic, but all measurements at the end of the
circuit.
|
Raises |
NotImplementedError
|
When attempting to defer a measurement with a
confusion map. (https://github.com/quantumlib/Cirq/issues/5482)
|