##################################
Plaquette UnionFind Decoder Plugin
##################################
.. image:: https://github.com/qc-design/plaquette-unionfind/actions/workflows/tests_linux.yml/badge.svg
:target: https://github.com/qc-design/plaquette-unionfind/actions/workflows/tests_linux.yml
.. image:: https://github.com/qc-design/plaquette-unionfind/actions/workflows/tests_windows.yml/badge.svg
:target: https://github.com/qc-design/plaquette-unionfind/actions/workflows/tests_windows.yml
.. header-start-inclusion-marker-do-not-remove
.. contents:: Table of Contents
.. about-start-inclusion-marker-do-not-remove
About
=====
The `Plaquette-UnionFind <https://github.com/qc-design/plaquette-unionfind>`_ plugin
extends the `Plaquette <https://github.com/qc-design/plaquette>`_ error correction
software, providing a fast unionfind decoder written in C++. See the `Benchmarks`_
section for a comparison to other known decoding packages.
.. about-end-inclusion-marker-do-not-remove
.. installation-start-inclusion-marker-do-not-remove
Installation
============
The basic dependencies for installation are cmake and ninja.
The C++ tests/examples and python bindings can be built independently by
.. code-block:: console
cmake -Bbuild -G Ninja -DPLAQUETTE_UNIONFIND_BUILD_TESTS=On -DPLAQUETTE_UNIONFIND_BUILD_BINDINGS=On
cmake --build ./build
You can run the C++ backend tests with
.. code-block:: console
make test-cpp
You can install just the python interface with (this quietly builds the C++ backend):
.. code-block:: console
pip install -r requirements.txt
pip install .
or get the latest stable release from PyPI
.. code-block:: console
pip install plaquette_unionfind
You can run the python frontend tests with
.. code-block:: console
make test-python
.. installation-end-inclusion-marker-do-not-remove
.. benchmark-start-inclusion-marker-do-not-remove
Usage
==========
Python Frontend
---------------
.. code-block:: python
import plaquette_unionfind as puf
import plaquette_graph as pg
vertex_boundary = [False] * 12 + [True] * 8
edges = [(0, 12), (0, 1), (1, 2), (2, 13), (0, 3), (1, 4), (2, 5), (3, 14), (3, 4),
(4, 5), (5, 15), (3, 6), (4, 7), (5, 8), (6, 16), (6, 7), (7, 8), (8, 17),
(6, 9), (7, 10), (8, 11), (9, 18), (9, 10), (10, 11), (11, 19)]
syndrome = [False, False, True, True, False, True, True, False, True, False, True,
False, False, False, False, False, False, False, False, False]
dg = pg.DecodingGraph(num_vertices, edges, vertex_boundary)
uf = puf.UnionFindDecoder(dg)
correction = uf.decode(syndrome)
C++ Backend
-----------
.. code-block:: cpp
#include "DecodingGraph.hpp"
#include "UnionFindDecoder.hpp"
int main(int argc, char *argv[]) {
using namespace Plaquette;
//a vector storing a flag that is 1 if the vertex is on the boundary
std::vector<bool> vertex_boundary = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 1, 1, 1, 1, 1, 1, 1};
std::vector<std::pair<size_t, size_t>> edges = {
{0, 12}, {0, 1}, {1, 2}, {2, 13}, {0, 3}, {1, 4}, {2, 5},
{3, 14}, {3, 4}, {4, 5}, {5, 15}, {3, 6}, {4, 7}, {5, 8},
{6, 16}, {6, 7}, {7, 8}, {8, 17}, {6, 9}, {7, 10}, {8, 11},
{9, 18}, {9, 10}, {10, 11}, {11, 19}};
std::vector<bool> syndrome = {false, false, true, true, false, true, true,
false, true, false, true, false, false, false,
false, false, false, false, false, false};
auto decoding_graph = DecodingGraph(vertex_boundary.size(),
edges, vertex_boundary);
UnionFindDecoder decoder(decoding_graph);
auto correction = decoder.Decode(syndrome);
}
Interface to Plaquette
----------------------
`Plaquette <https://github.com/qc-design/plaquette>`_ is undergoing heavy development, so this interface is likely to change. If you are benchmarking
our decoder, please do not use the plaquette interface unless you know what you are doing. You will be timing other computations unrelated to the decoding.
.. code-block:: python
from plaquette.codes import LatticeCode
import plaquette_unionfind
code = LatticeCode.make_planar(n_rounds=1, size=size)
qed = {
"pauli": {q.equbit_idx: {"x": error_rate} for q in code.lattice.dataqubits}
}
decoder = plaquette_unionfind.UnionFindDecoderInterface.from_code(code, qed, weighted=False)
Benchmarks
==========
We benchmark plaquette-unionfind along with two of the leading open source decorders `PyMatching-v2 <https://arxiv.org/abs/2303.15933>`_
and `FusionBlosson <https://arxiv.org/abs/2305.08307>`_.
For our benchmarks, we have been careful to only time the intrinsic PyMatching and FusionBlossom decoding
functions. Only the intrinsic speed of the decoder was timed, so e.g., we do not yet benchmark along with
the decode_batch function for Pymatching-v2. We also set FusionBlossom to single-threaded mode for a fair
comparison with PyMatching and plaquette-unionfind. All benchmarks are performed on a m6id.4xlarge AWS node.
All benchmarks are reproducible (see below) using our scripts on a m6id.4xlarge.
For our first benchmark, we use the 2-D (perfect measurement) Planar Code with p = 0.05 depolarization
error. We observe up to 8-10x speedup over PyMatching and FusionBlossom.
.. image:: https://github.com/qc-design/plaquette-unionfind/blob/40fb8fab11ad60e281089e3b0b26865c899749cb/benchmarks/perfect_planar_0.05.png?raw=true
:align: center
:width: 500px
For our second benchmark we use the 3-D Rotated Planar Code to account for measurement errors, with p = 0.01 depolarization
error and p = 0.01 measurement error. We observe that Pymatching is more sensitive to the lattice size than the other decoders.
.. image:: https://github.com/qc-design/plaquette-unionfind/blob/40fb8fab11ad60e281089e3b0b26865c899749cb/benchmarks/imperfect_rotated_planar_0.01.png?raw=true
:align: center
:width: 500px
Finally we benchmark a 30x30 Rotated Planar Code (29 rounds of measurement) with varying probability. We observe that
FusionBlossom is sensitive to the error probability.
.. image:: https://github.com/qc-design/plaquette-unionfind/blob/40fb8fab11ad60e281089e3b0b26865c899749cb/benchmarks/imperfect_rotated_planar_fixed_size.png?raw=true
:align: center
:width: 500px
To run all three benchmarks, use the following bash commands:
.. code-block:: console
source benchmarks/run_perfect_planar_benchmark.sh 0.05
source benchmarks/run_imperfect_rotated_planar_benchmark.sh 0.01
source benchmarks/run_imperfect_rotated_planar_fixed_size_benchmark.sh
python plot_benchmark_1.py perfect_planar_0.05.dat perfect_planar_0.05.png "Surface Code Benchmark #1" 5
python plot_benchmark_2.py imperfect_rotated_planar_0.01.dat imperfect_rotated_planar_0.01.png "Surface Code Benchmark #2" 5
python plot_benchmark_3.py imperfect_rotated_planar_fixed_size.dat imperfect_rotated_planar_fixed_size.png "Surface Code Benchmark #3" 1
.. benchmark-end-inclusion-marker-do-not-remove
Documentation
=============
To generate the documentation you will need to install graphviz and doxygen. Then run
.. code-block:: console
pip install -r doc/requirements.txt
make docs
firefox ./doc/_build/html/index.html
Here is a live link to the documentation: https://docs.plaquette.design/projects/unionfind
Raw data
{
"_id": null,
"home_page": "",
"name": "plaquette-unionfind",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": "",
"keywords": "Quantum error correction,qec,quantum computing,fault tolerance,error decoding",
"author": "",
"author_email": "",
"download_url": "",
"platform": null,
"description": "##################################\nPlaquette UnionFind Decoder Plugin\n##################################\n\n.. image:: https://github.com/qc-design/plaquette-unionfind/actions/workflows/tests_linux.yml/badge.svg\n :target: https://github.com/qc-design/plaquette-unionfind/actions/workflows/tests_linux.yml\n\n.. image:: https://github.com/qc-design/plaquette-unionfind/actions/workflows/tests_windows.yml/badge.svg\n :target: https://github.com/qc-design/plaquette-unionfind/actions/workflows/tests_windows.yml\n\n.. header-start-inclusion-marker-do-not-remove\n\n.. contents:: Table of Contents\n\n.. about-start-inclusion-marker-do-not-remove\n\nAbout \n=====\n\nThe `Plaquette-UnionFind <https://github.com/qc-design/plaquette-unionfind>`_ plugin\nextends the `Plaquette <https://github.com/qc-design/plaquette>`_ error correction\nsoftware, providing a fast unionfind decoder written in C++. See the `Benchmarks`_\nsection for a comparison to other known decoding packages.\n\n.. about-end-inclusion-marker-do-not-remove\n\n.. installation-start-inclusion-marker-do-not-remove\n\nInstallation\n============\n\nThe basic dependencies for installation are cmake and ninja.\n\nThe C++ tests/examples and python bindings can be built independently by\n\n.. code-block:: console\n\n cmake -Bbuild -G Ninja -DPLAQUETTE_UNIONFIND_BUILD_TESTS=On -DPLAQUETTE_UNIONFIND_BUILD_BINDINGS=On\n cmake --build ./build\n\n\nYou can run the C++ backend tests with\n\n.. code-block:: console\n\n make test-cpp\n\n\nYou can install just the python interface with (this quietly builds the C++ backend):\n\n.. code-block:: console\n\n pip install -r requirements.txt\n pip install .\n\nor get the latest stable release from PyPI\n\n.. code-block:: console\n\n pip install plaquette_unionfind\n\n\nYou can run the python frontend tests with\n\n.. code-block:: console\n\n make test-python\n\n.. installation-end-inclusion-marker-do-not-remove\n\n.. benchmark-start-inclusion-marker-do-not-remove\n\nUsage\n==========\n\nPython Frontend\n---------------\n\n.. code-block:: python\n\n import plaquette_unionfind as puf\n import plaquette_graph as pg\n\n vertex_boundary = [False] * 12 + [True] * 8\n edges = [(0, 12), (0, 1), (1, 2), (2, 13), (0, 3), (1, 4), (2, 5), (3, 14), (3, 4),\n (4, 5), (5, 15), (3, 6), (4, 7), (5, 8), (6, 16), (6, 7), (7, 8), (8, 17),\n (6, 9), (7, 10), (8, 11), (9, 18), (9, 10), (10, 11), (11, 19)]\n syndrome = [False, False, True, True, False, True, True, False, True, False, True,\n False, False, False, False, False, False, False, False, False]\n dg = pg.DecodingGraph(num_vertices, edges, vertex_boundary)\n uf = puf.UnionFindDecoder(dg)\n correction = uf.decode(syndrome)\n\n\nC++ Backend\n-----------\n\n.. code-block:: cpp\n\n #include \"DecodingGraph.hpp\"\n #include \"UnionFindDecoder.hpp\"\n\n int main(int argc, char *argv[]) {\n\n using namespace Plaquette;\n //a vector storing a flag that is 1 if the vertex is on the boundary\n std::vector<bool> vertex_boundary = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 1, 1, 1, 1, 1, 1, 1, 1};\n std::vector<std::pair<size_t, size_t>> edges = {\n {0, 12}, {0, 1}, {1, 2}, {2, 13}, {0, 3}, {1, 4}, {2, 5},\n {3, 14}, {3, 4}, {4, 5}, {5, 15}, {3, 6}, {4, 7}, {5, 8},\n {6, 16}, {6, 7}, {7, 8}, {8, 17}, {6, 9}, {7, 10}, {8, 11},\n {9, 18}, {9, 10}, {10, 11}, {11, 19}};\n\n std::vector<bool> syndrome = {false, false, true, true, false, true, true,\n false, true, false, true, false, false, false,\n false, false, false, false, false, false};\n\n auto decoding_graph = DecodingGraph(vertex_boundary.size(),\n edges, vertex_boundary);\n UnionFindDecoder decoder(decoding_graph);\n auto correction = decoder.Decode(syndrome);\n }\n\nInterface to Plaquette\n----------------------\n\n`Plaquette <https://github.com/qc-design/plaquette>`_ is undergoing heavy development, so this interface is likely to change. If you are benchmarking\nour decoder, please do not use the plaquette interface unless you know what you are doing. You will be timing other computations unrelated to the decoding.\n\n.. code-block:: python\n\n from plaquette.codes import LatticeCode\n import plaquette_unionfind\n \n code = LatticeCode.make_planar(n_rounds=1, size=size)\n qed = {\n \"pauli\": {q.equbit_idx: {\"x\": error_rate} for q in code.lattice.dataqubits}\n }\n decoder = plaquette_unionfind.UnionFindDecoderInterface.from_code(code, qed, weighted=False)\n \nBenchmarks\n==========\n\nWe benchmark plaquette-unionfind along with two of the leading open source decorders `PyMatching-v2 <https://arxiv.org/abs/2303.15933>`_ \nand `FusionBlosson <https://arxiv.org/abs/2305.08307>`_. \n\nFor our benchmarks, we have been careful to only time the intrinsic PyMatching and FusionBlossom decoding\nfunctions. Only the intrinsic speed of the decoder was timed, so e.g., we do not yet benchmark along with \nthe decode_batch function for Pymatching-v2. We also set FusionBlossom to single-threaded mode for a fair \ncomparison with PyMatching and plaquette-unionfind. All benchmarks are performed on a m6id.4xlarge AWS node. \nAll benchmarks are reproducible (see below) using our scripts on a m6id.4xlarge.\n\nFor our first benchmark, we use the 2-D (perfect measurement) Planar Code with p = 0.05 depolarization\nerror. We observe up to 8-10x speedup over PyMatching and FusionBlossom.\n\n.. image:: https://github.com/qc-design/plaquette-unionfind/blob/40fb8fab11ad60e281089e3b0b26865c899749cb/benchmarks/perfect_planar_0.05.png?raw=true\n :align: center\n :width: 500px \n\nFor our second benchmark we use the 3-D Rotated Planar Code to account for measurement errors, with p = 0.01 depolarization\nerror and p = 0.01 measurement error. We observe that Pymatching is more sensitive to the lattice size than the other decoders.\n\n.. image:: https://github.com/qc-design/plaquette-unionfind/blob/40fb8fab11ad60e281089e3b0b26865c899749cb/benchmarks/imperfect_rotated_planar_0.01.png?raw=true\n :align: center\n :width: 500px \n\nFinally we benchmark a 30x30 Rotated Planar Code (29 rounds of measurement) with varying probability. We observe that\nFusionBlossom is sensitive to the error probability.\n\n.. image:: https://github.com/qc-design/plaquette-unionfind/blob/40fb8fab11ad60e281089e3b0b26865c899749cb/benchmarks/imperfect_rotated_planar_fixed_size.png?raw=true\n :align: center\n :width: 500px \n\nTo run all three benchmarks, use the following bash commands:\n\n.. code-block:: console\n\n source benchmarks/run_perfect_planar_benchmark.sh 0.05\n source benchmarks/run_imperfect_rotated_planar_benchmark.sh 0.01\n source benchmarks/run_imperfect_rotated_planar_fixed_size_benchmark.sh\n\n python plot_benchmark_1.py perfect_planar_0.05.dat perfect_planar_0.05.png \"Surface Code Benchmark #1\" 5\n python plot_benchmark_2.py imperfect_rotated_planar_0.01.dat imperfect_rotated_planar_0.01.png \"Surface Code Benchmark #2\" 5\n python plot_benchmark_3.py imperfect_rotated_planar_fixed_size.dat imperfect_rotated_planar_fixed_size.png \"Surface Code Benchmark #3\" 1\n \n.. benchmark-end-inclusion-marker-do-not-remove\n\nDocumentation\n=============\n\nTo generate the documentation you will need to install graphviz and doxygen. Then run\n\n.. code-block:: console\n\n pip install -r doc/requirements.txt\n make docs\n firefox ./doc/_build/html/index.html\n\nHere is a live link to the documentation: https://docs.plaquette.design/projects/unionfind\n",
"bugtrack_url": null,
"license": "",
"summary": "",
"version": "0.0.1a2",
"project_urls": {
"Bug Tracker": "https://github.com/qc-design/plaquette-unionfind/issues",
"Homepage": "https://docs.plaquette.design/projects/unionfind"
},
"split_keywords": [
"quantum error correction",
"qec",
"quantum computing",
"fault tolerance",
"error decoding"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "0aeffed54e97a617bfd7f9deee62aa178c7ea215a709c276dbe41a5f71ae89f9",
"md5": "10e43fee1eaf0681672ead6b95d721d0",
"sha256": "922cf895f999478a2ab790d00b5cf80dd54386d80e16ceb67140d6450e3bc412"
},
"downloads": -1,
"filename": "plaquette_unionfind-0.0.1a2-cp310-cp310-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "10e43fee1eaf0681672ead6b95d721d0",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 83666,
"upload_time": "2023-06-07T06:29:15",
"upload_time_iso_8601": "2023-06-07T06:29:15.107883Z",
"url": "https://files.pythonhosted.org/packages/0a/ef/fed54e97a617bfd7f9deee62aa178c7ea215a709c276dbe41a5f71ae89f9/plaquette_unionfind-0.0.1a2-cp310-cp310-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "fd2d88de10f0fb6b3ff30138e9f325cc6477c439fca5326907a33eaf232c58ba",
"md5": "d70f13480593fb4a5b98221bd27d8d32",
"sha256": "8b47d87d771009950b2faf3ef93c7fbac4ba45e081fab0edb06348634997efb9"
},
"downloads": -1,
"filename": "plaquette_unionfind-0.0.1a2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "d70f13480593fb4a5b98221bd27d8d32",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 113156,
"upload_time": "2023-06-07T06:29:17",
"upload_time_iso_8601": "2023-06-07T06:29:17.248100Z",
"url": "https://files.pythonhosted.org/packages/fd/2d/88de10f0fb6b3ff30138e9f325cc6477c439fca5326907a33eaf232c58ba/plaquette_unionfind-0.0.1a2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6970bd0578f9d4d9eb8ea8347755acb80f8aabde64ddecfd737a63f1ebd939dc",
"md5": "a2b4dc06042327fbb6babf4f81996d4f",
"sha256": "a6db3543a02aabfdb5a79546b7deb3b4f1b3c5e31fa755ef97972c24d5d10ecd"
},
"downloads": -1,
"filename": "plaquette_unionfind-0.0.1a2-cp310-cp310-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "a2b4dc06042327fbb6babf4f81996d4f",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 635369,
"upload_time": "2023-06-07T06:29:19",
"upload_time_iso_8601": "2023-06-07T06:29:19.573177Z",
"url": "https://files.pythonhosted.org/packages/69/70/bd0578f9d4d9eb8ea8347755acb80f8aabde64ddecfd737a63f1ebd939dc/plaquette_unionfind-0.0.1a2-cp310-cp310-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a365de70969f9b12a25b33fd42b7765dfd6b4ce5ad45a643cf0d93d305f2102d",
"md5": "b8bee486febcd8a969531c5366dad1f5",
"sha256": "ab6fd7389c39e4b843c4384391fecc53b32e2617f8d9ba64a3f03cd48f7328b1"
},
"downloads": -1,
"filename": "plaquette_unionfind-0.0.1a2-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "b8bee486febcd8a969531c5366dad1f5",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 1118715,
"upload_time": "2023-06-07T06:29:23",
"upload_time_iso_8601": "2023-06-07T06:29:23.139524Z",
"url": "https://files.pythonhosted.org/packages/a3/65/de70969f9b12a25b33fd42b7765dfd6b4ce5ad45a643cf0d93d305f2102d/plaquette_unionfind-0.0.1a2-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "50e7e47421b87efca0d3b8f39d63919b4066e32af3c9e33c117b6caf6359fdcd",
"md5": "cee5a25614b9f180a80d0dac30544c83",
"sha256": "ac947182665d0d774490ba7427196df8668dbfe9551342a3e4b33dc82ddbc7c3"
},
"downloads": -1,
"filename": "plaquette_unionfind-0.0.1a2-cp311-cp311-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "cee5a25614b9f180a80d0dac30544c83",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 83628,
"upload_time": "2023-06-07T06:29:25",
"upload_time_iso_8601": "2023-06-07T06:29:25.191320Z",
"url": "https://files.pythonhosted.org/packages/50/e7/e47421b87efca0d3b8f39d63919b4066e32af3c9e33c117b6caf6359fdcd/plaquette_unionfind-0.0.1a2-cp311-cp311-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "94a8a26104d30eaa228584cc8b0e03e035339fad953f9828631d5ff3b1479897",
"md5": "0b72ce75776ed32ab41f5ca9369fd242",
"sha256": "8e2c4dde7c6ac3f68c6127187502f664161d66881928ddcad6f07b45f7793883"
},
"downloads": -1,
"filename": "plaquette_unionfind-0.0.1a2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "0b72ce75776ed32ab41f5ca9369fd242",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 113097,
"upload_time": "2023-06-07T06:29:26",
"upload_time_iso_8601": "2023-06-07T06:29:26.749918Z",
"url": "https://files.pythonhosted.org/packages/94/a8/a26104d30eaa228584cc8b0e03e035339fad953f9828631d5ff3b1479897/plaquette_unionfind-0.0.1a2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "00243b18326156a42aaf0048a13990e9cefaabdb30fe177a1792084e056e6172",
"md5": "f4cb11d7d9a2adf69c4878828ffb705c",
"sha256": "545f3182a0c5724c31026d20a9b2d5cc3fb5382ef89605a5c8fc7f84d464f6af"
},
"downloads": -1,
"filename": "plaquette_unionfind-0.0.1a2-cp311-cp311-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "f4cb11d7d9a2adf69c4878828ffb705c",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 635352,
"upload_time": "2023-06-07T06:29:28",
"upload_time_iso_8601": "2023-06-07T06:29:28.628424Z",
"url": "https://files.pythonhosted.org/packages/00/24/3b18326156a42aaf0048a13990e9cefaabdb30fe177a1792084e056e6172/plaquette_unionfind-0.0.1a2-cp311-cp311-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2109ea006826120e555121bb9efbef7254f445bc1677c1bf34a020d5257acf58",
"md5": "82f81f67f831cc842c32c90654bc2938",
"sha256": "89fe088b99b29df33482af2d70de86ca013ce14dc4bdc9fc5ce48f252a1b2eb9"
},
"downloads": -1,
"filename": "plaquette_unionfind-0.0.1a2-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "82f81f67f831cc842c32c90654bc2938",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 1119704,
"upload_time": "2023-06-07T06:29:32",
"upload_time_iso_8601": "2023-06-07T06:29:32.245495Z",
"url": "https://files.pythonhosted.org/packages/21/09/ea006826120e555121bb9efbef7254f445bc1677c1bf34a020d5257acf58/plaquette_unionfind-0.0.1a2-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-06-07 06:29:15",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "qc-design",
"github_project": "plaquette-unionfind",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "plaquette",
"specs": []
},
{
"name": "plaquette_graph",
"specs": []
}
],
"lcname": "plaquette-unionfind"
}