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. As of a recent update (v2.3), pymatching also supports correlated matching.

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

Our paper gives more background on the MWPM decoder and our implementation (sparse blossom) released in PyMatching v2.

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. See our paper for more details.

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 (as explained in our 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.

Correlated matching

As of PyMatching version 2.3, correlated matching is now also available in pymatching! Thank you to Sid Madhuk, who was the primary contributor for this new feature.

Correlated matching has better accuracy than standard (uncorrelated) matching for many decoding problems where hyperedge errors are present. When these hyperedge errors are decomposed into edges (graphlike errors), they amount to correlations between these edges in the matching graph. A common example of such a hyperedge error is a $Y$ error in the surface code.

The "two-pass" correlated matching decoder implemented in pymatching works by running sparse blossom twice. The first pass is a standard (uncorrelated) run of sparse blossom, to predict a set of edges in the matching graph. Correlated matching then assumes these errors (edges) occurred and reweights edges that are correlated with it based on this assumption. Matching is then run for the second time on this reweighted graph.

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 rustworkx.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:

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

print(num_errors)  # prints 8

To decode instead with correlated matching, set enable_correlations=True both when configuiing the pymatching.Matching object:

matching_corr = pymatching.Matching.from_detector_error_model(model, enable_correlations=True)

as well as when decoding:

predicted_observables_corr = matching_corr.decode_batch(syndrome, enable_correlations=True)
num_errors = np.sum(np.any(predicted_observables_corr != actual_observables, axis=1))

print(num_errors)  # prints 3

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 rustworkx graph.

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

Attribution

When using PyMatching please cite our paper on the sparse blossom algorithm (implemented in version 2):

@article{Higgott2025sparseblossom,
  doi = {10.22331/q-2025-01-20-1600},
  url = {https://doi.org/10.22331/q-2025-01-20-1600},
  title = {Sparse {B}lossom: correcting a million errors per core second with minimum-weight matching},
  author = {Higgott, Oscar and Gidney, Craig},
  journal = {{Quantum}},
  issn = {2521-327X},
  publisher = {{Verein zur F{\"{o}}rderung des Open Access Publizierens in den Quantenwissenschaften}},
  volume = {9},
  pages = {1600},
  month = jan,
  year = {2025}
}

Note: the previous 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.4.0.tar.gz (347.2 kB view details)

Uploaded Source

Built Distributions

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

pymatching-2.4.0-cp314-cp314-win_amd64.whl (356.3 kB view details)

Uploaded CPython 3.14Windows x86-64

pymatching-2.4.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (625.9 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pymatching-2.4.0-cp314-cp314-macosx_11_0_x86_64.whl (413.3 kB view details)

Uploaded CPython 3.14macOS 11.0+ x86-64

pymatching-2.4.0-cp314-cp314-macosx_11_0_arm64.whl (381.3 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

pymatching-2.4.0-cp313-cp313-win_amd64.whl (347.7 kB view details)

Uploaded CPython 3.13Windows x86-64

pymatching-2.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (625.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pymatching-2.4.0-cp313-cp313-macosx_11_0_x86_64.whl (413.0 kB view details)

Uploaded CPython 3.13macOS 11.0+ x86-64

pymatching-2.4.0-cp313-cp313-macosx_11_0_arm64.whl (380.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pymatching-2.4.0-cp312-cp312-win_amd64.whl (347.7 kB view details)

Uploaded CPython 3.12Windows x86-64

pymatching-2.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (626.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pymatching-2.4.0-cp312-cp312-macosx_11_0_x86_64.whl (412.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ x86-64

pymatching-2.4.0-cp312-cp312-macosx_11_0_arm64.whl (380.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pymatching-2.4.0-cp311-cp311-win_amd64.whl (345.9 kB view details)

Uploaded CPython 3.11Windows x86-64

pymatching-2.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (624.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pymatching-2.4.0-cp311-cp311-macosx_11_0_x86_64.whl (412.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ x86-64

pymatching-2.4.0-cp311-cp311-macosx_11_0_arm64.whl (381.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pymatching-2.4.0-cp310-cp310-win_amd64.whl (345.2 kB view details)

Uploaded CPython 3.10Windows x86-64

pymatching-2.4.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (623.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pymatching-2.4.0-cp310-cp310-macosx_11_0_x86_64.whl (411.6 kB view details)

Uploaded CPython 3.10macOS 11.0+ x86-64

pymatching-2.4.0-cp310-cp310-macosx_11_0_arm64.whl (380.0 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

pymatching-2.4.0-cp39-cp39-win_amd64.whl (348.3 kB view details)

Uploaded CPython 3.9Windows x86-64

pymatching-2.4.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (624.2 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pymatching-2.4.0-cp39-cp39-macosx_11_0_x86_64.whl (411.8 kB view details)

Uploaded CPython 3.9macOS 11.0+ x86-64

pymatching-2.4.0-cp39-cp39-macosx_11_0_arm64.whl (380.1 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

pymatching-2.4.0-cp38-cp38-win_amd64.whl (345.0 kB view details)

Uploaded CPython 3.8Windows x86-64

pymatching-2.4.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (623.6 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pymatching-2.4.0-cp38-cp38-macosx_11_0_x86_64.whl (411.4 kB view details)

Uploaded CPython 3.8macOS 11.0+ x86-64

File details

Details for the file pymatching-2.4.0.tar.gz.

File metadata

  • Download URL: pymatching-2.4.0.tar.gz
  • Upload date:
  • Size: 347.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pymatching-2.4.0.tar.gz
Algorithm Hash digest
SHA256 0c30dafa506b086f50d15530debd7b7b39228597d22c52d5ccd114bcbb0a2326
MD5 b70db583e76b63090d7d1149d3d0e734
BLAKE2b-256 7d1939472c89d532e576890320eff5e9738e4b4d7828d027315f7e198ba0be8c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0.tar.gz:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: pymatching-2.4.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 356.3 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pymatching-2.4.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 5c5ce4ed245d3670ea7d62b09f8a29b105533b032a3d21fdf6df04c9b6441ff1
MD5 411c7b5cdde0e8da11920923edd53778
BLAKE2b-256 170deb2df17fe0bf089c43445ba759e89150a0d36fb7fcbc44e750d8d31f0dbe

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp314-cp314-win_amd64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pymatching-2.4.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 70869b2a4a8fab2f1e54cc0b68fd050b7556133b5ce8c2d2d5d4f4d1319c14d3
MD5 ae7da1d7b7f28d988f3d2b6ba9759629
BLAKE2b-256 3313be44c3e2f8749652c23adc77a94c4efe5383287a4c01a548cc031d0e439c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp314-cp314-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pymatching-2.4.0-cp314-cp314-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 f2390db2679b5009509b6ea1b0838187966c2d8fd1ab8050e5d9b6c908a3ea7e
MD5 f3d163a2ac250921e6a691ccb360c5a8
BLAKE2b-256 6c0f5d532d693eca9bfe49e4a798a3e3d3b05f1da24b8aee7b4e21c3ade55502

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp314-cp314-macosx_11_0_x86_64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pymatching-2.4.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0e071c90c108daf1c6f8cefcac9ad4989a1a1694fe7433ee413cef7b65f4207e
MD5 cb333539fd0c7c11d52b0d6000234e34
BLAKE2b-256 13654289d2923789a407ca34e67b0d44f47caeba1f2219abdfa5f679a66e6e72

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: pymatching-2.4.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 347.7 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pymatching-2.4.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a14022ecf4e810152db998d14429d430630433b9ed1edc2abe53494753b0a0ca
MD5 0437cc37a3ded937f834d090fd5bdbdd
BLAKE2b-256 c3c5ca8cd432ce388cdbdc7df86110a2987d7526743269416d0a1cc83d5b2fd7

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp313-cp313-win_amd64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pymatching-2.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6450797ca5001449fcf5b43a68181a783f4ca50650f880a02ef5bf91b13aa359
MD5 0e8db6ae991b51a7153bc09bfb2d6b10
BLAKE2b-256 808da4450b34a032cc7eee70b45c21a03d32c89dad311ea5b41deb386539fbcb

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp313-cp313-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pymatching-2.4.0-cp313-cp313-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 a49db8f20d01523c9e12fc8207a5831ed261b53fb8e629c78e45b0081fcd5199
MD5 4aa6c62e60b33dd97a54ae15dcaf2f98
BLAKE2b-256 79eb36ceb0597d6ec4fc2c976b076c9523450ef61812173fc8c58bce669d6328

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp313-cp313-macosx_11_0_x86_64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pymatching-2.4.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fe3baa498155a227f5ce1ee6fe07f40524d9fb9961ac299a2050e69f7de50dba
MD5 2d46484c3481f28812528904ee46eed6
BLAKE2b-256 ac18375faa94219e1781ef5fc05aac95a2ba1047e0071069f2aae1416bfeb393

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pymatching-2.4.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 347.7 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pymatching-2.4.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 eb4428581a2578a8cc77f695ab267c184f444d9de5cb25301fe9f3f893214ea4
MD5 4357f4cfab32350744e09b010ae930e7
BLAKE2b-256 60c8d9abe73cc6dbaddf61d3c5875a9687aaa9591a976b109cc7cb6b7595cccb

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp312-cp312-win_amd64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pymatching-2.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 15e6d73153713a8f383f44ba4497d478fb4c4d765fbdd30f9fc1e1d47af75760
MD5 2406392f08bd4757a1dd48fcfc166f79
BLAKE2b-256 0f03b3186c28500a5aa751f7fc37b52fe6129ba24092604a8118faea456f482c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp312-cp312-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pymatching-2.4.0-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 af03cdd7389e7b9f93069f1dd1bb9931c3836a2bfc0d01952993f394b0bfa10d
MD5 ae0865bc33de75949ad12b3183c70341
BLAKE2b-256 5c0e00cd2b9c2da28fb3dafb77da8e2da18ceedda42de2298c682fbb016a9189

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp312-cp312-macosx_11_0_x86_64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pymatching-2.4.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 881f3410975b5a2d393561d44fa4513c878653d0e718e55930b08f52e9a04fc5
MD5 e9ab62e34ca101499984b1221fe4da97
BLAKE2b-256 80bc4983d49570d97b4489de8ed1580faea58e63a16e6c7046e45aaa636ea054

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pymatching-2.4.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 345.9 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pymatching-2.4.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1a1b831f8ebf47f5e2a865d1bcc250da208c57ff881a37177ee548248da447c2
MD5 ce80dab470a802389876acb00b7c3abb
BLAKE2b-256 7c27990d222ce88eba0f9afa4af68dc00adaf0134348c743feee0c1ab647f9eb

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp311-cp311-win_amd64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pymatching-2.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ac25684a41ab859cbb0f2ea34d86485aa89d4d22f97df684f9579c167c7d560a
MD5 59012651b5043cb72d88c31bfd628cf0
BLAKE2b-256 0b6c9b5a4c35727d74917b8a611f8cacbe9e5c81198648bcd7b5958f6573d39e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp311-cp311-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pymatching-2.4.0-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 df8c9229c5265d71f871fba3fbdbd27cda71ca81969275eefeb64688ee2f59f4
MD5 d146d8906fea54e3a97ddebd0a8848f7
BLAKE2b-256 ca2167745b4a411f0bad057cb16c7243dceb411450bf2719e40aceaeb595d42c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp311-cp311-macosx_11_0_x86_64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pymatching-2.4.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 133168b1fec946bfc992a9e5abbdbbc7eebc672b04d27cfd060ea153eb6cf576
MD5 a9c7a5f2ef6a7d48d00334538403fcb1
BLAKE2b-256 0e21e1985ee29b8cc3f317c8a2504fdee1bb9ba1e13c1dd1220a9bcf35ad537c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: pymatching-2.4.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 345.2 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pymatching-2.4.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 4683b652ba3983bc26405107382d666d8ccf68f53ea50fc5fb274251871177ec
MD5 409f0b60a3e050a384619fe590906095
BLAKE2b-256 3de3eb30dd8f5e0e209d0fc703fcf43a6a4c37703339198ba12a9c92b78c4393

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp310-cp310-win_amd64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pymatching-2.4.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fd8699227cda0d9c95152ee67ce2e5119fc845ff7951bfd8ed34dab9628733c1
MD5 36204a91165ba6369630d1e0af49d67a
BLAKE2b-256 95b7fb2c636ecd614617f5facf075b9b01d2bde4bdac3f84fe930b8e9db8079e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp310-cp310-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pymatching-2.4.0-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 8778d0a06b606b169f8517279f01d4c0f9bf1725085f7a3d1ddcb24a53952fdd
MD5 3df367783cbba03d527efeaac07df7b6
BLAKE2b-256 36ce833b2d944f89b9747dc3471a800908549df0739ce4183440bde64b9fe2df

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp310-cp310-macosx_11_0_x86_64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pymatching-2.4.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c51ee0ffa161f35ae6b887a0bebdf85e3fa456139e56d5e070823ef0434f692f
MD5 21e1da986a4609e618389fbef4c5f32d
BLAKE2b-256 8156f12f6ffbae1eb625cd5865e819a68c4c3a18ca66a805b922d627bdaaf6d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: pymatching-2.4.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 348.3 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pymatching-2.4.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 51a3f98ca3a0b94df33d2142e55be819fe7b5060498231277282e1c517c099bd
MD5 f8efa64ec3621c8b168c716a307c29e9
BLAKE2b-256 6558f801fe53b01eee061cd5f518490fa8c50fe1429e900d02d2c92dbe850d42

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp39-cp39-win_amd64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pymatching-2.4.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fabeaf35310805e0e4b36c8650e80152a02d854a802ec05b84655e82c9e45cbf
MD5 56962202299ed7f81c05b586c208c3ff
BLAKE2b-256 8c372874d94a6db50a4ae9020a05af165be31e24b927e39a3d3e8cf4a9f372f7

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp39-cp39-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pymatching-2.4.0-cp39-cp39-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 f24dad954a5425e53d587e5cb88010c172061f59650ba2cb900acc4b3d28a6ef
MD5 8275ebe4715ec0702f6d3ea72d77fe72
BLAKE2b-256 61f31c3eca63d7806662e9f8f3c3744224f8a2321d41af0950f8686aab457306

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp39-cp39-macosx_11_0_x86_64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pymatching-2.4.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 633f52c4486e86bb4c6fe1acbb9e87a5a9d4c3a6176bb7417ff21ce196f38072
MD5 5fcb7ece3c649a547308bd20070f0a50
BLAKE2b-256 fc5142a5cfd422e2e825915a3a8dcc52ce155d247741f42202ef828b1d858d50

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: pymatching-2.4.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 345.0 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pymatching-2.4.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 d8889c54d8daaea52ec80b35aa43f812eb944632e57531f14c06253c033a22dc
MD5 02e7443402119dc9a6d84bd4fb786f50
BLAKE2b-256 bfe63acac703c31bcc7c30f5193f2320236254e42793c1fab98d6a6938164a26

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp38-cp38-win_amd64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pymatching-2.4.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1fb6717d7b42876d46e07708510bbe30044293200a776deb20b7532b94ba55da
MD5 a0fe0982b6c96eaee3c4d1aa8ba78b17
BLAKE2b-256 62294ff7cbd10792b984ac9a8b101671e02876ce09a9185524a5bbbb04876f0d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymatching-2.4.0-cp38-cp38-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pymatching-2.4.0-cp38-cp38-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 9e9486118f37f20c4631e9471218a8c05df8f1e254b6b95cda6b319211218c17
MD5 9441856c0b9d916dd663a42fb8228751
BLAKE2b-256 480ffc6b18770a084a57a7bf4a975a2db9f538a6bb7f4d9ed365c1b2199a5f8d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymatching-2.4.0-cp38-cp38-macosx_11_0_x86_64.whl:

Publisher: ci.yml on oscarhiggott/PyMatching

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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