ket.gates#

Quantum gate definitions.

All quantum gates take one or more Quant as input and return them at the end. This allows for concatenating quantum operations.

Example

from ket import *

p = Process()
a, b = p.alloc(2)

S(X(a))  # Apply a Pauli X followed by an S gate on `a`.

CNOT(H(a), b)  # Apply a Hadamard on `a` followed by a CNOT gate on `a` and `b`.

For gates that take classical parameters, such as rotation gates, if non-qubits are passed, it will return a new gate with the classical parameter set.

Example

from math import pi
from ket import *

s_gate = PHASE(pi/2)
t_gate = PHASE(pi/4)

p = Process()
q = p.alloc()

s_gate(q)
t_gate(q)

Functions ket.gates#

CNOT(control_qubit, target_qubit)

Apply the Controlled NOT gate.

H(qubits)

Apply the Hadamard gate.

I(qubits)

Apply the Identity gate.

PHASE(theta[, qubits])

Apply the Phase shift gate.

RX(theta[, qubits])

Apply the X-axes rotation gate.

RXX(theta, qubits_a, qubits_b)

Apply the XX rotation gate.

RY(theta[, qubits])

Apply the Y-axes rotation gate.

RYY(theta, qubits_a, qubits_b)

Apply the YY rotation gate.

RZ(theta[, qubits])

Apply the Z-axes rotation gate.

RZZ(theta, qubits_a, qubits_b)

Apply the ZZ rotation gate.

S(qubits)

Apply the S gate.

SD(qubits)

Apply the S-dagger gate.

SWAP(qubit_a, qubit_b)

Apply the SWAP gate.

T(qubits)

Apply the T gate.

TD(qubits)

Apply the T-dagger gate.

X(qubits)

Apply the Pauli X gate.

Y(qubits)

Apply the Pauli Y gate.

Z(qubits)

Apply the Pauli Z gate.

CNOT(control_qubit: Quant, target_qubit: Quant) tuple[Quant, Quant]#

Apply the Controlled NOT gate.

Matrix

Effect

\(\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \end{bmatrix}\)

\(\begin{matrix} \text{CNOT}\left|00\right> = & \left|00\right> \\\text{CNOT}\left|01\right> = & \left|01\right> \\\text{CNOT}\left|10\right> = & \left|11\right> \\\text{CNOT}\left|11\right> = & \left|10\right> \\\text{CNOT}\left|\text{c}\right>\left|\text{t}\right> = & \left|\text{c}\right> \left|\text{c}\oplus\text{t}\right> \end{matrix}\)

H(qubits: Quant) Quant#

Apply the Hadamard gate.

Matrix

Effect

\(\frac{1}{\sqrt{2}}\begin{bmatrix} 1 & 1 \\ 1 & -1 \end{bmatrix}\)

\(\begin{matrix} H\left|0\right> = & \frac{1}{\sqrt{2}}\left(\left|0\right> + \left|1\right>\right) \\H\left|1\right> = & \frac{1}{\sqrt{2}}\left(\left|0\right> - \left|1\right>\right) \end{matrix}\)

I(qubits: Quant) Quant#

Apply the Identity gate.

Matrix

Effect

\(\begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}\)

\(\begin{matrix} I\left|0\right> = & \left|0\right> \\I\left|1\right> = & \left|1\right> \end{matrix}\)

PHASE(theta: float, qubits: Quant | None = None) Quant | Callable[[Quant], Quant]#

Apply the Phase shift gate.

Matrix

Effect

\(\begin{bmatrix} 1 & 0 \\ 0 & e^{i\theta} \end{bmatrix}\)

\(\begin{matrix} P\left|0\right> = & \left|0\right> \\P\left|1\right> = & e^{i\theta}\left|1\right> \end{matrix}\)

RX(theta: float, qubits: Quant | None = None) Quant | Callable[[Quant], Quant]#

Apply the X-axes rotation gate.

Matrix

Effect

\(\begin{bmatrix} \cos(\theta/2) & -i\sin(\theta/2) \\ -i\sin(\theta/2) & \cos(\theta/2) \end{bmatrix}\)

\(\begin{matrix} R_x\left|0\right> = & \cos(\theta/2)\left|0\right> + i\sin(\theta/2)\left|1\right> \\R_x\left|1\right> = & -i\sin(\theta/2)\left|0\right> + \cos(\theta/2)\left|1\right> \end{matrix}\)

RXX(theta: float, qubits_a: Quant | None, qubits_b: Quant | None) tuple[Quant, Quant] | Callable[[Quant, Quant], tuple[Quant, Quant]]#

Apply the XX rotation gate.

Matrix

\(\begin{bmatrix} \cos\frac{\theta}{2} & 0 & 0 & -i\sin\frac{\theta}{2} \\0 & \cos\frac{\theta}{2} & -i\sin\frac{\theta}{2} & 0 \\0 & -i\sin\frac{\theta}{2} & \cos\frac{\theta}{2} & 0 \\-i\sin\frac{\theta}{2} & 0 & 0 & \cos\frac{\theta}{2} \end{bmatrix}\)

RY(theta: float, qubits: Quant | None = None) Quant | Callable[[Quant], Quant]#

Apply the Y-axes rotation gate.

Matrix

Effect

\(\begin{bmatrix} \cos(\theta/2) & -\sin(\theta/2) \\ \sin(\theta/2) & \cos(\theta/2) \end{bmatrix}\)

\(\begin{matrix} R_y\left|0\right> = & \cos(\theta/2)\left|0\right> - \sin(\theta/2)\left|1\right> \\R_y\left|1\right> = & \sin(\theta/2)\left|0\right> + \cos(\theta/2)\left|1\right> \end{matrix}\)

RYY(theta: float, qubits_a: Quant | None, qubits_b: Quant | None) tuple[Quant, Quant] | Callable[[Quant, Quant], tuple[Quant, Quant]]#

Apply the YY rotation gate.

Matrix

\(\begin{bmatrix} \cos\frac{\theta}{2} & 0 & 0 & i\sin\frac{\theta}{2} \\0 & \cos\frac{\theta}{2} & -i\sin\frac{\theta}{2} & 0 \\0 & -i\sin\frac{\theta}{2} & \cos\frac{\theta}{2} & 0 \\i\sin\frac{\theta}{2} & 0 & 0 & \cos\frac{\theta}{2} \end{bmatrix}\)

RZ(theta: float, qubits: Quant | None = None) Quant | Callable[[Quant], Quant]#

Apply the Z-axes rotation gate.

Matrix

Effect

\(\begin{bmatrix} e^{-i\theta/2} & 0 \\ 0 & e^{i\theta/2} \end{bmatrix}\)

\(\begin{matrix} R_z\left|0\right> = & e^{-i\theta/2}\left|0\right> \\R_z\left|1\right> = & e^{i\theta/2}\left|1\right> \end{matrix}\)

RZZ(theta: float, qubits_a: Quant | None, qubits_b: Quant | None) tuple[Quant, Quant] | Callable[[Quant, Quant], tuple[Quant, Quant]]#

Apply the ZZ rotation gate.

Matrix

\(\begin{bmatrix} e^{-i \frac{\theta}{2}} & 0 & 0 & 0 \\0 & e^{i \frac{\theta}{2}} & 0 & 0\\ 0 & 0 & e^{i \frac{\theta}{2}} & 0 \\0 & 0 & 0 & e^{-i \frac{\theta}{2}} \end{bmatrix}\)

S(qubits: Quant) Quant#

Apply the S gate.

Matrix

Effect

\(\begin{bmatrix} 1 & 0 \\ 0 & i \end{bmatrix}\)

\(\begin{matrix} S\left|0\right> = & \left|0\right> \\S\left|1\right> = & i\left|1\right> \end{matrix}\)

SD(qubits: Quant) Quant#

Apply the S-dagger gate.

Matrix

Effect

\(\begin{bmatrix} 1 & 0 \\ 0 & -i \end{bmatrix}\)

\(\begin{matrix} S^\dagger\left|0\right> = & \left|0\right> \\S^\dagger\left|1\right> = & -i\left|1\right> \end{matrix}\)

SWAP(qubit_a: Quant, qubit_b: Quant) tuple[Quant, Quant]#

Apply the SWAP gate.

Matrix

Effect

\(\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}\)

\(\begin{matrix} \text{SWAP}\left|00\right> = & \left|00\right> \\\text{SWAP}\left|01\right> = & \left|10\right> \\\text{SWAP}\left|10\right> = & \left|01\right> \\\text{SWAP}\left|11\right> = & \left|11\right> \\\text{SWAP}\left|\text{a}\right>\left|\text{b}\right> = & \left|\text{b}\right> \left|\text{a}\right> \end{matrix}\)

T(qubits: Quant) Quant#

Apply the T gate.

Matrix

Effect

\(\begin{bmatrix} 1 & 0 \\ 0 & e^{i\pi/4} \end{bmatrix}\)

\(\begin{matrix} T\left|0\right> = & \left|0\right> \\T\left|1\right> = & e^{i\pi/4}\left|1\right> \end{matrix}\)

TD(qubits: Quant) Quant#

Apply the T-dagger gate.

Matrix

Effect

\(\begin{bmatrix} 1 & 0 \\ 0 & e^{-i\pi/4} \end{bmatrix}\)

\(\begin{matrix} T^\dagger\left|0\right> = & \left|0\right> \\T^\dagger\left|1\right> = & e^{-i\pi/4}\left|1\right> \end{matrix}\)

X(qubits: Quant) Quant#

Apply the Pauli X gate.

Matrix

Effect

\(\begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix}\)

\(\begin{matrix} X\left|0\right> = & \left|1\right> \\X\left|1\right> = & \left|0\right> \end{matrix}\)

Y(qubits: Quant) Quant#

Apply the Pauli Y gate.

Matrix

Effect

\(\begin{bmatrix} 0 & -i \\ i & 0 \end{bmatrix}\)

\(\begin{matrix} Y\left|0\right> = & i\left|1\right> \\Y\left|1\right> = & -i\left|0\right> \end{matrix}\)

Z(qubits: Quant) Quant#

Apply the Pauli Z gate.

Matrix

Effect

\(\begin{bmatrix} 1 & 0 \\ 0 & -1 \end{bmatrix}\)

\(\begin{matrix} Z\left|0\right> = & \left|0\right> \\Z\left|1\right> = & -\left|1\right> \end{matrix}\)