Skip to main content

A package for decoding quantum error correcting codes using minimum-weight perfect matching.

Project description

PyMatching 2

Continuous Integration codecov docs PyPI version Unitary Fund

PyMatching is a fast Python/C++ library for decoding quantum error correcting (QEC) codes using the Minimum Weight Perfect Matching (MWPM) decoder. Given the syndrome measurements from a quantum error correction circuit, the MWPM decoder finds the most probable set of errors, given the assumption that error mechanisms are independent, as well as graphlike (each error causes either one or two detection events). The MWPM decoder is the most popular decoder for decoding surface codes, and can also be used to decode various other code families, including subsystem codes, honeycomb codes and 2D hyperbolic codes.

Version 2 includes a new implementation of the blossom algorithm which is 100-1000x faster than previous versions of PyMatching. PyMatching can be configured using arbitrary weighted graphs, with or without a boundary, and can be combined with Craig Gidney's Stim library to simulate and decode error correction circuits in the presence of circuit-level noise. The sinter package combines Stim and PyMatching to perform fast, parallelised monte-carlo sampling of quantum error correction circuits.

Documentation for PyMatching can be found at: pymatching.readthedocs.io

To see how stim, sinter and pymatching can be used to estimate the threshold of an error correcting code with circuit-level noise, try out the stim getting started notebook.

The new >100x faster implementation for Version 2

Version 2 features a new implementation of the blossom algorithm, which I wrote with Craig Gidney. Our new implementation, which we refer to as the sparse blossom algorithm, can be seen as a generalisation of the blossom algorithm to handle the decoding problem relevant to QEC. We solve the problem of finding minimum-weight paths between detection events in a detector graph directly, which avoids the need to use costly all-to-all Dijkstra searches to find a MWPM in a derived graph using the original blossom algorithm. The new version is also exact - unlike previous versions of PyMatching, no approximation is made.

Our new implementation is over 100x faster than previous versions of PyMatching, and is over 100,000x faster than NetworkX (benchmarked with surface code circuits). At 0.1% circuit-noise, PyMatching can decode both X and Z basis measurements of surface code circuits up to distance 17 in under 1 microsecond per round of syndrome extraction on a single core. Furthermore, the runtime is roughly linear in the number of nodes in the graph.

The plot below compares the performance of PyMatching v2 with the previous version (v0.7) as well as with NetworkX for decoding surface code circuits with circuit-level depolarising noise. All decoders were run on a single core of an M1 processor, processing both the X and Z basis measurements. The equations T=N^x in the legend (and plotted as dashed lines) are obtained from a fit to the same dataset for distance > 10, where N is the number of detectors (nodes) per round, and T is the decoding time per round. See the benchmarks folder in the repository for the data and stim circuits, as well as additional benchmarks.

PyMatching new vs old vs NetworkX

Sparse blossom is conceptually similar to the approach described in this paper by Austin Fowler, although our approach differs in many of the details (which will be explained in our upcoming paper). There are even more similarities with the very nice independent work by Yue Wu, who recently released the fusion-blossom library. One of the differences with our approach is that fusion-blossom grows the exploratory regions of alternating trees in a similar way to how clusters are grown in Union-Find, whereas our approach instead progresses along a timeline, and uses a global priority queue to grow alternating trees. Yue also has a paper coming soon, so stay tuned for that as well.

Installation

The latest version of PyMatching can be downloaded and installed from PyPI with the command:

pip install pymatching --upgrade

Usage

PyMatching can load matching graphs from a check matrix, a stim.DetectorErrorModel, a networkx.Graph, a retworkx.PyGraph or by adding edges individually with pymatching.Matching.add_edge and pymatching.Matching.add_boundary_edge.

Decoding Stim circuits

PyMatching can be combined with Stim. Generally, the easiest and fastest way to do this is using sinter (use v1.10.0 or later), which uses PyMatching and Stim to run parallelised monte carlo simulations of quantum error correction circuits. However, in this section we will use Stim and PyMatching directly, to demonstrate how their Python APIs can be used. To install stim, run pip install stim --upgrade.

First, we generate a stim circuit. Here, we use a surface code circuit included with stim:

import numpy as np
import stim
import pymatching
circuit = stim.Circuit.generated("surface_code:rotated_memory_x", 
                                 distance=5, 
                                 rounds=5, 
                                 after_clifford_depolarization=0.005)

Next, we use stim to generate a stim.DetectorErrorModel (DEM), which is effectively a Tanner graph describing the circuit-level noise model. By setting decompose_errors=True, stim decomposes all error mechanisms into edge-like error mechanisms (which cause either one or two detection events). This ensures that our DEM is graphlike, and can be loaded by pymatching:

model = circuit.detector_error_model(decompose_errors=True)
matching = pymatching.Matching.from_detector_error_model(model)

Next, we will sample 1000 shots from the circuit. Each shot (a row of shots) contains the full syndrome (detector measurements), as well as the logical observable measurements, from simulating the noisy circuit:

sampler = circuit.compile_detector_sampler()
syndrome, actual_observables = sampler.sample(shots=1000, separate_observables=True)

Now we can decode! We compare PyMatching's predictions of the logical observables with the actual observables sampled with stim, in order to count the number of mistakes and estimate the logical error rate:

num_errors = 0
for i in range(syndrome.shape[0]):
    predicted_observables = matching.decode(syndrome[i, :])
    num_errors += not np.array_equal(actual_observables[i, :], predicted_observables)

print(num_errors)  # prints 8

As of PyMatching v2.1.0, you can use matching.decode_batch to decode a batch of shots instead. Since matching.decode_batch iterates over the shots in C++, it's faster than iterating over calls to matching.decode in Python. The following cell is therefore a faster equivalent to the cell above:

predicted_observables = matching.decode_batch(syndrome)
num_errors = np.sum(np.any(predicted_observables != actual_observables, axis=1))

print(num_errors)  # prints 8

Loading from a parity check matrix

We can also load a pymatching.Matching object from a binary parity check matrix, another representation of a Tanner graph. Each row in the parity check matrix H corresponds to a parity check, and each column corresponds to an error mechanism. The element H[i,j] of H is 1 if parity check i is flipped by error mechanism j, and 0 otherwise. To be used by PyMatching, the error mechanisms in H must be graphlike. This means that each column must contain either one or two 1s (if a column has a single 1, it represents a half-edge connected to the boundary).

We can give each edge in the graph a weight, by providing PyMatching with a weights numpy array. Element weights[j] of the weights array sets the edge weight for the edge corresponding to column j of H. If the error mechanisms are treated as independent, then we typically want to set the weight of edge j to the log-likelihood ratio log((1-p_j)/p_j), where p_j is the error probability associated with edge j. With this setting, PyMatching will find the most probable set of error mechanisms, given the syndrome.

With PyMatching configured using H and weights, decoding a binary syndrome vector syndrome (a numpy array of length H.shape[0]) corresponds to finding a set of errors defined in a binary predictions vector satisfying H@predictions % 2 == syndrome while minimising the total solution weight predictions@weights.

In quantum error correction, rather than predicting which exact set of error mechanisms occurred, we typically want to predict the outcome of logical observable measurements, which are the parities of error mechanisms. These can be represented by a binary matrix observables. Similar to the check matrix, observables[i,j] is 1 if logical observable i is flipped by error mechanism j. For example, suppose our syndrome syndrome, was the result of a set of errors noise (a binary array of length H.shape[1]), such that syndrome = H@noise % 2. Our decoding is successful if observables@noise % 2 == observables@predictions % 2.

Putting this together, we can decode a distance 5 repetition code as follows:

import numpy as np
from scipy.sparse import csc_matrix
import pymatching
H = csc_matrix([[1, 1, 0, 0, 0],
                 [0, 1, 1, 0, 0],
                 [0, 0, 1, 1, 0],
                 [0, 0, 0, 1, 1]])
weights = np.array([4, 3, 2, 3, 4])   # Set arbitrary weights for illustration
matching = pymatching.Matching(H, weights=weights)
prediction = matching.decode(np.array([0, 1, 0, 1]))
print(prediction)  # prints: [0 0 1 1 0]
# Optionally, we can return the weight as well:
prediction, solution_weight = matching.decode(np.array([0, 1, 0, 1]), return_weight=True)
print(prediction)  # prints: [0 0 1 1 0]
print(solution_weight)  # prints: 5.0

And in order to estimate the logical error rate for a physical error rate of 10%, we can sample as follows:

import numpy as np
from scipy.sparse import csc_matrix
import pymatching
H = csc_matrix([[1, 1, 0, 0, 0],
                [0, 1, 1, 0, 0],
                [0, 0, 1, 1, 0],
                [0, 0, 0, 1, 1]])
observables = csc_matrix([[1, 0, 0, 0, 0]])
error_probability = 0.1
weights = np.ones(H.shape[1]) * np.log((1-error_probability)/error_probability)
matching = pymatching.Matching.from_check_matrix(H, weights=weights)
num_shots = 1000
num_errors = 0
for i in range(num_shots):
    noise = (np.random.random(H.shape[1]) < error_probability).astype(np.uint8)
    syndrome = H@noise % 2
    prediction = matching.decode(syndrome)
    predicted_observables = observables@prediction % 2
    actual_observables = observables@noise % 2
    num_errors += not np.array_equal(predicted_observables, actual_observables)
print(num_errors)  # prints 4

Note that we can also ask PyMatching to predict the logical observables directly, by supplying them to the faults_matrix argument when constructing the pymatching.Matching object. This allows the decoder to make some additional optimisations, that speed up the decoding procedure a bit. The following example uses this approach, and is equivalent to the example above:

import numpy as np
from scipy.sparse import csc_matrix
import pymatching

H = csc_matrix([[1, 1, 0, 0, 0],
                [0, 1, 1, 0, 0],
                [0, 0, 1, 1, 0],
                [0, 0, 0, 1, 1]])
observables = csc_matrix([[1, 0, 0, 0, 0]])
error_probability = 0.1
weights = np.ones(H.shape[1]) * np.log((1-error_probability)/error_probability)
matching = pymatching.Matching.from_check_matrix(H, weights=weights, faults_matrix=observables)
num_shots = 1000
num_errors = 0
for i in range(num_shots):
    noise = (np.random.random(H.shape[1]) < error_probability).astype(np.uint8)
    syndrome = H@noise % 2
    predicted_observables = matching.decode(syndrome)
    actual_observables = observables@noise % 2
    num_errors += not np.array_equal(predicted_observables, actual_observables)

print(num_errors)  # prints 6

We'll make one more optimisation, which is to use matching.decode_batch to decode the batch of shots, rather than iterating over calls to matching.decode in Python:

import numpy as np
from scipy.sparse import csc_matrix
import pymatching

H = csc_matrix([[1, 1, 0, 0, 0],
                [0, 1, 1, 0, 0],
                [0, 0, 1, 1, 0],
                [0, 0, 0, 1, 1]])
observables = csc_matrix([[1, 0, 0, 0, 0]])
error_probability = 0.1
num_shots = 1000
weights = np.ones(H.shape[1]) * np.log((1-error_probability)/error_probability)
matching = pymatching.Matching.from_check_matrix(H, weights=weights, faults_matrix=observables)
noise = (np.random.random((num_shots, H.shape[1])) < error_probability).astype(np.uint8)
shots = (noise @ H.T) % 2
actual_observables = (noise @ observables.T) % 2
predicted_observables = matching.decode_batch(shots)
num_errors = np.sum(np.any(predicted_observables != actual_observables, axis=1))
print(num_errors)  # prints 6

Instead of using a check matrix, the Matching object can also be constructed using the Matching.add_edge and Matching.add_boundary_edge methods, or by loading from a NetworkX or retworkx graph.

For more details on how to use PyMatching, see the documentation.

Attribution

A paper on our new implementation used in PyMatching version 2 (sparse blossom) will be published soon. In the meantime, please cite:

@misc{pymatchingv2,
  author = {Higgott, Oscar and Gidney, Craig},
  title = {PyMatching v2},
  year = {2022},
  publisher = {GitHub},
  journal = {GitHub repository},
  howpublished = {\url{https://github.com/oscarhiggott/PyMatching}}
}

Note: the existing PyMatching paper descibes the implementation in version 0.7 and earlier of PyMatching (not v2).

Acknowledgements

We are grateful to the Google Quantum AI team for supporting the development of PyMatching v2. Earlier versions of PyMatching were supported by Unitary Fund and EPSRC.

Project details


Download files

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

Source Distribution

PyMatching-2.1.0.tar.gz (310.1 kB view details)

Uploaded Source

Built Distributions

PyMatching-2.1.0-cp311-cp311-win_amd64.whl (325.6 kB view details)

Uploaded CPython 3.11 Windows x86-64

PyMatching-2.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (663.6 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

PyMatching-2.1.0-cp311-cp311-macosx_11_0_arm64.whl (428.5 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

PyMatching-2.1.0-cp311-cp311-macosx_10_15_x86_64.whl (464.2 kB view details)

Uploaded CPython 3.11 macOS 10.15+ x86-64

PyMatching-2.1.0-cp311-cp311-macosx_10_15_universal2.whl (865.8 kB view details)

Uploaded CPython 3.11 macOS 10.15+ universal2 (ARM64, x86-64)

PyMatching-2.1.0-cp310-cp310-win_amd64.whl (325.6 kB view details)

Uploaded CPython 3.10 Windows x86-64

PyMatching-2.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (663.7 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

PyMatching-2.1.0-cp310-cp310-macosx_11_0_arm64.whl (428.5 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

PyMatching-2.1.0-cp310-cp310-macosx_10_15_x86_64.whl (464.3 kB view details)

Uploaded CPython 3.10 macOS 10.15+ x86-64

PyMatching-2.1.0-cp310-cp310-macosx_10_15_universal2.whl (865.8 kB view details)

Uploaded CPython 3.10 macOS 10.15+ universal2 (ARM64, x86-64)

PyMatching-2.1.0-cp39-cp39-win_amd64.whl (324.6 kB view details)

Uploaded CPython 3.9 Windows x86-64

PyMatching-2.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (663.6 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

PyMatching-2.1.0-cp39-cp39-macosx_11_0_arm64.whl (428.6 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

PyMatching-2.1.0-cp39-cp39-macosx_10_15_x86_64.whl (464.4 kB view details)

Uploaded CPython 3.9 macOS 10.15+ x86-64

PyMatching-2.1.0-cp39-cp39-macosx_10_15_universal2.whl (866.0 kB view details)

Uploaded CPython 3.9 macOS 10.15+ universal2 (ARM64, x86-64)

PyMatching-2.1.0-cp38-cp38-win_amd64.whl (325.6 kB view details)

Uploaded CPython 3.8 Windows x86-64

PyMatching-2.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (663.2 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

PyMatching-2.1.0-cp38-cp38-macosx_11_0_arm64.whl (428.5 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

PyMatching-2.1.0-cp38-cp38-macosx_10_15_x86_64.whl (464.2 kB view details)

Uploaded CPython 3.8 macOS 10.15+ x86-64

PyMatching-2.1.0-cp38-cp38-macosx_10_15_universal2.whl (865.8 kB view details)

Uploaded CPython 3.8 macOS 10.15+ universal2 (ARM64, x86-64)

PyMatching-2.1.0-cp37-cp37m-win_amd64.whl (326.0 kB view details)

Uploaded CPython 3.7m Windows x86-64

PyMatching-2.1.0-cp37-cp37m-win32.whl (285.1 kB view details)

Uploaded CPython 3.7m Windows x86

PyMatching-2.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (666.1 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

PyMatching-2.1.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl (724.6 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686

PyMatching-2.1.0-cp37-cp37m-macosx_10_15_x86_64.whl (462.1 kB view details)

Uploaded CPython 3.7m macOS 10.15+ x86-64

PyMatching-2.1.0-cp36-cp36m-win_amd64.whl (325.9 kB view details)

Uploaded CPython 3.6m Windows x86-64

PyMatching-2.1.0-cp36-cp36m-win32.whl (285.1 kB view details)

Uploaded CPython 3.6m Windows x86

PyMatching-2.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (666.1 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ x86-64

PyMatching-2.1.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl (724.4 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ i686

PyMatching-2.1.0-cp36-cp36m-macosx_10_15_x86_64.whl (462.0 kB view details)

Uploaded CPython 3.6m macOS 10.15+ x86-64

File details

Details for the file PyMatching-2.1.0.tar.gz.

File metadata

  • Download URL: PyMatching-2.1.0.tar.gz
  • Upload date:
  • Size: 310.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for PyMatching-2.1.0.tar.gz
Algorithm Hash digest
SHA256 c1fef049febc5b04b415234c64a5fee4f28a0f9c5f66d1f7f7ae81dfd79e4987
MD5 f5ea8295c6086e3049915b2c936e270c
BLAKE2b-256 290916a1770fbe1beb9660e8dd01727172fe0b051ef20d4777454e5730c02309

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: PyMatching-2.1.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 325.6 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for PyMatching-2.1.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 0782f34d2ed1331e593197969956bae4273b0cb778c76707ad46e5d813755e52
MD5 0465c025b4055581cff07711d184daa6
BLAKE2b-256 86c46e1fae2cca5b63a003b17169be07bfb15c51b446d6939c0870af8d86b316

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for PyMatching-2.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8fb13ece67ad2d204a095f31a030cfb4eeb02f9b35b1b15fddef13e8195ef522
MD5 b4b1e34b9eb373d0a7808848248b4458
BLAKE2b-256 7a219e067ec3eca81bdb95ea3cad4e0638dd0a598dd17ba633addecc77637698

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

  • Download URL: PyMatching-2.1.0-cp311-cp311-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 428.5 kB
  • Tags: CPython 3.11, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for PyMatching-2.1.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2ba82abae1234328befef97ecfc38acadcc6b23b98a0ff69639fdd970d1a4909
MD5 35b703e42fa5cd1c932c01596a51a66c
BLAKE2b-256 48e3af3892a4f9c176433d3b1d2f5c5c1035f6bbf244376108f821ea17212f92

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp311-cp311-macosx_10_15_x86_64.whl.

File metadata

  • Download URL: PyMatching-2.1.0-cp311-cp311-macosx_10_15_x86_64.whl
  • Upload date:
  • Size: 464.2 kB
  • Tags: CPython 3.11, macOS 10.15+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for PyMatching-2.1.0-cp311-cp311-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 b4d5338e3328d405bf226a682d49b5aa37ef5349e10129955b68dca0b4c33ed9
MD5 ce8cb49f2580c91b6419374aa7e7ddbd
BLAKE2b-256 cb250e534e1bd045853ced72bfd76d3bb89d02e543efec411fcf6f6f2b10c4b8

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp311-cp311-macosx_10_15_universal2.whl.

File metadata

  • Download URL: PyMatching-2.1.0-cp311-cp311-macosx_10_15_universal2.whl
  • Upload date:
  • Size: 865.8 kB
  • Tags: CPython 3.11, macOS 10.15+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for PyMatching-2.1.0-cp311-cp311-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 ce6987ad84ef19dc4eaeb460e53f045a951e43742dac67a3cc1a5c6d50fc320c
MD5 99248ca744d0dcdeb5772a54d472edb6
BLAKE2b-256 71ad054e9146205c38e9d886e90ae4db9d072b2307c7984a1b5834991edfebfc

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: PyMatching-2.1.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 325.6 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for PyMatching-2.1.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 5181ce33f95dc33fd64cde1fe9d626a2ecf27ef9080b8fc92803acbcb770fc0a
MD5 ce71e19944d2a81846963ac35560e4e9
BLAKE2b-256 0b1aca75828b0b269fb8c11bd25753da32dcb4792a680a8181362040473b6d1e

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for PyMatching-2.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e3097041d1efc2934fb4c0e16edb388f8e84d7d5dd7bc21d53fd0d96ed8eb0ea
MD5 d46bb5646381bfc0057c1ddd4c1dbe2a
BLAKE2b-256 dfa04d0385792a65a5cd148347dda0b55507e84b50c2a750ace090a51964516e

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

  • Download URL: PyMatching-2.1.0-cp310-cp310-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 428.5 kB
  • Tags: CPython 3.10, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for PyMatching-2.1.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 82da39eed6011b1055232cad52c6e1f5e193df802de467502b261378bc2d2104
MD5 1dc24eb9aae97b06bd4fb59e86b5153b
BLAKE2b-256 e8890681444bc51156a003e64689449960554330e7dbd5c383ac6e6a9116335a

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp310-cp310-macosx_10_15_x86_64.whl.

File metadata

  • Download URL: PyMatching-2.1.0-cp310-cp310-macosx_10_15_x86_64.whl
  • Upload date:
  • Size: 464.3 kB
  • Tags: CPython 3.10, macOS 10.15+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for PyMatching-2.1.0-cp310-cp310-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 5d177de1c612e38078d6a551d6a766203341a7ca4a95587e7dc1643f61d4dff5
MD5 fd0266ff27038f7c468ca103c5b028d2
BLAKE2b-256 9d8975c7cc95e763394896b707f2130b5050f80d4f939d1961138f9114a375c0

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp310-cp310-macosx_10_15_universal2.whl.

File metadata

  • Download URL: PyMatching-2.1.0-cp310-cp310-macosx_10_15_universal2.whl
  • Upload date:
  • Size: 865.8 kB
  • Tags: CPython 3.10, macOS 10.15+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for PyMatching-2.1.0-cp310-cp310-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 ab4ae5abefead03ca231e50de1408197364cd69aeca17cf3dec9a8b5a9196de9
MD5 1a972f81846bcf3056252d5ab1adc30f
BLAKE2b-256 3ba308fabdf4b4b08259ab5901cccab5bb61777bfb77a570c0233c4273bb5e03

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: PyMatching-2.1.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 324.6 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for PyMatching-2.1.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 61967336d49c621069e74673c23e8c22208543361a5ada209936e0120b9f580e
MD5 40de68a603e0eea0f8b7f34261eb5ec7
BLAKE2b-256 fa914bbbddf80a2da5a9926abf737f408455424e0b1d5ef273d0a492d1f17e36

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for PyMatching-2.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e5eff8460b278fcc9fe56da9c6e2b9d2715de07ed5dcc8b39f2996de14c841e1
MD5 b2e3cd7edf65a3fa2f2d80e56047906e
BLAKE2b-256 af5343ee2877a543712a5df52fc40b2459a3634f911182639d8a5d041ec89f31

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

  • Download URL: PyMatching-2.1.0-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 428.6 kB
  • Tags: CPython 3.9, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for PyMatching-2.1.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e5905b17af054c65b594e937ba80dd1889aa9f9ed0d094f4fa10047c0130e039
MD5 d504c094ebd5f209cb32a170b13d61a2
BLAKE2b-256 bdc489773eca034b5dc559d35d82a72d91cbb7953882381fc543cad0a8cab13c

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp39-cp39-macosx_10_15_x86_64.whl.

File metadata

  • Download URL: PyMatching-2.1.0-cp39-cp39-macosx_10_15_x86_64.whl
  • Upload date:
  • Size: 464.4 kB
  • Tags: CPython 3.9, macOS 10.15+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for PyMatching-2.1.0-cp39-cp39-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 0a02e03418f79131727d7790cdb35e7a2724e29281831881f7a6727689419c0f
MD5 4410a2d72a5d62874e257101359a40ed
BLAKE2b-256 d7837682cd8a8f27d15d024dfecca586f5e20a2b4378e8c26e1688ae8d2b1dfa

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp39-cp39-macosx_10_15_universal2.whl.

File metadata

  • Download URL: PyMatching-2.1.0-cp39-cp39-macosx_10_15_universal2.whl
  • Upload date:
  • Size: 866.0 kB
  • Tags: CPython 3.9, macOS 10.15+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for PyMatching-2.1.0-cp39-cp39-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 1d85c122c70db3c0866ecc128224147e10e8a18489fa5b86a68874db96537550
MD5 bcfeaf095af2c7b9d416ed488d3d36b7
BLAKE2b-256 cf6b0b44c92997044dd95535bbecaf50ba62cf0ab40760d56bb3a6fadbd9def0

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: PyMatching-2.1.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 325.6 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for PyMatching-2.1.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 8b5c6a45f3a0026960a5cc9e5b838ecb27c0b70f85109fc41d2f16368259c542
MD5 1894b10575cb7cbcf567cc4598956934
BLAKE2b-256 f7977de6ea9704f7a515a51910b82acf2794ab642283667f3c7675134afd27eb

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for PyMatching-2.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0c38d84a843dc902bc50a898598e0ecfad2f9d5ece5bc007bce7efa424f97216
MD5 b8bd97bc1497d7a6414a81de77b5da70
BLAKE2b-256 7e07b7f46d0015e2e10dd803bf6face0440970ddb3d223130003a7ecd0e090dd

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

  • Download URL: PyMatching-2.1.0-cp38-cp38-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 428.5 kB
  • Tags: CPython 3.8, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for PyMatching-2.1.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bab8d89d4a488cb0e98dbc4405ee0d0dbba4dee523641dc6004a80443e9fa593
MD5 5ae23f17fdb6ad0bcc67cd52353f0b17
BLAKE2b-256 8309ac80cb3afc0aeddce04cfca8f98a1ebc072539671d248baa879f3eaf59c9

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp38-cp38-macosx_10_15_x86_64.whl.

File metadata

  • Download URL: PyMatching-2.1.0-cp38-cp38-macosx_10_15_x86_64.whl
  • Upload date:
  • Size: 464.2 kB
  • Tags: CPython 3.8, macOS 10.15+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for PyMatching-2.1.0-cp38-cp38-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 b6e59711e78e282f087c6759010bb321a85f13129bec276a4444084a9ab6c742
MD5 dcbc5b59f5211b04a9ad863c500f7a10
BLAKE2b-256 4de2cc04d6f4e6e7917c317c949bb7f88b5235504c0080b4f326cc4472f176fb

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp38-cp38-macosx_10_15_universal2.whl.

File metadata

  • Download URL: PyMatching-2.1.0-cp38-cp38-macosx_10_15_universal2.whl
  • Upload date:
  • Size: 865.8 kB
  • Tags: CPython 3.8, macOS 10.15+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for PyMatching-2.1.0-cp38-cp38-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 d73e3a480eb6d9bdac5b11d863864cfbb136d94ae160082391042e631e19ab4d
MD5 200daa9cd4b1bd41d257b12bd07f0c4a
BLAKE2b-256 edf7300bd273a356e6b346d6f71d03bd41a8b01fd38236ceb0b353f0368bd09f

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: PyMatching-2.1.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 326.0 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for PyMatching-2.1.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 8c4ee8c007e6ba4ebdec70432570075e0af1ce98f2f34948fff564893ff975dd
MD5 fac39790e737ca0d0dfba77a90300d58
BLAKE2b-256 16253fdc2d563c9e50712d7843162f11ed78cedb40901618a015bf394985520d

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp37-cp37m-win32.whl.

File metadata

  • Download URL: PyMatching-2.1.0-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 285.1 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for PyMatching-2.1.0-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 a8d17c2b53a19edbab9ba15e7bd6e56df71b3069f76d79a941b4041e386d0ddc
MD5 022e919fbc76828e6060aadfa3ee76f7
BLAKE2b-256 5eaa390fdbcc4c778dc03c50585bbb6ca8a46229486607235a28f6e08c96a8c2

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for PyMatching-2.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 790e58ba1fd2569ea22329da72de0386d84517a5b8af89374866a58051e1e2cb
MD5 0f545d8d131a10efdfcb0de1b570ab2f
BLAKE2b-256 f3f53576c46c7284135c40f6ce60cdc68e6b8f2dbf931fb7d6db7c047655257c

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for PyMatching-2.1.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 fb793f4d560210b187dc398729ad7fbcb1d1d4d71bb443fdae01ffe6707f09ab
MD5 6ebe30dca33b55b2d4311451c38a4d91
BLAKE2b-256 4d2f430a364823a9e46f60f1b1a0e5e1a1f8b9314163b91176559b61168a3797

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp37-cp37m-macosx_10_15_x86_64.whl.

File metadata

  • Download URL: PyMatching-2.1.0-cp37-cp37m-macosx_10_15_x86_64.whl
  • Upload date:
  • Size: 462.1 kB
  • Tags: CPython 3.7m, macOS 10.15+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for PyMatching-2.1.0-cp37-cp37m-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 91d39cea97f77ec4c8c7a0e79603c0ef5c4b6e1d8d75d1b792636f183eee3ff1
MD5 1a71fcee3ca4256586533b1cf76b1d78
BLAKE2b-256 6cbfb28fb9628a7aaff6a7ced3d1c67a57c85928c18e0896e16252fbb234fee0

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: PyMatching-2.1.0-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 325.9 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for PyMatching-2.1.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 3de1bc63099ab1cd2a502e56a60c730ca0e2b52079479d770e9bacf9e0be264c
MD5 614dc144e20ba3755b123e4ab9aff1c9
BLAKE2b-256 e7aba4e6230b09b48195c31e1212cc1ff25dcb6361decaf0909db0d89f40bcaf

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp36-cp36m-win32.whl.

File metadata

  • Download URL: PyMatching-2.1.0-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 285.1 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for PyMatching-2.1.0-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 3418d7133087191cce347dc764eff36f235f8cfaf3187e75fd58327484d42a30
MD5 a31852822cb2cf8a855cdcd0511c9214
BLAKE2b-256 9224060d362ee80adf65e8a22e1c0fa03094aec8453476026988bebdfb5f7391

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for PyMatching-2.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d7910af7cab14fe3b01ede061f058921cbe2494b66437c6aabf9f385be3e6638
MD5 30a12a5f9d22517d63a0ba764dfa0ef7
BLAKE2b-256 f0ddde7ddb405144f23a06c3e4436323e77c4e601e127e4da59b50ff6f8e4e42

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for PyMatching-2.1.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 80617de9e678c3d991815535ab757d2d46f18bb9429788413a6670d9c6b462fe
MD5 801c079923247802648ec6720c5c33fa
BLAKE2b-256 969d051997097c55115da27e1087ecf39531d99617a345781ea93d8011367516

See more details on using hashes here.

File details

Details for the file PyMatching-2.1.0-cp36-cp36m-macosx_10_15_x86_64.whl.

File metadata

  • Download URL: PyMatching-2.1.0-cp36-cp36m-macosx_10_15_x86_64.whl
  • Upload date:
  • Size: 462.0 kB
  • Tags: CPython 3.6m, macOS 10.15+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for PyMatching-2.1.0-cp36-cp36m-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 45e4f07a0e804dae8fee2fb16496611afded0a16aada2dfd3b4b90a33c0973ee
MD5 684d6ce0ffff53d1e85d7818da96a39d
BLAKE2b-256 2feed25f26183190275ef17375867eb220d0fcb32248d2ddb337f91888ff9be7

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page