# Quantum operators¶

PennyLane supports a wide variety of quantum operators—such as gates, noisy channels, state preparations and measurements. These operators can be used in quantum functions, like shown in the following example:

import pennylane as qml

def my_quantum_function(x, y):
qml.RZ(x, wires=0)
qml.CNOT(wires=[0,1])
qml.RY(y, wires=1)
qml.AmplitudeDamping(0.1, wires=0)
return qml.expval(qml.PauliZ(1))


This quantum function uses the RZ, CNOT, RY gates, the AmplitudeDamping noisy channel as well as the PauliZ observable.

Functions applied to operators extract information (such as the matrix representation) or transform operators (like turning a gate into a controlled gate).

PennyLane supports the following operators and operator functions:

## Operator functions¶

Various functions and transforms are available for manipulating operators, and extracting information. These can be broken down into two main categories:

### Operator to Operator functions¶

 adjoint(fn[, lazy]) Create the adjoint of an Operator or a function that applies the adjoint of the provided function. ctrl(op, control[, control_values, work_wires]) Create a method that applies a controlled version of the provided op. cond(condition, true_fn[, false_fn]) Condition a quantum operation on the results of mid-circuit qubit measurements. exp(op[, coeff, id]) Take the exponential of an Operator times a coefficient. op_sum(*summands[, do_queue, id]) Construct an operator which is the sum of the given operators. prod(*ops[, do_queue, id]) Construct an operator which represents the generalized product of the operators provided. s_prod(scalar, operator[, do_queue, id]) Construct an operator which is the scalar product of the given scalar and operator provided. generator(op[, format]) Returns the generator of an operation.

These operator functions act on operators to produce new operators.

>>> op = qml.prod(qml.PauliX(0), qml.PauliZ(1))
>>> op = qml.op_sum(qml.Hadamard(0), op)
>>> op = qml.s_prod(1.2, op)
>>> op
1.2*(Hadamard(wires=) + (PauliX(wires=) @ PauliZ(wires=)))


### Operator to Other functions¶

 matrix(op, *[, wire_order]) The matrix representation of an operation or quantum circuit. eigvals(op[, k, which]) The eigenvalues of one or more operations. is_commuting(operation1, operation2[, wire_map]) Check if two operations are commuting using a lookup table. Check if the operation is hermitian. Check if the operation is unitary. simplify(input) Simplifies an operator, tape, qnode or quantum function by reducing its arithmetic depth or number of rotation parameters.

These operator functions act on operators and return other data types. All operator functions can be used on instantiated operators.

>>> op = qml.RX(0.54, wires=0)
>>> qml.matrix(op)
[[0.9637709+0.j         0.       -0.26673144j]
[0.       -0.26673144j 0.9637709+0.j        ]]


Some operator functions can also be used in a functional form:

>>> x = torch.tensor(0.6, requires_grad=True)
>>> matrix_fn = qml.matrix(qml.RX)
>>> matrix_fn(x, wires=0)
tensor([[0.9553+0.0000j, 0.0000-0.2955j],


In the functional form, they are usually differentiable with respect to gate arguments:

>>> loss = torch.real(torch.trace(matrix_fn(x, wires=0)))
>>> loss.backward()
tensor(-0.2955)


Some operator transforms can also act on multiple operators, by passing quantum functions, QNodes or tapes:

>>> def circuit(theta):
...     qml.RX(theta, wires=1)
...     qml.PauliZ(wires=0)
>>> qml.matrix(circuit)(np.pi / 4)
array([[ 0.92387953+0.j,  0.+0.j ,  0.-0.38268343j,  0.+0.j],
[ 0.+0.j,  -0.92387953+0.j,  0.+0.j,  0. +0.38268343j],
[ 0. -0.38268343j,  0.+0.j,  0.92387953+0.j,  0.+0.j],
[ 0.+0.j,  0.+0.38268343j,  0.+0.j,  -0.92387953+0.j]])


## Qubit operators¶

### Non-parametrized gates¶

 Identity The identity observable $$\I$$. Hadamard The Hadamard operator PauliX The Pauli X operator PauliY The Pauli Y operator PauliZ The Pauli Z operator S The single-qubit phase gate T The single-qubit T gate SX The single-qubit Square-Root X operator. CNOT The controlled-NOT operator CZ The controlled-Z operator CY The controlled-Y operator SWAP The swap operator ISWAP The i-swap operator ECR An echoed RZX(pi/2) gate. SISWAP The square root of i-swap operator. SQISW alias of pennylane.ops.qubit.non_parametric_ops.SISWAP CSWAP The controlled-swap operator Toffoli Toffoli (controlled-controlled-X) gate. MultiControlledX Apply a Pauli X gate controlled on an arbitrary computational basis state. Barrier The Barrier operator, used to separate the compilation process into blocks or as a visual tool. WireCut The wire cut operation, used to manually mark locations for wire cuts.

### Parametrized gates¶

 Rot Arbitrary single qubit rotation RX The single qubit X rotation RY The single qubit Y rotation RZ The single qubit Z rotation MultiRZ Arbitrary multi Z rotation. PauliRot Arbitrary Pauli word rotation. PhaseShift Arbitrary single qubit local phase shift ControlledPhaseShift A qubit controlled phase shift. CPhase alias of pennylane.ops.qubit.parametric_ops.ControlledPhaseShift CRX The controlled-RX operator CRY The controlled-RY operator CRZ The controlled-RZ operator CRot The controlled-Rot operator U1 U1 gate. U2 U2 gate. U3 Arbitrary single qubit unitary. IsingXX Ising XX coupling gate IsingXY Ising (XX + YY) coupling gate IsingYY Ising YY coupling gate IsingZZ Ising ZZ coupling gate PSWAP Phase SWAP gate

### Quantum chemistry gates¶

 SingleExcitation Single excitation rotation. SingleExcitationPlus Single excitation rotation with positive phase-shift outside the rotation subspace. SingleExcitationMinus Single excitation rotation with negative phase-shift outside the rotation subspace. DoubleExcitation Double excitation rotation. DoubleExcitationPlus Double excitation rotation with positive phase-shift outside the rotation subspace. DoubleExcitationMinus Double excitation rotation with negative phase-shift outside the rotation subspace. OrbitalRotation Spin-adapted spatial orbital rotation.

Electronic Hamiltonians built independently using OpenFermion tools can be readily converted to a PennyLane observable using the import_operator() function.

### Gates constructed from a matrix¶

 QubitUnitary Apply an arbitrary fixed unitary matrix. ControlledQubitUnitary Apply an arbitrary fixed unitary to wires with control from the control_wires. DiagonalQubitUnitary Apply an arbitrary fixed diagonal unitary matrix.

### Gates performing arithmetics¶

 QubitCarry Apply the QubitCarry operation to four input wires. QubitSum Apply a QubitSum operation on three input wires.

### State preparation¶

 BasisState Prepares a single computational basis state. QubitStateVector Prepare subsystems using the given ket vector in the computational basis. QubitDensityMatrix Prepare subsystems using the given density matrix.

### Noisy channels¶

 AmplitudeDamping Single-qubit amplitude damping error channel. GeneralizedAmplitudeDamping Single-qubit generalized amplitude damping error channel. PhaseDamping Single-qubit phase damping error channel. DepolarizingChannel Single-qubit symmetrically depolarizing error channel. BitFlip Single-qubit bit flip (Pauli $$X$$) error channel. PhaseFlip Single-qubit bit flip (Pauli $$Z$$) error channel. ResetError Single-qubit Reset error channel. PauliError Pauli operator error channel for an arbitrary number of qubits. QubitChannel Apply an arbitrary fixed quantum channel. ThermalRelaxationError Thermal relaxation error channel.

### Observables¶

 Hadamard The Hadamard operator Hermitian An arbitrary Hermitian observable. Identity The identity observable $$\I$$. PauliX The Pauli X operator PauliY The Pauli Y operator PauliZ The Pauli Z operator Projector Observable corresponding to the computational basis state projector $$P=\ket{i}\bra{i}$$. Hamiltonian Operator representing a Hamiltonian. SparseHamiltonian A Hamiltonian represented directly as a sparse matrix in Compressed Sparse Row (CSR) format.

## Continuous-Variable (CV) operators¶

If you would like to learn more about the CV model of quantum computing, check out the quantum photonics page of the Strawberry Fields documentation.

### CV gates¶

 Identity The identity observable $$\I$$. Beamsplitter Beamsplitter interaction. ControlledAddition Controlled addition operation. ControlledPhase Controlled phase operation. CrossKerr Cross-Kerr interaction. CubicPhase Cubic phase shift. Displacement Phase space displacement. InterferometerUnitary A linear interferometer transforming the bosonic operators according to the unitary matrix $$U$$. Kerr Kerr interaction. QuadraticPhase Quadratic phase shift. Rotation Phase space rotation. Squeezing Phase space squeezing. TwoModeSqueezing Phase space two-mode squeezing.

### CV state preparation¶

 CatState Prepares a cat state. CoherentState Prepares a coherent state. DisplacedSqueezedState Prepares a displaced squeezed vacuum state. FockDensityMatrix Prepare subsystems using the given density matrix in the Fock basis. FockState Prepares a single Fock state. FockStateVector Prepare subsystems using the given ket vector in the Fock basis. GaussianState Prepare subsystems in a given Gaussian state. SqueezedState Prepares a squeezed vacuum state. ThermalState Prepares a thermal state.

### CV observables¶

 FockStateProjector The number state observable $$\ket{n}\bra{n}$$. Identity The identity observable $$\I$$. NumberOperator The photon number observable $$\langle \hat{n}\rangle$$. TensorN The tensor product of the NumberOperator acting on different wires. P The momentum quadrature observable $$\hat{p}$$. PolyXP An arbitrary second-order polynomial observable. QuadOperator The generalized quadrature observable $$\x_\phi = \x cos\phi+\p\sin\phi$$. X The position quadrature observable $$\hat{x}$$.

## Qutrit operators¶

### Qutrit non-parametrized gates¶

 TShift The qutrit shift operator TClock Ternary Clock gate TAdd The 2-qutrit controlled add gate TSWAP The ternary swap operator.

### Qutrit gates constructed from a matrix¶

 QutritUnitary Apply an arbitrary, fixed unitary matrix.

### Qutrit Observables¶

 THermitian An arbitrary Hermitian observable for qutrits.