A gate that applies a controlled power of an X gate.

Inherits From: EigenGate, TwoQubitGate, Gate

When applying CNOT (controlled-not) to qubits, you can either use positional arguments CNOT(q1, q2), where q2 is toggled when q1 is on, or named arguments CNOT(control=q1, target=q2). (Mixing the two is not permitted.)

The unitary matrix of CXPowGate(exponent=t) is:

[[1, 0, 0, 0],
 [0, 1, 0, 0],
 [0, 0, g·c, -i·g·s],
 [0, 0, -i·g·s, g·c]]


c = cos(π·t/2)
s = sin(π·t/2)
g = exp(i·π·t/2).

cirq.CNOT, the controlled NOT gate, is an instance of this gate at exponent=1.

exponent The t in gate**t. Determines how much the eigenvalues of the gate are scaled by. For example, eigenvectors phased by -1 when gate**1 is applied will gain a relative phase of e^{i pi exponent} when gate**exponent is applied (relative to eigenvectors unaffected by gate**1).
global_shift Offsets the eigenvalues of the gate at exponent=1. In effect, this controls a global phase factor on the gate's unitary matrix. The factor is:

exp(i * pi * global_shift * exponent)

For example, cirq.X**t uses a global_shift of 0 but cirq.rx(t) uses a global_shift of -0.5, which is why cirq.unitary(cirq.rx(pi)) equals -iX instead of X.





View source

Returns a controlled CXPowGate, using a CCXPowGate where possible.

The controlled method of the Gate class, of which this class is a child, returns a ControlledGate. This method overrides this behavior to return a CCXPowGate or a ControlledGate of a CCXPowGate, when this is possible.

The conditions for the override to occur are:

* The `global_shift` of the `CXPowGate` is 0.
* The `control_values` and `control_qid_shape` are compatible with
    the `CCXPowGate`:
    * The last value of `control_qid_shape` is a qubit.
    * The last value of `control_values` corresponds to the
        control being satisfied if that last qubit is 1 and
        not satisfied if the last qubit is 0.

If these conditions are met, then the returned object is a CCXPowGate or, in the case that there is more than one controlled qudit, a ControlledGate with the Gate being a CCXPowGate. In the latter case the ControlledGate is controlled by one less qudit than specified in control_values and control_qid_shape (since one of these, the last qubit, is used as the control for the CCXPowGate).

If the above conditions are not met, a ControlledGate of this gate will be returned.


View source

The number of qubits this gate acts on.


View source

Returns an application of this gate to the given qubits.

*qubits The collection of qubits to potentially apply the gate to.


View source

Checks if this gate can be applied to the given qubits.

By default checks that:

  • inputs are of type Qid
  • len(qubits) == num_qubits()
  • qubit_i.dimension == qid_shape[i] for all qubits

Child classes can override. The child implementation should call super().validate_args(qubits) then do custom checks.

qubits The sequence of qubits to potentially apply the gate to.


  • ValueError: The gate can't be applied to the qubits.


View source


View source


View source


View source

Call self as a function.


View source


View source


View source


View source


View source


View source


View source


View source