MPSTAB as a Qibo Backend Provider
==================================
``mpstab`` can be used as a custom backend provider for `Qibo `_, an open-source (and full-stack!) quantum computing framework.
This allows you to use MPSTAB's efficient hybrid stabilizer-MPO simulation as a backend for any Qibo circuits and Hamiltonians.
.. note::
Currently, ``mpstab`` can be used to compute expectation values, and not for pure circuit execution. In the end, the main scope of this library
is to provide a tool for expectation value calculation. We plan to implement sampling strategies in the future, and new features will be available when this will be done.
What is a Backend Provider?
~~~~~~~~~~~~~~~~~~~~~~~~~~~
In Qibo, a backend is responsible for executing quantum circuits and computing observables (Hamiltonians). By registering ``mpstab`` as a backend, you can seamlessly integrate hybrid stabilizer-MPO simulation into Qibo workflows without modifying your Qibo code. You simply specify ``"mpstab"`` as the backend when constructing circuits or Hamiltonians.
Computing Hamiltonian Expectation Values
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
A powerful use case is computing expectation values of Hamiltonians using MPSTAB. Here's an example with a Transfer Field Ising Model::
from qibo import Circuit, gates, construct_backend
from qibo.hamiltonians import TFIM
# Create the MPSTAB backend
mpstab_backend = construct_backend("mpstab")
# Create a test circuit
circuit = Circuit(8)
circuit.add(gates.H(q) for q in range(8))
for q in range(8):
circuit.add(gates.RY(q, theta=0.3))
circuit.add(gates.CNOT(0, 1))
# Create a Hamiltonian with MPSTAB backend
hamiltonian = TFIM(nqubits=8, h=0.5, backend=mpstab_backend, dense=False)
# Compute expectation value
expectation = hamiltonian.expectation(circuit)
print(f" = {expectation}")
Benefits of Using MPSTAB as a Backend
--------------------------------------
- **Efficient Clifford Simulation**: Pure Clifford operations are handled with :math:`\mathcal{O}(n^2)` complexity using the Gottesman-Knill theorem. Note that Qibo currently supports a dedicated Clifford backend. If you plan to execute pure Clifford circuits with Qibo, we recommend using the dedicated backend.
- **Non-Clifford Support**: Unlike pure stabilizer backends, MPSTAB can handle arbitrary quantum gates through adaptive bond dimension truncation.
- **Seamless Integration**: Use MPSTAB wherever you would use any other Qibo backend—no code changes needed.
Comparing Results with Other Backends
--------------------------------------
You can easily compare MPSTAB results with other Qibo backends like the numpy (statevector) backend::
from qibo import construct_backend, Circuit, gates
from qibo.hamiltonians import TFIM
# Create backends
mpstab_backend = construct_backend("mpstab")
numpy_backend = construct_backend("numpy")
# Create circuit
circuit = Circuit(5)
circuit.add(gates.H(q) for q in range(5))
circuit.add(gates.RY(q, theta=0.2) for q in range(5))
# Compute with both backends
ham = TFIM(nqubits=5, h=0.5, backend=mpstab_backend, dense=False)
mpstab_result = ham.expectation(circuit)
ham_numpy = TFIM(nqubits=5, h=0.5, backend=numpy_backend, dense=False)
numpy_result = ham_numpy.expectation(circuit)
print(f"MPSTAB result: {mpstab_result}")
print(f"Numpy result: {numpy_result}")
print(f"Agreement: {abs(mpstab_result - numpy_result) < 1e-6}")