Skip to main content

qLDPC

This library contains tools for constructing and analyzing quantum low density parity check (qLDPC) codes. At least, that was the original motivation for this library. In practice, the tools here work just as well for error-correcting stabilizer and subsystem codes more broadly.

In a nutshell, qLDPC provides supports a variety of built-in codes and custom codes constructed from parity check matrices that represent stabilizer or gauge group generators. Once a code is constructed, qLDPC automates various tasks of common interest, and integrates with external tools for analyzing error-correcting codes (including QDistRnd, ldpc, stim, and sinter, among others). Automated tasks include:

  • constructing a canonical basis logical Pauli operators,
  • computing (or upper-bounding) code distance,
  • computing logical error rates in a code-capacity model,
  • constructing various circuits of interest, such as a quantum memory experiment for obtaining circuit-level logical error rates,
  • defining custom Pauli noise models,
  • plugging a decoder of choice into your workflow.

See the examples directory for some demonstrations and use-cases.

Where possible, this library strives to support codes over arbitrary finite (Galois) fields -- that is, for qudits of any prime power dimension. Circuit-related utilities are, however, limited to qubit codes.

📦 Installation

This library requires Python>=3.10, and can be installed from the Python Package Index (PyPI) with

pip install qldpc

To install a local version of qLDPC from source:

git clone https://github.com/qLDPCOrg/qLDPC.git
pip install -e qLDPC

You can also pip install -e 'qLDPC[dev]' to additionally install some development tools.

GAP

Some features in qLDPC require an installation of the GAP computer algebra system. If you (a) use linux or macOS, and (b) use a conda to manage your python environment, then you can obtain GAP by running conda install -c conda-forge gap (or gap-core). Installations without conda should also work, as long as gap is a recognized command in the command line. Unfortunately, I have not figured out how to install GAP in a qLDPC-compatible way on Windows. If you figure this out, please let me know!

macOS

If you use macOS you may need to install cvxpy manually by following the instructions here before installing qLDPC. If you use conda to manage your python environment, you can obtain cvxpy by running conda install -c conda-forge cvxpy.

🚀 Features

Notable features include:

  • ClassicalCode: class for representing classical linear error-correcting codes over finite fields.
  • QuditCode: class for constructing Galois-qudit codes, including both stabilizer and subsystem codes.
    • QuditCode.get_logical_ops: method to construct a complete basis of nontrivial logical Pauli operators for a QuditCode.
    • QuditCode.get_distance: method to compute the exact code distance of a QuditCode (i.e., the minimum weight of a nontrivial logical operator). Includes options to compute an upper bound on code distance using QDistRnd or (for CSS codes) a decoder-based method introduced in arXiv:2308.07915.
    • QuditCode.concatenate: method to concatenate QuditCodes in various ways.
  • CSSCode: subclass of QuditCode for the special case of constructing a quantum CSS code out of two mutually compatible ClassicalCodes. Special cases (subclasses) with specialized constructors and helper methods include:
  • decoders.py: module for decoding errors with various methods, including BP-OSD, BP-LSD, and belief-find (via ldpc), Relay-BP (via relay-bp), minimum-weight perfect matching (via pymatching), and others. Includes an interface for using custom decoders.
  • qldpc.circuits: module for stim circuits and circuit utilities, including:
    • get_memory_experiment: circuit for testing the performance of a code as a quantum memory. Accepts both predefined and custom-built SyndromeMeasurementStrategys.
    • NoiseModel: class for constructing expressive Pauli noise models, which map noiseless circuits to noisy circuits. Built-in subclasses include a single-parameter DepolarizingNoiseModel and a superconducting-inspired SI1000NoiseModel.
    • SinterDecoder: class to construct circuit-level decoders that are usable by sinter.
    • get_encoding_circuit: circuit to prepare the all-|0> logical state of a code. (Warning: generally not fault-tolerant. Fault-tolerant encoding circuits pending.)
    • get_transversal_ops: logical tableaus and physical circuits for the SWAP-transversal logical Clifford gates of a code, constructed via the code automorphism method of arXiv:2409.18175. (Warning: exponential complexity.)
    • get_transversal_circuits: find a SWAP-transversal physical circuit (if any) that implements a given logical Clifford operation in a code. (Warning: exponential complexity.)
  • abstract.py: module for abstract algebra (groups, algebras, modules, and representations thereof).
  • objects.py: module for constructing helper objects such as Cayley complexes and chain complexes, which are instrumental for the construction of various quantum codes.

🤔 Questions and issues

This project aspires to have a documentation page, but at the moment the documentation is out of date and auto-generated from source code that was written to be human-readable in a plain text editor. For now, I recommend looking at the source code (and comments therein) directly, as well as the examples directory. Test files (such as qldpc/codes/quantum_test.py) also contain some examples of using the classes and methods in this library.

If you have any questions, feedback, or requests, please open an issue on GitHub or email me at mika.perlin@gmail.com!

⚓ Attribution

If you use this software in your work, please cite with:

@misc{perlin2023qldpc,
  author = {Perlin, Michael A.},
  title = {{qLDPC}},
  year = {2023},
  publisher = {GitHub},
  journal = {GitHub repository},
  howpublished = {\url{https://github.com/qLDPCOrg/qLDPC}},
}

This may require adding \usepackage{url} to your LaTeX file header. Alternatively, you can cite

Michael A. Perlin. qLDPC. https://github.com/qLDPCOrg/qLDPC, 2023.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

qldpc-0.2.1.tar.gz (142.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

qldpc-0.2.1-py3-none-any.whl (171.5 kB view details)

Uploaded Python 3

File details

Details for the file qldpc-0.2.1.tar.gz.

File metadata

  • Download URL: qldpc-0.2.1.tar.gz
  • Upload date:
  • Size: 142.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.13.1 Darwin/24.6.0

File hashes

Hashes for qldpc-0.2.1.tar.gz
Algorithm Hash digest
SHA256 14eeab4273c0e93c906c6b8dd222aca3d3213c9abe9ebeb1d1d590f35227797f
MD5 a17c8ba44f19610a8822a7c01d93d547
BLAKE2b-256 1dc4a3764d08db475d7daed4f71fd50409baa2570e453c4817648699f5c9c937

See more details on using hashes here.

File details

Details for the file qldpc-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: qldpc-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 171.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.13.1 Darwin/24.6.0

File hashes

Hashes for qldpc-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 bde10960854c31c116be1cb06a2df79c543e1409e614d572b818e26b8bb2c78a
MD5 5951579d01963364d382a02cfe54c85a
BLAKE2b-256 096410c2ffecc34be274b9752494bf63070e00acb79fed320e0f29cca0592935

See more details on using hashes here.

Release history Release notifications | RSS feed

0.3.3

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

0.2.9

2 files

0.2.8

2 files

0.2.7

2 files

0.2.6

2 files

0.2.5

2 files

0.2.4

2 files

0.2.3

2 files

This release

0.2.1 This release

2 files

0.2.0

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

0.0.29

2 files

0.0.28

2 files

0.0.27

2 files

0.0.26

2 files

0.0.25

2 files

0.0.24

2 files

0.0.23

2 files

0.0.22

2 files

0.0.21

2 files

0.0.20

2 files

0.0.19

2 files

0.0.18

2 files

0.0.17

2 files

0.0.16

2 files

0.0.15

2 files

0.0.14

2 files

0.0.13

2 files

0.0.12

2 files

0.0.11

2 files

0.0.10

2 files

0.0.9

2 files

0.0.8

2 files

0.0.7

2 files

0.0.6

2 files

0.0.5

2 files

0.0.4

2 files

0.0.3

2 files

0.0.2

2 files

0.0.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page