# cirq.CNotPowGate

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

Inherits From: EigenGate, 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 cirq.CXPowGate(exponent=t) is:

$\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & g c & -i g s \\ 0 & 0 & -i g s & g c \end{bmatrix}$

where:

$c = \cos\left(\frac{\pi t}{2}\right)$

$s = \sin\left(\frac{\pi t}{2}\right)$

$g = e^{\frac{i \pi 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.

ValueError If the supplied exponent is a complex number with an imaginary component.

exponent

global_shift

## Methods

### controlled

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.

### num_qubits

View source

The number of qubits this gate acts on.

### on

View source

Returns an application of this gate to the given qubits.

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

Returns: a cirq.Operation which is this gate applied to the given qubits.

### on_each

View source

Returns a list of operations applying the gate to all targets.

Args
*targets The qubits to apply this gate to. For single-qubit gates this can be provided as varargs or a combination of nested iterables. For multi-qubit gates this must be provided as an Iterable[Sequence[Qid]], where each sequence has num_qubits qubits.

Returns
Operations applying this gate to the target qubits.

Raises
ValueError If targets are not instances of Qid or Iterable[Qid]. If the gate qubit number is incompatible.
TypeError If a single target is supplied and it is not iterable.

### validate_args

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.

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

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

### with_probability

View source

Creates a probabalistic channel with this gate.

Args
probability floating value between 0 and 1, giving the probability this gate is applied.

Returns
cirq.RandomGateChannel that applies self with probability probability and the identity with probability 1-p.

### wrap_in_linear_combination

View source

Returns a LinearCombinationOfGates with this gate.

Args
coefficient number coefficient to use in the resulting cirq.LinearCombinationOfGates object.

Returns
cirq.LinearCombinationOfGates containing self with a coefficient of coefficient.

View source

### __call__

View source

Call self as a function.

View source

View source

View source

View source

View source

View source

View source

### __truediv__

View source

[{ "type": "thumb-down", "id": "missingTheInformationINeed", "label":"Missing the information I need" },{ "type": "thumb-down", "id": "tooComplicatedTooManySteps", "label":"Too complicated / too many steps" },{ "type": "thumb-down", "id": "outOfDate", "label":"Out of date" },{ "type": "thumb-down", "id": "samplesCodeIssue", "label":"Samples / code issue" },{ "type": "thumb-down", "id": "otherDown", "label":"Other" }]
[{ "type": "thumb-up", "id": "easyToUnderstand", "label":"Easy to understand" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"Solved my problem" },{ "type": "thumb-up", "id": "otherUp", "label":"Other" }]