Decoders¶
A decoder in PECOS is simply a function or other callable that takes the measurement outcomes from error extractions (syndromes) as input and returns a QuantumCircuit
, which is used as a recovery operation to mitigate errors. Decoder classes and functions are in the decoders
namespace.
The MWPM2D
class is an available decoder class, which I will discuss next.
MWPM2D¶
One of the standard decoders used for surface codes is the minimum-weight-perfect-matching (MWPM) decoder [Den+02]. The MWPM2D
class implements the 2D version of this decoder for Surface4444
and SurfaceMedial4444
, that is, it decodes syndromes for a single round of error extraction:
>>> import pecos as pc
>>> depolar = pc.error_gens.DepolarGen(model_level='code_capacity')
>>> surface = pc.qeccs.Surface4444(distance=3)
>>> logic = pc.circuits.LogicalCircuit()
>>> logic.append(surface.gate('ideal init |0>'))
>>> logic.append(surface.gate('I', num_syn_extract=1))
>>> circ_runner = pc.circuit_runners.Standard(seed=1)
>>> state = circ_runner.init(surface.num_qudits)
>>> decode = pc.decoders.MWPM2D(surface).decode
>>> meas, err = circ_runner.run_logic(state, logic, error_gen=depolar, error_params={'p': 0.1})
>>> meas
{(1, 0): {7: {3: 1, 5: 1, 9: 1, 15: 1}}}
>>> err
{(1, 0): {0: {'after': QuantumCircuit([{'Y': {4}, 'X': {10}}])}}}
>>> decode(meas)
QuantumCircuit([{'X': {10}, 'Y': {4}}])