Transformer pass to push X, Y, PhasedX & (certain) PhasedXZ gates to the end of the circuit.

Used in the notebooks

Used in the tutorials

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))).

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.

Copy of the transformed input circuit.