Stim backend for Graphix
August 18, 2025 ยท View on GitHub
graphix-stim-backend is a plugin for the
Graphix library that
efficiently simulates Clifford patterns using the
Stim library.
It is distributed as a separate plugin because it depends on Stim.
Installation
pip install https://github.com/thierry-martinez/graphix-stim-backend.git
Usage
Simulate a Clifford pattern
from graphix import Pattern, command
from graphix.fundamentals import Plane
from graphix_stim_backend import StimBackend
pattern = Pattern(input_nodes=[0])
pattern.add(command.N(node=1))
pattern.add(command.E(nodes=(0, 1)))
pattern.add(command.M(node=0, plane=Plane.XY, angle=0.5))
pattern.simulate_pattern(backend=StimBackend())
Simulate a Clifford pattern with noise
from numpy.random import Generator
from graphix.noise_models.depolarising import DepolarisingNoiseModel
rng = Generator()
noise_model = DepolarisingNoiseModel(measure_error_prob=rng.random())
pattern.simulate_pattern(backend=StimBackend(), noise_model=noise_model)
Presimulate the Clifford part of a pattern with Stim
from numpy.random import Generator
from graphix.random_objects import rand_circuit
from graphix_stim_backend import presimulate_pauli
nqubits = 4
depth = 4
rng = Generator()
circuit = rand_circuit(nqubits, depth, rng)
pattern = circuit.transpile().pattern
pattern2 = presimulate_pauli(pattern, leave_input=False)
Simulate a Clifford pattern with many shots
from graphix import Pattern, command
from graphix.fundamentals import Plane
from graphix_stim_backend import BasicState, pattern_to_stim_circuit
pattern = Pattern(input_nodes=[0])
pattern.add(command.N(node=1))
pattern.add(command.E(nodes=(0, 1)))
pattern.add(command.M(node=0, plane=Plane.XY, angle=0.5))
stim_circuit, measure_indices = pattern_to_stim_circuit(
pattern,
input_state={0: BasicState.ZERO},
)
sample = stim_circuit.compile_sampler().sample(shots=1000)