Simulating MBQC Circuits

In the previous tutorial, you have learned how to create an MBQC circuit using the MBQCircuit class. Now, we will use this circuit to run an actual experiment. We will use the PatternSimulator class to create a simulator. Let’s try it out

In [1]: grid_cluster = mp.templates.grid_cluster(3, 5)

In [2]: simulator = mp.PatternSimulator(grid_cluster, backend='numpy-dm')

In [3]: print(simulator)
PatternSimulator (NumpySimulatorDM for MBQCircuit with 15 qubits.)

You can specify the backend you want to use with the keyword argument backend. This can be useful if you want to run a circuit on real hardware.

Note

Currently, mentpy does not support running circuits on real hardware. This feature will be added in the future.

Running the circuit

To run the circuit, we can simply call simulator with the circuit as an argument. If the measurement angle of a node is fixed (i.e. the measurement object Ment is not trainable), you will not need to specify the measurement angle in the call to the simulator.

In [4]: num_angles = len(grid_cluster.trainable_nodes)

In [5]: output_state = simulator(np.random.rand(num_angles))

In [6]: print(output_state.shape)
(8, 8)

Different inputs

If you want to run the circuit with a particular input state, you can specify it with the keyword argument input_state.

In [7]: random_state = mp.utils.generate_haar_random_states(3)

In [8]: simulator.reset(input_state = random_state)

In [9]: output_state = simulator(np.zeros(num_angles))

In [10]: print(output_state.shape)
(8, 8)