# The Fock device¶

Pennylane’s Fock device gives access to Strawberry Field’s Fock state simulator backend. This simulator represents quantum states in the Fock basis $$\left| 0 \right>, \left| 1 \right>, \left| 2 \right>, \dots, \left| \mathrm{D -1} \right>$$, where $$D$$ is the user-given value for cutoff_dim that limits the dimension of the Hilbert space.

The advantage of this representation is that any continuous-variable operation can be represented. However, the simulations are approximations, whose accuracy increases with the cutoff dimension.

Warning

It is often useful to keep track of the normalization of a quantum state during optimization, to make sure the circuit does not “learn” to push its parameters into a regime where the simulation is vastly inaccurate.

Note

For $$M$$ modes or wires and a cutoff dimension of $$D$$, the Fock simulator needs to keep track of at least $$M^D$$ values. Hence, the simulation time and required memory grows much faster with the number of modes than in qubit-based simulators.

## Usage¶

You can instantiate the Fock device in PennyLane as follows:

import pennylane as qml

dev = qml.device('strawberryfields.fock', wires=2, cutoff_dim=10)


The device can then be used just like other devices for the definition and evaluation of QNodes within PennyLane.

For instance, the following simple example defines a quantum_function circuit that first displaces the vacuum state, applies a beamsplitter, and then returns the photon number expectation. This function is then converted into a QNode which is placed on the strawberryfields.fock device:

@qml.qnode(dev)
def quantum_function(x, theta):
qml.Displacement(x, 0, wires=0)
qml.Beamsplitter(theta, 0, wires=[0, 1])
return qml.expval(qml.NumberOperator(0))


We can evaluate the QNode for arbitrary values of the circuit parameters:

>>> quantum_function(1., 0.543)
0.7330132578095255


We can also evaluate the derivative with respect to any parameter(s):

>>> dqfunc = qml.grad(quantum_function, argnum=0)
>>> dqfunc(1., 0.543)
1.4660265156190515


Note

The qml.state, qml.sample and qml.density_matrix measurements are not supported on the strawberryfields.fock device.

The continuous-variable QNodes available via Strawberry Fields can also be combined with qubit-based QNodes and classical nodes to build up a hybrid computational model. Such hybrid models can be optimized using the built-in optimizers provided by PennyLane.

## Device options¶

The Strawberry Fields Fock device accepts additional arguments beyond the PennyLane default device arguments.

cutoff_dim

the Fock basis truncation when applying quantum operations

hbar=2

The convention chosen in the canonical commutation relation $$[x, p] = i \hbar$$. Default value is $$\hbar=2$$.

shots=None

The number of circuit evaluations/random samples used to estimate expectation values of observables. The default value of None means that the exact expectation value is returned.

If shots is a positive integer or a list of integers, the Fock device calculates the variance of the expectation value(s), and use the Berry-Esseen theorem to estimate the sampled expectation value.

## Supported operations¶

The Strawberry Fields Fock device supports all continuous-variable (CV) operations and observables provided by PennyLane, including both Gaussian and non-Gaussian operations.

Supported operations:

 Beamsplitter Beamsplitter interaction. CatState Prepares a cat state. CoherentState Prepares a coherent state. ControlledAddition Controlled addition operation. ControlledPhase Controlled phase operation. CrossKerr Cross-Kerr interaction. CubicPhase Cubic phase shift. DisplacedSqueezedState Prepares a displaced squeezed vacuum state. Displacement Phase space displacement. 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. 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. SqueezedState Prepares a squeezed vacuum state. Squeezing Phase space squeezing. ThermalState Prepares a thermal state. TwoModeSqueezing Phase space two-mode squeezing.

Supported observables:

 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. X The position quadrature observable $$\hat{x}$$. P The momentum quadrature observable $$\hat{p}$$. QuadOperator The generalized quadrature observable $$\x_\phi = \x cos\phi+\p\sin\phi$$. PolyXP An arbitrary second-order polynomial observable. TensorN The tensor product of the NumberOperator acting on different wires.