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.18

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.18
File Size Uploaded Provenance Actions
mwpf-0.2.18.tar.gz 597.7 kB With provenance Details for mwpf-0.2.18.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for mwpf 0.2.18
File Actions
mwpf-0.2.18-cp315-abi3.abi3t-win_arm64.whl CPython 3.15 abi3, abi3t Windows ARM64 Details for mwpf-0.2.18-cp315-abi3.abi3t-win_arm64.whl
mwpf-0.2.18-cp315-abi3.abi3t-win_amd64.whl CPython 3.15 abi3, abi3t Windows x86-64 Details for mwpf-0.2.18-cp315-abi3.abi3t-win_amd64.whl
mwpf-0.2.18-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.18-cp315-abi3.abi3t-musllinux_1_2_x86_64.whl
mwpf-0.2.18-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.18-cp315-abi3.abi3t-manylinux_2_28_x86_64.whl
mwpf-0.2.18-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.18-cp315-abi3.abi3t-macosx_10_15_universal2.whl
mwpf-0.2.18-cp314-cp314t-win_arm64.whl CPython 3.14 CPython 3.14 free-threading Windows ARM64 Details for mwpf-0.2.18-cp314-cp314t-win_arm64.whl
mwpf-0.2.18-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details for mwpf-0.2.18-cp314-cp314t-win_amd64.whl
mwpf-0.2.18-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.18-cp314-cp314t-musllinux_1_2_x86_64.whl
mwpf-0.2.18-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.18-cp314-cp314t-manylinux_2_28_x86_64.whl
mwpf-0.2.18-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.18-cp314-cp314t-macosx_10_15_universal2.whl
mwpf-0.2.18-cp39-abi3-win_arm64.whl CPython 3.9 abi3 Windows ARM64 Details for mwpf-0.2.18-cp39-abi3-win_arm64.whl
mwpf-0.2.18-cp39-abi3-win_amd64.whl CPython 3.9 abi3 Windows x86-64 Details for mwpf-0.2.18-cp39-abi3-win_amd64.whl
mwpf-0.2.18-cp39-abi3-musllinux_1_2_x86_64.whl CPython 3.9 abi3 Linux musl 1.2+ x86-64 Details for mwpf-0.2.18-cp39-abi3-musllinux_1_2_x86_64.whl
mwpf-0.2.18-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.18-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
mwpf-0.2.18-cp39-abi3-macosx_10_12_universal2.whl CPython 3.9 abi3 macOS 10.12+ universal2 (ARM64, x86-64) Details for mwpf-0.2.18-cp39-abi3-macosx_10_12_universal2.whl

Total release size: 286.2 MB

Release files / mwpf-0.2.18.tar.gz

Download URL mwpf-0.2.18.tar.gz
Size 597.7 kB
Tags Source
SHA-256 checksum
How to use checksums
707c0fd819107764e7f7c3b4aa07b2a22122b6b83102e33a9cc4778bb1acb84c
BLAKE2b-256 checksum
How to use checksums
6f13e5a1ba1d4090fdfe94d6a482531fef15a9b50325ddd9fbb2ab518e1147b4
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.18-cp315-abi3.abi3t-win_arm64.whl

Download URL mwpf-0.2.18-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
b1efef33e1b8c0bfd2b00ed8fd986991bc07f0c8cb3b50ddcb28a9bbca31b975
BLAKE2b-256 checksum
How to use checksums
f69e5f86677124d0cb564a472980691fc0fed97e8a7cb1daf6ad90c8e35ed307
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.18-cp315-abi3.abi3t-win_amd64.whl

Download URL mwpf-0.2.18-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
1b216b52dfe1cca9fa80550bdd09e25350271f761069836d104f457c7c6a3efd
BLAKE2b-256 checksum
How to use checksums
2c4ef06317a479f8662e31ed4203c55768b4d83550168763f9adf00596c101a7
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.18-cp315-abi3.abi3t-musllinux_1_2_x86_64.whl

Download URL mwpf-0.2.18-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
9c1c1ae1c065e48cba5afbd0b7f979232bcd0e55ebc914eba8fea57016ebe92e
BLAKE2b-256 checksum
How to use checksums
ec5c8791008da1de8b7b066aa753e3b1ba5f531124aea31f1544817651a2b94c
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.18-cp315-abi3.abi3t-manylinux_2_28_x86_64.whl

Download URL mwpf-0.2.18-cp315-abi3.abi3t-manylinux_2_28_x86_64.whl
Size 41.4 MB
Tags CPython 3.15 Linux glibc 2.28+ x86-64 abi3 abi3t
SHA-256 checksum
How to use checksums
74368db991dcf47f9d23164ad54ee35fd7a4123de824866dbe2897675410ff2b
BLAKE2b-256 checksum
How to use checksums
0da364e0ac5d641022c137ac24f37c42019d9fc0b2ff005fd6aaedd1acc0dc1c
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.18-cp315-abi3.abi3t-macosx_10_15_universal2.whl

Download URL mwpf-0.2.18-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
71b5a7908ab11a14bc08593d722488bd69567834c4a10371efcb211721d547e1
BLAKE2b-256 checksum
How to use checksums
ba244b6e5461ce221d379c8725dab1203c487b77b3e1e70b3812118295eacf23
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.18-cp314-cp314t-win_arm64.whl

Download URL mwpf-0.2.18-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
101abbf03da9634fd74fb644b07c2d25d81a3f557e5027d3f2f892f6f62b1554
BLAKE2b-256 checksum
How to use checksums
474ddc4719852f2e8565b4887afdfe671403335d0478fc7172037e85dd925900
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.18-cp314-cp314t-win_amd64.whl

Download URL mwpf-0.2.18-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
934be80821b009b8cd31212e725e80a6cdd5983b3ad3f93787c5f0e4f6cac2dc
BLAKE2b-256 checksum
How to use checksums
eb117100ac9d0c9aeb817738fd46718a05dc8ee6deea491d55ad54c6f3336556
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.18-cp314-cp314t-musllinux_1_2_x86_64.whl

Download URL mwpf-0.2.18-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
cdc69225ee97e25c82753647b5da55448b6a6571a78f896af7b46e8d57d04698
BLAKE2b-256 checksum
How to use checksums
83fab516c070bd86cca1e0de5ea98915bfa0c8961e4c849326637bbdab2f02de
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.18-cp314-cp314t-manylinux_2_28_x86_64.whl

Download URL mwpf-0.2.18-cp314-cp314t-manylinux_2_28_x86_64.whl
Size 40.6 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
1200a618869b18e3d8863942cda2168cc4987898ee79395d37340d3695d36a11
BLAKE2b-256 checksum
How to use checksums
ba519a97636a028123efe2eef77faa3b19ab7bdf85e86c1d97571da5f5d80ec3
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.18-cp314-cp314t-macosx_10_15_universal2.whl

Download URL mwpf-0.2.18-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
0da0f4674e6c211d7bc2307235ac778f02324d2b3f8a76631d0496a369013c6c
BLAKE2b-256 checksum
How to use checksums
b00389786d5f9c833db5271f88dd7e5ee871fb155a848bea9c5e282f34e8a36b
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.18-cp39-abi3-win_arm64.whl

Download URL mwpf-0.2.18-cp39-abi3-win_arm64.whl
Size 3.9 MB
Tags CPython 3.9 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
3ef2eef446fe1938d26566d7b438898084ee8652339f868fd10fdd27dd3e28fa
BLAKE2b-256 checksum
How to use checksums
5eb1ca3809117ab78a0fabab20dfa622723a648573a96e99f2e016133b050ef8
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.18-cp39-abi3-win_amd64.whl

Download URL mwpf-0.2.18-cp39-abi3-win_amd64.whl
Size 3.9 MB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
0cd97206e8aaf5056035c329e733b11d28404db8f27e7d2bcd55c106be80e513
BLAKE2b-256 checksum
How to use checksums
de79c8949d7fc31076d4faec2f84d683cb27c194e1dd2a77ccf3192bde9828c2
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.18-cp39-abi3-musllinux_1_2_x86_64.whl

Download URL mwpf-0.2.18-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
51c554ac448ee13a4b4fe72ba6ed114f57f33586446d49d14e01f6a8d5fea43f
BLAKE2b-256 checksum
How to use checksums
bcbb41a43bf3f983b2358e21b5575c98c63575b8b9d824fe07e31a8a6630625b
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.18-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL mwpf-0.2.18-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
ed008989209e6f8326432694a47a4f4926e07d17961cbb66e66a55ed17c243ac
BLAKE2b-256 checksum
How to use checksums
27d3cafac0cb117c189cd021499167044a1eeff88b372558d5b310e3dbcc94e5
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.18-cp39-abi3-macosx_10_12_universal2.whl

Download URL mwpf-0.2.18-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
27a7e1c7e604ff26a04221c90257d1c5c08d4d71b16cce6ee3d980e98802e802
BLAKE2b-256 checksum
How to use checksums
0ecb93ecc597b338f4beaf4671e4dcb90815462eff5ac4a653616c3ae8ff8d8c
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.18

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.18.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