Transformer pass to push X, Y, PhasedX & (certain) PhasedXZ gates to the end of the circuit.
cirq.eject_phased_paulis(
circuit: 'cirq.AbstractCircuit',
*,
context: Optional['cirq.TransformerContext'] = None,
atol: float = 1e-08,
eject_parameterized: bool = False
) -> 'cirq.Circuit'
Used in the notebooks
As the gates get pushed, they may absorb Z gates, cancel against other
X, Y, or PhasedX gates with exponent=1, get merged into measurements (as
output bit flips), and cause phase kickback operations across CZs (which can
then be removed by the cirq.eject_z
transformation).
cirq.PhasedXZGate
with z_exponent=0
(i.e. equivalent to PhasedXPow) or with x_exponent=0
and axis_phase_exponent=0
(i.e. equivalent to ZPowGate) are also supported.
To eject PhasedXZGates
with arbitrary x/z/axis exponents, run
cirq.eject_z(cirq.eject_phased_paulis(cirq.eject_z(circuit)))
.
Args |
circuit
|
Input circuit to transform.
|
context
|
cirq.TransformerContext storing common configurable options for transformers.
|
atol
|
Maximum absolute error tolerance. The optimization is permitted to simply drop
negligible combinations gates with a threshold determined by this tolerance.
|
eject_parameterized
|
If True, the optimization will attempt to eject parameterized gates
as well. This may result in other gates parameterized by symbolic expressions.
|
Returns |
Copy of the transformed input circuit.
|