diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 9815b351..55778e56 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -60,7 +60,7 @@ jobs: path: dist merge-multiple: true - name: Generate artifact attestation for sdist and wheel(s) - uses: actions/attest-build-provenance@v1.4.3 + uses: actions/attest-build-provenance@v1.4.4 with: subject-path: "dist/*" - uses: pypa/gh-action-pypi-publish@release/v1 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 722e8dbd..4638d79f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -10,6 +10,7 @@ ci: autoupdate_commit_msg: "⬆️🪝 update pre-commit hooks" autofix_commit_msg: "🎨 pre-commit fixes" + autoupdate_schedule: quarterly skip: [mypy] repos: @@ -32,7 +33,7 @@ repos: # Clean jupyter notebooks - repo: https://github.com/srstevenson/nb-clean - rev: 3.3.0 + rev: 4.0.1 hooks: - id: nb-clean args: @@ -58,7 +59,7 @@ repos: # Python linting and formatting using ruff - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.6.9 + rev: v0.7.3 hooks: - id: ruff args: ["--fix", "--show-fixes"] @@ -66,14 +67,14 @@ repos: # Also run Black on examples in the documentation - repo: https://github.com/adamchainz/blacken-docs - rev: 1.19.0 + rev: 1.19.1 hooks: - id: blacken-docs additional_dependencies: [black==24.*] # Check static types with mypy - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.11.2 + rev: v1.13.0 hooks: - id: mypy files: ^(src/mqt|test/python|noxfile.py) @@ -86,13 +87,13 @@ repos: # Check for spelling - repo: https://github.com/crate-ci/typos - rev: v1.26.0 + rev: v1.27.3 hooks: - id: typos # Clang-format the C++ part of the code base automatically - repo: https://github.com/pre-commit/mirrors-clang-format - rev: v19.1.1 + rev: v19.1.3 hooks: - id: clang-format types_or: [c++, c, cuda] @@ -139,6 +140,6 @@ repos: # Check the pyproject.toml file - repo: https://github.com/henryiii/validate-pyproject-schema-store - rev: 2024.10.14 + rev: 2024.11.11 hooks: - id: validate-pyproject diff --git a/docs/StatePrep.ipynb b/docs/StatePrep.ipynb index ee44f011..8136a2a8 100644 --- a/docs/StatePrep.ipynb +++ b/docs/StatePrep.ipynb @@ -253,6 +253,158 @@ "cc_simulator.plot_state_prep(ps, min_errors=50, name=\"Distance 5\")" ] }, + { + "cell_type": "markdown", + "id": "81eec694ef6af97a", + "metadata": {}, + "source": [ + "## Deterministic state preparation ($d < 5$)\n", + "A possible disadvantage of the above approach is that the verification circuits are non-deterministic. This means that we potentially have to run the circuit multiple times to successfully prepare the state. This can be circumvented by using the information gained from the verification measurements to possibly identify the dangerous error and correct it. If this this is done for every possible (single) error, we refer to the state preparation as deterministic [^1].\n", + "\n", + "For small codes ($d < 5$ i.e. we need to consider only a single error) this problem is still tractable and can be solved in an optimal way using satisfiability solvers. QECC can automatically generate deterministic state preparation circuits for such codes.\n", + "\n", + "[^1]: https://arxiv.org/abs/2301.10017\n", + "\n", + "For this we come back to our $d=3$ Steane code. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2373b4ee6cee29d", + "metadata": {}, + "outputs": [], + "source": [ + "non_ft_sp.circ.draw(output=\"mpl\", initial_state=True)" + ] + }, + { + "cell_type": "markdown", + "id": "6c8eecaac4df6b88", + "metadata": {}, + "source": [ + "And initialize an instance of the deterministic verification helper class to facilitate the generation of the deterministic FT state preparation circuit." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1877841300be6d01", + "metadata": {}, + "outputs": [], + "source": [ + "from mqt.qecc.ft_stateprep import DeterministicVerificationHelper\n", + "\n", + "det_helper = DeterministicVerificationHelper(non_ft_sp)" + ] + }, + { + "cell_type": "markdown", + "id": "40c9070837bcd21", + "metadata": {}, + "source": [ + "Calling the `get_solution` method will generate the non-deterministic verification circuit using either the optimal or the heuristic method discussed above. The deterministic verification circuit, separated into X and Z correction layers) is then generated using the satisfiability solver." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3c83621b4ca7a1a1", + "metadata": {}, + "outputs": [], + "source": [ + "det_verify = det_helper.get_solution(use_optimal_verification=True)\n", + "det_verify_x, det_verify_z = det_verify" + ] + }, + { + "cell_type": "markdown", + "id": "15b8f7d65e69be64", + "metadata": {}, + "source": [ + "Such a `DeterministicVerification` object contains the stabilizer measurements for the non-deterministic verification circuit, the stabilizer measurements for the different deterministic verification circuits, depending on the non-deterministic measurement outcomes, and the final correction Pauli operators that need to be applied to the data qubits.\n", + "\n", + "The non-deterministic verification measurements are stored in the `stabs` attribute as a list of numpy arrays where each array represents a stabilizer measurement.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "75ac41577e4c0296", + "metadata": {}, + "outputs": [], + "source": [ + "det_verify_x.stabs" + ] + }, + { + "cell_type": "markdown", + "id": "ddecefba679c91c1", + "metadata": {}, + "source": [ + "The deterministic verification measurements are stored in the `det_stabs` attribute as a dictionary where the keys are the non-deterministic measurement outcomes (converted to int) and the values is a tuple with the first element being the deterministic stabilizer measurements and the second element being again a dictionary with the Pauli corrections for the deterministic measurement outcomes.\n", + "\n", + "For example for the Steane code whenever the non-deterministic verification triggers (1) the logical operator on qubits 2,3,6 hast to measured. If the outcome is 1, a Pauli correction on qubit 3 has to be applied, otherwise no correction is necessary." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "45c29390eb2eb0e4", + "metadata": {}, + "outputs": [], + "source": [ + "det_verify_x.det_correction" + ] + }, + { + "cell_type": "markdown", + "id": "42c85a709d72bf40", + "metadata": {}, + "source": [ + "For the case where the non-deterministic verification measurements need to be flagged (not the case for the Steane code), the `hook_corrections` attribute contains the additional stabilizer measurements and corrections in the same format as the `det_stabs` attribute." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ab975d4c4a1c11b7", + "metadata": {}, + "outputs": [], + "source": [ + "det_verify_x.hook_corrections" + ] + }, + { + "cell_type": "markdown", + "id": "d4527b797f83f919", + "metadata": {}, + "source": [ + "### Simulating deterministic state preparation circuits with Qsample\n", + "The resulting `DeterministicVerification` object can be used to directly simulate the deterministic state preparation circuit using the [Qsample](https://github.com/dpwinter/qsample) under the hood. The `NoisyDFTStatePrepSimulator` class automatically constructs a valid Qsample protocol containing the correct circuits and conditional paths to simulate the deterministic state preparation. The passed Error Model and simulation parameters are directly passed to Qsample and explained in the [Qsample documentation](https://dpwinter.github.io/qsample/). Similarly also the Qsample callbacks can be used to e.g. directly plot the logical error rates, showing the expected quadratic scaling." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "90f4d2760bc20453", + "metadata": {}, + "outputs": [], + "source": [ + "from qsample import callbacks, noise\n", + "\n", + "from mqt.qecc.ft_stateprep import NoisyDFTStatePrepSimulator\n", + "\n", + "error_model = noise.E1_1 # depolarizing error model\n", + "err_params = {\"q\": [1e-4, 5e-4, 1e-3, 5e-3, 1e-2, 5e-2, 1e-1, 5e-1]}\n", + "shots_dss = 2000\n", + "p_max = {\"q\": 0.01}\n", + "L = 1\n", + "\n", + "qsample_sim = NoisyDFTStatePrepSimulator(non_ft_sp.circ, det_verify, steane_code, error_model)\n", + "sampling_stats = qsample_sim.dss_logical_error_rates(err_params, p_max, L, shots_dss, callbacks=[callbacks.PlotStats()])" + ] + }, { "cell_type": "markdown", "id": "f9ad305e-929f-470f-86c5-e3e958750539", @@ -260,13 +412,13 @@ "source": [ "# Circuits and Evaluations\n", "\n", - "The circuits and benchmark scripts used for our work https://arxiv.org/abs/2408.11894, can be found [here](https://github.com/cda-tum/mqt-qecc/tree/main/src/mqt/qecc/ft_stateprep/eval)." + "The circuits and benchmark scripts used for our non-deterministic work https://arxiv.org/abs/2408.11894, can be found [here](https://github.com/cda-tum/mqt-qecc/tree/main/scripts/ft_stateprep/eval) and for the deterministic work [here](https://github.com/cda-tum/mqt-qecc/tree/main/scripts/ft_stateprep/eval_det)." ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "venv3_12", "language": "python", "name": "python3" }, diff --git a/docs/library/StatePrep.rst b/docs/library/StatePrep.rst index 7268c25e..3b8b7164 100644 --- a/docs/library/StatePrep.rst +++ b/docs/library/StatePrep.rst @@ -27,3 +27,23 @@ State preparation circuits can be simulated using the :class:`NoisyNDFTStatePrep .. autoclass:: NoisyNDFTStatePrepSimulator :members: + +:math:`d<5` codes +--------------------------------------------------------- +For small distance codes QECC provides functionality to not only synthesize state preparation circuits based on post-selection but also preparation protocols that yield the logical Pauli state deterministically. +Such a deterministic protocol consists of three parts: (1) a (non-deterministic) verification, (2) a deterministic correction if one of the verification measurements yields a non-trivial result, and (3) a hook correction for the case that one of the verification measurement flags indicates a hook error. +To facilitate the handling (e.g. collecting statistics regarding ancilla and CNOT count) QECC provides the :class:`DeterministicVerification` class. + + .. autoclass:: DeterministicVerification + :members: + +The :class:`DeterministicVerification` for a certain :class:`StatePrepCircuit` can be obtained using the wrapper class :class:`DeterministicVerificationHelper` which provides the two functions :func:`get_solution` and :func:`get_global_solution` where the latter optimizes over all possible(*potentially exponentially many*) non-deterministic verifications to find the global optimum (recommended only for codes with small qubit number). +The two :class:`DeterministicVerification` objects returned correspond to the two layers of verification (X and Z errors). + + .. autoclass:: DeterministicVerificationHelper + :members: +The resulting protocol consisting of the two-layered verification can be converted to a `Qsample `_ protocol and simulated using Dynamic Subset Sampling :cite:labelpar:`heussenDynamicalSubsetSampling2024`. +The protocol construction and simulation is done automatically by the :class:`NoisyDFTStatePrepSimulator` class where the returned numbers correspond to the upper and lower bounds with corresponding errors as described at the `Qsample Documentation `_. + + .. autoclass:: NoisyDFTStatePrepSimulator + :members: diff --git a/docs/refs.bib b/docs/refs.bib index fd2a9aea..b0e1fb96 100644 --- a/docs/refs.bib +++ b/docs/refs.bib @@ -149,3 +149,16 @@ @article{pryadko2023qdistrnd journal={arXiv preprint arXiv:2308.15140}, year={2023} } + +@article{heussenDynamicalSubsetSampling2024, + title = {Dynamical Subset Sampling of Quantum Error-Correcting Protocols}, + author = {Heu{\ss}en, Sascha and Winter, Don and Rispler, Manuel and M{\"u}ller, Markus}, + year = {2024}, + month = feb, + journal = {Physical Review Research}, + volume = {6}, + number = {1}, + pages = {013177}, + publisher = {American Physical Society}, + doi = {10.1103/PhysRevResearch.6.013177}, +} diff --git a/pyproject.toml b/pyproject.toml index fa21574c..44715592 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,7 +45,7 @@ requires-python = ">=3.9" dependencies = [ "z3-solver>=4.12", "qecsim", - "ldpc>=0.1.53", + "ldpc>=0.1.53,<2", # temporary upper cap due to failures seen with ldpc v2 "numpy>=1.26; python_version > '3.11'", "numpy>=1.24; python_version <= '3.11'", "qiskit[qasm3-import]>=1.0.0", @@ -56,6 +56,9 @@ dependencies = [ "numba>=0.59; python_version > '3.11'", "numba>=0.57; python_version <= '3.11'", "pymatching>=2.2.1", + "qsample>=0.0.2", + "urllib3>=1.26.20,<2.0", # Required by qsample + "fastcore>=1.7.10" # Required by qsample (to be removed) ] dynamic = ["version"] @@ -158,6 +161,10 @@ filterwarnings = [ "ignore:.*pkg_resources.*:DeprecationWarning:", "ignore:.*The retworkx package is deprecated*:DeprecationWarning:pymatching", 'ignore:.*qiskit.providers.provider.Provider.*:DeprecationWarning:', + 'ignore::DeprecationWarning:.*(simpleeval).*', + 'ignore::RuntimeWarning:.*(qsample).*', + 'ignore:.*invalid escape sequence.*::.*qsample.*', + 'ignore:.*invalid escape sequence.*::.*latextools.*', ] [tool.coverage] @@ -186,7 +193,7 @@ exclude = [ [[tool.mypy.overrides]] module = ["qiskit.*", "qecsim.*", "qiskit_aer.*", "matplotlib.*", "scipy.*", "ldpc.*", "pytest_console_scripts.*", - "z3.*", "bposd.*", "numba.*", "pymatching.*", "stim.*", "multiprocess.*"] + "z3.*", "bposd.*", "numba.*", "pymatching.*", "stim.*", "multiprocess.*", "qsample.*", "pandas.*"] ignore_missing_imports = true diff --git a/scripts/ft_stateprep/eval/README.md b/scripts/ft_stateprep/eval/README.md new file mode 100644 index 00000000..063154fe --- /dev/null +++ b/scripts/ft_stateprep/eval/README.md @@ -0,0 +1,11 @@ +If you want to run evaluations on the example circuits in this directory, do the following. + +To estimate the logical error rate for a physical error rate p_err, run + +`python estimate_logical_error_rate CODE -p p_err` + +The script prints 4 numbers: logical error rate per qubit, acceptance rate (if using post-selection), number of logical errors, total number of shots + +The python script has further options with which you can select which circuits to construct, how many logical errors should occur before stopping and more. + +To generate these values for a circuit for a range between p_err = 0.5 and p_err = 0.00005, the script `run_eval_on_code FILENAME ARGS` can be used. It runs multiple instances of `estimate_logical_error_rate` in parallel (using GNU Parallel) and stores the results in `FILENAME.csv`. diff --git a/scripts/ft_stateprep/eval/circuits/carbon/zero_ft_heuristic_heuristic.qasm b/scripts/ft_stateprep/eval/circuits/carbon/zero_ft_heuristic_heuristic.qasm new file mode 100644 index 00000000..72ab7dfb --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/carbon/zero_ft_heuristic_heuristic.qasm @@ -0,0 +1,55 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[12]; +qreg z_anc[2]; +qreg x_anc[1]; +qreg a47[1]; +creg z_c[2]; +creg x_c[1]; +creg c47[1]; +h q[0]; +h q[1]; +h q[2]; +h q[4]; +h q[7]; +cx q[7],q[11]; +cx q[1],q[5]; +cx q[7],q[9]; +cx q[4],q[10]; +cx q[2],q[8]; +cx q[1],q[3]; +cx q[0],q[6]; +cx q[10],q[9]; +cx q[8],q[7]; +cx q[6],q[11]; +cx q[4],q[3]; +cx q[2],q[1]; +cx q[0],q[5]; +cx q[11],q[10]; +cx q[9],q[8]; +cx q[7],q[6]; +cx q[5],q[4]; +cx q[3],q[2]; +cx q[1],q[0]; +cx q[1],z_anc[0]; +cx q[4],z_anc[0]; +cx q[7],z_anc[0]; +cx q[10],z_anc[0]; +cx q[1],z_anc[1]; +cx q[2],z_anc[1]; +cx q[7],z_anc[1]; +cx q[8],z_anc[1]; +measure z_anc[0] -> z_c[0]; +measure z_anc[1] -> z_c[1]; +h x_anc[0]; +cx x_anc[0],q[0]; +cx x_anc[0],a47[0]; +cx x_anc[0],q[2]; +cx x_anc[0],q[4]; +cx x_anc[0],q[6]; +cx x_anc[0],q[8]; +cx x_anc[0],a47[0]; +measure a47[0] -> c47[0]; +cx x_anc[0],q[10]; +h x_anc[0]; +measure x_anc[0] -> x_c[0]; diff --git a/scripts/ft_stateprep/eval/circuits/carbon/zero_ft_heuristic_heuristic.stim b/scripts/ft_stateprep/eval/circuits/carbon/zero_ft_heuristic_heuristic.stim new file mode 100644 index 00000000..e4dbf3bf --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/carbon/zero_ft_heuristic_heuristic.stim @@ -0,0 +1,9 @@ +H 0 1 2 4 7 +CX 7 11 1 5 7 9 4 10 2 8 1 3 0 6 10 9 8 7 6 11 4 3 2 1 0 5 11 10 9 8 7 6 5 4 3 2 1 0 1 12 4 12 7 12 10 12 1 13 2 13 7 13 8 13 +MR 12 13 +H 14 +CX 14 0 14 15 14 2 14 4 14 6 14 8 14 15 +MR 15 +CX 14 10 +H 14 +MR 14 diff --git a/scripts/ft_stateprep/eval/circuits/carbon/zero_ft_heuristic_opt.qasm b/scripts/ft_stateprep/eval/circuits/carbon/zero_ft_heuristic_opt.qasm new file mode 100644 index 00000000..de2641bf --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/carbon/zero_ft_heuristic_opt.qasm @@ -0,0 +1,57 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[12]; +qreg z_anc[1]; +qreg a9[1]; +qreg x_anc[1]; +qreg a10[1]; +creg z_c[1]; +creg c9[1]; +creg x_c[1]; +creg c10[1]; +h q[1]; +h q[2]; +h q[4]; +h q[6]; +h q[8]; +cx q[1],q[7]; +cx q[6],q[9]; +cx q[2],q[5]; +cx q[7],q[0]; +cx q[7],q[6]; +cx q[4],q[10]; +cx q[5],q[11]; +cx q[9],q[3]; +cx q[10],q[1]; +cx q[8],q[5]; +cx q[7],q[2]; +cx q[8],q[4]; +cx q[8],q[9]; +cx q[2],q[8]; +cx q[9],q[0]; +cx q[4],q[7]; +cx q[0],z_anc[0]; +h a9[0]; +cx a9[0],z_anc[0]; +cx q[2],z_anc[0]; +cx q[3],z_anc[0]; +cx q[4],z_anc[0]; +cx q[10],z_anc[0]; +cx a9[0],z_anc[0]; +h a9[0]; +measure a9[0] -> c9[0]; +cx q[11],z_anc[0]; +measure z_anc[0] -> z_c[0]; +measure z_anc[0] -> z_c[0]; +h x_anc[0]; +cx x_anc[0],q[0]; +cx x_anc[0],a10[0]; +cx x_anc[0],q[3]; +cx x_anc[0],q[7]; +cx x_anc[0],q[8]; +cx x_anc[0],q[10]; +cx x_anc[0],a10[0]; +measure a10[0] -> c10[0]; +cx x_anc[0],q[11]; +h x_anc[0]; +measure x_anc[0] -> x_c[0]; diff --git a/scripts/ft_stateprep/eval/circuits/carbon/zero_ft_heuristic_opt.stim b/scripts/ft_stateprep/eval/circuits/carbon/zero_ft_heuristic_opt.stim new file mode 100644 index 00000000..81c947ea --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/carbon/zero_ft_heuristic_opt.stim @@ -0,0 +1,14 @@ +H 1 2 4 6 8 +CX 1 7 6 9 2 5 7 0 7 6 4 10 5 11 9 3 10 1 8 5 7 2 8 4 8 9 2 8 9 0 4 7 0 12 +H 13 +CX 13 12 2 12 3 12 4 12 10 12 13 12 +H 13 +MR 13 +CX 11 12 +MR 12 12 +H 14 +CX 14 0 14 15 14 3 14 7 14 8 14 10 14 15 +MR 15 +CX 14 11 +H 14 +MR 14 diff --git a/scripts/ft_stateprep/eval/circuits/carbon/zero_ft_opt_opt.qasm b/scripts/ft_stateprep/eval/circuits/carbon/zero_ft_opt_opt.qasm new file mode 100644 index 00000000..56728faa --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/carbon/zero_ft_opt_opt.qasm @@ -0,0 +1,49 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[12]; +qreg z_anc[1]; +qreg x_anc[1]; +qreg a62[1]; +creg z_c[1]; +creg x_c[1]; +creg c62[1]; +h q[1]; +h q[2]; +h q[4]; +h q[6]; +h q[8]; +cx q[1],q[7]; +cx q[6],q[9]; +cx q[2],q[5]; +cx q[7],q[0]; +cx q[7],q[6]; +cx q[4],q[10]; +cx q[5],q[11]; +cx q[9],q[3]; +cx q[10],q[1]; +cx q[8],q[5]; +cx q[7],q[2]; +cx q[8],q[4]; +cx q[8],q[9]; +cx q[2],q[8]; +cx q[9],q[0]; +cx q[4],q[7]; +cx q[0],z_anc[0]; +cx q[2],z_anc[0]; +cx q[3],z_anc[0]; +cx q[4],z_anc[0]; +cx q[10],z_anc[0]; +cx q[11],z_anc[0]; +measure z_anc[0] -> z_c[0]; +h x_anc[0]; +cx x_anc[0],q[0]; +cx x_anc[0],a62[0]; +cx x_anc[0],q[1]; +cx x_anc[0],q[5]; +cx x_anc[0],q[6]; +cx x_anc[0],q[7]; +cx x_anc[0],a62[0]; +measure a62[0] -> c62[0]; +cx x_anc[0],q[11]; +h x_anc[0]; +measure x_anc[0] -> x_c[0]; diff --git a/scripts/ft_stateprep/eval/circuits/carbon/zero_ft_opt_opt.stim b/scripts/ft_stateprep/eval/circuits/carbon/zero_ft_opt_opt.stim new file mode 100644 index 00000000..1bfb8af5 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/carbon/zero_ft_opt_opt.stim @@ -0,0 +1,9 @@ +H 1 2 4 6 8 +CX 1 7 6 9 2 5 7 0 7 6 4 10 5 11 9 3 10 1 8 5 7 2 8 4 8 9 2 8 9 0 4 7 0 12 2 12 3 12 4 12 10 12 11 12 +MR 12 +H 13 +CX 13 0 13 14 13 1 13 5 13 6 13 7 13 14 +MR 14 +CX 13 11 +H 13 +MR 13 diff --git a/scripts/ft_stateprep/eval/circuits/carbon/zero_non_ft_heuristic.qasm b/scripts/ft_stateprep/eval/circuits/carbon/zero_non_ft_heuristic.qasm new file mode 100644 index 00000000..7cbb7eec --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/carbon/zero_non_ft_heuristic.qasm @@ -0,0 +1,24 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[12]; +h q[1]; +h q[2]; +h q[4]; +h q[6]; +h q[8]; +cx q[1],q[7]; +cx q[6],q[9]; +cx q[2],q[5]; +cx q[7],q[0]; +cx q[7],q[6]; +cx q[4],q[10]; +cx q[5],q[11]; +cx q[9],q[3]; +cx q[10],q[1]; +cx q[8],q[5]; +cx q[7],q[2]; +cx q[8],q[4]; +cx q[8],q[9]; +cx q[2],q[8]; +cx q[9],q[0]; +cx q[4],q[7]; diff --git a/scripts/ft_stateprep/eval/circuits/carbon/zero_non_ft_heuristic.stim b/scripts/ft_stateprep/eval/circuits/carbon/zero_non_ft_heuristic.stim new file mode 100644 index 00000000..a4ce9bda --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/carbon/zero_non_ft_heuristic.stim @@ -0,0 +1,2 @@ +H 1 2 4 6 8 +CX 1 7 6 9 2 5 7 0 7 6 4 10 5 11 9 3 10 1 8 5 7 2 8 4 8 9 2 8 9 0 4 7 diff --git a/scripts/ft_stateprep/eval/circuits/carbon/zero_non_ft_opt.qasm b/scripts/ft_stateprep/eval/circuits/carbon/zero_non_ft_opt.qasm new file mode 100644 index 00000000..7cbb7eec --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/carbon/zero_non_ft_opt.qasm @@ -0,0 +1,24 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[12]; +h q[1]; +h q[2]; +h q[4]; +h q[6]; +h q[8]; +cx q[1],q[7]; +cx q[6],q[9]; +cx q[2],q[5]; +cx q[7],q[0]; +cx q[7],q[6]; +cx q[4],q[10]; +cx q[5],q[11]; +cx q[9],q[3]; +cx q[10],q[1]; +cx q[8],q[5]; +cx q[7],q[2]; +cx q[8],q[4]; +cx q[8],q[9]; +cx q[2],q[8]; +cx q[9],q[0]; +cx q[4],q[7]; diff --git a/scripts/ft_stateprep/eval/circuits/carbon/zero_non_ft_opt.stim b/scripts/ft_stateprep/eval/circuits/carbon/zero_non_ft_opt.stim new file mode 100644 index 00000000..a4ce9bda --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/carbon/zero_non_ft_opt.stim @@ -0,0 +1,2 @@ +H 1 2 4 6 8 +CX 1 7 6 9 2 5 7 0 7 6 4 10 5 11 9 3 10 1 8 5 7 2 8 4 8 9 2 8 9 0 4 7 diff --git a/scripts/ft_stateprep/eval/circuits/cc_4_8_8/zero_ft_heuristic_opt.qasm b/scripts/ft_stateprep/eval/circuits/cc_4_8_8/zero_ft_heuristic_opt.qasm new file mode 100644 index 00000000..2d1a8358 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/cc_4_8_8/zero_ft_heuristic_opt.qasm @@ -0,0 +1,111 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[17]; +qreg z_anc[5]; +qreg x_anc[3]; +qreg a12[3]; +qreg a13[1]; +qreg a14[1]; +creg z_c[5]; +creg x_c[3]; +creg c12[3]; +creg c13[1]; +creg c14[1]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[9]; +h q[10]; +cx q[4],q[8]; +cx q[10],q[15]; +cx q[4],q[6]; +cx q[9],q[15]; +cx q[5],q[12]; +cx q[4],q[7]; +cx q[3],q[14]; +cx q[2],q[6]; +cx q[14],q[16]; +cx q[10],q[13]; +cx q[9],q[11]; +cx q[8],q[5]; +cx q[3],q[7]; +cx q[1],q[4]; +cx q[0],q[2]; +cx q[12],q[9]; +cx q[1],q[13]; +cx q[0],q[3]; +cx q[15],q[8]; +cx q[6],q[16]; +cx q[5],q[11]; +cx q[4],q[10]; +cx q[2],q[14]; +cx q[1],z_anc[0]; +cx q[5],z_anc[0]; +cx q[9],z_anc[0]; +cx q[10],z_anc[0]; +cx q[15],z_anc[0]; +cx q[0],z_anc[1]; +cx q[2],z_anc[1]; +cx q[7],z_anc[1]; +cx q[16],z_anc[1]; +cx q[0],z_anc[2]; +cx q[2],z_anc[2]; +cx q[7],z_anc[2]; +cx q[16],z_anc[2]; +cx q[1],z_anc[3]; +cx q[3],z_anc[3]; +cx q[4],z_anc[3]; +cx q[6],z_anc[3]; +cx q[14],z_anc[3]; +cx q[1],z_anc[4]; +cx q[4],z_anc[4]; +cx q[9],z_anc[4]; +cx q[11],z_anc[4]; +measure z_anc[0] -> z_c[0]; +measure z_anc[1] -> z_c[1]; +measure z_anc[2] -> z_c[2]; +measure z_anc[3] -> z_c[3]; +measure z_anc[4] -> z_c[4]; +h x_anc[0]; +cx x_anc[0],q[0]; +cx x_anc[0],a12[0]; +cx x_anc[0],q[1]; +cx x_anc[0],a12[1]; +cx x_anc[0],q[8]; +cx x_anc[0],q[10]; +cx x_anc[0],a12[2]; +cx x_anc[0],q[11]; +cx x_anc[0],q[12]; +cx x_anc[0],a12[0]; +measure a12[0] -> c12[0]; +cx x_anc[0],q[14]; +cx x_anc[0],a12[2]; +measure a12[2] -> c12[2]; +cx x_anc[0],a12[1]; +measure a12[1] -> c12[1]; +cx x_anc[0],q[16]; +h x_anc[0]; +measure x_anc[0] -> x_c[0]; +h x_anc[1]; +cx x_anc[1],q[5]; +cx x_anc[1],a13[0]; +cx x_anc[1],q[10]; +cx x_anc[1],q[12]; +cx x_anc[1],a13[0]; +measure a13[0] -> c13[0]; +cx x_anc[1],q[13]; +h x_anc[1]; +measure x_anc[1] -> x_c[1]; +h x_anc[2]; +cx x_anc[2],q[1]; +cx x_anc[2],a14[0]; +cx x_anc[2],q[4]; +cx x_anc[2],q[10]; +cx x_anc[2],a14[0]; +measure a14[0] -> c14[0]; +cx x_anc[2],q[13]; +h x_anc[2]; +measure x_anc[2] -> x_c[2]; diff --git a/scripts/ft_stateprep/eval/circuits/cc_4_8_8/zero_ft_heuristic_opt.stim b/scripts/ft_stateprep/eval/circuits/cc_4_8_8/zero_ft_heuristic_opt.stim new file mode 100644 index 00000000..743ad4d7 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/cc_4_8_8/zero_ft_heuristic_opt.stim @@ -0,0 +1,25 @@ +H 0 1 2 3 4 5 9 10 +CX 4 8 10 15 4 6 9 15 5 12 4 7 3 14 2 6 14 16 10 13 9 11 8 5 3 7 1 4 0 2 12 9 1 13 0 3 15 8 6 16 5 11 4 10 2 14 1 17 5 17 9 17 10 17 15 17 0 18 2 18 7 18 16 18 0 19 2 19 7 19 16 19 1 20 3 20 4 20 6 20 14 20 1 21 4 21 9 21 11 21 +MR 17 18 19 20 21 +H 22 +CX 22 0 22 25 22 1 22 26 22 8 22 10 22 27 22 11 22 12 22 25 +MR 25 +CX 22 14 22 27 +MR 27 +CX 22 26 +MR 26 +CX 22 16 +H 22 +MR 22 +H 23 +CX 23 5 23 28 23 10 23 12 23 28 +MR 28 +CX 23 13 +H 23 +MR 23 +H 24 +CX 24 1 24 29 24 4 24 10 24 29 +MR 29 +CX 24 13 +H 24 +MR 24 diff --git a/scripts/ft_stateprep/eval/circuits/cc_4_8_8/zero_non_ft_heuristic.qasm b/scripts/ft_stateprep/eval/circuits/cc_4_8_8/zero_non_ft_heuristic.qasm new file mode 100644 index 00000000..f5eed9e6 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/cc_4_8_8/zero_non_ft_heuristic.qasm @@ -0,0 +1,34 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[17]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[9]; +h q[10]; +cx q[4],q[8]; +cx q[10],q[15]; +cx q[4],q[6]; +cx q[9],q[15]; +cx q[5],q[12]; +cx q[4],q[7]; +cx q[3],q[14]; +cx q[2],q[6]; +cx q[14],q[16]; +cx q[10],q[13]; +cx q[9],q[11]; +cx q[8],q[5]; +cx q[3],q[7]; +cx q[1],q[4]; +cx q[0],q[2]; +cx q[12],q[9]; +cx q[1],q[13]; +cx q[0],q[3]; +cx q[15],q[8]; +cx q[6],q[16]; +cx q[5],q[11]; +cx q[4],q[10]; +cx q[2],q[14]; diff --git a/scripts/ft_stateprep/eval/circuits/cc_4_8_8/zero_non_ft_heuristic.stim b/scripts/ft_stateprep/eval/circuits/cc_4_8_8/zero_non_ft_heuristic.stim new file mode 100644 index 00000000..ab3b38c6 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/cc_4_8_8/zero_non_ft_heuristic.stim @@ -0,0 +1,2 @@ +H 0 1 2 3 4 5 9 10 +CX 4 8 10 15 4 6 9 15 5 12 4 7 3 14 2 6 14 16 10 13 9 11 8 5 3 7 1 4 0 2 12 9 1 13 0 3 15 8 6 16 5 11 4 10 2 14 diff --git a/scripts/ft_stateprep/eval/circuits/cc_6_6_6/zero_ft_heuristic_opt.qasm b/scripts/ft_stateprep/eval/circuits/cc_6_6_6/zero_ft_heuristic_opt.qasm new file mode 100644 index 00000000..d66d97cf --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/cc_6_6_6/zero_ft_heuristic_opt.qasm @@ -0,0 +1,184 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[19]; +qreg z_anc[6]; +qreg x_anc[6]; +qreg a6[3]; +qreg a7[2]; +qreg a8[1]; +qreg a9[2]; +qreg a10[2]; +qreg a11[2]; +creg z_c[6]; +creg x_c[6]; +creg c6[3]; +creg c7[2]; +creg c8[1]; +creg c9[2]; +creg c10[2]; +creg c11[2]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[10]; +h q[12]; +cx q[6],q[16]; +cx q[4],q[13]; +cx q[3],q[7]; +cx q[12],q[17]; +cx q[10],q[18]; +cx q[7],q[11]; +cx q[6],q[3]; +cx q[4],q[8]; +cx q[2],q[16]; +cx q[1],q[15]; +cx q[0],q[14]; +cx q[11],q[12]; +cx q[10],q[13]; +cx q[8],q[9]; +cx q[6],q[0]; +cx q[5],q[2]; +cx q[4],q[3]; +cx q[1],q[7]; +cx q[17],q[18]; +cx q[14],q[15]; +cx q[5],q[9]; +cx q[16],q[4]; +cx q[13],q[11]; +cx q[12],q[10]; +cx q[7],q[6]; +cx q[2],q[8]; +cx q[0],q[1]; +cx q[0],z_anc[0]; +cx q[5],z_anc[0]; +cx q[6],z_anc[0]; +cx q[9],z_anc[0]; +cx q[12],z_anc[0]; +cx q[13],z_anc[0]; +cx q[15],z_anc[0]; +cx q[18],z_anc[0]; +cx q[4],z_anc[1]; +cx q[5],z_anc[1]; +cx q[6],z_anc[1]; +cx q[7],z_anc[1]; +cx q[8],z_anc[1]; +cx q[0],z_anc[2]; +cx q[2],z_anc[2]; +cx q[3],z_anc[2]; +cx q[7],z_anc[2]; +cx q[8],z_anc[2]; +cx q[15],z_anc[2]; +cx q[1],z_anc[3]; +cx q[6],z_anc[3]; +cx q[11],z_anc[3]; +cx q[13],z_anc[3]; +cx q[14],z_anc[3]; +cx q[1],z_anc[4]; +cx q[2],z_anc[4]; +cx q[5],z_anc[4]; +cx q[15],z_anc[4]; +cx q[16],z_anc[4]; +cx q[4],z_anc[5]; +cx q[5],z_anc[5]; +cx q[9],z_anc[5]; +cx q[16],z_anc[5]; +measure z_anc[0] -> z_c[0]; +measure z_anc[1] -> z_c[1]; +measure z_anc[2] -> z_c[2]; +measure z_anc[3] -> z_c[3]; +measure z_anc[4] -> z_c[4]; +measure z_anc[5] -> z_c[5]; +h x_anc[0]; +cx x_anc[0],q[1]; +cx x_anc[0],a6[0]; +cx x_anc[0],q[2]; +cx x_anc[0],a6[1]; +cx x_anc[0],q[4]; +cx x_anc[0],q[5]; +cx x_anc[0],a6[2]; +cx x_anc[0],q[10]; +cx x_anc[0],q[11]; +cx x_anc[0],a6[0]; +measure a6[0] -> c6[0]; +cx x_anc[0],q[15]; +cx x_anc[0],a6[2]; +measure a6[2] -> c6[2]; +cx x_anc[0],a6[1]; +measure a6[1] -> c6[1]; +cx x_anc[0],q[17]; +h x_anc[0]; +measure x_anc[0] -> x_c[0]; +h x_anc[1]; +cx x_anc[1],q[1]; +cx x_anc[1],a7[0]; +cx x_anc[1],q[3]; +cx x_anc[1],a7[1]; +cx x_anc[1],q[5]; +cx x_anc[1],q[7]; +cx x_anc[1],a7[0]; +measure a7[0] -> c7[0]; +cx x_anc[1],q[9]; +cx x_anc[1],a7[1]; +measure a7[1] -> c7[1]; +cx x_anc[1],q[14]; +h x_anc[1]; +measure x_anc[1] -> x_c[1]; +h x_anc[2]; +cx x_anc[2],q[0]; +cx x_anc[2],a8[0]; +cx x_anc[2],q[1]; +cx x_anc[2],q[14]; +cx x_anc[2],a8[0]; +measure a8[0] -> c8[0]; +cx x_anc[2],q[15]; +h x_anc[2]; +measure x_anc[2] -> x_c[2]; +h x_anc[3]; +cx x_anc[3],q[1]; +cx x_anc[3],a9[0]; +cx x_anc[3],q[3]; +cx x_anc[3],a9[1]; +cx x_anc[3],q[12]; +cx x_anc[3],q[13]; +cx x_anc[3],a9[0]; +measure a9[0] -> c9[0]; +cx x_anc[3],q[15]; +cx x_anc[3],a9[1]; +measure a9[1] -> c9[1]; +cx x_anc[3],q[18]; +h x_anc[3]; +measure x_anc[3] -> x_c[3]; +h x_anc[4]; +cx x_anc[4],q[2]; +cx x_anc[4],a10[0]; +cx x_anc[4],q[3]; +cx x_anc[4],a10[1]; +cx x_anc[4],q[9]; +cx x_anc[4],q[12]; +cx x_anc[4],a10[0]; +measure a10[0] -> c10[0]; +cx x_anc[4],q[16]; +cx x_anc[4],a10[1]; +measure a10[1] -> c10[1]; +cx x_anc[4],q[17]; +h x_anc[4]; +measure x_anc[4] -> x_c[4]; +h x_anc[5]; +cx x_anc[5],q[0]; +cx x_anc[5],a11[0]; +cx x_anc[5],q[3]; +cx x_anc[5],a11[1]; +cx x_anc[5],q[5]; +cx x_anc[5],q[7]; +cx x_anc[5],a11[0]; +measure a11[0] -> c11[0]; +cx x_anc[5],q[9]; +cx x_anc[5],a11[1]; +measure a11[1] -> c11[1]; +cx x_anc[5],q[15]; +h x_anc[5]; +measure x_anc[5] -> x_c[5]; diff --git a/scripts/ft_stateprep/eval/circuits/cc_6_6_6/zero_ft_heuristic_opt.stim b/scripts/ft_stateprep/eval/circuits/cc_6_6_6/zero_ft_heuristic_opt.stim new file mode 100644 index 00000000..97e23c24 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/cc_6_6_6/zero_ft_heuristic_opt.stim @@ -0,0 +1,51 @@ +H 0 1 2 3 4 5 6 10 12 +CX 6 16 4 13 3 7 12 17 10 18 7 11 6 3 4 8 2 16 1 15 0 14 11 12 10 13 8 9 6 0 5 2 4 3 1 7 17 18 14 15 5 9 16 4 13 11 12 10 7 6 2 8 0 1 0 19 5 19 6 19 9 19 12 19 13 19 15 19 18 19 4 20 5 20 6 20 7 20 8 20 0 21 2 21 3 21 7 21 8 21 15 21 1 22 6 22 11 22 13 22 14 22 1 23 2 23 5 23 15 23 16 23 4 24 5 24 9 24 16 24 +MR 19 20 21 22 23 24 +H 25 +CX 25 1 25 31 25 2 25 32 25 4 25 5 25 33 25 10 25 11 25 31 +MR 31 +CX 25 15 25 33 +MR 33 +CX 25 32 +MR 32 +CX 25 17 +H 25 +MR 25 +H 26 +CX 26 1 26 34 26 3 26 35 26 5 26 7 26 34 +MR 34 +CX 26 9 26 35 +MR 35 +CX 26 14 +H 26 +MR 26 +H 27 +CX 27 0 27 36 27 1 27 14 27 36 +MR 36 +CX 27 15 +H 27 +MR 27 +H 28 +CX 28 1 28 37 28 3 28 38 28 12 28 13 28 37 +MR 37 +CX 28 15 28 38 +MR 38 +CX 28 18 +H 28 +MR 28 +H 29 +CX 29 2 29 39 29 3 29 40 29 9 29 12 29 39 +MR 39 +CX 29 16 29 40 +MR 40 +CX 29 17 +H 29 +MR 29 +H 30 +CX 30 0 30 41 30 3 30 42 30 5 30 7 30 41 +MR 41 +CX 30 9 30 42 +MR 42 +CX 30 15 +H 30 +MR 30 diff --git a/scripts/ft_stateprep/eval/circuits/cc_6_6_6/zero_non_ft_heuristic.qasm b/scripts/ft_stateprep/eval/circuits/cc_6_6_6/zero_non_ft_heuristic.qasm new file mode 100644 index 00000000..c7bfbf84 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/cc_6_6_6/zero_non_ft_heuristic.qasm @@ -0,0 +1,39 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[19]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[10]; +h q[12]; +cx q[6],q[16]; +cx q[4],q[13]; +cx q[3],q[7]; +cx q[12],q[17]; +cx q[10],q[18]; +cx q[7],q[11]; +cx q[6],q[3]; +cx q[4],q[8]; +cx q[2],q[16]; +cx q[1],q[15]; +cx q[0],q[14]; +cx q[11],q[12]; +cx q[10],q[13]; +cx q[8],q[9]; +cx q[6],q[0]; +cx q[5],q[2]; +cx q[4],q[3]; +cx q[1],q[7]; +cx q[17],q[18]; +cx q[14],q[15]; +cx q[5],q[9]; +cx q[16],q[4]; +cx q[13],q[11]; +cx q[12],q[10]; +cx q[7],q[6]; +cx q[2],q[8]; +cx q[0],q[1]; diff --git a/scripts/ft_stateprep/eval/circuits/cc_6_6_6/zero_non_ft_heuristic.stim b/scripts/ft_stateprep/eval/circuits/cc_6_6_6/zero_non_ft_heuristic.stim new file mode 100644 index 00000000..e54faf79 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/cc_6_6_6/zero_non_ft_heuristic.stim @@ -0,0 +1,2 @@ +H 0 1 2 3 4 5 6 10 12 +CX 6 16 4 13 3 7 12 17 10 18 7 11 6 3 4 8 2 16 1 15 0 14 11 12 10 13 8 9 6 0 5 2 4 3 1 7 17 18 14 15 5 9 16 4 13 11 12 10 7 6 2 8 0 1 diff --git a/scripts/ft_stateprep/eval/circuits/hamming/plus_ft_heuristic_heuristic.qasm b/scripts/ft_stateprep/eval/circuits/hamming/plus_ft_heuristic_heuristic.qasm new file mode 100644 index 00000000..99728fb0 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/hamming/plus_ft_heuristic_heuristic.qasm @@ -0,0 +1,57 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[15]; +qreg x_anc[2]; +creg x_c[2]; +h q[2]; +h q[4]; +h q[5]; +h q[6]; +h q[8]; +h q[9]; +h q[10]; +h q[11]; +h q[12]; +h q[13]; +h q[14]; +cx q[11],q[7]; +cx q[5],q[3]; +cx q[2],q[1]; +cx q[13],q[11]; +cx q[9],q[7]; +cx q[6],q[5]; +cx q[4],q[3]; +cx q[2],q[0]; +cx q[14],q[13]; +cx q[12],q[11]; +cx q[10],q[9]; +cx q[8],q[7]; +cx q[5],q[1]; +cx q[4],q[0]; +cx q[6],q[2]; +cx q[11],q[3]; +cx q[9],q[1]; +cx q[8],q[0]; +cx q[13],q[5]; +cx q[12],q[4]; +cx q[10],q[2]; +cx q[14],q[6]; +h x_anc[0]; +cx x_anc[0],q[0]; +cx x_anc[0],q[2]; +cx x_anc[0],q[4]; +cx x_anc[0],q[6]; +cx x_anc[0],q[7]; +cx x_anc[0],q[9]; +cx x_anc[0],q[11]; +cx x_anc[0],q[13]; +h x_anc[0]; +h x_anc[1]; +cx x_anc[1],q[5]; +cx x_anc[1],q[9]; +cx x_anc[1],q[12]; +cx x_anc[1],q[13]; +cx x_anc[1],q[14]; +h x_anc[1]; +measure x_anc[0] -> x_c[0]; +measure x_anc[1] -> x_c[1]; diff --git a/scripts/ft_stateprep/eval/circuits/hamming/plus_ft_heuristic_heuristic.stim b/scripts/ft_stateprep/eval/circuits/hamming/plus_ft_heuristic_heuristic.stim new file mode 100644 index 00000000..cd14b363 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/hamming/plus_ft_heuristic_heuristic.stim @@ -0,0 +1,8 @@ +H 2 4 5 6 8 9 10 11 12 13 14 +CX 11 7 5 3 2 1 13 11 9 7 6 5 4 3 2 0 14 13 12 11 10 9 8 7 5 1 4 0 6 2 11 3 9 1 8 0 13 5 12 4 10 2 14 6 +H 15 +CX 15 0 15 2 15 4 15 6 15 7 15 9 15 11 15 13 +H 15 16 +CX 16 5 16 9 16 12 16 13 16 14 +H 16 +MR 15 16 diff --git a/scripts/ft_stateprep/eval/circuits/hamming/plus_ft_heuristic_opt.qasm b/scripts/ft_stateprep/eval/circuits/hamming/plus_ft_heuristic_opt.qasm new file mode 100644 index 00000000..19cae239 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/hamming/plus_ft_heuristic_opt.qasm @@ -0,0 +1,51 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[15]; +qreg x_anc[2]; +creg x_c[2]; +h q[2]; +h q[4]; +h q[5]; +h q[6]; +h q[8]; +h q[9]; +h q[10]; +h q[11]; +h q[12]; +h q[13]; +h q[14]; +cx q[11],q[7]; +cx q[5],q[3]; +cx q[2],q[1]; +cx q[13],q[11]; +cx q[9],q[7]; +cx q[6],q[5]; +cx q[4],q[3]; +cx q[2],q[0]; +cx q[14],q[13]; +cx q[12],q[11]; +cx q[10],q[9]; +cx q[8],q[7]; +cx q[5],q[1]; +cx q[4],q[0]; +cx q[6],q[2]; +cx q[11],q[3]; +cx q[9],q[1]; +cx q[8],q[0]; +cx q[13],q[5]; +cx q[12],q[4]; +cx q[10],q[2]; +cx q[14],q[6]; +h x_anc[0]; +cx x_anc[0],q[5]; +cx x_anc[0],q[10]; +cx x_anc[0],q[12]; +cx x_anc[1],q[1]; +h x_anc[0]; +h x_anc[1]; +cx x_anc[1],q[3]; +cx x_anc[1],q[8]; +cx x_anc[1],q[14]; +h x_anc[1]; +measure x_anc[0] -> x_c[0]; +measure x_anc[1] -> x_c[1]; diff --git a/scripts/ft_stateprep/eval/circuits/hamming/plus_ft_heuristic_opt.stim b/scripts/ft_stateprep/eval/circuits/hamming/plus_ft_heuristic_opt.stim new file mode 100644 index 00000000..ded024c7 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/hamming/plus_ft_heuristic_opt.stim @@ -0,0 +1,8 @@ +H 2 4 5 6 8 9 10 11 12 13 14 +CX 11 7 5 3 2 1 13 11 9 7 6 5 4 3 2 0 14 13 12 11 10 9 8 7 5 1 4 0 6 2 11 3 9 1 8 0 13 5 12 4 10 2 14 6 +H 15 +CX 15 5 15 10 15 12 16 1 +H 15 16 +CX 16 3 16 8 16 14 +H 16 +MR 15 16 diff --git a/scripts/ft_stateprep/eval/circuits/hamming/plus_ft_opt_opt.qasm b/scripts/ft_stateprep/eval/circuits/hamming/plus_ft_opt_opt.qasm new file mode 100644 index 00000000..4943ee79 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/hamming/plus_ft_opt_opt.qasm @@ -0,0 +1,50 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[15]; +qreg x_anc[2]; +creg x_c[2]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +h q[10]; +h q[13]; +h q[14]; +cx q[10],q[0]; +cx q[0],q[1]; +cx q[7],q[1]; +cx q[3],q[12]; +cx q[6],q[10]; +cx q[8],q[1]; +cx q[4],q[11]; +cx q[11],q[3]; +cx q[13],q[11]; +cx q[9],q[8]; +cx q[14],q[0]; +cx q[10],q[12]; +cx q[3],q[1]; +cx q[5],q[6]; +cx q[0],q[11]; +cx q[6],q[0]; +cx q[7],q[0]; +cx q[1],q[10]; +cx q[11],q[1]; +cx q[9],q[4]; +cx q[2],q[4]; +cx q[4],q[5]; +h x_anc[0]; +cx x_anc[0],q[0]; +cx x_anc[0],q[9]; +cx x_anc[0],q[10]; +h x_anc[0]; +measure x_anc[0] -> x_c[0]; +h x_anc[1]; +cx x_anc[1],q[4]; +cx x_anc[1],q[8]; +cx x_anc[1],q[11]; +h x_anc[1]; +measure x_anc[1] -> x_c[1]; diff --git a/scripts/ft_stateprep/eval/circuits/hamming/plus_ft_opt_opt.stim b/scripts/ft_stateprep/eval/circuits/hamming/plus_ft_opt_opt.stim new file mode 100644 index 00000000..05f8679f --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/hamming/plus_ft_opt_opt.stim @@ -0,0 +1,10 @@ +H 2 3 4 5 6 7 8 9 10 13 14 +CX 10 0 0 1 7 1 3 12 6 10 8 1 4 11 11 3 13 11 9 8 14 0 10 12 3 1 5 6 0 11 6 0 7 0 1 10 11 1 9 4 2 4 4 5 +H 15 +CX 15 0 15 9 15 10 +H 15 +MR 15 +H 16 +CX 16 4 16 8 16 11 +H 16 +MR 16 diff --git a/scripts/ft_stateprep/eval/circuits/hamming/plus_non_ft_heuristic.qasm b/scripts/ft_stateprep/eval/circuits/hamming/plus_non_ft_heuristic.qasm new file mode 100644 index 00000000..49c2993c --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/hamming/plus_non_ft_heuristic.qasm @@ -0,0 +1,36 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[15]; +h q[2]; +h q[4]; +h q[5]; +h q[6]; +h q[8]; +h q[9]; +h q[10]; +h q[11]; +h q[12]; +h q[13]; +h q[14]; +cx q[11],q[7]; +cx q[5],q[3]; +cx q[2],q[1]; +cx q[13],q[11]; +cx q[9],q[7]; +cx q[6],q[5]; +cx q[4],q[3]; +cx q[2],q[0]; +cx q[14],q[13]; +cx q[12],q[11]; +cx q[10],q[9]; +cx q[8],q[7]; +cx q[5],q[1]; +cx q[4],q[0]; +cx q[6],q[2]; +cx q[11],q[3]; +cx q[9],q[1]; +cx q[8],q[0]; +cx q[13],q[5]; +cx q[12],q[4]; +cx q[10],q[2]; +cx q[14],q[6]; diff --git a/scripts/ft_stateprep/eval/circuits/hamming/plus_non_ft_heuristic.stim b/scripts/ft_stateprep/eval/circuits/hamming/plus_non_ft_heuristic.stim new file mode 100644 index 00000000..4482ea25 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/hamming/plus_non_ft_heuristic.stim @@ -0,0 +1,2 @@ +H 2 4 5 6 8 9 10 11 12 13 14 +CX 11 7 5 3 2 1 13 11 9 7 6 5 4 3 2 0 14 13 12 11 10 9 8 7 5 1 4 0 6 2 11 3 9 1 8 0 13 5 12 4 10 2 14 6 diff --git a/scripts/ft_stateprep/eval/circuits/hamming/plus_non_ft_opt.qasm b/scripts/ft_stateprep/eval/circuits/hamming/plus_non_ft_opt.qasm new file mode 100644 index 00000000..94c55277 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/hamming/plus_non_ft_opt.qasm @@ -0,0 +1,36 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[15]; +h q[0]; +h q[1]; +h q[2]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +h q[12]; +h q[13]; +cx q[4],q[3]; +cx q[2],q[11]; +cx q[1],q[2]; +cx q[3],q[10]; +cx q[9],q[14]; +cx q[14],q[4]; +cx q[12],q[3]; +cx q[11],q[9]; +cx q[7],q[14]; +cx q[0],q[12]; +cx q[5],q[4]; +cx q[2],q[3]; +cx q[4],q[2]; +cx q[8],q[4]; +cx q[13],q[9]; +cx q[3],q[8]; +cx q[12],q[11]; +cx q[8],q[11]; +cx q[14],q[10]; +cx q[6],q[10]; +cx q[9],q[3]; +cx q[10],q[11]; diff --git a/scripts/ft_stateprep/eval/circuits/hamming/plus_non_ft_opt.stim b/scripts/ft_stateprep/eval/circuits/hamming/plus_non_ft_opt.stim new file mode 100644 index 00000000..c8e14509 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/hamming/plus_non_ft_opt.stim @@ -0,0 +1,2 @@ +H 0 1 2 4 5 6 7 8 9 12 13 +CX 4 3 2 11 1 2 3 10 9 14 14 4 12 3 11 9 7 14 0 12 5 4 2 3 4 2 8 4 13 9 3 8 12 11 8 11 14 10 6 10 9 3 10 11 diff --git a/scripts/ft_stateprep/eval/circuits/hamming/zero_ft_heuristic_heuristic.qasm b/scripts/ft_stateprep/eval/circuits/hamming/zero_ft_heuristic_heuristic.qasm new file mode 100644 index 00000000..67383fb4 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/hamming/zero_ft_heuristic_heuristic.qasm @@ -0,0 +1,46 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[15]; +qreg z_anc[2]; +creg z_c[2]; +h q[0]; +h q[1]; +h q[3]; +h q[7]; +cx q[7],q[11]; +cx q[3],q[5]; +cx q[1],q[2]; +cx q[11],q[13]; +cx q[7],q[9]; +cx q[5],q[6]; +cx q[3],q[4]; +cx q[0],q[2]; +cx q[13],q[14]; +cx q[11],q[12]; +cx q[9],q[10]; +cx q[7],q[8]; +cx q[1],q[5]; +cx q[0],q[4]; +cx q[2],q[6]; +cx q[3],q[11]; +cx q[1],q[9]; +cx q[0],q[8]; +cx q[5],q[13]; +cx q[4],q[12]; +cx q[2],q[10]; +cx q[6],q[14]; +cx q[0],z_anc[0]; +cx q[2],z_anc[0]; +cx q[4],z_anc[0]; +cx q[6],z_anc[0]; +cx q[7],z_anc[0]; +cx q[9],z_anc[0]; +cx q[11],z_anc[0]; +cx q[13],z_anc[0]; +cx q[5],z_anc[1]; +cx q[9],z_anc[1]; +cx q[12],z_anc[1]; +cx q[13],z_anc[1]; +cx q[14],z_anc[1]; +measure z_anc[0] -> z_c[0]; +measure z_anc[1] -> z_c[1]; diff --git a/scripts/ft_stateprep/eval/circuits/hamming/zero_ft_heuristic_heuristic.stim b/scripts/ft_stateprep/eval/circuits/hamming/zero_ft_heuristic_heuristic.stim new file mode 100644 index 00000000..ed71a2e7 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/hamming/zero_ft_heuristic_heuristic.stim @@ -0,0 +1,3 @@ +H 0 1 3 7 +CX 7 11 3 5 1 2 11 13 7 9 5 6 3 4 0 2 13 14 11 12 9 10 7 8 1 5 0 4 2 6 3 11 1 9 0 8 5 13 4 12 2 10 6 14 0 15 2 15 4 15 6 15 7 15 9 15 11 15 13 15 5 16 9 16 12 16 13 16 14 16 +MR 15 16 diff --git a/scripts/ft_stateprep/eval/circuits/hamming/zero_ft_heuristic_opt.qasm b/scripts/ft_stateprep/eval/circuits/hamming/zero_ft_heuristic_opt.qasm new file mode 100644 index 00000000..c6462666 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/hamming/zero_ft_heuristic_opt.qasm @@ -0,0 +1,40 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[15]; +qreg z_anc[2]; +creg z_c[2]; +h q[0]; +h q[1]; +h q[3]; +h q[7]; +cx q[7],q[11]; +cx q[3],q[5]; +cx q[1],q[2]; +cx q[11],q[13]; +cx q[7],q[9]; +cx q[5],q[6]; +cx q[3],q[4]; +cx q[0],q[2]; +cx q[13],q[14]; +cx q[11],q[12]; +cx q[9],q[10]; +cx q[7],q[8]; +cx q[1],q[5]; +cx q[0],q[4]; +cx q[2],q[6]; +cx q[3],q[11]; +cx q[1],q[9]; +cx q[0],q[8]; +cx q[5],q[13]; +cx q[4],q[12]; +cx q[2],q[10]; +cx q[6],q[14]; +cx q[5],z_anc[0]; +cx q[10],z_anc[0]; +cx q[12],z_anc[0]; +cx q[1],z_anc[1]; +cx q[3],z_anc[1]; +cx q[8],z_anc[1]; +cx q[14],z_anc[1]; +measure z_anc[0] -> z_c[0]; +measure z_anc[1] -> z_c[1]; diff --git a/scripts/ft_stateprep/eval/circuits/hamming/zero_ft_heuristic_opt.stim b/scripts/ft_stateprep/eval/circuits/hamming/zero_ft_heuristic_opt.stim new file mode 100644 index 00000000..29a56c36 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/hamming/zero_ft_heuristic_opt.stim @@ -0,0 +1,3 @@ +H 0 1 3 7 +CX 7 11 3 5 1 2 11 13 7 9 5 6 3 4 0 2 13 14 11 12 9 10 7 8 1 5 0 4 2 6 3 11 1 9 0 8 5 13 4 12 2 10 6 14 5 15 10 15 12 15 1 16 3 16 8 16 14 16 +MR 15 16 diff --git a/scripts/ft_stateprep/eval/circuits/hamming/zero_ft_opt_opt.qasm b/scripts/ft_stateprep/eval/circuits/hamming/zero_ft_opt_opt.qasm new file mode 100644 index 00000000..ecaee76a --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/hamming/zero_ft_opt_opt.qasm @@ -0,0 +1,39 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[15]; +qreg z_anc[2]; +creg z_c[2]; +h q[0]; +h q[1]; +h q[11]; +h q[12]; +cx q[0],q[10]; +cx q[1],q[0]; +cx q[1],q[7]; +cx q[12],q[3]; +cx q[10],q[6]; +cx q[1],q[8]; +cx q[11],q[4]; +cx q[3],q[11]; +cx q[11],q[13]; +cx q[8],q[9]; +cx q[0],q[14]; +cx q[12],q[10]; +cx q[1],q[3]; +cx q[6],q[5]; +cx q[11],q[0]; +cx q[0],q[6]; +cx q[0],q[7]; +cx q[10],q[1]; +cx q[1],q[11]; +cx q[4],q[9]; +cx q[4],q[2]; +cx q[5],q[4]; +cx q[0],z_anc[0]; +cx q[9],z_anc[0]; +cx q[10],z_anc[0]; +cx q[4],z_anc[1]; +cx q[8],z_anc[1]; +cx q[11],z_anc[1]; +measure z_anc[0] -> z_c[0]; +measure z_anc[1] -> z_c[1]; diff --git a/scripts/ft_stateprep/eval/circuits/hamming/zero_ft_opt_opt.stim b/scripts/ft_stateprep/eval/circuits/hamming/zero_ft_opt_opt.stim new file mode 100644 index 00000000..d95f54e3 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/hamming/zero_ft_opt_opt.stim @@ -0,0 +1,3 @@ +H 0 1 11 12 +CX 0 10 1 0 1 7 12 3 10 6 1 8 11 4 3 11 11 13 8 9 0 14 12 10 1 3 6 5 11 0 0 6 0 7 10 1 1 11 4 9 4 2 5 4 0 15 9 15 10 15 4 16 8 16 11 16 +MR 15 16 diff --git a/scripts/ft_stateprep/eval/circuits/hamming/zero_non_ft_heuristic.qasm b/scripts/ft_stateprep/eval/circuits/hamming/zero_non_ft_heuristic.qasm new file mode 100644 index 00000000..67383fb4 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/hamming/zero_non_ft_heuristic.qasm @@ -0,0 +1,46 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[15]; +qreg z_anc[2]; +creg z_c[2]; +h q[0]; +h q[1]; +h q[3]; +h q[7]; +cx q[7],q[11]; +cx q[3],q[5]; +cx q[1],q[2]; +cx q[11],q[13]; +cx q[7],q[9]; +cx q[5],q[6]; +cx q[3],q[4]; +cx q[0],q[2]; +cx q[13],q[14]; +cx q[11],q[12]; +cx q[9],q[10]; +cx q[7],q[8]; +cx q[1],q[5]; +cx q[0],q[4]; +cx q[2],q[6]; +cx q[3],q[11]; +cx q[1],q[9]; +cx q[0],q[8]; +cx q[5],q[13]; +cx q[4],q[12]; +cx q[2],q[10]; +cx q[6],q[14]; +cx q[0],z_anc[0]; +cx q[2],z_anc[0]; +cx q[4],z_anc[0]; +cx q[6],z_anc[0]; +cx q[7],z_anc[0]; +cx q[9],z_anc[0]; +cx q[11],z_anc[0]; +cx q[13],z_anc[0]; +cx q[5],z_anc[1]; +cx q[9],z_anc[1]; +cx q[12],z_anc[1]; +cx q[13],z_anc[1]; +cx q[14],z_anc[1]; +measure z_anc[0] -> z_c[0]; +measure z_anc[1] -> z_c[1]; diff --git a/scripts/ft_stateprep/eval/circuits/hamming/zero_non_ft_heuristic.stim b/scripts/ft_stateprep/eval/circuits/hamming/zero_non_ft_heuristic.stim new file mode 100644 index 00000000..ed71a2e7 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/hamming/zero_non_ft_heuristic.stim @@ -0,0 +1,3 @@ +H 0 1 3 7 +CX 7 11 3 5 1 2 11 13 7 9 5 6 3 4 0 2 13 14 11 12 9 10 7 8 1 5 0 4 2 6 3 11 1 9 0 8 5 13 4 12 2 10 6 14 0 15 2 15 4 15 6 15 7 15 9 15 11 15 13 15 5 16 9 16 12 16 13 16 14 16 +MR 15 16 diff --git a/scripts/ft_stateprep/eval/circuits/hamming/zero_non_ft_opt.qasm b/scripts/ft_stateprep/eval/circuits/hamming/zero_non_ft_opt.qasm new file mode 100644 index 00000000..cf586641 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/hamming/zero_non_ft_opt.qasm @@ -0,0 +1,29 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[15]; +h q[0]; +h q[1]; +h q[11]; +h q[12]; +cx q[0],q[10]; +cx q[1],q[0]; +cx q[1],q[7]; +cx q[12],q[3]; +cx q[10],q[6]; +cx q[1],q[8]; +cx q[11],q[4]; +cx q[3],q[11]; +cx q[11],q[13]; +cx q[8],q[9]; +cx q[0],q[14]; +cx q[12],q[10]; +cx q[1],q[3]; +cx q[6],q[5]; +cx q[11],q[0]; +cx q[0],q[6]; +cx q[0],q[7]; +cx q[10],q[1]; +cx q[1],q[11]; +cx q[4],q[9]; +cx q[4],q[2]; +cx q[5],q[4]; diff --git a/scripts/ft_stateprep/eval/circuits/hamming/zero_non_ft_opt.stim b/scripts/ft_stateprep/eval/circuits/hamming/zero_non_ft_opt.stim new file mode 100644 index 00000000..b43c481f --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/hamming/zero_non_ft_opt.stim @@ -0,0 +1,2 @@ +H 0 1 11 12 +CX 0 10 1 0 1 7 12 3 10 6 1 8 11 4 3 11 11 13 8 9 0 14 12 10 1 3 6 5 11 0 0 6 0 7 10 1 1 11 4 9 4 2 5 4 diff --git a/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_ft_heuristic_heuristic.qasm b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_ft_heuristic_heuristic.qasm new file mode 100644 index 00000000..d1e48edf --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_ft_heuristic_heuristic.qasm @@ -0,0 +1,23 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[9]; +qreg x_anc[1]; +creg x_c[1]; +h q[2]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +cx q[7],q[3]; +cx q[5],q[1]; +cx q[4],q[3]; +cx q[2],q[1]; +cx q[7],q[8]; +cx q[6],q[3]; +cx q[4],q[2]; +cx q[1],q[0]; +h x_anc[0]; +cx x_anc[0],q[2]; +cx x_anc[0],q[5]; +h x_anc[0]; +measure x_anc[0] -> x_c[0]; diff --git a/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_ft_heuristic_heuristic.stim b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_ft_heuristic_heuristic.stim new file mode 100644 index 00000000..d71788b1 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_ft_heuristic_heuristic.stim @@ -0,0 +1,6 @@ +H 2 4 5 6 7 +CX 7 3 5 1 4 3 2 1 7 8 6 3 4 2 1 0 +H 9 +CX 9 2 9 5 +H 9 +MR 9 diff --git a/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_ft_heuristic_opt.qasm b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_ft_heuristic_opt.qasm new file mode 100644 index 00000000..d1e48edf --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_ft_heuristic_opt.qasm @@ -0,0 +1,23 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[9]; +qreg x_anc[1]; +creg x_c[1]; +h q[2]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +cx q[7],q[3]; +cx q[5],q[1]; +cx q[4],q[3]; +cx q[2],q[1]; +cx q[7],q[8]; +cx q[6],q[3]; +cx q[4],q[2]; +cx q[1],q[0]; +h x_anc[0]; +cx x_anc[0],q[2]; +cx x_anc[0],q[5]; +h x_anc[0]; +measure x_anc[0] -> x_c[0]; diff --git a/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_ft_heuristic_opt.stim b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_ft_heuristic_opt.stim new file mode 100644 index 00000000..d71788b1 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_ft_heuristic_opt.stim @@ -0,0 +1,6 @@ +H 2 4 5 6 7 +CX 7 3 5 1 4 3 2 1 7 8 6 3 4 2 1 0 +H 9 +CX 9 2 9 5 +H 9 +MR 9 diff --git a/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_ft_opt_opt.qasm b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_ft_opt_opt.qasm new file mode 100644 index 00000000..c18af139 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_ft_opt_opt.qasm @@ -0,0 +1,24 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[9]; +qreg x_anc[1]; +creg x_c[1]; +h q[0]; +h q[3]; +h q[4]; +h q[5]; +h q[7]; +cx q[0],q[1]; +cx q[4],q[2]; +cx q[7],q[8]; +cx q[3],q[6]; +cx q[1],q[2]; +cx q[5],q[4]; +cx q[8],q[3]; +cx q[4],q[6]; +h x_anc[0]; +cx x_anc[0],q[2]; +cx x_anc[0],q[3]; +cx x_anc[0],q[4]; +h x_anc[0]; +measure x_anc[0] -> x_c[0]; diff --git a/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_ft_opt_opt.stim b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_ft_opt_opt.stim new file mode 100644 index 00000000..62f249c3 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_ft_opt_opt.stim @@ -0,0 +1,6 @@ +H 0 3 4 5 7 +CX 0 1 4 2 7 8 3 6 1 2 5 4 8 3 4 6 +H 9 +CX 9 2 9 3 9 4 +H 9 +MR 9 diff --git a/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_non_ft_heuristic.qasm b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_non_ft_heuristic.qasm new file mode 100644 index 00000000..7106b8c2 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_non_ft_heuristic.qasm @@ -0,0 +1,16 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[9]; +h q[2]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +cx q[7],q[3]; +cx q[5],q[1]; +cx q[4],q[3]; +cx q[2],q[1]; +cx q[7],q[8]; +cx q[6],q[3]; +cx q[4],q[2]; +cx q[1],q[0]; diff --git a/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_non_ft_heuristic.stim b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_non_ft_heuristic.stim new file mode 100644 index 00000000..fcd3946b --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_non_ft_heuristic.stim @@ -0,0 +1,2 @@ +H 2 4 5 6 7 +CX 5 1 7 3 2 1 4 3 7 8 1 0 4 2 6 3 diff --git a/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_non_ft_opt.qasm b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_non_ft_opt.qasm new file mode 100644 index 00000000..f90ec699 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_non_ft_opt.qasm @@ -0,0 +1,16 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[9]; +h q[0]; +h q[3]; +h q[4]; +h q[5]; +h q[7]; +cx q[0],q[1]; +cx q[4],q[2]; +cx q[7],q[8]; +cx q[3],q[6]; +cx q[1],q[2]; +cx q[5],q[4]; +cx q[8],q[3]; +cx q[4],q[6]; diff --git a/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_non_ft_opt.stim b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_non_ft_opt.stim new file mode 100644 index 00000000..dfb41b1f --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/plus_non_ft_opt.stim @@ -0,0 +1,2 @@ +H 0 3 4 5 7 +CX 0 1 4 2 7 8 3 6 1 2 5 4 8 3 4 6 diff --git a/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_ft_heuristic_heuristic.qasm b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_ft_heuristic_heuristic.qasm new file mode 100644 index 00000000..3ad9d0b8 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_ft_heuristic_heuristic.qasm @@ -0,0 +1,22 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[9]; +qreg z_anc[1]; +creg z_c[1]; +h q[0]; +h q[2]; +h q[5]; +h q[6]; +cx q[5],q[8]; +cx q[0],q[4]; +cx q[5],q[7]; +cx q[0],q[3]; +cx q[7],q[4]; +cx q[6],q[3]; +cx q[2],q[5]; +cx q[0],q[1]; +cx q[0],z_anc[0]; +cx q[2],z_anc[0]; +cx q[4],z_anc[0]; +cx q[5],z_anc[0]; +measure z_anc[0] -> z_c[0]; diff --git a/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_ft_heuristic_heuristic.stim b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_ft_heuristic_heuristic.stim new file mode 100644 index 00000000..d9d9582b --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_ft_heuristic_heuristic.stim @@ -0,0 +1,3 @@ +H 0 2 5 6 +CX 5 8 0 4 5 7 0 3 7 4 6 3 2 5 0 1 0 9 2 9 4 9 5 9 +MR 9 diff --git a/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_ft_heuristic_opt.qasm b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_ft_heuristic_opt.qasm new file mode 100644 index 00000000..dbf6c5d1 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_ft_heuristic_opt.qasm @@ -0,0 +1,21 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[9]; +qreg z_anc[1]; +creg z_c[1]; +h q[0]; +h q[2]; +h q[5]; +h q[6]; +cx q[5],q[8]; +cx q[0],q[4]; +cx q[5],q[7]; +cx q[0],q[3]; +cx q[7],q[4]; +cx q[6],q[3]; +cx q[2],q[5]; +cx q[0],q[1]; +cx q[0],z_anc[0]; +cx q[4],z_anc[0]; +cx q[8],z_anc[0]; +measure z_anc[0] -> z_c[0]; diff --git a/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_ft_heuristic_opt.stim b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_ft_heuristic_opt.stim new file mode 100644 index 00000000..32e60560 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_ft_heuristic_opt.stim @@ -0,0 +1,3 @@ +H 0 2 5 6 +CX 5 8 0 4 5 7 0 3 7 4 6 3 2 5 0 1 0 9 4 9 8 9 +MR 9 diff --git a/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_ft_opt_opt.qasm b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_ft_opt_opt.qasm new file mode 100644 index 00000000..8d587369 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_ft_opt_opt.qasm @@ -0,0 +1,21 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[9]; +qreg z_anc[1]; +creg z_c[1]; +h q[3]; +h q[4]; +h q[5]; +h q[8]; +cx q[8],q[0]; +cx q[0],q[1]; +cx q[3],q[6]; +cx q[5],q[2]; +cx q[4],q[8]; +cx q[8],q[5]; +cx q[1],q[3]; +cx q[8],q[7]; +cx q[1],z_anc[0]; +cx q[4],z_anc[0]; +cx q[7],z_anc[0]; +measure z_anc[0] -> z_c[0]; diff --git a/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_ft_opt_opt.stim b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_ft_opt_opt.stim new file mode 100644 index 00000000..ac2c400c --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_ft_opt_opt.stim @@ -0,0 +1,3 @@ +H 3 4 5 8 +CX 8 0 0 1 3 6 5 2 4 8 8 5 1 3 8 7 1 9 4 9 7 9 +MR 9 diff --git a/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_non_ft_heuristic.qasm b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_non_ft_heuristic.qasm new file mode 100644 index 00000000..201bb889 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_non_ft_heuristic.qasm @@ -0,0 +1,19 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[9]; +h q[0]; +h q[2]; +h q[5]; +h q[6]; +cx q[5],q[8]; +cx q[0],q[4]; +cx q[5],q[7]; +cx q[0],q[3]; +cx q[7],q[4]; +cx q[6],q[3]; +cx q[2],q[5]; +cx q[0],q[1]; +cx q[0],z_anc[0]; +cx q[2],z_anc[0]; +cx q[4],z_anc[0]; +cx q[5],z_anc[0]; diff --git a/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_non_ft_heuristic.stim b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_non_ft_heuristic.stim new file mode 100644 index 00000000..21c90bf5 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_non_ft_heuristic.stim @@ -0,0 +1,2 @@ +H 0 2 5 6 +CX 0 4 5 8 0 3 5 7 0 1 2 5 6 3 7 4 0 9 2 diff --git a/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_non_ft_opt.qasm b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_non_ft_opt.qasm new file mode 100644 index 00000000..0d8395c8 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_non_ft_opt.qasm @@ -0,0 +1,15 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[9]; +h q[3]; +h q[4]; +h q[5]; +h q[8]; +cx q[8],q[0]; +cx q[0],q[1]; +cx q[3],q[6]; +cx q[5],q[2]; +cx q[4],q[8]; +cx q[8],q[5]; +cx q[1],q[3]; +cx q[8],q[7]; diff --git a/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_non_ft_opt.stim b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_non_ft_opt.stim new file mode 100644 index 00000000..c785ef18 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/rotated_surface_d3/zero_non_ft_opt.stim @@ -0,0 +1,2 @@ +H 3 4 5 8 +CX 8 0 0 1 3 6 5 2 4 8 8 5 1 3 8 7 diff --git a/scripts/ft_stateprep/eval/circuits/rotated_surface_d5/zero_ft_heuristic_naive.qasm b/scripts/ft_stateprep/eval/circuits/rotated_surface_d5/zero_ft_heuristic_naive.qasm new file mode 100644 index 00000000..4990070a --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/rotated_surface_d5/zero_ft_heuristic_naive.qasm @@ -0,0 +1,383 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[25]; +qreg z_anc[24]; +qreg x_anc[24]; +qreg a0[1]; +qreg a1[1]; +qreg a2[1]; +qreg a3[1]; +qreg a4[1]; +qreg a5[1]; +qreg a6[1]; +qreg a7[1]; +qreg a8[1]; +qreg a9[1]; +qreg a10[1]; +qreg a11[1]; +qreg a12[1]; +qreg a13[1]; +qreg a14[1]; +qreg a15[1]; +creg z_c[24]; +creg x_c[24]; +creg c0[1]; +creg c1[1]; +creg c2[1]; +creg c3[1]; +creg c4[1]; +creg c5[1]; +creg c6[1]; +creg c7[1]; +creg c8[1]; +creg c9[1]; +creg c10[1]; +creg c11[1]; +creg c12[1]; +creg c13[1]; +creg c14[1]; +creg c15[1]; +h q[0]; +h q[1]; +h q[2]; +h q[4]; +h q[5]; +h q[7]; +h q[11]; +h q[14]; +h q[15]; +h q[18]; +h q[21]; +h q[24]; +cx q[18],q[23]; +cx q[11],q[17]; +cx q[7],q[13]; +cx q[18],q[22]; +cx q[11],q[12]; +cx q[7],q[8]; +cx q[2],q[3]; +cx q[1],q[6]; +cx q[21],q[22]; +cx q[18],q[17]; +cx q[15],q[20]; +cx q[14],q[19]; +cx q[11],q[16]; +cx q[8],q[12]; +cx q[6],q[7]; +cx q[5],q[10]; +cx q[4],q[9]; +cx q[1],q[2]; +cx q[24],q[23]; +cx q[20],q[21]; +cx q[19],q[18]; +cx q[15],q[16]; +cx q[14],q[13]; +cx q[10],q[11]; +cx q[9],q[8]; +cx q[5],q[6]; +cx q[4],q[3]; +cx q[0],q[1]; +cx q[0],z_anc[0]; +cx q[1],z_anc[0]; +cx q[5],z_anc[0]; +cx q[6],z_anc[0]; +cx q[2],z_anc[1]; +cx q[3],z_anc[1]; +cx q[7],z_anc[1]; +cx q[8],z_anc[1]; +cx q[4],z_anc[2]; +cx q[9],z_anc[2]; +cx q[5],z_anc[3]; +cx q[10],z_anc[3]; +cx q[6],z_anc[4]; +cx q[7],z_anc[4]; +cx q[11],z_anc[4]; +cx q[12],z_anc[4]; +cx q[8],z_anc[5]; +cx q[9],z_anc[5]; +cx q[13],z_anc[5]; +cx q[14],z_anc[5]; +cx q[10],z_anc[6]; +cx q[11],z_anc[6]; +cx q[15],z_anc[6]; +cx q[16],z_anc[6]; +cx q[12],z_anc[7]; +cx q[13],z_anc[7]; +cx q[17],z_anc[7]; +cx q[18],z_anc[7]; +cx q[14],z_anc[8]; +cx q[19],z_anc[8]; +cx q[15],z_anc[9]; +cx q[20],z_anc[9]; +cx q[16],z_anc[10]; +cx q[17],z_anc[10]; +cx q[21],z_anc[10]; +cx q[22],z_anc[10]; +cx q[18],z_anc[11]; +cx q[19],z_anc[11]; +cx q[23],z_anc[11]; +cx q[24],z_anc[11]; +cx q[0],z_anc[12]; +cx q[1],z_anc[12]; +cx q[5],z_anc[12]; +cx q[6],z_anc[12]; +cx q[2],z_anc[13]; +cx q[3],z_anc[13]; +cx q[7],z_anc[13]; +cx q[8],z_anc[13]; +cx q[4],z_anc[14]; +cx q[9],z_anc[14]; +cx q[5],z_anc[15]; +cx q[10],z_anc[15]; +cx q[6],z_anc[16]; +cx q[7],z_anc[16]; +cx q[11],z_anc[16]; +cx q[12],z_anc[16]; +cx q[8],z_anc[17]; +cx q[9],z_anc[17]; +cx q[13],z_anc[17]; +cx q[14],z_anc[17]; +cx q[10],z_anc[18]; +cx q[11],z_anc[18]; +cx q[15],z_anc[18]; +cx q[16],z_anc[18]; +cx q[12],z_anc[19]; +cx q[13],z_anc[19]; +cx q[17],z_anc[19]; +cx q[18],z_anc[19]; +cx q[14],z_anc[20]; +cx q[19],z_anc[20]; +cx q[15],z_anc[21]; +cx q[20],z_anc[21]; +cx q[16],z_anc[22]; +cx q[17],z_anc[22]; +cx q[21],z_anc[22]; +cx q[22],z_anc[22]; +cx q[18],z_anc[23]; +cx q[19],z_anc[23]; +cx q[23],z_anc[23]; +cx q[24],z_anc[23]; +measure z_anc[0] -> z_c[0]; +measure z_anc[1] -> z_c[1]; +measure z_anc[2] -> z_c[2]; +measure z_anc[3] -> z_c[3]; +measure z_anc[4] -> z_c[4]; +measure z_anc[5] -> z_c[5]; +measure z_anc[6] -> z_c[6]; +measure z_anc[7] -> z_c[7]; +measure z_anc[8] -> z_c[8]; +measure z_anc[9] -> z_c[9]; +measure z_anc[10] -> z_c[10]; +measure z_anc[11] -> z_c[11]; +measure z_anc[12] -> z_c[12]; +measure z_anc[13] -> z_c[13]; +measure z_anc[14] -> z_c[14]; +measure z_anc[15] -> z_c[15]; +measure z_anc[16] -> z_c[16]; +measure z_anc[17] -> z_c[17]; +measure z_anc[18] -> z_c[18]; +measure z_anc[19] -> z_c[19]; +measure z_anc[20] -> z_c[20]; +measure z_anc[21] -> z_c[21]; +measure z_anc[22] -> z_c[22]; +measure z_anc[23] -> z_c[23]; +h x_anc[0]; +cx x_anc[0],q[0]; +cx x_anc[0],q[1]; +h x_anc[0]; +measure x_anc[0] -> x_c[0]; +h x_anc[1]; +cx x_anc[1],q[1]; +cx x_anc[1],a0[0]; +cx x_anc[1],q[2]; +cx x_anc[1],q[6]; +cx x_anc[1],a0[0]; +measure a0[0] -> c0[0]; +cx x_anc[1],q[7]; +h x_anc[1]; +measure x_anc[1] -> x_c[1]; +h x_anc[2]; +cx x_anc[2],q[2]; +cx x_anc[2],q[3]; +h x_anc[2]; +measure x_anc[2] -> x_c[2]; +h x_anc[3]; +cx x_anc[3],q[3]; +cx x_anc[3],a1[0]; +cx x_anc[3],q[4]; +cx x_anc[3],q[8]; +cx x_anc[3],a1[0]; +measure a1[0] -> c1[0]; +cx x_anc[3],q[9]; +h x_anc[3]; +measure x_anc[3] -> x_c[3]; +h x_anc[4]; +cx x_anc[4],q[5]; +cx x_anc[4],a2[0]; +cx x_anc[4],q[6]; +cx x_anc[4],q[10]; +cx x_anc[4],a2[0]; +measure a2[0] -> c2[0]; +cx x_anc[4],q[11]; +h x_anc[4]; +measure x_anc[4] -> x_c[4]; +h x_anc[5]; +cx x_anc[5],q[7]; +cx x_anc[5],a3[0]; +cx x_anc[5],q[8]; +cx x_anc[5],q[12]; +cx x_anc[5],a3[0]; +measure a3[0] -> c3[0]; +cx x_anc[5],q[13]; +h x_anc[5]; +measure x_anc[5] -> x_c[5]; +h x_anc[6]; +cx x_anc[6],q[11]; +cx x_anc[6],a4[0]; +cx x_anc[6],q[12]; +cx x_anc[6],q[16]; +cx x_anc[6],a4[0]; +measure a4[0] -> c4[0]; +cx x_anc[6],q[17]; +h x_anc[6]; +measure x_anc[6] -> x_c[6]; +h x_anc[7]; +cx x_anc[7],q[13]; +cx x_anc[7],a5[0]; +cx x_anc[7],q[14]; +cx x_anc[7],q[18]; +cx x_anc[7],a5[0]; +measure a5[0] -> c5[0]; +cx x_anc[7],q[19]; +h x_anc[7]; +measure x_anc[7] -> x_c[7]; +h x_anc[8]; +cx x_anc[8],q[15]; +cx x_anc[8],a6[0]; +cx x_anc[8],q[16]; +cx x_anc[8],q[20]; +cx x_anc[8],a6[0]; +measure a6[0] -> c6[0]; +cx x_anc[8],q[21]; +h x_anc[8]; +measure x_anc[8] -> x_c[8]; +h x_anc[9]; +cx x_anc[9],q[17]; +cx x_anc[9],a7[0]; +cx x_anc[9],q[18]; +cx x_anc[9],q[22]; +cx x_anc[9],a7[0]; +measure a7[0] -> c7[0]; +cx x_anc[9],q[23]; +h x_anc[9]; +measure x_anc[9] -> x_c[9]; +h x_anc[10]; +cx x_anc[10],q[21]; +cx x_anc[10],q[22]; +h x_anc[10]; +measure x_anc[10] -> x_c[10]; +h x_anc[11]; +cx x_anc[11],q[23]; +cx x_anc[11],q[24]; +h x_anc[11]; +measure x_anc[11] -> x_c[11]; +h x_anc[12]; +cx x_anc[12],q[0]; +cx x_anc[12],q[1]; +h x_anc[12]; +measure x_anc[12] -> x_c[12]; +h x_anc[13]; +cx x_anc[13],q[1]; +cx x_anc[13],a8[0]; +cx x_anc[13],q[2]; +cx x_anc[13],q[6]; +cx x_anc[13],a8[0]; +measure a8[0] -> c8[0]; +cx x_anc[13],q[7]; +h x_anc[13]; +measure x_anc[13] -> x_c[13]; +h x_anc[14]; +cx x_anc[14],q[2]; +cx x_anc[14],q[3]; +h x_anc[14]; +measure x_anc[14] -> x_c[14]; +h x_anc[15]; +cx x_anc[15],q[3]; +cx x_anc[15],a9[0]; +cx x_anc[15],q[4]; +cx x_anc[15],q[8]; +cx x_anc[15],a9[0]; +measure a9[0] -> c9[0]; +cx x_anc[15],q[9]; +h x_anc[15]; +measure x_anc[15] -> x_c[15]; +h x_anc[16]; +cx x_anc[16],q[5]; +cx x_anc[16],a10[0]; +cx x_anc[16],q[6]; +cx x_anc[16],q[10]; +cx x_anc[16],a10[0]; +measure a10[0] -> c10[0]; +cx x_anc[16],q[11]; +h x_anc[16]; +measure x_anc[16] -> x_c[16]; +h x_anc[17]; +cx x_anc[17],q[7]; +cx x_anc[17],a11[0]; +cx x_anc[17],q[8]; +cx x_anc[17],q[12]; +cx x_anc[17],a11[0]; +measure a11[0] -> c11[0]; +cx x_anc[17],q[13]; +h x_anc[17]; +measure x_anc[17] -> x_c[17]; +h x_anc[18]; +cx x_anc[18],q[11]; +cx x_anc[18],a12[0]; +cx x_anc[18],q[12]; +cx x_anc[18],q[16]; +cx x_anc[18],a12[0]; +measure a12[0] -> c12[0]; +cx x_anc[18],q[17]; +h x_anc[18]; +measure x_anc[18] -> x_c[18]; +h x_anc[19]; +cx x_anc[19],q[13]; +cx x_anc[19],a13[0]; +cx x_anc[19],q[14]; +cx x_anc[19],q[18]; +cx x_anc[19],a13[0]; +measure a13[0] -> c13[0]; +cx x_anc[19],q[19]; +h x_anc[19]; +measure x_anc[19] -> x_c[19]; +h x_anc[20]; +cx x_anc[20],q[15]; +cx x_anc[20],a14[0]; +cx x_anc[20],q[16]; +cx x_anc[20],q[20]; +cx x_anc[20],a14[0]; +measure a14[0] -> c14[0]; +cx x_anc[20],q[21]; +h x_anc[20]; +measure x_anc[20] -> x_c[20]; +h x_anc[21]; +cx x_anc[21],q[17]; +cx x_anc[21],a15[0]; +cx x_anc[21],q[18]; +cx x_anc[21],q[22]; +cx x_anc[21],a15[0]; +measure a15[0] -> c15[0]; +cx x_anc[21],q[23]; +h x_anc[21]; +measure x_anc[21] -> x_c[21]; +h x_anc[22]; +cx x_anc[22],q[21]; +cx x_anc[22],q[22]; +h x_anc[22]; +measure x_anc[22] -> x_c[22]; +h x_anc[23]; +cx x_anc[23],q[23]; +cx x_anc[23],q[24]; +h x_anc[23]; +measure x_anc[23] -> x_c[23]; diff --git a/scripts/ft_stateprep/eval/circuits/rotated_surface_d5/zero_ft_heuristic_naive.stim b/scripts/ft_stateprep/eval/circuits/rotated_surface_d5/zero_ft_heuristic_naive.stim new file mode 100644 index 00000000..9d2ee9b5 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/rotated_surface_d5/zero_ft_heuristic_naive.stim @@ -0,0 +1,87 @@ +H 0 1 2 4 5 7 11 14 15 18 21 24 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 +CX 2 3 1 6 4 9 5 10 7 13 11 17 14 19 15 20 18 23 1 2 4 3 7 8 11 12 14 13 18 22 24 23 0 1 6 7 8 12 11 16 18 17 21 22 2 26 4 27 5 6 9 8 10 11 15 16 19 18 20 21 0 25 3 26 2 38 4 39 1 25 7 26 9 27 0 37 3 38 5 25 8 26 1 37 49 0 +MR 27 +CX 6 25 5 28 8 30 49 1 61 0 +MR 26 +CX 10 28 6 29 9 30 5 37 +H 49 +CX 50 1 +MR 25 +CX 7 29 13 30 10 31 6 37 9 39 5 40 61 1 50 73 +MR 28 49 +CX 11 29 14 30 7 38 10 40 6 41 50 2 53 5 +H 61 +CX 62 1 +MR 37 39 +CX 12 29 11 31 14 33 8 38 7 41 10 43 50 6 51 2 65 5 53 75 62 81 +MR 30 40 61 +CX 15 31 12 32 19 33 11 41 8 42 51 3 53 6 62 2 50 73 65 83 +MR 29 38 +CX 16 31 13 32 15 34 12 41 9 42 11 43 50 7 +H 51 +CX 52 3 53 10 62 6 63 2 +MR 33 73 +CX 17 32 20 34 16 35 13 42 15 43 12 44 +H 50 +CX 54 7 63 3 65 6 52 74 53 75 62 81 +MR 31 41 51 +CX 18 32 17 35 14 42 16 43 13 44 15 46 52 4 53 11 62 7 +H 63 +CX 64 3 65 10 54 76 +MR 34 50 75 81 +CX 21 35 18 36 17 44 14 45 20 46 16 47 52 8 +H 53 +CX 55 11 57 15 +H 62 +CX 66 7 64 82 65 83 +MR 32 42 43 63 +CX 22 35 19 36 18 44 17 47 54 8 64 4 65 11 69 15 52 74 55 77 57 79 66 84 +MR 46 53 62 83 +CX 23 36 19 45 21 47 18 48 52 9 54 12 64 8 +H 65 +CX 67 11 69 87 +MR 35 44 74 +CX 24 36 22 47 19 48 +H 52 +CX 55 12 66 8 54 76 64 82 67 85 +MR 45 65 +CX 23 48 54 13 55 16 64 9 66 12 +MR 36 47 52 76 82 +CX 24 48 +H 54 +CX 56 13 57 16 +H 64 +CX 67 12 55 77 66 84 55 17 57 20 66 13 67 16 56 78 +MR 48 54 64 77 84 +H 55 +CX 56 14 58 17 +H 66 +CX 68 13 69 16 57 79 67 85 56 18 57 21 67 17 69 20 58 80 68 86 +MR 55 66 79 85 +H 57 +CX 58 18 59 21 +H 67 +CX 68 14 70 17 56 78 69 87 56 19 58 22 68 18 69 21 70 88 +MR 57 67 78 87 +H 56 +CX 59 22 +H 69 +CX 70 18 71 21 58 80 68 86 58 23 +H 59 +CX 68 19 70 22 +MR 56 69 80 86 +H 58 +CX 60 23 +H 68 +CX 71 22 70 88 +MR 59 +CX 60 24 70 23 +H 71 +MR 58 68 88 +H 60 70 +CX 72 23 +MR 71 +CX 72 24 +MR 60 70 +H 72 +MR 72 diff --git a/scripts/ft_stateprep/eval/circuits/rotated_surface_d5/zero_ft_heuristic_opt.qasm b/scripts/ft_stateprep/eval/circuits/rotated_surface_d5/zero_ft_heuristic_opt.qasm new file mode 100644 index 00000000..b1f1200a --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/rotated_surface_d5/zero_ft_heuristic_opt.qasm @@ -0,0 +1,195 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[25]; +qreg z_anc[5]; +qreg x_anc[6]; +qreg a0[3]; +qreg a1[3]; +qreg a2[2]; +qreg a3[2]; +qreg a4[2]; +qreg a5[2]; +creg z_c[5]; +creg x_c[6]; +creg c0[3]; +creg c1[3]; +creg c2[2]; +creg c3[2]; +creg c4[2]; +creg c5[2]; +h q[0]; +h q[1]; +h q[2]; +h q[4]; +h q[5]; +h q[7]; +h q[11]; +h q[14]; +h q[15]; +h q[18]; +h q[21]; +h q[24]; +cx q[18],q[23]; +cx q[11],q[17]; +cx q[7],q[13]; +cx q[18],q[22]; +cx q[11],q[12]; +cx q[7],q[8]; +cx q[2],q[3]; +cx q[1],q[6]; +cx q[21],q[22]; +cx q[18],q[17]; +cx q[15],q[20]; +cx q[14],q[19]; +cx q[11],q[16]; +cx q[8],q[12]; +cx q[6],q[7]; +cx q[5],q[10]; +cx q[4],q[9]; +cx q[1],q[2]; +cx q[24],q[23]; +cx q[20],q[21]; +cx q[19],q[18]; +cx q[15],q[16]; +cx q[14],q[13]; +cx q[10],q[11]; +cx q[9],q[8]; +cx q[5],q[6]; +cx q[4],q[3]; +cx q[0],q[1]; +cx q[2],z_anc[0]; +cx q[3],z_anc[0]; +cx q[6],z_anc[0]; +cx q[9],z_anc[0]; +cx q[10],z_anc[0]; +cx q[12],z_anc[0]; +cx q[13],z_anc[0]; +cx q[16],z_anc[0]; +cx q[18],z_anc[0]; +cx q[21],z_anc[0]; +cx q[22],z_anc[0]; +cx q[4],z_anc[1]; +cx q[8],z_anc[1]; +cx q[13],z_anc[1]; +cx q[19],z_anc[1]; +cx q[16],z_anc[2]; +cx q[17],z_anc[2]; +cx q[20],z_anc[2]; +cx q[23],z_anc[2]; +cx q[24],z_anc[2]; +cx q[0],z_anc[3]; +cx q[1],z_anc[3]; +cx q[7],z_anc[3]; +cx q[12],z_anc[3]; +cx q[16],z_anc[3]; +cx q[20],z_anc[3]; +cx q[4],z_anc[4]; +cx q[5],z_anc[4]; +cx q[8],z_anc[4]; +cx q[11],z_anc[4]; +cx q[12],z_anc[4]; +measure z_anc[0] -> z_c[0]; +measure z_anc[1] -> z_c[1]; +measure z_anc[2] -> z_c[2]; +measure z_anc[3] -> z_c[3]; +measure z_anc[4] -> z_c[4]; +h x_anc[0]; +cx x_anc[0],q[5]; +cx x_anc[0],a0[0]; +cx x_anc[0],q[6]; +cx x_anc[0],a0[1]; +cx x_anc[0],q[10]; +cx x_anc[0],q[12]; +cx x_anc[0],a0[2]; +cx x_anc[0],q[16]; +cx x_anc[0],q[18]; +cx x_anc[0],a0[0]; +measure a0[0] -> c0[0]; +cx x_anc[0],q[21]; +cx x_anc[0],a0[2]; +measure a0[2] -> c0[2]; +cx x_anc[0],a0[1]; +measure a0[1] -> c0[1]; +cx x_anc[0],q[23]; +h x_anc[0]; +measure x_anc[0] -> x_c[0]; +h x_anc[1]; +cx x_anc[1],q[1]; +cx x_anc[1],a1[0]; +cx x_anc[1],q[3]; +cx x_anc[1],a1[1]; +cx x_anc[1],q[6]; +cx x_anc[1],q[8]; +cx x_anc[1],a1[2]; +cx x_anc[1],q[12]; +cx x_anc[1],q[14]; +cx x_anc[1],a1[0]; +measure a1[0] -> c1[0]; +cx x_anc[1],q[18]; +cx x_anc[1],a1[2]; +measure a1[2] -> c1[2]; +cx x_anc[1],a1[1]; +measure a1[1] -> c1[1]; +cx x_anc[1],q[19]; +h x_anc[1]; +measure x_anc[1] -> x_c[1]; +h x_anc[2]; +cx x_anc[2],q[0]; +cx x_anc[2],a2[0]; +cx x_anc[2],q[4]; +cx x_anc[2],a2[1]; +cx x_anc[2],q[6]; +cx x_anc[2],q[9]; +cx x_anc[2],a2[0]; +measure a2[0] -> c2[0]; +cx x_anc[2],q[12]; +cx x_anc[2],a2[1]; +measure a2[1] -> c2[1]; +cx x_anc[2],q[13]; +h x_anc[2]; +measure x_anc[2] -> x_c[2]; +h x_anc[3]; +cx x_anc[3],q[13]; +cx x_anc[3],a3[0]; +cx x_anc[3],q[14]; +cx x_anc[3],a3[1]; +cx x_anc[3],q[17]; +cx x_anc[3],q[19]; +cx x_anc[3],a3[0]; +measure a3[0] -> c3[0]; +cx x_anc[3],q[21]; +cx x_anc[3],a3[1]; +measure a3[1] -> c3[1]; +cx x_anc[3],q[23]; +h x_anc[3]; +measure x_anc[3] -> x_c[3]; +h x_anc[4]; +cx x_anc[4],q[11]; +cx x_anc[4],a4[0]; +cx x_anc[4],q[12]; +cx x_anc[4],a4[1]; +cx x_anc[4],q[16]; +cx x_anc[4],q[17]; +cx x_anc[4],a4[0]; +measure a4[0] -> c4[0]; +cx x_anc[4],q[23]; +cx x_anc[4],a4[1]; +measure a4[1] -> c4[1]; +cx x_anc[4],q[24]; +h x_anc[4]; +measure x_anc[4] -> x_c[4]; +h x_anc[5]; +cx x_anc[5],q[0]; +cx x_anc[5],a5[0]; +cx x_anc[5],q[3]; +cx x_anc[5],a5[1]; +cx x_anc[5],q[6]; +cx x_anc[5],q[7]; +cx x_anc[5],a5[0]; +measure a5[0] -> c5[0]; +cx x_anc[5],q[23]; +cx x_anc[5],a5[1]; +measure a5[1] -> c5[1]; +cx x_anc[5],q[24]; +h x_anc[5]; +measure x_anc[5] -> x_c[5]; diff --git a/scripts/ft_stateprep/eval/circuits/rotated_surface_d5/zero_ft_heuristic_opt.stim b/scripts/ft_stateprep/eval/circuits/rotated_surface_d5/zero_ft_heuristic_opt.stim new file mode 100644 index 00000000..ce0f64db --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/rotated_surface_d5/zero_ft_heuristic_opt.stim @@ -0,0 +1,32 @@ +H 0 1 2 4 5 7 11 14 15 18 21 24 30 31 32 33 +CX 2 3 1 6 4 9 5 10 7 13 11 17 14 19 15 20 18 23 1 2 4 3 7 8 11 12 14 13 18 22 24 23 0 1 6 7 8 12 11 16 18 17 21 22 2 25 5 6 9 8 10 11 15 16 19 18 20 21 3 25 2 27 30 1 6 25 3 27 31 1 30 34 8 25 7 27 6 28 30 3 31 38 10 25 8 26 7 28 31 3 30 35 13 25 9 26 8 27 11 28 30 6 16 25 13 26 30 8 31 6 +MR 27 +CX 17 25 15 26 13 28 30 36 31 38 19 25 16 26 30 11 31 7 +MR 38 +CX 21 25 17 26 16 29 30 13 +H 31 +CX 32 7 22 25 18 26 17 28 30 37 32 39 +MR 31 +CX 18 28 17 29 30 16 32 8 +MR 25 26 +CX 21 29 30 36 32 40 +MR 28 +CX 22 29 30 18 32 11 +MR 36 +CX 32 13 30 34 +MR 29 +CX 30 21 32 39 +MR 34 +CX 32 16 30 37 +MR 39 +CX 30 35 32 40 +MR 37 +CX 30 23 32 17 +MR 35 40 +H 30 32 +CX 33 17 33 41 +MR 30 32 +CX 33 18 33 21 33 41 33 23 +MR 41 +H 33 +MR 33 diff --git a/scripts/ft_stateprep/eval/circuits/rotated_surface_d5/zero_non_ft_heuristic.qasm b/scripts/ft_stateprep/eval/circuits/rotated_surface_d5/zero_non_ft_heuristic.qasm new file mode 100644 index 00000000..22a93105 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/rotated_surface_d5/zero_non_ft_heuristic.qasm @@ -0,0 +1,43 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[25]; +h q[0]; +h q[1]; +h q[2]; +h q[4]; +h q[5]; +h q[7]; +h q[11]; +h q[14]; +h q[15]; +h q[18]; +h q[21]; +h q[24]; +cx q[18],q[23]; +cx q[11],q[17]; +cx q[7],q[13]; +cx q[18],q[22]; +cx q[11],q[12]; +cx q[7],q[8]; +cx q[2],q[3]; +cx q[1],q[6]; +cx q[21],q[22]; +cx q[18],q[17]; +cx q[15],q[20]; +cx q[14],q[19]; +cx q[11],q[16]; +cx q[8],q[12]; +cx q[6],q[7]; +cx q[5],q[10]; +cx q[4],q[9]; +cx q[1],q[2]; +cx q[24],q[23]; +cx q[20],q[21]; +cx q[19],q[18]; +cx q[15],q[16]; +cx q[14],q[13]; +cx q[10],q[11]; +cx q[9],q[8]; +cx q[5],q[6]; +cx q[4],q[3]; +cx q[0],q[1]; diff --git a/scripts/ft_stateprep/eval/circuits/rotated_surface_d5/zero_non_ft_heuristic.stim b/scripts/ft_stateprep/eval/circuits/rotated_surface_d5/zero_non_ft_heuristic.stim new file mode 100644 index 00000000..07dca05b --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/rotated_surface_d5/zero_non_ft_heuristic.stim @@ -0,0 +1,2 @@ +H 0 1 2 4 5 7 11 14 15 18 21 24 +CX 2 3 1 6 4 9 5 10 7 13 11 17 14 19 15 20 18 23 1 2 4 3 7 8 11 12 14 13 18 22 24 23 0 1 6 7 8 12 11 16 18 17 21 22 5 6 9 8 10 11 15 16 19 18 20 21 diff --git a/scripts/ft_stateprep/eval/circuits/shor/plus_ft_heuristic_heuristic.qasm b/scripts/ft_stateprep/eval/circuits/shor/plus_ft_heuristic_heuristic.qasm new file mode 100644 index 00000000..aacb3313 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/shor/plus_ft_heuristic_heuristic.qasm @@ -0,0 +1,12 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[9]; +h q[2]; +h q[5]; +h q[8]; +cx q[8],q[6]; +cx q[5],q[3]; +cx q[2],q[0]; +cx q[6],q[7]; +cx q[3],q[4]; +cx q[0],q[1]; diff --git a/scripts/ft_stateprep/eval/circuits/shor/plus_ft_heuristic_heuristic.stim b/scripts/ft_stateprep/eval/circuits/shor/plus_ft_heuristic_heuristic.stim new file mode 100644 index 00000000..4f9f83fe --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/shor/plus_ft_heuristic_heuristic.stim @@ -0,0 +1,2 @@ +H 2 5 8 +CX 2 0 5 3 8 6 0 1 3 4 6 7 diff --git a/scripts/ft_stateprep/eval/circuits/shor/plus_ft_heuristic_opt.qasm b/scripts/ft_stateprep/eval/circuits/shor/plus_ft_heuristic_opt.qasm new file mode 100644 index 00000000..aacb3313 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/shor/plus_ft_heuristic_opt.qasm @@ -0,0 +1,12 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[9]; +h q[2]; +h q[5]; +h q[8]; +cx q[8],q[6]; +cx q[5],q[3]; +cx q[2],q[0]; +cx q[6],q[7]; +cx q[3],q[4]; +cx q[0],q[1]; diff --git a/scripts/ft_stateprep/eval/circuits/shor/plus_ft_heuristic_opt.stim b/scripts/ft_stateprep/eval/circuits/shor/plus_ft_heuristic_opt.stim new file mode 100644 index 00000000..4f9f83fe --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/shor/plus_ft_heuristic_opt.stim @@ -0,0 +1,2 @@ +H 2 5 8 +CX 2 0 5 3 8 6 0 1 3 4 6 7 diff --git a/scripts/ft_stateprep/eval/circuits/shor/plus_ft_opt_opt.qasm b/scripts/ft_stateprep/eval/circuits/shor/plus_ft_opt_opt.qasm new file mode 100644 index 00000000..b066baa8 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/shor/plus_ft_opt_opt.qasm @@ -0,0 +1,12 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[9]; +h q[2]; +h q[4]; +h q[6]; +cx q[2],q[0]; +cx q[4],q[5]; +cx q[6],q[7]; +cx q[5],q[3]; +cx q[7],q[8]; +cx q[2],q[1]; diff --git a/scripts/ft_stateprep/eval/circuits/shor/plus_ft_opt_opt.stim b/scripts/ft_stateprep/eval/circuits/shor/plus_ft_opt_opt.stim new file mode 100644 index 00000000..fafa67e4 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/shor/plus_ft_opt_opt.stim @@ -0,0 +1,2 @@ +H 2 4 6 +CX 2 0 4 5 6 7 2 1 5 3 7 8 diff --git a/scripts/ft_stateprep/eval/circuits/shor/plus_non_ft_heuristic.qasm b/scripts/ft_stateprep/eval/circuits/shor/plus_non_ft_heuristic.qasm new file mode 100644 index 00000000..aacb3313 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/shor/plus_non_ft_heuristic.qasm @@ -0,0 +1,12 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[9]; +h q[2]; +h q[5]; +h q[8]; +cx q[8],q[6]; +cx q[5],q[3]; +cx q[2],q[0]; +cx q[6],q[7]; +cx q[3],q[4]; +cx q[0],q[1]; diff --git a/scripts/ft_stateprep/eval/circuits/shor/plus_non_ft_heuristic.stim b/scripts/ft_stateprep/eval/circuits/shor/plus_non_ft_heuristic.stim new file mode 100644 index 00000000..4f9f83fe --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/shor/plus_non_ft_heuristic.stim @@ -0,0 +1,2 @@ +H 2 5 8 +CX 2 0 5 3 8 6 0 1 3 4 6 7 diff --git a/scripts/ft_stateprep/eval/circuits/shor/plus_non_ft_opt.qasm b/scripts/ft_stateprep/eval/circuits/shor/plus_non_ft_opt.qasm new file mode 100644 index 00000000..b066baa8 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/shor/plus_non_ft_opt.qasm @@ -0,0 +1,12 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[9]; +h q[2]; +h q[4]; +h q[6]; +cx q[2],q[0]; +cx q[4],q[5]; +cx q[6],q[7]; +cx q[5],q[3]; +cx q[7],q[8]; +cx q[2],q[1]; diff --git a/scripts/ft_stateprep/eval/circuits/shor/plus_non_ft_opt.stim b/scripts/ft_stateprep/eval/circuits/shor/plus_non_ft_opt.stim new file mode 100644 index 00000000..fafa67e4 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/shor/plus_non_ft_opt.stim @@ -0,0 +1,2 @@ +H 2 4 6 +CX 2 0 4 5 6 7 2 1 5 3 7 8 diff --git a/scripts/ft_stateprep/eval/circuits/shor/zero_ft_heuristic_heuristic.qasm b/scripts/ft_stateprep/eval/circuits/shor/zero_ft_heuristic_heuristic.qasm new file mode 100644 index 00000000..80e691a8 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/shor/zero_ft_heuristic_heuristic.qasm @@ -0,0 +1,23 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[9]; +qreg z_anc[2]; +creg z_c[2]; +h q[0]; +h q[2]; +cx q[2],q[6]; +cx q[0],q[3]; +cx q[6],q[8]; +cx q[3],q[4]; +cx q[2],q[0]; +cx q[6],q[7]; +cx q[4],q[5]; +cx q[3],q[2]; +cx q[0],q[1]; +cx q[3],z_anc[0]; +cx q[4],z_anc[0]; +cx q[1],z_anc[1]; +cx q[3],z_anc[1]; +cx q[7],z_anc[1]; +measure z_anc[0] -> z_c[0]; +measure z_anc[1] -> z_c[1]; diff --git a/scripts/ft_stateprep/eval/circuits/shor/zero_ft_heuristic_heuristic.stim b/scripts/ft_stateprep/eval/circuits/shor/zero_ft_heuristic_heuristic.stim new file mode 100644 index 00000000..b75f4cec --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/shor/zero_ft_heuristic_heuristic.stim @@ -0,0 +1,3 @@ +H 0 2 +CX 0 3 2 6 2 0 3 4 6 8 0 1 3 2 4 5 6 7 3 9 1 10 4 9 3 10 7 10 +MR 9 10 diff --git a/scripts/ft_stateprep/eval/circuits/shor/zero_ft_heuristic_opt.qasm b/scripts/ft_stateprep/eval/circuits/shor/zero_ft_heuristic_opt.qasm new file mode 100644 index 00000000..1fe4367e --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/shor/zero_ft_heuristic_opt.qasm @@ -0,0 +1,23 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[9]; +qreg z_anc[2]; +creg z_c[2]; +h q[0]; +h q[2]; +cx q[2],q[6]; +cx q[0],q[3]; +cx q[6],q[8]; +cx q[3],q[4]; +cx q[2],q[0]; +cx q[6],q[7]; +cx q[4],q[5]; +cx q[3],q[2]; +cx q[0],q[1]; +cx q[1],z_anc[0]; +cx q[2],z_anc[0]; +cx q[2],z_anc[1]; +cx q[5],z_anc[1]; +cx q[7],z_anc[1]; +measure z_anc[0] -> z_c[0]; +measure z_anc[1] -> z_c[1]; diff --git a/scripts/ft_stateprep/eval/circuits/shor/zero_ft_heuristic_opt.stim b/scripts/ft_stateprep/eval/circuits/shor/zero_ft_heuristic_opt.stim new file mode 100644 index 00000000..b48f6482 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/shor/zero_ft_heuristic_opt.stim @@ -0,0 +1,5 @@ +H 0 2 +CX 0 3 2 6 2 0 3 4 6 8 0 1 3 2 4 5 6 7 1 9 2 9 2 10 +MR 9 +CX 5 10 7 10 +MR 10 diff --git a/scripts/ft_stateprep/eval/circuits/shor/zero_ft_opt_opt.qasm b/scripts/ft_stateprep/eval/circuits/shor/zero_ft_opt_opt.qasm new file mode 100644 index 00000000..47f966ea --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/shor/zero_ft_opt_opt.qasm @@ -0,0 +1,19 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[9]; +qreg z_anc[1]; +creg z_c[1]; +h q[2]; +h q[7]; +cx q[7],q[4]; +cx q[2],q[7]; +cx q[2],q[0]; +cx q[4],q[5]; +cx q[7],q[8]; +cx q[4],q[3]; +cx q[7],q[6]; +cx q[0],q[1]; +cx q[1],z_anc[0]; +cx q[4],z_anc[0]; +cx q[7],z_anc[0]; +measure z_anc[0] -> z_c[0]; diff --git a/scripts/ft_stateprep/eval/circuits/shor/zero_ft_opt_opt.stim b/scripts/ft_stateprep/eval/circuits/shor/zero_ft_opt_opt.stim new file mode 100644 index 00000000..0625ecde --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/shor/zero_ft_opt_opt.stim @@ -0,0 +1,3 @@ +H 2 7 +CX 7 4 4 5 2 7 2 0 4 3 7 8 0 1 7 6 1 9 4 9 7 9 +MR 9 diff --git a/scripts/ft_stateprep/eval/circuits/shor/zero_non_ft_heuristic.qasm b/scripts/ft_stateprep/eval/circuits/shor/zero_non_ft_heuristic.qasm new file mode 100644 index 00000000..90622fb2 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/shor/zero_non_ft_heuristic.qasm @@ -0,0 +1,14 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[9]; +h q[0]; +h q[2]; +cx q[2],q[6]; +cx q[0],q[3]; +cx q[6],q[8]; +cx q[3],q[4]; +cx q[2],q[0]; +cx q[6],q[7]; +cx q[4],q[5]; +cx q[3],q[2]; +cx q[0],q[1]; diff --git a/scripts/ft_stateprep/eval/circuits/shor/zero_non_ft_heuristic.stim b/scripts/ft_stateprep/eval/circuits/shor/zero_non_ft_heuristic.stim new file mode 100644 index 00000000..8f6d8df0 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/shor/zero_non_ft_heuristic.stim @@ -0,0 +1,2 @@ +H 0 2 +CX 0 3 2 6 2 0 3 4 6 8 0 1 3 2 4 5 6 7 diff --git a/scripts/ft_stateprep/eval/circuits/shor/zero_non_ft_opt.qasm b/scripts/ft_stateprep/eval/circuits/shor/zero_non_ft_opt.qasm new file mode 100644 index 00000000..004bf475 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/shor/zero_non_ft_opt.qasm @@ -0,0 +1,13 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[9]; +h q[2]; +h q[7]; +cx q[7],q[4]; +cx q[2],q[7]; +cx q[2],q[0]; +cx q[4],q[5]; +cx q[7],q[8]; +cx q[4],q[3]; +cx q[7],q[6]; +cx q[0],q[1]; diff --git a/scripts/ft_stateprep/eval/circuits/shor/zero_non_ft_opt.stim b/scripts/ft_stateprep/eval/circuits/shor/zero_non_ft_opt.stim new file mode 100644 index 00000000..88ec58c4 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/shor/zero_non_ft_opt.stim @@ -0,0 +1,2 @@ +H 2 7 +CX 7 4 4 5 2 7 2 0 4 3 7 8 0 1 7 6 diff --git a/scripts/ft_stateprep/eval/circuits/steane/plus_ft_heuristic_heuristic.qasm b/scripts/ft_stateprep/eval/circuits/steane/plus_ft_heuristic_heuristic.qasm new file mode 100644 index 00000000..1a169853 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/steane/plus_ft_heuristic_heuristic.qasm @@ -0,0 +1,23 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[7]; +qreg x_anc[1]; +creg x_c[1]; +h q[2]; +h q[4]; +h q[5]; +h q[6]; +cx q[5],q[3]; +cx q[2],q[0]; +cx q[6],q[5]; +cx q[4],q[3]; +cx q[0],q[1]; +cx q[6],q[2]; +cx q[5],q[1]; +cx q[4],q[0]; +h x_anc[0]; +cx x_anc[0],q[2]; +cx x_anc[0],q[4]; +cx x_anc[0],q[5]; +h x_anc[0]; +measure x_anc[0] -> x_c[0]; diff --git a/scripts/ft_stateprep/eval/circuits/steane/plus_ft_heuristic_heuristic.stim b/scripts/ft_stateprep/eval/circuits/steane/plus_ft_heuristic_heuristic.stim new file mode 100644 index 00000000..0c05ffc5 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/steane/plus_ft_heuristic_heuristic.stim @@ -0,0 +1,6 @@ +H 2 4 5 6 +CX 5 3 2 0 6 5 4 3 0 1 6 2 5 1 4 0 +H 7 +CX 7 2 7 4 7 5 +H 7 +MR 7 diff --git a/scripts/ft_stateprep/eval/circuits/steane/plus_ft_heuristic_opt.qasm b/scripts/ft_stateprep/eval/circuits/steane/plus_ft_heuristic_opt.qasm new file mode 100644 index 00000000..1a169853 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/steane/plus_ft_heuristic_opt.qasm @@ -0,0 +1,23 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[7]; +qreg x_anc[1]; +creg x_c[1]; +h q[2]; +h q[4]; +h q[5]; +h q[6]; +cx q[5],q[3]; +cx q[2],q[0]; +cx q[6],q[5]; +cx q[4],q[3]; +cx q[0],q[1]; +cx q[6],q[2]; +cx q[5],q[1]; +cx q[4],q[0]; +h x_anc[0]; +cx x_anc[0],q[2]; +cx x_anc[0],q[4]; +cx x_anc[0],q[5]; +h x_anc[0]; +measure x_anc[0] -> x_c[0]; diff --git a/scripts/ft_stateprep/eval/circuits/steane/plus_ft_heuristic_opt.stim b/scripts/ft_stateprep/eval/circuits/steane/plus_ft_heuristic_opt.stim new file mode 100644 index 00000000..0c05ffc5 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/steane/plus_ft_heuristic_opt.stim @@ -0,0 +1,6 @@ +H 2 4 5 6 +CX 5 3 2 0 6 5 4 3 0 1 6 2 5 1 4 0 +H 7 +CX 7 2 7 4 7 5 +H 7 +MR 7 diff --git a/scripts/ft_stateprep/eval/circuits/steane/plus_ft_opt_opt.qasm b/scripts/ft_stateprep/eval/circuits/steane/plus_ft_opt_opt.qasm new file mode 100644 index 00000000..e7328e13 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/steane/plus_ft_opt_opt.qasm @@ -0,0 +1,23 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[7]; +qreg x_anc[1]; +creg x_c[1]; +h q[0]; +h q[3]; +h q[4]; +h q[5]; +cx q[3],q[1]; +cx q[4],q[3]; +cx q[4],q[6]; +cx q[0],q[2]; +cx q[5],q[0]; +cx q[5],q[6]; +cx q[2],q[3]; +cx q[3],q[5]; +h x_anc[0]; +cx x_anc[0],q[2]; +cx x_anc[0],q[4]; +cx x_anc[0],q[5]; +h x_anc[0]; +measure x_anc[0] -> x_c[0]; diff --git a/scripts/ft_stateprep/eval/circuits/steane/plus_ft_opt_opt.stim b/scripts/ft_stateprep/eval/circuits/steane/plus_ft_opt_opt.stim new file mode 100644 index 00000000..0fd858a0 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/steane/plus_ft_opt_opt.stim @@ -0,0 +1,6 @@ +H 0 3 4 5 +CX 3 1 4 3 4 6 0 2 5 0 5 6 2 3 3 5 +H 7 +CX 7 2 7 4 7 5 +H 7 +MR 7 diff --git a/scripts/ft_stateprep/eval/circuits/steane/plus_non_ft_heuristic.qasm b/scripts/ft_stateprep/eval/circuits/steane/plus_non_ft_heuristic.qasm new file mode 100644 index 00000000..94c3eb1b --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/steane/plus_non_ft_heuristic.qasm @@ -0,0 +1,15 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[7]; +h q[2]; +h q[4]; +h q[5]; +h q[6]; +cx q[5],q[3]; +cx q[2],q[0]; +cx q[6],q[5]; +cx q[4],q[3]; +cx q[0],q[1]; +cx q[6],q[2]; +cx q[5],q[1]; +cx q[4],q[0]; diff --git a/scripts/ft_stateprep/eval/circuits/steane/plus_non_ft_heuristic.stim b/scripts/ft_stateprep/eval/circuits/steane/plus_non_ft_heuristic.stim new file mode 100644 index 00000000..f523ac72 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/steane/plus_non_ft_heuristic.stim @@ -0,0 +1,2 @@ +H 2 4 5 6 +CX 5 3 2 0 6 5 4 3 0 1 6 2 5 1 4 0 diff --git a/scripts/ft_stateprep/eval/circuits/steane/plus_non_ft_opt.qasm b/scripts/ft_stateprep/eval/circuits/steane/plus_non_ft_opt.qasm new file mode 100644 index 00000000..4c399cf7 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/steane/plus_non_ft_opt.qasm @@ -0,0 +1,15 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[7]; +h q[0]; +h q[3]; +h q[4]; +h q[5]; +cx q[3],q[1]; +cx q[4],q[3]; +cx q[4],q[6]; +cx q[0],q[2]; +cx q[5],q[0]; +cx q[5],q[6]; +cx q[2],q[3]; +cx q[3],q[5]; diff --git a/scripts/ft_stateprep/eval/circuits/steane/plus_non_ft_opt.stim b/scripts/ft_stateprep/eval/circuits/steane/plus_non_ft_opt.stim new file mode 100644 index 00000000..c16a858d --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/steane/plus_non_ft_opt.stim @@ -0,0 +1,2 @@ +H 0 3 4 5 +CX 3 1 4 3 4 6 0 2 5 0 5 6 2 3 3 5 diff --git a/scripts/ft_stateprep/eval/circuits/steane/zero_ft_heuristic_heuristic.qasm b/scripts/ft_stateprep/eval/circuits/steane/zero_ft_heuristic_heuristic.qasm new file mode 100644 index 00000000..85824798 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/steane/zero_ft_heuristic_heuristic.qasm @@ -0,0 +1,20 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[7]; +qreg z_anc[1]; +creg z_c[1]; +h q[0]; +h q[1]; +h q[3]; +cx q[3],q[5]; +cx q[0],q[2]; +cx q[5],q[6]; +cx q[3],q[4]; +cx q[1],q[0]; +cx q[2],q[6]; +cx q[1],q[5]; +cx q[0],q[4]; +cx q[2],z_anc[0]; +cx q[4],z_anc[0]; +cx q[5],z_anc[0]; +measure z_anc[0] -> z_c[0]; diff --git a/scripts/ft_stateprep/eval/circuits/steane/zero_ft_heuristic_heuristic.stim b/scripts/ft_stateprep/eval/circuits/steane/zero_ft_heuristic_heuristic.stim new file mode 100644 index 00000000..6b9eeffc --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/steane/zero_ft_heuristic_heuristic.stim @@ -0,0 +1,3 @@ +H 0 1 3 +CX 3 5 0 2 5 6 3 4 1 0 2 6 1 5 0 4 2 7 4 7 5 7 +MR 7 diff --git a/scripts/ft_stateprep/eval/circuits/steane/zero_ft_heuristic_opt.qasm b/scripts/ft_stateprep/eval/circuits/steane/zero_ft_heuristic_opt.qasm new file mode 100644 index 00000000..4d1ee2e8 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/steane/zero_ft_heuristic_opt.qasm @@ -0,0 +1,20 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[7]; +qreg z_anc[1]; +creg z_c[1]; +h q[0]; +h q[1]; +h q[3]; +cx q[3],q[5]; +cx q[0],q[2]; +cx q[5],q[6]; +cx q[3],q[4]; +cx q[1],q[0]; +cx q[2],q[6]; +cx q[1],q[5]; +cx q[0],q[4]; +cx q[1],z_anc[0]; +cx q[4],z_anc[0]; +cx q[6],z_anc[0]; +measure z_anc[0] -> z_c[0]; diff --git a/scripts/ft_stateprep/eval/circuits/steane/zero_ft_heuristic_opt.stim b/scripts/ft_stateprep/eval/circuits/steane/zero_ft_heuristic_opt.stim new file mode 100644 index 00000000..7c5ece53 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/steane/zero_ft_heuristic_opt.stim @@ -0,0 +1,3 @@ +H 0 1 3 +CX 3 5 0 2 5 6 3 4 1 0 2 6 1 5 0 4 1 7 4 7 6 7 +MR 7 diff --git a/scripts/ft_stateprep/eval/circuits/steane/zero_ft_opt_opt.qasm b/scripts/ft_stateprep/eval/circuits/steane/zero_ft_opt_opt.qasm new file mode 100644 index 00000000..4c6bc49b --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/steane/zero_ft_opt_opt.qasm @@ -0,0 +1,20 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[7]; +qreg z_anc[1]; +creg z_c[1]; +h q[0]; +h q[3]; +h q[5]; +cx q[3],q[1]; +cx q[5],q[4]; +cx q[0],q[2]; +cx q[4],q[3]; +cx q[1],q[0]; +cx q[1],q[6]; +cx q[2],q[4]; +cx q[4],q[6]; +cx q[2],z_anc[0]; +cx q[3],z_anc[0]; +cx q[6],z_anc[0]; +measure z_anc[0] -> z_c[0]; diff --git a/scripts/ft_stateprep/eval/circuits/steane/zero_ft_opt_opt.stim b/scripts/ft_stateprep/eval/circuits/steane/zero_ft_opt_opt.stim new file mode 100644 index 00000000..35cf936a --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/steane/zero_ft_opt_opt.stim @@ -0,0 +1,3 @@ +H 0 3 5 +CX 3 1 5 4 0 2 4 3 1 0 1 6 2 4 4 6 2 7 3 7 6 7 +MR 7 diff --git a/scripts/ft_stateprep/eval/circuits/steane/zero_non_ft_heuristic.qasm b/scripts/ft_stateprep/eval/circuits/steane/zero_non_ft_heuristic.qasm new file mode 100644 index 00000000..2df628f2 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/steane/zero_non_ft_heuristic.qasm @@ -0,0 +1,14 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[7]; +h q[0]; +h q[1]; +h q[3]; +cx q[3],q[5]; +cx q[0],q[2]; +cx q[5],q[6]; +cx q[3],q[4]; +cx q[1],q[0]; +cx q[2],q[6]; +cx q[1],q[5]; +cx q[0],q[4]; diff --git a/scripts/ft_stateprep/eval/circuits/steane/zero_non_ft_heuristic.stim b/scripts/ft_stateprep/eval/circuits/steane/zero_non_ft_heuristic.stim new file mode 100644 index 00000000..ad3af05a --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/steane/zero_non_ft_heuristic.stim @@ -0,0 +1,2 @@ +H 0 1 3 +CX 3 5 0 2 5 6 3 4 1 0 2 6 1 5 0 4 diff --git a/scripts/ft_stateprep/eval/circuits/steane/zero_non_ft_opt.qasm b/scripts/ft_stateprep/eval/circuits/steane/zero_non_ft_opt.qasm new file mode 100644 index 00000000..9d04cd08 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/steane/zero_non_ft_opt.qasm @@ -0,0 +1,14 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[7]; +h q[0]; +h q[3]; +h q[5]; +cx q[3],q[1]; +cx q[5],q[4]; +cx q[0],q[2]; +cx q[4],q[3]; +cx q[1],q[0]; +cx q[1],q[6]; +cx q[2],q[4]; +cx q[4],q[6]; diff --git a/scripts/ft_stateprep/eval/circuits/steane/zero_non_ft_opt.stim b/scripts/ft_stateprep/eval/circuits/steane/zero_non_ft_opt.stim new file mode 100644 index 00000000..d632eeb6 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/steane/zero_non_ft_opt.stim @@ -0,0 +1,2 @@ +H 0 3 5 +CX 3 1 5 4 0 2 4 3 1 0 1 6 2 4 4 6 diff --git a/scripts/ft_stateprep/eval/circuits/tetrahedral/plus_ft_heuristic_heuristic.qasm b/scripts/ft_stateprep/eval/circuits/tetrahedral/plus_ft_heuristic_heuristic.qasm new file mode 100644 index 00000000..f8522b65 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/tetrahedral/plus_ft_heuristic_heuristic.qasm @@ -0,0 +1,43 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[15]; +qreg x_anc[1]; +creg x_c[1]; +h q[2]; +h q[4]; +h q[6]; +h q[10]; +h q[13]; +cx q[13],q[11]; +cx q[11],q[12]; +cx q[6],q[5]; +cx q[10],q[3]; +cx q[4],q[1]; +cx q[11],q[9]; +cx q[12],q[8]; +cx q[4],q[7]; +cx q[3],q[5]; +cx q[2],q[1]; +cx q[7],q[14]; +cx q[6],q[13]; +cx q[2],q[9]; +cx q[1],q[8]; +cx q[3],q[0]; +cx q[5],q[4]; +cx q[13],q[14]; +cx q[9],q[10]; +cx q[1],q[0]; +cx q[4],q[12]; +cx q[6],q[7]; +cx q[5],q[11]; +cx q[2],q[3]; +h x_anc[0]; +cx x_anc[0],q[1]; +cx x_anc[0],q[3]; +cx x_anc[0],q[5]; +cx x_anc[0],q[7]; +cx x_anc[0],q[9]; +cx x_anc[0],q[12]; +cx x_anc[0],q[13]; +h x_anc[0]; +measure x_anc[0] -> x_c[0]; diff --git a/scripts/ft_stateprep/eval/circuits/tetrahedral/plus_ft_heuristic_heuristic.stim b/scripts/ft_stateprep/eval/circuits/tetrahedral/plus_ft_heuristic_heuristic.stim new file mode 100644 index 00000000..2e982f66 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/tetrahedral/plus_ft_heuristic_heuristic.stim @@ -0,0 +1,4 @@ +H 2 4 6 10 13 15 +CX 4 1 6 5 10 3 13 11 2 1 3 5 4 7 11 12 6 13 3 0 5 4 11 9 12 8 7 14 6 7 1 8 2 9 5 11 4 12 13 14 1 0 2 3 9 10 15 1 15 3 15 5 15 7 15 9 15 12 15 13 +H 15 +MR 15 diff --git a/scripts/ft_stateprep/eval/circuits/tetrahedral/plus_ft_heuristic_opt.qasm b/scripts/ft_stateprep/eval/circuits/tetrahedral/plus_ft_heuristic_opt.qasm new file mode 100644 index 00000000..f8522b65 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/tetrahedral/plus_ft_heuristic_opt.qasm @@ -0,0 +1,43 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[15]; +qreg x_anc[1]; +creg x_c[1]; +h q[2]; +h q[4]; +h q[6]; +h q[10]; +h q[13]; +cx q[13],q[11]; +cx q[11],q[12]; +cx q[6],q[5]; +cx q[10],q[3]; +cx q[4],q[1]; +cx q[11],q[9]; +cx q[12],q[8]; +cx q[4],q[7]; +cx q[3],q[5]; +cx q[2],q[1]; +cx q[7],q[14]; +cx q[6],q[13]; +cx q[2],q[9]; +cx q[1],q[8]; +cx q[3],q[0]; +cx q[5],q[4]; +cx q[13],q[14]; +cx q[9],q[10]; +cx q[1],q[0]; +cx q[4],q[12]; +cx q[6],q[7]; +cx q[5],q[11]; +cx q[2],q[3]; +h x_anc[0]; +cx x_anc[0],q[1]; +cx x_anc[0],q[3]; +cx x_anc[0],q[5]; +cx x_anc[0],q[7]; +cx x_anc[0],q[9]; +cx x_anc[0],q[12]; +cx x_anc[0],q[13]; +h x_anc[0]; +measure x_anc[0] -> x_c[0]; diff --git a/scripts/ft_stateprep/eval/circuits/tetrahedral/plus_ft_heuristic_opt.stim b/scripts/ft_stateprep/eval/circuits/tetrahedral/plus_ft_heuristic_opt.stim new file mode 100644 index 00000000..2e982f66 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/tetrahedral/plus_ft_heuristic_opt.stim @@ -0,0 +1,4 @@ +H 2 4 6 10 13 15 +CX 4 1 6 5 10 3 13 11 2 1 3 5 4 7 11 12 6 13 3 0 5 4 11 9 12 8 7 14 6 7 1 8 2 9 5 11 4 12 13 14 1 0 2 3 9 10 15 1 15 3 15 5 15 7 15 9 15 12 15 13 +H 15 +MR 15 diff --git a/scripts/ft_stateprep/eval/circuits/tetrahedral/plus_non_ft_heuristic.qasm b/scripts/ft_stateprep/eval/circuits/tetrahedral/plus_non_ft_heuristic.qasm new file mode 100644 index 00000000..3a9cec96 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/tetrahedral/plus_non_ft_heuristic.qasm @@ -0,0 +1,31 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[15]; +h q[2]; +h q[4]; +h q[6]; +h q[10]; +h q[13]; +cx q[13],q[11]; +cx q[11],q[12]; +cx q[6],q[5]; +cx q[10],q[3]; +cx q[4],q[1]; +cx q[11],q[9]; +cx q[12],q[8]; +cx q[4],q[7]; +cx q[3],q[5]; +cx q[2],q[1]; +cx q[7],q[14]; +cx q[6],q[13]; +cx q[2],q[9]; +cx q[1],q[8]; +cx q[3],q[0]; +cx q[5],q[4]; +cx q[13],q[14]; +cx q[9],q[10]; +cx q[1],q[0]; +cx q[4],q[12]; +cx q[6],q[7]; +cx q[5],q[11]; +cx q[2],q[3]; diff --git a/scripts/ft_stateprep/eval/circuits/tetrahedral/plus_non_ft_heuristic.stim b/scripts/ft_stateprep/eval/circuits/tetrahedral/plus_non_ft_heuristic.stim new file mode 100644 index 00000000..79cca637 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/tetrahedral/plus_non_ft_heuristic.stim @@ -0,0 +1,2 @@ +H 2 4 6 10 13 +CX 4 1 6 5 10 3 13 11 2 1 3 5 4 7 11 12 6 13 3 0 5 4 11 9 12 8 7 14 6 7 1 8 2 9 5 11 4 12 13 14 1 0 2 3 9 10 diff --git a/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_ft_heuristic_heuristic.qasm b/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_ft_heuristic_heuristic.qasm new file mode 100644 index 00000000..570bdce2 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_ft_heuristic_heuristic.qasm @@ -0,0 +1,35 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[15]; +qreg z_anc[1]; +creg z_c[1]; +h q[0]; +h q[1]; +h q[2]; +h q[4]; +cx q[4],q[11]; +cx q[2],q[9]; +cx q[1],q[8]; +cx q[11],q[13]; +cx q[9],q[10]; +cx q[4],q[6]; +cx q[2],q[3]; +cx q[0],q[1]; +cx q[13],q[14]; +cx q[11],q[12]; +cx q[8],q[9]; +cx q[6],q[7]; +cx q[4],q[5]; +cx q[0],q[3]; +cx q[1],q[2]; +cx q[10],q[13]; +cx q[8],q[12]; +cx q[0],q[7]; +cx q[9],q[11]; +cx q[3],q[6]; +cx q[1],q[4]; +cx q[2],q[5]; +cx q[3],z_anc[0]; +cx q[4],z_anc[0]; +cx q[11],z_anc[0]; +measure z_anc[0] -> z_c[0]; diff --git a/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_ft_heuristic_heuristic.stim b/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_ft_heuristic_heuristic.stim new file mode 100644 index 00000000..1cc4f107 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_ft_heuristic_heuristic.stim @@ -0,0 +1,3 @@ +H 0 1 2 4 +CX 1 8 2 9 4 11 0 1 2 3 4 6 9 10 11 13 1 2 0 3 4 5 6 7 8 9 11 12 13 14 1 4 2 5 3 6 0 7 9 11 8 12 10 13 3 15 4 15 11 15 +MR 15 diff --git a/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_ft_heuristic_opt.qasm b/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_ft_heuristic_opt.qasm new file mode 100644 index 00000000..ca1d1de3 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_ft_heuristic_opt.qasm @@ -0,0 +1,35 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[15]; +qreg z_anc[1]; +creg z_c[1]; +h q[0]; +h q[1]; +h q[2]; +h q[4]; +cx q[4],q[11]; +cx q[2],q[9]; +cx q[1],q[8]; +cx q[11],q[13]; +cx q[9],q[10]; +cx q[4],q[6]; +cx q[2],q[3]; +cx q[0],q[1]; +cx q[13],q[14]; +cx q[11],q[12]; +cx q[8],q[9]; +cx q[6],q[7]; +cx q[4],q[5]; +cx q[0],q[3]; +cx q[1],q[2]; +cx q[10],q[13]; +cx q[8],q[12]; +cx q[0],q[7]; +cx q[9],q[11]; +cx q[3],q[6]; +cx q[1],q[4]; +cx q[2],q[5]; +cx q[0],z_anc[0]; +cx q[5],z_anc[0]; +cx q[11],z_anc[0]; +measure z_anc[0] -> z_c[0]; diff --git a/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_ft_heuristic_opt.stim b/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_ft_heuristic_opt.stim new file mode 100644 index 00000000..712b9d52 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_ft_heuristic_opt.stim @@ -0,0 +1,3 @@ +H 0 1 2 4 +CX 1 8 2 9 4 11 0 1 2 3 4 6 9 10 11 13 1 2 0 3 4 5 6 7 8 9 11 12 13 14 1 4 2 5 3 6 0 7 9 11 8 12 10 13 0 15 5 15 11 15 +MR 15 diff --git a/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_ft_opt_opt.qasm b/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_ft_opt_opt.qasm new file mode 100644 index 00000000..c73e013d --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_ft_opt_opt.qasm @@ -0,0 +1,35 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[15]; +qreg z_anc[1]; +creg z_c[1]; +h q[2]; +h q[6]; +h q[7]; +h q[14]; +cx q[6],q[9]; +cx q[7],q[11]; +cx q[2],q[11]; +cx q[14],q[3]; +cx q[3],q[1]; +cx q[11],q[6]; +cx q[7],q[12]; +cx q[9],q[1]; +cx q[14],q[7]; +cx q[2],q[0]; +cx q[7],q[13]; +cx q[0],q[8]; +cx q[6],q[14]; +cx q[11],q[7]; +cx q[13],q[5]; +cx q[1],q[13]; +cx q[7],q[10]; +cx q[6],q[7]; +cx q[11],q[4]; +cx q[3],q[11]; +cx q[9],q[2]; +cx q[1],q[8]; +cx q[1],z_anc[0]; +cx q[2],z_anc[0]; +cx q[10],z_anc[0]; +measure z_anc[0] -> z_c[0]; diff --git a/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_ft_opt_opt.stim b/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_ft_opt_opt.stim new file mode 100644 index 00000000..100e7cd3 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_ft_opt_opt.stim @@ -0,0 +1,3 @@ +H 2 6 7 14 +CX 6 9 7 11 14 3 3 1 2 11 7 12 2 0 9 1 11 6 14 7 0 8 9 2 7 13 6 14 11 7 13 5 7 10 11 4 1 13 6 7 1 8 3 11 1 15 2 15 10 15 +MR 15 diff --git a/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_non_ft_heuristic.qasm b/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_non_ft_heuristic.qasm new file mode 100644 index 00000000..fb826706 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_non_ft_heuristic.qasm @@ -0,0 +1,29 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[15]; +h q[2]; +h q[6]; +h q[7]; +h q[14]; +cx q[6],q[9]; +cx q[7],q[11]; +cx q[2],q[11]; +cx q[14],q[3]; +cx q[3],q[1]; +cx q[11],q[6]; +cx q[7],q[12]; +cx q[9],q[1]; +cx q[14],q[7]; +cx q[2],q[0]; +cx q[7],q[13]; +cx q[0],q[8]; +cx q[6],q[14]; +cx q[11],q[7]; +cx q[13],q[5]; +cx q[1],q[13]; +cx q[7],q[10]; +cx q[6],q[7]; +cx q[11],q[4]; +cx q[3],q[11]; +cx q[9],q[2]; +cx q[1],q[8]; diff --git a/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_non_ft_heuristic.stim b/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_non_ft_heuristic.stim new file mode 100644 index 00000000..4a6f21af --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_non_ft_heuristic.stim @@ -0,0 +1,2 @@ +H 2 6 7 14 +CX 6 9 7 11 14 3 3 1 2 11 7 12 2 0 9 1 11 6 14 7 0 8 9 2 7 13 6 14 11 7 13 5 7 10 11 4 1 13 6 7 1 8 3 11 diff --git a/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_non_ft_opt.qasm b/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_non_ft_opt.qasm new file mode 100644 index 00000000..fb826706 --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_non_ft_opt.qasm @@ -0,0 +1,29 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[15]; +h q[2]; +h q[6]; +h q[7]; +h q[14]; +cx q[6],q[9]; +cx q[7],q[11]; +cx q[2],q[11]; +cx q[14],q[3]; +cx q[3],q[1]; +cx q[11],q[6]; +cx q[7],q[12]; +cx q[9],q[1]; +cx q[14],q[7]; +cx q[2],q[0]; +cx q[7],q[13]; +cx q[0],q[8]; +cx q[6],q[14]; +cx q[11],q[7]; +cx q[13],q[5]; +cx q[1],q[13]; +cx q[7],q[10]; +cx q[6],q[7]; +cx q[11],q[4]; +cx q[3],q[11]; +cx q[9],q[2]; +cx q[1],q[8]; diff --git a/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_non_ft_opt.stim b/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_non_ft_opt.stim new file mode 100644 index 00000000..4a6f21af --- /dev/null +++ b/scripts/ft_stateprep/eval/circuits/tetrahedral/zero_non_ft_opt.stim @@ -0,0 +1,2 @@ +H 2 6 7 14 +CX 6 9 7 11 14 3 3 1 2 11 7 12 2 0 9 1 11 6 14 7 0 8 9 2 7 13 6 14 11 7 13 5 7 10 11 4 1 13 6 7 1 8 3 11 diff --git a/scripts/ft_stateprep/eval/estimate_logical_error_rate.py b/scripts/ft_stateprep/eval/estimate_logical_error_rate.py new file mode 100644 index 00000000..7348f28a --- /dev/null +++ b/scripts/ft_stateprep/eval/estimate_logical_error_rate.py @@ -0,0 +1,101 @@ +"""Estimate logical error rate for CSS state preparation circuits for a given code and physical error rate.""" + +from __future__ import annotations + +import argparse +from pathlib import Path + +from qiskit import QuantumCircuit + +from mqt.qecc import CSSCode +from mqt.qecc.circuit_synthesis import ( + NoisyNDFTStatePrepSimulator, + gate_optimal_prep_circuit, + gate_optimal_verification_circuit, + heuristic_prep_circuit, + heuristic_verification_circuit, + naive_verification_circuit, +) +from mqt.qecc.codes import HexagonalColorCode, SquareOctagonColorCode + + +def main() -> None: + """Run the logical error rate estimation for a given code and physical error rate.""" + available_codes = ["steane", "tetrahedral", "shor", "surface", "cc_4_8_8", "cc_6_6_6", "hamming", "carbon"] + parser = argparse.ArgumentParser(description="Estimate logical error rate for CSS state preparation circuits") + parser.add_argument( + "code", + type=str, + help="Code for which to estimate logical error rate. Available codes: " + ", ".join(available_codes), + ) + parser.add_argument("-p", "--p_error", type=float, help="Physical error rate") + parser.add_argument("--zero_state", default=True, action="store_true", help="Synthesize logical |0> state.") + parser.add_argument( + "--plus_state", default=False, dest="zero_state", action="store_false", help="Synthesize logical |+> state." + ) + parser.add_argument("-n", "--n_errors", type=int, default=500, help="Number of errors to sample") + parser.add_argument("--exact_circ", default=False, action="store_true", help="Use exact synthesis") + parser.add_argument("--heuristic_circ", dest="exact_circ", action="store_false", help="Use heuristic synthesis") + parser.add_argument("--exact_ver", default=True, action="store_true", help="Use exact verification") + parser.add_argument("--heuristic_ver", dest="exact_ver", action="store_false", help="Use heuristic verification") + parser.add_argument("--naive_ver", default=False, action="store_true", help="Use naive verification") + parser.add_argument("--no_ver", action="store_true", help="Use no verification") + parser.add_argument( + "-d", "--distance", type=int, default=3, help="Code Distance (only required for surface and color codes)" + ) + parser.add_argument("--no_parallel_gates", default=False, action="store_true") + + args = parser.parse_args() + code_name = args.code + if "surface" in code_name: + d = args.distance + code = CSSCode.from_code_name("surface", d) + code_name = f"rotated_surface_d{d}" + elif "cc_4_8_8" in code_name: + d = 5 + code = SquareOctagonColorCode(d) + elif "cc_6_6_6" in code_name: + d = 5 + code = HexagonalColorCode(d) + elif code_name in available_codes: + code = CSSCode.from_code_name(code_name) + else: + raise ValueError("Code " + code_name + " not available. Available codes: " + ", ".join(available_codes)) + + prefix = (Path(__file__) / "../circuits/").resolve() + sp_circ_name = "opt" if args.exact_circ else "heuristic" + ver_circ_name = ("opt" if args.exact_ver else "heuristic") if not args.naive_ver else "naive" + + state_name = "zero" if args.zero_state else "plus" + ft_name = "non_ft" if args.no_ver else "ft" + circ_file = f"{state_name}_{ft_name}_{sp_circ_name}_{ver_circ_name}.qasm" + + # check if file exists + if not (prefix / code_name / circ_file).exists(): + # create circuit + circ = None + if args.exact_circ: + circ = gate_optimal_prep_circuit(code, zero_state=args.zero_state, max_timeout=600) + else: + circ = heuristic_prep_circuit(code, zero_state=args.zero_state) + + assert circ is not None + if args.naive_ver: + qc = naive_verification_circuit(circ) + elif args.exact_ver: + qc = gate_optimal_verification_circuit(circ, max_timeout=600) + else: + qc = heuristic_verification_circuit(circ) + else: + # load circuit from file + qc = QuantumCircuit.from_qasm_file(prefix / code_name / circ_file) + + sim = NoisyNDFTStatePrepSimulator( + qc, code=code, p=args.p_error, zero_state=args.zero_state, parallel_gates=not args.no_parallel_gates + ) + res = sim.logical_error_rate(min_errors=args.n_errors) + print(",".join([str(x) for x in res])) + + +if __name__ == "__main__": + main() diff --git a/scripts/ft_stateprep/eval/run_eval_on_code.sh b/scripts/ft_stateprep/eval/run_eval_on_code.sh new file mode 100755 index 00000000..c56aa315 --- /dev/null +++ b/scripts/ft_stateprep/eval/run_eval_on_code.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# Description: Estimate logical error rates for given code in parallel. Results are saved in a csv file described by the first argument. All other arguments are passed to the python script. + +declare -a p=("0.00005" "0.00006" "0.00007" "0.00008" "0.00009" "0.0001" "0.0002" "0.0003" "0.0004" "0.0005" "0.0006" "0.0007" "0.0008" "0.0009" "0.001" "0.002" "0.003" "0.004" "0.005" "0.006" "0.007" "0.008" "0.009" "0.01" "0.02" "0.03" "0.04" "0.05" "0.06" "0.07" "0.08" "0.09" "0.1" "0.2" "0.3" "0.4" "0.5") + +echo "p p_l acceptance errors runs" > "$1.csv" + +run_and_write() { + local res=$(python estimate_logical_error_rate.py ${@:2:$#-2} "-p" "${@: -1}") + local line="${@: -1} ${res}" + (flock -e 200 echo $line >> "$1.csv") 200>lock +} + +export -f run_and_write + +parallel --load 16 --link run_and_write $@ ::: ${p[@]} diff --git a/scripts/ft_stateprep/eval_det/circuits/11_1_3/zero_heuristic.qasm b/scripts/ft_stateprep/eval_det/circuits/11_1_3/zero_heuristic.qasm new file mode 100644 index 00000000..14069f8c --- /dev/null +++ b/scripts/ft_stateprep/eval_det/circuits/11_1_3/zero_heuristic.qasm @@ -0,0 +1,23 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[11]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +cx q[4],q[9]; +cx q[4],q[7]; +cx q[3],q[5]; +cx q[4],q[10]; +cx q[2],q[9]; +cx q[1],q[7]; +cx q[0],q[5]; +cx q[3],q[6]; +cx q[1],q[10]; +cx q[9],q[5]; +cx q[7],q[8]; +cx q[1],q[9]; +cx q[0],q[7]; +cx q[10],q[6]; +cx q[5],q[8]; diff --git a/scripts/ft_stateprep/eval_det/circuits/16_2_4/zero_heuristic.qasm b/scripts/ft_stateprep/eval_det/circuits/16_2_4/zero_heuristic.qasm new file mode 100644 index 00000000..118a1ccf --- /dev/null +++ b/scripts/ft_stateprep/eval_det/circuits/16_2_4/zero_heuristic.qasm @@ -0,0 +1,33 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[16]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +cx q[5],q[12]; +cx q[4],q[12]; +cx q[2],q[10]; +cx q[6],q[7]; +cx q[5],q[8]; +cx q[3],q[11]; +cx q[1],q[9]; +cx q[0],q[10]; +cx q[12],q[13]; +cx q[6],q[11]; +cx q[4],q[7]; +cx q[3],q[8]; +cx q[13],q[14]; +cx q[12],q[9]; +cx q[10],q[15]; +cx q[6],q[12]; +cx q[5],q[11]; +cx q[4],q[8]; +cx q[3],q[7]; +cx q[2],q[13]; +cx q[1],q[15]; +cx q[0],q[14]; +cx q[9],q[10]; diff --git a/scripts/ft_stateprep/eval_det/circuits/carbon/zero_heuristic.qasm b/scripts/ft_stateprep/eval_det/circuits/carbon/zero_heuristic.qasm new file mode 100644 index 00000000..0cb023bf --- /dev/null +++ b/scripts/ft_stateprep/eval_det/circuits/carbon/zero_heuristic.qasm @@ -0,0 +1,27 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[12]; +h q[0]; +h q[1]; +h q[2]; +h q[4]; +h q[7]; +cx q[7],q[11]; +cx q[1],q[5]; +cx q[7],q[9]; +cx q[4],q[10]; +cx q[2],q[8]; +cx q[1],q[3]; +cx q[0],q[6]; +cx q[10],q[9]; +cx q[8],q[7]; +cx q[6],q[11]; +cx q[4],q[3]; +cx q[2],q[1]; +cx q[0],q[5]; +cx q[11],q[10]; +cx q[9],q[8]; +cx q[7],q[6]; +cx q[5],q[4]; +cx q[3],q[2]; +cx q[1],q[0]; diff --git a/scripts/ft_stateprep/eval_det/circuits/carbon/zero_opt.qasm b/scripts/ft_stateprep/eval_det/circuits/carbon/zero_opt.qasm new file mode 100644 index 00000000..7cbb7eec --- /dev/null +++ b/scripts/ft_stateprep/eval_det/circuits/carbon/zero_opt.qasm @@ -0,0 +1,24 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[12]; +h q[1]; +h q[2]; +h q[4]; +h q[6]; +h q[8]; +cx q[1],q[7]; +cx q[6],q[9]; +cx q[2],q[5]; +cx q[7],q[0]; +cx q[7],q[6]; +cx q[4],q[10]; +cx q[5],q[11]; +cx q[9],q[3]; +cx q[10],q[1]; +cx q[8],q[5]; +cx q[7],q[2]; +cx q[8],q[4]; +cx q[8],q[9]; +cx q[2],q[8]; +cx q[9],q[0]; +cx q[4],q[7]; diff --git a/scripts/ft_stateprep/eval_det/circuits/hamming/zero_ft_heuristic_opt.qasm b/scripts/ft_stateprep/eval_det/circuits/hamming/zero_ft_heuristic_opt.qasm new file mode 100644 index 00000000..9c3baff3 --- /dev/null +++ b/scripts/ft_stateprep/eval_det/circuits/hamming/zero_ft_heuristic_opt.qasm @@ -0,0 +1,29 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[15]; +h q[0]; +h q[1]; +h q[3]; +h q[7]; +cx q[7],q[11]; +cx q[3],q[5]; +cx q[1],q[2]; +cx q[11],q[13]; +cx q[7],q[9]; +cx q[5],q[6]; +cx q[3],q[4]; +cx q[0],q[2]; +cx q[13],q[14]; +cx q[11],q[12]; +cx q[9],q[10]; +cx q[7],q[8]; +cx q[1],q[5]; +cx q[0],q[4]; +cx q[2],q[6]; +cx q[3],q[11]; +cx q[1],q[9]; +cx q[0],q[8]; +cx q[5],q[13]; +cx q[4],q[12]; +cx q[2],q[10]; +cx q[6],q[14]; diff --git a/scripts/ft_stateprep/eval_det/circuits/hamming/zero_ft_opt.qasm b/scripts/ft_stateprep/eval_det/circuits/hamming/zero_ft_opt.qasm new file mode 100644 index 00000000..cf586641 --- /dev/null +++ b/scripts/ft_stateprep/eval_det/circuits/hamming/zero_ft_opt.qasm @@ -0,0 +1,29 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[15]; +h q[0]; +h q[1]; +h q[11]; +h q[12]; +cx q[0],q[10]; +cx q[1],q[0]; +cx q[1],q[7]; +cx q[12],q[3]; +cx q[10],q[6]; +cx q[1],q[8]; +cx q[11],q[4]; +cx q[3],q[11]; +cx q[11],q[13]; +cx q[8],q[9]; +cx q[0],q[14]; +cx q[12],q[10]; +cx q[1],q[3]; +cx q[6],q[5]; +cx q[11],q[0]; +cx q[0],q[6]; +cx q[0],q[7]; +cx q[10],q[1]; +cx q[1],q[11]; +cx q[4],q[9]; +cx q[4],q[2]; +cx q[5],q[4]; diff --git a/scripts/ft_stateprep/eval_det/circuits/hypercube/zero_heuristic.qasm b/scripts/ft_stateprep/eval_det/circuits/hypercube/zero_heuristic.qasm new file mode 100644 index 00000000..0dda57b4 --- /dev/null +++ b/scripts/ft_stateprep/eval_det/circuits/hypercube/zero_heuristic.qasm @@ -0,0 +1,33 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[16]; +h q[0]; +h q[1]; +h q[3]; +h q[7]; +h q[11]; +cx q[3],q[12]; +cx q[1],q[9]; +cx q[0],q[8]; +cx q[12],q[14]; +cx q[11],q[8]; +cx q[9],q[10]; +cx q[7],q[3]; +cx q[1],q[5]; +cx q[0],q[4]; +cx q[14],q[15]; +cx q[12],q[13]; +cx q[11],q[10]; +cx q[7],q[4]; +cx q[5],q[6]; +cx q[1],q[2]; +cx q[8],q[9]; +cx q[3],q[0]; +cx q[11],q[15]; +cx q[7],q[6]; +cx q[10],q[14]; +cx q[8],q[12]; +cx q[4],q[5]; +cx q[3],q[2]; +cx q[9],q[13]; +cx q[0],q[1]; diff --git a/scripts/ft_stateprep/eval_det/circuits/shor/zero_heuristic.qasm b/scripts/ft_stateprep/eval_det/circuits/shor/zero_heuristic.qasm new file mode 100644 index 00000000..90622fb2 --- /dev/null +++ b/scripts/ft_stateprep/eval_det/circuits/shor/zero_heuristic.qasm @@ -0,0 +1,14 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[9]; +h q[0]; +h q[2]; +cx q[2],q[6]; +cx q[0],q[3]; +cx q[6],q[8]; +cx q[3],q[4]; +cx q[2],q[0]; +cx q[6],q[7]; +cx q[4],q[5]; +cx q[3],q[2]; +cx q[0],q[1]; diff --git a/scripts/ft_stateprep/eval_det/circuits/shor/zero_opt.qasm b/scripts/ft_stateprep/eval_det/circuits/shor/zero_opt.qasm new file mode 100644 index 00000000..004bf475 --- /dev/null +++ b/scripts/ft_stateprep/eval_det/circuits/shor/zero_opt.qasm @@ -0,0 +1,13 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[9]; +h q[2]; +h q[7]; +cx q[7],q[4]; +cx q[2],q[7]; +cx q[2],q[0]; +cx q[4],q[5]; +cx q[7],q[8]; +cx q[4],q[3]; +cx q[7],q[6]; +cx q[0],q[1]; diff --git a/scripts/ft_stateprep/eval_det/circuits/steane/zero_heuristic.qasm b/scripts/ft_stateprep/eval_det/circuits/steane/zero_heuristic.qasm new file mode 100644 index 00000000..2df628f2 --- /dev/null +++ b/scripts/ft_stateprep/eval_det/circuits/steane/zero_heuristic.qasm @@ -0,0 +1,14 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[7]; +h q[0]; +h q[1]; +h q[3]; +cx q[3],q[5]; +cx q[0],q[2]; +cx q[5],q[6]; +cx q[3],q[4]; +cx q[1],q[0]; +cx q[2],q[6]; +cx q[1],q[5]; +cx q[0],q[4]; diff --git a/scripts/ft_stateprep/eval_det/circuits/steane/zero_opt.qasm b/scripts/ft_stateprep/eval_det/circuits/steane/zero_opt.qasm new file mode 100644 index 00000000..9d04cd08 --- /dev/null +++ b/scripts/ft_stateprep/eval_det/circuits/steane/zero_opt.qasm @@ -0,0 +1,14 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[7]; +h q[0]; +h q[3]; +h q[5]; +cx q[3],q[1]; +cx q[5],q[4]; +cx q[0],q[2]; +cx q[4],q[3]; +cx q[1],q[0]; +cx q[1],q[6]; +cx q[2],q[4]; +cx q[4],q[6]; diff --git a/scripts/ft_stateprep/eval_det/circuits/surface_3/plus_heuristic.qasm b/scripts/ft_stateprep/eval_det/circuits/surface_3/plus_heuristic.qasm new file mode 100644 index 00000000..7106b8c2 --- /dev/null +++ b/scripts/ft_stateprep/eval_det/circuits/surface_3/plus_heuristic.qasm @@ -0,0 +1,16 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[9]; +h q[2]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +cx q[7],q[3]; +cx q[5],q[1]; +cx q[4],q[3]; +cx q[2],q[1]; +cx q[7],q[8]; +cx q[6],q[3]; +cx q[4],q[2]; +cx q[1],q[0]; diff --git a/scripts/ft_stateprep/eval_det/circuits/surface_3/plus_opt.qasm b/scripts/ft_stateprep/eval_det/circuits/surface_3/plus_opt.qasm new file mode 100644 index 00000000..f90ec699 --- /dev/null +++ b/scripts/ft_stateprep/eval_det/circuits/surface_3/plus_opt.qasm @@ -0,0 +1,16 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[9]; +h q[0]; +h q[3]; +h q[4]; +h q[5]; +h q[7]; +cx q[0],q[1]; +cx q[4],q[2]; +cx q[7],q[8]; +cx q[3],q[6]; +cx q[1],q[2]; +cx q[5],q[4]; +cx q[8],q[3]; +cx q[4],q[6]; diff --git a/scripts/ft_stateprep/eval_det/circuits/surface_3/zero_heuristic.qasm b/scripts/ft_stateprep/eval_det/circuits/surface_3/zero_heuristic.qasm new file mode 100644 index 00000000..82994398 --- /dev/null +++ b/scripts/ft_stateprep/eval_det/circuits/surface_3/zero_heuristic.qasm @@ -0,0 +1,15 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[9]; +h q[0]; +h q[2]; +h q[5]; +h q[6]; +cx q[5],q[8]; +cx q[0],q[4]; +cx q[5],q[7]; +cx q[0],q[3]; +cx q[7],q[4]; +cx q[6],q[3]; +cx q[2],q[5]; +cx q[0],q[1]; diff --git a/scripts/ft_stateprep/eval_det/circuits/surface_3/zero_opt.qasm b/scripts/ft_stateprep/eval_det/circuits/surface_3/zero_opt.qasm new file mode 100644 index 00000000..0d8395c8 --- /dev/null +++ b/scripts/ft_stateprep/eval_det/circuits/surface_3/zero_opt.qasm @@ -0,0 +1,15 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[9]; +h q[3]; +h q[4]; +h q[5]; +h q[8]; +cx q[8],q[0]; +cx q[0],q[1]; +cx q[3],q[6]; +cx q[5],q[2]; +cx q[4],q[8]; +cx q[8],q[5]; +cx q[1],q[3]; +cx q[8],q[7]; diff --git a/scripts/ft_stateprep/eval_det/circuits/tetrahedral/plus_heuristic.qasm b/scripts/ft_stateprep/eval_det/circuits/tetrahedral/plus_heuristic.qasm new file mode 100644 index 00000000..3a9cec96 --- /dev/null +++ b/scripts/ft_stateprep/eval_det/circuits/tetrahedral/plus_heuristic.qasm @@ -0,0 +1,31 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[15]; +h q[2]; +h q[4]; +h q[6]; +h q[10]; +h q[13]; +cx q[13],q[11]; +cx q[11],q[12]; +cx q[6],q[5]; +cx q[10],q[3]; +cx q[4],q[1]; +cx q[11],q[9]; +cx q[12],q[8]; +cx q[4],q[7]; +cx q[3],q[5]; +cx q[2],q[1]; +cx q[7],q[14]; +cx q[6],q[13]; +cx q[2],q[9]; +cx q[1],q[8]; +cx q[3],q[0]; +cx q[5],q[4]; +cx q[13],q[14]; +cx q[9],q[10]; +cx q[1],q[0]; +cx q[4],q[12]; +cx q[6],q[7]; +cx q[5],q[11]; +cx q[2],q[3]; diff --git a/scripts/ft_stateprep/eval_det/circuits/tetrahedral/zero_heuristic.qasm b/scripts/ft_stateprep/eval_det/circuits/tetrahedral/zero_heuristic.qasm new file mode 100644 index 00000000..fb826706 --- /dev/null +++ b/scripts/ft_stateprep/eval_det/circuits/tetrahedral/zero_heuristic.qasm @@ -0,0 +1,29 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[15]; +h q[2]; +h q[6]; +h q[7]; +h q[14]; +cx q[6],q[9]; +cx q[7],q[11]; +cx q[2],q[11]; +cx q[14],q[3]; +cx q[3],q[1]; +cx q[11],q[6]; +cx q[7],q[12]; +cx q[9],q[1]; +cx q[14],q[7]; +cx q[2],q[0]; +cx q[7],q[13]; +cx q[0],q[8]; +cx q[6],q[14]; +cx q[11],q[7]; +cx q[13],q[5]; +cx q[1],q[13]; +cx q[7],q[10]; +cx q[6],q[7]; +cx q[11],q[4]; +cx q[3],q[11]; +cx q[9],q[2]; +cx q[1],q[8]; diff --git a/scripts/ft_stateprep/eval_det/circuits/tetrahedral/zero_opt.qasm b/scripts/ft_stateprep/eval_det/circuits/tetrahedral/zero_opt.qasm new file mode 100644 index 00000000..fb826706 --- /dev/null +++ b/scripts/ft_stateprep/eval_det/circuits/tetrahedral/zero_opt.qasm @@ -0,0 +1,29 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[15]; +h q[2]; +h q[6]; +h q[7]; +h q[14]; +cx q[6],q[9]; +cx q[7],q[11]; +cx q[2],q[11]; +cx q[14],q[3]; +cx q[3],q[1]; +cx q[11],q[6]; +cx q[7],q[12]; +cx q[9],q[1]; +cx q[14],q[7]; +cx q[2],q[0]; +cx q[7],q[13]; +cx q[0],q[8]; +cx q[6],q[14]; +cx q[11],q[7]; +cx q[13],q[5]; +cx q[1],q[13]; +cx q[7],q[10]; +cx q[6],q[7]; +cx q[11],q[4]; +cx q[3],q[11]; +cx q[9],q[2]; +cx q[1],q[8]; diff --git a/scripts/ft_stateprep/eval_det/eval.py b/scripts/ft_stateprep/eval_det/eval.py new file mode 100644 index 00000000..d43d7e4e --- /dev/null +++ b/scripts/ft_stateprep/eval_det/eval.py @@ -0,0 +1,180 @@ +"""Evaluation script for the deterministic state preparation verification and simulation.""" + +from __future__ import annotations + +import logging +from concurrent.futures import ProcessPoolExecutor +from pathlib import Path +from time import time +from typing import TYPE_CHECKING + +import numpy as np +import pandas as pd +import qsample as qs +from qiskit import QuantumCircuit + +import mqt.qecc.ft_stateprep as ftsp +from mqt.qecc import codes + +if TYPE_CHECKING: + from mqt.qecc import CSSCode + +logger = logging.getLogger() +logger.setLevel(logging.INFO) + +# The directory where the circuits are stored +# The expected directory structure is: +# circ_dir +# ├── code_name +# │ ├── {zero,plus}_{heuristic,opt}.qasm +prefix = (Path(__file__) / "../circuits/").resolve() +# Synthesis parameters +max_timeout_global = 3000 +min_timeout_global = 8 +max_ancillas_global = 8 + +# Simulation parameters +err_params = {"q": [1e-4, 5e-4, 1e-3, 5e-3, 1e-2, 5e-2, 1e-1, 5e-1]} +err_model = qs.noise.E1_1 +shots_dss = 8000 +p_max = {"q": 0.01} +L = 3 + + +# Helper functions +def _extract_parameters(file_path: Path) -> tuple[str, bool, str]: + # Extract the code name from the parent directory + code_name = file_path.parent.name + file_path_str = str(file_path) + zero_state = "zero" in file_path_str + # Extract the procedure from the filename + if "heuristic" in file_path_str: + procedure = "heuristic" + elif "opt" in file_path_str: + procedure = "opt" + else: + procedure = "unknown" + + return code_name, zero_state, procedure + + +def _codes_from_matrix(code_name: str) -> CSSCode: + if code_name == "11_1_3": + matrix = np.array([ + [1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0], + [0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1], + [0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0], + [0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0], + [0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1], + ]) + return codes.CSSCode(distance=3, Hx=matrix, Hz=matrix) + if code_name == "16_2_4": + matrix = np.array([ + [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1], + [0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1], + [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1], + [0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0], + [0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0], + [0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0], + [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0], + ]) + return codes.CSSCode(distance=4, Hx=matrix, Hz=matrix) + if code_name == "hypercube": + matrix = np.array([ + [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1], + [0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0], + [1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0], + ]) + return codes.CSSCode(distance=4, Hx=matrix, Hz=matrix) + msg = f"Code {code_name} not recognized." + raise ValueError(msg) + + +def run_parallel(path: Path) -> pd.DataFrame: + """Run the evaluation for a single circuit file and return the results as a DataFrame. + + Args: + path: The path to the circuit file. + + Returns: + The results of the evaluation as a DataFrame. + """ + # load code and circuit + code_name, zero_state, procedure = _extract_parameters(path) + if code_name in {"11_1_3", "16_2_4", "hypercube"}: + code = _codes_from_matrix(code_name) + else: + code = codes.CSSCode.from_code_name(code_name) + state_prep_circ = ftsp.StatePrepCircuit(QuantumCircuit.from_qasm_file(path), code, zero_state) + + start_time = time() + + verify_helper = ftsp.DeterministicVerificationHelper(state_prep_circ) + verify_heuristic = verify_helper.get_solution( + min_timeout=min_timeout_global, + max_timeout=max_timeout_global, + max_ancillas=max_ancillas_global, + use_optimal_verification=False, + ) + verify_optimal = verify_helper.get_solution( + min_timeout=min_timeout_global, + max_timeout=max_timeout_global, + max_ancillas=max_ancillas_global, + use_optimal_verification=True, + ) + verify_global = verify_helper.get_global_solution( + min_timeout=min_timeout_global, + max_timeout=max_timeout_global, + max_ancillas=max_ancillas_global, + ) + + sim_heuristic = ftsp.NoisyDFTStatePrepSimulator(state_prep_circ.circ, verify_heuristic, code, err_model, zero_state) + stats_heuristic = sim_heuristic.dss_logical_error_rates( + err_params=err_params, p_max=p_max, dss_l=L, shots=shots_dss + ) + sim_optimal = ftsp.NoisyDFTStatePrepSimulator(state_prep_circ.circ, verify_optimal, code, err_model, zero_state) + stats_optimal = sim_optimal.dss_logical_error_rates(err_params=err_params, p_max=p_max, dss_l=L, shots=shots_dss) + sim_global = ftsp.NoisyDFTStatePrepSimulator(state_prep_circ.circ, verify_global, code, err_model, zero_state) + stats_global = sim_global.dss_logical_error_rates(err_params=err_params, p_max=p_max, dss_l=L, shots=shots_dss) + + results_run = pd.DataFrame() + verifications = ["heuristic", "optimal", "global"] + for name, verify, stats in zip( + verifications, [verify_heuristic, verify_optimal, verify_global], [stats_heuristic, stats_optimal, stats_global] + ): + results_run = pd.concat([ + results_run, + pd.DataFrame({ + "code": [code_name], + "zero_state": [zero_state], + "global_opt": [False], + "verification": [name], + "procedure": [procedure], + "verification_stabs_0": [verify[0].stabs], + "recovery_stabs_0": [verify[0].det_correction], + "flags_0": [verify[0].hook_corrections], + "verification_stabs_1": [verify[1].stabs], + "recovery_stabs_1": [verify[1].det_correction], + "flags_1": [verify[1].hook_corrections], + "logical_error_rates": [stats], + "time": [time() - start_time], + }), + ]) + + results_run.to_csv(f"results_{code_name}_{zero_state}_{procedure}.csv") + + return results_run + + +if __name__ == "__main__": + # get all filepaths in the directory + file_paths = list(prefix.glob("**/*.qasm")) + + # run in parallel + with ProcessPoolExecutor() as executor: + dfs = list(executor.map(run_parallel, file_paths)) + + results = pd.concat(dfs, ignore_index=True) + results.to_csv("results.csv") diff --git a/scripts/ft_stateprep/eval_det/plot.ipynb b/scripts/ft_stateprep/eval_det/plot.ipynb new file mode 100644 index 00000000..02b09f7d --- /dev/null +++ b/scripts/ft_stateprep/eval_det/plot.ipynb @@ -0,0 +1,187 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "from mqt.qecc.ft_stateprep import DeterministicVerification" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "data = pd.read_csv(\"results.csv\", index_col=0)\n", + "data.reset_index(inplace=True, drop=True)\n", + "data.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 1. Compute numbers for the table" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "eval_names = {\"array\": np.array, \"int8\": np.int8, \"nan\": np.nan}\n", + "for index, row in data.iterrows():\n", + " verify_0 = DeterministicVerification(\n", + " eval(row[\"verification_stabs_0\"], eval_names), # noqa: S307\n", + " eval(row[\"recovery_stabs_0\"], eval_names), # noqa: S307\n", + " eval(row[\"flags_0\"], eval_names), # noqa: S307\n", + " )\n", + " verify_1 = DeterministicVerification(\n", + " eval(row[\"verification_stabs_1\"], eval_names), # noqa: S307\n", + " eval(row[\"recovery_stabs_1\"], eval_names), # noqa: S307\n", + " eval(row[\"flags_1\"], eval_names), # noqa: S307\n", + " )\n", + " # add column\n", + " funs = [min, max, sum, np.mean]\n", + " data.at[index, \"verify_num_anc_0\"] = verify_0.num_ancillae_verification()\n", + " data.at[index, \"verify_num_cnots_0\"] = verify_0.num_cnots_verification()\n", + " data.at[index, \"verify_num_anc_1\"] = verify_1.num_ancillae_verification()\n", + " data.at[index, \"verify_num_cnots_1\"] = verify_1.num_cnots_verification()\n", + " data.at[index, \"correction_num_anc_0\"] = str([verify_0.stat_ancillae_correction(fun) for fun in funs])\n", + " data.at[index, \"correction_num_anc_list_0\"] = str(verify_0.stat_ancillae_correction(list))\n", + " data.at[index, \"correction_num_cnots_0\"] = str([verify_0.stat_cnots_correction(fun) for fun in funs])\n", + " data.at[index, \"correction_num_cnots_list_0\"] = str(verify_0.stat_cnots_correction(list))\n", + " data.at[index, \"correction_num_anc_1\"] = str([verify_1.stat_ancillae_correction(fun) for fun in funs])\n", + " data.at[index, \"correction_num_anc_list_1\"] = str(verify_1.stat_ancillae_correction(list))\n", + " data.at[index, \"correction_num_cnots_1\"] = str([verify_1.stat_cnots_correction(fun) for fun in funs])\n", + " data.at[index, \"correction_num_cnots_list_1\"] = str(verify_1.stat_cnots_correction(list))\n", + " data.at[index, \"flag_num_anc_0\"] = verify_0.num_ancillae_hooks()\n", + " data.at[index, \"flag_num_cnots_0\"] = verify_0.num_cnots_hooks()\n", + " data.at[index, \"flag_num_anc_1\"] = verify_1.num_ancillae_hooks()\n", + " data.at[index, \"flag_num_cnots_1\"] = verify_1.num_cnots_hooks()\n", + " data.at[index, \"flag_correction_num_anc_0\"] = str([verify_0.stat_ancillae_hook_corrections(fun) for fun in funs])\n", + " data.at[index, \"flag_correction_num_anc_list_0\"] = str(verify_0.stat_ancillae_hook_corrections(list))\n", + " data.at[index, \"flag_correction_num_cnots_0\"] = str([verify_0.stat_cnots_hook_corrections(fun) for fun in funs])\n", + " data.at[index, \"flag_correction_num_cnots_list_0\"] = str(verify_0.stat_cnots_hook_corrections(list))\n", + " data.at[index, \"flag_correction_num_anc_1\"] = str([verify_1.stat_ancillae_hook_corrections(fun) for fun in funs])\n", + " data.at[index, \"flag_correction_num_anc_list_1\"] = str(verify_1.stat_ancillae_hook_corrections(list))\n", + " data.at[index, \"flag_correction_num_cnots_1\"] = str([verify_1.stat_cnots_hook_corrections(fun) for fun in funs])\n", + " data.at[index, \"flag_correction_num_cnots_list_1\"] = str(verify_1.stat_cnots_hook_corrections(list))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# remove above columns\n", + "data_table = data.copy()\n", + "\n", + "stats_columns = [\n", + " \"verification_stabs_0\",\n", + " \"recovery_stabs_0\",\n", + " \"flags_0\",\n", + " \"verification_stabs_1\",\n", + " \"recovery_stabs_1\",\n", + " \"flags_1\",\n", + "]\n", + "error_rates_columns = [\"logical_error_rates\"]\n", + "data_table = data_table.drop(columns=stats_columns)\n", + "data_table = data_table.drop(columns=error_rates_columns)\n", + "# data_table" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 2. Create Plot with logical error rates" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig = plt.figure(figsize=(5, 4))\n", + "ax = fig.add_subplot(111)\n", + "\n", + "physical_error_rates = [1e-4, 5e-4, 1e-3, 5e-3, 1e-2, 5e-2, 1e-1, 5e-1]\n", + "# fmts = ['o--', 's--', 'd--', 'x--', 'v--', '^--', '<--', '>--' , 'o--']\n", + "fmts = [\"o:\", \"s:\", \"d:\", \"x:\", \"v:\", \"^:\", \"<:\", \">:\", \"o:\"]\n", + "fmt_idx = 0\n", + "\n", + "data_sorted = data.sort_values(by=\"code\")\n", + "\n", + "sim_col = \"logical_error_rates\"\n", + "for _, row in data_sorted.iterrows():\n", + " if not row[\"zero_state\"] and row[\"code\"] != \"tetrahedral\":\n", + " continue\n", + " if row[\"zero_state\"] and row[\"code\"] == \"tetrahedral\":\n", + " continue\n", + " if row[\"procedure\"] != \"heuristic\" or row[\"verification\"] != \"optimal\":\n", + " continue\n", + " code_name = row[\"code\"].capitalize()\n", + " if code_name == \"16_2_4\":\n", + " code_name = r\"$[[16, 2, 4]]$\"\n", + " elif code_name == \"11_1_3\":\n", + " code_name = r\"$[[11, 1, 3]]$\"\n", + " elif code_name == \"Hypercube\":\n", + " code_name = \"Tesseract\"\n", + " upper_bound, std = eval(row[sim_col], eval_names)[-2:] # noqa: S307\n", + " ax.errorbar(physical_error_rates, upper_bound, label=code_name, fmt=fmts[fmt_idx])\n", + " fmt_idx += 1\n", + "\n", + "\n", + "# add linear line as reference\n", + "ax.plot(physical_error_rates, physical_error_rates, label=\"Linear\", linestyle=\"--\", color=\"black\", alpha=0.5)\n", + "\n", + "ax.set_xscale(\"log\")\n", + "ax.set_yscale(\"log\")\n", + "ax.set_ylabel(\"Logical error rate $p_{\\mathrm{L}}$\")\n", + "ax.set_xlabel(r\"Physical error rate $p$\")\n", + "ax.set_xlim(1e-4, 0.5)\n", + "ax.set_ylim(1e-7, 1)\n", + "\n", + "ax.legend(loc=\"lower right\")\n", + "# define order of legend\n", + "handles, labels = ax.get_legend_handles_labels()\n", + "order = [0, 7, 6, 8, 1, 9, 4, 3, 2, 5]\n", + "ax.legend([handles[idx] for idx in order], [labels[idx] for idx in order], loc=\"lower right\")\n", + "\n", + "plt.show()\n", + "fig.savefig(\"logical_error_rates.pdf\", bbox_inches=\"tight\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/scripts/ft_stateprep/eval_det/results.csv b/scripts/ft_stateprep/eval_det/results.csv new file mode 100644 index 00000000..7a558112 --- /dev/null +++ b/scripts/ft_stateprep/eval_det/results.csv @@ -0,0 +1,255 @@ +,code,zero_state,global_opt,verification,procedure,verification_stabs_0,recovery_stabs_0,flags_0,verification_stabs_1,recovery_stabs_1,flags_1,logical_error_rates,time +0,11_1_3,True,False,heuristic,heuristic,"[array([0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1]), array([0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0])]","{1: ([array([1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0])}), 2: ([array([1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0])}), 3: ([array([0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1]), 1: array([0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0])})}","[False, False]","[array([0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1])]","{1: ([array([1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0], dtype=int8), array([0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]), 2: array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 3: array([0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0])})}","[{1: ([array([1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1], dtype=int8)], {0: array([0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1])})}]","[array([1.36176014e-06, 3.36684140e-05, 1.32801595e-04, 2.95387824e-03, + 1.01014594e-02, 5.57616851e-02, 2.44545397e-02, 1.29472270e-11]), array([4.50776961e-06, 2.23700243e-05, 4.53927314e-05, 3.49721121e-04, + 1.03286855e-03, 7.83148358e-03, 4.89439969e-03, 9.70586081e-12]), array([9.72771097e-06, 2.39839689e-04, 9.42934406e-04, 2.06001432e-02, + 7.01644854e-02, 6.10048758e-01, 9.22135163e-01, 1.00000000e+00]), array([4.72523102e-06, nan, nan, nan, + nan, nan, nan, nan])]",525.493499994278 +0,11_1_3,True,False,optimal,heuristic,"[array([0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1], dtype=int8), array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0], dtype=int8)]","{1: ([array([0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1], dtype=int8)], {0: array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0])}), 2: ([array([1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]), 1: array([0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1])}), 3: ([array([0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1], dtype=int8)], {0: array([0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0]), 1: array([1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0])})}","[False, False]","[array([0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0], dtype=int8)]","{1: ([array([1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]), 1: array([0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0])})}","[{1: ([array([0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0])})}]","[array([6.99230991e-07, 1.73110456e-05, 6.84026209e-05, 1.54863612e-03, + 5.45297154e-03, 4.20873366e-02, 2.73948505e-02, 2.47850856e-11]), array([4.37464123e-06, 2.16675010e-05, 4.35069275e-05, 3.01388592e-04, + 8.89210028e-04, 8.92195019e-03, 8.27128523e-03, 1.17787789e-09]), array([1.08030839e-05, 2.65883388e-04, 1.04301212e-03, 2.23819240e-02, + 7.45544936e-02, 5.78223171e-01, 8.78129276e-01, 1.00000000e+00]), array([4.78186107e-06, 1.05074571e-05, nan, nan, + nan, nan, nan, nan])]",525.493898153305 +0,11_1_3,True,False,global,heuristic,"[array([1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0], dtype=int8), array([0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1], dtype=int8)]","{1: ([array([1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1])}), 2: ([array([0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0])}), 3: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}","[False, False]","[array([0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0], dtype=int8)]","{1: ([array([1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0])})}","[{1: ([array([0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0])})}]","[array([6.42041791e-07, 1.60915812e-05, 6.45381152e-05, 1.62048417e-03, + 6.30379458e-03, 6.91692396e-02, 5.58285607e-02, 1.20573042e-09]), array([3.96284116e-06, 1.96351452e-05, 3.94317816e-05, 2.69345838e-04, + 7.91581855e-04, 1.02796978e-02, 1.21035502e-02, 2.81418546e-09]), array([1.00962464e-05, 2.48745668e-04, 9.77074487e-04, 2.12043221e-02, + 7.17127263e-02, 6.09507772e-01, 9.20762601e-01, 1.00000000e+00]), array([4.1133973e-06, nan, nan, nan, + nan, nan, nan, nan])]",525.4942150115967 +0,16_2_4,True,False,heuristic,heuristic,"[array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1]), array([0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0])]","{1: ([array([0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0], dtype=int8), array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0], dtype=int8), array([0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0]), 2: array([0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]), 3: array([0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), 4: array([0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]), 5: array([0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0]), 6: array([0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]), 7: array([0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0])}), 2: ([array([0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], dtype=int8)], {0: array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])}), 3: ([array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1], dtype=int8)], {0: array([0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0])})}","[False, {1: ([array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1], dtype=int8), array([0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]), 1: array([0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]), 2: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0]), 3: array([1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0])})}]","[array([0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0])]","{1: ([array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1], dtype=int8), array([1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 2: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]), 3: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}","[{1: ([array([0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], dtype=int8), array([0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]), 1: array([0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0]), 2: array([0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 3: array([0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0])})}]","[array([2.39388733e-06, 5.92472380e-05, 2.33943808e-04, 5.21120069e-03, + 1.76186389e-02, 7.11312815e-02, 1.62616377e-02, 3.11870338e-16]), array([3.17607936e-06, 1.57237885e-05, 3.21358253e-05, 2.43091677e-04, + 5.91580554e-04, 1.55812489e-03, 1.04845259e-03, 8.12796831e-17]), array([1.15562628e-05, 2.82650439e-04, 1.10039290e-03, 2.23841028e-02, + 7.07589251e-02, 4.24057683e-01, 5.00089205e-01, 5.00000000e-01]), array([nan, nan, nan, nan, nan, nan, nan, nan])]",165.36054301261902 +0,16_2_4,True,False,optimal,heuristic,"[array([0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1], dtype=int8), array([0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0], dtype=int8)]","{1: ([array([0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0], dtype=int8), array([0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 2: array([0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]), 3: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0])}), 2: ([array([0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], dtype=int8), array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0], dtype=int8)], {0: array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), 2: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0]), 3: array([0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0])}), 3: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1], dtype=int8), 1: array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1], dtype=int8)})}","[False, False]","[array([0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0], dtype=int8), array([1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1], dtype=int8)]","{1: ([array([0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0], dtype=int8), array([0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 2: array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 3: array([0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0])}), 2: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)}), 3: ([array([0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0])})}","[{1: ([array([0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0])})}, {1: ([array([1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0], dtype=int8), array([1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), 2: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1]), 3: array([1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])})}]","[array([2.42592052e-06, 5.97513509e-05, 2.34559684e-04, 5.01635937e-03, + 1.62919415e-02, 5.62352877e-02, 1.38372925e-02, 7.03092930e-15]), array([3.64435428e-06, 1.77979316e-05, 3.49715206e-05, 1.83079083e-04, + 3.64220823e-04, 3.28146109e-03, 2.55338020e-03, 5.53124893e-15]), array([1.15636248e-05, 2.82103408e-04, 1.09467608e-03, 2.16611686e-02, + 6.61142288e-02, 3.67712247e-01, 4.83721607e-01, 5.00000000e-01]), array([nan, nan, nan, nan, nan, nan, nan, nan])]",165.36099100112915 +0,carbon,True,False,optimal,heuristic,"[array([0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0], dtype=int8), array([0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1], dtype=int8)]","{1: ([array([0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1], dtype=int8), array([0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0]), 2: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), 3: array([0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0])}), 2: ([array([1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1])}), 3: ([array([0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1])})}","[False, False]","[array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], dtype=int8)]","{1: ([array([1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0], dtype=int8), array([0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0]), 2: array([0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]), 3: array([1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])})}","[{1: ([array([0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1])})}]","[array([1.15770240e-06, 2.87555957e-05, 1.14052486e-04, 2.63036831e-03, + 9.27130203e-03, 5.33877439e-02, 2.38691739e-02, 1.38188948e-11]), array([2.33275589e-06, 1.16191928e-05, 2.38519006e-05, 1.95035255e-04, + 5.58252254e-04, 3.70528847e-03, 2.01877918e-03, 4.49111619e-12]), array([5.98736011e-06, 1.47449296e-04, 5.78879696e-04, 1.25181503e-02, + 4.21811294e-02, 3.41561676e-01, 4.79397171e-01, 5.00000000e-01]), array([2.39821951e-06, nan, nan, nan, + nan, nan, nan, nan])]",47.95860719680786 +0,carbon,True,False,heuristic,opt,"[array([1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0]), array([1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0])]","{1: ([array([0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0])}), 2: ([array([0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0], dtype=int8)], {0: array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1])}), 3: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}","[False, False]","[array([1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1]), array([1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0])]","{1: ([array([1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0])}), 2: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)}), 3: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}","[{1: ([array([0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1], dtype=int8)], {0: array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1])})}, {1: ([array([1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1], dtype=int8)], {0: array([0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]), 1: array([1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])})}]","[array([1.64593715e-06, 4.06570222e-05, 1.60186959e-04, 3.53383074e-03, + 1.19757958e-02, 6.03643241e-02, 2.08688496e-02, 2.31493371e-14]), array([3.35672354e-06, 1.65009523e-05, 3.27243487e-05, 1.97588852e-04, + 5.20492603e-04, 3.29876761e-03, 1.77898858e-03, 3.85591492e-14]), array([6.13158724e-06, 1.50343592e-04, 5.87061165e-04, 1.21874064e-02, + 3.93198615e-02, 3.00611126e-01, 4.62622283e-01, 5.00000000e-01]), array([nan, nan, nan, nan, nan, nan, nan, nan])]",555.3856289386749 +0,carbon,True,False,optimal,opt,"[array([1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1], dtype=int8)]","{1: ([array([0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1], dtype=int8), array([1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0], dtype=int8), array([0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0], dtype=int8)], {0: array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0]), 2: array([1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 3: array([0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0]), 4: array([0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), 5: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]), 6: array([0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0]), 7: array([0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0])})}",[False],"[array([1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1], dtype=int8)]","{1: ([array([0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0])})}","[{1: ([array([0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0])})}]","[array([1.04687362e-06, 2.60734243e-05, 1.03772101e-04, 2.46547705e-03, + 9.05319426e-03, 7.57574133e-02, 5.38733056e-02, 3.28449955e-09]), array([1.63130347e-06, 8.27266395e-06, 1.77258932e-05, 1.87970731e-04, + 6.00620140e-04, 5.74748432e-03, 6.22670547e-03, 1.22685416e-09]), array([4.93566694e-06, 1.21720560e-04, 4.78697346e-04, 1.04864328e-02, + 3.58544661e-02, 3.18761546e-01, 4.73631937e-01, 5.00000003e-01]), array([1.29350754e-06, nan, nan, nan, + nan, nan, nan, nan])]",555.3860461711884 +0,carbon,True,False,global,opt,"[array([1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1], dtype=int8)]","{1: ([array([0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0], dtype=int8), array([0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1], dtype=int8), array([1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1], dtype=int8)], {0: array([0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 2: array([0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0]), 3: array([0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0]), 4: array([0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0]), 5: array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 6: array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]), 7: array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0])})}",[False],"[array([1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1], dtype=int8)]","{1: ([array([0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0])})}","[{1: ([array([1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]), 1: array([1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])})}]","[array([1.31784537e-06, 3.27589353e-05, 1.30070050e-04, 3.03509776e-03, + 1.09190677e-02, 8.07356361e-02, 5.07922722e-02, 5.63853194e-10]), array([1.63892470e-06, 8.39233219e-06, 1.83991579e-05, 2.10289691e-04, + 6.52454581e-04, 5.04650059e-03, 4.81305631e-03, 1.61565817e-10]), array([5.51009614e-06, 1.35771955e-04, 5.33406769e-04, 1.15975904e-02, + 3.93310252e-02, 3.31987137e-01, 4.79351695e-01, 5.00000000e-01]), array([1.27031377e-06, nan, nan, nan, + nan, nan, nan, nan])]",555.386369228363 +0,hamming,True,False,heuristic,heuristic,"[array([0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0]), array([1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0])]","{1: ([array([0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0], dtype=int8), array([0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0], dtype=int8), array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]), 2: array([0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0]), 3: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]), 4: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]), 5: array([0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]), 6: array([0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]), 7: array([0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0])}), 2: ([array([0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), array([0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0], dtype=int8)], {0: array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0]), 2: array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1]), 3: array([0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1])}), 3: ([array([0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0], dtype=int8), array([0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]), 2: array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 3: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0])})}","[False, {1: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}]",[],{},[],"[array([6.61610700e-07, 1.63677577e-05, 6.46182445e-05, 1.45424399e-03, + 5.09674806e-03, 4.14179422e-02, 3.12386689e-02, 5.01208178e-11]), array([4.57740380e-07, 2.26259419e-06, 4.52196025e-06, 2.04962682e-05, + nan, nan, 1.64453791e-03, 2.09023972e-11]), array([6.86322583e-07, 1.69886848e-05, 6.71224224e-05, 1.52506875e-03, + 5.45096858e-03, 6.56920934e-02, 1.21850263e-01, 1.42857143e-01]), array([3.64398444e-07, nan, nan, nan, + nan, nan, nan, nan])]",2124.010397911072 +0,hamming,True,False,optimal,heuristic,"[array([0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0], dtype=int8), array([0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], dtype=int8)]","{1: ([array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1], dtype=int8), array([0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0], dtype=int8)], {0: array([0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]), 2: array([0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1]), 3: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])}), 2: ([array([0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0], dtype=int8), array([0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0]), 2: array([0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]), 3: array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])}), 3: ([array([0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), array([1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0]), 1: array([1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0]), 2: array([0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0]), 3: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}","[False, False]",[],{},[],"[array([4.39790649e-07, 1.09076689e-05, 4.31986042e-05, 9.96865036e-04, + 3.60327578e-03, 3.75695807e-02, 4.15513540e-02, 2.58997734e-08]), array([3.45720831e-07, 1.72511896e-06, 3.52049619e-06, 2.57187544e-05, + 5.78148664e-05, nan, 2.11622881e-03, 1.24339239e-08]), array([4.63585353e-07, 1.15010221e-05, 4.55664276e-05, 1.05673846e-03, + 3.86082054e-03, 5.15881839e-02, 1.06749703e-01, 1.42857152e-01]), array([3.43602263e-07, 1.17578734e-06, nan, nan, + nan, nan, nan, nan])]",2124.011169910431 +0,hamming,True,False,global,heuristic,"[array([0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0], dtype=int8), array([0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], dtype=int8)]","{1: ([array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1], dtype=int8), array([0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]), 2: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]), 3: array([1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0])}), 2: ([array([0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0], dtype=int8), array([0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0]), 2: array([0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]), 3: array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0])}), 3: ([array([0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1], dtype=int8), array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1], dtype=int8)], {0: array([0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]), 1: array([0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0]), 2: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0]), 3: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}","[False, False]",[],{},[],"[array([4.08140916e-07, 1.01474289e-05, 4.03069207e-05, 9.49286812e-04, + 3.49517128e-03, 3.68341936e-02, 3.84455680e-02, 3.79363443e-08]), array([3.56055005e-07, 1.79165684e-06, 3.73851741e-06, 3.23392713e-05, + 8.50434877e-05, nan, 1.69862502e-03, 1.96108766e-08]), array([4.30598864e-07, 1.07163307e-05, 4.26225612e-05, 1.01749854e-03, + 3.83531588e-03, 5.68882687e-02, 1.14408531e-01, 1.42857159e-01]), array([3.60657754e-07, 1.34116295e-06, 1.12376783e-06, nan, + nan, nan, nan, nan])]",2124.0122339725494 +0,hamming,True,False,heuristic,opt,"[array([1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0]), array([1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])]","{1: ([array([0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), array([0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 2: array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]), 3: array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0])}), 2: ([array([1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]), 1: array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]), 2: array([0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 3: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)}), 3: ([array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1], dtype=int8), array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1], dtype=int8)], {0: array([1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1]), 2: array([0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]), 3: array([1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1])})}","[False, False]",[],{},[],"[array([3.89670218e-07, 9.68395460e-06, 3.84449328e-05, 9.01552866e-04, + 3.30243440e-03, 3.41879695e-02, 3.91383787e-02, 4.56872399e-07]), array([3.79809173e-07, 1.89915633e-06, 3.89559514e-06, 2.80438219e-05, + 4.15983259e-05, nan, 3.43455532e-03, 1.41502062e-07]), array([4.16440988e-07, 1.03534528e-05, 4.11274872e-05, 9.72473296e-04, + 3.62695892e-03, 5.20903243e-02, 1.08624845e-01, 1.42857368e-01]), array([3.79784622e-07, 1.89609802e-06, 3.87146621e-06, 2.45595296e-05, + nan, nan, nan, nan])]",530.8170511722565 +0,hamming,True,False,optimal,opt,"[array([1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), array([0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1], dtype=int8)]","{1: ([array([0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]), 2: array([0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 3: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)}), 2: ([array([0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0], dtype=int8), array([0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]), 2: array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]), 3: array([0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0])}), 3: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}","[False, False]",[],{},[],"[array([3.82058902e-07, 9.47484754e-06, 3.75180197e-05, 8.63549172e-04, + 3.10270977e-03, 2.93231865e-02, 2.91845677e-02, 5.24203388e-08]), array([3.46171966e-07, 1.69557281e-06, 3.26601787e-06, nan, + nan, 1.97866574e-04, 3.54036422e-03, 3.27999985e-08]), array([4.06297624e-07, 1.00869611e-05, 3.99978408e-05, 9.32368954e-04, + 3.41606632e-03, 4.39487377e-02, 9.07926825e-02, 1.42857058e-01]), array([3.43880024e-07, 1.09506070e-06, nan, nan, + nan, nan, nan, nan])]",530.8174641132355 +0,hamming,True,False,global,opt,"[array([0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1], dtype=int8), array([1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)]","{1: ([array([0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0], dtype=int8), array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]), 2: array([0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]), 3: array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0])}), 2: ([array([0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1], dtype=int8), array([0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 2: array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]), 3: array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1])}), 3: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}","[False, False]",[],{},[],"[array([3.85661454e-07, 9.56650158e-06, 3.78931154e-05, 8.75045323e-04, + 3.16180927e-03, 3.23234022e-02, 3.62270681e-02, 1.15189588e-07]), array([3.37216769e-07, 1.66860273e-06, 3.31508551e-06, 1.16360831e-05, + nan, nan, 4.24449702e-03, 5.48335538e-08]), array([4.09354455e-07, 1.01610269e-05, 4.02840170e-05, 9.38948422e-04, + 3.44990160e-03, 4.71895169e-02, 9.93231577e-02, 1.42857127e-01]), array([3.40192687e-07, 1.27968694e-06, 8.55345228e-07, nan, + nan, nan, nan, nan])]",530.8177988529205 +0,hypercube,True,False,heuristic,heuristic,"[array([1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1]), array([0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0])]","{1: ([array([0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1], dtype=int8), array([0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0]), 2: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0]), 3: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0])}), 2: ([array([0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0], dtype=int8), array([1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]), 1: array([1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 2: array([0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 3: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0])}), 3: ([array([0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0], dtype=int8), array([0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 2: array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 3: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0])})}","[False, False]","[array([1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1]), array([1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0])]","{1: ([array([0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])}), 2: ([array([0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1], dtype=int8)], {0: array([0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0])}), 3: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}","[{1: ([array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1], dtype=int8), array([0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0], dtype=int8)], {0: array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 2: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1]), 3: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1])})}, {1: ([array([1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0], dtype=int8), array([0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1], dtype=int8)], {0: array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 2: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0]), 3: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0])})}]","[array([2.85919396e-05, 1.69713032e-04, 4.04226449e-04, 4.20543584e-03, + 1.19767064e-02, 3.28072758e-02, 4.56281454e-03, 5.31069402e-19]), array([3.73564486e-06, 1.80260936e-05, 3.44302067e-05, 1.01189510e-04, + nan, 3.68242915e-04, 2.13689567e-04, 2.32375218e-19]), array([3.14858259e-05, 2.39850036e-04, 6.74203196e-04, 9.24879905e-03, + 2.66129851e-02, 1.35213381e-01, 1.63994924e-01, 1.66666667e-01]), array([nan, nan, nan, nan, nan, nan, nan, nan])]",1630.665078163147 +0,hypercube,True,False,optimal,heuristic,"[array([0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1], dtype=int8), array([0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0], dtype=int8)]","{1: ([array([1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0], dtype=int8), array([0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 2: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0]), 3: array([0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])}), 2: ([array([0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), array([0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]), 2: array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 3: array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0])}), 3: ([array([0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0], dtype=int8), array([1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0]), 1: array([0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]), 2: array([0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0]), 3: array([0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0])})}","[False, False]","[array([0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1], dtype=int8)]","{1: ([array([1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])})}","[{1: ([array([0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0], dtype=int8), array([0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1]), 2: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1]), 3: array([0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])})}]","[array([1.07315329e-06, 2.64951000e-05, 1.04315301e-04, 2.28184398e-03, + 7.61387066e-03, 3.28911493e-02, 1.01644350e-02, 1.35598497e-13]), array([8.48950677e-07, 4.21527082e-06, 8.60657466e-06, 6.01070580e-05, + 1.13840299e-04, 6.06351583e-04, 9.90029513e-04, 1.07322563e-13]), array([3.60789584e-06, 8.84674239e-05, 3.45462270e-04, 7.16870597e-03, + 2.30261669e-02, 1.40624968e-01, 1.67231452e-01, 1.66666667e-01]), array([5.69869772e-07, nan, nan, nan, + nan, nan, nan, nan])]",1630.665530204773 +0,hypercube,True,False,global,heuristic,"[array([0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0], dtype=int8), array([0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0], dtype=int8)]","{1: ([array([1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0], dtype=int8), array([1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]), 2: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]), 3: array([0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])}), 2: ([array([0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0], dtype=int8), array([0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]), 2: array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 3: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0])}), 3: ([array([0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1], dtype=int8), array([0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0]), 2: array([0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0]), 3: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0])})}","[False, False]","[array([0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1], dtype=int8)]","{1: ([array([1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])})}","[{1: ([array([0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0], dtype=int8), array([0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]), 1: array([0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 2: array([0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1]), 3: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1])})}]","[array([1.08712327e-06, 2.68813591e-05, 1.06038652e-04, 2.35391535e-03, + 7.98569698e-03, 3.65162076e-02, 1.09604338e-02, 2.29595809e-14]), array([8.17450206e-07, 4.06805669e-06, 8.35579479e-06, 6.20849820e-05, + 1.38488053e-04, 5.95254275e-04, 4.94857035e-04, 6.44441689e-15]), array([3.64123520e-06, 8.92945920e-05, 3.48733922e-04, 7.23991624e-03, + 2.32524383e-02, 1.42176090e-01, 1.68070862e-01, 1.66666667e-01]), array([4.61409234e-07, nan, nan, nan, + nan, nan, nan, nan])]",1630.665892124176 +0,steane,True,False,heuristic,heuristic,"[array([0, 0, 1, 0, 1, 1, 0])]","{1: ([array([0, 1, 0, 0, 1, 0, 1], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([0, 0, 0, 0, 1, 0, 0])})}",[False],[],{},[],"[array([2.77938646e-07, 6.90938877e-06, 2.74433852e-05, 6.48440939e-04, + 2.41694628e-03, 3.42535000e-02, 6.68775329e-02, 1.65877203e-03]), array([1.36972233e-06, 6.92993316e-06, 1.44985057e-05, 1.40052013e-04, + 4.78510582e-04, 6.97986897e-03, 1.70130938e-02, 1.23475067e-03]), array([3.66179710e-07, 9.14105437e-06, 3.64974634e-05, 8.99498578e-04, + 3.53697805e-03, 7.82010413e-02, 2.65502451e-01, 9.99248278e-01]), array([1.36971865e-06, 6.92950332e-06, 1.44954584e-05, 1.39977677e-04, + 4.78813636e-04, 6.99989706e-03, 1.61435468e-02, 7.92671178e-04])]",25.7897047996521 +0,steane,True,False,optimal,heuristic,"[array([0, 0, 1, 0, 1, 1, 0], dtype=int8)]","{1: ([array([0, 1, 0, 0, 1, 0, 1], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([0, 0, 0, 0, 1, 0, 0])})}",[False],[],{},[],"[array([1.95505838e-07, 4.89140251e-06, 1.95830745e-05, 4.91808989e-04, + 1.96685266e-03, 4.18580769e-02, 1.09005505e-01, 2.81306936e-03]), array([1.44025633e-06, 7.24511602e-06, 1.49187530e-05, 1.27455920e-04, + 4.25043335e-04, 7.18634897e-03, 1.99737977e-02, 1.24622398e-03]), array([2.80419644e-07, 7.01406219e-06, 2.80736294e-05, 7.04850483e-04, + 2.82994862e-03, 6.91522231e-02, 2.44986402e-01, 9.97442310e-01]), array([1.44025238e-06, 7.24464531e-06, 1.49152809e-05, 1.27284958e-04, + 4.24538441e-04, 7.31696587e-03, 2.16918760e-02, 1.55087645e-03])]",25.79061198234558 +0,steane,True,False,global,heuristic,"[array([0, 0, 1, 0, 1, 1, 0], dtype=int8)]","{1: ([array([0, 1, 0, 0, 1, 0, 1], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([0, 0, 0, 0, 1, 0, 0])})}",[False],[],{},[],"[array([2.00314057e-07, 4.99521992e-06, 1.99176203e-05, 4.85198918e-04, + 1.87641364e-03, 3.42301693e-02, 8.45746886e-02, 3.70542490e-03]), array([1.51346868e-06, 7.58991274e-06, 1.54916535e-05, 1.21426622e-04, + 3.95786659e-04, 7.77755583e-03, 2.61675497e-02, 2.52840099e-03]), array([2.83238533e-07, 7.08385446e-06, 2.83494324e-05, 7.11105173e-04, + 2.85207690e-03, 6.93635899e-02, 2.45418358e-01, 9.97938750e-01]), array([1.51346383e-06, 7.58931449e-06, 1.54870451e-05, 1.21167382e-04, + 3.95610405e-04, 7.89789858e-03, 2.55917051e-02, 2.05536265e-03])]",25.791008949279785 +0,steane,True,False,heuristic,opt,"[array([1, 1, 0, 0, 1, 1, 0])]","{1: ([array([0, 0, 1, 1, 0, 0, 1], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([0, 0, 0, 1, 0, 0, 0])})}",[False],[],{},[],"[array([2.00345625e-07, 4.99518423e-06, 1.99133305e-05, 4.84242868e-04, + 1.86820793e-03, 3.32100143e-02, 7.85664019e-02, 1.90430900e-03]), array([1.44475137e-06, 7.28959016e-06, 1.51468342e-05, 1.39638471e-04, + 4.73482667e-04, 7.57008543e-03, 2.02662984e-02, 9.01433905e-04]), array([2.93816176e-07, 7.35312624e-06, 2.94506597e-05, 7.43437951e-04, + 3.00493820e-03, 7.67265615e-02, 2.78281677e-01, 1.00000411e+00]), array([1.44474997e-06, 7.28940166e-06, 1.51452648e-05, 1.39533983e-04, + 4.73502234e-04, 7.63904605e-03, 1.93382264e-02, 5.74671325e-04])]",26.64948081970215 +0,steane,True,False,optimal,opt,"[array([1, 0, 0, 0, 0, 1, 1], dtype=int8)]","{1: ([array([0, 0, 1, 1, 0, 0, 1], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([0, 0, 0, 0, 0, 0, 1])})}",[False],[],{},[],"[array([2.13384519e-07, 5.30981260e-06, 2.11157520e-05, 5.03694319e-04, + 1.89871307e-03, 2.87743254e-02, 5.79085753e-02, 4.26985375e-04]), array([1.59451713e-06, 8.00013992e-06, 1.63510416e-05, 1.29826241e-04, + 4.21817958e-04, 6.64970735e-03, 1.70397048e-02, 7.43548424e-04]), array([3.06103483e-07, 7.64421493e-06, 3.05352998e-05, 7.55351036e-04, + 2.98368393e-03, 6.81251548e-02, 2.38585318e-01, 9.97307068e-01]), array([1.59451412e-06, 7.99975989e-06, 1.63480396e-05, 1.29648060e-04, + 4.22022540e-04, 7.18915231e-03, 2.04955135e-02, 1.03985581e-03])]",26.649830102920532 +0,steane,True,False,global,opt,"[array([0, 0, 1, 1, 0, 0, 1], dtype=int8)]","{1: ([array([1, 0, 0, 0, 0, 1, 1], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([0, 0, 0, 0, 0, 0, 1])})}",[False],[],{},[],"[array([2.80958369e-07, 7.00214948e-06, 2.78994326e-05, 6.75559861e-04, + 2.59211151e-03, 4.38792834e-02, 9.64144222e-02, 7.59814330e-04]), array([1.50928159e-06, 7.61325927e-06, 1.57987420e-05, 1.44176479e-04, + 4.89507288e-04, 7.93974636e-03, 2.00610072e-02, 5.56328433e-04]), array([3.77337148e-07, 9.42560240e-06, 3.76631250e-05, 9.33568826e-04, + 3.69272334e-03, 8.26943669e-02, 2.75002615e-01, 9.97774942e-01]), array([1.50927526e-06, 7.61248704e-06, 1.57928579e-05, 1.43722384e-04, + 4.86308286e-04, 7.43015274e-03, 1.78647100e-02, 6.01239345e-04])]",26.650152921676636 +0,surface_3,False,False,heuristic,heuristic,"[array([0, 0, 0, 0, 1, 1, 1, 0, 0])]","{1: ([array([0, 0, 1, 0, 1, 0, 1, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 1, 0, 0, 0]), 1: array([0, 0, 0, 0, 1, 0, 0, 0, 1])})}","[{1: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 1, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}]",[],{},[],"[array([5.49164266e-07, 1.36703726e-05, 5.43867040e-05, 1.29979469e-03, + 4.89417521e-03, 6.66739011e-02, 1.02107079e-01, 2.31600254e-05]), array([1.75116823e-06, 8.89591495e-06, 1.88929204e-05, 1.99195743e-04, + 6.87719769e-04, 1.15464983e-02, 2.40444157e-02, 2.51299442e-05]), array([6.56117570e-07, 1.63605339e-05, 6.52322315e-05, 1.59080549e-03, + 6.18050352e-03, 1.26786632e-01, 3.91947577e-01, 9.99903306e-01]), array([1.81921695e-06, 7.00818979e-06, 7.54609327e-06, nan, + 3.67580197e-04, 1.06895468e-02, 2.37818156e-02, nan])]",36.99601721763611 +0,surface_3,False,False,optimal,heuristic,"[array([0, 0, 0, 1, 1, 1, 0, 0, 0], dtype=int8)]","{1: ([array([0, 0, 1, 1, 1, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 1, 0, 0, 0]), 1: array([0, 0, 0, 1, 0, 0, 1, 0, 0])})}","[{1: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}]",[],{},[],"[array([6.17090460e-07, 1.52991977e-05, 6.05624565e-05, 1.39297342e-03, + 5.02046751e-03, 5.42467451e-02, 7.35921087e-02, 7.12092671e-06]), array([1.80568512e-06, 9.13247036e-06, 1.91728257e-05, 1.88937825e-04, + 6.39633667e-04, 9.86191013e-03, 2.01931676e-02, 1.54153222e-05]), array([7.29272166e-07, 1.81076210e-05, 7.18192706e-05, 1.68241615e-03, + 6.24663718e-03, 1.07503937e-01, 3.41850855e-01, 9.99892434e-01]), array([1.86910946e-06, 6.71773616e-06, nan, nan, + 1.79669058e-04, 7.67265700e-03, 8.18186107e-03, nan])]",36.99643611907959 +0,surface_3,False,False,global,heuristic,"[array([0, 0, 0, 1, 1, 1, 0, 0, 0], dtype=int8)]","{1: ([array([0, 0, 1, 1, 1, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 1, 0, 0, 0]), 1: array([0, 0, 0, 1, 0, 0, 1, 0, 0])})}","[{1: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}]",[],{},[],"[array([4.78619701e-07, 1.19288108e-05, 4.75299745e-05, 1.14952586e-03, + 4.39117073e-03, 6.64921848e-02, 1.15607689e-01, 6.00224093e-05]), array([1.78096371e-06, 8.99259699e-06, 1.87953445e-05, 1.79100471e-04, + 5.90875900e-04, 6.88875727e-03, 1.33199770e-02, 2.28051106e-05]), array([6.10190153e-07, 1.52590672e-05, 6.10554874e-05, 1.52798019e-03, + 6.09917544e-03, 1.36464466e-01, 4.17230536e-01, 9.99922701e-01]), array([1.83481516e-06, 6.80348037e-06, 4.46572069e-06, nan, + 2.55314402e-05, 2.91249783e-03, nan, nan])]",36.99676704406738 +0,surface_3,False,False,heuristic,opt,"[array([1, 1, 0, 1, 1, 0, 0, 0, 0])]","{1: ([array([0, 0, 0, 1, 1, 1, 0, 0, 0], dtype=int8)], {0: array([1, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 1, 0, 0, 0, 1, 0])})}","[{1: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}]",[],{},[],"[array([4.17046736e-07, 1.03410959e-05, 4.09445721e-05, 9.44876225e-04, + 3.43229695e-03, 4.36463737e-02, 7.74998599e-02, 1.10890181e-05]), array([1.79206346e-06, 9.03980879e-06, 1.88562105e-05, 1.77860122e-04, + 5.88446320e-04, 8.13673054e-03, 1.91509192e-02, 1.07109672e-05]), array([5.19616005e-07, 1.29852011e-05, 5.19148997e-05, 1.29271257e-03, + 5.14408002e-03, 1.19212133e-01, 3.88801897e-01, 9.99929825e-01]), array([1.85890443e-06, 7.07727939e-06, 6.52258619e-06, nan, + nan, nan, nan, nan])]",37.29507803916931 +0,surface_3,False,False,optimal,opt,"[array([0, 0, 1, 1, 1, 0, 0, 0, 0], dtype=int8)]","{1: ([array([0, 0, 0, 1, 1, 1, 0, 0, 0], dtype=int8)], {0: array([0, 0, 1, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 1, 0, 0, 0, 1, 0])})}","[{1: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 1, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}]",[],{},[],"[array([2.63174563e-07, 6.56857442e-06, 2.62177779e-05, 6.41785363e-04, + 2.47913615e-03, 3.75917213e-02, 5.92809625e-02, 3.21170652e-06]), array([1.91250058e-06, 9.59585930e-06, 1.97101431e-05, 1.65510200e-04, + 5.38741287e-04, 8.06317273e-03, 1.63389659e-02, 1.57610448e-05]), array([3.76348195e-07, 9.40576246e-06, 3.76097634e-05, 9.38849269e-04, + 3.75818349e-03, 9.52562179e-02, 3.42344153e-01, 9.99878793e-01]), array([2.01534066e-06, 9.13565539e-06, 1.60421888e-05, 4.77629321e-05, + 2.43369681e-04, 2.81520382e-03, nan, nan])]",37.29552912712097 +0,surface_3,False,False,global,opt,"[array([0, 0, 1, 1, 1, 0, 0, 0, 0], dtype=int8)]","{1: ([array([0, 0, 0, 1, 1, 1, 0, 0, 0], dtype=int8)], {0: array([0, 0, 1, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 1, 0, 0, 0, 1, 0])})}","[{1: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 1, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}]",[],{},[],"[array([3.97748530e-07, 9.89957874e-06, 3.93772706e-05, 9.39960291e-04, + 3.53676569e-03, 4.89413291e-02, 7.89720984e-02, 4.00347966e-05]), array([1.76497802e-06, 8.93468260e-06, 1.88018641e-05, 1.88785159e-04, + 6.54334545e-04, 1.28040896e-02, 2.93415769e-02, 3.92106759e-05]), array([5.36722151e-07, 1.33866631e-05, 5.33920408e-05, 1.30604682e-03, + 5.09901854e-03, 1.10713419e-01, 3.63944794e-01, 9.99896896e-01]), array([1.86315493e-06, 7.69045905e-06, 1.10088746e-05, nan, + 2.29403416e-04, nan, nan, nan])]",37.297500133514404 +0,surface_3,True,False,heuristic,heuristic,"[array([1, 0, 1, 0, 1, 1, 0, 0, 0])]","{1: ([array([1, 0, 0, 0, 1, 0, 0, 1, 0], dtype=int8)], {0: array([0, 0, 1, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 1, 1, 0, 0, 0, 0])})}",[False],[],{},[],"[array([3.51976982e-07, 8.76566840e-06, 3.48942411e-05, 8.39029250e-04, + 3.19328382e-03, 5.16778337e-02, 1.11119373e-01, 1.39433989e-03]), array([1.50541521e-06, 7.58953847e-06, 1.57446229e-05, 1.43645901e-04, + 4.88584759e-04, 9.43840552e-03, 2.93881159e-02, 9.11381273e-04]), array([4.62770692e-07, 1.15443133e-05, 4.60529587e-05, 1.12692894e-03, + 4.39016255e-03, 8.97417022e-02, 2.81954955e-01, 9.98435184e-01]), array([1.50542292e-06, 7.59043478e-06, 1.57510374e-05, 1.43981943e-04, + 4.91059333e-04, 1.00281278e-02, 3.18012932e-02, 9.18644724e-04])]",34.378907918930054 +0,surface_3,True,False,optimal,heuristic,"[array([0, 1, 0, 0, 1, 0, 0, 0, 1], dtype=int8)]","{1: ([array([0, 1, 0, 0, 1, 0, 0, 1, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 1]), 1: array([0, 0, 0, 0, 1, 0, 1, 0, 0])})}","[{1: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 1]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}]",[],{},[],"[array([2.42859676e-07, 6.03258515e-06, 2.39370445e-05, 5.60981627e-04, + 2.06841520e-03, 2.62617628e-02, 4.23420442e-02, 4.04880786e-05]), array([1.80598966e-06, 9.04909904e-06, 1.84982173e-05, 1.48271145e-04, + 4.75064825e-04, 6.87086877e-03, 1.56935270e-02, 4.55130899e-05]), array([3.55075001e-07, 8.86970879e-06, 3.54445596e-05, 8.80672473e-04, + 3.50709421e-03, 8.76951168e-02, 3.21467689e-01, 9.99876861e-01]), array([1.90243244e-06, 8.06645380e-06, 1.21449458e-05, nan, + 9.36193183e-05, 5.09787470e-03, nan, nan])]",34.37936305999756 +0,surface_3,True,False,global,heuristic,"[array([0, 1, 0, 0, 1, 0, 0, 0, 1], dtype=int8)]","{1: ([array([0, 1, 0, 0, 1, 0, 0, 1, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 1]), 1: array([0, 0, 0, 0, 1, 0, 1, 0, 0])})}","[{1: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 1]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}]",[],{},[],"[array([2.31513120e-07, 5.74206083e-06, 2.27413084e-05, 5.24994469e-04, + 1.89979976e-03, 2.08051552e-02, 2.78624737e-02, 3.26115135e-06]), array([1.72133152e-06, 8.62154334e-06, 1.76039821e-05, 1.39311354e-04, + 4.43727164e-04, 6.46702018e-03, 1.50069599e-02, 3.83013070e-05]), array([3.49923405e-07, 8.72069188e-06, 3.47490082e-05, 8.44971197e-04, + 3.28733531e-03, 7.64874945e-02, 2.87957446e-01, 9.99777059e-01]), array([1.83209366e-06, 8.11583310e-06, 1.36372157e-05, nan, + 2.06182864e-04, 5.14263453e-03, 1.15524221e-02, nan])]",34.37979006767273 +0,surface_3,True,False,heuristic,opt,"[array([0, 0, 0, 1, 1, 0, 1, 0, 1])]","{1: ([array([1, 0, 0, 0, 1, 0, 0, 0, 1], dtype=int8)], {0: array([0, 0, 0, 1, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 1, 1, 0, 0, 0])})}","[{1: ([array([0, 0, 0, 1, 0, 0, 1, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([0, 0, 0, 0, 0, 0, 1, 0, 0])})}]",[],{},[],"[array([3.01717950e-07, 7.47296824e-06, 2.95454820e-05, 6.72749769e-04, + 2.39324829e-03, 2.29694746e-02, 2.63911420e-02, 1.72404795e-06]), array([1.71869451e-06, 8.68084107e-06, 1.81594278e-05, 1.74727666e-04, + 5.82339761e-04, 7.30632851e-03, 1.30918239e-02, 3.36387877e-06]), array([4.17646028e-07, 1.04400175e-05, 4.17557361e-05, 1.04418698e-03, + 4.18681954e-03, 1.05987357e-01, 3.74143742e-01, 9.99964233e-01]), array([1.81633364e-06, 8.15825414e-06, 1.44553143e-05, 1.07002698e-04, + 4.35818789e-04, 5.92686902e-03, nan, nan])]",36.35913586616516 +0,surface_3,True,False,optimal,opt,"[array([0, 1, 0, 0, 1, 0, 0, 1, 0], dtype=int8)]","{1: ([array([1, 0, 0, 0, 1, 0, 0, 1, 0], dtype=int8)], {0: array([0, 1, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 1, 1])})}","[{1: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 1]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}]",[],{},[],"[array([2.81251129e-07, 6.99721920e-06, 2.78189000e-05, 6.61825249e-04, + 2.48306263e-03, 3.46921927e-02, 5.85179195e-02, 1.93502386e-05]), array([1.72957250e-06, 8.67416307e-06, 1.77786038e-05, 1.47521397e-04, + 4.95314396e-04, 1.04792618e-02, 2.51474349e-02, 2.26659431e-05]), array([3.98752883e-07, 9.95616666e-06, 3.97627033e-05, 9.82879538e-04, + 3.88567949e-03, 9.14362171e-02, 3.21787091e-01, 9.99833085e-01]), array([1.84698124e-06, 8.03849989e-06, 1.29737090e-05, nan, + 1.76666569e-04, 4.36002273e-03, nan, nan])]",36.36020588874817 +0,surface_3,True,False,global,opt,"[array([0, 1, 0, 0, 1, 0, 0, 1, 0], dtype=int8)]","{1: ([array([1, 0, 0, 0, 1, 0, 0, 1, 0], dtype=int8)], {0: array([0, 1, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 1, 1])})}","[{1: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 1]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}]",[],{},[],"[array([2.85196754e-07, 7.06698443e-06, 2.79562623e-05, 6.39470638e-04, + 2.28789223e-03, 2.29996666e-02, 2.80452209e-02, 3.16954183e-06]), array([1.69151504e-06, 8.51014011e-06, 1.75979826e-05, 1.57052990e-04, + 5.30650731e-04, 1.05594596e-02, 2.76577001e-02, 7.79293073e-05]), array([3.97584786e-07, 9.91251755e-06, 3.95171452e-05, 9.63761966e-04, + 3.75539334e-03, 8.44249627e-02, 3.01490578e-01, 9.99761293e-01]), array([1.79814603e-06, 7.90723481e-06, 1.31398224e-05, 1.99433740e-05, + 2.60649824e-04, 7.43640024e-03, 1.17801656e-02, nan])]",36.36116290092468 +0,tetrahedral,False,False,heuristic,heuristic,"[array([0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0])]","{1: ([array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0])})}","[{1: ([array([0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0], dtype=int8), array([0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 2: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0]), 3: array([0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0])})}]",[],{},[],"[array([2.71205836e-06, 6.72874264e-05, 2.66562370e-04, 6.13507131e-03, + 2.18701067e-02, 1.64243895e-01, 1.01666193e-01, 4.63289534e-10]), array([2.23599489e-06, 1.16686198e-05, 2.65930338e-05, 3.41838783e-04, + 1.10682324e-03, 1.48537609e-02, 2.66906541e-02, 3.02532192e-08]), array([2.89535332e-06, 7.18766063e-05, 2.84971001e-04, 6.62149887e-03, + 2.40692677e-02, 2.86066304e-01, 6.01717437e-01, 9.99999927e-01]), array([2.00166339e-06, nan, nan, nan, + nan, 4.24813763e-03, nan, nan])]",6171.229279994965 +0,tetrahedral,False,False,optimal,heuristic,"[array([0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0], dtype=int8)]","{1: ([array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0])})}","[{1: ([array([0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0], dtype=int8), array([0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 2: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0]), 3: array([0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0])})}]",[],{},[],"[array([2.84573986e-06, 7.03733755e-05, 2.77692579e-04, 6.22932890e-03, + 2.17793009e-02, 1.84011156e-01, 1.57548021e-01, 7.59754211e-10]), array([2.17272915e-06, 1.15240765e-05, 2.71187095e-05, 3.77776717e-04, + 1.23344969e-03, 1.40689184e-02, 1.73456558e-02, 1.78922457e-10]), array([3.02683318e-06, 7.49528617e-05, 2.96279654e-04, 6.75575019e-03, + 2.42619939e-02, 3.27536784e-01, 7.40005278e-01, 9.99999999e-01]), array([1.89325025e-06, nan, nan, nan, + 3.29892379e-04, nan, nan, nan])]",6171.2296550273895 +0,tetrahedral,False,False,global,heuristic,"[array([0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0], dtype=int8)]","{1: ([array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0])})}","[{1: ([array([0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0], dtype=int8), array([0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0], dtype=int8)], {0: array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0]), 2: array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 3: array([1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0])})}]",[],{},[],"[array([2.97501831e-06, 7.38451425e-05, 2.92702590e-04, 6.76243010e-03, + 2.41893789e-02, 1.80337318e-01, 1.05641398e-01, 5.78592997e-10]), array([2.26916034e-06, 1.19916558e-05, 2.80120840e-05, 3.80751787e-04, + 1.22388837e-03, 1.04734571e-02, 1.01676402e-02, 1.92769823e-10]), array([3.16002318e-06, 7.84863962e-05, 3.11407902e-04, 7.30795388e-03, + 2.71006866e-02, 3.87945509e-01, 7.89330163e-01, 1.00000000e+00]), array([1.98403199e-06, nan, nan, nan, + nan, nan, nan, nan])]",6171.22997713089 +0,tetrahedral,True,False,heuristic,heuristic,"[array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0])]","{1: ([array([1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], dtype=int8), array([0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0]), 2: array([1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0]), 3: array([0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0])})}","[{1: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}]",[],{},[],"[array([4.62931423e-07, 1.15112299e-05, 4.57418548e-05, 1.08899956e-03, + 4.12567246e-03, 6.32103841e-02, 8.98840419e-02, 5.25938964e-08]), array([2.01309596e-06, 1.01293031e-05, 2.11484562e-05, 2.02864587e-04, + 6.87778862e-04, 1.20344324e-02, 2.15659208e-02, 4.97569145e-07]), array([6.62396772e-07, 1.65033063e-05, 6.57488522e-05, 1.60711090e-03, + 6.36754142e-03, 1.66440831e-01, 5.28489014e-01, 9.99998814e-01]), array([2.03569050e-06, 6.06144539e-06, nan, nan, + nan, nan, nan, nan])]",421.2212119102478 +0,tetrahedral,True,False,optimal,heuristic,"[array([0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0], dtype=int8)]","{1: ([array([1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], dtype=int8), array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0]), 2: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0]), 3: array([0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0])})}","[{1: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}]",[],{},[],"[array([3.39592312e-07, 8.52337313e-06, 3.42490776e-05, 8.76063903e-04, + 3.50780341e-03, 5.05063521e-02, 5.46828691e-02, 3.96523886e-09]), array([2.09107766e-06, 1.04808720e-05, 2.16553063e-05, 1.95023313e-04, + 6.60468359e-04, 1.05302347e-02, 1.46278487e-02, 1.98779082e-08]), array([5.58894721e-07, 1.39932493e-05, 5.60828479e-05, 1.42850075e-03, + 5.87427773e-03, 1.65934061e-01, 5.41374528e-01, 9.99999844e-01]), array([2.17383809e-06, 8.66466822e-06, 1.09480688e-05, nan, + 3.27690150e-04, 7.66904643e-03, nan, nan])]",421.2217071056366 +0,tetrahedral,True,False,global,heuristic,"[array([1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], dtype=int8)]","{1: ([array([0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0], dtype=int8), array([0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0]), 2: array([0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1]), 3: array([0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0])})}","[{1: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}]",[],{},[],"[array([7.74752926e-05, 3.91078695e-04, 7.91498703e-04, 4.33766401e-03, + 9.57731030e-03, 5.18182612e-02, 4.45837985e-02, 1.68337019e-08]), array([1.19561036e-05, 5.88626220e-05, 1.15628082e-04, 5.28502483e-04, + 1.06804493e-03, 1.13541599e-02, 1.61969947e-02, 8.86534770e-09]), array([7.76987391e-05, 3.96648087e-04, 8.13709633e-04, 4.89525015e-03, + 1.19471308e-02, 1.70958189e-01, 5.55265561e-01, 9.99999962e-01]), array([nan, nan, nan, nan, nan, nan, nan, nan])]",421.222069978714 +0,tetrahedral,True,False,heuristic,opt,"[array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0])]","{1: ([array([1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0], dtype=int8), array([1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1]), 2: array([1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1]), 3: array([0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0])})}","[{1: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}]",[],{},[],"[array([4.18102538e-07, 1.03309981e-05, 4.07235079e-05, 9.05051099e-04, + 3.12042343e-03, 2.25022754e-02, 1.67439248e-02, 1.46461844e-09]), array([2.03640255e-06, 1.02230213e-05, 2.12123361e-05, 1.94043485e-04, + 6.34706024e-04, 1.11035975e-02, 2.07250526e-02, 2.24172244e-08]), array([6.20787139e-07, 1.53790327e-05, 6.08325799e-05, 1.40263794e-03, + 5.18337654e-03, 1.21646822e-01, 4.75043781e-01, 9.99999860e-01]), array([2.06522333e-06, 7.09346061e-06, nan, nan, + 3.10094666e-05, nan, nan, nan])]",421.3850209712982 +0,tetrahedral,True,False,optimal,opt,"[array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0], dtype=int8)]","{1: ([array([1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0], dtype=int8), array([1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1]), 2: array([1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1]), 3: array([0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0])})}","[{1: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}]",[],{},[],"[array([4.51626894e-07, 1.12347536e-05, 4.46541899e-05, 1.05503252e-03, + 3.88451100e-03, 3.74369768e-02, 3.17404022e-02, 9.28498969e-09]), array([2.05538206e-06, 1.03241640e-05, 2.14562698e-05, 2.00464313e-04, + 6.80090276e-04, 1.11064989e-02, 1.64603737e-02, 1.39007381e-08]), array([6.51554999e-07, 1.62392813e-05, 6.47206514e-05, 1.58121659e-03, + 6.22771957e-03, 1.61517108e-01, 5.45678133e-01, 9.99999928e-01]), array([2.11888427e-06, 8.07623402e-06, 7.64895404e-06, nan, + 1.78469427e-04, 5.02708661e-03, nan, nan])]",421.3860580921173 +0,tetrahedral,True,False,global,opt,"[array([0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0], dtype=int8)]","{1: ([array([0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0], dtype=int8), array([1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1]), 2: array([1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0]), 3: array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0])})}","[{1: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}]",[],{},[],"[array([3.56413689e-07, 8.81210911e-06, 3.47652104e-05, 7.79797776e-04, + 2.73513330e-03, 2.50416322e-02, 2.45041670e-02, 1.12413322e-09]), array([2.08835363e-06, 1.04578988e-05, 2.15556120e-05, 1.88542221e-04, + 6.13118089e-04, 1.14871437e-02, 2.61850265e-02, 1.75618391e-07]), array([5.68886580e-07, 1.40952641e-05, 5.57734800e-05, 1.29690000e-03, + 4.89329163e-03, 1.25954707e-01, 4.65499121e-01, 9.99999592e-01]), array([2.11860451e-06, 6.93022772e-06, nan, nan, + nan, 5.75078675e-03, 1.32845238e-02, nan])]",421.3871719837189 +0,16_2_4,True,False,global,heuristic,"[array([1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1], dtype=int8), array([0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0], dtype=int8)]","{1: ([array([0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], dtype=int8), array([0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]), 2: array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]), 3: array([0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0])}), 2: ([array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1], dtype=int8), array([0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]), 2: array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]), 3: array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1])}), 3: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1], dtype=int8), 1: array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1], dtype=int8)})}","[False, False]","[array([0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0], dtype=int8), array([1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0], dtype=int8)]","{1: ([array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1], dtype=int8), array([0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 2: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 3: array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])}), 2: ([array([0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0])}), 3: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}","[{1: ([array([0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]), 1: array([0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])})}, {1: ([array([1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], dtype=int8), array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]), 1: array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1]), 2: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), 3: array([1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])})}]","[array([1.93952335e-06, 4.78816101e-05, 1.88497679e-04, 4.11700854e-03, + 1.36890016e-02, 5.56315718e-02, 1.51756148e-02, 4.67226514e-16]), array([3.51234526e-06, 1.71887626e-05, 3.39768575e-05, 1.97117291e-04, + 4.73012465e-04, 3.19592300e-03, 1.73359199e-03, 2.39986154e-15]), array([1.00852821e-05, 2.46087128e-04, 9.55186777e-04, 1.89694296e-02, + 5.83629858e-02, 3.57813807e-01, 4.82772150e-01, 5.00000000e-01]), array([nan, nan, nan, nan, nan, nan, nan, nan])]",486.9667320251465 +0,shor,True,False,heuristic,heuristic,"[array([0, 1, 0, 1, 0, 0, 0, 1, 0]), array([0, 0, 0, 1, 1, 0, 0, 0, 0])]","{1: ([array([1, 0, 0, 0, 0, 1, 1, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([0, 0, 0, 1, 0, 0, 1, 1, 0])}), 2: ([array([0, 0, 1, 1, 0, 0, 0, 1, 0], dtype=int8)], {0: array([0, 1, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 1, 1, 0])}), 3: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 1, 1, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}","[{1: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}, False]",[],{},[],"[array([4.75542821e-07, 1.18472155e-05, 4.71810434e-05, 1.13704554e-03, + 4.32888046e-03, 6.52742426e-02, 1.14590741e-01, 2.83822117e-05]), array([2.47997711e-06, 1.22943902e-05, 2.43796734e-05, 1.23489892e-04, + 3.23700769e-04, 1.12202104e-02, 2.74289064e-02, 1.48843887e-05]), array([5.85930704e-07, 1.46602916e-05, 5.86992140e-05, 1.47705712e-03, + 5.93658833e-03, 1.39004587e-01, 4.34961843e-01, 9.99964360e-01]), array([2.49050153e-06, 9.84780646e-06, 1.04183524e-05, nan, + nan, nan, nan, nan])]",58.70700216293335 +0,shor,True,False,optimal,heuristic,"[array([0, 0, 1, 0, 0, 1, 0, 1, 0], dtype=int8), array([0, 1, 1, 0, 0, 0, 0, 0, 0], dtype=int8)]","{1: ([array([1, 0, 0, 0, 0, 1, 0, 1, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([1, 0, 0, 0, 0, 0, 0, 0, 0])}), 2: ([array([1, 0, 0, 1, 0, 0, 0, 1, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 1, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 1, 1, 0])}), 3: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 1, 1, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}","[{1: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}, False]",[],{},[],"[array([4.12994257e-07, 1.03043299e-05, 4.11116126e-05, 1.00382949e-03, + 3.87186239e-03, 6.00690758e-02, 1.00900042e-01, 1.10143588e-05]), array([2.35128468e-06, 1.16623223e-05, 2.31594459e-05, 1.19542134e-04, + 3.10505704e-04, 1.07469857e-02, 2.56412185e-02, 8.97886713e-06]), array([5.13382843e-07, 1.28461689e-05, 5.14419178e-05, 1.29668327e-03, + 5.23070971e-03, 1.28528074e-01, 4.21465399e-01, 9.99972299e-01]), array([2.46715476e-06, 1.18456261e-05, 2.23855080e-05, nan, + nan, nan, nan, nan])]",58.70743489265442 +0,shor,True,False,global,heuristic,"[array([0, 1, 1, 0, 0, 0, 0, 0, 0], dtype=int8), array([0, 1, 0, 0, 1, 0, 1, 0, 0], dtype=int8)]","{1: ([array([1, 0, 0, 0, 0, 1, 0, 1, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([0, 0, 0, 1, 1, 1, 0, 0, 0])}), 2: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 1, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)}), 3: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([1, 1, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}","[False, {1: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}]",[],{},[],"[array([5.60252069e-07, 1.38903058e-05, 5.49863630e-05, 1.26465379e-03, + 4.55542884e-03, 4.82306257e-02, 6.23770582e-02, 7.39926682e-06]), array([2.43304941e-06, 1.21563572e-05, 2.46694057e-05, 1.83097412e-04, + 5.65824759e-04, 7.19520859e-03, 1.41309522e-02, 6.90297395e-06]), array([6.64242463e-07, 1.65088554e-05, 6.55568481e-05, 1.55026123e-03, + 5.82102152e-03, 1.06249163e-01, 3.43847337e-01, 9.99926625e-01]), array([2.45994874e-06, 1.02147063e-05, 1.42665888e-05, nan, + nan, nan, nan, nan])]",58.70777201652527 +0,shor,True,False,heuristic,opt,"[array([0, 1, 0, 0, 1, 0, 1, 0, 0])]","{1: ([array([1, 0, 0, 1, 0, 0, 0, 1, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([0, 0, 0, 1, 1, 1, 0, 0, 0])})}","[{1: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}]",[],{},[],"[array([3.79909972e-07, 9.46228534e-06, 3.76716109e-05, 9.06128895e-04, + 3.44564629e-03, 5.32042861e-02, 1.00942659e-01, 1.11512026e-04]), array([1.70954467e-06, 8.60603257e-06, 1.78043148e-05, 1.58651986e-04, + 5.28828976e-04, 8.11709968e-03, 1.85726260e-02, 7.10695876e-05]), array([4.69420253e-07, 1.17337932e-05, 4.69257092e-05, 1.17037649e-03, + 4.65941058e-03, 1.05967837e-01, 3.42348620e-01, 9.99575859e-01]), array([1.78839732e-06, 7.60542103e-06, 1.17476889e-05, nan, + 2.63673341e-04, 5.48018653e-03, 7.47823097e-03, nan])]",26.015491008758545 +0,shor,True,False,optimal,opt,"[array([0, 1, 0, 0, 1, 0, 0, 1, 0], dtype=int8)]","{1: ([array([1, 0, 0, 1, 0, 0, 1, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8), 1: array([0, 0, 0, 1, 1, 1, 0, 0, 0])})}","[{1: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}]",[],{},[],"[array([4.09485464e-07, 1.02132961e-05, 4.07329420e-05, 9.93312580e-04, + 3.83998323e-03, 6.64824446e-02, 1.42473361e-01, 3.89372748e-04]), array([1.69857706e-06, 8.59564127e-06, 1.80378623e-05, 1.78214632e-04, + 6.14415817e-04, 1.11854678e-02, 2.78897202e-02, 1.44766417e-04]), array([4.91737630e-07, 1.22973686e-05, 4.92077919e-05, 1.23257137e-03, + 4.92996982e-03, 1.14116368e-01, 3.66881278e-01, 9.99631260e-01]), array([1.79188767e-06, 7.76527884e-06, 1.28248439e-05, 8.80076374e-05, + 4.21980264e-04, 7.39128556e-03, 1.25633583e-02, nan])]",26.015876054763794 +0,shor,True,False,global,opt,"[array([0, 1, 0, 0, 1, 0, 0, 1, 0], dtype=int8)]","{1: ([array([1, 0, 0, 1, 0, 0, 1, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 1, 1, 1, 0, 0, 0])})}","[{1: ([array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)], {0: array([0, 0, 0, 0, 0, 0, 0, 0, 0]), 1: array([0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)})}]",[],{},[],"[array([4.40916233e-07, 1.09768350e-05, 4.36771532e-05, 1.04610565e-03, + 3.95827774e-03, 5.93788662e-02, 1.10256861e-01, 1.15165140e-04]), array([1.65278171e-06, 8.33739222e-06, 1.73456718e-05, 1.60812687e-04, + 5.38151667e-04, 7.89017026e-03, 1.79455177e-02, 7.89885639e-05]), array([5.28896638e-07, 1.32090112e-05, 5.27688243e-05, 1.30557206e-03, + 5.15188991e-03, 1.12540548e-01, 3.56775530e-01, 9.99676861e-01]), array([1.74214511e-06, 7.32062908e-06, 1.08997776e-05, nan, + 2.10990460e-04, 5.84093809e-03, 1.17423962e-02, nan])]",26.016201972961426 diff --git a/src/mqt/qecc/circuit_synthesis/__init__.py b/src/mqt/qecc/circuit_synthesis/__init__.py index 5ce30d46..bab7f97d 100644 --- a/src/mqt/qecc/circuit_synthesis/__init__.py +++ b/src/mqt/qecc/circuit_synthesis/__init__.py @@ -4,6 +4,7 @@ from .encoding import depth_optimal_encoding_circuit, gate_optimal_encoding_circuit, heuristic_encoding_circuit from .simulation import LutDecoder, NoisyNDFTStatePrepSimulator +from .simulation_det import NoisyDFTStatePrepSimulator from .state_prep import ( StatePrepCircuit, depth_optimal_prep_circuit, @@ -15,10 +16,14 @@ heuristic_verification_stabilizers, naive_verification_circuit, ) +from .state_prep_det import DeterministicVerification, DeterministicVerificationHelper from .synthesis_utils import qiskit_to_stim_circuit __all__ = [ + "DeterministicVerification", + "DeterministicVerificationHelper", "LutDecoder", + "NoisyDFTStatePrepSimulator", "NoisyNDFTStatePrepSimulator", "StatePrepCircuit", "depth_optimal_encoding_circuit", diff --git a/src/mqt/qecc/circuit_synthesis/simulation_det.py b/src/mqt/qecc/circuit_synthesis/simulation_det.py new file mode 100644 index 00000000..d4a68250 --- /dev/null +++ b/src/mqt/qecc/circuit_synthesis/simulation_det.py @@ -0,0 +1,419 @@ +"""Simulation of deterministic state preparation circuits using qsample (https://github.com/dpwinter/qsample).""" + +from __future__ import annotations + +from functools import partial +from typing import TYPE_CHECKING + +import numpy as np +import qsample as qs + +from ..codes import InvalidCSSCodeError +from .simulation import LutDecoder + +if TYPE_CHECKING: + import numpy.typing as npt + from qiskit import QuantumCircuit + from qsample.callbacks import Callback, CallbackList + + from ..codes import CSSCode + from .state_prep_det import DeterministicCorrection, DeterministicVerification + + +class UnsupportedCodeError(ValueError): + """Raised when the code is not supported by the simulator.""" + + +def _support_int(array: npt.NDArray[np.int8]) -> list[int]: + """Return the indices of the non-zero elements of the array.""" + return [int(i) for i in np.where(array)[0]] + + +def return_correction(outcome: int, corrections: dict[int, npt.NDArray[np.int8]], zero_state: bool) -> qs.Circuit: + """Return the det correction circuit for the given outcome of the D-verification.""" + correction = _support_int(corrections[outcome]) + if len(correction) == 0: + return qs.Circuit([], noisy=False) + correction_circuit = [] + if zero_state: + correction_circuit.append({"X": set(correction)}) + else: + correction_circuit.append({"Z": set(correction)}) + return qs.Circuit(correction_circuit, noisy=False) + + +def ndv_outcome_check(outcome: int, correction_index: int, num_measurements: int, cutoff: int, flag: bool) -> bool: + """Check if the outcome of the AND-verification is equal to the given outcome.""" + outcome_bitstring = format(outcome, f"0{num_measurements}b") + if not flag: + # return False if any of the flags triggered + if "1" in outcome_bitstring[cutoff:]: + return False + correction_outcome_bitstring = format(correction_index, f"0{cutoff}b") + return outcome_bitstring[:cutoff] == correction_outcome_bitstring + correction_outcome_bitstring = format(correction_index, f"0{num_measurements - cutoff}b") + return outcome_bitstring[cutoff:] == correction_outcome_bitstring + + +# perform decoding using LUT +def decode_failure( + measurements: int, code: CSSCode, decoder: LutDecoder, zero_state: bool, num_measurements: int +) -> bool: + """Check if the decoding failed.""" + # convert outcome to binary numpy int8 array + measurements_array = np.array([int(x) for x in f"{measurements:0{num_measurements}b}"], dtype=np.int8) + num_syndromes = num_measurements - code.n + syndrome = measurements_array[:num_syndromes] + state = measurements_array[num_syndromes:] + if zero_state: + estimate = decoder.decode_x(syndrome) + observables = code.Lz + else: + estimate = decoder.decode_z(syndrome) + observables = code.Lx + corrected = state + estimate + + # check if logical error + return bool(np.any(corrected @ observables.T % 2 != 0)) + + +class NoisyDFTStatePrepSimulator: + """Class to simulate the state preparation circuits using qsample (https://github.com/dpwinter/qsample).""" + + def __init__( + self, + state_prep_circuit: QuantumCircuit, + verifications: tuple[DeterministicVerification, DeterministicVerification], + code: CSSCode, + err_model: type[qs.ErrorModel] = qs.noise.E1_1, + zero_state: bool = True, + ) -> None: + """Initialize the simulator. + + Args: + state_prep_circuit: The state preparation circuit to simulate. + verifications: The deterministic verification circuits for the two layers. + code: The CSS code used for the state preparation circuit. + err_model: The error model to use for the simulation. + zero_state: If True the state preparation circuit prepares the |0> state, otherwise the |+> state. + """ + if code.Hx is None or code.Hz is None: + msg = "The code must have both X and Z checks." + raise InvalidCSSCodeError(msg) + + if code.distance >= 5: + msg = "Only distance <5 CSS codes are supported." + raise UnsupportedCodeError(msg) + + self.code = code + self.err_model = err_model + self.zero_state = zero_state + self._ancilla_index = code.n + + # create LUT + self.decoder = LutDecoder(code) + if zero_state: + self.decoder.generate_x_lut() + else: + self.decoder.generate_z_lut() + + # create protocol + self.protocol = qs.Protocol() + self._create_det_protocol(state_prep_circuit, verifications, code) + + def _create_det_protocol( + self, + non_det_state_prep_circuit: QuantumCircuit, + verifications: tuple[DeterministicVerification, DeterministicVerification], + code: CSSCode, + ) -> None: + """Create the protocol for the noisy deterministic state preparation circuit based on the given Verifications. + + Args: + non_det_state_prep_circuit: The state preparation circuit for the NonDet-verification. + verifications: The deterministic verifications for the two layers. + code: The CSS code used for the state preparation circuit. + """ + circ = qiskit_to_qsample(non_det_state_prep_circuit) + self.protocol.add_node(name="PREP", circuit=circ) + self.protocol.add_edge("START", "PREP", check="True") + + # create AND-verifications + self.protocol.add_node( + name="NDV_0", + circuit=self._create_stab_measurement_circuit( + verifications[0].stabs, + hook_corrections=verifications[0].hook_corrections, + z_stabs=self.zero_state, + noisy=True, + ), + ) + self.protocol.add_node( + name="NDV_1", + circuit=self._create_stab_measurement_circuit( + verifications[1].stabs, + hook_corrections=verifications[1].hook_corrections, + z_stabs=not self.zero_state, + noisy=True, + ), + ) + + self.protocol.add_edge("PREP", "NDV_0", check="True") + + # create decoding circuit + matrix = code.Hz if self.zero_state else code.Hx + decoding_circuit = self._create_stab_measurement_circuit(matrix, z_stabs=self.zero_state, noisy=False) + if not self.zero_state: + decoding_circuit.append({"H": set(range(self.code.n))}) + decoding_circuit.append({"measure": set(range(self.code.n))}) + + self.protocol.add_node(name="DEC", circuit=decoding_circuit) + + # add layers + self._append_verification(verifications[0], layer="0", end_node="NDV_1", z_stabs=self.zero_state) + self._append_verification(verifications[1], layer="1", end_node="DEC", z_stabs=not self.zero_state) + + # add decoding and failure check + self._append_decoding(code) + + def _append_verification( + self, verification: DeterministicVerification, layer: str, end_node: str, z_stabs: bool + ) -> None: + """Append a deterministic verification circuits to the protocol and connect them to the following node. + + Args: + verification: The deterministic verification circuit to append. + layer: The layer of the verification circuit ("0" or "1"). + end_node: The name of the node to connect the verification to. + z_stabs: If True the verification uses Z-stabilizers, otherwise X-stabilizers. + """ + assert layer in {"0", "1"}, "Layer must be either '0' or '1'." + # case of no errors detected + self.protocol.add_edge(f"NDV_{layer}", end_node, check=f"NDV_{layer}[-1] == 0 or NDV_{layer}[-1] == None") + + num_measurements = verification.num_ancillas_verification() + verification.num_ancillas_hooks() + num_non_det_measurements = verification.num_ancillas_verification() + + for outcome, (cor_stabs, rec) in verification.det_correction.items(): + # det corrections + self.protocol.add_node( + name=f"COR_{layer}_{outcome}", + circuit=self._create_stab_measurement_circuit(cor_stabs, z_stabs=z_stabs, noisy=True), + ) + self.protocol.check_functions[f"ndv_outcome_check_{layer}_{outcome}"] = partial( + ndv_outcome_check, + correction_index=outcome, + num_measurements=num_measurements, + cutoff=num_non_det_measurements, + flag=False, + ) + self.protocol.add_edge( + f"NDV_{layer}", f"COR_{layer}_{outcome}", check=f"ndv_outcome_check_{layer}_{outcome}(NDV_{layer}[-1])" + ) + # recovery + self.protocol.check_functions[f"return_correction_circuit_{layer}_{outcome}"] = partial( + return_correction, corrections=rec, zero_state=z_stabs + ) + self.protocol.add_edge( + f"COR_{layer}_{outcome}", + f"REC_{layer}", + check=f"return_correction_circuit_{layer}_{outcome}(COR_{layer}_{outcome}[-1])", + ) + self.protocol.add_edge(f"REC_{layer}", end_node, check="True") + + # hooks + hooks_idx = 0 + for hook_correction in verification.hook_corrections: + if not hook_correction: + continue + hook_stabs, rec = hook_correction[1] + outcome = int("0" * hooks_idx + "1" + "0" * (verification.num_ancillas_hooks() - hooks_idx - 1), 2) + self.protocol.add_node( + name=f"COR_{layer}_H_{hooks_idx}", + circuit=self._create_stab_measurement_circuit(hook_stabs, z_stabs=not z_stabs, noisy=True), + ) + self.protocol.check_functions[f"ndv_outcome_check_h_{layer}_{hooks_idx}"] = partial( + ndv_outcome_check, + correction_index=outcome, + num_measurements=num_measurements, + cutoff=num_non_det_measurements, + flag=True, + ) + self.protocol.add_edge( + f"NDV_{layer}", + f"COR_{layer}_H_{hooks_idx}", + check=f"ndv_outcome_check_h_{layer}_{hooks_idx}(NDV_{layer}[-1])", + ) + + # recovery + self.protocol.check_functions[f"return_correction_circuit_{layer}_hook_{hooks_idx}"] = partial( + return_correction, corrections=rec, zero_state=not z_stabs + ) + self.protocol.add_edge( + f"COR_{layer}_H_{hooks_idx}", + f"REC_{layer}", + check=f"return_correction_circuit_{layer}_hook_{hooks_idx}(COR_{layer}_H_{hooks_idx}[-1])", + ) + self.protocol.add_edge(f"REC_{layer}", end_node, check="True") + hooks_idx += 1 + + def _append_decoding(self, code: CSSCode) -> None: + """Append the decoding circuit to the end of the protocol. + + This consists of measuring the stabilizers of the code and using the LUT decoder to correct the errors. + If the correction is not successful the protocol terminates with FAIL. + + Args: + code: The CSS code used for the state preparation circuit. + """ + assert code.Hx is not None + assert code.Hz is not None + + num_measurements = self.code.n + num_measurements += len(code.Hz) if self.zero_state else len(code.Hx) + + self.protocol.check_functions["decode_failure"] = partial( + decode_failure, + code=code, + decoder=self.decoder, + zero_state=self.zero_state, + num_measurements=num_measurements, + ) + self.protocol.add_edge("DEC", "FAIL", check="decode_failure(DEC[-1])") + + def dss_logical_error_rates( + self, + err_params: dict[str, list[float]], + p_max: dict[str, float], + dss_l: int = 3, + shots: int = 1000, + callbacks: Callback | CallbackList | None = None, + ) -> list[npt.NDArray[np.float64]]: + """Calculate the logical error rate of the deterministic state preparation circuit using subset sampling. + + For more detail on the parameters see the qsample documentation (https://dpwinter.github.io/qsample/). + + Args: + err_params: The error parameters (physical errors) for the error model. + p_max: The physical error rate to sample at for the subset sampling. + dss_l: The sampling depth for the subset sampling. + shots: The number of shots to use for the simulation. + callbacks: A list of callback functions to call after each layer from qsample. + """ + if callbacks is None: + callbacks = [] + sampler = qs.SubsetSampler( + protocol=self.protocol, + simulator=qs.StabilizerSimulator, + p_max=p_max, + err_model=self.err_model, + err_params=err_params, + L=dss_l, + ) + sampler.run(n_shots=shots, callbacks=callbacks) + return [s / self.code.k for s in sampler.stats()] + + def mc_logical_error_rates( + self, err_params: dict[str, list[float]], shots: int = 10000, callbacks: Callback | CallbackList | None = None + ) -> list[npt.NDArray[np.float64]]: + """Calculate the logical error rate of the deterministic state preparation circuit using direct Monte Carlo sampling. + + Args: + err_params: The error parameters (physical errors) for the error model. + shots: The number of shots to use for the simulation. + callbacks: A list of callback functions to call after each layer from qsample. + """ + if callbacks is None: + callbacks = [] + sampler = qs.DirectSampler( + protocol=self.protocol, simulator=qs.StabilizerSimulator, err_model=self.err_model, err_params=err_params + ) + sampler.run(n_shots=shots, callbacks=callbacks) + return [s / self.code.k for s in sampler.stats()] + + def _create_stab_measurement_circuit( + self, + verification_stabilizers: list[npt.NDArray[np.int8]], + z_stabs: bool, + hook_corrections: list[DeterministicCorrection] | None = None, + noisy: bool = True, + ) -> qs.Circuit: + """Create the deterministic verification circuit for the given verification stabilizers. + + Args: + verification_stabilizers: The stabilizers to measure. + z_stabs: If True the stabilizers are Z-stabilizers, otherwise X-stabilizers. + hook_corrections: Whether to apply hook corrections for the stabilizers. + noisy: If True the circuit is noisy, otherwise it is noiseless (used for decoding). + """ + num_stabs = len(verification_stabilizers) + if num_stabs == 0: + return qs.Circuit([{"I": {0}}], noisy=False) + if hook_corrections is None: + hook_corrections = [{}] * num_stabs + + circuit: list[dict[str, set[int]] | dict[str, set[tuple[int, int]]]] = [] + # init new ancillas + num_ancillas = len(verification_stabilizers) + sum(1 for hook in hook_corrections if hook) + circuit.append({"init": set(range(self._ancilla_index, self._ancilla_index + num_ancillas))}) + + flag_ancilla_index = self._ancilla_index + len(verification_stabilizers) + for stabilizer, flagged in zip(verification_stabilizers, [bool(hook) for hook in hook_corrections]): + stabilizer_sup = _support_int(stabilizer) + if not z_stabs: + circuit.append({"H": {self._ancilla_index}}) + for qubit_idx, qubit in enumerate(stabilizer_sup): + # add flag + if flagged and qubit_idx == 1: + if z_stabs: + circuit.extend(( + {"H": {flag_ancilla_index}}, + {"CNOT": {(flag_ancilla_index, self._ancilla_index)}}, + )) + else: + circuit.append({"CNOT": {(self._ancilla_index, flag_ancilla_index)}}) + if flagged and qubit_idx == len(stabilizer_sup) - 1: + if z_stabs: + circuit.extend(( + {"CNOT": {(flag_ancilla_index, self._ancilla_index)}}, + {"H": {flag_ancilla_index}}, + )) + else: + circuit.append({"CNOT": {(self._ancilla_index, flag_ancilla_index)}}) + flag_ancilla_index += 1 + + # add stab cnots + if z_stabs: + circuit.append({"CNOT": {(qubit, self._ancilla_index)}}) + else: + circuit.append({"CNOT": {(self._ancilla_index, qubit)}}) + if not z_stabs: + circuit.append({"H": {self._ancilla_index}}) + # circuit.append({"measure": {self._ancilla_index}}) + self._ancilla_index += 1 + circuit.append({"measure": set(range(self._ancilla_index - num_stabs, flag_ancilla_index))}) + self._ancilla_index = flag_ancilla_index + if len(circuit) == 0: + # qsample does not like empty circuits + return qs.Circuit([{"I": {0}}], noisy=False) + return qs.Circuit(circuit, noisy=noisy) + + +def qiskit_to_qsample(qiskit_circuit: QuantumCircuit) -> qs.Circuit: + """Convert a Qiskit circuit to a qsample circuit. Only supports H, X, Y, Z, CX, and MEASURE gates.""" + custom_circuit = [{"init": set(range(qiskit_circuit.num_qubits))}] + for circ_instruction in qiskit_circuit.data: + qargs = circ_instruction.qubits + instruction = circ_instruction.operation + gate_name = instruction.name.upper() + if gate_name == "CX": + gate_name = "CNOT" + # collect measurements to combine them at the end + if gate_name == "MEASURE": + gate_name = "measure" + if len(qargs) == 1: + qubits = qiskit_circuit.qubits.index(qargs[0]) + else: + qubits = tuple(qiskit_circuit.qubits.index(q) for q in qargs) + custom_circuit.append({gate_name: {qubits}}) + return qs.Circuit(custom_circuit, noisy=True) diff --git a/src/mqt/qecc/circuit_synthesis/state_prep.py b/src/mqt/qecc/circuit_synthesis/state_prep.py index badee251..862bf090 100644 --- a/src/mqt/qecc/circuit_synthesis/state_prep.py +++ b/src/mqt/qecc/circuit_synthesis/state_prep.py @@ -334,10 +334,49 @@ def gate_optimal_verification_stabilizers( additional_faults: Faults to verify in addition to the faults propagating in the state preparation circuit. Returns: - A list of stabilizers to verify the state preparation circuit. + A list of stabilizers for each number of errors to verify the state preparation circuit. + """ + return [ + stabs[0] if stabs != [] else [] + for stabs in all_gate_optimal_verification_stabilizers( + sp_circ, + x_errors, + min_timeout, + max_timeout, + max_ancillas, + additional_faults, + return_all_solutions=False, + ) + ] + + +def all_gate_optimal_verification_stabilizers( + sp_circ: StatePrepCircuit, + x_errors: bool = True, + min_timeout: int = 1, + max_timeout: int = 3600, + max_ancillas: int | None = None, + additional_faults: npt.NDArray[np.int8] | None = None, + return_all_solutions: bool = False, +) -> list[list[list[npt.NDArray[np.int8]]]]: + """Return all equivalent verification stabilizers for the state preparation circuit. + + The method uses an iterative search to find the optimal set of stabilizers by repeatedly computing the optimal circuit for each number of ancillas and cnots. This is repeated for each number of independent correctable errors in the state preparation circuit. Thus the verification circuit is constructed of multiple "layers" of stabilizers, each layer corresponding to a fault set it verifies. + + Args: + sp_circ: The state preparation circuit to verify. + x_errors: If True, verify the X errors. If False, verify the Z errors. + min_timeout: The minimum time to allow each search to run for. + max_timeout: The maximum time to allow each search to run for. + max_ancillas: The maximum number of ancillas to allow in each layer verification circuit. + additional_faults: Faults to verify in addition to the faults propagating in the state preparation circuit. + return_all_solutions: If False only the first solution for each number of errors is returned. If True all solutions are returned. + + Returns: + A list of all equivalent stabilizers for each number of errors to verify the state preparation circuit. """ max_errors = sp_circ.max_errors - layers: list[list[npt.NDArray[np.int8]]] = [[] for _ in range(max_errors)] + layers: list[list[list[npt.NDArray[np.int8]]]] = [[] for _ in range(max_errors)] if max_ancillas is None: max_ancillas = sp_circ.max_z_measurements if x_errors else sp_circ.max_x_measurements @@ -382,12 +421,12 @@ def fun(num_cnots: int) -> list[npt.NDArray[np.int8]] | None: max_timeout, ) - if res is None: - logging.info(f"No verification stabilizers found for {num_errors} errors") - layers[num_errors - 1] = [] - continue - measurements, num_cnots = res - if measurements is None or (isinstance(measurements, str) and measurements == "timeout"): + if res is not None: + measurements, num_cnots = res + else: + measurements = None + + if measurements is None: logging.info(f"No verification stabilizers found for {num_errors} errors") return [] # No solution found @@ -409,10 +448,11 @@ def search_cnots(num_cnots: int) -> list[npt.NDArray[np.int8]] | None: num_cnots - 1, timeout=max_timeout, ) - if cnot_opt is None or (isinstance(cnot_opt, str) and cnot_opt == "timeout"): + if cnot_opt and not isinstance(cnot_opt, str): + num_cnots -= 1 + measurements = cnot_opt + else: break - num_cnots -= 1 - measurements = cnot_opt logging.info(f"Minimal number of CNOTs for {num_errors} errors is: {num_cnots}") # If the number of CNOTs is minimal, we can reduce the number of ancillas @@ -428,12 +468,21 @@ def search_anc(num_anc: int) -> list[npt.NDArray[np.int8]] | None: num_anc - 1, timeout=max_timeout, ) - if anc_opt is None or (isinstance(anc_opt, str) and anc_opt == "timeout"): + if anc_opt and not isinstance(anc_opt, str): + num_anc -= 1 + measurements = anc_opt + else: break - num_anc -= 1 - measurements = anc_opt logging.info(f"Minimal number of ancillas for {num_errors} errors is: {num_anc}") - layers[num_errors - 1] = measurements + if not return_all_solutions: + layers[num_errors - 1] = [measurements] + else: + all_stabs = all_verification_stabilizers( + sp_circ, faults, num_anc, num_cnots, x_errors=x_errors, return_all_solutions=True + ) + if all_stabs: + layers[num_errors - 1] = all_stabs + logger.info(f"Found {len(layers[num_errors - 1])} equivalent solutions for {num_errors} errors") return layers @@ -452,7 +501,7 @@ def _verification_circuit( if full_fault_tolerance: if not flag_first_layer: - additional_errors = _hook_errors(measurements_1) + additional_errors = get_hook_errors(measurements_1) layers_2 = verification_stabs_fun(sp_circ, not sp_circ.zero_state, additional_errors) else: layers_2 = verification_stabs_fun(sp_circ, not sp_circ.zero_state, None) @@ -681,7 +730,7 @@ def cost(cover: set[frozenset[int]]) -> tuple[int, int]: logging.info("Finding coset leaders.") measurements = [] for c in cover: - leaders = [_coset_leader(m, non_candidate_checks) for m in mapping[c]] + leaders = [coset_leader(m, non_candidate_checks) for m in mapping[c]] leaders.sort(key=np.sum) measurements.append(leaders[0]) else: @@ -752,9 +801,10 @@ def _measure_ft_stabs( return measured_circ -def _vars_to_stab( +def vars_to_stab( measurement: list[z3.BoolRef | bool], generators: npt.NDArray[np.int8] ) -> npt.NDArray[z3.BoolRef | bool]: + """Compute the stabilizer measured giving the generators and the measurement variables.""" measurement_stab = symbolic_scalar_mult(generators[0], measurement[0]) for i, scalar in enumerate(measurement[1:]): measurement_stab = symbolic_vector_add(measurement_stab, symbolic_scalar_mult(generators[i + 1], scalar)) @@ -768,14 +818,40 @@ def verification_stabilizers( num_cnots: int, x_errors: bool = True, ) -> list[npt.NDArray[np.int8]] | None: - """Return verification stabilizers for num_errors independent errors in the state preparation circuit using z3. + """Return a verification stabilizers for num_errors independent errors in the state preparation circuit using z3. + + Args: + sp_circ: The state preparation circuit. + fault_set: The set of errors to verify. + num_anc: The maximum number of ancilla qubits to use. + num_cnots: The maximum number of CNOT gates to use. + x_errors: If True, the errors are X errors. Otherwise, the errors are Z errors. + """ + stabs_list = all_verification_stabilizers( + sp_circ, fault_set, num_anc, num_cnots, x_errors, return_all_solutions=False + ) + if stabs_list: + return stabs_list[0] + return None + + +def all_verification_stabilizers( + sp_circ: StatePrepCircuit, + fault_set: npt.NDArray[np.int8], + num_anc: int, + num_cnots: int, + x_errors: bool = True, + return_all_solutions: bool = False, +) -> list[list[npt.NDArray[np.int8]]] | None: + """Return a list of verification stabilizers for num_errors independent errors in the state preparation circuit using z3. Args: sp_circ: The state preparation circuit. fault_set: The set of errors to verify. num_anc: The maximum number of ancilla qubits to use. - num_cnots: The maximumg number of CNOT gates to use. + num_cnots: The maximum number of CNOT gates to use. x_errors: If True, the errors are X errors. Otherwise, the errors are Z errors. + return_all_solutions: If True, return all solutions. Otherwise, return the first solution found. """ # Measurements are written as sums of generators # The variables indicate which generators are non-zero in the sum @@ -785,7 +861,7 @@ def verification_stabilizers( measurement_vars = [[z3.Bool(f"m_{anc}_{i}") for i in range(n_gens)] for anc in range(num_anc)] solver = z3.Solver() - measurement_stabs = [_vars_to_stab(vars_, gens) for vars_ in measurement_vars] + measurement_stabs = [vars_to_stab(vars_, gens) for vars_ in measurement_vars] # assert that each error is detected solver.add( @@ -802,7 +878,8 @@ def verification_stabilizers( ) ) - if solver.check() == z3.sat: + solutions = [] + while solver.check() == z3.sat: model = solver.model() # Extract stabilizer measurements from model actual_measurements = [] @@ -812,19 +889,25 @@ def verification_stabilizers( if model[m[g]]: v += gens[g] actual_measurements.append(v % 2) - - return actual_measurements + if not return_all_solutions: + return [actual_measurements] + solutions.append(actual_measurements) + # add constraint to avoid same solution again + solver.add(z3.Or([vars_[i] != model[vars_[i]] for vars_ in measurement_vars for i in range(n_gens)])) + if solutions: + return solutions return None -def _coset_leader(error: npt.NDArray[np.int8], generators: npt.NDArray[np.int8]) -> npt.NDArray[np.int8]: +def coset_leader(error: npt.NDArray[np.int8], generators: npt.NDArray[np.int8]) -> npt.NDArray[np.int8]: + """Compute the coset leader of an error given a set of generators.""" if len(generators) == 0: return error s = z3.Optimize() leader = [z3.Bool(f"e_{i}") for i in range(len(error))] coeff = [z3.Bool(f"c_{i}") for i in range(len(generators))] - g = _vars_to_stab(coeff, generators) + g = vars_to_stab(coeff, generators) s.add(symbolic_vector_eq(np.array(leader), symbolic_vector_add(error.astype(bool), g))) s.minimize(z3.Sum(leader)) @@ -864,7 +947,7 @@ def _remove_trivial_faults( logging.info("Removing trivial faults.") max_w = 1 for i, fault in enumerate(faults): - faults[i] = _coset_leader(fault, stabs) + faults[i] = coset_leader(fault, stabs) faults = faults[np.where(np.sum(faults, axis=1) > max_w * num_errors)[0]] # unique faults @@ -916,7 +999,7 @@ def naive_verification_circuit(sp_circ: StatePrepCircuit) -> QuantumCircuit: return _measure_ft_stabs(sp_circ, z_measurements * reps, x_measurements * reps) -def _hook_errors(measurements: list[npt.NDArray[np.int8]]) -> npt.NDArray[np.int8]: +def get_hook_errors(measurements: list[npt.NDArray[np.int8]]) -> npt.NDArray[np.int8]: """Assuming CNOTs are executed in ascending order of qubit index, this function gives all the hook errors of the given stabilizer measurements.""" errors = [] for stab in measurements: diff --git a/src/mqt/qecc/circuit_synthesis/state_prep_det.py b/src/mqt/qecc/circuit_synthesis/state_prep_det.py new file mode 100644 index 00000000..69c834df --- /dev/null +++ b/src/mqt/qecc/circuit_synthesis/state_prep_det.py @@ -0,0 +1,815 @@ +"""Synthesizing deterministic state preparation circuits for d<5 CSS codes.""" + +from __future__ import annotations + +import logging +from itertools import product +from typing import TYPE_CHECKING + +import numpy as np +import z3 +from ldpc import mod2 + +from .state_prep import ( + StatePrepCircuit, + all_gate_optimal_verification_stabilizers, + coset_leader, + get_hook_errors, + heuristic_verification_stabilizers, + vars_to_stab, +) +from .synthesis_utils import ( + iterative_search_with_timeout, + odd_overlap, + run_with_timeout, + symbolic_vector_eq, +) + +logger = logging.getLogger(__name__) + +if TYPE_CHECKING: + from collections.abc import Callable + + import numpy.typing as npt + + from ..codes import CSSCode + + Recovery = tuple[list[npt.NDArray[np.int8]], dict[int, npt.NDArray[np.int8]]] + Recoveries = dict[int, Recovery] + DeterministicCorrection = dict[int, tuple[list[npt.NDArray[np.int8]], Recoveries]] + Verification = list[npt.NDArray[np.int8]] + + +class DeterministicVerification: + """Class to store deterministic verification stabilizers and corrections.""" + + def __init__( + self, + and_verification_stabs: Verification, + det_correction: DeterministicCorrection, + hook_corrections: list[DeterministicCorrection] | None = None, + ) -> None: + """Initialize a deterministic verification object. + + Args: + and_verification_stabs: The non-deterministic verification stabilizers to be measured. + det_correction: The deterministic correction for the non-deterministic verification stabilizers. + hook_corrections: the hook corrections for the non-deterministic verification stabilizers. + """ + self.stabs = and_verification_stabs + self.det_correction = det_correction + self.hook_corrections: list[DeterministicCorrection] = [{}] * len(and_verification_stabs) + if hook_corrections: + assert len(hook_corrections) == len(and_verification_stabs) + self.hook_corrections = hook_corrections + + def copy(self) -> DeterministicVerification: + """Return a copy of the deterministic verification object.""" + return DeterministicVerification(self.stabs, self.det_correction, self.hook_corrections) + + @staticmethod + def _stat_cnots_correction(fun: Callable[..., int], correction: DeterministicCorrection) -> int: + """Return stats on the CNOTs in the deterministic correction.""" + return fun([np.sum([np.sum(m) for m in v[0]]) for v in correction.values()]) + + @staticmethod + def _stat_anc_correction(fun: Callable[..., int], correction: DeterministicCorrection) -> int: + """Return stats on the ancillas in the deterministic correction.""" + return fun([len(v[0]) for v in correction.values()]) + + @staticmethod + def _num_branches_correction(correction: DeterministicCorrection) -> int: + """Return the number of branches in the deterministic correction.""" + return sum(len(v[1]) for v in correction.values()) + + # Statistics methods + def num_ancillas_verification(self) -> int: + """Return the number of ancillas needed for the verification.""" + return len(self.stabs) + + def num_cnots_verification(self) -> int: + """Return the number of CNOTs needed for the verification.""" + return np.sum([np.sum(m) for m in self.stabs]) + + def num_ancillas_correction(self) -> int: + """Return the number of ancillas needed for the correction.""" + return self._stat_anc_correction(sum, self.det_correction) + + def stat_ancillas_correction(self, fun: Callable[..., int]) -> int: + """Return some statistics on the ancillas in the deterministic correction using the function fun. + + Args: + fun: The function to use for the statistics, e.g. sum, max, min, etc. + """ + return self._stat_anc_correction(fun, self.det_correction) + + def num_cnots_correction(self) -> int: + """Return the number of CNOTs needed for the correction.""" + return self._stat_cnots_correction(sum, self.det_correction) + + def stat_cnots_correction(self, fun: Callable[..., int]) -> int: + """Return some statistics on the CNOTs in the deterministic correction using the function fun. + + Args: + fun: The function to use for the statistics, e.g. sum, max, min, etc. + """ + return self._stat_cnots_correction(fun, self.det_correction) + + def num_ancillas_hooks(self) -> int: + """Return the number of ancillas needed for the hook corrections.""" + return len([v for v in self.hook_corrections if v]) + + def num_cnots_hooks(self) -> int: + """Return the number of CNOTs needed for the hook corrections (two per ancilla).""" + return self.num_ancillas_hooks() * 2 + + def num_ancillas_hook_corrections(self) -> int: + """Return the number of ancillas needed for the hook corrections of the verification stabilizers.""" + return sum(self._stat_anc_correction(sum, c) if c != {} else 0 for c in self.hook_corrections) + + def stat_ancillas_hook_corrections(self, fun: Callable[..., int]) -> int: + """Return some statistics on the ancillas in the hook corrections of the verification stabilizers using the function fun. + + Args: + fun: The function to use for the statistics, e.g. sum, max, min, etc. + """ + return fun([self._stat_anc_correction(fun, c) if c != {} else 0 for c in self.hook_corrections]) + + def num_cnots_hook_corrections(self) -> int: + """Return the number of CNOTs needed for the hook corrections of the verification stabilizers.""" + return sum(self._stat_cnots_correction(sum, c) if c != {} else 0 for c in self.hook_corrections) + + def stat_cnots_hook_corrections(self, fun: Callable[..., int]) -> int: + """Return some statistics on the CNOTs in the hook corrections of the verification stabilizers using the function fun. + + Args: + fun: The function to use for the statistics, e.g. sum, max, min, etc. + """ + return fun([self._stat_cnots_correction(fun, c) if c != {} else 0 for c in self.hook_corrections]) + + def num_ancillas_total(self) -> int: + """Return the total number of ancillas needed for the verification and correction.""" + return ( + self.num_ancillas_verification() + + self.num_ancillas_correction() + + self.num_ancillas_hooks() + + self.num_ancillas_hook_corrections() + ) + + def num_cnots_total(self) -> int: + """Return the total number of CNOTs needed for the verification and correction.""" + return ( + self.num_cnots_verification() + + self.num_cnots_correction() + + self.num_cnots_hooks() + + self.num_cnots_hook_corrections() + ) + + def num_branches_det_correction(self) -> int: + """Return the number of branches in the deterministic correction.""" + return self._num_branches_correction(self.det_correction) + + def num_branches_hook_corrections(self) -> int: + """Return the number of branches in the hook corrections of the verification stabilizers.""" + return sum(self._num_branches_correction(c) for c in self.hook_corrections) + + def num_branches_total(self) -> int: + """Return the total number of branches in the verification and correction.""" + return self.num_branches_det_correction() + self.num_branches_hook_corrections() + + +class DeterministicVerificationHelper: + """Class to compute the deterministic verification stabilizers and corrections for a given state preparation circuit.""" + + def __init__(self, state_prep: StatePrepCircuit, use_optimal_verification: bool = True) -> None: + """Initialize the deterministic verification helper with a given state preparation circuit. + + Args: + state_prep: The state preparation circuit to compute the deterministic verification for (must be a CSS code and d<5). + use_optimal_verification: If True, the optimal verification stabilizers are computed, otherwise heuristic verification stabilizers are used. + """ + self.state_prep = state_prep + self.code = state_prep.code + assert self.code.distance < 5, "Only d=3 and d=4 codes are supported." + self.num_qubits = self.code.n + self.layer_x_errors = [self.state_prep.zero_state, not self.state_prep.zero_state] + self.use_optimal_verification = use_optimal_verification + # Variable to store the deterministic verification stabilizers and corrections for the two layers + self._layers: list[list[DeterministicVerification]] = [[], []] + # Variable to store the deterministic verification stabilizers and corrections for the hook propagation solution + self._hook_propagation_solutions: list[tuple[DeterministicVerification, DeterministicVerification]] = [] + + def _compute_non_det_stabs( + self, + min_timeout: int = 1, + max_timeout: int = 3600, + max_ancillas: int | None = None, + compute_all_solutions: bool = False, + ) -> None: + """Computes the non-deterministic verification stabilizers for both layers (X and Z). + + Args: + min_timeout: The minimum time in seconds to run the verification stabilizers. + max_timeout: The maximum time in seconds to run the verification stabilizers. + max_ancillas: The maximum number of ancillas to use in the verification stabilizers. + compute_all_solutions: If True, all equivalent verification stabilizers are computed and stored. + """ + for idx, x_errors in enumerate(self.layer_x_errors): + logger.info(f"Computing non-deterministic verification stabilizers for layer {idx + 1} / 2.") + # if self.use_optimal_verification: + stabs_all = all_gate_optimal_verification_stabilizers( + self.state_prep, + x_errors=x_errors, + min_timeout=min_timeout, + max_timeout=max_timeout, + max_ancillas=max_ancillas, + return_all_solutions=compute_all_solutions, + )[0] + for stabs in stabs_all: + verify = DeterministicVerification(stabs, {}) + self._layers[idx].append(verify) + + def _compute_det_corrections( + self, min_timeout: int = 1, max_timeout: int = 3600, max_ancillas: int | None = None, layer_idx: int = 0 + ) -> None: + """Returns the deterministic verification stabilizers for the first layer of non-deterministic verification stabilizers.""" + x_errors = self.layer_x_errors[layer_idx] + logger.info(f"Computing deterministic verification for layer {layer_idx}.") + for verify_idx, verify in enumerate(self._layers[layer_idx]): + logger.info( + f"Computing deterministic verification for non-det verification {verify_idx + 1} / {len(self._layers[layer_idx])}." + ) + self._layers[layer_idx][verify_idx].det_correction = deterministic_correction( + self.state_prep, + verify.stabs, + min_timeout=min_timeout, + max_timeout=max_timeout, + max_ancillas=max_ancillas, + zero_state=x_errors, + ) + + @staticmethod + def _trivial_hook_errors(hook_errors: list[npt.NDArray[np.int8]], code: CSSCode, x_error: bool) -> bool: + """Checks if the hook errors are trivial (stabilizers) by checking if the rank of the code stabilizers is the same. + + Args: + hook_errors: The hook errors to check. + code: The CSS code to check the rank of the stabilizers. + x_error: If True, the Z stabilizers are checked, otherwise the X stabilizers are checked. + + Returns: + bool: True if all hook errors are trivial, False otherwise. + """ + errors_trivial = [] + code_stabs = np.vstack((code.Hz, code.Lz)) if x_error else np.vstack((code.Hx, code.Lx)) + rank = mod2.rank(code_stabs) + for error in hook_errors: + single_qubit_deviation = [(error + np.eye(code.n, dtype=np.int8)[i]) % 2 for i in range(code.n)] + stabs_plus_single_qubit = [np.vstack((code_stabs, single_qubit_deviation[i])) for i in range(code.n)] + trivial = any(mod2.rank(m) == rank for m in stabs_plus_single_qubit) + errors_trivial.append(trivial) + return bool(all(errors_trivial)) + + def _compute_hook_corrections( + self, min_timeout: int = 1, max_timeout: int = 3600, max_ancillas: int | None = None + ) -> None: + """Computes the additional stabilizers to measure with corresponding corrections for the hook errors of each stabilizer measurement in layer 2.""" + for layer_idx, x_error in enumerate(self.layer_x_errors): + logger.info(f"Computing deterministic verification for hook errors of layer {layer_idx + 1} / 2.") + for verify_idx, verify in enumerate(self._layers[layer_idx]): + logger.info( + f"Computing deterministic hook correction for non-det verification {verify_idx + 1} / {len(self._layers[layer_idx])}." + ) + if not verify.stabs: + self._layers[layer_idx][verify_idx].hook_corrections = [{}] * len(verify.stabs) + continue + for stab_idx, stab in enumerate(verify.stabs): + hook_errors = list(get_hook_errors([stab])) + if self._trivial_hook_errors(hook_errors, self.code, not x_error): + continue + + # hook errors are non-trivial + # add case of error on hook ancilla + hook_errors = np.vstack((hook_errors, np.zeros(self.num_qubits, dtype=np.int8))) + self._layers[layer_idx][verify_idx].hook_corrections[stab_idx] = { + 1: deterministic_correction_single_outcome( + self.state_prep, + hook_errors, + min_timeout=min_timeout, + max_timeout=max_timeout, + max_ancillas=max_ancillas, + zero_state=not x_error, + ) + } + + def _filter_and_stabs(self) -> None: + """Only keep the best non-deterministic verification stabilizers with minimal number of ancillas and CNOTs.""" + self._best_num_anc = 0 + self._best_num_cnots = 0 + for layer_idx in range(2): + # get best numbers + best_num_anc = int(1e6) + best_num_cnots = int(1e6) + best_case_indices = [] + for idx_verify, verify in enumerate(self._layers[layer_idx]): + num_anc = verify.num_ancillas_verification() + verify.num_ancillas_hooks() + num_cnot = verify.num_cnots_verification() + verify.num_cnots_hooks() + if best_num_anc > num_anc or (best_num_anc == num_anc and best_num_cnots > num_cnot): + best_num_anc = num_anc + best_num_cnots = num_cnot + best_case_indices = [idx_verify] + elif best_num_anc == num_anc and best_num_cnots == num_cnot: + best_case_indices.append(idx_verify) + # filter out all but the best case + self._layers[layer_idx] = [self._layers[layer_idx][idx] for idx in best_case_indices] + # save the best numbers + self._best_num_anc += best_num_anc + self._best_num_cnots += best_num_cnots + + def _recompute_hook_propagation_corrections( + self, + verify_2_list: list[DeterministicVerification], + verify: DeterministicVerification, + stabs_flagged: list[bool], + min_timeout: int = 1, + max_timeout: int = 3600, + max_ancillas: int | None = None, + ) -> None: + for verify_2_idx, verify_2 in enumerate(verify_2_list): + verify_2_list[verify_2_idx].det_correction = deterministic_correction( + self.state_prep, + verify_2.stabs, + min_timeout=min_timeout, + max_timeout=max_timeout, + max_ancillas=max_ancillas, + zero_state=not self.state_prep.zero_state, + ) + for stab_idx, stab in enumerate(verify_2.stabs): + hook_errors_2 = list(get_hook_errors([stab])) + if self._trivial_hook_errors(hook_errors_2, self.code, self.state_prep.zero_state): + verify_2_list[verify_2_idx].hook_corrections[stab_idx] = {} + else: + hook_errors_2 = np.vstack((hook_errors_2, np.zeros(self.num_qubits, dtype=np.int8))) + verify_2_list[verify_2_idx].hook_corrections[stab_idx] = { + 1: deterministic_correction_single_outcome( + self.state_prep, + hook_errors_2, + min_timeout=min_timeout, + max_timeout=max_timeout, + max_ancillas=max_ancillas, + zero_state=self.state_prep.zero_state, + ) + } + + # choose the best solution + verify_2_best = verify_2_list[0] + num_anc_verify_2 = verify_2_best.num_ancillas_total() + num_cnots_verify_2 = verify_2_best.num_cnots_total() + for verify_2 in verify_2_list[1:]: + if num_anc_verify_2 > verify_2.num_ancillas_total() or ( + num_anc_verify_2 == verify_2.num_ancillas_total() and num_cnots_verify_2 > verify_2.num_cnots_total() + ): + num_anc_verify_2 = verify_2.num_ancillas_total() + num_cnots_verify_2 = verify_2.num_cnots_total() + verify_2_best = verify_2 + + # modify the first layer verification and reduce necessary hooks + verify_new = verify.copy() + # compute necessary hooks + for idx, flag in enumerate(stabs_flagged): + if flag: + verify_new.hook_corrections[idx] = { + 1: deterministic_correction_single_outcome( + self.state_prep, + get_hook_errors([verify.stabs[idx]]), + min_timeout=min_timeout, + max_timeout=max_timeout, + max_ancillas=max_ancillas, + zero_state=not self.state_prep.zero_state, + ) + } + else: + verify_new.hook_corrections[idx] = {} + + self._hook_propagation_solutions.append((verify_new, verify_2_best)) + + def _compute_hook_propagation_solutions( + self, + min_timeout: int = 1, + max_timeout: int = 3600, + max_ancillas: int | None = None, + compute_all_solutions: bool = False, + ) -> None: + """Computes the second layer assuming the hook errors are not flagged but propagated.""" + if not self._layers[1]: + # no second layer + return + + for verify in self._layers[0]: + logger.info(f"Computing hook propagation solutions for verification {verify} / {len(self._layers[0])}.") + # create possible combinations of which hook errors are flagged + # need_hook_corrections = [ + # not self._trivial_hook_errors(_hook_errors([stab]), self.code, not x_errors) for stab in stabs + # ] + stabs_flagged_all = [ + not self._trivial_hook_errors(get_hook_errors([stab]), self.code, not self.layer_x_errors[0]) + for stab in verify.stabs + ] + # stabs_flagged_all = [True if hook else False for hook in verify.hook_corrections] + stabs_flagged_all_indices = [idx for idx, flag in enumerate(stabs_flagged_all) if flag] + stabs_flagged_indices_combs = list(product([False, True], repeat=len(stabs_flagged_all_indices)))[:-1] + stabs_flagged_combs = [] + for comb in stabs_flagged_indices_combs: + stabs_flagged = [False] * len(stabs_flagged_all) + for idx_comb, idx in enumerate(stabs_flagged_all_indices): + stabs_flagged[idx] = comb[idx_comb] + stabs_flagged_combs.append(stabs_flagged) + + # iterate over combinations: + for stabs_flagged in stabs_flagged_combs: + # get hook errors + hook_errors = np.empty((0, self.num_qubits), dtype=np.int8) + for idx, flag in enumerate(stabs_flagged): + if not flag: + hook_errors = np.vstack((hook_errors, get_hook_errors([verify.stabs[idx]]))) + if self._trivial_hook_errors(hook_errors, self.code, not self.state_prep.zero_state): + continue + # hook errors require different verification in second layer + # compute new verification + if self.use_optimal_verification: + stabs_2_list = all_gate_optimal_verification_stabilizers( + self.state_prep, + x_errors=not self.state_prep.zero_state, + min_timeout=min_timeout, + max_timeout=max_timeout, + max_ancillas=max_ancillas, + additional_faults=hook_errors, + return_all_solutions=compute_all_solutions, + )[0] + else: + stabs_2_list = heuristic_verification_stabilizers( + self.state_prep, x_errors=not self.state_prep.zero_state, additional_faults=hook_errors + )[0] + stabs_2_list = [stabs_2_list] + verify_2_list = [DeterministicVerification(stabs_2, {}) for stabs_2 in stabs_2_list] + # check if better than normal verification + anc_saved = ( + sum(stabs_flagged_all) + - sum(stabs_flagged) + + self._layers[1][0].num_ancillas_verification() + - verify_2_list[0].num_ancillas_verification() + ) + cnots_saved = ( + 2 * sum(stabs_flagged_all) + - 2 * sum(stabs_flagged) + + self._layers[1][0].num_cnots_verification() + - verify_2_list[0].num_cnots_verification() + ) + if anc_saved > 0 or (anc_saved == 0 and cnots_saved > 0): + # hook propagation is better than hook correction + # compute deterministic verification + self._recompute_hook_propagation_corrections( + verify_2_list, verify, stabs_flagged, min_timeout, max_timeout, max_ancillas + ) + + def get_solution( + self, + min_timeout: int = 1, + max_timeout: int = 3600, + max_ancillas: int | None = None, + use_optimal_verification: bool = True, + ) -> tuple[DeterministicVerification, DeterministicVerification]: + """Returns a tuple representing the first layer, second layer and hook error corrections.""" + if max_ancillas is None: + max_ancillas = self.code.Hx.shape[0] + self.code.Hz.shape[0] + self.use_optimal_verification = use_optimal_verification + + self._compute_non_det_stabs(min_timeout=min_timeout, max_timeout=max_timeout, max_ancillas=max_ancillas) + self._compute_det_corrections( + min_timeout=min_timeout, max_timeout=max_timeout, max_ancillas=max_ancillas, layer_idx=0 + ) + self._compute_hook_propagation_solutions( + min_timeout=min_timeout, max_timeout=max_timeout, max_ancillas=max_ancillas, compute_all_solutions=False + ) + + # if hook propagation is worse, compute the hook corrections and deterministic corrections + if len(self._hook_propagation_solutions) == 0: + self._compute_hook_corrections(min_timeout=min_timeout, max_timeout=max_timeout, max_ancillas=max_ancillas) + self._compute_det_corrections( + min_timeout=min_timeout, max_timeout=max_timeout, max_ancillas=max_ancillas, layer_idx=1 + ) + if len(self._layers[1]) == 0: + return self._layers[0][0], DeterministicVerification([], {}) + return self._layers[0][0], self._layers[1][0] + # else return the hook propagation solution + return self._hook_propagation_solutions[0] + + def get_global_solution( + self, + min_timeout: int = 1, + max_timeout: int = 3600, + max_ancillas: int | None = None, + ) -> tuple[DeterministicVerification, DeterministicVerification]: + """Returns the optimal non-deterministic verification stabilizers for the first and second layer regarding the number of ancillas and CNOTs.""" + if max_ancillas is None: + max_ancillas = self.code.Hx.shape[0] + self.code.Hz.shape[0] + + self._compute_non_det_stabs( + min_timeout=min_timeout, max_timeout=max_timeout, max_ancillas=max_ancillas, compute_all_solutions=True + ) + self._filter_and_stabs() + self._compute_det_corrections( + min_timeout=min_timeout, max_timeout=max_timeout, max_ancillas=max_ancillas, layer_idx=0 + ) + self._compute_hook_propagation_solutions( + min_timeout=min_timeout, max_timeout=max_timeout, max_ancillas=max_ancillas, compute_all_solutions=False + ) + + # if hook propagation is worse, compute the hook corrections and deterministic corrections + if len(self._hook_propagation_solutions) == 0: + self._compute_hook_corrections(min_timeout=min_timeout, max_timeout=max_timeout, max_ancillas=max_ancillas) + self._compute_det_corrections( + min_timeout=min_timeout, max_timeout=max_timeout, max_ancillas=max_ancillas, layer_idx=1 + ) + + # compute the best solution + best_stab_indices = [0, 0] + for layer_idx in range(2): + best_num_anc = 3 * max_ancillas + best_num_cnots = 3 * max_ancillas * self.num_qubits + for idx_verify, verify in enumerate(self._layers[layer_idx]): + num_anc = verify.num_ancillas_total() + num_cnots = verify.num_cnots_total() + if best_num_anc > num_anc or (best_num_anc == num_anc and best_num_cnots > num_cnots): + best_num_anc = num_anc + best_num_cnots = num_cnots + best_stab_indices[layer_idx] = idx_verify + if len(self._layers[1]) == 0: + return self._layers[0][best_stab_indices[0]], DeterministicVerification([], {}) + return self._layers[0][best_stab_indices[0]], self._layers[1][best_stab_indices[1]] + + # else return the hook propagation solution + + best_num_anc = 3 * max_ancillas + best_num_cnots = 3 * max_ancillas * self.num_qubits + best_solution = self._hook_propagation_solutions[0] + for verify, verify_2 in self._hook_propagation_solutions[1:]: + # check if better than overall best solution + num_anc = verify.num_ancillas_total() + verify_2.num_ancillas_total() + num_cnots = verify.num_cnots_total() + verify_2.num_cnots_total() + if best_num_anc > num_anc or (best_num_anc == num_anc and best_num_cnots > num_cnots): + best_num_anc = num_anc + best_num_cnots = num_cnots + # save the new verification + best_solution = (verify, verify_2) + return best_solution + + +def deterministic_correction( + sp_circ: StatePrepCircuit, + and_d3_verification_stabilizers: list[npt.NDArray[np.int8]], + min_timeout: int = 1, + max_timeout: int = 3600, + max_ancillas: int | None = None, + zero_state: bool = True, + additional_faults: npt.NDArray[np.int8] | None = None, +) -> DeterministicCorrection: + """Returns a deterministic verification for non-deterministic verification stabilizers. + + It computes the corresponding fault set and then solves the problem if finding optimal deterministic verification + stabilizers for each non-deterministic verification outcome separately. + + Args: + sp_circ: The state preparation circuit to compute the deterministic verification for. + and_d3_verification_stabilizers: The non-deterministic verification stabilizers to be measured. + min_timeout: The minimum time in seconds to run the verification stabilizers. + max_timeout: The maximum time in seconds to run the verification stabilizers. + max_ancillas: The maximum number of ancillas to use in the verification stabilizers. + zero_state: If True, the X errors are considered, otherwise the Z errors are considered. + additional_faults: Additional faults to consider in the fault set (e.g. hook errors). + """ + num_and_stabs = len(and_d3_verification_stabilizers) + num_qubits = sp_circ.code.n + if max_ancillas is None: + max_ancillas = sp_circ.code.Hx.shape[0] + sp_circ.code.Hz.shape[0] + + # get the fault set + if additional_faults is not None: + fault_set = sp_circ.combine_faults(additional_faults=additional_faults, x_errors=zero_state) + else: + fault_set = sp_circ.compute_fault_set(1, x_errors=zero_state) + + det_verify = {} + for verify_outcome_int in range(1, 2**num_and_stabs): + verify_outcome = _int_to_int8_array(verify_outcome_int, num_and_stabs) + logger.info( + f"Computing deterministic verification for non-det outcome {verify_outcome}: {verify_outcome_int}/{2** num_and_stabs - 1}" + ) + + # only consider errors that triggered the verification pattern + errors_filtered = np.array([ + error + for error in fault_set + if np.array_equal(verify_outcome, [np.sum(m * error) % 2 for m in and_d3_verification_stabilizers]) + ]) + + # append single-qubit errors that could have triggered the verification pattern + for qubit in range(num_qubits): + # compute error pattern of single-qubit error on qubit i + error_pattern = [ + np.sum(m * np.eye(num_qubits, dtype=np.int8)[qubit]) % 2 for m in and_d3_verification_stabilizers + ] + for i in range(num_and_stabs): + if np.array_equal(verify_outcome, error_pattern): + # if not already in the fault set + if len(errors_filtered) == 0: + errors_filtered = np.array([np.eye(num_qubits, dtype=np.int8)[qubit]]) + elif not np.any(np.all(errors_filtered == np.eye(num_qubits, dtype=np.int8)[qubit], axis=1)): + errors_filtered = np.vstack((errors_filtered, np.eye(num_qubits, dtype=np.int8)[qubit])) + else: + error_pattern[i] = 0 + + # add the no-error case for the error being on one of the verification ancillas + if np.sum(verify_outcome) == 1: + errors_filtered = np.vstack((errors_filtered, np.zeros(num_qubits, dtype=np.int8))) + # case of no errors or only one error is trivial + if errors_filtered.shape[0] == 0: + det_verify[verify_outcome_int] = ( + np.zeros((num_qubits, 0), dtype=np.int8), + {0: np.zeros(num_qubits, dtype=np.int8), 1: np.zeros(num_qubits, dtype=np.int8)}, + ) + elif errors_filtered.shape[0] == 1: + det_verify[verify_outcome_int] = ( + [np.zeros(num_qubits, dtype=np.int8)], + {0: errors_filtered[0], 1: errors_filtered[0]}, + ) + else: + det_verify[verify_outcome_int] = deterministic_correction_single_outcome( + sp_circ, errors_filtered, min_timeout, max_timeout, max_ancillas, zero_state + ) + return det_verify + + +def deterministic_correction_single_outcome( + sp_circ: StatePrepCircuit, + fault_set: npt.NDArray[np.int8], + min_timeout: int, + max_timeout: int, + max_ancillas: int | None = None, + zero_state: bool = True, +) -> Recovery: + """Returns the deterministic recovery for a set of errors. + + Geometrically increases the number of ancilla qubits until a solution is found. + Then, first the number of ancillas is optimized and then the number of CNOTs. + + Args: + sp_circ: The state preparation circuit to compute the deterministic verification for. + fault_set: The set of errors to consider for the deterministic verification. + min_timeout: The minimum time in seconds to run the verification stabilizers. + max_timeout: The maximum time in seconds to run the verification stabilizers. + max_ancillas: The maximum number of ancillas to use in the verification stabilizers. + zero_state: If True, the X errors are considered, otherwise the Z errors are considered. + """ + num_anc = 1 + num_qubits = sp_circ.code.n + if max_ancillas is None: + max_ancillas = sp_circ.code.Hx.shape[0] + sp_circ.code.Hz.shape[0] + + def _func(num_anc: int) -> Recovery | None: + return correction_stabilizers(sp_circ, fault_set, num_anc, num_anc * num_qubits, x_errors=zero_state) + + res = iterative_search_with_timeout(_func, num_anc, max_ancillas, min_timeout, max_timeout) + + assert res is not None, "No deterministic verification found." + assert res[0], "No deterministic verification found." + optimal_det_verify: Recovery = res[0] + + num_anc = res[1] + logger.info(f"Found deterministic verification with {num_anc} ancillas.") + + while num_anc > 1: + logger.info(f"Trying to reduce the number of ancillas to {num_anc - 1}.") + det_verify: Recovery | str | None = run_with_timeout(_func, num_anc - 1, timeout=max_timeout) + if det_verify and not isinstance(det_verify, str): + optimal_det_verify = det_verify + num_anc -= 1 + else: + break + logger.info(f"Optimal number of ancillas: {num_anc}.") + + # try to reduce the number of CNOTs + def min_cnot_func(num_cnots: int) -> Recovery | None: + return correction_stabilizers(sp_circ, fault_set, num_anc, num_cnots, x_errors=zero_state) + + num_cnots = 2 + while num_cnots > 1: + # set the max number of CNOTs to the number returned by the previous step + num_cnots = np.sum([np.sum(m) for m in optimal_det_verify[0]]) + + logger.info(f"Trying to reduce the number of CNOTs to {num_cnots - 1}.") + det_verify = run_with_timeout(min_cnot_func, num_cnots - 1, timeout=max_timeout) + if det_verify and not isinstance(det_verify, str): + optimal_det_verify = det_verify + num_cnots -= 1 + else: + break + logger.info(f"Optimal number of CNOTs: {num_cnots}.") + return optimal_det_verify + + +def correction_stabilizers( + sp_circ: StatePrepCircuit, + fault_set: npt.NDArray[np.int8], + num_anc: int, + num_cnot: int, + x_errors: bool = True, +) -> Recovery | None: + """Return deterministic verification stabilizers with corresponding corrections using z3.""" + gens = sp_circ.z_checks if x_errors else sp_circ.x_checks + correction_gens = sp_circ.x_checks if x_errors else sp_circ.z_checks + + n_gens = gens.shape[0] + n_corr_gens = correction_gens.shape[0] + n_qubits = sp_circ.code.n + n_errors = fault_set.shape[0] + + # Measurements are written as sums of generators + # The variables indicate which generators are non-zero in the sum + measurement_vars = [[z3.Bool(f"m_{anc}_{i}") for i in range(n_gens)] for anc in range(num_anc)] + measurement_stabs = [vars_to_stab(vars_, gens) for vars_ in measurement_vars] + + # create "stabilizer degree of freedom" variables + free_var = [[z3.Bool(f"free_{e}_{g}") for g in range(n_corr_gens)] for e in range(n_errors)] + free_stabs = [vars_to_stab(vars_, correction_gens) for vars_ in free_var] + + # correction variables for each possible deterministic verification outcome + corrections = [[z3.Bool(f"c_{anc}_{i}") for i in range(n_qubits)] for anc in range(2**num_anc)] + + solver = z3.Solver() + + # for each error, the pattern is computed and the corresponding correction is applied + for idx_error, error in enumerate(fault_set): + error_pattern = [odd_overlap(measurement, error) for measurement in measurement_stabs] + for det_pattern, correction in enumerate(corrections): + det_pattern_bool = _int_to_bool_array(det_pattern, num_anc) + # check if error triggers the pattern + triggered = symbolic_vector_eq(error_pattern, det_pattern_bool) + # constraint: weight(error + correction + arbitrary free stabilizer) <= 1 + final_error = [ + z3.Xor(correction[i] if error[i] == 0 else z3.Not(correction[i]), free_stabs[idx_error][i]) + for i in range(n_qubits) + ] + solver.add(z3.If(triggered, z3.Sum(final_error) <= 1, True)) + + # assert that not too many CNOTs are used + solver.add(z3.PbLe([(measurement[q], 1) for measurement in measurement_stabs for q in range(n_qubits)], num_cnot)) + + if solver.check() == z3.sat: + return _extract_measurement_and_correction( + solver.model(), gens, correction_gens, n_qubits, num_anc, measurement_vars, corrections + ) + return None + + +def _extract_measurement_and_correction( + model: z3.Model, + gens: list[npt.NDArray[np.int8]], + correction_gens: list[npt.NDArray[np.int8]], + n_qubits: int, + num_anc: int, + measurement_vars: list[list[z3.BoolRef]], + corrections: list[list[z3.BoolRef]], +) -> Recovery: + """Extract deterministic verification stabilizers and corrections from sat z3 solver.""" + # get measurements + actual_measurements = [] + for m in measurement_vars: + v = np.zeros(len(gens[0]), dtype=np.int8) + for g in range(len(gens)): + if model[m[g]]: + v += gens[g] + actual_measurements.append(v % 2) + + # get corrections for each pattern + actual_corrections = {} + for outcome in range(2**num_anc): + actual_correction = np.array( + [int(bool(model[corrections[outcome][i]])) for i in range(n_qubits)], dtype=np.int8 + ) + + if np.sum(actual_correction) == 0: + actual_corrections[outcome] = actual_correction + else: + actual_corrections[outcome] = coset_leader(actual_correction, np.array(correction_gens)) + return actual_measurements, actual_corrections + + +def _int_to_bool_array(num: int, num_anc: int) -> npt.NDArray[np.bool_]: + """Convert an integer to a boolean array of length num_anc corresponding to the binary representation of the integer.""" + return np.array([bool(num & (1 << i)) for i in range(num_anc)])[::-1] + + +def _int_to_int8_array(num: int, n_qubits: int) -> npt.NDArray[np.int8]: + """Convert an integer to an int8 array of length n_qubits.""" + return np.array([int(bool(num & (1 << i))) for i in range(n_qubits)], dtype=np.int8)[::-1] diff --git a/src/mqt/qecc/circuit_synthesis/stateprep_eval/estimate_logical_error_rate.py b/src/mqt/qecc/circuit_synthesis/stateprep_eval/estimate_logical_error_rate.py index 1483ba08..b6b13bde 100644 --- a/src/mqt/qecc/circuit_synthesis/stateprep_eval/estimate_logical_error_rate.py +++ b/src/mqt/qecc/circuit_synthesis/stateprep_eval/estimate_logical_error_rate.py @@ -93,8 +93,7 @@ def main() -> None: sim = NoisyNDFTStatePrepSimulator( qc, code=code, p=args.p_error, zero_state=args.zero_state, parallel_gates=not args.no_parallel_gates ) - res = sim.logical_error_rate(min_errors=args.n_errors) - print(",".join([str(x) for x in res])) # noqa: T201 + sim.logical_error_rate(min_errors=args.n_errors) if __name__ == "__main__": diff --git a/test/python/circuit_synthesis/test_deterministic.py b/test/python/circuit_synthesis/test_deterministic.py new file mode 100644 index 00000000..968998c4 --- /dev/null +++ b/test/python/circuit_synthesis/test_deterministic.py @@ -0,0 +1,155 @@ +"""Test synthesis and simulation of deterministic FT state preparation circuits.""" + +from __future__ import annotations + +from typing import TYPE_CHECKING + +import numpy as np +import pytest +from ldpc import mod2 +from qsample import noise + +from mqt.qecc import CSSCode +from mqt.qecc.circuit_synthesis import ( + DeterministicVerificationHelper, + NoisyDFTStatePrepSimulator, + heuristic_prep_circuit, +) + +if TYPE_CHECKING: + import numpy.typing as npt + + from mqt.qecc.circuit_synthesis import DeterministicVerification, StatePrepCircuit + +# Simulation parameters +err_params = {"q": [1e-4, 5e-4, 1e-3, 5e-3, 1e-2, 5e-2, 1e-1, 5e-1]} +err_model = noise.E1_1 +shots_dss = 4000 +p_max = {"q": 0.01} +L = 3 + + +@pytest.fixture +def steane_code_sp_plus() -> StatePrepCircuit: + """Return a non-ft state preparation circuit for the Steane code.""" + steane_code = CSSCode.from_code_name("Steane") + sp_circ = heuristic_prep_circuit(steane_code, zero_state=False) + sp_circ.compute_fault_sets() + return sp_circ + + +@pytest.fixture +def css_11_1_3_code_sp() -> StatePrepCircuit: + """Return a non-ft state preparation circuit for the 11_1_3 code.""" + check_matrix = np.array([ + [1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0], + [0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1], + [0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0], + [0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0], + [0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1], + ]) + code = CSSCode(distance=3, Hx=check_matrix, Hz=check_matrix) + sp_circ = heuristic_prep_circuit(code) + sp_circ.compute_fault_sets() + return sp_circ + + +def in_span(m: npt.NDArray[np.int_], v: npt.NDArray[np.int_]) -> bool: + """Check if a vector is in the row space of a matrix.""" + return bool(mod2.rank(np.vstack((m, v))) == mod2.rank(m)) + + +def assert_statistics( + verify: DeterministicVerification, + num_ancillas_verification: int, + num_cnots_verification: int, + num_ancillas_correction: int, + num_cnots_correction: int, + num_ancillas_hooks: int = 0, + num_cnots_hooks: int = 0, + num_ancillas_hook_corrections: int = 0, + num_cnots_hook_corrections: int = 0, +) -> None: + """Assert that the statistics of a deterministic verification are correct.""" + assert verify.num_ancillas_verification() == num_ancillas_verification + assert verify.num_cnots_verification() == num_cnots_verification + assert verify.num_ancillas_correction() <= num_ancillas_correction + assert verify.num_cnots_correction() <= num_cnots_correction + assert verify.num_ancillas_hooks() == num_ancillas_hooks + assert verify.num_cnots_hooks() == num_cnots_hooks + assert verify.num_ancillas_hook_corrections() == num_ancillas_hook_corrections + assert verify.num_cnots_hook_corrections() == num_cnots_hook_corrections + + +def assert_stabs(verify: DeterministicVerification, code: CSSCode, z_stabs: bool) -> None: + """Assert that the measurement stabs of a deterministic verification are correct.""" + checks = np.vstack((code.Hz, code.Lz)) + checks_other = np.vstack((code.Hx, code.Lx)) + if not z_stabs: + checks, checks_other = checks_other, checks + + for stab in verify.stabs: + assert in_span(checks, stab) + for correction in verify.det_correction.values(): + stabs, _ = correction + for stab in stabs: + assert in_span(checks, stab) + for hook in verify.hook_corrections: + if not hook: + continue + for correction in hook.values(): + stabs, _ = correction + for stab in stabs: + assert in_span(checks_other, stab) + + +def assert_scaling(simulation_results: list[npt.NDArray[np.float64]]) -> None: + """Assert that the logical error rates scales approximately quadratically.""" + dss_upper_bound = simulation_results[-2] + x = np.log10(err_params["q"]) + y = np.log10(dss_upper_bound) + m = np.diff(y) / np.diff(x) + assert np.average(m[:3]) > 1.5 + + +def test_11_1_3_det_verification(css_11_1_3_code_sp: StatePrepCircuit) -> None: + """Test deterministic verification of the 11_1_3 code state preparation circuit.""" + verify_helper = DeterministicVerificationHelper(css_11_1_3_code_sp) + verify_x, verify_z = verify_helper.get_solution() + + # as this is not optimal it might be possible that different verification result in different corrections + assert_statistics(verify_x, 2, 8, 4, 14, 0, 0) + assert_stabs(verify_x, css_11_1_3_code_sp.code, z_stabs=True) + + assert_statistics(verify_z, 1, 4, 1, 4, 1, 2, 1, 3) + assert_stabs(verify_z, css_11_1_3_code_sp.code, z_stabs=False) + + # perform simulation + simulator = NoisyDFTStatePrepSimulator( + css_11_1_3_code_sp.circ, (verify_x, verify_z), css_11_1_3_code_sp.code, err_model + ) + simulation_results = simulator.dss_logical_error_rates(err_params, p_max, L, shots_dss) + assert_scaling(simulation_results) + + +def test_steane_det_verification(steane_code_sp_plus: StatePrepCircuit) -> None: + """Test deterministic verification of the Steane code state preparation circuit.""" + verify_helper = DeterministicVerificationHelper(steane_code_sp_plus) + verify_z_opt, verify_x_opt = verify_helper.get_solution() + verify_z_global, verify_x_global = verify_helper.get_global_solution() + + # Check right statistics + for verify_x, verify_z in zip((verify_x_opt, verify_x_global), (verify_z_opt, verify_z_global)): + assert_statistics(verify_z, 1, 3, 1, 3, 0, 0) + assert_stabs(verify_z, steane_code_sp_plus.code, z_stabs=False) + + # second verification is trivial + assert verify_x.num_ancillas_total() == 0 + assert verify_x.num_cnots_total() == 0 + + # perform simulation + simulator = NoisyDFTStatePrepSimulator( + steane_code_sp_plus.circ, (verify_z, verify_x), steane_code_sp_plus.code, err_model, False + ) + simulation_results = simulator.dss_logical_error_rates(err_params, p_max, L, shots_dss) + assert_scaling(simulation_results) diff --git a/uv.lock b/uv.lock index 003f07dc..33ccdccf 100644 --- a/uv.lock +++ b/uv.lock @@ -24,6 +24,27 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/89/03/a851e84fcbb85214dc637b6378121ef9a0dd61b4c65264675d8a5c9b1ae7/antlr4_python3_runtime-4.13.2-py3-none-any.whl", hash = "sha256:fe3835eb8d33daece0e799090eda89719dbccee7aa39ef94eed3818cafa5a7e8", size = 144462 }, ] +[[package]] +name = "anytree" +version = "2.12.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f9/44/2dd9c5d0c3befe899738b930aa056e003b1441bfbf34aab8fce90b2b7dea/anytree-2.12.1.tar.gz", hash = "sha256:244def434ccf31b668ed282954e5d315b4e066c4940b94aff4a7962d85947830", size = 31110 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/fb/ff946843e6b55ae9fda84df3964d6c233cd2261dface789f5be02ab79bc5/anytree-2.12.1-py3-none-any.whl", hash = "sha256:5ea9e61caf96db1e5b3d0a914378d2cd83c269dfce1fb8242ce96589fa3382f0", size = 44914 }, +] + +[[package]] +name = "appdirs" +version = "1.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/d8/05696357e0311f5b5c316d7b95f46c669dd9c15aaeecbb48c7d0aeb88c40/appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41", size = 13470 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/00/2344469e2084fb287c2e0b57b72910309874c3245463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128", size = 9566 }, +] + [[package]] name = "appnope" version = "0.1.4" @@ -77,15 +98,14 @@ wheels = [ [[package]] name = "bleach" -version = "6.1.0" +version = "6.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "six" }, { name = "webencodings" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6d/10/77f32b088738f40d4f5be801daa5f327879eadd4562f36a2b5ab975ae571/bleach-6.1.0.tar.gz", hash = "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe", size = 202119 } +sdist = { url = "https://files.pythonhosted.org/packages/76/9a/0e33f5054c54d349ea62c277191c020c2d6ef1d65ab2cb1993f91ec846d1/bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f", size = 203083 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ea/63/da7237f805089ecc28a3f36bca6a21c31fcbc2eb380f3b8f1be3312abd14/bleach-6.1.0-py3-none-any.whl", hash = "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6", size = 162750 }, + { url = "https://files.pythonhosted.org/packages/fc/55/96142937f66150805c25c4d0f31ee4132fd33497753400734f9dfdcbdc66/bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e", size = 163406 }, ] [[package]] @@ -261,6 +281,17 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/bf/9b/08c0432272d77b04803958a4598a51e2a4b51c06640af8b8f0f908c18bf2/charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", size = 49446 }, ] +[[package]] +name = "chp-sim" +version = "0.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/30/7c/8cd37f6f0bf0eae8c63b4366eddf84a7df230930fd5594da538c42810557/chp_sim-0.1.1-py3-none-any.whl", hash = "sha256:760cbab16cbd6d96923d2a1db790158b0d9f23ceacf1ae56220492b1b5941524", size = 11172 }, +] + [[package]] name = "click" version = "8.1.7" @@ -371,71 +402,71 @@ wheels = [ [[package]] name = "coverage" -version = "7.6.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/12/50/51ec496dd2ad84ca3e5f67de23f6de630be923dd6f5aed31bb60eda540e5/coverage-7.6.3.tar.gz", hash = "sha256:bb7d5fe92bd0dc235f63ebe9f8c6e0884f7360f88f3411bfed1350c872ef2054", size = 798337 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d3/c9/d0bb2e5720ea2182d8c22e15a74a4a0b5e8cfda2773dc8c524ff75a3f392/coverage-7.6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6da42bbcec130b188169107ecb6ee7bd7b4c849d24c9370a0c884cf728d8e976", size = 206590 }, - { url = "https://files.pythonhosted.org/packages/00/b1/cd2e55ed5e88f157b97be34c5a0689668f2a1126eb59e9f17f37d507b275/coverage-7.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c222958f59b0ae091f4535851cbb24eb57fc0baea07ba675af718fb5302dddb2", size = 207022 }, - { url = "https://files.pythonhosted.org/packages/86/3b/f3bf339f2e1a30e81685bb2f90d7e4b3b50e102162ca83524e1f8ab0a6a9/coverage-7.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab84a8b698ad5a6c365b08061920138e7a7dd9a04b6feb09ba1bfae68346ce6d", size = 235464 }, - { url = "https://files.pythonhosted.org/packages/37/d0/ede5afa443e324d0dc19f1b9a1f9ec836cd2755d1735104ef6e8ab65dd8f/coverage-7.6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70a6756ce66cd6fe8486c775b30889f0dc4cb20c157aa8c35b45fd7868255c5c", size = 233367 }, - { url = "https://files.pythonhosted.org/packages/97/9b/84dde4f3307227cc69ed579ba49efc3f38cbe608793a93e163be801eb72c/coverage-7.6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c2e6fa98032fec8282f6b27e3f3986c6e05702828380618776ad794e938f53a", size = 234528 }, - { url = "https://files.pythonhosted.org/packages/b8/0c/b3a330b57d8ce70b08e383005f948ad78397f569edb75cd9b9e7f3d29932/coverage-7.6.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:921fbe13492caf6a69528f09d5d7c7d518c8d0e7b9f6701b7719715f29a71e6e", size = 233624 }, - { url = "https://files.pythonhosted.org/packages/72/b5/c068657f338cb26dfa0c8c4cec210e56c416d3f5a1d124ebc6dc5c1c5c54/coverage-7.6.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:6d99198203f0b9cb0b5d1c0393859555bc26b548223a769baf7e321a627ed4fc", size = 232085 }, - { url = "https://files.pythonhosted.org/packages/50/c9/a96b5c1865a5a84380bd8f74a27e9972c9f2f5b17c854662242e473c6afd/coverage-7.6.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:87cd2e29067ea397a47e352efb13f976eb1b03e18c999270bb50589323294c6e", size = 233218 }, - { url = "https://files.pythonhosted.org/packages/9f/bb/c05f8597095e713c73d2b9c142a914ee6bfea096afcbb37923a0d956c9b2/coverage-7.6.3-cp310-cp310-win32.whl", hash = "sha256:a3328c3e64ea4ab12b85999eb0779e6139295bbf5485f69d42cf794309e3d007", size = 209313 }, - { url = "https://files.pythonhosted.org/packages/40/ae/b0f027a7ea045e2c88f520a15ef73371cdf8ab544a109f7b8a9338d01e7d/coverage-7.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:bca4c8abc50d38f9773c1ec80d43f3768df2e8576807d1656016b9d3eeaa96fd", size = 210124 }, - { url = "https://files.pythonhosted.org/packages/0f/77/8e5c0c6027ce0d06d0cb9569d372fb94247b5a49a7ef8bba288956696dcb/coverage-7.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c51ef82302386d686feea1c44dbeef744585da16fcf97deea2a8d6c1556f519b", size = 206698 }, - { url = "https://files.pythonhosted.org/packages/af/ca/0fe701e0bf0ba3062466ceeccb9857caa492886375bbf6eabeab118a4dd0/coverage-7.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0ca37993206402c6c35dc717f90d4c8f53568a8b80f0bf1a1b2b334f4d488fba", size = 207147 }, - { url = "https://files.pythonhosted.org/packages/78/4c/2705183ff384b1612170b70fb716dcd24941f9c71b02860f6bbdf7f2f780/coverage-7.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c77326300b839c44c3e5a8fe26c15b7e87b2f32dfd2fc9fee1d13604347c9b38", size = 239085 }, - { url = "https://files.pythonhosted.org/packages/1e/00/ada23862b99bf25218a74a116011982e20d1d4740fe4ad009c08f1090a5b/coverage-7.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e484e479860e00da1f005cd19d1c5d4a813324e5951319ac3f3eefb497cc549", size = 236492 }, - { url = "https://files.pythonhosted.org/packages/09/ec/c3c4dd9cdcd97f127141dfa348c737912d32130e6129e61645736106c341/coverage-7.6.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c6c0f4d53ef603397fc894a895b960ecd7d44c727df42a8d500031716d4e8d2", size = 238356 }, - { url = "https://files.pythonhosted.org/packages/f4/c3/5f4e50d1ecb0cfab9f8b988df65d2ae800299bc0e4bda8f508e06717fa49/coverage-7.6.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:37be7b5ea3ff5b7c4a9db16074dc94523b5f10dd1f3b362a827af66a55198175", size = 237281 }, - { url = "https://files.pythonhosted.org/packages/0d/ef/8650eea57f9a602ef7ddaa846f1aa760704cb6032c23d10b051b304ed4a3/coverage-7.6.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:43b32a06c47539fe275106b376658638b418c7cfdfff0e0259fbf877e845f14b", size = 235918 }, - { url = "https://files.pythonhosted.org/packages/76/f5/9e5b4cda520e07ff0e2bb61f6176cd9bf1a2a77c2f89caf8005ae9eba1d3/coverage-7.6.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ee77c7bef0724165e795b6b7bf9c4c22a9b8468a6bdb9c6b4281293c6b22a90f", size = 236692 }, - { url = "https://files.pythonhosted.org/packages/af/ad/b62d2f0367b5eba16aa950c9a4e691aaa59b153ba0d038ad15bd92b67ce2/coverage-7.6.3-cp311-cp311-win32.whl", hash = "sha256:43517e1f6b19f610a93d8227e47790722c8bf7422e46b365e0469fc3d3563d97", size = 209285 }, - { url = "https://files.pythonhosted.org/packages/87/66/2fc70e76d542e003da9c0321470f900c7021464f0617c5166b47c8493ca3/coverage-7.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:04f2189716e85ec9192df307f7c255f90e78b6e9863a03223c3b998d24a3c6c6", size = 210117 }, - { url = "https://files.pythonhosted.org/packages/11/3d/b88ca9d63404ed1d2942236757d876c5fb30ab300fc6e68d6e1e8928dc34/coverage-7.6.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:27bd5f18d8f2879e45724b0ce74f61811639a846ff0e5c0395b7818fae87aec6", size = 206890 }, - { url = "https://files.pythonhosted.org/packages/90/d1/11307a6f28dc496ff8ee17258e20ecca1c48b537113146a114aa4e29d4e7/coverage-7.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d546cfa78844b8b9c1c0533de1851569a13f87449897bbc95d698d1d3cb2a30f", size = 207132 }, - { url = "https://files.pythonhosted.org/packages/61/5d/be9f27811e767b8bd8b5836c5f05708263cc1f2c24d8244f36a5f7baee75/coverage-7.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9975442f2e7a5cfcf87299c26b5a45266ab0696348420049b9b94b2ad3d40234", size = 240146 }, - { url = "https://files.pythonhosted.org/packages/37/0f/0b61bfa7aada98936cc433c8bd2e9f90c3fdc02607bdade04ffa1b8f83ba/coverage-7.6.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:583049c63106c0555e3ae3931edab5669668bbef84c15861421b94e121878d3f", size = 237177 }, - { url = "https://files.pythonhosted.org/packages/d3/d4/83dfe1cdabf7f574217ce431c8506c80c6afa5c4056b1159282ba54bb6f2/coverage-7.6.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2341a78ae3a5ed454d524206a3fcb3cec408c2a0c7c2752cd78b606a2ff15af4", size = 239248 }, - { url = "https://files.pythonhosted.org/packages/05/0a/f53ab3bf80bcf6a17bece8851d4687cf7e424505cf4ce7a3c4cb41b52d96/coverage-7.6.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a4fb91d5f72b7e06a14ff4ae5be625a81cd7e5f869d7a54578fc271d08d58ae3", size = 238737 }, - { url = "https://files.pythonhosted.org/packages/f7/81/74d797dbedf62b3d7f66af3277b7fc6be6430ed45df701e1ae1197ceb70d/coverage-7.6.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e279f3db904e3b55f520f11f983cc8dc8a4ce9b65f11692d4718ed021ec58b83", size = 237039 }, - { url = "https://files.pythonhosted.org/packages/ae/71/1750be153f73eb0e8b9a0f08c8cdb90f6a7c2a25b1795d35e313dd2d78f5/coverage-7.6.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aa23ce39661a3e90eea5f99ec59b763b7d655c2cada10729ed920a38bfc2b167", size = 238703 }, - { url = "https://files.pythonhosted.org/packages/f6/2e/a60711bb0adcc849c61d9db9574f5d10419cfc73c43cee26a7de6c92f2e4/coverage-7.6.3-cp312-cp312-win32.whl", hash = "sha256:52ac29cc72ee7e25ace7807249638f94c9b6a862c56b1df015d2b2e388e51dbd", size = 209521 }, - { url = "https://files.pythonhosted.org/packages/d9/26/67a744fcc5de4433a1ebae2b227c66f744fb0d17ad4725b47cf24f7a4c2f/coverage-7.6.3-cp312-cp312-win_amd64.whl", hash = "sha256:40e8b1983080439d4802d80b951f4a93d991ef3261f69e81095a66f86cf3c3c6", size = 210304 }, - { url = "https://files.pythonhosted.org/packages/8c/8f/265a5f18ab2cb1cae3cf6d64e8fd2708ac66a57b7068963077456ec85294/coverage-7.6.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9134032f5aa445ae591c2ba6991d10136a1f533b1d2fa8f8c21126468c5025c6", size = 206919 }, - { url = "https://files.pythonhosted.org/packages/d0/d8/59b41c21237da09c2c09cfd594883f43e3f437d9d602afe09a23d8c3b768/coverage-7.6.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:99670790f21a96665a35849990b1df447993880bb6463a0a1d757897f30da929", size = 207175 }, - { url = "https://files.pythonhosted.org/packages/19/e8/9a18a78779e5c9d51c8c60de4e9e06c91a03f529fa5b31993b85f364a114/coverage-7.6.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dc7d6b380ca76f5e817ac9eef0c3686e7834c8346bef30b041a4ad286449990", size = 239695 }, - { url = "https://files.pythonhosted.org/packages/23/d5/6100bb2b104365634068aad82ec332663a32c7572f4bbe24825e79ecb712/coverage-7.6.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f7b26757b22faf88fcf232f5f0e62f6e0fd9e22a8a5d0d5016888cdfe1f6c1c4", size = 236840 }, - { url = "https://files.pythonhosted.org/packages/d8/11/7e5ac48885f4fed8edb4624425b60405c96c5cf92c2260305eeb6d179897/coverage-7.6.3-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c59d6a4a4633fad297f943c03d0d2569867bd5372eb5684befdff8df8522e39", size = 238829 }, - { url = "https://files.pythonhosted.org/packages/31/6c/4943c562bc8f541dbc466181c615743fe7987433b9ac00301b4f2c8bce60/coverage-7.6.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f263b18692f8ed52c8de7f40a0751e79015983dbd77b16906e5b310a39d3ca21", size = 238495 }, - { url = "https://files.pythonhosted.org/packages/b2/21/ff415e195eafc86ad6e3e6bdb04e6ebd2caa432d27ec261c0a6d849a171e/coverage-7.6.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:79644f68a6ff23b251cae1c82b01a0b51bc40c8468ca9585c6c4b1aeee570e0b", size = 236578 }, - { url = "https://files.pythonhosted.org/packages/28/81/08c1c7d2ecc14036b6fb71433ce51fb0942b39ef2bbb654fda82e4e16004/coverage-7.6.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:71967c35828c9ff94e8c7d405469a1fb68257f686bca7c1ed85ed34e7c2529c4", size = 238418 }, - { url = "https://files.pythonhosted.org/packages/c6/50/912a47a6fa3582c6694e0acdb4c5cf1264950a400a3a9d35a5552e7a91cd/coverage-7.6.3-cp313-cp313-win32.whl", hash = "sha256:e266af4da2c1a4cbc6135a570c64577fd3e6eb204607eaff99d8e9b710003c6f", size = 209584 }, - { url = "https://files.pythonhosted.org/packages/49/cb/44402ef105d8a77849fa019b975c9e35b184498ec7a6070c30deaad47fab/coverage-7.6.3-cp313-cp313-win_amd64.whl", hash = "sha256:ea52bd218d4ba260399a8ae4bb6b577d82adfc4518b93566ce1fddd4a49d1dce", size = 210316 }, - { url = "https://files.pythonhosted.org/packages/f6/c4/1e9b42abe9d381585d6f9384bbfbfce464234261e3e331ab98eeef3fc11a/coverage-7.6.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8d4c6ea0f498c7c79111033a290d060c517853a7bcb2f46516f591dab628ddd3", size = 207664 }, - { url = "https://files.pythonhosted.org/packages/29/74/62605f094604b85c98962fe29134e8f9df200106b5100a2db236f5c03993/coverage-7.6.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:331b200ad03dbaa44151d74daeb7da2cf382db424ab923574f6ecca7d3b30de3", size = 207936 }, - { url = "https://files.pythonhosted.org/packages/ff/8c/bbeadb2f3236fdd62c6c267096c2524af9a59ee0a124b6b237a943d274e8/coverage-7.6.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54356a76b67cf8a3085818026bb556545ebb8353951923b88292556dfa9f812d", size = 250658 }, - { url = "https://files.pythonhosted.org/packages/3a/a0/46fe77ef9d133867bf639ee68ebbcae86aa340d9e46900fbdf566557c9bf/coverage-7.6.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ebec65f5068e7df2d49466aab9128510c4867e532e07cb6960075b27658dca38", size = 246370 }, - { url = "https://files.pythonhosted.org/packages/9c/ba/b5722bec74017eaa1c5d35377f40a2a434e6c864cf3f1b46cddb62657642/coverage-7.6.3-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d33a785ea8354c480515e781554d3be582a86297e41ccbea627a5c632647f2cd", size = 248732 }, - { url = "https://files.pythonhosted.org/packages/a1/d1/1264cc9ad5079439f438fd49080cbb57a8c6c589919872eaacdbc30d3b1a/coverage-7.6.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f7ddb920106bbbbcaf2a274d56f46956bf56ecbde210d88061824a95bdd94e92", size = 248221 }, - { url = "https://files.pythonhosted.org/packages/9d/b5/eacd2cfcb3406725e98bc6b9f1ac6794188b8231148f71281ffdcf5968e0/coverage-7.6.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:70d24936ca6c15a3bbc91ee9c7fc661132c6f4c9d42a23b31b6686c05073bde5", size = 246109 }, - { url = "https://files.pythonhosted.org/packages/56/71/0f0a713bf452ae3e6dd126841a25a0bd3a75105f2666c32ad1fb28b791da/coverage-7.6.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c30e42ea11badb147f0d2e387115b15e2bd8205a5ad70d6ad79cf37f6ac08c91", size = 247391 }, - { url = "https://files.pythonhosted.org/packages/ad/dd/29fb9c6b94a52da04613e5005d0a8875e57ca76b570d2625964fd92d7fab/coverage-7.6.3-cp313-cp313t-win32.whl", hash = "sha256:365defc257c687ce3e7d275f39738dcd230777424117a6c76043459db131dd43", size = 210230 }, - { url = "https://files.pythonhosted.org/packages/61/17/efb9ca2a5f9ccf8af267ff2c02ad976a2dc29f9b3c63209e2a89588d7f95/coverage-7.6.3-cp313-cp313t-win_amd64.whl", hash = "sha256:23bb63ae3f4c645d2d82fa22697364b0046fbafb6261b258a58587441c5f7bd0", size = 211380 }, - { url = "https://files.pythonhosted.org/packages/44/cf/ec610fdae6cacd6be3cc5ddf66207b4a6770eb3e9b5b4902bd34356c4da3/coverage-7.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:da29ceabe3025a1e5a5aeeb331c5b1af686daab4ff0fb4f83df18b1180ea83e2", size = 206588 }, - { url = "https://files.pythonhosted.org/packages/05/af/819d441400d71fee044940e55ea098bb12a8d662965d12eaadd32911799b/coverage-7.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:df8c05a0f574d480947cba11b947dc41b1265d721c3777881da2fb8d3a1ddfba", size = 207022 }, - { url = "https://files.pythonhosted.org/packages/1a/55/2dad75d1869278c4fc07d644fca77462e724bbc24888f425c2399dbe3805/coverage-7.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec1e3b40b82236d100d259854840555469fad4db64f669ab817279eb95cd535c", size = 235060 }, - { url = "https://files.pythonhosted.org/packages/38/d3/36e07e96cadb8c6c68226dfee8643e518483951885e61f565d15cd2882fa/coverage-7.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4adeb878a374126f1e5cf03b87f66279f479e01af0e9a654cf6d1509af46c40", size = 232979 }, - { url = "https://files.pythonhosted.org/packages/a0/5b/8a4029ab21352e397dbfe5515699f9f7f0018f0838f4ecbb84b848a0df99/coverage-7.6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43d6a66e33b1455b98fc7312b124296dad97a2e191c80320587234a77b1b736e", size = 234112 }, - { url = "https://files.pythonhosted.org/packages/83/81/2238abf2467435bb6200f6347e9fe190747f9821b27c9433f0b978d5d030/coverage-7.6.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1990b1f4e2c402beb317840030bb9f1b6a363f86e14e21b4212e618acdfce7f6", size = 233266 }, - { url = "https://files.pythonhosted.org/packages/42/07/a5d8e24d89458784eee903800983ff34fb54fcdaf4cdec05b98f3a9aec30/coverage-7.6.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:12f9515d875859faedb4144fd38694a761cd2a61ef9603bf887b13956d0bbfbb", size = 231740 }, - { url = "https://files.pythonhosted.org/packages/c8/39/f44344dd77c535f3264a6e6e95bef4e0bd53366e1eb82ce6980a17f1b0c4/coverage-7.6.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:99ded130555c021d99729fabd4ddb91a6f4cc0707df4b1daf912c7850c373b13", size = 232738 }, - { url = "https://files.pythonhosted.org/packages/67/a5/b8ff75aba81839c7a85f764f15214076b9e24655e196a63bc5e2053fa040/coverage-7.6.3-cp39-cp39-win32.whl", hash = "sha256:c3a79f56dee9136084cf84a6c7c4341427ef36e05ae6415bf7d787c96ff5eaa3", size = 209313 }, - { url = "https://files.pythonhosted.org/packages/1d/c0/4346b0a287b72c917ca9cbc7230d73035082ab2b5692830929967917035e/coverage-7.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:aac7501ae73d4a02f4b7ac8fcb9dc55342ca98ffb9ed9f2dfb8a25d53eda0e4d", size = 210091 }, - { url = "https://files.pythonhosted.org/packages/29/f7/80e7a36288785bf0a44f6fa2a778dae85d34d8761f4c0996066f3756bdf5/coverage-7.6.3-pp39.pp310-none-any.whl", hash = "sha256:b9853509b4bf57ba7b1f99b9d866c422c9c5248799ab20e652bbb8a184a38181", size = 198831 }, +version = "7.6.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bf/68/26895f8b068e384b1ec9ab122565b913b735e6b4c618b3d265a280607edc/coverage-7.6.7.tar.gz", hash = "sha256:d79d4826e41441c9a118ff045e4bccb9fdbdcb1d02413e7ea6eb5c87b5439d24", size = 799938 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/c9/84898713e61208ddbe71b991d8f311d9ca175629ce5f1a46018acc643572/coverage-7.6.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:108bb458827765d538abcbf8288599fee07d2743357bdd9b9dad456c287e121e", size = 206875 }, + { url = "https://files.pythonhosted.org/packages/f0/69/7dfd65f0e284617f72d974f6dfedc7bc16f86172e5bc6ebc8b63430263f3/coverage-7.6.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c973b2fe4dc445cb865ab369df7521df9c27bf40715c837a113edaa2aa9faf45", size = 207307 }, + { url = "https://files.pythonhosted.org/packages/d1/ce/6e356b2bc751bdaadd77c714336b98ec45ccaf0cfe085b6b25d34f7cceb8/coverage-7.6.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c6b24007c4bcd0b19fac25763a7cac5035c735ae017e9a349b927cfc88f31c1", size = 235744 }, + { url = "https://files.pythonhosted.org/packages/35/49/a7ab3d5a507d32344994cab856784e8d603c0b698070f7667c3ae41e8e50/coverage-7.6.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:acbb8af78f8f91b3b51f58f288c0994ba63c646bc1a8a22ad072e4e7e0a49f1c", size = 233645 }, + { url = "https://files.pythonhosted.org/packages/bd/41/de07328d2e79916fcc6cd53a5a1d18d163483519ab95f7f60fe15276811c/coverage-7.6.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad32a981bcdedb8d2ace03b05e4fd8dace8901eec64a532b00b15217d3677dd2", size = 234807 }, + { url = "https://files.pythonhosted.org/packages/e4/cc/2a669319b1295e0c52e8cfbbb163b32188b62f3b0bbe7014ef402b24b7cf/coverage-7.6.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:34d23e28ccb26236718a3a78ba72744212aa383141961dd6825f6595005c8b06", size = 233902 }, + { url = "https://files.pythonhosted.org/packages/68/71/a1bb90cb177358a2d364b3968a2069225f614d6824c3d959dee688ca0902/coverage-7.6.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e25bacb53a8c7325e34d45dddd2f2fbae0dbc230d0e2642e264a64e17322a777", size = 232363 }, + { url = "https://files.pythonhosted.org/packages/eb/dc/87551219d3437214523d1c7de0a717bead7a3369ed9bae05a7fd2854476f/coverage-7.6.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:af05bbba896c4472a29408455fe31b3797b4d8648ed0a2ccac03e074a77e2314", size = 233493 }, + { url = "https://files.pythonhosted.org/packages/ca/a4/d74ae3a3fb9e55fe5d9b811ce68a6bd8df3ae0a92c336acbc00075bc24fa/coverage-7.6.7-cp310-cp310-win32.whl", hash = "sha256:796c9b107d11d2d69e1849b2dfe41730134b526a49d3acb98ca02f4985eeff7a", size = 209593 }, + { url = "https://files.pythonhosted.org/packages/77/cb/7984c4d0404e8fcc4ada226b240965ef056e7a20e61a18c9038bf88e7624/coverage-7.6.7-cp310-cp310-win_amd64.whl", hash = "sha256:987a8e3da7da4eed10a20491cf790589a8e5e07656b6dc22d3814c4d88faf163", size = 210398 }, + { url = "https://files.pythonhosted.org/packages/c6/d7/1bf7bb0943237149ad01977190ac5c2e17add1f4fe7cabc06401682137f6/coverage-7.6.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7e61b0e77ff4dddebb35a0e8bb5a68bf0f8b872407d8d9f0c726b65dfabe2469", size = 206979 }, + { url = "https://files.pythonhosted.org/packages/83/eb/863b2cd654353b94c6ad834008df813424bf3e8f110e5f655fe5dc4c423b/coverage-7.6.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1a5407a75ca4abc20d6252efeb238377a71ce7bda849c26c7a9bece8680a5d99", size = 207431 }, + { url = "https://files.pythonhosted.org/packages/35/c9/d7a02a9654c41174fb99402c0fbd9583d0d2cb8714e7f948117fa7f919c4/coverage-7.6.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df002e59f2d29e889c37abd0b9ee0d0e6e38c24f5f55d71ff0e09e3412a340ec", size = 239368 }, + { url = "https://files.pythonhosted.org/packages/11/64/6c43a0ec43e5ddc5e09b0b589e3fd31def05fc463920d084e5af35fe527d/coverage-7.6.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:673184b3156cba06154825f25af33baa2671ddae6343f23175764e65a8c4c30b", size = 236769 }, + { url = "https://files.pythonhosted.org/packages/1c/dc/e77d98ae433c556c29328712a07fed0e6d159a63b2ec81039ce0a13a24a3/coverage-7.6.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e69ad502f1a2243f739f5bd60565d14a278be58be4c137d90799f2c263e7049a", size = 238634 }, + { url = "https://files.pythonhosted.org/packages/cc/84/50df3a8426d686057496171b4ccdb64528dacc4f42e94dceb7de3c598a69/coverage-7.6.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:60dcf7605c50ea72a14490d0756daffef77a5be15ed1b9fea468b1c7bda1bc3b", size = 237562 }, + { url = "https://files.pythonhosted.org/packages/2e/0f/9560196247574c1ccdab64cb923d69119fd5abd5b3db28d601ab2b452861/coverage-7.6.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9c2eb378bebb2c8f65befcb5147877fc1c9fbc640fc0aad3add759b5df79d55d", size = 236197 }, + { url = "https://files.pythonhosted.org/packages/df/14/38b7c081e86e845df1867143ddb6e05bf8395f60ab3923c023a56d97cca1/coverage-7.6.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3c0317288f032221d35fa4cbc35d9f4923ff0dfd176c79c9b356e8ef8ef2dff4", size = 236970 }, + { url = "https://files.pythonhosted.org/packages/8b/f3/af34f814ca3814f798878ae368b638edb91298595470614f5265f3f416fa/coverage-7.6.7-cp311-cp311-win32.whl", hash = "sha256:951aade8297358f3618a6e0660dc74f6b52233c42089d28525749fc8267dccd2", size = 209557 }, + { url = "https://files.pythonhosted.org/packages/5a/9e/5d1080d83d752873bd9dedea5524c0f5fe68a3d5e1e58c590865bd724591/coverage-7.6.7-cp311-cp311-win_amd64.whl", hash = "sha256:5e444b8e88339a2a67ce07d41faabb1d60d1004820cee5a2c2b54e2d8e429a0f", size = 210402 }, + { url = "https://files.pythonhosted.org/packages/84/30/30e9df650b9038962c62d900b093a17414d5b43b4d07d47b8698d9e7ce26/coverage-7.6.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f07ff574986bc3edb80e2c36391678a271d555f91fd1d332a1e0f4b5ea4b6ea9", size = 207172 }, + { url = "https://files.pythonhosted.org/packages/88/8b/e28f86412317b9514692fd6f9d8ac6faa12494c3f470c3c63f202e10c756/coverage-7.6.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:49ed5ee4109258973630c1f9d099c7e72c5c36605029f3a91fe9982c6076c82b", size = 207406 }, + { url = "https://files.pythonhosted.org/packages/ac/46/da1bd9a3a893f74f5ce85f35e2755fcb00a80ed21e18d300c54f64938b1c/coverage-7.6.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3e8796434a8106b3ac025fd15417315d7a58ee3e600ad4dbcfddc3f4b14342c", size = 240424 }, + { url = "https://files.pythonhosted.org/packages/f6/12/af8e932496de1997bf4a36785d025ddac6427cbaf6954f26c2edaf21a58a/coverage-7.6.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3b925300484a3294d1c70f6b2b810d6526f2929de954e5b6be2bf8caa1f12c1", size = 237456 }, + { url = "https://files.pythonhosted.org/packages/60/a2/23eb11eb60f825a84397cb94701d6f41d2e8e88ad7d0ba2b4339f38435fb/coverage-7.6.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c42ec2c522e3ddd683dec5cdce8e62817afb648caedad9da725001fa530d354", size = 239527 }, + { url = "https://files.pythonhosted.org/packages/47/9e/63b318bc469308a32b0fbd6c80e2ea05dd7a2b7e840a46b3974843083a8c/coverage-7.6.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0266b62cbea568bd5e93a4da364d05de422110cbed5056d69339bd5af5685433", size = 239011 }, + { url = "https://files.pythonhosted.org/packages/99/47/1e84b067df3f021dfbc9cba09ec9acd4cb64938648a234e5bdf3006fd08b/coverage-7.6.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e5f2a0f161d126ccc7038f1f3029184dbdf8f018230af17ef6fd6a707a5b881f", size = 237316 }, + { url = "https://files.pythonhosted.org/packages/12/9d/96baaafc948d4a0ef2248a611d41051eea0917ef881d744879dd20be7c4a/coverage-7.6.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c132b5a22821f9b143f87446805e13580b67c670a548b96da945a8f6b4f2efbb", size = 238980 }, + { url = "https://files.pythonhosted.org/packages/87/d9/97af1886ca3f612d0cea2999d33e90d2f5b8fdf9bedc2d3bc75883efec4c/coverage-7.6.7-cp312-cp312-win32.whl", hash = "sha256:7c07de0d2a110f02af30883cd7dddbe704887617d5c27cf373362667445a4c76", size = 209801 }, + { url = "https://files.pythonhosted.org/packages/f8/4d/1e31c2018b1b3738154639f94188b1f54098fbf0f80c7ec104928576d0bb/coverage-7.6.7-cp312-cp312-win_amd64.whl", hash = "sha256:fd49c01e5057a451c30c9b892948976f5d38f2cbd04dc556a82743ba8e27ed8c", size = 210587 }, + { url = "https://files.pythonhosted.org/packages/21/87/c590d0c7eeb884995d9d06b429c5e88e9fcd65d3a6a686d9476cb50b72a9/coverage-7.6.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:46f21663e358beae6b368429ffadf14ed0a329996248a847a4322fb2e35d64d3", size = 207199 }, + { url = "https://files.pythonhosted.org/packages/40/ee/c88473c4f69c952f4425fabe045cb78d2027634ce50c9d7f7987d389b604/coverage-7.6.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:40cca284c7c310d622a1677f105e8507441d1bb7c226f41978ba7c86979609ab", size = 207454 }, + { url = "https://files.pythonhosted.org/packages/b8/07/afda6e10c50e3a8c21020c5c1d1b4f3d7eff1c190305cef2962adf8de018/coverage-7.6.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77256ad2345c29fe59ae861aa11cfc74579c88d4e8dbf121cbe46b8e32aec808", size = 239971 }, + { url = "https://files.pythonhosted.org/packages/85/43/bd1934b75e31f2a49665be6a6b7f8bfaff7266ba19721bdb90239f5e9ed7/coverage-7.6.7-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87ea64b9fa52bf395272e54020537990a28078478167ade6c61da7ac04dc14bc", size = 237119 }, + { url = "https://files.pythonhosted.org/packages/2b/19/7a70458c1624724086195b40628e91bc5b9ca180cdfefcc778285c49c7b2/coverage-7.6.7-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d608a7808793e3615e54e9267519351c3ae204a6d85764d8337bd95993581a8", size = 239109 }, + { url = "https://files.pythonhosted.org/packages/f3/2c/3dee671415ff13c05ca68243b2264fc95a5eea57697cffa7986b68b8f608/coverage-7.6.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdd94501d65adc5c24f8a1a0eda110452ba62b3f4aeaba01e021c1ed9cb8f34a", size = 238769 }, + { url = "https://files.pythonhosted.org/packages/37/ad/e0d1228638711aeacacc98d1197af6226b6d062d12c81a6bcc17d3234533/coverage-7.6.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:82c809a62e953867cf57e0548c2b8464207f5f3a6ff0e1e961683e79b89f2c55", size = 236854 }, + { url = "https://files.pythonhosted.org/packages/90/95/6467e9d9765a63c7f142703a7f212f6af114bd73a6c1cffeb7ad7f003a86/coverage-7.6.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bb684694e99d0b791a43e9fc0fa58efc15ec357ac48d25b619f207c41f2fd384", size = 238701 }, + { url = "https://files.pythonhosted.org/packages/b2/7a/fc11a163f0fd6ce8539d0f1b565873fe6903b900214ff71b5d80d16154c3/coverage-7.6.7-cp313-cp313-win32.whl", hash = "sha256:963e4a08cbb0af6623e61492c0ec4c0ec5c5cf74db5f6564f98248d27ee57d30", size = 209865 }, + { url = "https://files.pythonhosted.org/packages/f2/91/58be3a56efff0c3481e48e2caa56d5d6f3c5c8d385bf4adbecdfd85484b0/coverage-7.6.7-cp313-cp313-win_amd64.whl", hash = "sha256:14045b8bfd5909196a90da145a37f9d335a5d988a83db34e80f41e965fb7cb42", size = 210597 }, + { url = "https://files.pythonhosted.org/packages/34/7e/fed983809c2eccb09c5ddccfdb08efb7f2dd1ae3454dabf1c92c5a2e9946/coverage-7.6.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f2c7a045eef561e9544359a0bf5784b44e55cefc7261a20e730baa9220c83413", size = 207944 }, + { url = "https://files.pythonhosted.org/packages/c7/e0/2c1a157986a3927c3920e8e3938a3fdf33ea22b6f371dc3b679f13f619e2/coverage-7.6.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5dd4e4a49d9c72a38d18d641135d2fb0bdf7b726ca60a103836b3d00a1182acd", size = 208215 }, + { url = "https://files.pythonhosted.org/packages/35/2f/77b086b228f6443ae5499467d1629c7428925b390cd171350c403bc00f14/coverage-7.6.7-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c95e0fa3d1547cb6f021ab72f5c23402da2358beec0a8e6d19a368bd7b0fb37", size = 250930 }, + { url = "https://files.pythonhosted.org/packages/60/d8/2ffea937d89ee328fc6e47c2515b890735bdf3f195d507d1c78b5fa96939/coverage-7.6.7-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f63e21ed474edd23f7501f89b53280014436e383a14b9bd77a648366c81dce7b", size = 246647 }, + { url = "https://files.pythonhosted.org/packages/b2/81/efbb3b00a7f7eb5f54a3b3b9f19b26d770a0b7d3870d651f07d2451c5504/coverage-7.6.7-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ead9b9605c54d15be228687552916c89c9683c215370c4a44f1f217d2adcc34d", size = 249006 }, + { url = "https://files.pythonhosted.org/packages/eb/91/ce36990cbefaf7909e96c888ed4d83f3471fc1be3273a5beda10896cde0f/coverage-7.6.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:0573f5cbf39114270842d01872952d301027d2d6e2d84013f30966313cadb529", size = 248500 }, + { url = "https://files.pythonhosted.org/packages/75/3f/b8c87dfdd96276870fb4abc7e2957cba7d20d8a435fcd816d807869ec833/coverage-7.6.7-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:e2c8e3384c12dfa19fa9a52f23eb091a8fad93b5b81a41b14c17c78e23dd1d8b", size = 246388 }, + { url = "https://files.pythonhosted.org/packages/a0/51/62273e1d5c25bb8fbef5fbbadc75b4a3e08c11b80516d0a97c25e5cced5b/coverage-7.6.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:70a56a2ec1869e6e9fa69ef6b76b1a8a7ef709972b9cc473f9ce9d26b5997ce3", size = 247669 }, + { url = "https://files.pythonhosted.org/packages/75/e5/d7772e56a7eace80e98ac39f2756d4b690fc0ce2384418174e02519a26a8/coverage-7.6.7-cp313-cp313t-win32.whl", hash = "sha256:dbba8210f5067398b2c4d96b4e64d8fb943644d5eb70be0d989067c8ca40c0f8", size = 210510 }, + { url = "https://files.pythonhosted.org/packages/2d/12/f2666e4e36b43221391ffcd971ab0c50e19439c521c2c87cd7e0b49ddba2/coverage-7.6.7-cp313-cp313t-win_amd64.whl", hash = "sha256:dfd14bcae0c94004baba5184d1c935ae0d1231b8409eb6c103a5fd75e8ecdc56", size = 211660 }, + { url = "https://files.pythonhosted.org/packages/4c/3d/5ee1ccc37d39e4c06194492e15cd6327d0a85b6c4f14c112fd19b65dc6a7/coverage-7.6.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:37a15573f988b67f7348916077c6d8ad43adb75e478d0910957394df397d2874", size = 206870 }, + { url = "https://files.pythonhosted.org/packages/c2/91/cfdf3c9f4c141d2172b5abd9631853144537d4849d00d08eff2b7e3a8318/coverage-7.6.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b6cce5c76985f81da3769c52203ee94722cd5d5889731cd70d31fee939b74bf0", size = 207305 }, + { url = "https://files.pythonhosted.org/packages/0f/67/6b0460017083bd9330d2d74e3b5aff3e85f9918c96ae8eae8135a262cc34/coverage-7.6.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ab9763d291a17b527ac6fd11d1a9a9c358280adb320e9c2672a97af346ac2c", size = 235338 }, + { url = "https://files.pythonhosted.org/packages/92/59/0c3a8a3f5ef007862774cb8d25580ba8cc3a60e79d2e0798efb117eaea7b/coverage-7.6.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6cf96ceaa275f071f1bea3067f8fd43bec184a25a962c754024c973af871e1b7", size = 233259 }, + { url = "https://files.pythonhosted.org/packages/cd/fc/68d19fb8688d976cb0da7713ca632ca5a5423c92aeae377161d9b888bb38/coverage-7.6.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aee9cf6b0134d6f932d219ce253ef0e624f4fa588ee64830fcba193269e4daa3", size = 234387 }, + { url = "https://files.pythonhosted.org/packages/9d/8a/e76da4084c59420f4f9fac8a5d4b08f0281774f56375c59e76e27eafdb8d/coverage-7.6.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2bc3e45c16564cc72de09e37413262b9f99167803e5e48c6156bccdfb22c8327", size = 233539 }, + { url = "https://files.pythonhosted.org/packages/61/b7/cc00329039500147d3b5724ca412e6b5b8124da7c2865b673a09f04e71fa/coverage-7.6.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:623e6965dcf4e28a3debaa6fcf4b99ee06d27218f46d43befe4db1c70841551c", size = 232021 }, + { url = "https://files.pythonhosted.org/packages/a1/af/1710b65f590d52c9c5f1a238142feb2ef1ff61915fa41531b372e920bee3/coverage-7.6.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:850cfd2d6fc26f8346f422920ac204e1d28814e32e3a58c19c91980fa74d8289", size = 233013 }, + { url = "https://files.pythonhosted.org/packages/fc/99/32773e1f26cbfe11a0cadc4a4163a2249f04e83f0b8def93d85c572d0628/coverage-7.6.7-cp39-cp39-win32.whl", hash = "sha256:c296263093f099da4f51b3dff1eff5d4959b527d4f2f419e16508c5da9e15e8c", size = 209597 }, + { url = "https://files.pythonhosted.org/packages/d7/ef/4b86263d312da7df483a84b69b4e0575fd777fb673fbef95a4df8a68a07c/coverage-7.6.7-cp39-cp39-win_amd64.whl", hash = "sha256:90746521206c88bdb305a4bf3342b1b7316ab80f804d40c536fc7d329301ee13", size = 210367 }, + { url = "https://files.pythonhosted.org/packages/e1/ec/dc663f7d34651aca74a531d10800595d9ec28a78b8306705721900b17a23/coverage-7.6.7-pp39.pp310-none-any.whl", hash = "sha256:0ddcb70b3a3a57581b450571b31cb774f23eb9519c2aaa6176d3a84c9fc57671", size = 199113 }, ] [package.optional-dependencies] @@ -454,31 +485,31 @@ wheels = [ [[package]] name = "debugpy" -version = "1.8.7" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6d/00/5a8b5dc8f52617c5e41845e26290ebea1ba06377cc08155b6d245c27b386/debugpy-1.8.7.zip", hash = "sha256:18b8f731ed3e2e1df8e9cdaa23fb1fc9c24e570cd0081625308ec51c82efe42e", size = 4957835 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/46/50/1850a5a0cab6f65a21e452166ec60bac5f8a995184d17e18bb9dc3789c72/debugpy-1.8.7-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:95fe04a573b8b22896c404365e03f4eda0ce0ba135b7667a1e57bd079793b96b", size = 2090182 }, - { url = "https://files.pythonhosted.org/packages/87/51/ef4d5c55c06689b377678bdee870e3df8eb2a3d9cf0e618b4d7255413c8a/debugpy-1.8.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:628a11f4b295ffb4141d8242a9bb52b77ad4a63a2ad19217a93be0f77f2c28c9", size = 3547569 }, - { url = "https://files.pythonhosted.org/packages/eb/df/a4ea1f95022f93522b59b71ec42d6703abe3e0bee753070118816555fee9/debugpy-1.8.7-cp310-cp310-win32.whl", hash = "sha256:85ce9c1d0eebf622f86cc68618ad64bf66c4fc3197d88f74bb695a416837dd55", size = 5153144 }, - { url = "https://files.pythonhosted.org/packages/47/f7/912408b69e83659bd62fa29ebb7984efe81aed4f5e08bfe10e31a1dc3c3a/debugpy-1.8.7-cp310-cp310-win_amd64.whl", hash = "sha256:29e1571c276d643757ea126d014abda081eb5ea4c851628b33de0c2b6245b037", size = 5185605 }, - { url = "https://files.pythonhosted.org/packages/f6/0a/4a4516ef4c07891542cb25620085507cab3c6b23a42b5630c17788fff83e/debugpy-1.8.7-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:caf528ff9e7308b74a1749c183d6808ffbedbb9fb6af78b033c28974d9b8831f", size = 2204794 }, - { url = "https://files.pythonhosted.org/packages/46/6f/2bb0bba20b8b74b7c341379dd99275cf6aa7722c1948fa99728716aad1b9/debugpy-1.8.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cba1d078cf2e1e0b8402e6bda528bf8fda7ccd158c3dba6c012b7897747c41a0", size = 3122160 }, - { url = "https://files.pythonhosted.org/packages/c0/ce/833351375cef971f0caa63fa82adf3f6949ad85410813026a4a436083a71/debugpy-1.8.7-cp311-cp311-win32.whl", hash = "sha256:171899588bcd412151e593bd40d9907133a7622cd6ecdbdb75f89d1551df13c2", size = 5078675 }, - { url = "https://files.pythonhosted.org/packages/7d/e1/e9ac2d546143a4defbaa2e609e173c912fb989cdfb5385c9771770a6bf5c/debugpy-1.8.7-cp311-cp311-win_amd64.whl", hash = "sha256:6e1c4ffb0c79f66e89dfd97944f335880f0d50ad29525dc792785384923e2211", size = 5102927 }, - { url = "https://files.pythonhosted.org/packages/59/4b/9f52ca1a799601a10cd2673503658bd8c8ecc4a7a43302ee29cf062474ec/debugpy-1.8.7-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:4d27d842311353ede0ad572600c62e4bcd74f458ee01ab0dd3a1a4457e7e3706", size = 2529803 }, - { url = "https://files.pythonhosted.org/packages/80/79/8bba39190d2ea17840925d287f1c6c3a7c60b58f5090444e9ecf176c540f/debugpy-1.8.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:703c1fd62ae0356e194f3e7b7a92acd931f71fe81c4b3be2c17a7b8a4b546ec2", size = 4170911 }, - { url = "https://files.pythonhosted.org/packages/3b/19/5b3d312936db8eb281310fa27903459328ed722d845d594ba5feaeb2f0b3/debugpy-1.8.7-cp312-cp312-win32.whl", hash = "sha256:2f729228430ef191c1e4df72a75ac94e9bf77413ce5f3f900018712c9da0aaca", size = 5195476 }, - { url = "https://files.pythonhosted.org/packages/9f/49/ad20b29f8c921fd5124530d3d39b8f2077efd51b71339a2eff02bba693e9/debugpy-1.8.7-cp312-cp312-win_amd64.whl", hash = "sha256:45c30aaefb3e1975e8a0258f5bbd26cd40cde9bfe71e9e5a7ac82e79bad64e39", size = 5235031 }, - { url = "https://files.pythonhosted.org/packages/41/95/29b247518d0a6afdb5249f5d05743c9c5bfaf4bd13a85b81cb5e1dc65837/debugpy-1.8.7-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:d050a1ec7e925f514f0f6594a1e522580317da31fbda1af71d1530d6ea1f2b40", size = 2517557 }, - { url = "https://files.pythonhosted.org/packages/4d/93/026e2000a0740e2f54b198f8dc317accf3a70b6524b2b15fa8e6eca74414/debugpy-1.8.7-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2f4349a28e3228a42958f8ddaa6333d6f8282d5edaea456070e48609c5983b7", size = 4162703 }, - { url = "https://files.pythonhosted.org/packages/c3/92/a48e653b19a171434290ecdc5935b7a292a65488139c5271d6d0eceeb0f1/debugpy-1.8.7-cp313-cp313-win32.whl", hash = "sha256:11ad72eb9ddb436afb8337891a986302e14944f0f755fd94e90d0d71e9100bba", size = 5195220 }, - { url = "https://files.pythonhosted.org/packages/4e/b3/dc3c5527edafcd1a6d0f8c4ecc6c5c9bc431f77340cf4193328e98f0ac38/debugpy-1.8.7-cp313-cp313-win_amd64.whl", hash = "sha256:2efb84d6789352d7950b03d7f866e6d180284bc02c7e12cb37b489b7083d81aa", size = 5235333 }, - { url = "https://files.pythonhosted.org/packages/f5/18/a26b37d548b2264ad602b649d7b061098436cd8c434ec24375561a9ac1ab/debugpy-1.8.7-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:90d93e4f2db442f8222dec5ec55ccfc8005821028982f1968ebf551d32b28907", size = 2091465 }, - { url = "https://files.pythonhosted.org/packages/19/f0/4868ae5da4cec7f78b4118a516587c51303d81a175526995081eff1bfafb/debugpy-1.8.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6db2a370e2700557a976eaadb16243ec9c91bd46f1b3bb15376d7aaa7632c81", size = 3544575 }, - { url = "https://files.pythonhosted.org/packages/0c/f2/b7df9733ae83c4219c0c6ac55e2d2d03799554e130db817a3e614ed53df7/debugpy-1.8.7-cp39-cp39-win32.whl", hash = "sha256:a6cf2510740e0c0b4a40330640e4b454f928c7b99b0c9dbf48b11efba08a8cda", size = 5153988 }, - { url = "https://files.pythonhosted.org/packages/36/bb/a64ff234e6c6520266eb4911c833d208183d2a56f474dfc458a9b0e4aaac/debugpy-1.8.7-cp39-cp39-win_amd64.whl", hash = "sha256:6a9d9d6d31846d8e34f52987ee0f1a904c7baa4912bf4843ab39dadf9b8f3e0d", size = 5186414 }, - { url = "https://files.pythonhosted.org/packages/51/b1/a0866521c71a6ae3d3ca320e74835163a4671b1367ba360a55a0a51e5a91/debugpy-1.8.7-py2.py3-none-any.whl", hash = "sha256:57b00de1c8d2c84a61b90880f7e5b6deaf4c312ecbde3a0e8912f2a56c4ac9ae", size = 5210683 }, +version = "1.8.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/5e/7667b95c9d7ddb25c047143a3a47685f9be2a5d3d177a85a730b22dc6e5c/debugpy-1.8.8.zip", hash = "sha256:e6355385db85cbd666be703a96ab7351bc9e6c61d694893206f8001e22aee091", size = 4928684 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/79/677d71c342d5f24baf81d262c9e0c19cac3b17b4e4587c0574eaa3964ab1/debugpy-1.8.8-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:e59b1607c51b71545cb3496876544f7186a7a27c00b436a62f285603cc68d1c6", size = 2088337 }, + { url = "https://files.pythonhosted.org/packages/11/b3/4119fa89b66bcc64a3b186ea52ee7c22bccc5d1765ee890887678b0e3e76/debugpy-1.8.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6531d952b565b7cb2fbd1ef5df3d333cf160b44f37547a4e7cf73666aca5d8d", size = 3567953 }, + { url = "https://files.pythonhosted.org/packages/e8/4a/01f70b44af27c13d720446ce9bf14467c90411e90e6c6ffbb7c45845d23d/debugpy-1.8.8-cp310-cp310-win32.whl", hash = "sha256:b01f4a5e5c5fb1d34f4ccba99a20ed01eabc45a4684f4948b5db17a319dfb23f", size = 5128658 }, + { url = "https://files.pythonhosted.org/packages/2b/a5/c4210f3842db0911a49b3030bfc217e0772bfd33d7aa50996bc762e8a334/debugpy-1.8.8-cp310-cp310-win_amd64.whl", hash = "sha256:535f4fb1c024ddca5913bb0eb17880c8f24ba28aa2c225059db145ee557035e9", size = 5157545 }, + { url = "https://files.pythonhosted.org/packages/38/55/6b5596ea6d5490e17abc2896f1fbe83d31205a22629805daccd30686721c/debugpy-1.8.8-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:c399023146e40ae373753a58d1be0a98bf6397fadc737b97ad612886b53df318", size = 2187057 }, + { url = "https://files.pythonhosted.org/packages/3f/f7/c2ee07f6335c3620c1435aef2c4d3d4853f6b7fb0789aa2c52a84498ef90/debugpy-1.8.8-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:09cc7b162586ea2171eea055985da2702b0723f6f907a423c9b2da5996ad67ba", size = 3139844 }, + { url = "https://files.pythonhosted.org/packages/0d/68/01d335338b68bdebab11de573f4631c7bf0404666ccbf474621123497702/debugpy-1.8.8-cp311-cp311-win32.whl", hash = "sha256:eea8821d998ebeb02f0625dd0d76839ddde8cbf8152ebbe289dd7acf2cdc6b98", size = 5049405 }, + { url = "https://files.pythonhosted.org/packages/22/1d/3f69460b4b8f01dace3882513de71a446eb37ee57fe2112be948fadebde8/debugpy-1.8.8-cp311-cp311-win_amd64.whl", hash = "sha256:d4483836da2a533f4b1454dffc9f668096ac0433de855f0c22cdce8c9f7e10c4", size = 5075025 }, + { url = "https://files.pythonhosted.org/packages/c2/04/8e79824c4d9100049bda056aeaf8f2765d1325a4521a87f8bb373c977236/debugpy-1.8.8-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:0cc94186340be87b9ac5a707184ec8f36547fb66636d1029ff4f1cc020e53996", size = 2514549 }, + { url = "https://files.pythonhosted.org/packages/a5/6b/c336d1eba1aedc9f654aefcdfe47ec41657d149f28ca1477c5f9009681c6/debugpy-1.8.8-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64674e95916e53c2e9540a056e5f489e0ad4872645399d778f7c598eacb7b7f9", size = 4229617 }, + { url = "https://files.pythonhosted.org/packages/63/9c/d9276c41e9e14164b31bcba789c87a355c091d0fc2d4e4e36a4881c9aa54/debugpy-1.8.8-cp312-cp312-win32.whl", hash = "sha256:5c6e885dbf12015aed73770f29dec7023cb310d0dc2ba8bfbeb5c8e43f80edc9", size = 5167033 }, + { url = "https://files.pythonhosted.org/packages/6d/1c/fd4bc22196b2d0defaa9f644ea4d676d0cb53b6434091b5fa2d4e49c85f2/debugpy-1.8.8-cp312-cp312-win_amd64.whl", hash = "sha256:19ffbd84e757a6ca0113574d1bf5a2298b3947320a3e9d7d8dc3377f02d9f864", size = 5209968 }, + { url = "https://files.pythonhosted.org/packages/90/45/6745f342bbf41bde7eb5dbf5567b794a4a5498a7a729146cb3101b875b30/debugpy-1.8.8-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:705cd123a773d184860ed8dae99becd879dfec361098edbefb5fc0d3683eb804", size = 2499523 }, + { url = "https://files.pythonhosted.org/packages/5c/39/0374610062a384648db9b7b315d0c906facf23613bfd19527135a7c0a420/debugpy-1.8.8-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:890fd16803f50aa9cb1a9b9b25b5ec321656dd6b78157c74283de241993d086f", size = 4218219 }, + { url = "https://files.pythonhosted.org/packages/cc/19/5b8a68eb9bbafd6bfd27ba0ed93d411f3fd50935ecdd2df242de2110a7c9/debugpy-1.8.8-cp313-cp313-win32.whl", hash = "sha256:90244598214bbe704aa47556ec591d2f9869ff9e042e301a2859c57106649add", size = 5171845 }, + { url = "https://files.pythonhosted.org/packages/cd/04/7381dab68e40ca877d5beffc25ad1a0d3d2557cf7465405435fac9e27ef5/debugpy-1.8.8-cp313-cp313-win_amd64.whl", hash = "sha256:4b93e4832fd4a759a0c465c967214ed0c8a6e8914bced63a28ddb0dd8c5f078b", size = 5206890 }, + { url = "https://files.pythonhosted.org/packages/3d/c8/7b1b654f7c21bac0e77272ee503b00f75e8acc8753efa542d4495591c741/debugpy-1.8.8-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:53709d4ec586b525724819dc6af1a7703502f7e06f34ded7157f7b1f963bb854", size = 2089581 }, + { url = "https://files.pythonhosted.org/packages/2d/87/57eb80944ce75f383946d79d9dd3ff0e0cd7c737f446be11661e3b963fbf/debugpy-1.8.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a9c013077a3a0000e83d97cf9cc9328d2b0bbb31f56b0e99ea3662d29d7a6a2", size = 3562815 }, + { url = "https://files.pythonhosted.org/packages/45/e1/23f65fbf5564cd8b3f126ab4a82c8a1a4728bdfd1b7fb0e2a856f794790e/debugpy-1.8.8-cp39-cp39-win32.whl", hash = "sha256:ffe94dd5e9a6739a75f0b85316dc185560db3e97afa6b215628d1b6a17561cb2", size = 5121656 }, + { url = "https://files.pythonhosted.org/packages/7c/f8/751ea54bb878fe965010d0492776671a7aab045937118b356027235e59ce/debugpy-1.8.8-cp39-cp39-win_amd64.whl", hash = "sha256:5c0e5a38c7f9b481bf31277d2f74d2109292179081f11108e668195ef926c0f9", size = 5175678 }, + { url = "https://files.pythonhosted.org/packages/03/99/ec2190d03df5dbd610418919bd1c3d8e6f61d0a97894e11ade6d3260cfb8/debugpy-1.8.8-py2.py3-none-any.whl", hash = "sha256:ec684553aba5b4066d4de510859922419febc710df7bba04fe9e7ef3de15d34f", size = 5157124 }, ] [[package]] @@ -535,6 +566,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b5/fd/afcd0496feca3276f509df3dbd5dae726fcc756f1a08d9e25abe1733f962/executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf", size = 25805 }, ] +[[package]] +name = "fastcore" +version = "1.7.20" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e5/94/d8315c2dace419e6f65dc721c21039fe2a0d87871088652013e738df8816/fastcore-1.7.20.tar.gz", hash = "sha256:316dcb0e2d5e338e069f338b3c136ca9eb4ce950ca433da2a80952fc5928ddab", size = 80075 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4a/ac/41f6f2d4840d5b1521881adbfee8b2000e5f5d4e762a945c15c7bd4af90a/fastcore-1.7.20-py3-none-any.whl", hash = "sha256:7d81f2a0da27d10df6d0b0050b08ea3eb2b1bb2894e8970f246be49c9a593c01", size = 83676 }, +] + [[package]] name = "fastjsonschema" version = "2.20.0" @@ -546,49 +589,65 @@ wheels = [ [[package]] name = "fonttools" -version = "4.54.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/11/1d/70b58e342e129f9c0ce030029fb4b2b0670084bbbfe1121d008f6a1e361c/fonttools-4.54.1.tar.gz", hash = "sha256:957f669d4922f92c171ba01bef7f29410668db09f6c02111e22b2bce446f3285", size = 3463867 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/db/f9/285c9a2d0e86b9bf2babfe19bec00502361fda56cea144d6a269ab9a32e6/fonttools-4.54.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7ed7ee041ff7b34cc62f07545e55e1468808691dddfd315d51dd82a6b37ddef2", size = 2766970 }, - { url = "https://files.pythonhosted.org/packages/2f/9a/9d899e7ae55b0dd30632e6ca36c0f5fa1205b1b096ec171c9be903673058/fonttools-4.54.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41bb0b250c8132b2fcac148e2e9198e62ff06f3cc472065dff839327945c5882", size = 2254639 }, - { url = "https://files.pythonhosted.org/packages/16/6f/b99e0c347732fb003077a2cff38c26f381969b74329aa5597e344d540fe1/fonttools-4.54.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7965af9b67dd546e52afcf2e38641b5be956d68c425bef2158e95af11d229f10", size = 4574346 }, - { url = "https://files.pythonhosted.org/packages/e5/12/9a45294a7c4520cc32936edd15df1d5c24af701d2f5f51070a9a43d7664b/fonttools-4.54.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:278913a168f90d53378c20c23b80f4e599dca62fbffae4cc620c8eed476b723e", size = 4630045 }, - { url = "https://files.pythonhosted.org/packages/64/52/ba4f00eb6003e4089264cd9ce126cddec2b39c78f1ab01be9dc389a197ca/fonttools-4.54.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0e88e3018ac809b9662615072dcd6b84dca4c2d991c6d66e1970a112503bba7e", size = 4569527 }, - { url = "https://files.pythonhosted.org/packages/41/ff/85f93a14c8acf978f332508f980dcaff5ed5f0cf284371eb101a78f0b1f4/fonttools-4.54.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4aa4817f0031206e637d1e685251ac61be64d1adef111060df84fdcbc6ab6c44", size = 4741677 }, - { url = "https://files.pythonhosted.org/packages/6f/f0/06ea7d9f8b7b6d4758a50271517db04039c4c6da8fa0475d417e005624d0/fonttools-4.54.1-cp310-cp310-win32.whl", hash = "sha256:7e3b7d44e18c085fd8c16dcc6f1ad6c61b71ff463636fcb13df7b1b818bd0c02", size = 2166797 }, - { url = "https://files.pythonhosted.org/packages/71/73/545c817e34b8c34585291951722e1a5ae579380deb009576d9d244b13ab0/fonttools-4.54.1-cp310-cp310-win_amd64.whl", hash = "sha256:dd9cc95b8d6e27d01e1e1f1fae8559ef3c02c76317da650a19047f249acd519d", size = 2210552 }, - { url = "https://files.pythonhosted.org/packages/aa/2c/8b5d82fe2d9c7f260fb73121418f5e07d4e38c329ea3886a5b0e55586113/fonttools-4.54.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5419771b64248484299fa77689d4f3aeed643ea6630b2ea750eeab219588ba20", size = 2768112 }, - { url = "https://files.pythonhosted.org/packages/37/2e/f94118b92f7b6a9ec93840101b64bfdd09f295b266133857e8e852a5c35c/fonttools-4.54.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:301540e89cf4ce89d462eb23a89464fef50915255ece765d10eee8b2bf9d75b2", size = 2254739 }, - { url = "https://files.pythonhosted.org/packages/45/4b/8a32f56a13e78256192f77d6b65583c43538c7955f5420887bb574b91ddf/fonttools-4.54.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76ae5091547e74e7efecc3cbf8e75200bc92daaeb88e5433c5e3e95ea8ce5aa7", size = 4879772 }, - { url = "https://files.pythonhosted.org/packages/96/13/748b7f7239893ff0796de11074b0ad8aa4c3da2d9f4d79a128b0b16147f3/fonttools-4.54.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82834962b3d7c5ca98cb56001c33cf20eb110ecf442725dc5fdf36d16ed1ab07", size = 4927686 }, - { url = "https://files.pythonhosted.org/packages/7c/82/91bc5a378b4a0593fa90ea706f68ce7e9e871c6873e0d91e134d107758db/fonttools-4.54.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d26732ae002cc3d2ecab04897bb02ae3f11f06dd7575d1df46acd2f7c012a8d8", size = 4890789 }, - { url = "https://files.pythonhosted.org/packages/ea/ca/82be5d4f8b78405cdb3f7f3f1316af5e8db93216121f19da9f684a35beee/fonttools-4.54.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:58974b4987b2a71ee08ade1e7f47f410c367cdfc5a94fabd599c88165f56213a", size = 5061351 }, - { url = "https://files.pythonhosted.org/packages/da/2f/fd6e1b01c80c473c3ac52492dcf8d26cdf5f4a89b4f30875ecfbda55e7ff/fonttools-4.54.1-cp311-cp311-win32.whl", hash = "sha256:ab774fa225238986218a463f3fe151e04d8c25d7de09df7f0f5fce27b1243dbc", size = 2166210 }, - { url = "https://files.pythonhosted.org/packages/63/f1/3a081cd047d83b5966cb0d7ef3fea929ee6eddeb94d8fbfdb2a19bd60cc7/fonttools-4.54.1-cp311-cp311-win_amd64.whl", hash = "sha256:07e005dc454eee1cc60105d6a29593459a06321c21897f769a281ff2d08939f6", size = 2211946 }, - { url = "https://files.pythonhosted.org/packages/27/b6/f9d365932dcefefdcc794985f8846471e60932070c557e0f66ed195fccec/fonttools-4.54.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:54471032f7cb5fca694b5f1a0aaeba4af6e10ae989df408e0216f7fd6cdc405d", size = 2761873 }, - { url = "https://files.pythonhosted.org/packages/67/9d/cfbfe36e5061a8f68b154454ba2304eb01f40d4ba9b63e41d9058909baed/fonttools-4.54.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fa92cb248e573daab8d032919623cc309c005086d743afb014c836636166f08", size = 2251828 }, - { url = "https://files.pythonhosted.org/packages/90/41/5573e074739efd9227dd23647724f01f6f07ad062fe09d02e91c5549dcf7/fonttools-4.54.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a911591200114969befa7f2cb74ac148bce5a91df5645443371aba6d222e263", size = 4792544 }, - { url = "https://files.pythonhosted.org/packages/08/07/aa85cc62abcc940b25d14b542cf585eebf4830032a7f6a1395d696bb3231/fonttools-4.54.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93d458c8a6a354dc8b48fc78d66d2a8a90b941f7fec30e94c7ad9982b1fa6bab", size = 4875892 }, - { url = "https://files.pythonhosted.org/packages/47/23/c5726c2615446c498a976bed21c35a242a97eee39930a2655d616ca885cc/fonttools-4.54.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5eb2474a7c5be8a5331146758debb2669bf5635c021aee00fd7c353558fc659d", size = 4769822 }, - { url = "https://files.pythonhosted.org/packages/8f/7b/87f7f7d35e0732ac67422dfa6f05e2b568fb6ca2dcd7f3e4f500293cfd75/fonttools-4.54.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c9c563351ddc230725c4bdf7d9e1e92cbe6ae8553942bd1fb2b2ff0884e8b714", size = 5029455 }, - { url = "https://files.pythonhosted.org/packages/e0/09/241aa498587889576838aa73c78d22b70ce06970807a5475d372baa7ccb7/fonttools-4.54.1-cp312-cp312-win32.whl", hash = "sha256:fdb062893fd6d47b527d39346e0c5578b7957dcea6d6a3b6794569370013d9ac", size = 2154411 }, - { url = "https://files.pythonhosted.org/packages/b9/0a/a57caaff3bc880779317cb157e5b49dc47fad54effe027016abd355b0651/fonttools-4.54.1-cp312-cp312-win_amd64.whl", hash = "sha256:e4564cf40cebcb53f3dc825e85910bf54835e8a8b6880d59e5159f0f325e637e", size = 2200412 }, - { url = "https://files.pythonhosted.org/packages/05/3d/cc515cae84a11d696f2cb7c139a90997b15f02e2e97ec09a5d79302cbcd7/fonttools-4.54.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6e37561751b017cf5c40fce0d90fd9e8274716de327ec4ffb0df957160be3bff", size = 2749174 }, - { url = "https://files.pythonhosted.org/packages/03/03/05d4b22d1a674d066380657f60bbc0eda2d206446912e676d1a33a206878/fonttools-4.54.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:357cacb988a18aace66e5e55fe1247f2ee706e01debc4b1a20d77400354cddeb", size = 2246267 }, - { url = "https://files.pythonhosted.org/packages/52/c3/bb6086adb675e8b0963a7dbb7769e7118c95b687dd318cd660aefd4b4c8c/fonttools-4.54.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8e953cc0bddc2beaf3a3c3b5dd9ab7554677da72dfaf46951e193c9653e515a", size = 4855090 }, - { url = "https://files.pythonhosted.org/packages/80/a1/d7192b6a104e3f9ea8e5b1c3463a6240399f0fa826a782eff636cbe0495a/fonttools-4.54.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:58d29b9a294573d8319f16f2f79e42428ba9b6480442fa1836e4eb89c4d9d61c", size = 5005449 }, - { url = "https://files.pythonhosted.org/packages/5a/6c/ecfd5c6cd8c9006e85b128d073af26bb263e8aa47506374cb14b25bcf65f/fonttools-4.54.1-cp313-cp313-win32.whl", hash = "sha256:9ef1b167e22709b46bf8168368b7b5d3efeaaa746c6d39661c1b4405b6352e58", size = 2152496 }, - { url = "https://files.pythonhosted.org/packages/63/da/f7a1d837de419e3d4cccbd0dbf53c7399f610f65ceb9bcbf2480f3ae7950/fonttools-4.54.1-cp313-cp313-win_amd64.whl", hash = "sha256:262705b1663f18c04250bd1242b0515d3bbae177bee7752be67c979b7d47f43d", size = 2197257 }, - { url = "https://files.pythonhosted.org/packages/99/14/298292fce6f163f04ec31a79bb6627d9ca85c9874d402f33415ebae313f7/fonttools-4.54.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f5b8a096e649768c2f4233f947cf9737f8dbf8728b90e2771e2497c6e3d21d13", size = 2769825 }, - { url = "https://files.pythonhosted.org/packages/86/dc/acf23baaefac9893d99f5a7dc3396ecfbc4747597075009c8b6452e4b2a6/fonttools-4.54.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4e10d2e0a12e18f4e2dd031e1bf7c3d7017be5c8dbe524d07706179f355c5dac", size = 2256120 }, - { url = "https://files.pythonhosted.org/packages/28/bc/9c57b3f19a4178318e9f1ee4cb6b5be91a07ef11a2a26716ceed3bebc2cc/fonttools-4.54.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31c32d7d4b0958600eac75eaf524b7b7cb68d3a8c196635252b7a2c30d80e986", size = 4578956 }, - { url = "https://files.pythonhosted.org/packages/8c/e7/24870ef7d4014b7904a3b9911199ffe04532d1fb73cf70856471f9f8b252/fonttools-4.54.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c39287f5c8f4a0c5a55daf9eaf9ccd223ea59eed3f6d467133cc727d7b943a55", size = 4637480 }, - { url = "https://files.pythonhosted.org/packages/5d/41/c72f79b24969d04c14bd543faaa3a126d71114eb0e896227e1692a39bec2/fonttools-4.54.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a7a310c6e0471602fe3bf8efaf193d396ea561486aeaa7adc1f132e02d30c4b9", size = 4572104 }, - { url = "https://files.pythonhosted.org/packages/8b/47/b897833f6d659147498517fef95b8978a2125da11392983e0f3acf4671a9/fonttools-4.54.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d3b659d1029946f4ff9b6183984578041b520ce0f8fb7078bb37ec7445806b33", size = 4744962 }, - { url = "https://files.pythonhosted.org/packages/40/ea/61664ee6a587fe59dd67224d3939a3e253e012bbf19b905b934a8c306cf9/fonttools-4.54.1-cp39-cp39-win32.whl", hash = "sha256:e96bc94c8cda58f577277d4a71f51c8e2129b8b36fd05adece6320dd3d57de8a", size = 2167431 }, - { url = "https://files.pythonhosted.org/packages/3c/87/566f79796150029bfce1c93c10adb1c46017fac2caac3996a0a6f73c96e1/fonttools-4.54.1-cp39-cp39-win_amd64.whl", hash = "sha256:e8a4b261c1ef91e7188a30571be6ad98d1c6d9fa2427244c545e2fa0a2494dd7", size = 2211153 }, - { url = "https://files.pythonhosted.org/packages/57/5e/de2e6e51cb6894f2f2bc2641f6c845561361b622e96df3cca04df77222c9/fonttools-4.54.1-py3-none-any.whl", hash = "sha256:37cddd62d83dc4f72f7c3f3c2bcf2697e89a30efb152079896544a93907733bd", size = 1096920 }, +version = "4.55.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/4e/053fe1b5c0ce346c0a9d0557492c654362bafb14f026eae0d3ee98009152/fonttools-4.55.0.tar.gz", hash = "sha256:7636acc6ab733572d5e7eec922b254ead611f1cdad17be3f0be7418e8bfaca71", size = 3490431 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d8/8c/57600ebff0b2119b725bc11eeea32b17b0220f3fae71b5fff082a1891270/fonttools-4.55.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:51c029d4c0608a21a3d3d169dfc3fb776fde38f00b35ca11fdab63ba10a16f61", size = 2770301 }, + { url = "https://files.pythonhosted.org/packages/02/94/dff7e57a751918b133a303418202b4f43e3dc3c887e2a648089e0463b1a7/fonttools-4.55.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bca35b4e411362feab28e576ea10f11268b1aeed883b9f22ed05675b1e06ac69", size = 2295806 }, + { url = "https://files.pythonhosted.org/packages/09/31/ff18d79d449510850fe4a96c0ba50ee6d0b9b815a6b5a2489d809e9a8db5/fonttools-4.55.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ce4ba6981e10f7e0ccff6348e9775ce25ffadbee70c9fd1a3737e3e9f5fa74f", size = 4577709 }, + { url = "https://files.pythonhosted.org/packages/c4/03/8136887d1b0b7a9831c7e8e2598c0e5851e31cc2231295769350349a236b/fonttools-4.55.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31d00f9852a6051dac23294a4cf2df80ced85d1d173a61ba90a3d8f5abc63c60", size = 4633411 }, + { url = "https://files.pythonhosted.org/packages/a7/37/86ac06a7505e57de2daaf0a1cc885b7767c74d376ef2cf82933e8ef79399/fonttools-4.55.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e198e494ca6e11f254bac37a680473a311a88cd40e58f9cc4dc4911dfb686ec6", size = 4572887 }, + { url = "https://files.pythonhosted.org/packages/0d/85/1e429359d1842a104b638433587ff62d9dc8339a8c467787087962502a53/fonttools-4.55.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7208856f61770895e79732e1dcbe49d77bd5783adf73ae35f87fcc267df9db81", size = 4745036 }, + { url = "https://files.pythonhosted.org/packages/81/65/763ac1fe2a3e52220f7a7fd2a5de0c784045e773aa9d299450019ac66f9e/fonttools-4.55.0-cp310-cp310-win32.whl", hash = "sha256:e7e6a352ff9e46e8ef8a3b1fe2c4478f8a553e1b5a479f2e899f9dc5f2055880", size = 2170126 }, + { url = "https://files.pythonhosted.org/packages/3e/67/93939482715e629c4bd6fd1f3d154c1bf45b81ee383f50e44d31fa542f83/fonttools-4.55.0-cp310-cp310-win_amd64.whl", hash = "sha256:636caaeefe586d7c84b5ee0734c1a5ab2dae619dc21c5cf336f304ddb8f6001b", size = 2213882 }, + { url = "https://files.pythonhosted.org/packages/17/50/75461e050ded02b9eaa8097df52c2a8752cf4c24db8b44b150755b76c8f1/fonttools-4.55.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fa34aa175c91477485c44ddfbb51827d470011e558dfd5c7309eb31bef19ec51", size = 2771444 }, + { url = "https://files.pythonhosted.org/packages/de/5e/98130db3770e8d12f70aa61f2555c32284d4e9c592862469d32b7ee48626/fonttools-4.55.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:37dbb3fdc2ef7302d3199fb12468481cbebaee849e4b04bc55b77c24e3c49189", size = 2296439 }, + { url = "https://files.pythonhosted.org/packages/17/35/36fe271296fe7624811f5261a0662155e075b43b79ffacea85a03f36593d/fonttools-4.55.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5263d8e7ef3c0ae87fbce7f3ec2f546dc898d44a337e95695af2cd5ea21a967", size = 4883141 }, + { url = "https://files.pythonhosted.org/packages/47/2b/9bf7527260d265281dd812951aa22f3d1c331bcc91e86e7038dc6b9737cb/fonttools-4.55.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f307f6b5bf9e86891213b293e538d292cd1677e06d9faaa4bf9c086ad5f132f6", size = 4931050 }, + { url = "https://files.pythonhosted.org/packages/0b/7b/7324d3aa8424c71b63ba2e76eb4a46d6947e23065996e755c1682e666f42/fonttools-4.55.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f0a4b52238e7b54f998d6a56b46a2c56b59c74d4f8a6747fb9d4042190f37cd3", size = 4894154 }, + { url = "https://files.pythonhosted.org/packages/2c/53/a54926be69e43d277877106a6cbfab467cb02f9c756258c7c9932e8eb382/fonttools-4.55.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3e569711464f777a5d4ef522e781dc33f8095ab5efd7548958b36079a9f2f88c", size = 5064715 }, + { url = "https://files.pythonhosted.org/packages/0c/f7/9602868af9a2dfc4659637a752da8691655e81a2d6138231dcaa1efe8840/fonttools-4.55.0-cp311-cp311-win32.whl", hash = "sha256:2b3ab90ec0f7b76c983950ac601b58949f47aca14c3f21eed858b38d7ec42b05", size = 2169536 }, + { url = "https://files.pythonhosted.org/packages/30/57/9e2ddd16ad84ab26616ae4346b3b15e9a50669ca1b442cbe760af073807c/fonttools-4.55.0-cp311-cp311-win_amd64.whl", hash = "sha256:aa046f6a63bb2ad521004b2769095d4c9480c02c1efa7d7796b37826508980b6", size = 2215265 }, + { url = "https://files.pythonhosted.org/packages/ec/79/38209f8f6235021b6209147ec7b2f748afde65c59c6274ac96fef3912094/fonttools-4.55.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:838d2d8870f84fc785528a692e724f2379d5abd3fc9dad4d32f91cf99b41e4a7", size = 2765205 }, + { url = "https://files.pythonhosted.org/packages/e3/07/434a21eab80524613c9753db2ff21d6bc3cf264412d8833a85022fd39088/fonttools-4.55.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f46b863d74bab7bb0d395f3b68d3f52a03444964e67ce5c43ce43a75efce9246", size = 2293908 }, + { url = "https://files.pythonhosted.org/packages/c8/63/aa3274d9be36aaaef8c087e413cbc1dd682ff94776a82c111bad88482947/fonttools-4.55.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33b52a9cfe4e658e21b1f669f7309b4067910321757fec53802ca8f6eae96a5a", size = 4795901 }, + { url = "https://files.pythonhosted.org/packages/fc/0b/dbe13f2c8d745ffdf5c2bc25391263927d4ec2b927e44d5d5f70cd372873/fonttools-4.55.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:732a9a63d6ea4a81b1b25a1f2e5e143761b40c2e1b79bb2b68e4893f45139a40", size = 4879252 }, + { url = "https://files.pythonhosted.org/packages/46/85/eefb400ec66e9e7c159d13c72aba473d9c2a0c556d812b0916418aa9019e/fonttools-4.55.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7dd91ac3fcb4c491bb4763b820bcab6c41c784111c24172616f02f4bc227c17d", size = 4773177 }, + { url = "https://files.pythonhosted.org/packages/93/75/f06d175df4d7dbad97061c8698210ce4231cce9aa56cc263f3b6b5340540/fonttools-4.55.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1f0e115281a32ff532118aa851ef497a1b7cda617f4621c1cdf81ace3e36fb0c", size = 5032809 }, + { url = "https://files.pythonhosted.org/packages/78/eb/f3520ba63b5e4a034f2bfd34d8ab32eb95a1bf37a1f792ea48461fba08f6/fonttools-4.55.0-cp312-cp312-win32.whl", hash = "sha256:6c99b5205844f48a05cb58d4a8110a44d3038c67ed1d79eb733c4953c628b0f6", size = 2157762 }, + { url = "https://files.pythonhosted.org/packages/aa/d1/5f007861cab890f2a35a19a1d2a2815655ec10b0ea7fd881b1d3aaab0076/fonttools-4.55.0-cp312-cp312-win_amd64.whl", hash = "sha256:f8c8c76037d05652510ae45be1cd8fb5dd2fd9afec92a25374ac82255993d57c", size = 2203746 }, + { url = "https://files.pythonhosted.org/packages/c3/87/a669ac26c6077e37ffb06abf29c5571789eefe518d06c52df392181ee694/fonttools-4.55.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8118dc571921dc9e4b288d9cb423ceaf886d195a2e5329cc427df82bba872cd9", size = 2752519 }, + { url = "https://files.pythonhosted.org/packages/0c/e9/4822ad238fe215133c7df20f1cdb1a58cfb634a31523e77ff0fb2033970a/fonttools-4.55.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01124f2ca6c29fad4132d930da69158d3f49b2350e4a779e1efbe0e82bd63f6c", size = 2286819 }, + { url = "https://files.pythonhosted.org/packages/3e/a4/d7941c3897129e60fe68d20e4819fda4d0c4858d77badae0e80ca6440b36/fonttools-4.55.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81ffd58d2691f11f7c8438796e9f21c374828805d33e83ff4b76e4635633674c", size = 4770382 }, + { url = "https://files.pythonhosted.org/packages/31/cf/c51ea1348f9fba9c627439afad9dee0090040809ab431f4422b5bfdda34c/fonttools-4.55.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5435e5f1eb893c35c2bc2b9cd3c9596b0fcb0a59e7a14121562986dd4c47b8dd", size = 4858336 }, + { url = "https://files.pythonhosted.org/packages/73/be/36c1fe0e5c9a96b068ddd7e82001243bbe7fe12549c8d14e1bd025bf40c9/fonttools-4.55.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d12081729280c39d001edd0f4f06d696014c26e6e9a0a55488fabc37c28945e4", size = 4756072 }, + { url = "https://files.pythonhosted.org/packages/5c/18/6dd381c29f215a017f79aa9fea0722424a0046b47991c4390a78ff87ce0c/fonttools-4.55.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a7ad1f1b98ab6cb927ab924a38a8649f1ffd7525c75fe5b594f5dab17af70e18", size = 5008668 }, + { url = "https://files.pythonhosted.org/packages/b8/95/316f20092b389b927dba1d1dccd3f541853f96e707e210f1b9f4e7bacdd5/fonttools-4.55.0-cp313-cp313-win32.whl", hash = "sha256:abe62987c37630dca69a104266277216de1023cf570c1643bb3a19a9509e7a1b", size = 2155841 }, + { url = "https://files.pythonhosted.org/packages/35/ca/b4638aa3e446184892e2f9cc8ef44bb506f47fea04580df7fb84f5a4363d/fonttools-4.55.0-cp313-cp313-win_amd64.whl", hash = "sha256:2863555ba90b573e4201feaf87a7e71ca3b97c05aa4d63548a4b69ea16c9e998", size = 2200587 }, + { url = "https://files.pythonhosted.org/packages/ca/83/12c26ce25df9de2d247c31f27cddd1acd08078ad18631032db6ce946f01e/fonttools-4.55.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f901cef813f7c318b77d1c5c14cf7403bae5cb977cede023e22ba4316f0a8f6", size = 2773168 }, + { url = "https://files.pythonhosted.org/packages/db/19/03e7de9889c668e19c34bfb6c261252294b6ddeb06cd5f9864bf01f162a1/fonttools-4.55.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8c9679fc0dd7e8a5351d321d8d29a498255e69387590a86b596a45659a39eb0d", size = 2297131 }, + { url = "https://files.pythonhosted.org/packages/e3/9d/5f981c69f99d07e59a7f2f58efa91e87ffc3bbd548a2979704a3382f53df/fonttools-4.55.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd2820a8b632f3307ebb0bf57948511c2208e34a4939cf978333bc0a3f11f838", size = 4582322 }, + { url = "https://files.pythonhosted.org/packages/1d/3e/0841e7bf38ad317c960992dd03bac041899a1c21396013e6ddcfd2bc48c5/fonttools-4.55.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23bbbb49bec613a32ed1b43df0f2b172313cee690c2509f1af8fdedcf0a17438", size = 4640834 }, + { url = "https://files.pythonhosted.org/packages/3a/0f/39e95369fae73e06b5110fdc245f71c82f2d6870a2cef96440045a2a3b23/fonttools-4.55.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a656652e1f5d55b9728937a7e7d509b73d23109cddd4e89ee4f49bde03b736c6", size = 4575466 }, + { url = "https://files.pythonhosted.org/packages/5e/e6/fed351dec03c335eeaf3d276c1b3995c33c59bde0ed7911bc8d55661a41b/fonttools-4.55.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f50a1f455902208486fbca47ce33054208a4e437b38da49d6721ce2fef732fcf", size = 4748309 }, + { url = "https://files.pythonhosted.org/packages/c2/8c/6295c8b395f26b7c6be42ac55308b704b4c0709a2e7770c54d64810150c1/fonttools-4.55.0-cp39-cp39-win32.whl", hash = "sha256:161d1ac54c73d82a3cded44202d0218ab007fde8cf194a23d3dd83f7177a2f03", size = 2170761 }, + { url = "https://files.pythonhosted.org/packages/9b/fa/0bd359e011f71afb11f33d8f7adc9cd81213a42c8e62d05ba75befd228ad/fonttools-4.55.0-cp39-cp39-win_amd64.whl", hash = "sha256:ca7fd6987c68414fece41c96836e945e1f320cda56fc96ffdc16e54a44ec57a2", size = 2214479 }, + { url = "https://files.pythonhosted.org/packages/b4/4a/786589606d4989cb34d8bc766cd687d955aaf3039c367fe7104bcf82dc98/fonttools-4.55.0-py3-none-any.whl", hash = "sha256:12db5888cd4dd3fcc9f0ee60c6edd3c7e1fd44b7dd0f31381ea03df68f8a153f", size = 1100249 }, +] + +[[package]] +name = "fs" +version = "2.4.16" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "appdirs" }, + { name = "setuptools" }, + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5d/a9/af5bfd5a92592c16cdae5c04f68187a309be8a146b528eac3c6e30edbad2/fs-2.4.16.tar.gz", hash = "sha256:ae97c7d51213f4b70b6a958292530289090de3a7e15841e108fbe144f069d313", size = 187441 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/5c/a3d95dc1ec6cdeb032d789b552ecc76effa3557ea9186e1566df6aac18df/fs-2.4.16-py2.py3-none-any.whl", hash = "sha256:660064febbccda264ae0b6bace80a8d1be9e089e0a5eb2427b7d517f9a91545c", size = 135261 }, ] [[package]] @@ -705,14 +764,14 @@ wheels = [ [[package]] name = "jedi" -version = "0.19.1" +version = "0.19.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "parso" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d6/99/99b493cec4bf43176b678de30f81ed003fd6a647a301b9c927280c600f0a/jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd", size = 1227821 } +sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287 } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/9f/bc63f0f0737ad7a60800bfd472a4836661adae21f9c2535f3957b1e54ceb/jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0", size = 1569361 }, + { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278 }, ] [[package]] @@ -903,47 +962,58 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b0/bf/ea8887e9f31a8f93ca306699d11909c6140151393a4216f0d9f85a004077/latexcodec-3.0.0-py3-none-any.whl", hash = "sha256:6f3477ad5e61a0a99bd31a6a370c34e88733a6bad9c921a3ffcfacada12f41a7", size = 18150 }, ] +[[package]] +name = "latextools" +version = "0.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fs" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/09/96/35c67a8a318c782a9d36ce6dae30c4f441aff1c4341040fa9a873e6fb216/latextools-0.5.0-py3-none-any.whl", hash = "sha256:6e6bb6c8c98ca3e11a84da724c5c081cdc78ff29aaadbaadbe5ef66d327aa4bd", size = 27267 }, +] + [[package]] name = "ldpc" -version = "0.1.53" +version = "0.1.60" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, { name = "scipy" }, { name = "tqdm" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7d/5b/7060aa26d912a56063c8a829d084665914bd4982b9fced2156db24649ec7/ldpc-0.1.53.tar.gz", hash = "sha256:3b2652aa993ab71672d680ac76ee2dcf3dc289fc5d11c07d060e5f838d8c3601", size = 374090 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/60/f2/5ac84e3b98a96fa90875c6c50441dc2e826642e44bc78eccd5de2de6e4f1/ldpc-0.1.53-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:006089db8dfbde35df98151cb6f3f9e31249f987603382a81ed4393e3322eb86", size = 574140 }, - { url = "https://files.pythonhosted.org/packages/d7/a2/eceedb0daa32843ad844e5a14f757e7c08250ba06ae8c8565a5897320634/ldpc-0.1.53-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:400c0f8c92600e417610c971808f164b44828e9af3a4214f46a87ee9b1192dd8", size = 568599 }, - { url = "https://files.pythonhosted.org/packages/88/10/04e7128957079ee280e9449aae5a0d40c68ed6e6b0b275f16b7cd5a79ba4/ldpc-0.1.53-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:007f89032f8908613e4c0d4367542a5856ef594fcf8c82848764cb161a7b8a51", size = 1313121 }, - { url = "https://files.pythonhosted.org/packages/c3/ac/5ee4503ed76eedcb302af0cb4a18d9b790d91ad986c540eafd10edf0757b/ldpc-0.1.53-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c20fea3e9ad38c4dfbc85fb06c13d698465935e454a40fc1a77528dfff3329b5", size = 1267462 }, - { url = "https://files.pythonhosted.org/packages/3b/7d/70e244c54584f6ce56f1ff40a6bd64717a43d6a9b080d0dfffd4d737d29a/ldpc-0.1.53-cp310-cp310-win32.whl", hash = "sha256:305cd3f9562e9f8123fb8d281a522805b64cd4daf2da7336fe86c6df9d530923", size = 523330 }, - { url = "https://files.pythonhosted.org/packages/dc/74/69672658475372c55492f584f9bdbd49078624609c9c09d6892c72be5c13/ldpc-0.1.53-cp310-cp310-win_amd64.whl", hash = "sha256:ff2d099dd2bb9935dd07549fbbddfc9e6c3c8a8caf004ce4d22746aec952bb77", size = 540898 }, - { url = "https://files.pythonhosted.org/packages/9a/2b/bc11189fd3581ff081b04aef4b92aaecaa2dbf1d4515fc4c733cb36879d6/ldpc-0.1.53-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:91e6e85101ee200ff6adc6dc799a0b09de570d6a47ebd5e32eeaebd3420cc958", size = 573548 }, - { url = "https://files.pythonhosted.org/packages/18/ca/efbd671974265b4e4d0293496de3d43966c282d639013e30937ec5785acd/ldpc-0.1.53-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2ba27f94ddc448a148f4a704450c100ca12d3b74fa3b189ca8614b857572e4fb", size = 568066 }, - { url = "https://files.pythonhosted.org/packages/c8/9a/86f4257388d91c60b73ab9bc01f274d66b63539ae36d515a8d2fab6a377a/ldpc-0.1.53-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52a7f98058d4aa58b808622a579f5a6fd6c88386b3a47836440d340d956b8904", size = 1384061 }, - { url = "https://files.pythonhosted.org/packages/93/a4/e288555c6da43c15760665519516f6ad940bdd932cedc7e41c1742ae843a/ldpc-0.1.53-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3d32128c3d15bf5d4a0d54e780ce9b7153c142e0427dcc47b7aaa7c660c7a70", size = 1341424 }, - { url = "https://files.pythonhosted.org/packages/c1/c4/fb8b27714e4ed00cdb19ff137757723790d38cc50f36f138a128dad6c744/ldpc-0.1.53-cp311-cp311-win32.whl", hash = "sha256:96d2b25b19a2f9611efb5a906539be4d6c05d97ba6056ccf19ca231eb7269d5b", size = 522284 }, - { url = "https://files.pythonhosted.org/packages/3f/92/36f166de6166cc12cbadfdc5af64aee0884f811c07d889cf51f93049a6a8/ldpc-0.1.53-cp311-cp311-win_amd64.whl", hash = "sha256:c440480a036043d1736cb6d8cb03c0228f91acdd6bb9696820b316b1bca1b668", size = 541392 }, - { url = "https://files.pythonhosted.org/packages/0b/21/ed2533ffc15cc0a5c2079d6ce9da0e7c2e51013e07844fddb0bc07646766/ldpc-0.1.53-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b871e0325f07f340791beaef5cc868e7938b5ae5b5a324a3c03ef64639d9e95a", size = 573476 }, - { url = "https://files.pythonhosted.org/packages/da/06/b0b3daa1a04d76a5f9b4142c1dafc9015d00081b0ab4dc0d39fbbca303ec/ldpc-0.1.53-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e77420ad6d05e0f2addd2a6c9c15915e8ef40234b83741f944e509b314cca5c5", size = 568180 }, - { url = "https://files.pythonhosted.org/packages/93/da/4c74f79457ec5970f842d1ed02394986b6fd8ca6316d804c9121f8f5c276/ldpc-0.1.53-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43101b49b361732b38360e30bbd2abc46fda06f713ddf5e23443f8a0e295bd00", size = 1410802 }, - { url = "https://files.pythonhosted.org/packages/ec/13/6ae552ab1bf53f7c101a225db60733544bd0273f6a3c0de0abef5c22350f/ldpc-0.1.53-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:698818c461be1ca51eb38f4540d05f1cb667f30c7d109b99c5afcc1056507408", size = 1362267 }, - { url = "https://files.pythonhosted.org/packages/a2/da/5fb1ed5f7fca309443da5eef2e63c726eca809faaef29efd30393a723e94/ldpc-0.1.53-cp312-cp312-win32.whl", hash = "sha256:52c48b859364820db336fd3efc759684ca0968a2258f7c39759f8d322ac53991", size = 522166 }, - { url = "https://files.pythonhosted.org/packages/b7/32/700ea7863351f2038d9c923f01004f355862d1be0b334328550ee888ad54/ldpc-0.1.53-cp312-cp312-win_amd64.whl", hash = "sha256:e60d7825765cd3cd44aeca6d630916add1577aaee64c1793f5b2874b8eecd113", size = 541349 }, - { url = "https://files.pythonhosted.org/packages/23/3a/3eeb45995d57cd8186eacccdfc82e92f2ba50704539642e37bc7e8927961/ldpc-0.1.53-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3c55bd33c42f8dcc9c9df5384342dc9d160fd4e9b5d9f20492dfbe797b9a0d20", size = 570223 }, - { url = "https://files.pythonhosted.org/packages/6d/a0/a8dc1a516704f23198acbd0625390f945c55b3416cb4059899dccb7a3463/ldpc-0.1.53-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:220234f455b58c356e4fa9630b71cdf65c6bf1567e6fd24cbdc0c8e2b2f09aed", size = 564876 }, - { url = "https://files.pythonhosted.org/packages/45/82/b6f94631108ccc47b555c26941974a3d0c71ac8324c26994b902ab7eb2ea/ldpc-0.1.53-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:407ce4323df98f5a42462eb6e4516934db34e0626093389dcfaa729cb2e64e52", size = 1398981 }, - { url = "https://files.pythonhosted.org/packages/fc/fc/ddb729d8d8d674bcd7365ceb3f3b6cfe8ae92a7c3682e610a45a6e0b18b3/ldpc-0.1.53-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:15c0bd51252cdddad325617b38655d2e2fb654e5e19dfd6a1b511a999f86b396", size = 1353587 }, - { url = "https://files.pythonhosted.org/packages/9c/1b/609bbbef018cf4da6c05f44f7845ad3b4b5e465ef7cfda66066fa7d8ec1c/ldpc-0.1.53-cp313-cp313-win32.whl", hash = "sha256:499b353bbeec40263fe41321e392d2824a6fe8ca3b4bbac94f73fba380177cc6", size = 521192 }, - { url = "https://files.pythonhosted.org/packages/0b/6d/06ddf5f6b572f80cb17a9e2a8935ab2c33b787a95ddd89f7ffcebb33d082/ldpc-0.1.53-cp313-cp313-win_amd64.whl", hash = "sha256:7158f6122868cb61b781afee5bb51a8adc2b5cb301716991d01bf9cf337ad389", size = 540072 }, - { url = "https://files.pythonhosted.org/packages/28/3b/e12dbb0ec1651d651c66fac25cea9b6540587d1dbcebf5fc94f4a46d2d6d/ldpc-0.1.53-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e8fd7bd3194ee025b7fd996006c24cb5530d89347528a9083ab494ee9fd3c59c", size = 575977 }, - { url = "https://files.pythonhosted.org/packages/55/05/42032b3fca857e87f4a005dd9c6698d8d1293e81d607e3ea778ebf15f4c0/ldpc-0.1.53-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d4d8a8ae9368beafd5049fde027074111ef360d4cef13a3f0059adc0e38d2386", size = 570293 }, - { url = "https://files.pythonhosted.org/packages/98/fb/3ebe1c04245a88fb57d4e9dbe6bf4441180dc93ebf743f6f6959917609e3/ldpc-0.1.53-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3ced65813ca33293a4f809d5cd9f587fee857722c521590208395e1e1be055e", size = 1321528 }, - { url = "https://files.pythonhosted.org/packages/09/b2/9fee0686b2ad5a4eb1b14afaf3c50b35e9df17e4d0f43f3607b957cac01a/ldpc-0.1.53-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76413bf4636ff0c3f3e8a4d90338a7c1b21f39f579304f32db46c759019d1d4a", size = 1276087 }, - { url = "https://files.pythonhosted.org/packages/96/dc/fc747618b1ed0065ce30b8520dc124cb87a5d88a3b6182ba67819fb340a7/ldpc-0.1.53-cp39-cp39-win32.whl", hash = "sha256:504696016df275265f5d1d3da6641d4506764711583778e632a284dd1d2d53bb", size = 525173 }, - { url = "https://files.pythonhosted.org/packages/33/c3/939eed51dd0f6efcb3545bfb69c7167f2d02bc387ad8192c76ea89da5b39/ldpc-0.1.53-cp39-cp39-win_amd64.whl", hash = "sha256:fb75cf55cbbdc5ba339ffe1df007fab16bc1da3954d2304e6f2ce47d79151d1c", size = 542595 }, +sdist = { url = "https://files.pythonhosted.org/packages/ef/f8/76b240cda917e1c25afacd6ddde86b3ad34bfb33da4e33df0c389e2c3bec/ldpc-0.1.60.tar.gz", hash = "sha256:06152fcce834c2d46ee04add2102e7d90f9c86617e04113ae84deba9e84f17ba", size = 374066 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/93/dbc2b7d95e05f0066b61598e1d74dda322dee5a6542972b074c61cc61116/ldpc-0.1.60-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b17c58620d96c7003f4d5428d8199d7807446ff0e6fc0c39832affa967370243", size = 574114 }, + { url = "https://files.pythonhosted.org/packages/6e/cc/3b337f258e72e486924e6c5a5d723d0a03a81c0339f1ab5bbd7365a0788d/ldpc-0.1.60-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5103cce5713a338c7d2319ace5a555cfdefd9a33e81a4491c1e3973cc602bbad", size = 568538 }, + { url = "https://files.pythonhosted.org/packages/d1/31/4364f966bc834cfb7012b68debb65f75f2d78acbb4ead70c858330b2ce99/ldpc-0.1.60-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28066a55b855de08da4a33c1349a486f79ee3e5f9883a42a14357320a71bf7e0", size = 1313121 }, + { url = "https://files.pythonhosted.org/packages/02/80/deec8a03cf75043d791db61240139ce57bd35d4d6172b1add1f7a6a1a3ee/ldpc-0.1.60-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:79e045cb7a03ec2d4eaf8405fe37f6f9b27c733a66de0f41a453a930b16a40d5", size = 1267499 }, + { url = "https://files.pythonhosted.org/packages/a2/36/ff2c26dc96fd33f124f080d90b4aa6540e792589213c6deadd1910a913df/ldpc-0.1.60-cp310-cp310-win32.whl", hash = "sha256:dd42d119a0bb1b8ff70088adfe4266ba5f8c5768e81d6db989e818abacc857db", size = 523302 }, + { url = "https://files.pythonhosted.org/packages/46/cb/ded17d77fbfb4a1e75270e93a5e7688252f76a05a773659835b61a767035/ldpc-0.1.60-cp310-cp310-win_amd64.whl", hash = "sha256:a29445a339b9069df96b2545cb9216034683ae85b5a5b59712c330327d320f23", size = 540886 }, + { url = "https://files.pythonhosted.org/packages/4a/9a/e4e6d70f7c1c2d4faf1bcd3b1666e183b24fd581a6169cacfb3dab6f3e03/ldpc-0.1.60-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:35c8326f6ad7d8017ba89ec9fb9c2b2fdfc3cdbefebaedc17423519bd70d1a71", size = 573517 }, + { url = "https://files.pythonhosted.org/packages/ad/77/383c6cdb2ef3818362a9654e6bafb5c7415c49f1fbb5c6dc9f988e8aa7b2/ldpc-0.1.60-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:411584c084470288d95737eb6de94cde2571459c15b880d9e8a4e552cd942393", size = 568029 }, + { url = "https://files.pythonhosted.org/packages/40/1a/b05618c9533b4c4d0de8be8f23a68b69e311110d0e7d7e9a23ccf8b65056/ldpc-0.1.60-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1896ef67af5be3998aebba5e0b6110dbd02b119fed2e6bdc5f2738d26eccb7ea", size = 1384062 }, + { url = "https://files.pythonhosted.org/packages/8a/24/0578140b2ed4c6ba3d56f03949c8e1a868c3060a240d9215b7665f637a5c/ldpc-0.1.60-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f83cda648d68998e98e817eae0e84b5057ebb3d6941db9855adf3f0286000bd5", size = 1341428 }, + { url = "https://files.pythonhosted.org/packages/19/34/955b40e8313817ad6853412f9207fdac5dfc94e061988554bf1b07345222/ldpc-0.1.60-cp311-cp311-win32.whl", hash = "sha256:eaa7fe7d813a1935908e4730605595c000f20efa3541f9ee0aa3cdb98c33de5f", size = 522250 }, + { url = "https://files.pythonhosted.org/packages/09/25/c7cbbc4089eac07b5b335735370192ed87268ad52374f3c73b137cc31082/ldpc-0.1.60-cp311-cp311-win_amd64.whl", hash = "sha256:18b721d0a25b4b149e8b5cdbd8cae7d327c9eb445bdfaa84878f4e7ee87702a5", size = 541363 }, + { url = "https://files.pythonhosted.org/packages/f7/a4/6d3b61e813ae14be8357ea6c5d182ae17147fb87ae7f7313a0ccae85880f/ldpc-0.1.60-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:85cd76ec06834bf4c1ccd69577328782e4cd7524f3cc15a92f220debabf86ce6", size = 573433 }, + { url = "https://files.pythonhosted.org/packages/48/fd/917f8ec5ace1eb1e666a6cf00981b029417822983daa1a72fbbdfa21fa43/ldpc-0.1.60-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3bf499917617fda559160635d49f88ff8402de0b10e82121087f3c5c081dac4a", size = 568160 }, + { url = "https://files.pythonhosted.org/packages/cf/54/74bab08c53059f94a1608eeb04f429efb5c1dd1d1d596de9f5a556bc44d9/ldpc-0.1.60-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f101742220f52d5fcd7cbe282d26b924bbfe4823feaa01c2da2aa7aa54e0318", size = 1410814 }, + { url = "https://files.pythonhosted.org/packages/9d/d2/eb83817184d8e07f43b0f3c8a1928298282e8bd7cf59ca4c2e38719da248/ldpc-0.1.60-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bdecbf7aa294066e5f0cab4f2b257980ddab910899a654a930a35c3dbc769974", size = 1362258 }, + { url = "https://files.pythonhosted.org/packages/09/1c/75d0a99b6efa2b8fb3a59b26999ca74e532df4244691168c6f05532886b9/ldpc-0.1.60-cp312-cp312-win32.whl", hash = "sha256:d0c82887ede968b34eae89fe1ca8d98170586dfeefafee1bfee2f773d94469fe", size = 522158 }, + { url = "https://files.pythonhosted.org/packages/ea/ec/a1abad143c61f08b1bd6aff180a4e7030b2e782ac152b1f43c3a2b5dd784/ldpc-0.1.60-cp312-cp312-win_amd64.whl", hash = "sha256:2d3d422ba4d2d9b8a94f3beed4888f6daa7e61c779dc905a030c39afea4a8708", size = 541313 }, + { url = "https://files.pythonhosted.org/packages/6b/a7/e970595e94cfbfe6c66a6df0deff7425b754b2ac618eac0413c7055f0627/ldpc-0.1.60-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a108c65a00e8e064e627c09565e95b18ba9c9b7b309cfe1fa405285ef17d6832", size = 570176 }, + { url = "https://files.pythonhosted.org/packages/39/13/b4a8560d76c9b623facf7450ec6055a3ccab4905edcdf829d6d3c9d20f12/ldpc-0.1.60-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:42808fcf37ea58e2e61cc90c1f0dfe2326ef57f302ddbf80c9937963b7811159", size = 564834 }, + { url = "https://files.pythonhosted.org/packages/07/a8/f3c08e292c6dbf544a76a422cebeb1228d660663330c5202eca04719dd44/ldpc-0.1.60-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ccb020863d62b51553431cd7986a85c4f6a7024ed5f7992796db7ac38672023", size = 1398979 }, + { url = "https://files.pythonhosted.org/packages/7d/31/645b0f4e3f1ca1a493739d0de83c29321d53ab80127cee1910a89490679b/ldpc-0.1.60-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e32662918590b59fc16283e59f4be26f6011b16bc966de3eff93664a6a6eb858", size = 1353581 }, + { url = "https://files.pythonhosted.org/packages/fa/50/dc4bd6efac99fa817f18a5501dbfc4b35daa7f40aad76de038a19d664e8d/ldpc-0.1.60-cp313-cp313-win32.whl", hash = "sha256:cb56fbfc2dc6ee3c13ead819c9c9c18d6aa6025b21cf583fd5ac29c7fa2492bc", size = 521161 }, + { url = "https://files.pythonhosted.org/packages/e1/d8/f38f4c323beb2124880d9672668759a1c23185a4769b87144a001bb8022a/ldpc-0.1.60-cp313-cp313-win_amd64.whl", hash = "sha256:f277ea524ab80c59dc6ee6a95373e91b9fcae63abbb0f3979998d5aa6f608cf9", size = 540076 }, + { url = "https://files.pythonhosted.org/packages/51/30/4c4ebe5dae12a475c0f04ffcd24891ba58910a5fa4748b8fc73c522ffe6c/ldpc-0.1.60-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c14cc88df29208a5d538e9d64567d27c2994dc2e8030eecd7f9c35aa5ff1da0e", size = 575952 }, + { url = "https://files.pythonhosted.org/packages/3b/3c/22b6dc6fefd6b59f2edaa20b21190058f3d17cf30b7b19d2fb25cc3c6434/ldpc-0.1.60-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dde97f0d18a2c84bb7c6ef29f753e56a8114e7b49b7d11f34aa1bde2f3b4db43", size = 570238 }, + { url = "https://files.pythonhosted.org/packages/fc/80/256b6e3799635534b0aada94d75d2b01cf1db932e3e06c57982fade30982/ldpc-0.1.60-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6241d9b34488323df07dfc10ddbb218098cb29c4329ab2b6aab214f2467a0dc", size = 1321533 }, + { url = "https://files.pythonhosted.org/packages/4f/71/792c4c007219c26b69c72f00a340f227513f9eec9fc7b68d7a5cd1c987b5/ldpc-0.1.60-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1456605f3abdb34f05ecbe7496c7847546caa70801e875e01120791abd558cc2", size = 1276065 }, + { url = "https://files.pythonhosted.org/packages/41/f8/b68c9c801519eeac44542ed751feec49962249dd16e8973548403b00eb12/ldpc-0.1.60-cp39-cp39-win32.whl", hash = "sha256:8f0870b6c07894ec55917180f6b6898180a28a2368be202c684229fa2269eeb5", size = 525169 }, + { url = "https://files.pythonhosted.org/packages/c9/0b/1db19bcfb798464d5eee91eb87aa309bac694171c20e444cc8e2bc6b8af6/ldpc-0.1.60-cp39-cp39-win_amd64.whl", hash = "sha256:e9a1f26465b95d5b732c3dbdaf1556275c34fc4b115aef40a9e3b3d99bbf460a", size = 542584 }, ] [[package]] @@ -976,70 +1046,70 @@ wheels = [ [[package]] name = "markupsafe" -version = "3.0.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b4/d2/38ff920762f2247c3af5cbbbbc40756f575d9692d381d7c520f45deb9b8f/markupsafe-3.0.1.tar.gz", hash = "sha256:3e683ee4f5d0fa2dde4db77ed8dd8a876686e3fc417655c2ece9a90576905344", size = 20249 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/a2/0482d1a157f5f10f72fc4fe8c3be9ffa3651c1f7a12b60a3ab71b2635e13/MarkupSafe-3.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:db842712984e91707437461930e6011e60b39136c7331e971952bb30465bc1a1", size = 14391 }, - { url = "https://files.pythonhosted.org/packages/3b/25/5ea6500d200fd2dc3ea25c765f69dea0a1a8d42ec80a38cd896ad47cb85d/MarkupSafe-3.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3ffb4a8e7d46ed96ae48805746755fadd0909fea2306f93d5d8233ba23dda12a", size = 12414 }, - { url = "https://files.pythonhosted.org/packages/92/41/cf5397dd6bb18895d148aa402cafa71018f2ffc5f6e9d6e90d85b523c741/MarkupSafe-3.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67c519635a4f64e495c50e3107d9b4075aec33634272b5db1cde839e07367589", size = 21787 }, - { url = "https://files.pythonhosted.org/packages/2e/0d/5d91ef2b4f30afa87483a3a7c108c777d144b1c42d7113459296a8a2bfa0/MarkupSafe-3.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48488d999ed50ba8d38c581d67e496f955821dc183883550a6fbc7f1aefdc170", size = 20954 }, - { url = "https://files.pythonhosted.org/packages/f6/de/12a4110c2c7c7b502fe0e6f911367726dbb7a37e03e207495135d064bb48/MarkupSafe-3.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f31ae06f1328595d762c9a2bf29dafd8621c7d3adc130cbb46278079758779ca", size = 21086 }, - { url = "https://files.pythonhosted.org/packages/96/55/59389babc6e8ed206849a9958de9da7c23f3a75d294f46e99624fa38fb79/MarkupSafe-3.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:80fcbf3add8790caddfab6764bde258b5d09aefbe9169c183f88a7410f0f6dea", size = 21685 }, - { url = "https://files.pythonhosted.org/packages/3d/cb/cbad5f093e12cd79ceea3e2957ba5bd4c2706810f333d0a3422ab2aef358/MarkupSafe-3.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3341c043c37d78cc5ae6e3e305e988532b072329639007fd408a476642a89fd6", size = 21348 }, - { url = "https://files.pythonhosted.org/packages/8e/70/e19c4f39d68a52406012ee118667b57efb0bbe6e950be21187cd7a1b4b80/MarkupSafe-3.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cb53e2a99df28eee3b5f4fea166020d3ef9116fdc5764bc5117486e6d1211b25", size = 21098 }, - { url = "https://files.pythonhosted.org/packages/30/95/ca809c01624428d427e9b3a4500f9068eca941e0c520328954ce84ad966a/MarkupSafe-3.0.1-cp310-cp310-win32.whl", hash = "sha256:db15ce28e1e127a0013dfb8ac243a8e392db8c61eae113337536edb28bdc1f97", size = 15075 }, - { url = "https://files.pythonhosted.org/packages/23/41/decb99ab07793656821a86f827a394700ce28402ebb02dc6d003210d9859/MarkupSafe-3.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:4ffaaac913c3f7345579db4f33b0020db693f302ca5137f106060316761beea9", size = 15535 }, - { url = "https://files.pythonhosted.org/packages/ce/af/2f5d88a7fc7226bd34c6e15f6061246ad8cff979da9f19d11bdd0addd8e2/MarkupSafe-3.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:26627785a54a947f6d7336ce5963569b5d75614619e75193bdb4e06e21d447ad", size = 14387 }, - { url = "https://files.pythonhosted.org/packages/8d/43/fd588ef5d192308c5e05974bac659bf6ae29c202b7ea2c4194bcf01eacee/MarkupSafe-3.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b954093679d5750495725ea6f88409946d69cfb25ea7b4c846eef5044194f583", size = 12410 }, - { url = "https://files.pythonhosted.org/packages/58/26/78f161d602fb03804118905e5faacafc0ec592bbad71aaee62537529813a/MarkupSafe-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:973a371a55ce9ed333a3a0f8e0bcfae9e0d637711534bcb11e130af2ab9334e7", size = 24006 }, - { url = "https://files.pythonhosted.org/packages/ae/1d/7d5ec8bcfd9c2db235d720fa51d818b7e2abc45250ce5f53dd6cb60409ca/MarkupSafe-3.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:244dbe463d5fb6d7ce161301a03a6fe744dac9072328ba9fc82289238582697b", size = 23303 }, - { url = "https://files.pythonhosted.org/packages/26/ce/703ca3b03a709e3bd1fbffa407789e56b9fa664456538092617dd665fc1d/MarkupSafe-3.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d98e66a24497637dd31ccab090b34392dddb1f2f811c4b4cd80c230205c074a3", size = 23205 }, - { url = "https://files.pythonhosted.org/packages/88/60/40be0493decabc2344b12d3a709fd6ccdd15a5ebaee1e8d878315d107ad3/MarkupSafe-3.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ad91738f14eb8da0ff82f2acd0098b6257621410dcbd4df20aaa5b4233d75a50", size = 23684 }, - { url = "https://files.pythonhosted.org/packages/6d/f8/8fd52a66e8f62a9add62b4a0b5a3ab4092027437f2ef027f812d94ae91cf/MarkupSafe-3.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7044312a928a66a4c2a22644147bc61a199c1709712069a344a3fb5cfcf16915", size = 23472 }, - { url = "https://files.pythonhosted.org/packages/d4/0b/998b17b9e06ea45ad1646fea586f1b83d02dfdb14d47dd2fd81fba5a08c9/MarkupSafe-3.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a4792d3b3a6dfafefdf8e937f14906a51bd27025a36f4b188728a73382231d91", size = 23388 }, - { url = "https://files.pythonhosted.org/packages/5a/57/b6b7aa23b2e26d68d601718f8ce3161fbdaf967b31752c7dec52bef828c9/MarkupSafe-3.0.1-cp311-cp311-win32.whl", hash = "sha256:fa7d686ed9883f3d664d39d5a8e74d3c5f63e603c2e3ff0abcba23eac6542635", size = 15106 }, - { url = "https://files.pythonhosted.org/packages/fc/b5/20cb1d714596acb553c810009c8004c809823947da63e13c19a7decfcb6c/MarkupSafe-3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:9ba25a71ebf05b9bb0e2ae99f8bc08a07ee8e98c612175087112656ca0f5c8bf", size = 15542 }, - { url = "https://files.pythonhosted.org/packages/45/6d/72ed58d42a12bd9fc288dbff6dd8d03ea973a232ac0538d7f88d105b5251/MarkupSafe-3.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:8ae369e84466aa70f3154ee23c1451fda10a8ee1b63923ce76667e3077f2b0c4", size = 14322 }, - { url = "https://files.pythonhosted.org/packages/86/f5/241238f89cdd6461ac9f521af8389f9a48fab97e4f315c69e9e0d52bc919/MarkupSafe-3.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40f1e10d51c92859765522cbd79c5c8989f40f0419614bcdc5015e7b6bf97fc5", size = 12380 }, - { url = "https://files.pythonhosted.org/packages/27/94/79751928bca5841416d8ca02e22198672e021d5c7120338e2a6e3771f8fc/MarkupSafe-3.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a4cb365cb49b750bdb60b846b0c0bc49ed62e59a76635095a179d440540c346", size = 24099 }, - { url = "https://files.pythonhosted.org/packages/10/6e/1b8070bbfc467429c7983cd5ffd4ec57e1d501763d974c7caaa0a9a79f4c/MarkupSafe-3.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee3941769bd2522fe39222206f6dd97ae83c442a94c90f2b7a25d847d40f4729", size = 23249 }, - { url = "https://files.pythonhosted.org/packages/66/50/9389ae6cdff78d7481a2a2641830b5eb1d1f62177550e73355a810a889c9/MarkupSafe-3.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62fada2c942702ef8952754abfc1a9f7658a4d5460fabe95ac7ec2cbe0d02abc", size = 23149 }, - { url = "https://files.pythonhosted.org/packages/16/02/5dddff5366fde47133186efb847fa88bddef85914bbe623e25cfeccb3517/MarkupSafe-3.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4c2d64fdba74ad16138300815cfdc6ab2f4647e23ced81f59e940d7d4a1469d9", size = 23864 }, - { url = "https://files.pythonhosted.org/packages/f3/f1/700ee6655561cfda986e03f7afc309e3738918551afa7dedd99225586227/MarkupSafe-3.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:fb532dd9900381d2e8f48172ddc5a59db4c445a11b9fab40b3b786da40d3b56b", size = 23440 }, - { url = "https://files.pythonhosted.org/packages/fb/3e/d26623ac7f16709823b4c80e0b4a1c9196eeb46182a6c1d47b5e0c8434f4/MarkupSafe-3.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0f84af7e813784feb4d5e4ff7db633aba6c8ca64a833f61d8e4eade234ef0c38", size = 23610 }, - { url = "https://files.pythonhosted.org/packages/51/04/1f8da0810c39cb9fcff96b6baed62272c97065e9cf11471965a161439e20/MarkupSafe-3.0.1-cp312-cp312-win32.whl", hash = "sha256:cbf445eb5628981a80f54087f9acdbf84f9b7d862756110d172993b9a5ae81aa", size = 15113 }, - { url = "https://files.pythonhosted.org/packages/eb/24/a36dc37365bdd358b1e583cc40475593e36ab02cb7da6b3d0b9c05b0da7a/MarkupSafe-3.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:a10860e00ded1dd0a65b83e717af28845bb7bd16d8ace40fe5531491de76b79f", size = 15611 }, - { url = "https://files.pythonhosted.org/packages/b1/60/4572a8aa1beccbc24b133aa0670781a5d2697f4fa3fecf0a87b46383174b/MarkupSafe-3.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e81c52638315ff4ac1b533d427f50bc0afc746deb949210bc85f05d4f15fd772", size = 14325 }, - { url = "https://files.pythonhosted.org/packages/38/42/849915b99a765ec104bfd07ee933de5fc9c58fa9570efa7db81717f495d8/MarkupSafe-3.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:312387403cd40699ab91d50735ea7a507b788091c416dd007eac54434aee51da", size = 12373 }, - { url = "https://files.pythonhosted.org/packages/ef/82/4caaebd963c6d60b28e4445f38841d24f8b49bc10594a09956c9d73bfc08/MarkupSafe-3.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ae99f31f47d849758a687102afdd05bd3d3ff7dbab0a8f1587981b58a76152a", size = 24059 }, - { url = "https://files.pythonhosted.org/packages/20/15/6b319be2f79fcfa3173f479d69f4e950b5c9b642db4f22cf73ae5ade745f/MarkupSafe-3.0.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c97ff7fedf56d86bae92fa0a646ce1a0ec7509a7578e1ed238731ba13aabcd1c", size = 23211 }, - { url = "https://files.pythonhosted.org/packages/9d/3f/8963bdf4962feb2154475acb7dc350f04217b5e0be7763a39b432291e229/MarkupSafe-3.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7420ceda262dbb4b8d839a4ec63d61c261e4e77677ed7c66c99f4e7cb5030dd", size = 23095 }, - { url = "https://files.pythonhosted.org/packages/af/93/f770bc70953d32de0c6ce4bcb76271512123a1ead91aaef625a020c5bfaf/MarkupSafe-3.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:45d42d132cff577c92bfba536aefcfea7e26efb975bd455db4e6602f5c9f45e7", size = 23901 }, - { url = "https://files.pythonhosted.org/packages/11/92/1e5a33aa0a1190161238628fb68eb1bc5e67b56a5c89f0636328704b463a/MarkupSafe-3.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c8817557d0de9349109acb38b9dd570b03cc5014e8aabf1cbddc6e81005becd", size = 23463 }, - { url = "https://files.pythonhosted.org/packages/0d/fe/657efdfe385d2a3a701f2c4fcc9577c63c438aeefdd642d0d956c4ecd225/MarkupSafe-3.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6a54c43d3ec4cf2a39f4387ad044221c66a376e58c0d0e971d47c475ba79c6b5", size = 23569 }, - { url = "https://files.pythonhosted.org/packages/cf/24/587dea40304046ace60f846cedaebc0d33d967a3ce46c11395a10e7a78ba/MarkupSafe-3.0.1-cp313-cp313-win32.whl", hash = "sha256:c91b394f7601438ff79a4b93d16be92f216adb57d813a78be4446fe0f6bc2d8c", size = 15117 }, - { url = "https://files.pythonhosted.org/packages/32/8f/d8961d633f26a011b4fe054f3bfff52f673423b8c431553268741dfb089e/MarkupSafe-3.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:fe32482b37b4b00c7a52a07211b479653b7fe4f22b2e481b9a9b099d8a430f2f", size = 15613 }, - { url = "https://files.pythonhosted.org/packages/9e/93/d6367ffbcd0c5c371370767f768eaa32af60bc411245b8517e383c6a2b12/MarkupSafe-3.0.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:17b2aea42a7280db02ac644db1d634ad47dcc96faf38ab304fe26ba2680d359a", size = 14563 }, - { url = "https://files.pythonhosted.org/packages/4a/37/f813c3835747dec08fe19ac9b9eced01fdf93a4b3e626521675dc7f423a9/MarkupSafe-3.0.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:852dc840f6d7c985603e60b5deaae1d89c56cb038b577f6b5b8c808c97580f1d", size = 12505 }, - { url = "https://files.pythonhosted.org/packages/72/bf/800b4d1580298ca91ccd6c95915bbd147142dad1b8cf91d57b93b28670dd/MarkupSafe-3.0.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0778de17cff1acaeccc3ff30cd99a3fd5c50fc58ad3d6c0e0c4c58092b859396", size = 25358 }, - { url = "https://files.pythonhosted.org/packages/fd/78/26e209abc8f0a379f031f0acc151231974e5b153d7eda5759d17d8f329f2/MarkupSafe-3.0.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:800100d45176652ded796134277ecb13640c1a537cad3b8b53da45aa96330453", size = 23797 }, - { url = "https://files.pythonhosted.org/packages/09/e1/918496a9390891756efee818880e71c1bbaf587f4dc8ede3f3852357310a/MarkupSafe-3.0.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d06b24c686a34c86c8c1fba923181eae6b10565e4d80bdd7bc1c8e2f11247aa4", size = 23743 }, - { url = "https://files.pythonhosted.org/packages/cd/c6/26f576cd58d6c2decd9045e4e3f3c5dbc01ea6cb710916e7bbb6ebd95b6b/MarkupSafe-3.0.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:33d1c36b90e570ba7785dacd1faaf091203d9942bc036118fab8110a401eb1a8", size = 25076 }, - { url = "https://files.pythonhosted.org/packages/b5/fa/10b24fb3b0e15fe5389dc88ecc6226ede08297e0ba7130610efbe0cdfb27/MarkupSafe-3.0.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:beeebf760a9c1f4c07ef6a53465e8cfa776ea6a2021eda0d0417ec41043fe984", size = 24037 }, - { url = "https://files.pythonhosted.org/packages/c8/81/4b3f5537d9f6cc4f5c80d6c4b78af9a5247fd37b5aba95807b2cbc336b9a/MarkupSafe-3.0.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:bbde71a705f8e9e4c3e9e33db69341d040c827c7afa6789b14c6e16776074f5a", size = 24015 }, - { url = "https://files.pythonhosted.org/packages/5f/07/8e8dcecd53216c5e01a51e84c32a2bce166690ed19c184774b38cd41921d/MarkupSafe-3.0.1-cp313-cp313t-win32.whl", hash = "sha256:82b5dba6eb1bcc29cc305a18a3c5365d2af06ee71b123216416f7e20d2a84e5b", size = 15213 }, - { url = "https://files.pythonhosted.org/packages/0d/87/4c364e0f109eea2402079abecbe33fef4f347b551a11423d1f4e187ea497/MarkupSafe-3.0.1-cp313-cp313t-win_amd64.whl", hash = "sha256:730d86af59e0e43ce277bb83970530dd223bf7f2a838e086b50affa6ec5f9295", size = 15741 }, - { url = "https://files.pythonhosted.org/packages/6f/4f/420741fb39fa3d40396fb1731a1ca78e6f9fbb225dcf15e5185b1fa954bc/MarkupSafe-3.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4935dd7883f1d50e2ffecca0aa33dc1946a94c8f3fdafb8df5c330e48f71b132", size = 14376 }, - { url = "https://files.pythonhosted.org/packages/91/71/0c4782b9ce7fb68b140b94e1eb9d2b6292990bda91dc3d3b5a34e8bd41f3/MarkupSafe-3.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e9393357f19954248b00bed7c56f29a25c930593a77630c719653d51e7669c2a", size = 12408 }, - { url = "https://files.pythonhosted.org/packages/3e/3c/cbf30bf7ac1da2e013e3d338e1582db85fc3b27bf9f8863137423ad4b0b6/MarkupSafe-3.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40621d60d0e58aa573b68ac5e2d6b20d44392878e0bfc159012a5787c4e35bc8", size = 21654 }, - { url = "https://files.pythonhosted.org/packages/0b/28/229e797b8727427845b79cbd58019f598e478f974730fa705fa23904b18e/MarkupSafe-3.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f94190df587738280d544971500b9cafc9b950d32efcb1fba9ac10d84e6aa4e6", size = 20817 }, - { url = "https://files.pythonhosted.org/packages/e8/b4/1121f3b2614de93cbb3deec7f44df283df44c2258ea9368bb1302b4a0b45/MarkupSafe-3.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6a387d61fe41cdf7ea95b38e9af11cfb1a63499af2759444b99185c4ab33f5b", size = 20956 }, - { url = "https://files.pythonhosted.org/packages/a8/8b/b4d57bafca01c8b1e1fbb037660869fa4f6725983c4105a02bd1242f0066/MarkupSafe-3.0.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8ad4ad1429cd4f315f32ef263c1342166695fad76c100c5d979c45d5570ed58b", size = 21548 }, - { url = "https://files.pythonhosted.org/packages/83/87/04806f7096ba1d4f1b8c61f35c1d7c0b507c6a3cf7ed495393bf97eb5af7/MarkupSafe-3.0.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e24bfe89c6ac4c31792793ad9f861b8f6dc4546ac6dc8f1c9083c7c4f2b335cd", size = 21222 }, - { url = "https://files.pythonhosted.org/packages/e9/96/1ecb2bb5ee7298e628cff95833beba7da6a774df7fe890a6d2f0ec460590/MarkupSafe-3.0.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2a4b34a8d14649315c4bc26bbfa352663eb51d146e35eef231dd739d54a5430a", size = 20952 }, - { url = "https://files.pythonhosted.org/packages/fd/70/b937a12df7bbff14e1ca3385929f464c7af2ca72c8183c95dad26c3bf754/MarkupSafe-3.0.1-cp39-cp39-win32.whl", hash = "sha256:242d6860f1fd9191aef5fae22b51c5c19767f93fb9ead4d21924e0bcb17619d8", size = 15075 }, - { url = "https://files.pythonhosted.org/packages/e3/c4/262fac0328552da9a75a7786d7c0f43adaba4afb5f295979d33fa0f324c7/MarkupSafe-3.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:93e8248d650e7e9d49e8251f883eed60ecbc0e8ffd6349e18550925e31bd029b", size = 15527 }, +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/90/d08277ce111dd22f77149fd1a5d4653eeb3b3eaacbdfcbae5afb2600eebd/MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", size = 14357 }, + { url = "https://files.pythonhosted.org/packages/04/e1/6e2194baeae0bca1fae6629dc0cbbb968d4d941469cbab11a3872edff374/MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", size = 12393 }, + { url = "https://files.pythonhosted.org/packages/1d/69/35fa85a8ece0a437493dc61ce0bb6d459dcba482c34197e3efc829aa357f/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", size = 21732 }, + { url = "https://files.pythonhosted.org/packages/22/35/137da042dfb4720b638d2937c38a9c2df83fe32d20e8c8f3185dbfef05f7/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", size = 20866 }, + { url = "https://files.pythonhosted.org/packages/29/28/6d029a903727a1b62edb51863232152fd335d602def598dade38996887f0/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", size = 20964 }, + { url = "https://files.pythonhosted.org/packages/cc/cd/07438f95f83e8bc028279909d9c9bd39e24149b0d60053a97b2bc4f8aa51/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", size = 21977 }, + { url = "https://files.pythonhosted.org/packages/29/01/84b57395b4cc062f9c4c55ce0df7d3108ca32397299d9df00fedd9117d3d/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", size = 21366 }, + { url = "https://files.pythonhosted.org/packages/bd/6e/61ebf08d8940553afff20d1fb1ba7294b6f8d279df9fd0c0db911b4bbcfd/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", size = 21091 }, + { url = "https://files.pythonhosted.org/packages/11/23/ffbf53694e8c94ebd1e7e491de185124277964344733c45481f32ede2499/MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50", size = 15065 }, + { url = "https://files.pythonhosted.org/packages/44/06/e7175d06dd6e9172d4a69a72592cb3f7a996a9c396eee29082826449bbc3/MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", size = 15514 }, + { url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353 }, + { url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392 }, + { url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984 }, + { url = "https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", size = 23120 }, + { url = "https://files.pythonhosted.org/packages/8d/21/5e4851379f88f3fad1de30361db501300d4f07bcad047d3cb0449fc51f8c/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", size = 23032 }, + { url = "https://files.pythonhosted.org/packages/00/7b/e92c64e079b2d0d7ddf69899c98842f3f9a60a1ae72657c89ce2655c999d/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", size = 24057 }, + { url = "https://files.pythonhosted.org/packages/f9/ac/46f960ca323037caa0a10662ef97d0a4728e890334fc156b9f9e52bcc4ca/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", size = 23359 }, + { url = "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", size = 23306 }, + { url = "https://files.pythonhosted.org/packages/9a/34/a15aa69f01e2181ed8d2b685c0d2f6655d5cca2c4db0ddea775e631918cd/MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", size = 15094 }, + { url = "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", size = 15521 }, + { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348 }, + { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149 }, + { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118 }, + { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993 }, + { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178 }, + { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319 }, + { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352 }, + { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097 }, + { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601 }, + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 }, + { url = "https://files.pythonhosted.org/packages/a7/ea/9b1530c3fdeeca613faeb0fb5cbcf2389d816072fab72a71b45749ef6062/MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a", size = 14344 }, + { url = "https://files.pythonhosted.org/packages/4b/c2/fbdbfe48848e7112ab05e627e718e854d20192b674952d9042ebd8c9e5de/MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff", size = 12389 }, + { url = "https://files.pythonhosted.org/packages/f0/25/7a7c6e4dbd4f867d95d94ca15449e91e52856f6ed1905d58ef1de5e211d0/MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13", size = 21607 }, + { url = "https://files.pythonhosted.org/packages/53/8f/f339c98a178f3c1e545622206b40986a4c3307fe39f70ccd3d9df9a9e425/MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144", size = 20728 }, + { url = "https://files.pythonhosted.org/packages/1a/03/8496a1a78308456dbd50b23a385c69b41f2e9661c67ea1329849a598a8f9/MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29", size = 20826 }, + { url = "https://files.pythonhosted.org/packages/e6/cf/0a490a4bd363048c3022f2f475c8c05582179bb179defcee4766fb3dcc18/MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0", size = 21843 }, + { url = "https://files.pythonhosted.org/packages/19/a3/34187a78613920dfd3cdf68ef6ce5e99c4f3417f035694074beb8848cd77/MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0", size = 21219 }, + { url = "https://files.pythonhosted.org/packages/17/d8/5811082f85bb88410ad7e452263af048d685669bbbfb7b595e8689152498/MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178", size = 20946 }, + { url = "https://files.pythonhosted.org/packages/7c/31/bd635fb5989440d9365c5e3c47556cfea121c7803f5034ac843e8f37c2f2/MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f", size = 15063 }, + { url = "https://files.pythonhosted.org/packages/b3/73/085399401383ce949f727afec55ec3abd76648d04b9f22e1c0e99cb4bec3/MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a", size = 15506 }, ] [[package]] @@ -1133,10 +1203,11 @@ wheels = [ [[package]] name = "mqt-qecc" -version = "1.8.2.dev7+g102b63d" +version = "1.8.3.dev8+g033066f" source = { editable = "." } dependencies = [ { name = "bposd" }, + { name = "fastcore" }, { name = "ldpc" }, { name = "multiprocess" }, { name = "numba" }, @@ -1145,7 +1216,9 @@ dependencies = [ { name = "qecsim" }, { name = "qiskit", extra = ["qasm3-import"] }, { name = "qiskit-aer" }, + { name = "qsample" }, { name = "stim" }, + { name = "urllib3" }, { name = "z3-solver" }, ] @@ -1197,9 +1270,10 @@ visualization = [ [package.metadata] requires-dist = [ { name = "bposd", specifier = ">=1.6" }, + { name = "fastcore", specifier = ">=1.7.10" }, { name = "furo", marker = "extra == 'docs'", specifier = ">=2023.9.10" }, { name = "ipykernel", marker = "extra == 'docs'" }, - { name = "ldpc", specifier = ">=0.1.53" }, + { name = "ldpc", specifier = ">=0.1.53,<2" }, { name = "matplotlib", marker = "extra == 'visualization'" }, { name = "mqt-qecc", extras = ["coverage", "docs", "visualization"], marker = "extra == 'dev'" }, { name = "mqt-qecc", extras = ["test"], marker = "extra == 'coverage'" }, @@ -1218,6 +1292,7 @@ requires-dist = [ { name = "qiskit", extras = ["qasm3-import"], specifier = ">=1.0.0" }, { name = "qiskit", extras = ["visualization"], marker = "extra == 'docs'" }, { name = "qiskit-aer", specifier = ">=0.15.0" }, + { name = "qsample", specifier = ">=0.0.2" }, { name = "scipy", marker = "extra == 'visualization'" }, { name = "setuptools-scm", marker = "extra == 'docs'", specifier = ">=8.1" }, { name = "sphinx-autodoc-typehints", marker = "extra == 'docs'" }, @@ -1225,6 +1300,7 @@ requires-dist = [ { name = "sphinxcontrib-bibtex", marker = "extra == 'docs'", specifier = ">=2.4.2" }, { name = "sphinxext-opengraph", marker = "extra == 'docs'", specifier = ">=0.9" }, { name = "stim", specifier = ">=1.13.0" }, + { name = "urllib3", specifier = ">=1.26.20,<2.0" }, { name = "z3-solver", specifier = ">=4.12" }, ] @@ -1420,11 +1496,11 @@ wheels = [ [[package]] name = "openqasm3" -version = "0.5.0" +version = "1.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c7/f1/c63ef1778a387a3377f2a9ca6be497303745ee634e5b9f3cfd0776f40d76/openqasm3-0.5.0.tar.gz", hash = "sha256:bf8bf4ed098393447e552eaea18b0a34a2429d228477683d6b579348bc17bfc8", size = 517167 } +sdist = { url = "https://files.pythonhosted.org/packages/a3/30/9e366c43b71b496d0efbfbc1f644a2839c5d972fca042cfa079e849fab2d/openqasm3-1.0.0.tar.gz", hash = "sha256:3f2bb1cca855cff114e046bac22d59adbf9b754cac6398961aa6d22588fb688e", size = 534507 } wheels = [ - { url = "https://files.pythonhosted.org/packages/51/91/574addbe722736081d1b9c78212f8cac5e9d93c8bc79059c84871034c527/openqasm3-0.5.0-py3-none-any.whl", hash = "sha256:40991ac057b9e3c208d1b34242b0aad8a3b9840df0335a652b1e4e4248937b1c", size = 524019 }, + { url = "https://files.pythonhosted.org/packages/40/5a/e33f705f0ea2a83fd6c797eddf5b5a5cd2256a4f31dcb9624f055f6e14bf/openqasm3-1.0.0-py3-none-any.whl", hash = "sha256:d4371737b4a49b0d56248ed3d30766a94000bccfb43303ec9c7ead351a1b6cc3", size = 539775 }, ] [package.optional-dependencies] @@ -1435,11 +1511,11 @@ parser = [ [[package]] name = "packaging" -version = "24.1" +version = "24.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/51/65/50db4dda066951078f0a96cf12f4b9ada6e4b811516bf0262c0f4f7064d4/packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002", size = 148788 } +sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 } wheels = [ - { url = "https://files.pythonhosted.org/packages/08/aa/cc0199a5f0ad350994d660967a8efb233fe0416e4639146c089643407ce6/packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124", size = 53985 }, + { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 }, ] [[package]] @@ -1538,79 +1614,84 @@ wheels = [ [[package]] name = "pillow" -version = "10.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cd/74/ad3d526f3bf7b6d3f408b73fde271ec69dfac8b81341a318ce825f2b3812/pillow-10.4.0.tar.gz", hash = "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06", size = 46555059 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0e/69/a31cccd538ca0b5272be2a38347f8839b97a14be104ea08b0db92f749c74/pillow-10.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e", size = 3509271 }, - { url = "https://files.pythonhosted.org/packages/9a/9e/4143b907be8ea0bce215f2ae4f7480027473f8b61fcedfda9d851082a5d2/pillow-10.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d", size = 3375658 }, - { url = "https://files.pythonhosted.org/packages/8a/25/1fc45761955f9359b1169aa75e241551e74ac01a09f487adaaf4c3472d11/pillow-10.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856", size = 4332075 }, - { url = "https://files.pythonhosted.org/packages/5e/dd/425b95d0151e1d6c951f45051112394f130df3da67363b6bc75dc4c27aba/pillow-10.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f", size = 4444808 }, - { url = "https://files.pythonhosted.org/packages/b1/84/9a15cc5726cbbfe7f9f90bfb11f5d028586595907cd093815ca6644932e3/pillow-10.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b", size = 4356290 }, - { url = "https://files.pythonhosted.org/packages/b5/5b/6651c288b08df3b8c1e2f8c1152201e0b25d240e22ddade0f1e242fc9fa0/pillow-10.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc", size = 4525163 }, - { url = "https://files.pythonhosted.org/packages/07/8b/34854bf11a83c248505c8cb0fcf8d3d0b459a2246c8809b967963b6b12ae/pillow-10.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e", size = 4463100 }, - { url = "https://files.pythonhosted.org/packages/78/63/0632aee4e82476d9cbe5200c0cdf9ba41ee04ed77887432845264d81116d/pillow-10.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46", size = 4592880 }, - { url = "https://files.pythonhosted.org/packages/df/56/b8663d7520671b4398b9d97e1ed9f583d4afcbefbda3c6188325e8c297bd/pillow-10.4.0-cp310-cp310-win32.whl", hash = "sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984", size = 2235218 }, - { url = "https://files.pythonhosted.org/packages/f4/72/0203e94a91ddb4a9d5238434ae6c1ca10e610e8487036132ea9bf806ca2a/pillow-10.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141", size = 2554487 }, - { url = "https://files.pythonhosted.org/packages/bd/52/7e7e93d7a6e4290543f17dc6f7d3af4bd0b3dd9926e2e8a35ac2282bc5f4/pillow-10.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1", size = 2243219 }, - { url = "https://files.pythonhosted.org/packages/a7/62/c9449f9c3043c37f73e7487ec4ef0c03eb9c9afc91a92b977a67b3c0bbc5/pillow-10.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c", size = 3509265 }, - { url = "https://files.pythonhosted.org/packages/f4/5f/491dafc7bbf5a3cc1845dc0430872e8096eb9e2b6f8161509d124594ec2d/pillow-10.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be", size = 3375655 }, - { url = "https://files.pythonhosted.org/packages/73/d5/c4011a76f4207a3c151134cd22a1415741e42fa5ddecec7c0182887deb3d/pillow-10.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3", size = 4340304 }, - { url = "https://files.pythonhosted.org/packages/ac/10/c67e20445a707f7a610699bba4fe050583b688d8cd2d202572b257f46600/pillow-10.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6", size = 4452804 }, - { url = "https://files.pythonhosted.org/packages/a9/83/6523837906d1da2b269dee787e31df3b0acb12e3d08f024965a3e7f64665/pillow-10.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe", size = 4365126 }, - { url = "https://files.pythonhosted.org/packages/ba/e5/8c68ff608a4203085158cff5cc2a3c534ec384536d9438c405ed6370d080/pillow-10.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319", size = 4533541 }, - { url = "https://files.pythonhosted.org/packages/f4/7c/01b8dbdca5bc6785573f4cee96e2358b0918b7b2c7b60d8b6f3abf87a070/pillow-10.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d", size = 4471616 }, - { url = "https://files.pythonhosted.org/packages/c8/57/2899b82394a35a0fbfd352e290945440e3b3785655a03365c0ca8279f351/pillow-10.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696", size = 4600802 }, - { url = "https://files.pythonhosted.org/packages/4d/d7/a44f193d4c26e58ee5d2d9db3d4854b2cfb5b5e08d360a5e03fe987c0086/pillow-10.4.0-cp311-cp311-win32.whl", hash = "sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496", size = 2235213 }, - { url = "https://files.pythonhosted.org/packages/c1/d0/5866318eec2b801cdb8c82abf190c8343d8a1cd8bf5a0c17444a6f268291/pillow-10.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91", size = 2554498 }, - { url = "https://files.pythonhosted.org/packages/d4/c8/310ac16ac2b97e902d9eb438688de0d961660a87703ad1561fd3dfbd2aa0/pillow-10.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22", size = 2243219 }, - { url = "https://files.pythonhosted.org/packages/05/cb/0353013dc30c02a8be34eb91d25e4e4cf594b59e5a55ea1128fde1e5f8ea/pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94", size = 3509350 }, - { url = "https://files.pythonhosted.org/packages/e7/cf/5c558a0f247e0bf9cec92bff9b46ae6474dd736f6d906315e60e4075f737/pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597", size = 3374980 }, - { url = "https://files.pythonhosted.org/packages/84/48/6e394b86369a4eb68b8a1382c78dc092245af517385c086c5094e3b34428/pillow-10.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80", size = 4343799 }, - { url = "https://files.pythonhosted.org/packages/3b/f3/a8c6c11fa84b59b9df0cd5694492da8c039a24cd159f0f6918690105c3be/pillow-10.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca", size = 4459973 }, - { url = "https://files.pythonhosted.org/packages/7d/1b/c14b4197b80150fb64453585247e6fb2e1d93761fa0fa9cf63b102fde822/pillow-10.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef", size = 4370054 }, - { url = "https://files.pythonhosted.org/packages/55/77/40daddf677897a923d5d33329acd52a2144d54a9644f2a5422c028c6bf2d/pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a", size = 4539484 }, - { url = "https://files.pythonhosted.org/packages/40/54/90de3e4256b1207300fb2b1d7168dd912a2fb4b2401e439ba23c2b2cabde/pillow-10.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b", size = 4477375 }, - { url = "https://files.pythonhosted.org/packages/13/24/1bfba52f44193860918ff7c93d03d95e3f8748ca1de3ceaf11157a14cf16/pillow-10.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9", size = 4608773 }, - { url = "https://files.pythonhosted.org/packages/55/04/5e6de6e6120451ec0c24516c41dbaf80cce1b6451f96561235ef2429da2e/pillow-10.4.0-cp312-cp312-win32.whl", hash = "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42", size = 2235690 }, - { url = "https://files.pythonhosted.org/packages/74/0a/d4ce3c44bca8635bd29a2eab5aa181b654a734a29b263ca8efe013beea98/pillow-10.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a", size = 2554951 }, - { url = "https://files.pythonhosted.org/packages/b5/ca/184349ee40f2e92439be9b3502ae6cfc43ac4b50bc4fc6b3de7957563894/pillow-10.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9", size = 2243427 }, - { url = "https://files.pythonhosted.org/packages/c3/00/706cebe7c2c12a6318aabe5d354836f54adff7156fd9e1bd6c89f4ba0e98/pillow-10.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3", size = 3525685 }, - { url = "https://files.pythonhosted.org/packages/cf/76/f658cbfa49405e5ecbfb9ba42d07074ad9792031267e782d409fd8fe7c69/pillow-10.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb", size = 3374883 }, - { url = "https://files.pythonhosted.org/packages/46/2b/99c28c4379a85e65378211971c0b430d9c7234b1ec4d59b2668f6299e011/pillow-10.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70", size = 4339837 }, - { url = "https://files.pythonhosted.org/packages/f1/74/b1ec314f624c0c43711fdf0d8076f82d9d802afd58f1d62c2a86878e8615/pillow-10.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be", size = 4455562 }, - { url = "https://files.pythonhosted.org/packages/4a/2a/4b04157cb7b9c74372fa867096a1607e6fedad93a44deeff553ccd307868/pillow-10.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0", size = 4366761 }, - { url = "https://files.pythonhosted.org/packages/ac/7b/8f1d815c1a6a268fe90481232c98dd0e5fa8c75e341a75f060037bd5ceae/pillow-10.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc", size = 4536767 }, - { url = "https://files.pythonhosted.org/packages/e5/77/05fa64d1f45d12c22c314e7b97398ffb28ef2813a485465017b7978b3ce7/pillow-10.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a", size = 4477989 }, - { url = "https://files.pythonhosted.org/packages/12/63/b0397cfc2caae05c3fb2f4ed1b4fc4fc878f0243510a7a6034ca59726494/pillow-10.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309", size = 4610255 }, - { url = "https://files.pythonhosted.org/packages/7b/f9/cfaa5082ca9bc4a6de66ffe1c12c2d90bf09c309a5f52b27759a596900e7/pillow-10.4.0-cp313-cp313-win32.whl", hash = "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060", size = 2235603 }, - { url = "https://files.pythonhosted.org/packages/01/6a/30ff0eef6e0c0e71e55ded56a38d4859bf9d3634a94a88743897b5f96936/pillow-10.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea", size = 2554972 }, - { url = "https://files.pythonhosted.org/packages/48/2c/2e0a52890f269435eee38b21c8218e102c621fe8d8df8b9dd06fabf879ba/pillow-10.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d", size = 2243375 }, - { url = "https://files.pythonhosted.org/packages/31/85/955fa5400fa8039921f630372cfe5056eed6e1b8e0430ee4507d7de48832/pillow-10.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d", size = 3509283 }, - { url = "https://files.pythonhosted.org/packages/23/9c/343827267eb28d41cd82b4180d33b10d868af9077abcec0af9793aa77d2d/pillow-10.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b", size = 3375691 }, - { url = "https://files.pythonhosted.org/packages/60/a3/7ebbeabcd341eab722896d1a5b59a3df98c4b4d26cf4b0385f8aa94296f7/pillow-10.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd", size = 4328295 }, - { url = "https://files.pythonhosted.org/packages/32/3f/c02268d0c6fb6b3958bdda673c17b315c821d97df29ae6969f20fb49388a/pillow-10.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126", size = 4440810 }, - { url = "https://files.pythonhosted.org/packages/67/5d/1c93c8cc35f2fdd3d6cc7e4ad72d203902859a2867de6ad957d9b708eb8d/pillow-10.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b", size = 4352283 }, - { url = "https://files.pythonhosted.org/packages/bc/a8/8655557c9c7202b8abbd001f61ff36711cefaf750debcaa1c24d154ef602/pillow-10.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c", size = 4521800 }, - { url = "https://files.pythonhosted.org/packages/58/78/6f95797af64d137124f68af1bdaa13b5332da282b86031f6fa70cf368261/pillow-10.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1", size = 4459177 }, - { url = "https://files.pythonhosted.org/packages/8a/6d/2b3ce34f1c4266d79a78c9a51d1289a33c3c02833fe294ef0dcbb9cba4ed/pillow-10.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df", size = 4589079 }, - { url = "https://files.pythonhosted.org/packages/e3/e0/456258c74da1ff5bf8ef1eab06a95ca994d8b9ed44c01d45c3f8cbd1db7e/pillow-10.4.0-cp39-cp39-win32.whl", hash = "sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef", size = 2235247 }, - { url = "https://files.pythonhosted.org/packages/37/f8/bef952bdb32aa53741f58bf21798642209e994edc3f6598f337f23d5400a/pillow-10.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5", size = 2554479 }, - { url = "https://files.pythonhosted.org/packages/bb/8e/805201619cad6651eef5fc1fdef913804baf00053461522fabbc5588ea12/pillow-10.4.0-cp39-cp39-win_arm64.whl", hash = "sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e", size = 2243226 }, - { url = "https://files.pythonhosted.org/packages/38/30/095d4f55f3a053392f75e2eae45eba3228452783bab3d9a920b951ac495c/pillow-10.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4", size = 3493889 }, - { url = "https://files.pythonhosted.org/packages/f3/e8/4ff79788803a5fcd5dc35efdc9386af153569853767bff74540725b45863/pillow-10.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da", size = 3346160 }, - { url = "https://files.pythonhosted.org/packages/d7/ac/4184edd511b14f760c73f5bb8a5d6fd85c591c8aff7c2229677a355c4179/pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026", size = 3435020 }, - { url = "https://files.pythonhosted.org/packages/da/21/1749cd09160149c0a246a81d646e05f35041619ce76f6493d6a96e8d1103/pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e", size = 3490539 }, - { url = "https://files.pythonhosted.org/packages/b6/f5/f71fe1888b96083b3f6dfa0709101f61fc9e972c0c8d04e9d93ccef2a045/pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5", size = 3476125 }, - { url = "https://files.pythonhosted.org/packages/96/b9/c0362c54290a31866c3526848583a2f45a535aa9d725fd31e25d318c805f/pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885", size = 3579373 }, - { url = "https://files.pythonhosted.org/packages/52/3b/ce7a01026a7cf46e5452afa86f97a5e88ca97f562cafa76570178ab56d8d/pillow-10.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5", size = 2554661 }, - { url = "https://files.pythonhosted.org/packages/e1/1f/5a9fcd6ced51633c22481417e11b1b47d723f64fb536dfd67c015eb7f0ab/pillow-10.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b", size = 3493850 }, - { url = "https://files.pythonhosted.org/packages/cb/e6/3ea4755ed5320cb62aa6be2f6de47b058c6550f752dd050e86f694c59798/pillow-10.4.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908", size = 3346118 }, - { url = "https://files.pythonhosted.org/packages/0a/22/492f9f61e4648422b6ca39268ec8139277a5b34648d28f400faac14e0f48/pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b", size = 3434958 }, - { url = "https://files.pythonhosted.org/packages/f9/19/559a48ad4045704bb0547965b9a9345f5cd461347d977a56d178db28819e/pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8", size = 3490340 }, - { url = "https://files.pythonhosted.org/packages/d9/de/cebaca6fb79905b3a1aa0281d238769df3fb2ede34fd7c0caa286575915a/pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a", size = 3476048 }, - { url = "https://files.pythonhosted.org/packages/71/f0/86d5b2f04693b0116a01d75302b0a307800a90d6c351a8aa4f8ae76cd499/pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27", size = 3579366 }, - { url = "https://files.pythonhosted.org/packages/37/ae/2dbfc38cc4fd14aceea14bc440d5151b21f64c4c3ba3f6f4191610b7ee5d/pillow-10.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3", size = 2554652 }, +version = "11.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a5/26/0d95c04c868f6bdb0c447e3ee2de5564411845e36a858cfd63766bc7b563/pillow-11.0.0.tar.gz", hash = "sha256:72bacbaf24ac003fea9bff9837d1eedb6088758d41e100c1552930151f677739", size = 46737780 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/98/fb/a6ce6836bd7fd93fbf9144bf54789e02babc27403b50a9e1583ee877d6da/pillow-11.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:6619654954dc4936fcff82db8eb6401d3159ec6be81e33c6000dfd76ae189947", size = 3154708 }, + { url = "https://files.pythonhosted.org/packages/6a/1d/1f51e6e912d8ff316bb3935a8cda617c801783e0b998bf7a894e91d3bd4c/pillow-11.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b3c5ac4bed7519088103d9450a1107f76308ecf91d6dabc8a33a2fcfb18d0fba", size = 2979223 }, + { url = "https://files.pythonhosted.org/packages/90/83/e2077b0192ca8a9ef794dbb74700c7e48384706467067976c2a95a0f40a1/pillow-11.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a65149d8ada1055029fcb665452b2814fe7d7082fcb0c5bed6db851cb69b2086", size = 4183167 }, + { url = "https://files.pythonhosted.org/packages/0e/74/467af0146970a98349cdf39e9b79a6cc8a2e7558f2c01c28a7b6b85c5bda/pillow-11.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88a58d8ac0cc0e7f3a014509f0455248a76629ca9b604eca7dc5927cc593c5e9", size = 4283912 }, + { url = "https://files.pythonhosted.org/packages/85/b1/d95d4f7ca3a6c1ae120959605875a31a3c209c4e50f0029dc1a87566cf46/pillow-11.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:c26845094b1af3c91852745ae78e3ea47abf3dbcd1cf962f16b9a5fbe3ee8488", size = 4195815 }, + { url = "https://files.pythonhosted.org/packages/41/c3/94f33af0762ed76b5a237c5797e088aa57f2b7fa8ee7932d399087be66a8/pillow-11.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:1a61b54f87ab5786b8479f81c4b11f4d61702830354520837f8cc791ebba0f5f", size = 4366117 }, + { url = "https://files.pythonhosted.org/packages/ba/3c/443e7ef01f597497268899e1cca95c0de947c9bbf77a8f18b3c126681e5d/pillow-11.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:674629ff60030d144b7bca2b8330225a9b11c482ed408813924619c6f302fdbb", size = 4278607 }, + { url = "https://files.pythonhosted.org/packages/26/95/1495304448b0081e60c0c5d63f928ef48bb290acee7385804426fa395a21/pillow-11.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:598b4e238f13276e0008299bd2482003f48158e2b11826862b1eb2ad7c768b97", size = 4410685 }, + { url = "https://files.pythonhosted.org/packages/45/da/861e1df971ef0de9870720cb309ca4d553b26a9483ec9be3a7bf1de4a095/pillow-11.0.0-cp310-cp310-win32.whl", hash = "sha256:9a0f748eaa434a41fccf8e1ee7a3eed68af1b690e75328fd7a60af123c193b50", size = 2249185 }, + { url = "https://files.pythonhosted.org/packages/d5/4e/78f7c5202ea2a772a5ab05069c1b82503e6353cd79c7e474d4945f4b82c3/pillow-11.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:a5629742881bcbc1f42e840af185fd4d83a5edeb96475a575f4da50d6ede337c", size = 2566726 }, + { url = "https://files.pythonhosted.org/packages/77/e4/6e84eada35cbcc646fc1870f72ccfd4afacb0fae0c37ffbffe7f5dc24bf1/pillow-11.0.0-cp310-cp310-win_arm64.whl", hash = "sha256:ee217c198f2e41f184f3869f3e485557296d505b5195c513b2bfe0062dc537f1", size = 2254585 }, + { url = "https://files.pythonhosted.org/packages/f0/eb/f7e21b113dd48a9c97d364e0915b3988c6a0b6207652f5a92372871b7aa4/pillow-11.0.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1c1d72714f429a521d8d2d018badc42414c3077eb187a59579f28e4270b4b0fc", size = 3154705 }, + { url = "https://files.pythonhosted.org/packages/25/b3/2b54a1d541accebe6bd8b1358b34ceb2c509f51cb7dcda8687362490da5b/pillow-11.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:499c3a1b0d6fc8213519e193796eb1a86a1be4b1877d678b30f83fd979811d1a", size = 2979222 }, + { url = "https://files.pythonhosted.org/packages/20/12/1a41eddad8265c5c19dda8fb6c269ce15ee25e0b9f8f26286e6202df6693/pillow-11.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8b2351c85d855293a299038e1f89db92a2f35e8d2f783489c6f0b2b5f3fe8a3", size = 4190220 }, + { url = "https://files.pythonhosted.org/packages/a9/9b/8a8c4d07d77447b7457164b861d18f5a31ae6418ef5c07f6f878fa09039a/pillow-11.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f4dba50cfa56f910241eb7f883c20f1e7b1d8f7d91c750cd0b318bad443f4d5", size = 4291399 }, + { url = "https://files.pythonhosted.org/packages/fc/e4/130c5fab4a54d3991129800dd2801feeb4b118d7630148cd67f0e6269d4c/pillow-11.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:5ddbfd761ee00c12ee1be86c9c0683ecf5bb14c9772ddbd782085779a63dd55b", size = 4202709 }, + { url = "https://files.pythonhosted.org/packages/39/63/b3fc299528d7df1f678b0666002b37affe6b8751225c3d9c12cf530e73ed/pillow-11.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:45c566eb10b8967d71bf1ab8e4a525e5a93519e29ea071459ce517f6b903d7fa", size = 4372556 }, + { url = "https://files.pythonhosted.org/packages/c6/a6/694122c55b855b586c26c694937d36bb8d3b09c735ff41b2f315c6e66a10/pillow-11.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b4fd7bd29610a83a8c9b564d457cf5bd92b4e11e79a4ee4716a63c959699b306", size = 4287187 }, + { url = "https://files.pythonhosted.org/packages/ba/a9/f9d763e2671a8acd53d29b1e284ca298bc10a595527f6be30233cdb9659d/pillow-11.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cb929ca942d0ec4fac404cbf520ee6cac37bf35be479b970c4ffadf2b6a1cad9", size = 4418468 }, + { url = "https://files.pythonhosted.org/packages/6e/0e/b5cbad2621377f11313a94aeb44ca55a9639adabcaaa073597a1925f8c26/pillow-11.0.0-cp311-cp311-win32.whl", hash = "sha256:006bcdd307cc47ba43e924099a038cbf9591062e6c50e570819743f5607404f5", size = 2249249 }, + { url = "https://files.pythonhosted.org/packages/dc/83/1470c220a4ff06cd75fc609068f6605e567ea51df70557555c2ab6516b2c/pillow-11.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:52a2d8323a465f84faaba5236567d212c3668f2ab53e1c74c15583cf507a0291", size = 2566769 }, + { url = "https://files.pythonhosted.org/packages/52/98/def78c3a23acee2bcdb2e52005fb2810ed54305602ec1bfcfab2bda6f49f/pillow-11.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:16095692a253047fe3ec028e951fa4221a1f3ed3d80c397e83541a3037ff67c9", size = 2254611 }, + { url = "https://files.pythonhosted.org/packages/1c/a3/26e606ff0b2daaf120543e537311fa3ae2eb6bf061490e4fea51771540be/pillow-11.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d2c0a187a92a1cb5ef2c8ed5412dd8d4334272617f532d4ad4de31e0495bd923", size = 3147642 }, + { url = "https://files.pythonhosted.org/packages/4f/d5/1caabedd8863526a6cfa44ee7a833bd97f945dc1d56824d6d76e11731939/pillow-11.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:084a07ef0821cfe4858fe86652fffac8e187b6ae677e9906e192aafcc1b69903", size = 2978999 }, + { url = "https://files.pythonhosted.org/packages/d9/ff/5a45000826a1aa1ac6874b3ec5a856474821a1b59d838c4f6ce2ee518fe9/pillow-11.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8069c5179902dcdce0be9bfc8235347fdbac249d23bd90514b7a47a72d9fecf4", size = 4196794 }, + { url = "https://files.pythonhosted.org/packages/9d/21/84c9f287d17180f26263b5f5c8fb201de0f88b1afddf8a2597a5c9fe787f/pillow-11.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f02541ef64077f22bf4924f225c0fd1248c168f86e4b7abdedd87d6ebaceab0f", size = 4300762 }, + { url = "https://files.pythonhosted.org/packages/84/39/63fb87cd07cc541438b448b1fed467c4d687ad18aa786a7f8e67b255d1aa/pillow-11.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:fcb4621042ac4b7865c179bb972ed0da0218a076dc1820ffc48b1d74c1e37fe9", size = 4210468 }, + { url = "https://files.pythonhosted.org/packages/7f/42/6e0f2c2d5c60f499aa29be14f860dd4539de322cd8fb84ee01553493fb4d/pillow-11.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:00177a63030d612148e659b55ba99527803288cea7c75fb05766ab7981a8c1b7", size = 4381824 }, + { url = "https://files.pythonhosted.org/packages/31/69/1ef0fb9d2f8d2d114db982b78ca4eeb9db9a29f7477821e160b8c1253f67/pillow-11.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8853a3bf12afddfdf15f57c4b02d7ded92c7a75a5d7331d19f4f9572a89c17e6", size = 4296436 }, + { url = "https://files.pythonhosted.org/packages/44/ea/dad2818c675c44f6012289a7c4f46068c548768bc6c7f4e8c4ae5bbbc811/pillow-11.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3107c66e43bda25359d5ef446f59c497de2b5ed4c7fdba0894f8d6cf3822dafc", size = 4429714 }, + { url = "https://files.pythonhosted.org/packages/af/3a/da80224a6eb15bba7a0dcb2346e2b686bb9bf98378c0b4353cd88e62b171/pillow-11.0.0-cp312-cp312-win32.whl", hash = "sha256:86510e3f5eca0ab87429dd77fafc04693195eec7fd6a137c389c3eeb4cfb77c6", size = 2249631 }, + { url = "https://files.pythonhosted.org/packages/57/97/73f756c338c1d86bb802ee88c3cab015ad7ce4b838f8a24f16b676b1ac7c/pillow-11.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:8ec4a89295cd6cd4d1058a5e6aec6bf51e0eaaf9714774e1bfac7cfc9051db47", size = 2567533 }, + { url = "https://files.pythonhosted.org/packages/0b/30/2b61876e2722374558b871dfbfcbe4e406626d63f4f6ed92e9c8e24cac37/pillow-11.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:27a7860107500d813fcd203b4ea19b04babe79448268403172782754870dac25", size = 2254890 }, + { url = "https://files.pythonhosted.org/packages/63/24/e2e15e392d00fcf4215907465d8ec2a2f23bcec1481a8ebe4ae760459995/pillow-11.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bcd1fb5bb7b07f64c15618c89efcc2cfa3e95f0e3bcdbaf4642509de1942a699", size = 3147300 }, + { url = "https://files.pythonhosted.org/packages/43/72/92ad4afaa2afc233dc44184adff289c2e77e8cd916b3ddb72ac69495bda3/pillow-11.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0e038b0745997c7dcaae350d35859c9715c71e92ffb7e0f4a8e8a16732150f38", size = 2978742 }, + { url = "https://files.pythonhosted.org/packages/9e/da/c8d69c5bc85d72a8523fe862f05ababdc52c0a755cfe3d362656bb86552b/pillow-11.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ae08bd8ffc41aebf578c2af2f9d8749d91f448b3bfd41d7d9ff573d74f2a6b2", size = 4194349 }, + { url = "https://files.pythonhosted.org/packages/cd/e8/686d0caeed6b998351d57796496a70185376ed9c8ec7d99e1d19ad591fc6/pillow-11.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d69bfd8ec3219ae71bcde1f942b728903cad25fafe3100ba2258b973bd2bc1b2", size = 4298714 }, + { url = "https://files.pythonhosted.org/packages/ec/da/430015cec620d622f06854be67fd2f6721f52fc17fca8ac34b32e2d60739/pillow-11.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:61b887f9ddba63ddf62fd02a3ba7add935d053b6dd7d58998c630e6dbade8527", size = 4208514 }, + { url = "https://files.pythonhosted.org/packages/44/ae/7e4f6662a9b1cb5f92b9cc9cab8321c381ffbee309210940e57432a4063a/pillow-11.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:c6a660307ca9d4867caa8d9ca2c2658ab685de83792d1876274991adec7b93fa", size = 4380055 }, + { url = "https://files.pythonhosted.org/packages/74/d5/1a807779ac8a0eeed57f2b92a3c32ea1b696e6140c15bd42eaf908a261cd/pillow-11.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:73e3a0200cdda995c7e43dd47436c1548f87a30bb27fb871f352a22ab8dcf45f", size = 4296751 }, + { url = "https://files.pythonhosted.org/packages/38/8c/5fa3385163ee7080bc13026d59656267daaaaf3c728c233d530e2c2757c8/pillow-11.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fba162b8872d30fea8c52b258a542c5dfd7b235fb5cb352240c8d63b414013eb", size = 4430378 }, + { url = "https://files.pythonhosted.org/packages/ca/1d/ad9c14811133977ff87035bf426875b93097fb50af747793f013979facdb/pillow-11.0.0-cp313-cp313-win32.whl", hash = "sha256:f1b82c27e89fffc6da125d5eb0ca6e68017faf5efc078128cfaa42cf5cb38798", size = 2249588 }, + { url = "https://files.pythonhosted.org/packages/fb/01/3755ba287dac715e6afdb333cb1f6d69740a7475220b4637b5ce3d78cec2/pillow-11.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:8ba470552b48e5835f1d23ecb936bb7f71d206f9dfeee64245f30c3270b994de", size = 2567509 }, + { url = "https://files.pythonhosted.org/packages/c0/98/2c7d727079b6be1aba82d195767d35fcc2d32204c7a5820f822df5330152/pillow-11.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:846e193e103b41e984ac921b335df59195356ce3f71dcfd155aa79c603873b84", size = 2254791 }, + { url = "https://files.pythonhosted.org/packages/eb/38/998b04cc6f474e78b563716b20eecf42a2fa16a84589d23c8898e64b0ffd/pillow-11.0.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4ad70c4214f67d7466bea6a08061eba35c01b1b89eaa098040a35272a8efb22b", size = 3150854 }, + { url = "https://files.pythonhosted.org/packages/13/8e/be23a96292113c6cb26b2aa3c8b3681ec62b44ed5c2bd0b258bd59503d3c/pillow-11.0.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:6ec0d5af64f2e3d64a165f490d96368bb5dea8b8f9ad04487f9ab60dc4bb6003", size = 2982369 }, + { url = "https://files.pythonhosted.org/packages/97/8a/3db4eaabb7a2ae8203cd3a332a005e4aba00067fc514aaaf3e9721be31f1/pillow-11.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c809a70e43c7977c4a42aefd62f0131823ebf7dd73556fa5d5950f5b354087e2", size = 4333703 }, + { url = "https://files.pythonhosted.org/packages/28/ac/629ffc84ff67b9228fe87a97272ab125bbd4dc462745f35f192d37b822f1/pillow-11.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:4b60c9520f7207aaf2e1d94de026682fc227806c6e1f55bba7606d1c94dd623a", size = 4412550 }, + { url = "https://files.pythonhosted.org/packages/d6/07/a505921d36bb2df6868806eaf56ef58699c16c388e378b0dcdb6e5b2fb36/pillow-11.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:1e2688958a840c822279fda0086fec1fdab2f95bf2b717b66871c4ad9859d7e8", size = 4461038 }, + { url = "https://files.pythonhosted.org/packages/d6/b9/fb620dd47fc7cc9678af8f8bd8c772034ca4977237049287e99dda360b66/pillow-11.0.0-cp313-cp313t-win32.whl", hash = "sha256:607bbe123c74e272e381a8d1957083a9463401f7bd01287f50521ecb05a313f8", size = 2253197 }, + { url = "https://files.pythonhosted.org/packages/df/86/25dde85c06c89d7fc5db17940f07aae0a56ac69aa9ccb5eb0f09798862a8/pillow-11.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5c39ed17edea3bc69c743a8dd3e9853b7509625c2462532e62baa0732163a904", size = 2572169 }, + { url = "https://files.pythonhosted.org/packages/51/85/9c33f2517add612e17f3381aee7c4072779130c634921a756c97bc29fb49/pillow-11.0.0-cp313-cp313t-win_arm64.whl", hash = "sha256:75acbbeb05b86bc53cbe7b7e6fe00fbcf82ad7c684b3ad82e3d711da9ba287d3", size = 2256828 }, + { url = "https://files.pythonhosted.org/packages/f3/8b/01849a820686bf309b7d79a935d57bcafbfd016f1d78fc3d37ed2ba00f96/pillow-11.0.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2e46773dc9f35a1dd28bd6981332fd7f27bec001a918a72a79b4133cf5291dba", size = 3154738 }, + { url = "https://files.pythonhosted.org/packages/35/e8/ff71a40ca8e24cfd6bb333cc4ca8cc24ebecb6942bb4ad1e5ec61f33d1b8/pillow-11.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2679d2258b7f1192b378e2893a8a0a0ca472234d4c2c0e6bdd3380e8dfa21b6a", size = 2979272 }, + { url = "https://files.pythonhosted.org/packages/09/4f/2280ad43f5639174a0227920a59664fb78c5096a0b3fd865fee5184d4526/pillow-11.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eda2616eb2313cbb3eebbe51f19362eb434b18e3bb599466a1ffa76a033fb916", size = 4179756 }, + { url = "https://files.pythonhosted.org/packages/14/b1/c8f428bae932a27ce9c87e7b21aba8ea3e820aa11413c5a795868c37e039/pillow-11.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ec184af98a121fb2da42642dea8a29ec80fc3efbaefb86d8fdd2606619045d", size = 4280488 }, + { url = "https://files.pythonhosted.org/packages/78/66/7c5e44ab2c0123710a5d4692a4ee5931ac438efd7730ac395e305902346e/pillow-11.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:8594f42df584e5b4bb9281799698403f7af489fba84c34d53d1c4bfb71b7c4e7", size = 4192772 }, + { url = "https://files.pythonhosted.org/packages/36/5d/a9a00f8251ce93144f0250c0f0aece31b83ff33ffc243cdf987a8d584818/pillow-11.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:c12b5ae868897c7338519c03049a806af85b9b8c237b7d675b8c5e089e4a618e", size = 4363533 }, + { url = "https://files.pythonhosted.org/packages/fd/21/d8182fc1f3233078eb744f9f2950992f537655174febb8b3f7bdc61847b1/pillow-11.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:70fbbdacd1d271b77b7721fe3cdd2d537bbbd75d29e6300c672ec6bb38d9672f", size = 4275415 }, + { url = "https://files.pythonhosted.org/packages/c9/ee/93e02e8c29210ba7383843405b8b39bd19a164770f14d8569096dd123781/pillow-11.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5178952973e588b3f1360868847334e9e3bf49d19e169bbbdfaf8398002419ae", size = 4407081 }, + { url = "https://files.pythonhosted.org/packages/6e/77/8cda03af2b5177a18d645ad4a7446cda6c1292d1a2fb6e772a06fa9fc86b/pillow-11.0.0-cp39-cp39-win32.whl", hash = "sha256:8c676b587da5673d3c75bd67dd2a8cdfeb282ca38a30f37950511766b26858c4", size = 2249213 }, + { url = "https://files.pythonhosted.org/packages/9f/e4/c90bf7889489f3a14803bd00d3645945dd476020ab67579985af8233ab30/pillow-11.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:94f3e1780abb45062287b4614a5bc0874519c86a777d4a7ad34978e86428b8dd", size = 2566862 }, + { url = "https://files.pythonhosted.org/packages/27/a6/77d2ed085055237581d6276ac1e85f562f1b1848614647d8427e49d83c03/pillow-11.0.0-cp39-cp39-win_arm64.whl", hash = "sha256:290f2cc809f9da7d6d622550bbf4c1e57518212da51b6a30fe8e0a270a5b78bd", size = 2254605 }, + { url = "https://files.pythonhosted.org/packages/36/57/42a4dd825eab762ba9e690d696d894ba366e06791936056e26e099398cda/pillow-11.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1187739620f2b365de756ce086fdb3604573337cc28a0d3ac4a01ab6b2d2a6d2", size = 3119239 }, + { url = "https://files.pythonhosted.org/packages/98/f7/25f9f9e368226a1d6cf3507081a1a7944eddd3ca7821023377043f5a83c8/pillow-11.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fbbcb7b57dc9c794843e3d1258c0fbf0f48656d46ffe9e09b63bbd6e8cd5d0a2", size = 2950803 }, + { url = "https://files.pythonhosted.org/packages/59/01/98ead48a6c2e31e6185d4c16c978a67fe3ccb5da5c2ff2ba8475379bb693/pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d203af30149ae339ad1b4f710d9844ed8796e97fda23ffbc4cc472968a47d0b", size = 3281098 }, + { url = "https://files.pythonhosted.org/packages/51/c0/570255b2866a0e4d500a14f950803a2ec273bac7badc43320120b9262450/pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21a0d3b115009ebb8ac3d2ebec5c2982cc693da935f4ab7bb5c8ebe2f47d36f2", size = 3323665 }, + { url = "https://files.pythonhosted.org/packages/0e/75/689b4ec0483c42bfc7d1aacd32ade7a226db4f4fac57c6fdcdf90c0731e3/pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:73853108f56df97baf2bb8b522f3578221e56f646ba345a372c78326710d3830", size = 3310533 }, + { url = "https://files.pythonhosted.org/packages/3d/30/38bd6149cf53da1db4bad304c543ade775d225961c4310f30425995cb9ec/pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e58876c91f97b0952eb766123bfef372792ab3f4e3e1f1a2267834c2ab131734", size = 3414886 }, + { url = "https://files.pythonhosted.org/packages/ec/3d/c32a51d848401bd94cabb8767a39621496491ee7cd5199856b77da9b18ad/pillow-11.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:224aaa38177597bb179f3ec87eeefcce8e4f85e608025e9cfac60de237ba6316", size = 2567508 }, + { url = "https://files.pythonhosted.org/packages/67/21/fbb4222399f72d6e9c828818ff4ef8391c1e8e71623368295c8dbc789bd1/pillow-11.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:5bd2d3bdb846d757055910f0a59792d33b555800813c3b39ada1829c372ccb06", size = 2950706 }, + { url = "https://files.pythonhosted.org/packages/a2/b6/6aeb6e018b705ea4076db50aac078c9db8715a901f4c65698edc31375d0f/pillow-11.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:375b8dd15a1f5d2feafff536d47e22f69625c1aa92f12b339ec0b2ca40263273", size = 3323524 }, + { url = "https://files.pythonhosted.org/packages/48/26/36cc90e9932c5fe7c8876c32d6091ef5a09e8137e8e0633045bd35085fdd/pillow-11.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:daffdf51ee5db69a82dd127eabecce20729e21f7a3680cf7cbb23f0829189790", size = 3414787 }, + { url = "https://files.pythonhosted.org/packages/44/5c/089154029fcca7729ae142ac820057f74ca4b0b59617734276c31281af15/pillow-11.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7326a1787e3c7b0429659e0a944725e1b03eeaa10edd945a86dead1913383944", size = 2567664 }, ] [[package]] @@ -1631,6 +1712,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size = 20556 }, ] +[[package]] +name = "projectq" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "matplotlib" }, + { name = "networkx" }, + { name = "numpy" }, + { name = "requests" }, + { name = "scipy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/30/88/48c8347cadf6afb7f329e7c06d30880159e2a50b6e8a643c7667c26ffaf0/projectq-0.8.0.tar.gz", hash = "sha256:0bcd242afabe947ac4737dffab1de62628b84125ee6ccb3ec23bd4f1d082ec60", size = 433667 } + [[package]] name = "prompt-toolkit" version = "3.0.48" @@ -1645,17 +1739,17 @@ wheels = [ [[package]] name = "psutil" -version = "6.0.0" +version = "6.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/18/c7/8c6872f7372eb6a6b2e4708b88419fb46b857f7a2e1892966b851cc79fc9/psutil-6.0.0.tar.gz", hash = "sha256:8faae4f310b6d969fa26ca0545338b21f73c6b15db7c4a8d934a5482faa818f2", size = 508067 } +sdist = { url = "https://files.pythonhosted.org/packages/26/10/2a30b13c61e7cf937f4adf90710776b7918ed0a9c434e2c38224732af310/psutil-6.1.0.tar.gz", hash = "sha256:353815f59a7f64cdaca1c0307ee13558a0512f6db064e92fe833784f08539c7a", size = 508565 } wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/37/f8da2fbd29690b3557cca414c1949f92162981920699cd62095a984983bf/psutil-6.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c588a7e9b1173b6e866756dde596fd4cad94f9399daf99ad8c3258b3cb2b47a0", size = 250961 }, - { url = "https://files.pythonhosted.org/packages/35/56/72f86175e81c656a01c4401cd3b1c923f891b31fbcebe98985894176d7c9/psutil-6.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ed2440ada7ef7d0d608f20ad89a04ec47d2d3ab7190896cd62ca5fc4fe08bf0", size = 287478 }, - { url = "https://files.pythonhosted.org/packages/19/74/f59e7e0d392bc1070e9a70e2f9190d652487ac115bb16e2eff6b22ad1d24/psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fd9a97c8e94059b0ef54a7d4baf13b405011176c3b6ff257c247cae0d560ecd", size = 290455 }, - { url = "https://files.pythonhosted.org/packages/cd/5f/60038e277ff0a9cc8f0c9ea3d0c5eb6ee1d2470ea3f9389d776432888e47/psutil-6.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e8d0054fc88153ca0544f5c4d554d42e33df2e009c4ff42284ac9ebdef4132", size = 292046 }, - { url = "https://files.pythonhosted.org/packages/8b/20/2ff69ad9c35c3df1858ac4e094f20bd2374d33c8643cf41da8fd7cdcb78b/psutil-6.0.0-cp37-abi3-win32.whl", hash = "sha256:a495580d6bae27291324fe60cea0b5a7c23fa36a7cd35035a16d93bdcf076b9d", size = 253560 }, - { url = "https://files.pythonhosted.org/packages/73/44/561092313ae925f3acfaace6f9ddc4f6a9c748704317bad9c8c8f8a36a79/psutil-6.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:33ea5e1c975250a720b3a6609c490db40dae5d83a4eb315170c4fe0d8b1f34b3", size = 257399 }, - { url = "https://files.pythonhosted.org/packages/7c/06/63872a64c312a24fb9b4af123ee7007a306617da63ff13bcc1432386ead7/psutil-6.0.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:ffe7fc9b6b36beadc8c322f84e1caff51e8703b88eee1da46d1e3a6ae11b4fd0", size = 251988 }, + { url = "https://files.pythonhosted.org/packages/01/9e/8be43078a171381953cfee33c07c0d628594b5dbfc5157847b85022c2c1b/psutil-6.1.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6e2dcd475ce8b80522e51d923d10c7871e45f20918e027ab682f94f1c6351688", size = 247762 }, + { url = "https://files.pythonhosted.org/packages/1d/cb/313e80644ea407f04f6602a9e23096540d9dc1878755f3952ea8d3d104be/psutil-6.1.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:0895b8414afafc526712c498bd9de2b063deaac4021a3b3c34566283464aff8e", size = 248777 }, + { url = "https://files.pythonhosted.org/packages/65/8e/bcbe2025c587b5d703369b6a75b65d41d1367553da6e3f788aff91eaf5bd/psutil-6.1.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9dcbfce5d89f1d1f2546a2090f4fcf87c7f669d1d90aacb7d7582addece9fb38", size = 284259 }, + { url = "https://files.pythonhosted.org/packages/58/4d/8245e6f76a93c98aab285a43ea71ff1b171bcd90c9d238bf81f7021fb233/psutil-6.1.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:498c6979f9c6637ebc3a73b3f87f9eb1ec24e1ce53a7c5173b8508981614a90b", size = 287255 }, + { url = "https://files.pythonhosted.org/packages/27/c2/d034856ac47e3b3cdfa9720d0e113902e615f4190d5d1bdb8df4b2015fb2/psutil-6.1.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d905186d647b16755a800e7263d43df08b790d709d575105d419f8b6ef65423a", size = 288804 }, + { url = "https://files.pythonhosted.org/packages/ea/55/5389ed243c878725feffc0d6a3bc5ef6764312b6fc7c081faaa2cfa7ef37/psutil-6.1.0-cp37-abi3-win32.whl", hash = "sha256:1ad45a1f5d0b608253b11508f80940985d1d0c8f6111b5cb637533a0e6ddc13e", size = 250386 }, + { url = "https://files.pythonhosted.org/packages/11/91/87fa6f060e649b1e1a7b19a4f5869709fbf750b7c8c262ee776ec32f3028/psutil-6.1.0-cp37-abi3-win_amd64.whl", hash = "sha256:a8fb3752b491d246034fa4d279ff076501588ce8cbcdbb62c32fd7a377d996be", size = 254228 }, ] [[package]] @@ -1810,15 +1904,15 @@ wheels = [ [[package]] name = "pytest-cov" -version = "5.0.0" +version = "6.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "coverage", extra = ["toml"] }, { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/74/67/00efc8d11b630c56f15f4ad9c7f9223f1e5ec275aaae3fa9118c6a223ad2/pytest-cov-5.0.0.tar.gz", hash = "sha256:5837b58e9f6ebd335b0f8060eecce69b662415b16dc503883a02f45dfeb14857", size = 63042 } +sdist = { url = "https://files.pythonhosted.org/packages/be/45/9b538de8cef30e17c7b45ef42f538a94889ed6a16f2387a6c89e73220651/pytest-cov-6.0.0.tar.gz", hash = "sha256:fde0b595ca248bb8e2d76f020b465f3b107c9632e6a1d1705f17834c89dcadc0", size = 66945 } wheels = [ - { url = "https://files.pythonhosted.org/packages/78/3a/af5b4fa5961d9a1e6237b530eb87dd04aea6eb83da09d2a4073d81b54ccf/pytest_cov-5.0.0-py3-none-any.whl", hash = "sha256:4f0764a1219df53214206bf1feea4633c3b558a2925c8b59f144f682861ce652", size = 21990 }, + { url = "https://files.pythonhosted.org/packages/36/3b/48e79f2cd6a61dbbd4807b4ed46cb564b4fd50a76166b1c4ea5c1d9e2371/pytest_cov-6.0.0-py3-none-any.whl", hash = "sha256:eee6f1b9e61008bd34975a4d5bab25801eb31898b032dd55addc93e96fcaaa35", size = 22949 }, ] [[package]] @@ -2123,15 +2217,38 @@ wheels = [ [[package]] name = "qiskit-qasm3-import" -version = "0.5.0" +version = "0.5.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "openqasm3", extra = ["parser"] }, { name = "qiskit" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/69/40/e6ea9dc59d50bbf5ca61e695cd986ded1386ab65f6bfb0181144555d7c1f/qiskit_qasm3_import-0.5.0.tar.gz", hash = "sha256:d8d39ac176eaa7f2414dab897ff449ea1e5d854230b262b21724d138939a6476", size = 34063 } +sdist = { url = "https://files.pythonhosted.org/packages/f4/a7/0c5241d05e999b0f13e89241b4c2c2c488add7f3240642612591fdd4f2d8/qiskit_qasm3_import-0.5.1.tar.gz", hash = "sha256:334fff0080667fe9cb39e807b0875a2658b01d33b4c964a8816411b30938c107", size = 34055 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/f2/d061b1eb3edd70b4503c06ebe94e087d089de01187b7b5d8d99a43df010a/qiskit_qasm3_import-0.5.1-py3-none-any.whl", hash = "sha256:ba6cc1ce3b142c069be07e945816a4bc1458fafe950df4f0eb15ae97d5275102", size = 27614 }, +] + +[[package]] +name = "qsample" +version = "0.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anytree" }, + { name = "chp-sim" }, + { name = "dill" }, + { name = "latextools" }, + { name = "matplotlib" }, + { name = "networkx" }, + { name = "numpy" }, + { name = "projectq" }, + { name = "pydot" }, + { name = "scipy" }, + { name = "simpleeval" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bb/55/c0d0a6ab89c17dfe294425ec3cd32bebf61a8d23864383fca4f5cae856f8/qsample-0.0.2.tar.gz", hash = "sha256:92be0415d3ef45b574fc57f4eb242f5a0c182a4028029c2b18cc14bb42e33102", size = 43847 } wheels = [ - { url = "https://files.pythonhosted.org/packages/cd/1d/12529a4ab9910ab15409ac79fff32a729cf54d65187b386954a52fd84f2b/qiskit_qasm3_import-0.5.0-py3-none-any.whl", hash = "sha256:137f98e870160dc274eb920603c1c0032f2534b5e365b0243e57b25dfee46f61", size = 27620 }, + { url = "https://files.pythonhosted.org/packages/ae/25/8dd8096cad59b98de59737c7ff7bfb9535d86216c5a95e403d06fc005c7e/qsample-0.0.2-py3-none-any.whl", hash = "sha256:b6a85139dec3ab69e49b18b1b2f608814415efd2d07875b278a3644a42db58d2", size = 44643 }, ] [[package]] @@ -2164,99 +2281,99 @@ wheels = [ [[package]] name = "rpds-py" -version = "0.20.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/55/64/b693f262791b818880d17268f3f8181ef799b0d187f6f731b1772e05a29a/rpds_py-0.20.0.tar.gz", hash = "sha256:d72a210824facfdaf8768cf2d7ca25a042c30320b3020de2fa04640920d4e121", size = 25814 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/71/2d/a7e60483b72b91909e18f29a5c5ae847bac4e2ae95b77bb77e1f41819a58/rpds_py-0.20.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3ad0fda1635f8439cde85c700f964b23ed5fc2d28016b32b9ee5fe30da5c84e2", size = 318432 }, - { url = "https://files.pythonhosted.org/packages/b5/b4/f15b0c55a6d880ce74170e7e28c3ed6c5acdbbd118df50b91d1dabf86008/rpds_py-0.20.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9bb4a0d90fdb03437c109a17eade42dfbf6190408f29b2744114d11586611d6f", size = 311333 }, - { url = "https://files.pythonhosted.org/packages/36/10/3f4e490fe6eb069c07c22357d0b4804cd94cb9f8d01345ef9b1d93482b9d/rpds_py-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6377e647bbfd0a0b159fe557f2c6c602c159fc752fa316572f012fc0bf67150", size = 366697 }, - { url = "https://files.pythonhosted.org/packages/f5/c8/cd6ab31b4424c7fab3b17e153b6ea7d1bb0d7cabea5c1ef683cc8adb8bc2/rpds_py-0.20.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb851b7df9dda52dc1415ebee12362047ce771fc36914586b2e9fcbd7d293b3e", size = 368386 }, - { url = "https://files.pythonhosted.org/packages/60/5e/642a44fda6dda90b5237af7a0ef1d088159c30a504852b94b0396eb62125/rpds_py-0.20.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e0f80b739e5a8f54837be5d5c924483996b603d5502bfff79bf33da06164ee2", size = 395374 }, - { url = "https://files.pythonhosted.org/packages/7c/b5/ff18c093c9e72630f6d6242e5ccb0728ef8265ba0a154b5972f89d23790a/rpds_py-0.20.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a8c94dad2e45324fc74dce25e1645d4d14df9a4e54a30fa0ae8bad9a63928e3", size = 433189 }, - { url = "https://files.pythonhosted.org/packages/4a/6d/1166a157b227f2333f8e8ae320b6b7ea2a6a38fbe7a3563ad76dffc8608d/rpds_py-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8e604fe73ba048c06085beaf51147eaec7df856824bfe7b98657cf436623daf", size = 354849 }, - { url = "https://files.pythonhosted.org/packages/70/a4/70ea49863ea09ae4c2971f2eef58e80b757e3c0f2f618c5815bb751f7847/rpds_py-0.20.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:df3de6b7726b52966edf29663e57306b23ef775faf0ac01a3e9f4012a24a4140", size = 373233 }, - { url = "https://files.pythonhosted.org/packages/3b/d3/822a28152a1e7e2ba0dc5d06cf8736f4cd64b191bb6ec47fb51d1c3c5ccf/rpds_py-0.20.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf258ede5bc22a45c8e726b29835b9303c285ab46fc7c3a4cc770736b5304c9f", size = 541852 }, - { url = "https://files.pythonhosted.org/packages/c6/a5/6ef91e4425dc8b3445ff77d292fc4c5e37046462434a0423c4e0a596a8bd/rpds_py-0.20.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:55fea87029cded5df854ca7e192ec7bdb7ecd1d9a3f63d5c4eb09148acf4a7ce", size = 547630 }, - { url = "https://files.pythonhosted.org/packages/72/f8/d5625ee05c4e5c478954a16d9359069c66fe8ac8cd5ddf28f80d3b321837/rpds_py-0.20.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ae94bd0b2f02c28e199e9bc51485d0c5601f58780636185660f86bf80c89af94", size = 525766 }, - { url = "https://files.pythonhosted.org/packages/94/3c/1ff1ed6ae323b3e16fdfcdae0f0a67f373a6c3d991229dc32b499edeffb7/rpds_py-0.20.0-cp310-none-win32.whl", hash = "sha256:28527c685f237c05445efec62426d285e47a58fb05ba0090a4340b73ecda6dee", size = 199174 }, - { url = "https://files.pythonhosted.org/packages/ec/ba/5762c0aee2403dfea14ed74b0f8a2415cfdbb21cf745d600d9a8ac952c5b/rpds_py-0.20.0-cp310-none-win_amd64.whl", hash = "sha256:238a2d5b1cad28cdc6ed15faf93a998336eb041c4e440dd7f902528b8891b399", size = 213543 }, - { url = "https://files.pythonhosted.org/packages/ab/2a/191374c52d7be0b056cc2a04d718d2244c152f915d4a8d2db2aacc526189/rpds_py-0.20.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac2f4f7a98934c2ed6505aead07b979e6f999389f16b714448fb39bbaa86a489", size = 318369 }, - { url = "https://files.pythonhosted.org/packages/0e/6a/2c9fdcc6d235ac0d61ec4fd9981184689c3e682abd05e3caa49bccb9c298/rpds_py-0.20.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:220002c1b846db9afd83371d08d239fdc865e8f8c5795bbaec20916a76db3318", size = 311303 }, - { url = "https://files.pythonhosted.org/packages/d2/b2/725487d29633f64ef8f9cbf4729111a0b61702c8f8e94db1653930f52cce/rpds_py-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d7919548df3f25374a1f5d01fbcd38dacab338ef5f33e044744b5c36729c8db", size = 366424 }, - { url = "https://files.pythonhosted.org/packages/7a/8c/668195ab9226d01b7cf7cd9e59c1c0be1df05d602df7ec0cf46f857dcf59/rpds_py-0.20.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:758406267907b3781beee0f0edfe4a179fbd97c0be2e9b1154d7f0a1279cf8e5", size = 368359 }, - { url = "https://files.pythonhosted.org/packages/52/28/356f6a39c1adeb02cf3e5dd526f5e8e54e17899bef045397abcfbf50dffa/rpds_py-0.20.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d61339e9f84a3f0767b1995adfb171a0d00a1185192718a17af6e124728e0f5", size = 394886 }, - { url = "https://files.pythonhosted.org/packages/a2/65/640fb1a89080a8fb6f4bebd3dafb65a2edba82e2e44c33e6eb0f3e7956f1/rpds_py-0.20.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1259c7b3705ac0a0bd38197565a5d603218591d3f6cee6e614e380b6ba61c6f6", size = 432416 }, - { url = "https://files.pythonhosted.org/packages/a7/e8/85835077b782555d6b3416874b702ea6ebd7db1f145283c9252968670dd5/rpds_py-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c1dc0f53856b9cc9a0ccca0a7cc61d3d20a7088201c0937f3f4048c1718a209", size = 354819 }, - { url = "https://files.pythonhosted.org/packages/4f/87/1ac631e923d65cbf36fbcfc6eaa702a169496de1311e54be142f178e53ee/rpds_py-0.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7e60cb630f674a31f0368ed32b2a6b4331b8350d67de53c0359992444b116dd3", size = 373282 }, - { url = "https://files.pythonhosted.org/packages/e4/ce/cb316f7970189e217b998191c7cf0da2ede3d5437932c86a7210dc1e9994/rpds_py-0.20.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dbe982f38565bb50cb7fb061ebf762c2f254ca3d8c20d4006878766e84266272", size = 541540 }, - { url = "https://files.pythonhosted.org/packages/90/d7/4112d7655ec8aff168ecc91d4ceb51c557336edde7e6ccf6463691a2f253/rpds_py-0.20.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:514b3293b64187172bc77c8fb0cdae26981618021053b30d8371c3a902d4d5ad", size = 547640 }, - { url = "https://files.pythonhosted.org/packages/ab/44/4f61d64dfed98cc71623f3a7fcb612df636a208b4b2c6611eaa985e130a9/rpds_py-0.20.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d0a26ffe9d4dd35e4dfdd1e71f46401cff0181c75ac174711ccff0459135fa58", size = 525555 }, - { url = "https://files.pythonhosted.org/packages/35/f2/a862d81eacb21f340d584cd1c749c289979f9a60e9229f78bffc0418a199/rpds_py-0.20.0-cp311-none-win32.whl", hash = "sha256:89c19a494bf3ad08c1da49445cc5d13d8fefc265f48ee7e7556839acdacf69d0", size = 199338 }, - { url = "https://files.pythonhosted.org/packages/cc/ec/77d0674f9af4872919f3738018558dd9d37ad3f7ad792d062eadd4af7cba/rpds_py-0.20.0-cp311-none-win_amd64.whl", hash = "sha256:c638144ce971df84650d3ed0096e2ae7af8e62ecbbb7b201c8935c370df00a2c", size = 213585 }, - { url = "https://files.pythonhosted.org/packages/89/b7/f9682c5cc37fcc035f4a0fc33c1fe92ec9cbfdee0cdfd071cf948f53e0df/rpds_py-0.20.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a84ab91cbe7aab97f7446652d0ed37d35b68a465aeef8fc41932a9d7eee2c1a6", size = 321468 }, - { url = "https://files.pythonhosted.org/packages/b8/ad/fc82be4eaceb8d444cb6fc1956ce972b3a0795104279de05e0e4131d0a47/rpds_py-0.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:56e27147a5a4c2c21633ff8475d185734c0e4befd1c989b5b95a5d0db699b21b", size = 313062 }, - { url = "https://files.pythonhosted.org/packages/0e/1c/6039e80b13a08569a304dc13476dc986352dca4598e909384db043b4e2bb/rpds_py-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2580b0c34583b85efec8c5c5ec9edf2dfe817330cc882ee972ae650e7b5ef739", size = 370168 }, - { url = "https://files.pythonhosted.org/packages/dc/c9/5b9aa35acfb58946b4b785bc8e700ac313669e02fb100f3efa6176a83e81/rpds_py-0.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b80d4a7900cf6b66bb9cee5c352b2d708e29e5a37fe9bf784fa97fc11504bf6c", size = 371376 }, - { url = "https://files.pythonhosted.org/packages/7b/dd/0e0dbeb70d8a5357d2814764d467ded98d81d90d3570de4fb05ec7224f6b/rpds_py-0.20.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50eccbf054e62a7b2209b28dc7a22d6254860209d6753e6b78cfaeb0075d7bee", size = 397200 }, - { url = "https://files.pythonhosted.org/packages/e4/da/a47d931eb688ccfd77a7389e45935c79c41e8098d984d87335004baccb1d/rpds_py-0.20.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:49a8063ea4296b3a7e81a5dfb8f7b2d73f0b1c20c2af401fb0cdf22e14711a96", size = 426824 }, - { url = "https://files.pythonhosted.org/packages/0f/f7/a59a673594e6c2ff2dbc44b00fd4ecdec2fc399bb6a7bd82d612699a0121/rpds_py-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea438162a9fcbee3ecf36c23e6c68237479f89f962f82dae83dc15feeceb37e4", size = 357967 }, - { url = "https://files.pythonhosted.org/packages/5f/61/3ba1905396b2cb7088f9503a460b87da33452da54d478cb9241f6ad16d00/rpds_py-0.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:18d7585c463087bddcfa74c2ba267339f14f2515158ac4db30b1f9cbdb62c8ef", size = 378905 }, - { url = "https://files.pythonhosted.org/packages/08/31/6d0df9356b4edb0a3a077f1ef714e25ad21f9f5382fc490c2383691885ea/rpds_py-0.20.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d4c7d1a051eeb39f5c9547e82ea27cbcc28338482242e3e0b7768033cb083821", size = 546348 }, - { url = "https://files.pythonhosted.org/packages/ae/15/d33c021de5cb793101df9961c3c746dfc476953dbbf5db337d8010dffd4e/rpds_py-0.20.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e4df1e3b3bec320790f699890d41c59d250f6beda159ea3c44c3f5bac1976940", size = 553152 }, - { url = "https://files.pythonhosted.org/packages/70/2d/5536d28c507a4679179ab15aa0049440e4d3dd6752050fa0843ed11e9354/rpds_py-0.20.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2cf126d33a91ee6eedc7f3197b53e87a2acdac63602c0f03a02dd69e4b138174", size = 528807 }, - { url = "https://files.pythonhosted.org/packages/e3/62/7ebe6ec0d3dd6130921f8cffb7e34afb7f71b3819aa0446a24c5e81245ec/rpds_py-0.20.0-cp312-none-win32.whl", hash = "sha256:8bc7690f7caee50b04a79bf017a8d020c1f48c2a1077ffe172abec59870f1139", size = 200993 }, - { url = "https://files.pythonhosted.org/packages/ec/2f/b938864d66b86a6e4acadefdc56de75ef56f7cafdfd568a6464605457bd5/rpds_py-0.20.0-cp312-none-win_amd64.whl", hash = "sha256:0e13e6952ef264c40587d510ad676a988df19adea20444c2b295e536457bc585", size = 214458 }, - { url = "https://files.pythonhosted.org/packages/99/32/43b919a0a423c270a838ac2726b1c7168b946f2563fd99a51aaa9692d00f/rpds_py-0.20.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:aa9a0521aeca7d4941499a73ad7d4f8ffa3d1affc50b9ea11d992cd7eff18a29", size = 321465 }, - { url = "https://files.pythonhosted.org/packages/58/a9/c4d899cb28e9e47b0ff12462e8f827381f243176036f17bef9c1604667f2/rpds_py-0.20.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4a1f1d51eccb7e6c32ae89243cb352389228ea62f89cd80823ea7dd1b98e0b91", size = 312900 }, - { url = "https://files.pythonhosted.org/packages/8f/90/9e51670575b5dfaa8c823369ef7d943087bfb73d4f124a99ad6ef19a2b26/rpds_py-0.20.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a86a9b96070674fc88b6f9f71a97d2c1d3e5165574615d1f9168ecba4cecb24", size = 370973 }, - { url = "https://files.pythonhosted.org/packages/fc/c1/523f2a03f853fc0d4c1acbef161747e9ab7df0a8abf6236106e333540921/rpds_py-0.20.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6c8ef2ebf76df43f5750b46851ed1cdf8f109d7787ca40035fe19fbdc1acc5a7", size = 370890 }, - { url = "https://files.pythonhosted.org/packages/51/ca/2458a771f16b0931de4d384decbe43016710bc948036c8f4562d6e063437/rpds_py-0.20.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b74b25f024b421d5859d156750ea9a65651793d51b76a2e9238c05c9d5f203a9", size = 397174 }, - { url = "https://files.pythonhosted.org/packages/00/7d/6e06807f6305ea2408b364efb0eef83a6e21b5e7b5267ad6b473b9a7e416/rpds_py-0.20.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57eb94a8c16ab08fef6404301c38318e2c5a32216bf5de453e2714c964c125c8", size = 426449 }, - { url = "https://files.pythonhosted.org/packages/8c/d1/6c9e65260a819a1714510a7d69ac1d68aa23ee9ce8a2d9da12187263c8fc/rpds_py-0.20.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1940dae14e715e2e02dfd5b0f64a52e8374a517a1e531ad9412319dc3ac7879", size = 357698 }, - { url = "https://files.pythonhosted.org/packages/5d/fb/ecea8b5286d2f03eec922be7173a03ed17278944f7c124348f535116db15/rpds_py-0.20.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d20277fd62e1b992a50c43f13fbe13277a31f8c9f70d59759c88f644d66c619f", size = 378530 }, - { url = "https://files.pythonhosted.org/packages/e3/e3/ac72f858957f52a109c588589b73bd2fad4a0fc82387fb55fb34aeb0f9cd/rpds_py-0.20.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:06db23d43f26478303e954c34c75182356ca9aa7797d22c5345b16871ab9c45c", size = 545753 }, - { url = "https://files.pythonhosted.org/packages/b2/a4/a27683b519d5fc98e4390a3b130117d80fd475c67aeda8aac83c0e8e326a/rpds_py-0.20.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b2a5db5397d82fa847e4c624b0c98fe59d2d9b7cf0ce6de09e4d2e80f8f5b3f2", size = 552443 }, - { url = "https://files.pythonhosted.org/packages/a1/ed/c074d248409b4432b1ccb2056974175fa0af2d1bc1f9c21121f80a358fa3/rpds_py-0.20.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a35df9f5548fd79cb2f52d27182108c3e6641a4feb0f39067911bf2adaa3e57", size = 528380 }, - { url = "https://files.pythonhosted.org/packages/d5/bd/04caf938895d2d78201e89c0c8a94dfd9990c34a19ff52fb01d0912343e3/rpds_py-0.20.0-cp313-none-win32.whl", hash = "sha256:fd2d84f40633bc475ef2d5490b9c19543fbf18596dcb1b291e3a12ea5d722f7a", size = 200540 }, - { url = "https://files.pythonhosted.org/packages/95/cc/109eb8b9863680411ae703664abacaa035820c7755acc9686d5dd02cdd2e/rpds_py-0.20.0-cp313-none-win_amd64.whl", hash = "sha256:9bc2d153989e3216b0559251b0c260cfd168ec78b1fac33dd485750a228db5a2", size = 214111 }, - { url = "https://files.pythonhosted.org/packages/a1/55/228f6d9a8c6940c8d5e49db5e0434ffcbad669c33509ac39cb0af061b0fa/rpds_py-0.20.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3fde368e9140312b6e8b6c09fb9f8c8c2f00999d1823403ae90cc00480221b22", size = 319496 }, - { url = "https://files.pythonhosted.org/packages/68/61/074236253586feb550954f8b4359d38eefb45bafcbbb7d2e74062a82f386/rpds_py-0.20.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9824fb430c9cf9af743cf7aaf6707bf14323fb51ee74425c380f4c846ea70789", size = 311837 }, - { url = "https://files.pythonhosted.org/packages/03/67/ed6c2fe076bf78296934d4356145fedf3c7c2f8d490e099bcf6f31794dc0/rpds_py-0.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11ef6ce74616342888b69878d45e9f779b95d4bd48b382a229fe624a409b72c5", size = 367819 }, - { url = "https://files.pythonhosted.org/packages/30/25/4a9e7b89b6760ac032f375cb236e4f8e518ad1fad685c40b6a9752056d6f/rpds_py-0.20.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c52d3f2f82b763a24ef52f5d24358553e8403ce05f893b5347098014f2d9eff2", size = 368322 }, - { url = "https://files.pythonhosted.org/packages/67/17/0255bb0e564517b53343ea672ebec9fb7ad40e9083ca09a4080fbc986bb9/rpds_py-0.20.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d35cef91e59ebbeaa45214861874bc6f19eb35de96db73e467a8358d701a96c", size = 395552 }, - { url = "https://files.pythonhosted.org/packages/af/6e/77c65ccb0d7cdc39ec2be19b918a4d4fe9e2d2a1c5cab36745b36f2c1e59/rpds_py-0.20.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d72278a30111e5b5525c1dd96120d9e958464316f55adb030433ea905866f4de", size = 433735 }, - { url = "https://files.pythonhosted.org/packages/04/d8/e73d56b1908a6c0e3e5982365eb293170cd458cc25a19363f69c76e00fd2/rpds_py-0.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4c29cbbba378759ac5786730d1c3cb4ec6f8ababf5c42a9ce303dc4b3d08cda", size = 355542 }, - { url = "https://files.pythonhosted.org/packages/47/df/e72c79053b0c882b818bfd8f0ed1f1ace550bc9cdba27165cb73dddb9394/rpds_py-0.20.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6632f2d04f15d1bd6fe0eedd3b86d9061b836ddca4c03d5cf5c7e9e6b7c14580", size = 373644 }, - { url = "https://files.pythonhosted.org/packages/7f/00/3e16cb08c0cc6a233f0f61e4d009e3098cbe280ec975d14f28935bd15316/rpds_py-0.20.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d0b67d87bb45ed1cd020e8fbf2307d449b68abc45402fe1a4ac9e46c3c8b192b", size = 543139 }, - { url = "https://files.pythonhosted.org/packages/41/71/799c6b6f6031ed535f22fcf6802601cc7f981842bd28007bb7bb4bd10b2f/rpds_py-0.20.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ec31a99ca63bf3cd7f1a5ac9fe95c5e2d060d3c768a09bc1d16e235840861420", size = 548007 }, - { url = "https://files.pythonhosted.org/packages/53/58/ad03eb6718e814fa045198c72d45d2ae60180eb48338f22c9fa34bd89964/rpds_py-0.20.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:22e6c9976e38f4d8c4a63bd8a8edac5307dffd3ee7e6026d97f3cc3a2dc02a0b", size = 526102 }, - { url = "https://files.pythonhosted.org/packages/78/99/a52e5b460f2311fc8ee75ff769e8d67e76208947180eacb4f153af2d9967/rpds_py-0.20.0-cp39-none-win32.whl", hash = "sha256:569b3ea770c2717b730b61998b6c54996adee3cef69fc28d444f3e7920313cf7", size = 199391 }, - { url = "https://files.pythonhosted.org/packages/0c/7d/fd42a27fe392a69faf4a5e635870fc425edcb998485ee73afbc734ecef16/rpds_py-0.20.0-cp39-none-win_amd64.whl", hash = "sha256:e6900ecdd50ce0facf703f7a00df12374b74bbc8ad9fe0f6559947fb20f82364", size = 213205 }, - { url = "https://files.pythonhosted.org/packages/06/39/bf1f664c347c946ef56cecaa896e3693d91acc741afa78ebb3fdb7aba08b/rpds_py-0.20.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:617c7357272c67696fd052811e352ac54ed1d9b49ab370261a80d3b6ce385045", size = 319444 }, - { url = "https://files.pythonhosted.org/packages/c1/71/876135d3cb90d62468540b84e8e83ff4dc92052ab309bfdea7ea0b9221ad/rpds_py-0.20.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9426133526f69fcaba6e42146b4e12d6bc6c839b8b555097020e2b78ce908dcc", size = 311699 }, - { url = "https://files.pythonhosted.org/packages/f7/da/8ccaeba6a3dda7467aebaf893de9eafd56275e2c90773c83bf15fb0b8374/rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:deb62214c42a261cb3eb04d474f7155279c1a8a8c30ac89b7dcb1721d92c3c02", size = 367825 }, - { url = "https://files.pythonhosted.org/packages/04/b6/02a54c47c178d180395b3c9a8bfb3b93906e08f9acf7b4a1067d27c3fae0/rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcaeb7b57f1a1e071ebd748984359fef83ecb026325b9d4ca847c95bc7311c92", size = 369046 }, - { url = "https://files.pythonhosted.org/packages/a7/64/df4966743aa4def8727dc13d06527c8b13eb7412c1429def2d4701bee520/rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d454b8749b4bd70dd0a79f428731ee263fa6995f83ccb8bada706e8d1d3ff89d", size = 395896 }, - { url = "https://files.pythonhosted.org/packages/6f/d9/7ff03ff3642c600f27ff94512bb158a8d815fea5ed4162c75a7e850d6003/rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d807dc2051abe041b6649681dce568f8e10668e3c1c6543ebae58f2d7e617855", size = 432427 }, - { url = "https://files.pythonhosted.org/packages/b8/c6/e1b886f7277b3454e55e85332e165091c19114eecb5377b88d892fd36ccf/rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3c20f0ddeb6e29126d45f89206b8291352b8c5b44384e78a6499d68b52ae511", size = 355403 }, - { url = "https://files.pythonhosted.org/packages/e2/62/e26bd5b944e547c7bfd0b6ca7e306bfa430f8bd298ab72a1217976a7ca8d/rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b7f19250ceef892adf27f0399b9e5afad019288e9be756d6919cb58892129f51", size = 374491 }, - { url = "https://files.pythonhosted.org/packages/c3/92/93c5a530898d3a5d1ce087455071ba714b77806ed9ffee4070d0c7a53b7e/rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4f1ed4749a08379555cebf4650453f14452eaa9c43d0a95c49db50c18b7da075", size = 543622 }, - { url = "https://files.pythonhosted.org/packages/01/9e/d68fba289625b5d3c9d1925825d7da716fbf812bda2133ac409021d5db13/rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:dcedf0b42bcb4cfff4101d7771a10532415a6106062f005ab97d1d0ab5681c60", size = 548558 }, - { url = "https://files.pythonhosted.org/packages/bf/d6/4b2fad4898154365f0f2bd72ffd190349274a4c1d6a6f94f02a83bb2b8f1/rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:39ed0d010457a78f54090fafb5d108501b5aa5604cc22408fc1c0c77eac14344", size = 525753 }, - { url = "https://files.pythonhosted.org/packages/d2/ea/6f121d1802f3adae1981aea4209ea66f9d3c7f2f6d6b85ef4f13a61d17ef/rpds_py-0.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:bb273176be34a746bdac0b0d7e4e2c467323d13640b736c4c477881a3220a989", size = 213529 }, - { url = "https://files.pythonhosted.org/packages/0a/6f/7ab47005469f0d73dad89d29b733e3555d454a45146c30f5628242e56d33/rpds_py-0.20.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f918a1a130a6dfe1d7fe0f105064141342e7dd1611f2e6a21cd2f5c8cb1cfb3e", size = 320800 }, - { url = "https://files.pythonhosted.org/packages/cc/a1/bef9e0ef30f89c7516559ca7acc40e8ae70397535a0b1a4535a4a01d9ed0/rpds_py-0.20.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:f60012a73aa396be721558caa3a6fd49b3dd0033d1675c6d59c4502e870fcf0c", size = 312001 }, - { url = "https://files.pythonhosted.org/packages/31/44/9093c5dca95ee463c3669651e710af182eb6f9cd83626b15a2ebde2247b1/rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d2b1ad682a3dfda2a4e8ad8572f3100f95fad98cb99faf37ff0ddfe9cbf9d03", size = 369279 }, - { url = "https://files.pythonhosted.org/packages/6f/ac/0c36e067681fa3fe4c60a9422b011ec0ccc80c1e124f5210951f7982e887/rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:614fdafe9f5f19c63ea02817fa4861c606a59a604a77c8cdef5aa01d28b97921", size = 369716 }, - { url = "https://files.pythonhosted.org/packages/6b/78/8896e08625d46ea5bfdd526ee688b91eeafecbc3cf7223612c82ed77905b/rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa518bcd7600c584bf42e6617ee8132869e877db2f76bcdc281ec6a4113a53ab", size = 396708 }, - { url = "https://files.pythonhosted.org/packages/24/5f/d865ae460e47e46fd2b489f2aceed34439bd8f18a1ff414c299142e0e22a/rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0475242f447cc6cb8a9dd486d68b2ef7fbee84427124c232bff5f63b1fe11e5", size = 433356 }, - { url = "https://files.pythonhosted.org/packages/bd/8b/04031937ffa565021f934a9acf44bb6b1b60ea19fa9e58950b32357e85a1/rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f90a4cd061914a60bd51c68bcb4357086991bd0bb93d8aa66a6da7701370708f", size = 356157 }, - { url = "https://files.pythonhosted.org/packages/3a/64/1f0471b1e688704a716e07340b85f4145109359951feb08676a1f3b8cec4/rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:def7400461c3a3f26e49078302e1c1b38f6752342c77e3cf72ce91ca69fb1bc1", size = 374826 }, - { url = "https://files.pythonhosted.org/packages/73/4e/082c0c5eba463e29dff1c6b49557f6ad0d6faae4b46832fa9c1e5b69b7ba/rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:65794e4048ee837494aea3c21a28ad5fc080994dfba5b036cf84de37f7ad5074", size = 544549 }, - { url = "https://files.pythonhosted.org/packages/cd/ee/f4af0a62d1ba912c4a3a7f5ec04350946ddd59017f3f3d1c227b20ddf558/rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:faefcc78f53a88f3076b7f8be0a8f8d35133a3ecf7f3770895c25f8813460f08", size = 549245 }, - { url = "https://files.pythonhosted.org/packages/59/42/34601dc773be86a85a9ca47f68301a69fdb019aaae0c1426813f265f5ac0/rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5b4f105deeffa28bbcdff6c49b34e74903139afa690e35d2d9e3c2c2fba18cec", size = 526722 }, - { url = "https://files.pythonhosted.org/packages/ff/4f/280745d5180c9d78df6b53b6e8b65336f8b6adeb958a8fd19c749fded637/rpds_py-0.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fdfc3a892927458d98f3d55428ae46b921d1f7543b89382fdb483f5640daaec8", size = 214379 }, +version = "0.21.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/23/80/afdf96daf9b27d61483ef05b38f282121db0e38f5fd4e89f40f5c86c2a4f/rpds_py-0.21.0.tar.gz", hash = "sha256:ed6378c9d66d0de903763e7706383d60c33829581f0adff47b6535f1802fa6db", size = 26335 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4c/a4/91747f902f166c589f1753cbd8bda713aceb75817c8bb597058a38aa85e6/rpds_py-0.21.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a017f813f24b9df929674d0332a374d40d7f0162b326562daae8066b502d0590", size = 327473 }, + { url = "https://files.pythonhosted.org/packages/8a/72/75a30a07f96ae210e732c50c7339e742945fdc83661e65a1c80fcf39ceea/rpds_py-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:20cc1ed0bcc86d8e1a7e968cce15be45178fd16e2ff656a243145e0b439bd250", size = 318359 }, + { url = "https://files.pythonhosted.org/packages/dc/63/87d469d7628cd71366fd1baa32573acd37385843b8d39b6e2b69f16eec48/rpds_py-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad116dda078d0bc4886cb7840e19811562acdc7a8e296ea6ec37e70326c1b41c", size = 361377 }, + { url = "https://files.pythonhosted.org/packages/dd/b1/78da258a4cafa1d8606a21b7d9ed4cc9d72d1c663583060ab02444b9bd9c/rpds_py-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:808f1ac7cf3b44f81c9475475ceb221f982ef548e44e024ad5f9e7060649540e", size = 369494 }, + { url = "https://files.pythonhosted.org/packages/44/47/6fdb7273cc80066d434e83cd49a3cfedb6d96ff70908480870877fb64b1e/rpds_py-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de552f4a1916e520f2703ec474d2b4d3f86d41f353e7680b597512ffe7eac5d0", size = 403639 }, + { url = "https://files.pythonhosted.org/packages/5f/4a/8c6c46afc050b5243be579be7f7b194d00b9731e83cc0845e9c70db127bb/rpds_py-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efec946f331349dfc4ae9d0e034c263ddde19414fe5128580f512619abed05f1", size = 430551 }, + { url = "https://files.pythonhosted.org/packages/d4/31/2dd40abc26fc0fc037b86006583276dc375d38ac821d4ca2394274e8045b/rpds_py-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b80b4690bbff51a034bfde9c9f6bf9357f0a8c61f548942b80f7b66356508bf5", size = 360795 }, + { url = "https://files.pythonhosted.org/packages/9d/2a/665b9ebef76f54764f1437ac03373a95a69480b7ce56c480360f88730cae/rpds_py-0.21.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:085ed25baac88953d4283e5b5bd094b155075bb40d07c29c4f073e10623f9f2e", size = 382663 }, + { url = "https://files.pythonhosted.org/packages/e8/8c/e056f0c887d29baa256f8c8d7f7079a72d80395c35c14219de45ab19dce2/rpds_py-0.21.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:daa8efac2a1273eed2354397a51216ae1e198ecbce9036fba4e7610b308b6153", size = 546477 }, + { url = "https://files.pythonhosted.org/packages/33/11/588568f6c2ed5c9d6d121c188c71ca0f76e0e369a6d66f835737189e5a75/rpds_py-0.21.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:95a5bad1ac8a5c77b4e658671642e4af3707f095d2b78a1fdd08af0dfb647624", size = 549477 }, + { url = "https://files.pythonhosted.org/packages/15/86/c1401e2f70fbdf963c2ac9157994ebeb00c101ddf87975a90507f27cb2f4/rpds_py-0.21.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3e53861b29a13d5b70116ea4230b5f0f3547b2c222c5daa090eb7c9c82d7f664", size = 527966 }, + { url = "https://files.pythonhosted.org/packages/66/f2/452420f1493112825e975c87b3b4fd8b334e0e228cdb641597a92e0c3267/rpds_py-0.21.0-cp310-none-win32.whl", hash = "sha256:ea3a6ac4d74820c98fcc9da4a57847ad2cc36475a8bd9683f32ab6d47a2bd682", size = 200978 }, + { url = "https://files.pythonhosted.org/packages/35/4c/674b2e2d75607acdbc7a162ace36dcaad225c9e760cef5defa5c0f5ddd2d/rpds_py-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:b8f107395f2f1d151181880b69a2869c69e87ec079c49c0016ab96860b6acbe5", size = 218549 }, + { url = "https://files.pythonhosted.org/packages/80/61/615929ea79f5fd0b3aca000411a33bcc1753607ccc1af0ce7b05b56e6e56/rpds_py-0.21.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5555db3e618a77034954b9dc547eae94166391a98eb867905ec8fcbce1308d95", size = 327267 }, + { url = "https://files.pythonhosted.org/packages/a5/f5/28e89dda55b731d78cbfea284dc9789d265a8a06523f0adf60e9b05cade7/rpds_py-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:97ef67d9bbc3e15584c2f3c74bcf064af36336c10d2e21a2131e123ce0f924c9", size = 318227 }, + { url = "https://files.pythonhosted.org/packages/e4/ef/eb90feb3e384543c48e2f867551075c43a429aa4c9a44e9c4bd71f4f786b/rpds_py-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ab2c2a26d2f69cdf833174f4d9d86118edc781ad9a8fa13970b527bf8236027", size = 361235 }, + { url = "https://files.pythonhosted.org/packages/ed/e7/8ea2d3d3398266c5c8ddd957d86003493b6d14f8f158b726dd09c8f43dee/rpds_py-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4e8921a259f54bfbc755c5bbd60c82bb2339ae0324163f32868f63f0ebb873d9", size = 369467 }, + { url = "https://files.pythonhosted.org/packages/51/25/a286abda9da7820c971a0b1abcf1d31fb81c44a1088a128ad26c77206622/rpds_py-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a7ff941004d74d55a47f916afc38494bd1cfd4b53c482b77c03147c91ac0ac3", size = 403482 }, + { url = "https://files.pythonhosted.org/packages/7a/1e/9c3c0463fe142456dcd9e9be0ffd15b66a77adfcdf3ecf94fa2b12d95fcb/rpds_py-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5145282a7cd2ac16ea0dc46b82167754d5e103a05614b724457cffe614f25bd8", size = 429943 }, + { url = "https://files.pythonhosted.org/packages/e1/fd/f1fd7e77fef8e5a442ce7fd80ba957730877515fe18d7195f646408a60ce/rpds_py-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de609a6f1b682f70bb7163da745ee815d8f230d97276db049ab447767466a09d", size = 360437 }, + { url = "https://files.pythonhosted.org/packages/55/83/347932db075847f4f8172c3b53ad70fe725edd9058f0d4098080ad45e3bc/rpds_py-0.21.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40c91c6e34cf016fa8e6b59d75e3dbe354830777fcfd74c58b279dceb7975b75", size = 382400 }, + { url = "https://files.pythonhosted.org/packages/22/9b/2a6eeab4e6752adba751cfee19bdf35d11e1073509f74883cbf14d42d682/rpds_py-0.21.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d2132377f9deef0c4db89e65e8bb28644ff75a18df5293e132a8d67748397b9f", size = 546560 }, + { url = "https://files.pythonhosted.org/packages/3c/19/6e51a141fe6f017d07b7d899b10a4af9e0f268deffacc1107d70fcd9257b/rpds_py-0.21.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0a9e0759e7be10109645a9fddaaad0619d58c9bf30a3f248a2ea57a7c417173a", size = 549334 }, + { url = "https://files.pythonhosted.org/packages/cf/40/4ae09a07e4531278e6bee41ef3e4f166c23468135afc2c6c98917bfc28e6/rpds_py-0.21.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e20da3957bdf7824afdd4b6eeb29510e83e026473e04952dca565170cd1ecc8", size = 527855 }, + { url = "https://files.pythonhosted.org/packages/eb/45/2135be31543677687a426117c56d8b33e8b581bc4a8b7abfa53721012162/rpds_py-0.21.0-cp311-none-win32.whl", hash = "sha256:f71009b0d5e94c0e86533c0b27ed7cacc1239cb51c178fd239c3cfefefb0400a", size = 200968 }, + { url = "https://files.pythonhosted.org/packages/68/fa/e66c3aaf13ef91c203ba47c102cd7c5dca92dde8837e5093577968d6d36d/rpds_py-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:e168afe6bf6ab7ab46c8c375606298784ecbe3ba31c0980b7dcbb9631dcba97e", size = 218502 }, + { url = "https://files.pythonhosted.org/packages/d9/5a/3aa6f5d8bacbe4f55ebf9a3c9628dad40cdb57f845124cf13c78895ea156/rpds_py-0.21.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:30b912c965b2aa76ba5168fd610087bad7fcde47f0a8367ee8f1876086ee6d1d", size = 329516 }, + { url = "https://files.pythonhosted.org/packages/df/c0/67c8c8ac850c6e3681e356a59d46315bf73bc77cb50c9a32db8ae44325b7/rpds_py-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca9989d5d9b1b300bc18e1801c67b9f6d2c66b8fd9621b36072ed1df2c977f72", size = 321245 }, + { url = "https://files.pythonhosted.org/packages/64/83/bf31341f21fa594035891ff04a497dc86b210cc1a903a9cc01b097cc614f/rpds_py-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f54e7106f0001244a5f4cf810ba8d3f9c542e2730821b16e969d6887b664266", size = 363951 }, + { url = "https://files.pythonhosted.org/packages/a2/e1/8218bba36737621262df316fbb729639af25ff611cc07bfeaadc1bfa6292/rpds_py-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fed5dfefdf384d6fe975cc026886aece4f292feaf69d0eeb716cfd3c5a4dd8be", size = 373113 }, + { url = "https://files.pythonhosted.org/packages/39/8d/4afcd688e3ad33ec273900f42e6a41e9bd9f43cfc509b6d498683d2d0338/rpds_py-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:590ef88db231c9c1eece44dcfefd7515d8bf0d986d64d0caf06a81998a9e8cab", size = 405944 }, + { url = "https://files.pythonhosted.org/packages/fa/65/3326efa721b6ecd70262aab69a26c9bc19398cdb0a2a416ef30b58326460/rpds_py-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f983e4c2f603c95dde63df633eec42955508eefd8d0f0e6d236d31a044c882d7", size = 422874 }, + { url = "https://files.pythonhosted.org/packages/31/fb/48a647d0afab74289dd21a4128002d58684c22600a22c4bfb76cb9e3bfb0/rpds_py-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b229ce052ddf1a01c67d68166c19cb004fb3612424921b81c46e7ea7ccf7c3bf", size = 364227 }, + { url = "https://files.pythonhosted.org/packages/f1/b0/1cdd179d7382dd52d65b1fd19c54d090b6bd0688dfbe259bb5ab7548c359/rpds_py-0.21.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ebf64e281a06c904a7636781d2e973d1f0926a5b8b480ac658dc0f556e7779f4", size = 386447 }, + { url = "https://files.pythonhosted.org/packages/dc/41/84ace07f31aac3a96b73a374d89106cf252f7d3274e7cae85d17a27c602d/rpds_py-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:998a8080c4495e4f72132f3d66ff91f5997d799e86cec6ee05342f8f3cda7dca", size = 549386 }, + { url = "https://files.pythonhosted.org/packages/33/ce/bf51bc5a3aa539171ea8c7737ab5ac06cef54c79b6b2a0511afc41533c89/rpds_py-0.21.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:98486337f7b4f3c324ab402e83453e25bb844f44418c066623db88e4c56b7c7b", size = 554777 }, + { url = "https://files.pythonhosted.org/packages/76/b1/950568e55a94c2979c2b61ec24e76e648a525fbc7551ccfc1f2841e39d44/rpds_py-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a78d8b634c9df7f8d175451cfeac3810a702ccb85f98ec95797fa98b942cea11", size = 530918 }, + { url = "https://files.pythonhosted.org/packages/78/84/93f00e3613426c8a7a9ca16782d2828f2ac55296dd5c6b599379d9f59ee2/rpds_py-0.21.0-cp312-none-win32.whl", hash = "sha256:a58ce66847711c4aa2ecfcfaff04cb0327f907fead8945ffc47d9407f41ff952", size = 203112 }, + { url = "https://files.pythonhosted.org/packages/e6/08/7a186847dd78881a781d2be9b42c8e49c3261c0f4a6d0289ba9a1e4cde71/rpds_py-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:e860f065cc4ea6f256d6f411aba4b1251255366e48e972f8a347cf88077b24fd", size = 220735 }, + { url = "https://files.pythonhosted.org/packages/32/3a/e69ec108eefb9b1f19ee00dde7a800b485942e62b123f01d9156a6d8569c/rpds_py-0.21.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ee4eafd77cc98d355a0d02f263efc0d3ae3ce4a7c24740010a8b4012bbb24937", size = 329206 }, + { url = "https://files.pythonhosted.org/packages/f6/c0/fa689498fa3415565306398c8d2a596207c2a13d3cc03724f32514bddfbc/rpds_py-0.21.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:688c93b77e468d72579351a84b95f976bd7b3e84aa6686be6497045ba84be560", size = 320245 }, + { url = "https://files.pythonhosted.org/packages/68/d0/466b61007005f1b2fd8501f23e4bdee4d71c7381b61358750920d1882ac9/rpds_py-0.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c38dbf31c57032667dd5a2f0568ccde66e868e8f78d5a0d27dcc56d70f3fcd3b", size = 363585 }, + { url = "https://files.pythonhosted.org/packages/1e/e2/787ea3a0f4b197893c62c254e6f14929c40bbcff86922928ac4eafaa8edf/rpds_py-0.21.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2d6129137f43f7fa02d41542ffff4871d4aefa724a5fe38e2c31a4e0fd343fb0", size = 372302 }, + { url = "https://files.pythonhosted.org/packages/b5/ef/99f2cfe6aa128c21f1b30c66ecd348cbd59792953ca35eeb6efa38b88aa1/rpds_py-0.21.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:520ed8b99b0bf86a176271f6fe23024323862ac674b1ce5b02a72bfeff3fff44", size = 405344 }, + { url = "https://files.pythonhosted.org/packages/30/3c/9d12d0b76ecfe80a7ba4770459828dda495d72b18cafd6dfd54c67b2e282/rpds_py-0.21.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaeb25ccfb9b9014a10eaf70904ebf3f79faaa8e60e99e19eef9f478651b9b74", size = 422322 }, + { url = "https://files.pythonhosted.org/packages/f9/22/387aec1cd6e124adbc3b1f40c4e4152c3963ae47d78d3ca650102ea72c4f/rpds_py-0.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af04ac89c738e0f0f1b913918024c3eab6e3ace989518ea838807177d38a2e94", size = 363739 }, + { url = "https://files.pythonhosted.org/packages/d1/3e/0ad65b776db13d13f002ab363fe3821cd1adec500d8e05e0a81047a75f9d/rpds_py-0.21.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9b76e2afd585803c53c5b29e992ecd183f68285b62fe2668383a18e74abe7a3", size = 386579 }, + { url = "https://files.pythonhosted.org/packages/4f/3b/c68c1067b24a7df47edcc0325a825908601aba399e2d372a156edc631ad1/rpds_py-0.21.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5afb5efde74c54724e1a01118c6e5c15e54e642c42a1ba588ab1f03544ac8c7a", size = 548924 }, + { url = "https://files.pythonhosted.org/packages/ab/1c/35f1a5cce4bca71c49664f00140010a96b126e5f443ebaf6db741c25b9b7/rpds_py-0.21.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:52c041802a6efa625ea18027a0723676a778869481d16803481ef6cc02ea8cb3", size = 554217 }, + { url = "https://files.pythonhosted.org/packages/c8/d0/48154c152f9adb8304b21d867d28e79be3b352633fb195c03c7107a4da9a/rpds_py-0.21.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee1e4fc267b437bb89990b2f2abf6c25765b89b72dd4a11e21934df449e0c976", size = 530540 }, + { url = "https://files.pythonhosted.org/packages/50/e8/78847f4e112e99fd5b7bc30fea3e4a44c20b811473d6755f944c5bf0aec7/rpds_py-0.21.0-cp313-none-win32.whl", hash = "sha256:0c025820b78817db6a76413fff6866790786c38f95ea3f3d3c93dbb73b632202", size = 202604 }, + { url = "https://files.pythonhosted.org/packages/60/31/083e6337775e133fb0217ed0ab0752380efa6e5112f2250d592d4135a228/rpds_py-0.21.0-cp313-none-win_amd64.whl", hash = "sha256:320c808df533695326610a1b6a0a6e98f033e49de55d7dc36a13c8a30cfa756e", size = 220448 }, + { url = "https://files.pythonhosted.org/packages/6c/e0/ab30b78170a198fe12c47c2f04c12374d3a424d506c6fe813c62434c6a5a/rpds_py-0.21.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:2c51d99c30091f72a3c5d126fad26236c3f75716b8b5e5cf8effb18889ced928", size = 327774 }, + { url = "https://files.pythonhosted.org/packages/e8/7c/8cbd90d5726894dab069bbba7813864d163cdbbfcd5bf60a12504d061788/rpds_py-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cbd7504a10b0955ea287114f003b7ad62330c9e65ba012c6223dba646f6ffd05", size = 318715 }, + { url = "https://files.pythonhosted.org/packages/95/50/7bf8688a91f09a214b847cb3a47007f87577e67c40354d1643adb7ec27e9/rpds_py-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dcc4949be728ede49e6244eabd04064336012b37f5c2200e8ec8eb2988b209c", size = 361901 }, + { url = "https://files.pythonhosted.org/packages/0a/f9/0be0f9f58d8d06b3e7c921ce5ca68774eb4d67c691ee21c60d1eeedaf6a7/rpds_py-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f414da5c51bf350e4b7960644617c130140423882305f7574b6cf65a3081cecb", size = 370187 }, + { url = "https://files.pythonhosted.org/packages/ad/b1/cccfbcd85cfa7537427384f636708867b29c3b438a5d60d579dd022374d1/rpds_py-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9afe42102b40007f588666bc7de82451e10c6788f6f70984629db193849dced1", size = 404678 }, + { url = "https://files.pythonhosted.org/packages/06/c3/7cd4daa0a7ae54ec4b5b9e93b2f0b0d9b6dd3eccb10a0408c3508066ca6d/rpds_py-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b929c2bb6e29ab31f12a1117c39f7e6d6450419ab7464a4ea9b0b417174f044", size = 431349 }, + { url = "https://files.pythonhosted.org/packages/44/ab/6fd9144e3b182b7c6ee09fd3f1718541d86c74a595f2afe0bd8bf8fb5db0/rpds_py-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8404b3717da03cbf773a1d275d01fec84ea007754ed380f63dfc24fb76ce4592", size = 361472 }, + { url = "https://files.pythonhosted.org/packages/9f/54/902896b543778b0ff6d1baf9b46290f2ca5db14593136b4602a44c0df440/rpds_py-0.21.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e12bb09678f38b7597b8346983d2323a6482dcd59e423d9448108c1be37cac9d", size = 383059 }, + { url = "https://files.pythonhosted.org/packages/2a/38/c17ae56ed63ef78fb22dbd669460b4ea5ae37ae100e16d5205e4538e0bb1/rpds_py-0.21.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:58a0e345be4b18e6b8501d3b0aa540dad90caeed814c515e5206bb2ec26736fd", size = 547211 }, + { url = "https://files.pythonhosted.org/packages/ad/0f/8688bb424ca626fe2ff8782ed40660b1881c78bceadcdd6c72971ebba4cb/rpds_py-0.21.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c3761f62fcfccf0864cc4665b6e7c3f0c626f0380b41b8bd1ce322103fa3ef87", size = 550158 }, + { url = "https://files.pythonhosted.org/packages/ee/f3/002f79553404f04d737b461e07935a8bf7303d1cee6d7934b0cec009f650/rpds_py-0.21.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c2b2f71c6ad6c2e4fc9ed9401080badd1469fa9889657ec3abea42a3d6b2e1ed", size = 528557 }, + { url = "https://files.pythonhosted.org/packages/52/26/dca37e306fa2b7329fcdd3b6028d5075c156e444f87b3229af51074ec4a9/rpds_py-0.21.0-cp39-none-win32.whl", hash = "sha256:b21747f79f360e790525e6f6438c7569ddbfb1b3197b9e65043f25c3c9b489d8", size = 200495 }, + { url = "https://files.pythonhosted.org/packages/f3/9c/f5438d22e6172bf6b38e1809e42f4ce47e9dec7f6db04635c167a674fa68/rpds_py-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:0626238a43152918f9e72ede9a3b6ccc9e299adc8ade0d67c5e142d564c9a83d", size = 218879 }, + { url = "https://files.pythonhosted.org/packages/ff/d3/ffb04445d29c03d380047c62bed01b979adb9204424e2c833817012f679e/rpds_py-0.21.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6b4ef7725386dc0762857097f6b7266a6cdd62bfd209664da6712cb26acef035", size = 328265 }, + { url = "https://files.pythonhosted.org/packages/dc/9d/894ff29a2be8f85fd1acff6e0c1b52b629aee019da8651125af9ee4894e1/rpds_py-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6bc0e697d4d79ab1aacbf20ee5f0df80359ecf55db33ff41481cf3e24f206919", size = 319238 }, + { url = "https://files.pythonhosted.org/packages/43/3d/0e5b835c22933a5bdc4413e4a91de55a8c1ef33f55eb2514a5cf24729173/rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da52d62a96e61c1c444f3998c434e8b263c384f6d68aca8274d2e08d1906325c", size = 362136 }, + { url = "https://files.pythonhosted.org/packages/67/81/c9f29da910ac19758f170633c0937fc2f0898b84389bd05bfc255c985f19/rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:98e4fe5db40db87ce1c65031463a760ec7906ab230ad2249b4572c2fc3ef1f9f", size = 370411 }, + { url = "https://files.pythonhosted.org/packages/a8/df/b989044f90b81093e454eb54799e7ee5b085ebf957a75d07d5e21eac2fb5/rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30bdc973f10d28e0337f71d202ff29345320f8bc49a31c90e6c257e1ccef4333", size = 404598 }, + { url = "https://files.pythonhosted.org/packages/8f/09/f79cd575f503932f41138c4bec4c902eb3b71ea8570436688145cc77b8ef/rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:faa5e8496c530f9c71f2b4e1c49758b06e5f4055e17144906245c99fa6d45356", size = 430224 }, + { url = "https://files.pythonhosted.org/packages/34/46/7fae3500bc188df2feee09dd72df262b97d31e8e4bd2ff4a8be4e28bf1d3/rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32eb88c30b6a4f0605508023b7141d043a79b14acb3b969aa0b4f99b25bc7d4a", size = 361660 }, + { url = "https://files.pythonhosted.org/packages/5b/1d/d850242d30e68f99ad80815576f38b378b5aba393613e3357ed5e593499e/rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a89a8ce9e4e75aeb7fa5d8ad0f3fecdee813802592f4f46a15754dcb2fd6b061", size = 384008 }, + { url = "https://files.pythonhosted.org/packages/c9/16/df4cfd1de216c25de24f8631f17380f8edee92201ec7810d1e2ba1dd9f85/rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:241e6c125568493f553c3d0fdbb38c74babf54b45cef86439d4cd97ff8feb34d", size = 546855 }, + { url = "https://files.pythonhosted.org/packages/c0/b8/03d4561095d4fbf2ab62ed651a2b5cb674fe5245b1ab2f7909e8056bd014/rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:3b766a9f57663396e4f34f5140b3595b233a7b146e94777b97a8413a1da1be18", size = 550599 }, + { url = "https://files.pythonhosted.org/packages/f4/54/d93867e2bf4acf57314798181faf3bd7d1a4f51a3aa81cb6211d56f74d3f/rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:af4a644bf890f56e41e74be7d34e9511e4954894d544ec6b8efe1e21a1a8da6c", size = 528963 }, + { url = "https://files.pythonhosted.org/packages/66/86/6f72984a284d720d84fba5ee7b0d1b0d320978b516497cbfd6e335e95a3e/rpds_py-0.21.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3e30a69a706e8ea20444b98a49f386c17b26f860aa9245329bab0851ed100677", size = 219621 }, + { url = "https://files.pythonhosted.org/packages/f5/25/999c5176513cdf7d9b86958dedddfa95790f9db643b5ddce0a889def7471/rpds_py-0.21.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:031819f906bb146561af051c7cef4ba2003d28cff07efacef59da973ff7969ba", size = 328029 }, + { url = "https://files.pythonhosted.org/packages/64/89/b468c7bd5736db4c8800c905c6d351b750dfccd9e29e685a3aa9705cfcb4/rpds_py-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b876f2bc27ab5954e2fd88890c071bd0ed18b9c50f6ec3de3c50a5ece612f7a6", size = 319144 }, + { url = "https://files.pythonhosted.org/packages/ca/19/de615c09b8ce5a1a09c4d85b64cbeb4188784b082e9e99f051ba6e9ef758/rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc5695c321e518d9f03b7ea6abb5ea3af4567766f9852ad1560f501b17588c7b", size = 362362 }, + { url = "https://files.pythonhosted.org/packages/53/ac/5ba82e51534a13580649de84304c5f75abe37ead43194b7347dd11970528/rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b4de1da871b5c0fd5537b26a6fc6814c3cc05cabe0c941db6e9044ffbb12f04a", size = 370449 }, + { url = "https://files.pythonhosted.org/packages/aa/3e/4b99613a4628abb6efd82c9d653fee53fcde12225b68f62037b09ad2a720/rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:878f6fea96621fda5303a2867887686d7a198d9e0f8a40be100a63f5d60c88c9", size = 404073 }, + { url = "https://files.pythonhosted.org/packages/ce/bc/00bda2ffe45d53c7900234508e1a9432031ff8a38df3325af98aada9c680/rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8eeec67590e94189f434c6d11c426892e396ae59e4801d17a93ac96b8c02a6c", size = 429922 }, + { url = "https://files.pythonhosted.org/packages/96/51/3942efa11d6e3fa140f1ac639d533286c94fa6e09e5a1f50a01bfbe12ca9/rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ff2eba7f6c0cb523d7e9cff0903f2fe1feff8f0b2ceb6bd71c0e20a4dcee271", size = 361252 }, + { url = "https://files.pythonhosted.org/packages/ba/dd/91a32a556908ddc6762ef5247345b30a91a7e75e3e004246e238224f3321/rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a429b99337062877d7875e4ff1a51fe788424d522bd64a8c0a20ef3021fdb6ed", size = 383920 }, + { url = "https://files.pythonhosted.org/packages/6a/64/8b0d0c0d162c06805ba0218f524bf607b1324c41e7396ee6cfed751bcfc9/rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:d167e4dbbdac48bd58893c7e446684ad5d425b407f9336e04ab52e8b9194e2ed", size = 546679 }, + { url = "https://files.pythonhosted.org/packages/e5/26/6800bf70179c5aaffae6bc0cee355744b1475f4b08cb9855a72a5b488fff/rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:4eb2de8a147ffe0626bfdc275fc6563aa7bf4b6db59cf0d44f0ccd6ca625a24e", size = 550831 }, + { url = "https://files.pythonhosted.org/packages/32/b7/75e7cea814765ecc0820aac232216b236ffad940f59bc87522effb44e144/rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e78868e98f34f34a88e23ee9ccaeeec460e4eaf6db16d51d7a9b883e5e785a5e", size = 528487 }, + { url = "https://files.pythonhosted.org/packages/54/3d/11cac262f7d5ac4f34e838628410eca4f9ce3bf02be28ccb0de90362ac11/rpds_py-0.21.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4991ca61656e3160cdaca4851151fd3f4a92e9eba5c7a530ab030d6aee96ec89", size = 219893 }, ] [[package]] @@ -2332,11 +2449,11 @@ wheels = [ [[package]] name = "setuptools" -version = "75.1.0" +version = "75.5.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/27/b8/f21073fde99492b33ca357876430822e4800cdf522011f18041351dfa74b/setuptools-75.1.0.tar.gz", hash = "sha256:d59a21b17a275fb872a9c3dae73963160ae079f1049ed956880cd7c09b120538", size = 1348057 } +sdist = { url = "https://files.pythonhosted.org/packages/c8/db/722a42ffdc226e950c4757b3da7b56ff5c090bb265dccd707f7b8a3c6fee/setuptools-75.5.0.tar.gz", hash = "sha256:5c4ccb41111392671f02bb5f8436dfc5a9a7185e80500531b133f5775c4163ef", size = 1336032 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ff/ae/f19306b5a221f6a436d8f2238d5b80925004093fa3edea59835b514d9057/setuptools-75.1.0-py3-none-any.whl", hash = "sha256:35ab7fd3bcd95e6b7fd704e4a1539513edad446c097797f2985e0e4b960772f2", size = 1248506 }, + { url = "https://files.pythonhosted.org/packages/fe/df/88ccbee85aefbca071db004fdc8f8d2507d55d5a9dc27ebb93c92edb1bd8/setuptools-75.5.0-py3-none-any.whl", hash = "sha256:87cb777c3b96d638ca02031192d40390e0ad97737e27b6b4fa831bea86f2f829", size = 1222710 }, ] [[package]] @@ -2354,6 +2471,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a0/b9/1906bfeb30f2fc13bb39bf7ddb8749784c05faadbd18a21cf141ba37bff2/setuptools_scm-8.1.0-py3-none-any.whl", hash = "sha256:897a3226a6fd4a6eb2f068745e49733261a21f70b1bb28fce0339feb978d9af3", size = 43666 }, ] +[[package]] +name = "simpleeval" +version = "1.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ff/6f/15be211749430f52f2c8f0c69158a6fc961c03aac93fa28d44d1a6f5ebc7/simpleeval-1.0.3.tar.gz", hash = "sha256:67bbf246040ac3b57c29cf048657b9cf31d4e7b9d6659684daa08ca8f1e45829", size = 24358 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/e9/e58082fbb8cecbb6fb4133033c40cc50c248b1a331582be3a0f39138d65b/simpleeval-1.0.3-py3-none-any.whl", hash = "sha256:e3bdbb8c82c26297c9a153902d0fd1858a6c3774bf53ff4f134788c3f2035c38", size = 15762 }, +] + [[package]] name = "six" version = "1.16.0" @@ -2639,23 +2765,23 @@ wheels = [ [[package]] name = "tinycss2" -version = "1.3.0" +version = "1.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "webencodings" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/44/6f/38d2335a2b70b9982d112bb177e3dbe169746423e33f718bf5e9c7b3ddd3/tinycss2-1.3.0.tar.gz", hash = "sha256:152f9acabd296a8375fbca5b84c961ff95971fcfc32e79550c8df8e29118c54d", size = 67360 } +sdist = { url = "https://files.pythonhosted.org/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085 } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/4d/0db5b8a613d2a59bbc29bc5bb44a2f8070eb9ceab11c50d477502a8a0092/tinycss2-1.3.0-py3-none-any.whl", hash = "sha256:54a8dbdffb334d536851be0226030e9505965bb2f30f21a4a82c55fb2a80fae7", size = 22532 }, + { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610 }, ] [[package]] name = "tomli" -version = "2.0.2" +version = "2.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/35/b9/de2a5c0144d7d75a57ff355c0c24054f965b2dc3036456ae03a51ea6264b/tomli-2.0.2.tar.gz", hash = "sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed", size = 16096 } +sdist = { url = "https://files.pythonhosted.org/packages/1e/e4/1b6cbcc82d8832dd0ce34767d5c560df8a3547ad8cbc427f34601415930a/tomli-2.1.0.tar.gz", hash = "sha256:3f646cae2aec94e17d04973e4249548320197cfabdf130015d023de4b74d8ab8", size = 16622 } wheels = [ - { url = "https://files.pythonhosted.org/packages/cf/db/ce8eda256fa131af12e0a76d481711abe4681b6923c27efb9a255c9e4594/tomli-2.0.2-py3-none-any.whl", hash = "sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38", size = 13237 }, + { url = "https://files.pythonhosted.org/packages/de/f7/4da0ffe1892122c9ea096c57f64c2753ae5dd3ce85488802d11b0992cc6d/tomli-2.1.0-py3-none-any.whl", hash = "sha256:a5c57c3d1c56f5ccdf89f6523458f60ef716e210fc47c4cfb188c5ba473e0391", size = 13750 }, ] [[package]] @@ -2678,14 +2804,14 @@ wheels = [ [[package]] name = "tqdm" -version = "4.66.5" +version = "4.67.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "platform_system == 'Windows'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/58/83/6ba9844a41128c62e810fddddd72473201f3eacde02046066142a2d96cc5/tqdm-4.66.5.tar.gz", hash = "sha256:e1020aef2e5096702d8a025ac7d16b1577279c9d63f8375b63083e9a5f0fcbad", size = 169504 } +sdist = { url = "https://files.pythonhosted.org/packages/e8/4f/0153c21dc5779a49a0598c445b1978126b1344bab9ee71e53e44877e14e0/tqdm-4.67.0.tar.gz", hash = "sha256:fe5a6f95e6fe0b9755e9469b77b9c3cf850048224ecaa8293d7d2d31f97d869a", size = 169739 } wheels = [ - { url = "https://files.pythonhosted.org/packages/48/5d/acf5905c36149bbaec41ccf7f2b68814647347b72075ac0b1fe3022fdc73/tqdm-4.66.5-py3-none-any.whl", hash = "sha256:90279a3770753eafc9194a0364852159802111925aa30eb3f9d85b0e805ac7cd", size = 78351 }, + { url = "https://files.pythonhosted.org/packages/2b/78/57043611a16c655c8350b4c01b8d6abfb38cc2acb475238b62c2146186d7/tqdm-4.67.0-py3-none-any.whl", hash = "sha256:0cd8af9d56911acab92182e88d763100d4788bdf421d251616040cc4d44863be", size = 78590 }, ] [[package]] @@ -2717,11 +2843,11 @@ wheels = [ [[package]] name = "urllib3" -version = "2.2.3" +version = "1.26.20" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ed/63/22ba4ebfe7430b76388e7cd448d5478814d3032121827c12a2cc287e2260/urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9", size = 300677 } +sdist = { url = "https://files.pythonhosted.org/packages/e4/e8/6ff5e6bc22095cfc59b6ea711b687e2b7ed4bdb373f7eeec370a97d7392f/urllib3-1.26.20.tar.gz", hash = "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32", size = 307380 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", size = 126338 }, + { url = "https://files.pythonhosted.org/packages/33/cf/8435d5a7159e2a9c83a95896ed596f68cf798005fe107cc655b5c5c14704/urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e", size = 144225 }, ] [[package]] @@ -2758,9 +2884,9 @@ wheels = [ [[package]] name = "zipp" -version = "3.20.2" +version = "3.21.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/54/bf/5c0000c44ebc80123ecbdddba1f5dcd94a5ada602a9c225d84b5aaa55e86/zipp-3.20.2.tar.gz", hash = "sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29", size = 24199 } +sdist = { url = "https://files.pythonhosted.org/packages/3f/50/bad581df71744867e9468ebd0bcd6505de3b275e06f202c2cb016e3ff56f/zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4", size = 24545 } wheels = [ - { url = "https://files.pythonhosted.org/packages/62/8b/5ba542fa83c90e09eac972fc9baca7a88e7e7ca4b221a89251954019308b/zipp-3.20.2-py3-none-any.whl", hash = "sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350", size = 9200 }, + { url = "https://files.pythonhosted.org/packages/b7/1a/7e4798e9339adc931158c9d69ecc34f5e6791489d469f5e50ec15e35f458/zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931", size = 9630 }, ]