Skip to main content

MWPF

Hypergraph Minimum-Weight Parity Factor Decoder for QEC

Unitary Fund

The paper is available at https://arxiv.org/abs/2508.04969.

We also provide a web page that allows people to play with some QEC codes, noise models and their decoding processes. Check it out here (https://mwpf.dev).

Hypergraph MWPF is proven to be NP-hard [1]. Our design is taking advantage of clustering technique to lower the average time complexity and reach almost-linear average time complexity at small physical error rate. Please wait for our paper for more discussion of the speed v.s. accuracy.

Color Code Example (click for YouTube video)

Installation

pip install -U mwpf

Python 3.9 and newer are supported, including free-threaded Python 3.14 and 3.15+.

MWPF now supports stim simulation. You may experience high logical error rate due to some adaptor bugs prior to sinter version 1.15, so instead of using the mw_parity_factor decoder in sinter, you may want to manually import the latest MWPF decoder from the mwpf>=0.2.8 package.

pip install -U 'mwpf[stim]'
from mwpf import SinterMWPFDecoder

sinter.collect(
    tasks = ...,
    num_workers = 1,
    decoders = ["mwpf"],
    custom_decoders = { "mwpf": SinterMWPFDecoder(cluster_node_limit=50) },
)

# MWPF decoder now supports heralded error decoding in stim circuit!
#   Since the sinter.Decoder interface only gives a DEM (Detector Error Model), which doesn't include heralded error
#   information, you need to manually provide the circuit when constructing the decoder, like below
custom_decoders = { "mwpf": SinterMWPFDecoder(cluster_node_limit=50).with_circuit(circuit) }

Background

The Most-Likely Error (MLE) decoding problem can be formulated as a MWPF problem.

Naming

We named it Minimum-Weight Parity Factor because of a concept called "parity $(g,f)$-factor" in Lovász's 1972 paper [2]. In the context of QEC, the functions $g(v)$ and $f(v)$ associates with the measured syndrome as shown above. Without ambiguity, we just call it "parity factor".

Relationship with MWPM decoder

Minimum-Weight Perfect Matching decoder is the traditional decoder for QEC. When the decoding graph is a simple graph, the MLE decoding problem can be reduced to an MWPM problem on a generated complete graph with $O(|V|^2)$ edges. Two recent works [2] and [3] improves the average time complexity to almost theoretical upper bound of $O(|V|)$ by not explicitly generating the complete graph. This motivates our idea to design an algorithm directly on the model graph, hoping to reach the same $O(|V|)$ average time complexity even if the model graph is hypergraph.

Key Idea

We try to extend the blossom algorithm that solves the MWPM problem on simple graphs. An interesting attribute of the blossom algorithm is that it deals with an exponential number of linear constraints in order to relax the integer constraints. The added linear constraints, which we refer to as "blossom constraints", are based on a very simple idea: filtering out invalid solutions. The blossom constraints simply say "any odd cluster cannot be perfectly matched internally", which is obviously true. However, this "filtering" requires an exponential number of linear constraints [5], which is impossible to generate efficiently. Thus, the algorithm must implicitly consider those exponential number of constraints without ever listing them. In fact, the blossom algorithm only keeps track of $O(|V|)$ such constraints from the exponentially many. Surprisingly, this works! Inspired by this miracle, we now have the courage to use an exponential number of linear constraints to solve MWPF.

Rigorous Math

The ILP problem above is very similar to that of the blossom algorithm, except for the more complex "blossom"definition: it's now a subgraph $S=(V_S, E_S), V_S \subseteq V, E_S \subseteq E$ instead of just a subset of vertices $S\subseteq V$ in the blossom algorithm. We have mathematically proved the equivalence between hypergraph MWPF and this ILP. In the next step, we simply relax the integer constraints.

Clearly, as a relaxation, the minimum objective value is no larger than that of the ILP. Unfortunately, we haven't been able to rigorously prove that they have the same optimal objective value, nor can we find a counter example. We leave this conjecture as is for now, and do not assume its correctness.

Conjecture: $\min\text{ILP}=\min\text{LP}$.

The dual problem is a transpose of the primal LP problem. According to the duality theorem, they have the same optimal value. The key is that each primal constraint becomes a dual variable, and each primal variable becomes a dual constraint. Clearly, for the dual problem, $y_S = 0, \forall S \in \mathcal{O}$ is a solution (despite usually not the optimal solution). In this way, we can keep track of only non-zero dual variables to implicitly considering all the exponentially many primal constraints. Since the dual LP problem becomes a maximization problem, we have the whole inequality chain as below.

If we can find a pair of feasible primal and dual solutions with the same weight, then this inequality chain collapses to an equality chain and the primal solution is proven to be optimal. Even if they are not equal, we still get a proximity bound.

In fact, MWPM decoder using the blossom algorithm fits in this framework, where the alternating tree operation guarantees that in the end the primal must be equal to the dual. Union-Find decoder and hypergraph UF decoder can also be explained by this framework, but the proximity bound is usually not singleton.

Usage

The decoding process is two steps (shown in Background)

  1. offline: construct the model graph given the QEC code and the noise model
  2. online: compute the most-likely error $\mathcal{E}\subseteq E$ given the syndrome (represented by the defect vertices $D \subseteq V$) and some dynamic weights
from mwpf import HyperEdge, SolverInitializer, SolverSerialJointSingleHair, SyndromePattern

# Offline
vertex_num = 4
weighted_edges = [
    HyperEdge([0, 1], 100),  # [vertices], weight
    HyperEdge([1, 2], 100),
    HyperEdge([2, 3], 100),
    HyperEdge([0], 100),  # boundary vertex
    HyperEdge([0, 1, 2], 60),  # hyperedge
]
initializer = SolverInitializer(vertex_num, weighted_edges)
hyperion = SolverSerialJointSingleHair(initializer)

# Online
syndrome = [0, 1, 3]
hyperion.solve(SyndromePattern(syndrome))
hyperion_subgraph = hyperion.subgraph()
print(hyperion_subgraph)  # out: [3, 5], weighted 160
_, bound = hyperion.subgraph_range()
print((bound.lower, bound.upper))  # out: (Fraction(160, 1), Fraction(160, 1))

The example hyergraph is below: grey edges are weighted 100 and the purple hyperedge is weighted 60.

In constrast, if we were to solve MWPF with MWPM decoder, then we have to ignore the hyperedge $e_4$ and thus leads to suboptimal result, as shown by the following Python script using the Fusion Blossom library.

from fusion_blossom import SolverInitializer, SolverSerial, SyndromePattern

# Offline
vertex_num = 5
weighted_edges = [(0, 4, 100), (0, 1, 100), (1, 2, 100), (2, 3, 100)]
virtual_vertices = [4]
initializer = SolverInitializer(vertex_num, weighted_edges, virtual_vertices)
fusion = SolverSerial(initializer)

# Online
syndrome = [0, 1, 3]
fusion.solve(SyndromePattern(syndrome))
fusion_subgraph = fusion.subgraph()
print(fusion_subgraph)  # out: [0, 2, 3], which is weighted 300 instead of 160

Advanced Usage

When trading off accuracy and decoding time, we provide a timeout parameter for the decoder. Also, one can specify whether you want the clusters to all grow together or grow one by one. More parameters are coming as we develop the library.

config = {
    "cluster_node_limit":  50,  # how many dual variables are allowed in each cluster before falling back to UF decoder,
                                # by default infinite but setting it to 50 works for circuit-level surface code d=7
                                # for millisecond decoding. I would recommend use this option alone (without timeout) to
                                # tune between decoding speed and accuracy.
    "timeout": 3.0,  # 3 second timeout for each cluster, by default infinite (preferred)
}
hyperion = SolverSerialJointSingleHair(initializer, config)

An embedded visualization tool is coming soon.

Examples

For surface code with depolarizing noise mode $p_x =p_y=p_z = p/3$, here shows physical error rates 1%, 2% and 4% (left to right).

Surface Code Example (click for YouTube video)

For triangle color code with X errors, here shows physical error rates 1%, 2% and 4% (left to right).

Triangle Color Code Example (click for YouTube video)

For circuit-level surface code, here shows physical error rate 0.03%, 0.1% and 0.3% (left to right).

Circuit-level Surface Code Example (click for YouTube video)

Reference

[1] Berlekamp, Elwyn, Robert McEliece, and Henk Van Tilborg. "On the inherent intractability of certain coding problems (corresp.)." IEEE Transactions on Information Theory 24.3 (1978): 384-386.

[2] Lovász, László. "The factorization of graphs. II." Acta Mathematica Academiae Scientiarum Hungarica 23 (1972): 223-246.

[3] Higgott, Oscar, and Craig Gidney. "Sparse Blossom: correcting a million errors per core second with minimum-weight matching." arXiv preprint arXiv:2303.15933 (2023).

[4] Wu, Yue, and Lin Zhong. "Fusion Blossom: Fast MWPM Decoders for QEC." arXiv preprint arXiv:2305.08307 (2023).

[5] Rothvoß, Thomas. "The matching polytope has exponential extension complexity." Journal of the ACM (JACM) 64.6 (2017): 1-19.

Metadata

Release files for mwpf 0.2.17

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mwpf 0.2.17
File Size Uploaded Provenance Actions
mwpf-0.2.17.tar.gz 594.8 kB With provenance Details for mwpf-0.2.17.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for mwpf 0.2.17
File Actions
mwpf-0.2.17-cp315-abi3.abi3t-win_arm64.whl CPython 3.15 abi3t, abi3 Windows ARM64 Details for mwpf-0.2.17-cp315-abi3.abi3t-win_arm64.whl
mwpf-0.2.17-cp315-abi3.abi3t-win_amd64.whl CPython 3.15 abi3t, abi3 Windows x86-64 Details for mwpf-0.2.17-cp315-abi3.abi3t-win_amd64.whl
mwpf-0.2.17-cp315-abi3.abi3t-musllinux_1_2_x86_64.whl CPython 3.15 abi3t, abi3 Linux musl 1.2+ x86-64 Details for mwpf-0.2.17-cp315-abi3.abi3t-musllinux_1_2_x86_64.whl
mwpf-0.2.17-cp315-abi3.abi3t-manylinux_2_28_x86_64.whl CPython 3.15 abi3t, abi3 Linux glibc 2.28+ x86-64 Details for mwpf-0.2.17-cp315-abi3.abi3t-manylinux_2_28_x86_64.whl
mwpf-0.2.17-cp315-abi3.abi3t-macosx_10_15_universal2.whl CPython 3.15 abi3t, abi3 macOS 10.15+ universal2 (ARM64, x86-64) Details for mwpf-0.2.17-cp315-abi3.abi3t-macosx_10_15_universal2.whl
mwpf-0.2.17-cp314-cp314t-win_arm64.whl CPython 3.14 CPython 3.14 free-threading Windows ARM64 Details for mwpf-0.2.17-cp314-cp314t-win_arm64.whl
mwpf-0.2.17-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details for mwpf-0.2.17-cp314-cp314t-win_amd64.whl
mwpf-0.2.17-cp314-cp314t-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64 Details for mwpf-0.2.17-cp314-cp314t-musllinux_1_2_x86_64.whl
mwpf-0.2.17-cp314-cp314t-manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ x86-64 Details for mwpf-0.2.17-cp314-cp314t-manylinux_2_28_x86_64.whl
mwpf-0.2.17-cp314-cp314t-macosx_10_15_universal2.whl CPython 3.14 CPython 3.14 free-threading macOS 10.15+ universal2 (ARM64, x86-64) Details for mwpf-0.2.17-cp314-cp314t-macosx_10_15_universal2.whl
mwpf-0.2.17-cp39-abi3-win_arm64.whl CPython 3.9 abi3 Windows ARM64 Details for mwpf-0.2.17-cp39-abi3-win_arm64.whl
mwpf-0.2.17-cp39-abi3-win_amd64.whl CPython 3.9 abi3 Windows x86-64 Details for mwpf-0.2.17-cp39-abi3-win_amd64.whl
mwpf-0.2.17-cp39-abi3-musllinux_1_2_x86_64.whl CPython 3.9 abi3 Linux musl 1.2+ x86-64 Details for mwpf-0.2.17-cp39-abi3-musllinux_1_2_x86_64.whl
mwpf-0.2.17-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.9 abi3 Linux glibc 2.17+ x86-64 Details for mwpf-0.2.17-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
mwpf-0.2.17-cp39-abi3-macosx_10_12_universal2.whl CPython 3.9 abi3 macOS 10.12+ universal2 (ARM64, x86-64) Details for mwpf-0.2.17-cp39-abi3-macosx_10_12_universal2.whl

Total release size: 285.8 MB

Release files / mwpf-0.2.17.tar.gz

Download URL mwpf-0.2.17.tar.gz
Size 594.8 kB
Tags Source
SHA-256 checksum
How to use checksums
0700dcb26b4a8bf684d5e8620ae1d35b551b7b994bfc91d80b6558bc04d809ac
BLAKE2b-256 checksum
How to use checksums
e85ecec530b0b8936747129d73844b7ef6020c2a933313df8e3d89a2d8f2b689
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.

Transparency log

Release files / mwpf-0.2.17-cp315-abi3.abi3t-win_arm64.whl

Download URL mwpf-0.2.17-cp315-abi3.abi3t-win_arm64.whl
Size 4.1 MB
Tags CPython 3.15 Windows ARM64 abi3 abi3t
SHA-256 checksum
How to use checksums
08c03887c8cbdb17e00bb3c3e8d59961ebfa0b7146db8bdd76e8326f8c845b92
BLAKE2b-256 checksum
How to use checksums
ffc69bc72db9858c8b3ce14dcc8e1c65ec9acd944cfcd05ab0d3e852c22d26c5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.

Transparency log

Release files / mwpf-0.2.17-cp315-abi3.abi3t-win_amd64.whl

Download URL mwpf-0.2.17-cp315-abi3.abi3t-win_amd64.whl
Size 4.1 MB
Tags CPython 3.15 Windows x86-64 abi3 abi3t
SHA-256 checksum
How to use checksums
2780a63c585974a9dc92c3035bf0553f53c26806cc1243ed6fd1711fc32a09a3
BLAKE2b-256 checksum
How to use checksums
b83e5018b5e8534283825998e886556da72c70b4a6f1915cbd3eb7100889f4d6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.

Transparency log

Release files / mwpf-0.2.17-cp315-abi3.abi3t-musllinux_1_2_x86_64.whl

Download URL mwpf-0.2.17-cp315-abi3.abi3t-musllinux_1_2_x86_64.whl
Size 39.2 MB
Tags CPython 3.15 Linux musl 1.2+ x86-64 abi3 abi3t
SHA-256 checksum
How to use checksums
c3fc3ad1c8b8eb5ec72f7170797496fe78d6095fcac678ff74c6181955955f28
BLAKE2b-256 checksum
How to use checksums
fe1829fc9131af1b2d0e1315112d2aa468b7fc6ac33cde2e7e144036a184e95a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.

Transparency log

Release files / mwpf-0.2.17-cp315-abi3.abi3t-manylinux_2_28_x86_64.whl

Download URL mwpf-0.2.17-cp315-abi3.abi3t-manylinux_2_28_x86_64.whl
Size 41.3 MB
Tags CPython 3.15 Linux glibc 2.28+ x86-64 abi3 abi3t
SHA-256 checksum
How to use checksums
963409d56900419f0058517396a527a59672bad42b326a061f77237c7c9a1a2b
BLAKE2b-256 checksum
How to use checksums
585ea7c389bc926bb784cd178ea0c402020b4e42f06ff2bf07b341d1e085e0f4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.

Transparency log

Release files / mwpf-0.2.17-cp315-abi3.abi3t-macosx_10_15_universal2.whl

Download URL mwpf-0.2.17-cp315-abi3.abi3t-macosx_10_15_universal2.whl
Size 7.9 MB
Tags CPython 3.15 abi3 abi3t macOS 10.15+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
77e24b892823bc4dbede3e5fc762d9a0468b8b371914797681101183a3d43ad1
BLAKE2b-256 checksum
How to use checksums
ca6d0b00c53dfb3ded723239b9af8aa2806f9fdd1197cf2aeb2b6cfc7ad90bc0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.

Transparency log

Release files / mwpf-0.2.17-cp314-cp314t-win_arm64.whl

Download URL mwpf-0.2.17-cp314-cp314t-win_arm64.whl
Size 4.0 MB
Tags CPython 3.14 CPython 3.14 free-threading Windows ARM64
SHA-256 checksum
How to use checksums
bf13a8f8b549ad39f7baa041273f39e9c0aced59336496329511bcfcdd9aa4b8
BLAKE2b-256 checksum
How to use checksums
13a7c3f0b220fd88015d2f027be420b89a988723bc59cb7544f35c2d3529fbd5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.

Transparency log

Release files / mwpf-0.2.17-cp314-cp314t-win_amd64.whl

Download URL mwpf-0.2.17-cp314-cp314t-win_amd64.whl
Size 4.0 MB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
132a31648ae34de157171b18302e27d47876aacf3f10bfd9b055813c5df4b4db
BLAKE2b-256 checksum
How to use checksums
c641b78977a3984f75422956d05abb7958dae3618cdf75b6a8db95858f379eb4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.

Transparency log

Release files / mwpf-0.2.17-cp314-cp314t-musllinux_1_2_x86_64.whl

Download URL mwpf-0.2.17-cp314-cp314t-musllinux_1_2_x86_64.whl
Size 38.5 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
dcfd3f154ef4f1ec7075a8f422dd422fd1935de2dbdf234b389d249408fc35d2
BLAKE2b-256 checksum
How to use checksums
00ce03d012c00d13bc4940774339289c9d5f1484c2b6b51bf398b73592794b8a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.

Transparency log

Release files / mwpf-0.2.17-cp314-cp314t-manylinux_2_28_x86_64.whl

Download URL mwpf-0.2.17-cp314-cp314t-manylinux_2_28_x86_64.whl
Size 40.5 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
bc0be047fdec2fb21a11f95acf0fe28cdf98515f906c25150fc02441a8c65edc
BLAKE2b-256 checksum
How to use checksums
84c1f8b3e1b26206d52b1ee13c5308236d388506fc0991bb1776d4bcef91ec53
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.

Transparency log

Release files / mwpf-0.2.17-cp314-cp314t-macosx_10_15_universal2.whl

Download URL mwpf-0.2.17-cp314-cp314t-macosx_10_15_universal2.whl
Size 7.6 MB
Tags CPython 3.14 CPython 3.14 free-threading macOS 10.15+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
82e7485e6f7ea9fe5a62a71b7be89cdfebabcaca1997e8d9f27159212ecb1f88
BLAKE2b-256 checksum
How to use checksums
39d13d3c1f8d218ba13426ac539311faf684b2d1b2bced5e03c86f34d846c6f4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.

Transparency log

Release files / mwpf-0.2.17-cp39-abi3-win_arm64.whl

Download URL mwpf-0.2.17-cp39-abi3-win_arm64.whl
Size 3.9 MB
Tags CPython 3.9 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
5ba4c5220224af777d88373fd70224ddf403108f73560a168985aff9279364b5
BLAKE2b-256 checksum
How to use checksums
a322c0290eaa806d7523eecdc93e708a7c05148da27e33e1388550e4d9d29037
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.

Transparency log

Release files / mwpf-0.2.17-cp39-abi3-win_amd64.whl

Download URL mwpf-0.2.17-cp39-abi3-win_amd64.whl
Size 3.9 MB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
61ce4181e49b1889ed15452c00b41d3c559b7ed27aa70a0d8486bd08b99efa1b
BLAKE2b-256 checksum
How to use checksums
7ccb6e3d30aebce58cc590b2cd10a3fd93445514c1c3cc4003152e100c45aab2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.

Transparency log

Release files / mwpf-0.2.17-cp39-abi3-musllinux_1_2_x86_64.whl

Download URL mwpf-0.2.17-cp39-abi3-musllinux_1_2_x86_64.whl
Size 38.4 MB
Tags CPython 3.9 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
a5a83822ded5f1d7a277c4d9336c5b139d37183a9dc1b9d61c730108b7788fee
BLAKE2b-256 checksum
How to use checksums
076d03747229e055ad635f43ed48e76bd503d39a178101eaf1e36dc073788e15
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.

Transparency log

Release files / mwpf-0.2.17-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL mwpf-0.2.17-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 40.3 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
48689e87cf34eab38126a4f235b01237e277cd21eae2f223fcd75f4142edcb99
BLAKE2b-256 checksum
How to use checksums
159d58b848a6f1d65b6bb91bac562b4c05a555e08840985cba2b7da2d40b4ea3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.

Transparency log

Release files / mwpf-0.2.17-cp39-abi3-macosx_10_12_universal2.whl

Download URL mwpf-0.2.17-cp39-abi3-macosx_10_12_universal2.whl
Size 7.6 MB
Tags CPython 3.9 abi3 macOS 10.12+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
0391d193a78028c833b367878ceb449dde96fec6822fc960ca7f2ab97d7a29b1
BLAKE2b-256 checksum
How to use checksums
8f159423e70ba8e61e0124e5cc77bc92f3d67beeb428f431305eb7fe9aab1c9f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.

Transparency log

Security for mwpf 0.2.17

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 16 files in this release have been uploaded with provenance metadata.

Select from 16 files

Attestation for mwpf-0.2.17.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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