cirq.CZTargetGateset implementation tailored to Google devices.

In addition to features available from cirq.CZTargetGateset, GoogleCZTargetGateset contains a flag, eject_paulis, to enable the postprocess transformers cirq.eject_phased_paulis and cirq.eject_z, which will push X, Y, Z, PhasedX, and certain PhasedXZ gates to the end of the circuit.

atol A limit on the amount of absolute error introduced by the transformation.
eject_paulis Whether to enable postprocess transformers cirq.eject_z and cirq.eject_phased_paulis. If enabled, these transformers will remove tags (e.g. cirq_google.PhysicalZTag) from single-qubit Pauli operations. Defaults to False.
additional_gates Sequence of additional gates / gate families which should also be "accepted" by this gateset. This is empty by default.



num_qubits Maximum number of qubits on which a gate from this gateset can act upon.
postprocess_transformers List of transformers which should be run after decomposing individual operations.

If eject_paulis is enabled in the constructor, adds cirq.eject_phased_paulis and cirq.eject_z in addition to postprocess_transformers already available in cirq.CompilationTargetGateset.

preprocess_transformers List of transformers which should be run before decomposing individual operations.



Method to rewrite the given operation using gates from this gateset.

op cirq.Operation to be rewritten using gates from this gateset.
moment_idx Moment index where the given operation op occurs in a circuit.


  • An equivalent cirq.OP_TREE implementing op using gates from this gateset.
  • None or NotImplemented if does not know how to decompose op.


Validates gates forming circuit_or_optree should be contained in Gateset.

circuit_or_optree The cirq.Circuit or cirq.OP_TREE to validate.


Returns a copy of this Gateset with identical gates and new values for named arguments.

If a named argument is None then corresponding value of this Gateset is used instead.

name New name for the Gateset.
unroll_circuit_op If True, new Gateset will recursively validate cirq.CircuitOperation by validating the underlying cirq.Circuit.

self if all new values are None or identical to the values of current Gateset. else a new Gateset with identical gates and new values for named arguments.


Check for containment of a given Gate/Operation in this Gateset.

Containment checks are handled as follows:

The complexity of the method in terms of the number of gates, n, is

  • O(1) when any default cirq.GateFamily instance accepts the given item, except for an Instance GateFamily trying to match an item with a different global phase.
  • O(n) for all other cases: matching against custom gate families, matching across global phase for the default Instance GateFamily, no match against any underlying gate family.

item The cirq.Gate or cirq.Operation instance to check containment for.