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 13 in under 1 microsecond per round of syndrome extraction on a single core (or up to distance 19 if only X-basis measurements are processed - however both X and Z basis measurements must be decoded at scale). 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

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_errors = 0
for i in range(1000):
    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_errors = 0
for i in range(1000):
    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

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.0.1.tar.gz (304.2 kB view details)

Uploaded Source

Built Distributions

PyMatching-2.0.1-cp311-cp311-win_amd64.whl (292.7 kB view details)

Uploaded CPython 3.11 Windows x86-64

PyMatching-2.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (628.0 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

PyMatching-2.0.1-cp311-cp311-macosx_11_0_arm64.whl (398.0 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

PyMatching-2.0.1-cp311-cp311-macosx_10_15_x86_64.whl (428.3 kB view details)

Uploaded CPython 3.11 macOS 10.15+ x86-64

PyMatching-2.0.1-cp311-cp311-macosx_10_15_universal2.whl (802.6 kB view details)

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

PyMatching-2.0.1-cp310-cp310-win_amd64.whl (292.7 kB view details)

Uploaded CPython 3.10 Windows x86-64

PyMatching-2.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (628.3 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

PyMatching-2.0.1-cp310-cp310-macosx_11_0_arm64.whl (398.0 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

PyMatching-2.0.1-cp310-cp310-macosx_10_15_x86_64.whl (428.4 kB view details)

Uploaded CPython 3.10 macOS 10.15+ x86-64

PyMatching-2.0.1-cp310-cp310-macosx_10_15_universal2.whl (802.7 kB view details)

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

PyMatching-2.0.1-cp39-cp39-win_amd64.whl (291.6 kB view details)

Uploaded CPython 3.9 Windows x86-64

PyMatching-2.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (628.4 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

PyMatching-2.0.1-cp39-cp39-macosx_11_0_arm64.whl (398.2 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

PyMatching-2.0.1-cp39-cp39-macosx_10_15_x86_64.whl (428.4 kB view details)

Uploaded CPython 3.9 macOS 10.15+ x86-64

PyMatching-2.0.1-cp39-cp39-macosx_10_15_universal2.whl (803.0 kB view details)

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

PyMatching-2.0.1-cp38-cp38-win_amd64.whl (292.8 kB view details)

Uploaded CPython 3.8 Windows x86-64

PyMatching-2.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (628.2 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

PyMatching-2.0.1-cp38-cp38-macosx_11_0_arm64.whl (397.9 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

PyMatching-2.0.1-cp38-cp38-macosx_10_15_x86_64.whl (428.1 kB view details)

Uploaded CPython 3.8 macOS 10.15+ x86-64

PyMatching-2.0.1-cp38-cp38-macosx_10_15_universal2.whl (802.4 kB view details)

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

PyMatching-2.0.1-cp37-cp37m-win_amd64.whl (293.5 kB view details)

Uploaded CPython 3.7m Windows x86-64

PyMatching-2.0.1-cp37-cp37m-win32.whl (258.9 kB view details)

Uploaded CPython 3.7m Windows x86

PyMatching-2.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (630.7 kB view details)

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

PyMatching-2.0.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl (687.5 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686

PyMatching-2.0.1-cp37-cp37m-macosx_10_15_x86_64.whl (426.9 kB view details)

Uploaded CPython 3.7m macOS 10.15+ x86-64

PyMatching-2.0.1-cp36-cp36m-win_amd64.whl (293.5 kB view details)

Uploaded CPython 3.6m Windows x86-64

PyMatching-2.0.1-cp36-cp36m-win32.whl (258.9 kB view details)

Uploaded CPython 3.6m Windows x86

PyMatching-2.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (630.7 kB view details)

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

PyMatching-2.0.1-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl (687.8 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ i686

PyMatching-2.0.1-cp36-cp36m-macosx_10_15_x86_64.whl (426.8 kB view details)

Uploaded CPython 3.6m macOS 10.15+ x86-64

File details

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

File metadata

  • Download URL: PyMatching-2.0.1.tar.gz
  • Upload date:
  • Size: 304.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.8

File hashes

Hashes for PyMatching-2.0.1.tar.gz
Algorithm Hash digest
SHA256 9402cb663c7267f8c7b0a6df25ffece2555f5c2445f2cbeeb65bce3444da9abd
MD5 c97e8e814d65f9c445350a0a9841fa5b
BLAKE2b-256 769a7553ba0f413943bf09949ef1193ee56840a90ef037b4fad48131726ac6f4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PyMatching-2.0.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4131fdb4522b6b330bcb4dbab4dfaa6a3964586093328e9fcdb6ea1a2749095b
MD5 44defe307b5021f56d523073d48ca368
BLAKE2b-256 c183eb211c340467728d4111ff5548415e655c343f30d0de8ebac541f6cacd4e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PyMatching-2.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5fa281a5c27ecf9826774a6cf027d167e9001bca41a4e656f5a7730f4fc7570b
MD5 eb914189fdb812b9d0ab20d9db18e924
BLAKE2b-256 2437cd8d8f10466985969a117e5471e2d8c207ed3901b98ae0b78894ab6794e6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PyMatching-2.0.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cb1ad9e31578a85801ebc243a1454f8ad5f4fadc633245a04c8b5f4fa648f052
MD5 8c9d8f6e079879fd349b1b2243a25fcd
BLAKE2b-256 8c36772855af51163254877791b0573ef9e2ca6004937806379f615abf517b7c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PyMatching-2.0.1-cp311-cp311-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 16218a288d81ff1d110fde6f8872a13b507132aab86b1868904bf0400ec7fbd2
MD5 93c98ef30cde84d4c58dd450f8f77f05
BLAKE2b-256 b4f745a96d7d5141578064ddf2cd0bbfdedc9053d91a93e270c2c7c5508a0ac3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PyMatching-2.0.1-cp311-cp311-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 9d55b5b3587014dd7bde4f3e402ee9efa12b7f4ef2cbff35d600a3029fb85394
MD5 693a872db84cb5936a393e85cc58d7f7
BLAKE2b-256 8fba242028436db020c4e95f6e60cfd83018c79e2e6990002a01ec6e8fb35750

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PyMatching-2.0.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 96fb4a0cb9d979e1a1670579170483d0ccb8eb85375d5cc40740923074072d89
MD5 8386ce4d0ae595e6ea4241f8ea97f556
BLAKE2b-256 cd10c00e3654f1fdc12e7d03413c583128eaedb6ee0e012484aed18bf223ca78

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PyMatching-2.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cedff73fe2aea291fab3ff396895cb73576a131785cb1e8869087d10de2803ee
MD5 a384d3eca125b64aa2e7ffcba02c5a62
BLAKE2b-256 c398ed5be58a5db6e5d7a70e5fc2c2c42a720a5bbbe3ff6632edb7c6df584a9e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PyMatching-2.0.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 83e9ec590ba08a7dee8a37106835c387eaf1ec02ccb547bad6612f5c623bd57f
MD5 413d0499c093308af38caadb77a1a9ae
BLAKE2b-256 102c98fa5121f0ee3668b89ee497169b2ecf477b55fbf938acfbcf65e1378774

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PyMatching-2.0.1-cp310-cp310-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 b6ecf2acb8aa8b40359f00784aeaf6d40fcad5bfeb1fb7932c922a98d7d72e82
MD5 2a57dfc62122c5dfde426ce064e1878c
BLAKE2b-256 60905bce366d8ef64b176daa999b582f83a06df42f6253431264ede8d182c210

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PyMatching-2.0.1-cp310-cp310-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 b997518e321b10b49578235465861d8a9fd3735a68d803960cda812dbae7fdb0
MD5 b30cbc15079172fd3685c6cffe6ed351
BLAKE2b-256 76fdcbe148c8c2e8fa07f0ee88ded48462b389fd8aa3fe5159c48cceeec06ea5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: PyMatching-2.0.1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 291.6 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.8

File hashes

Hashes for PyMatching-2.0.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 3a6cd4b4834cdedf93ae2eed6fa193f68d89bd82dfd372cefdadf3f9b6d52174
MD5 c7b460f649c84e81f475891e847bcb4c
BLAKE2b-256 db6cbdcfbae5d523e2bfd4a182dd2d565d8452fb3fa5bea4d5730e39ebeaa674

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PyMatching-2.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3ec0b7448c18f5f72b0ff6318098a2ee8552bd5f7287f883badf8607f3947d86
MD5 3d3ca254c151abcee2dd3a7e81bd5ea6
BLAKE2b-256 a82e39717a54b8d25750c110c9dda7e4a118d67b611cdb0a63fa8267511b3ba4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PyMatching-2.0.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2a3e6a32da8ed29c0d039a3faab07dd43799af470b419c341a56d96b72a65c14
MD5 a7ced67ebcfe1b523805cd1a572df19f
BLAKE2b-256 573298675e8ac355d66f3c3741433558693ea009d9cca944c8979828043dce65

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PyMatching-2.0.1-cp39-cp39-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 b9d06a402656a61b78a87929460448c9a9911439538b690788d488225eedf2d6
MD5 a1fcca7638ae12c3c0d0dba1a640a047
BLAKE2b-256 406d919d39f8065a6fac55ddc776138c9046d57c293b461e26cd2a1fd630fc30

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PyMatching-2.0.1-cp39-cp39-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 67a2f38c4e61d92c1fd3db2ed053e7deda85ef2dcbfe3354a821531cebe4c78e
MD5 b5049cf402c7b04684089b7401c42549
BLAKE2b-256 3c27b0430220acf0c54fecb6e98dfa135afdd9319a038be4da2b8b2d5a3c708a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: PyMatching-2.0.1-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 292.8 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.8

File hashes

Hashes for PyMatching-2.0.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 e49de6f679a89dea8093a54457f3f7d4696509da9f3f25bc8bb753a888484791
MD5 bd2aa775c359a2e5e13cf64bd80ac289
BLAKE2b-256 1826e29b5de6f454b1bc350eb83f92152e185f1299259a9a0d49a8908195bc9d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PyMatching-2.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 242c00ddd23897409b8528f4261ed1d273d50eb6619a0d7116a4bff582d5c98f
MD5 8e6251e092a2305dbd76cf81d20b538e
BLAKE2b-256 bcc5dcf22505fb5e469e5e9186e1058c9a1444d5c362c99c84512cd06a750a80

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PyMatching-2.0.1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b7aff9ed10832a6c951923d720ae038f5e533081dd614d160efcaf72c776f2b9
MD5 e64f5fcc219e02c719ec482f87700823
BLAKE2b-256 ace46fbe9155e1541f58b6e2786b7fcb48ebebddf0d6187c754b37f8e1ea921b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PyMatching-2.0.1-cp38-cp38-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 75d11a891adb7872623ed3051dbf4416ecf1cf05dc2742554428ed28466761b9
MD5 866eeac493437c4299b5c99fead3564b
BLAKE2b-256 65cc8585cede784852beaa5bc934ebf602392d97feaf1c2d4c4cdf4ed5bebc2c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PyMatching-2.0.1-cp38-cp38-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 51a2ad7fd8d369536fea7ffd9e0ba85d6c2201a6489ae1fe3243bf46d2313c43
MD5 90edb39f8b953660b28fac5a9fca1f73
BLAKE2b-256 38794f16a7d8770edbaf0631f5b93b792b256c51e6def15df2fe2c8ede9de948

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PyMatching-2.0.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 c5ae5885d9e8cc8302a10bdc622d3d7e7c186da8ae71d7adb138c3fe5b2fb81a
MD5 53faa4abe0d9390bc1fcbacdcceb2b93
BLAKE2b-256 19341d71831e3ddc51d66ea501d21de9ef6ad8e696de33280f71bf4db23901ef

See more details on using hashes here.

File details

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

File metadata

  • Download URL: PyMatching-2.0.1-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 258.9 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.8

File hashes

Hashes for PyMatching-2.0.1-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 c56c9fc23e9fe385c01cdb6546c70d50b10d7cced8f7649b97727c2051902400
MD5 39fcb42d961e4f5662edb3ca78890da6
BLAKE2b-256 4837954c1e2aa3c08375857d129abcc58562bdfa27655aa6b1727ee83d8fca57

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PyMatching-2.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0bc90ec9660248043081a2ba607732b84cabc808a83f92a4684ff1ca44e71751
MD5 7d5009232ccb041b15976440d13ced7b
BLAKE2b-256 b6a0ba020f7975013300c9f8748b695652ed10b904a68271a7c8111acbbd8390

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PyMatching-2.0.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 7bd5839317449d48c02666f58b5bae862bc49e5d2dfe4e91b1b631bcab7e0ca9
MD5 552c0579ac6f6f3015064bd9f6ba68ae
BLAKE2b-256 a8ef8386fcf3a72fda894fc182e15d28a905095ff891771b7e8d1078c7cfaa47

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PyMatching-2.0.1-cp37-cp37m-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 78b6823b4f1ec065dc7651acc5d3ba934a531f3aef0a052ecfcb8b4cefcb3530
MD5 076665e198795f79d00b2f77b622f293
BLAKE2b-256 0d29e76eb5349bac962102865027127844de33d66e23cfa9a33c76861a873d52

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PyMatching-2.0.1-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 2fd4463fedaf3d8e232199ea3cacd5fab157b9f522421ae18fede173d1138756
MD5 7d7850a98a2013b5791bb7ab63b877f1
BLAKE2b-256 52353b624cecfa767e36597e5ad91952df708315c1c5bf38e0ce5d10909c85b4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: PyMatching-2.0.1-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 258.9 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.8

File hashes

Hashes for PyMatching-2.0.1-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 cd4957b961356adc0650c37a6a6a3623e606cc2f30d7278b09b917edc967422e
MD5 0df74bcefbc5510125ebc0c6a99513cc
BLAKE2b-256 cc316ef8dbdc328eb6d51d28e9018a7262eb1fb41623d59f4df044dfb0de4e23

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PyMatching-2.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e524ddccad7a516e3758edbf2f20cdeeedf1e13a741fb8f030bf44cf861fc4c6
MD5 a0b06808e348afeb037836b69a962202
BLAKE2b-256 4ca151b4b1c5f5154d6074881c3b64baea6b5985947ef29a18d09edcef8de4ed

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PyMatching-2.0.1-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 937d7f0f2c8a301bbfc4b6eb599018334b9e8a5a54834d914c65cb4421b43d2d
MD5 62fab3b71b16580c8a6a0eba5b8f74e2
BLAKE2b-256 d56c4b8b73c0473c423c0210dcb7e36cfac38e4d7e92f75d622ca2e65f4019bf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PyMatching-2.0.1-cp36-cp36m-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 d3b529004508206a7d1b35e0c12d444a0f3fc28c9956f50fbfbcda24b659cb0f
MD5 89b09b5044e055c279e070c4086d6815
BLAKE2b-256 a398cd3fcb4a468be7cb1188182d1da91646d45fd951cfdb05d99097d48c275d

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