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.