From 604c63748b8f9fc51bcc7319cbb0df718d06ca2e Mon Sep 17 00:00:00 2001 From: Fe-r-oz Date: Sun, 16 Mar 2025 11:55:40 +0500 Subject: [PATCH] add panqec --- CondaPkg.toml | 3 ++- README.md | 44 +++++++++++++++++++++++++++++++++++++++++++- src/PyQDecoders.jl | 6 ++++++ 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/CondaPkg.toml b/CondaPkg.toml index a8db9b1..9e38676 100644 --- a/CondaPkg.toml +++ b/CondaPkg.toml @@ -7,4 +7,5 @@ scipy = "" pymatching = "" ldpc = ">=2.2.8" sinter = ">=1.14" -stim = ">=1.14" \ No newline at end of file +stim = ">=1.14" +panqec = ">=0.1.7" diff --git a/README.md b/README.md index d64107b..19d92f6 100644 --- a/README.md +++ b/README.md @@ -99,4 +99,46 @@ julia> syndrome = PyArray(H)*error .% 2 julia> decoding = bpd.decode(np.array(syndrome)) Python: array([0, 1, 0]) -``` \ No newline at end of file +``` + +## panqec + +The python panqec module is immediately available: + +``` +julia> using PyQDecoders + +julia> PyQDecoders.panqec +Python: +``` + +Running the example from `panqec` [original tutorial](https://panqec.readthedocs.io/en/latest/tutorials/Panqec%20basics.html): + +``` +julia> using PyQDecoders: panqec, panqecdecoders + +julia> Toric2DCode = panqec.codes.Toric2DCode; + +julia> PauliErrorModel = panqec.error_models.PauliErrorModel; + +julia> MatchingDecoder = panqecdecoders.MatchingDecoder; + +julia> code = Toric2DCode(4) + +julia> error_model = PauliErrorModel(0.2, 0.3, 0.5) + +julia> p = 0.1 + +julia> decoder = MatchingDecoder(code, error_model, p) + +julia> errors = error_model.generate(code, p) + +julia> syndrome = code.measure_syndrome(errors) + +julia> println("Errors: ", errors) +Errors: [0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 + 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] + +julia> println("Syndrome: ", syndrome) +Syndrome: [0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0] +``` diff --git a/src/PyQDecoders.jl b/src/PyQDecoders.jl index 570fbca..d472ba3 100644 --- a/src/PyQDecoders.jl +++ b/src/PyQDecoders.jl @@ -7,6 +7,9 @@ const np = PythonCall.pynew() const pm = PythonCall.pynew() const ldpc = PythonCall.pynew() const ldpccodes = PythonCall.pynew() +const panqec = PythonCall.pynew() +const panqeccodes = PythonCall.pynew() +const panqecdecoders = PythonCall.pynew() function __init__() PythonCall.pycopy!(sp, PythonCall.pyimport("scipy")) @@ -15,6 +18,9 @@ function __init__() PythonCall.pycopy!(pm, PythonCall.pyimport("pymatching")) PythonCall.pycopy!(ldpc, PythonCall.pyimport("ldpc")) PythonCall.pycopy!(ldpccodes, PythonCall.pyimport("ldpc.codes")) + PythonCall.pycopy!(panqec, PythonCall.pyimport("panqec")) + PythonCall.pycopy!(panqeccodes, PythonCall.pyimport("panqec.codes")) + PythonCall.pycopy!(panqecdecoders, PythonCall.pyimport("panqec.decoders")) end end # module