LDPC Version 2: A C++ rewrite of the LDPCv1
package for decoding low density parity check checks.
Warning, whilst efforts have been made to provide backwards compatability with LDPCv1, the new version may introduce breaking changes.
The documentation for LDPCv2
can be found here
The easiest way to install the package is via pip. Python versions >=3.9
are supported.
pip install -U ldpc
The C++ source code can be found in src_cpp. Python bindings are implemented using Cython and can be found in src/ldpc. To install the Python version of the repository follows the instructions below:
python>=3.8
.
Note: installation requires a C
compiler. Eg. gcc
on Linux or clang
on Windows.git clone git@github.com:quantumgizmos/ldpc_v2.git
cd ldpc
pip install -Ue .
If your package requires LDPCv1, this can be installed from PyPi as follows:
pip install -U ldpc==0.1.60
GF2Sparse
. This is a more flexible implementation of the mod2sparse
data structure used in the LDPCv1. This will make it much easier to expand the package.LDPCv2
is still a work in progress. Ongoing projects are listed below:
Usage of the new BP+LSD decoder from https://arxiv.org/abs/2406.18655. Similar to BP+OSD, the LSD decoder can be applied to any parity check matrix. We recommend you start with lsd_order=0
. The speed/accuracy trade-off for higher order values can be explored from there. Example below:
import numpy as np
import ldpc.codes
from ldpc.bplsd_decoder import BpLsdDecoder
H = ldpc.codes.hamming_code(5)
## The
bp_osd = BpLsdDecoder(
H,
error_rate = 0.1,
bp_method = 'product_sum',
max_iter = 2,
schedule = 'serial',
lsd_method = 'lsd_cs',
lsd_order = 0
)
syndrome = np.random.randint(size=H.shape[0], low=0, high=2).astype(np.uint8)
print(f"Syndrome: {syndrome}")
decoding = bp_osd.decode(syndrome)
print(f"Decoding: {decoding}")
decoding_syndrome = H@decoding % 2
print(f"Decoding syndrome: {decoding_syndrome}")
If you use this software in your research please cite as follows:
@software{Roffe_LDPC_Python_tools_2022,
author = {Roffe, Joschka},
title = {{LDPC: Python tools for low density parity check codes}},
url = {https://pypi.org/project/ldpc/},
year = {2022}
}
If you have used the BP+OSD class for quantum error correction, please also cite the following paper:
@article{roffe_decoding_2020,
title={Decoding across the quantum low-density parity-check code landscape},
volume={2},
ISSN={2643-1564},
url={http://dx.doi.org/10.1103/PhysRevResearch.2.043423},
DOI={10.1103/physrevresearch.2.043423},
number={4},
journal={Physical Review Research},
publisher={American Physical Society (APS)},
author={Roffe, Joschka and White, David R. and Burton, Simon and Campbell, Earl},
year={2020},
month={Dec}
}