Quantum Gates

What are Quantum Gates?

In quantum computing, quantum gates are the fundamental operations that manipulate the state of qubits. They are analogous to classical logic gates (like AND, OR, NOT) in classical computing. However, they have unique properties that enable quantum computers to perform certain tasks more efficiently than classical computers.

Key Properties of Quantum Gates

Reversible: Unlike some classical gates, quantum gates are inherently reversible. This means that the original state of the qubits can be recovered from the output state.

Unitary: Quantum gates are represented by unitary matrices, which ensure that the system’s total probability remains conserved.

Superposition and Entanglement: Quantum gates can create and manipulate quantum phenomena like superposition (qubits existing in multiple states simultaneously) and entanglement (correlations between qubits).

Common Types of Quantum Gates

Single-Qubit Gates

These gates operate on a single qubit, modifying its state in various ways.

qc.add_gate(h, q[1])
qc.add_gate(rx(np.pi/2), q[2])

Controlled Gates

qc.add_gate(cx, q[0], q[1])
qc.add_gate(ccx, q[0], q[1], q[2])

Parameterized Gates

qc.add_gate(u3(np.pi/2, 0, 0), q[0])

List Available Gates

qc=QniverseCircuit()
qc.list_gates()

Gates

id

Single qubit identity gate

Qubits: 1

Example:

qc.add_gate(id, q[3])

x

Pauli X (PI rotation over X-axis) aka “NOT” gate

Qubits: 1

Example:

qc.add_gate(x, q[2])

y

Pauli Y (PI rotation over Y-axis)

Qubits: 1

Example:

qc.add_gate(y, q[1])

z

Pauli Z (PI rotation over Z-axis)

Qubits: 1

Example:

qc.add_gate(z, q[2])

h

Hadamard gate

Qubits: 1

Example:

qc.add_gate(h, q[1])

rx

Rotation around the X-axis by given angle

Qubits: 1

Parameters: theta

Example:

qc.add_gate(rx(np.pi/2), q[1])

ry

Rotation around the Y-axis by given angle

Qubits: 1

Parameters: theta

Example:

qc.add_gate(ry(np.pi/2), q[1])

rz

Rotation around the Z-axis by given angle

Qubits: 1

Parameters: phi

Example:

qc.add_gate(rz(np.pi/2), q[1])

u1

Single-qubit rotation about the Z axis

Qubits: 1

Parameters: lambda

Example:

qc.add_gate(u1(np.pi/4),q[2])

u2

Single-qubit rotation about the X+Z axis

Qubits: 1

Parameters: phi, lambda

Example:

qc.add_gate(u2(np.pi/2,0),q[2])

u3

Generic single-qubit rotation gate with 3 Euler angles

Qubits: 1

Parameters: theta, phi, lambda

Example:

qc.add_gate(u3(np.pi/2,0,0),q[2])

s

PI/2 rotation over Z-axis (synonym for r2)

Qubits: 1

Example:

qc.add_gate(s, q[2])

t

PI/4 rotation over Z-axis (synonym for r4)

Qubits: 1

Example:

qc.add_gate(t, q[2])

sdg

(-PI/2) rotation over Z-axis

Qubits: 1

Example:

qc.add_gate(sdg, q[2])

tdg

(-PI/4) rotation over Z-axis

Qubits: 1

Example:

qc.add_gate(tdg, q[2])

cx

Controlled NOT (CNOT) gate

Qubits: 2

Example:

qc.add_gate(cx, q[2],q[4])
Or
qc.add_gate(cnot, q[1],q[4])

ccx

Toffoli aka “CCNOT” gate

Qubits: 3

Example:

qc.add_gate(ccx, q[0],q[1],q[2])

c3x

Qubits: 4

Example:

qc.add_gate(c3x, q[0],q[1],q[2],q[3])

c4x

Qubits: 5

Example:

qc.add_gate(c4x, q[0],q[1],q[2],q[3],q[4])

c5x

Qubits: 6

Example:

qc.add_gate(c4x, q[0],q[1],q[2],q[3],q[4],q[5])

cy

Controlled Y gate (controlled rotation over Y-axis by PI)

Qubits: 2

Example:

qc.add_gate(cy, q[1],q[2])

cz

Controlled Z gate (controlled rotation over Z-axis by PI)

Qubits: 2

Example:

qc.add_gate(cz, q[0],q[1])

ch

Controlled Hadamard gate

Qubits: 2

Example:

qc.add_gate(ch, q[0],q[1])

swap

Swaps the state of two qubits.

Qubits: 2

Example:

qc.add_gate(swap, q[1],q[2])

crx

Controlled rotation around the X-axis by given angle

Qubits: 2

Parameters: theta

Example:

qc.add_gate(crx(np.pi/2), q[1],q[2])

cry

Controlled rotation around the Y-axis by given angle

Qubits: 2

Parameters: theta

Example:

qc.add_gate(cry(np.pi/2), q[1],q[2])

crz

Controlled rotation around the Z-axis by given angle

Qubits: 2

Parameters: phi

Example:

qc.add_gate(crz(np.pi/2), q[1],q[2])

cu1

Controlled rotation about the Z axis

Qubits: 2

Parameters: Lambda

Example:

qc.add_gate(cu1(np.pi/2),q[2],q[3])

cu2

Controlled rotation about the X+Z axis

Qubits: 2

Parameters: phi, lambda

Example:

qc.add_gate(cu2(np.pi/2,0),q[2],q[3])

cu3

Controlled rotation gate with 3 Euler angles

Qubits: 2

Parameters: theta, phi, lambda

Example:

qc.add_gate(cu3(np.pi/2,0,0),q[2],q[3])

cs

Controlled PI/2 rotation over Z-axis.

Qubits: 2

Example:

qc.add_gate(cs, q[0], q[1])

ct

Controlled PI/4 rotation over Z-axis.

Qubits: 2

Example:

qc.add_gate(ct, q[0], q[1])

csdg

Controlled (-PI/2) rotation over Z-axis

Qubits: 2

Example:

qc.add_gate(csdg, q[0], q[1])

ctdg

Controlled (-PI/4) rotation over Z-axis

Qubits: 2

Example:

qc.add_gate(ctdg, q[3], q[1])

cswap

Controlled swap aka “Fredkin” gate

Qubits: 3

Example:

qc.add_gate(cswap, q[1],q[2],q[3])

reset

Resets qubit

Qubits: 1

Example:

qc.add_gate(reset, q[0])

measure

Measures qubit and stores outcome (0 or 1) into classical register

Qubits: 1

classical bits: 1

Example:

qc.add_gate(measure, q[1], c[1])

Barrier

Qubits: 1

Example: .. code-block:: python

qc.add_gate(barrier, q[0])

cp

Qubits: 2

Parameters: theta

Example:

qc.add_gate(cp(np.pi/2), q[0], q[1])

p

Qubits: 1

Parameters: theta

Example:

qc.add_gate(p(np.pi/2), q[1])

Modules

Modules represent a simple abstraction for multi-qubit quantum operations, such as the Quantum Fourier Transform (QFT) and its inverse (IQFT). It provides a flexible Module class for naming and grouping parameterized gates, also two predefined instances, qft and iqft, for ease of use across the library. Use add_module to apply composite circuits.

from Qniverse.module import *

qc.add_module(qft, q[1], q[2], q[3])
qc.add_module(iqft, q[1], q[3])