# cirq.CNotPowGate¶

class cirq.CNotPowGate(*, exponent: Union[sympy.core.basic.Basic, float] = 1.0, global_shift: float = 0.0)[source]

A gate that applies a controlled power of an X 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 CNotPowGate(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]]


where:

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.
__init__(*, exponent: Union[sympy.core.basic.Basic, float] = 1.0, global_shift: float = 0.0) → None

Initializes the parameters used to compute the gate’s matrix.

The eigenvalue of each eigenspace of a gate is computed by

1. Starting with an angle in half turns as returned by the gate’s
_eigen_components method:
θ

2. Shifting the angle by global_shift:

θ + s

3. Scaling the angle by exponent:

(θ + s) * e

4. Converting from half turns to a complex number on the unit circle:

exp(i * pi * (θ + s) * e)

Parameters: 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.

Methods

 controlled_by(*control_qubits) Returns a controlled version of this gate. num_qubits() The number of qubits this gate acts on. on(*args, **kwargs) Returns an application of this gate to the given qubits. validate_args(qubits) Checks if this gate can be applied to the given qubits. wrap_in_linear_combination(coefficient, …)

Attributes