Sampling the Matrix Product State (QFT Circuit)

The following code example illustrates how to define a tensor network state for a given quantum circuit (QFT), then compute its Matrix Product State (MPS) factorization, and, finally, sample the MPS-factorized state. The full code can be found in the NVIDIA/cuQuantum repository (here).

Headers and error handling

Define the tensor network state and the desired number of output samples to generate

Let’s define a tensor network state for a quantum circuit with the given number of qubits and request to produce a given number of output samples for the full qubit register.

Initialize the cuTensorNet library handle

Define quantum gates in GPU memory

Allocate MPS tensors in GPU memory

Here we set the shapes of MPS tensors and allocate GPU memory for their storage.

Allocate the scratch buffer on GPU

Create a pure tensor network state

Now let’s create a pure tensor network state for a quantum circuit with the given number of qubits.

Apply quantum gates

Let’s construct the QFT quantum circuit with no bit reversal by applying the corresponding quantum gates.

Request MPS factorization for the final quantum circuit state

Here we express our intent to factorize the final quantum circuit state using MPS factorization. The provided shapes (mode extents) of the MPS tensors refer to their maximal size limit during the MPS renormalization procedure. The actually computed shapes (mode extents) of the final MPS tensors may be smaller than their limits. Note that no computation is done here yet.

Configure MPS factorization procedure

After expressing our intent to perform MPS factorization of the final quantum circuit state, we can also configure the MPS factorization procedure by resetting different options, for example, the SVD algorithm.

Prepare the computation of MPS factorization

Let’s create a workspace descriptor and prepare the computation of the MPS factorization of the final quantum circuit state.

Compute MPS factorization

Once the MPS factorization procedure has been configured and prepared, let’s compute the MPS factorization of the final quantum circuit state.

Create the tensor network state sampler

Once the quantum circuit state has been constructed and factorized using the MPS representation, let’s create the tensor network state sampler for the full qubit register (all qubits).

Configure the tensor network state sampler

Optionally, we can configure the tensor network state sampler by setting the number of hyper-samples to be used by the tensor network contraction path finder.

Prepare the tensor network state sampler

Now let’s prepare the tensor network state sampler.

Set up the workspace

Now we can set up the required workspace buffer.

Perform sampling of the final quantum circuit state

Once everything had been set up, we perform sampling of the quantum circuit state and print the output samples.

Free resources