Evaluating an ECC code and decoders

The documentation is incomplete

While waiting for a better documentation than the small example below, consider looking into evaluate_decoder, TableDecoder, BeliefPropDecoder, PyBeliefPropDecoder, PyMatchingDecoder, CommutationCheckECCSetup, NaiveSyndromeECCSetup, ShorSyndromeECCSetup

This is a quick and durty example on how to use some of the decoders.

A function to plot the results of

using CairoMakiefunction make_decoder_figure(phys_errors, results, title="")    minlim = min(minimum(phys_errors),minimum(results[results.!=0]))    maxlim = min(1, max(maximum(phys_errors),maximum(results[results.!=0])))    fresults = copy(results)    fresults[results.==0] .= NaN    f = Figure()    a = Axis(f[1,1],        xscale=log10, yscale=log10,        limits=(minlim,maxlim,minlim,maxlim),        aspect=DataAspect(),        xlabel="physical error rate",        ylabel="logical error rate",        title=title)    lines!(a, [minlim,maxlim],[minlim,maxlim], color=:black)    for (i,sresults) in enumerate(eachslice(fresults, dims=1))        scatter!(a, phys_errors, sresults[:,1], marker=:+, color=Cycled(i))        scatter!(a, phys_errors, sresults[:,2], marker=:x, color=Cycled(i))    end    fend
make_decoder_figure (generic function with 2 methods)

Testing out a lookup table decoder on a small code.

using QuantumCliffordusing QuantumClifford.ECCmem_errors = 0.001:0.0005:0.01codes = [Shor9()]results = zeros(length(codes), length(mem_errors), 2)for (ic, c) in pairs(codes)    for (i,m) in pairs(mem_errors)        setup = CommutationCheckECCSetup(m)        decoder = TableDecoder(c)        r = evaluate_decoder(decoder, setup, 10000)        results[ic,i,:] .= r    endendmake_decoder_figure(mem_errors, results, "Shor's code with a lookup table decoder")
Example block output

Testing out the toric code with a decoder provided by the python package pymatching (provided in julia by the meta package PyQDecoders.jl).

import PyQDecodersmem_errors = 0.001:0.005:0.1codes = [Toric(4,4), Toric(6,6)]results = zeros(length(codes), length(mem_errors), 2)for (ic, c) in pairs(codes)    for (i,m) in pairs(mem_errors)        setup = ShorSyndromeECCSetup(m, 0)        decoder = PyMatchingDecoder(c)        r = evaluate_decoder(decoder, setup, 1000)        results[ic,i,:] .= r    endendmake_decoder_figure(mem_errors, results, "Toric code with a MWPM decoder")
Example block output