diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 485e5c746..039f10b0f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -86,9 +86,6 @@ repos: args: [] additional_dependencies: - pytket_qiskit - - qiskit_optimization - - qiskit_nature - - qiskit_finance - importlib_resources - pytest - types-setuptools diff --git a/docs/Parameter.rst b/docs/Parameter.rst index 73ab5d6e4..a670f21aa 100644 --- a/docs/Parameter.rst +++ b/docs/Parameter.rst @@ -48,26 +48,27 @@ Native Gate-Set Support So far, MQT Bench supports the following native gate-sets: +.. jupyter-execute:: + :hide-code: + + from mqt.bench.devices import get_available_native_gatesets + + for num, gateset in enumerate(get_available_native_gatesets()): + print(str(num + 1) + ":", gateset.gateset_name, ": ", gateset.gates) -#. IBMQ gate-set: *['rz', 'sx', 'x', 'cx', 'measure']* -#. Rigetti gate-set: *['rx', 'rz', 'cz', 'measure']* -#. IonQ gate-set: *['rxx', 'rz', 'ry', 'rx', 'measure']* -#. OQC gate-set: *['rz', 'sx', 'x', 'ecr', 'measure']* -#. Quantinuum gate-set: *['rzz', 'rz', 'ry', 'rx', 'measure']* Device Support -------------- So far, MQT Bench supports the following devices: +.. jupyter-execute:: + :hide-code: + + from mqt.bench.devices import get_available_devices -#. IBMQ Washington with 127 qubits -#. IBMQ Montreal with 27 qubits -#. Rigetti Aspen-M3 with 79 qubits -#. IonQ Harmony with 11 qubits -#. IonQ Aria 1 with 25 qubits -#. OQC Lucy with 8 qubits -#. Quantinuum H2 with 32 qubits + for num, device in enumerate(get_available_devices()): + print(str(num + 1) + ":", device.name, "with", device.num_qubits, "qubits") Examples how to use the ``get_benchmark`` method for all four abstraction levels can be found on the :doc:`Quickstart jupyter notebook `. diff --git a/docs/Quickstart.ipynb b/docs/Quickstart.ipynb index e7e89ed3a..75685ba14 100644 --- a/docs/Quickstart.ipynb +++ b/docs/Quickstart.ipynb @@ -15,7 +15,7 @@ "metadata": {}, "outputs": [], "source": [ - "from mqt.bench import CompilerSettings, QiskitSettings, TKETSettings, get_benchmark" + "from mqt.bench import CompilerSettings, QiskitSettings, get_benchmark" ] }, { @@ -78,7 +78,7 @@ " circuit_size=5,\n", " compiler=\"qiskit\",\n", " compiler_settings=compiler_settings,\n", - " provider_name=\"ionq\",\n", + " gateset=\"ionq\", # only used a custom gateset for this example, e.g., gateset=(\"custom_gateset\", [\"cx\", \"u\"])\n", ")\n", "qc_native_gates_level.draw(output=\"mpl\")" ] @@ -100,13 +100,11 @@ "source": [ "from pytket.extensions.qiskit import tk_to_qiskit\n", "\n", - "compiler_settings = CompilerSettings(tket=TKETSettings(placement=\"lineplacement\"))\n", "qc_mapped_level = get_benchmark(\n", " benchmark_name=\"dj\",\n", " level=\"mapped\",\n", " circuit_size=5,\n", " compiler=\"tket\",\n", - " compiler_settings=compiler_settings,\n", " device_name=\"ionq_harmony\",\n", ")\n", "tk_to_qiskit(qc_mapped_level).draw(output=\"mpl\")" diff --git a/docs/Usage.rst b/docs/Usage.rst index e8884bbf6..8d5521cc3 100644 --- a/docs/Usage.rst +++ b/docs/Usage.rst @@ -37,26 +37,6 @@ For example, in order to obtain the *5*\ -qubit Deutsch-Josza benchmark on algor Examples can be found in the `docs/Quickstart.ipynb `_ jupyter notebook. -Locally hosting the MQT Bench Viewer ------------------------------------- - -Additionally, this python package includes the same webserver used for the hosting of the -`MQT Bench webpage `_. - -After the ``mqt.bench`` Python package is installed via - -.. code-block:: console - - (venv) $ pip install mqt.bench - -the MQT Bench Viewer can be started from the terminal via - -.. code-block:: console - - (venv) $ mqt.bench - -This first searches for the most recent version of the benchmark files on GitHub and offers to download them. -Afterwards, the webserver is started locally. Usage directly via this repository ---------------------------------- diff --git a/docs/conf.py b/docs/conf.py index d940e00c9..d4d871f1f 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -58,6 +58,7 @@ "nbsphinx", "sphinxext.opengraph", "sphinx_autodoc_typehints", + "jupyter_sphinx", ] pygments_style = "colorful" @@ -73,7 +74,7 @@ "mqt": ("https://mqt.readthedocs.io/en/latest/", None), } -nbsphinx_execute = "auto" +nbsphinx_execute = "always" highlight_language = "python3" nbsphinx_execute_arguments = [ "--InlineBackend.figure_formats={'svg', 'pdf'}", diff --git a/evaluation/.python-version b/evaluation/.python-version deleted file mode 100644 index e4fba2183..000000000 --- a/evaluation/.python-version +++ /dev/null @@ -1 +0,0 @@ -3.12 diff --git a/evaluation/pyproject.toml b/evaluation/pyproject.toml deleted file mode 100644 index 1450c7d30..000000000 --- a/evaluation/pyproject.toml +++ /dev/null @@ -1,37 +0,0 @@ -[build-system] -requires = ["setuptools>=66.1"] -build-backend = "setuptools.build_meta" - -[project] -name = "mqt-bench-evaluation" -version = "1.0.0" -description = "Evaluation Functionality for MQT Bench" -requires-python = ">=3.10" -dependencies = [ - "matplotlib>=3.9.2", - "mqt-bench", - "pandas>=2.2.3", - "seaborn>=0.13.2", -] - -[tool.pytest.ini_options] -minversion = "7.2" -testpaths = ["tests"] -addopts = ["-ra", "--strict-markers", "--strict-config", "--showlocals"] -log_cli_level = "INFO" -xfail_strict = true -filterwarnings = [ - "error", - 'ignore::DeprecationWarning:.*(docplex).*', - 'ignore::SyntaxWarning:.*(docplex).*', - 'ignore:.*qiskit.providers.models is deprecated since Qiskit 1.2*:DeprecationWarning:', - 'ignore:.*Treating CircuitInstruction as an iterable is deprecated legacy behavior since Qiskit 1.2*:DeprecationWarning:pytket.*', - 'ignore:.*qiskit.providers.models.* is deprecated since qiskit 1.2*:DeprecationWarning:qiskit.*', - 'ignore:.*qiskit.primitives.* is deprecated as of qiskit 1.2*:DeprecationWarning:qiskit.*', - 'ignore:.*The class ``qiskit.qobj.pulse_qobj.Pulse.*`` is deprecated as of qiskit 1.2.*:DeprecationWarning:qiskit.*', - 'ignore:.*The class ``qiskit.primitives.sampler.Sampler`` is deprecated as of qiskit 1.2*:DeprecationWarning:mqt.*', - 'ignore:.*The class ``qiskit.primitives.estimator.Estimator`` is deprecated as of qiskit 1.2*:DeprecationWarning:mqt.*', -] - -[tool.uv.sources] -mqt-bench = { path = "../" } diff --git a/evaluation/src/mqt/bench/evaluation/__init__.py b/evaluation/src/mqt/bench/evaluation/__init__.py deleted file mode 100644 index 894575f23..000000000 --- a/evaluation/src/mqt/bench/evaluation/__init__.py +++ /dev/null @@ -1,23 +0,0 @@ -"""MQT Bench. - -This file is part of the MQT Bench Benchmark library released under the MIT license. -See README.md or go to https://github.com/cda-tum/mqt-bench for more information. -""" - -from __future__ import annotations - -from mqt.bench.evaluation.evaluation import ( - EvaluationResult, - count_occurrences, - count_qubit_numbers_per_compiler, - create_statistics, - evaluate_qasm_file, -) - -__all__ = [ - "EvaluationResult", - "count_occurrences", - "count_qubit_numbers_per_compiler", - "create_statistics", - "evaluate_qasm_file", -] diff --git a/evaluation/src/mqt/bench/evaluation/evaluation.py b/evaluation/src/mqt/bench/evaluation/evaluation.py deleted file mode 100644 index 8746748fc..000000000 --- a/evaluation/src/mqt/bench/evaluation/evaluation.py +++ /dev/null @@ -1,73 +0,0 @@ -"""Evaluation of qasm files.""" - -from __future__ import annotations - -import pickle -from dataclasses import dataclass -from pathlib import Path - -from joblib import Parallel, delayed -from qiskit import QuantumCircuit - -from mqt.bench import utils - - -def create_statistics(source_directory: Path | None = None, target_directory: Path | None = None) -> None: - """Create statistics for the qasm files in the source_directory and save them in the target_directory.""" - if source_directory is None: - source_directory = Path(utils.get_default_qasm_output_path()) - if target_directory is None: - target_directory = Path(utils.get_default_evaluation_output_path()) - source_circuits_list = [file for file in source_directory.iterdir() if file.suffix == ".qasm"] - res_dicts = Parallel(n_jobs=-1, verbose=100)( - delayed(evaluate_qasm_file)(str(filename)) for filename in source_circuits_list - ) - with (target_directory / "evaluation_data.pkl").open("wb") as f: - pickle.dump(res_dicts, f) - - -@dataclass -class EvaluationResult: - """Data class for the evaluation results of a qasm file.""" - - filename: str - num_qubits: int - depth: int - num_gates: int - num_multiple_qubit_gates: int - supermarq_features: utils.SupermarqFeatures - - -def evaluate_qasm_file(filename: str) -> EvaluationResult | None: - """Evaluate a qasm file and return the results.""" - try: - qc = QuantumCircuit.from_qasm_file(filename) - except Exception as e: - print(f"Failed for {filename}: {e}") - return EvaluationResult( - filename=filename, - num_qubits=-1, - depth=-1, - num_gates=-1, - num_multiple_qubit_gates=-1, - supermarq_features=utils.SupermarqFeatures(-1, -1, -1, -1, -1), - ) - - return EvaluationResult( - filename=filename, - num_qubits=int(str(filename).split("_")[-1].split(".")[0]), - depth=qc.depth(), - num_gates=sum(qc.count_ops().values()), - num_multiple_qubit_gates=qc.num_nonlocal_gates(), - supermarq_features=utils.calc_supermarq_features(qc), - ) - - -def count_occurrences(filenames: list[str], search_str: str) -> int: - """Count the occurrences of a search string in a list of filenames.""" - return sum(search_str in filename for filename in filenames) - - -def count_qubit_numbers_per_compiler(filenames: list[str], compiler: str) -> list[int]: - """Count the number of qubits per compiler for a list of filenames.""" - return [int(str(filename).split("_")[-1].split(".")[0]) for filename in filenames if compiler in filename] diff --git a/evaluation/src/mqt/bench/evaluation/evaluation_data.pkl b/evaluation/src/mqt/bench/evaluation/evaluation_data.pkl deleted file mode 100644 index 8a81a91f4..000000000 Binary files a/evaluation/src/mqt/bench/evaluation/evaluation_data.pkl and /dev/null differ diff --git a/evaluation/src/mqt/bench/evaluation/evaluation_visualization.ipynb b/evaluation/src/mqt/bench/evaluation/evaluation_visualization.ipynb deleted file mode 100644 index 5216f62e0..000000000 --- a/evaluation/src/mqt/bench/evaluation/evaluation_visualization.ipynb +++ /dev/null @@ -1,272 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "2d493d7f", - "metadata": {}, - "outputs": [], - "source": [ - "import pickle\n", - "from pathlib import Path\n", - "\n", - "import matplotlib as mpl\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "import seaborn as sns\n", - "\n", - "from mqt.bench.evaluation import evaluation\n", - "\n", - "font = {\"size\": 16}\n", - "mpl.rc(\"font\", **font)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "03f145b0", - "metadata": {}, - "outputs": [], - "source": [ - "evaluation.create_statistics()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "062813f4", - "metadata": {}, - "outputs": [], - "source": [ - "with Path(\"evaluation_data.pkl\").open(\"rb\") as f:\n", - " eval_data = pickle.load(f)\n", - "df = pd.DataFrame(eval_data)\n", - "df.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4b5d8948", - "metadata": {}, - "outputs": [], - "source": [ - "df = df.join(pd.json_normalize(df[\"supermarq_features\"])).drop(\"supermarq_features\", axis=\"columns\")\n", - "df.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "46bcd90a", - "metadata": {}, - "outputs": [], - "source": [ - "benchmarks = df[\"filename\"].values\n", - "num_qubits = df[\"num_qubits\"].values\n", - "depth = df[\"depth\"].values\n", - "num_gates = df[\"num_gates\"].values\n", - "num_multiple_qubit_gates = df[\"num_multiple_qubit_gates\"].values\n", - "program_communication = df[\"program_communication\"].values\n", - "critical_depth = df[\"critical_depth\"].values\n", - "entanglement_ratio = df[\"entanglement_ratio\"].values\n", - "parallelism = df[\"parallelism\"].values\n", - "liveness = df[\"liveness\"].values\n", - "perc_multi = num_multiple_qubit_gates / num_gates" - ] - }, - { - "cell_type": "markdown", - "id": "0cde4a8b", - "metadata": {}, - "source": [ - "# Device Distribution" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "588b8449", - "metadata": {}, - "outputs": [], - "source": [ - "overall_count_mapped = evaluation.count_occurrences(benchmarks, \"mapped\")\n", - "mapped_ibm_montreal_count = evaluation.count_occurrences(benchmarks, \"mapped_ibm_montreal\")\n", - "mapped_ibm_washington_count = evaluation.count_occurrences(benchmarks, \"mapped_ibm_washington\")\n", - "mapped_oqc_lucy_count = evaluation.count_occurrences(benchmarks, \"mapped_oqc_lucy\")\n", - "mapped_rigetti_count = evaluation.count_occurrences(benchmarks, \"mapped_rigetti\")\n", - "mapped_quantinuum_count = evaluation.count_occurrences(benchmarks, \"mapped_quantinuum\")\n", - "mapped_ionq_aria1_count = evaluation.count_occurrences(benchmarks, \"mapped_ionq_aria1\")\n", - "mapped_ionq_harmony_count = evaluation.count_occurrences(benchmarks, \"mapped_ionq_harmony\")\n", - "\n", - "qiskit_qubit_numbers = evaluation.count_qubit_numbers_per_compiler(benchmarks, \"qiskit\")\n", - "tket_qubit_numbers = evaluation.count_qubit_numbers_per_compiler(benchmarks, \"tket\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3bfc2767", - "metadata": {}, - "outputs": [], - "source": [ - "perc_montreal = mapped_ibm_montreal_count / overall_count_mapped\n", - "perc_washington = mapped_ibm_washington_count / overall_count_mapped\n", - "perc_oqc = mapped_oqc_lucy_count / overall_count_mapped\n", - "perc_rigetti = mapped_rigetti_count / overall_count_mapped\n", - "perc_quantinuum = mapped_quantinuum_count / overall_count_mapped\n", - "perc_ionq_aria1 = mapped_ionq_aria1_count / overall_count_mapped\n", - "perc_ionq_harmony = mapped_ionq_harmony_count / overall_count_mapped" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "089acc25", - "metadata": {}, - "outputs": [], - "source": [ - "font = {\"size\": 12}\n", - "mpl.rc(\"font\", **font)\n", - "data = [\n", - " perc_washington,\n", - " perc_rigetti,\n", - " perc_quantinuum,\n", - " perc_montreal,\n", - " perc_ionq_aria1,\n", - " perc_ionq_harmony,\n", - " perc_oqc,\n", - "]\n", - "colors = [\"#B7E6A5\", \"#7CCBA2\", \"#46AEA0\", \"#089099\", \"#02818B\", \"#026688\", \"#025582\"]\n", - "labels = [\n", - " \"IBMQ Washington (127)\",\n", - " \"Rigetti Aspen M3 (79)\",\n", - " \"Quantinuum H2 (32)\",\n", - " \"IBMQ Montreal (27)\",\n", - " \"IonQ Aria 1 (25)\",\n", - " \"IonQ Harmony (11)\",\n", - " \"OQC Lucy (8)\",\n", - "]\n", - "pies = plt.pie(data, labels=labels, autopct=\"%1.1f%%\", colors=colors)\n", - "for pie in pies[0]:\n", - " pie.set_alpha(0.7)\n", - "plt.savefig(\"results/pie.pdf\", format=\"pdf\", bbox_inches=\"tight\")\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "1fc0ca44", - "metadata": {}, - "source": [ - "# Num Qubits" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fd1cc85d", - "metadata": {}, - "outputs": [], - "source": [ - "font = {\"size\": 16}\n", - "mpl.rc(\"font\", **font)\n", - "qiskit_qubit_numbers = evaluation.count_qubit_numbers_per_compiler(benchmarks, \"qiskit\")\n", - "tket_qubit_numbers = evaluation.count_qubit_numbers_per_compiler(benchmarks, \"tket\")\n", - "\n", - "# colors = ['#7CCBA2', '#46AEA0', '#089099', \"#00718B\", \"#045275\", \"#003147\"]\n", - "# colors = ['#089099', '#003147']\n", - "plt.figure(figsize=(8, 5))\n", - "plot = sns.histplot(\n", - " data=[tket_qubit_numbers, qiskit_qubit_numbers],\n", - " bins=129,\n", - " stat=\"density\",\n", - " alpha=0.3,\n", - " kde=True,\n", - " edgecolor=\"white\",\n", - " linewidth=0.5,\n", - " palette=sns.color_palette(\"viridis\", 2)[::-1],\n", - ")\n", - "plt.legend([\"Qiskit\", \"TKET\"])\n", - "plt.ylabel(\"Relative Frequency\")\n", - "plt.xlabel(\"Number of Qubits\")\n", - "plt.savefig(\"results/qubit_dist.pdf\", format=\"pdf\", bbox_inches=\"tight\")\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "ed8581be", - "metadata": {}, - "source": [ - "# Further Characteristics" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2f71d39c", - "metadata": {}, - "outputs": [], - "source": [ - "datasets = [\n", - " program_communication.astype(float),\n", - " critical_depth.astype(float),\n", - " entanglement_ratio.astype(float),\n", - " liveness.astype(float),\n", - " parallelism.astype(float),\n", - " perc_multi.astype(float),\n", - "]\n", - "labels = [\n", - " \"Program Communication\",\n", - " \"Critical Depth\",\n", - " \"Entanglement Ratio\",\n", - " \"Liveness\",\n", - " \"Parallelism\",\n", - " \"Percentage \\nMulti-Qubit Gates\",\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "54ac24f3", - "metadata": {}, - "outputs": [], - "source": [ - "fig = plt.figure(figsize=(19, 4))\n", - "ax = fig.add_subplot(111)\n", - "colors = [\"#7CCBA2\", \"#46AEA0\", \"#089099\", \"#00718B\", \"#045275\", \"#003147\"]\n", - "pos = range(len(datasets))\n", - "plots = plt.violinplot(datasets, pos)\n", - "for pc, color in zip(plots[\"bodies\"], colors, strict=False):\n", - " pc.set_facecolor(color)\n", - "\n", - "ax.set_xticks(pos)\n", - "plt.xticks(rotation=0)\n", - "ax.set_xticklabels(labels)\n", - "plt.savefig(\"results/violins.pdf\", format=\"pdf\", bbox_inches=\"tight\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "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": 5 -} diff --git a/evaluation/src/mqt/bench/evaluation/py.typed b/evaluation/src/mqt/bench/evaluation/py.typed deleted file mode 100644 index 5f3ea3d91..000000000 --- a/evaluation/src/mqt/bench/evaluation/py.typed +++ /dev/null @@ -1,2 +0,0 @@ -# Instruct type checkers to look for inline type annotations in this package. -# See PEP 561. diff --git a/evaluation/src/mqt/bench/evaluation/results/pie.pdf b/evaluation/src/mqt/bench/evaluation/results/pie.pdf deleted file mode 100644 index 1e29c5cef..000000000 Binary files a/evaluation/src/mqt/bench/evaluation/results/pie.pdf and /dev/null differ diff --git a/evaluation/src/mqt/bench/evaluation/results/qubit_dist.pdf b/evaluation/src/mqt/bench/evaluation/results/qubit_dist.pdf deleted file mode 100644 index e00ff9eba..000000000 Binary files a/evaluation/src/mqt/bench/evaluation/results/qubit_dist.pdf and /dev/null differ diff --git a/evaluation/src/mqt/bench/evaluation/results/violins.pdf b/evaluation/src/mqt/bench/evaluation/results/violins.pdf deleted file mode 100644 index 0c0a1bbd0..000000000 Binary files a/evaluation/src/mqt/bench/evaluation/results/violins.pdf and /dev/null differ diff --git a/evaluation/tests/test_evaluation.py b/evaluation/tests/test_evaluation.py deleted file mode 100644 index d79641f1d..000000000 --- a/evaluation/tests/test_evaluation.py +++ /dev/null @@ -1,143 +0,0 @@ -"""Tests for the benchmark evaluation.""" - -from __future__ import annotations - -import json -import pickle -from pathlib import Path - -import pytest -from qiskit.qasm2 import dump - -from mqt.bench import utils -from mqt.bench.benchmark_generator import BenchmarkGenerator, get_benchmark -from mqt.bench.evaluation import ( - EvaluationResult, - count_occurrences, - count_qubit_numbers_per_compiler, - create_statistics, - evaluate_qasm_file, -) - - -@pytest.fixture -def output_path() -> str: - """Fixture to create the output path for the tests.""" - output_path = Path("./tests/test_output/") - output_path.mkdir(parents=True, exist_ok=True) - return str(output_path) - - -@pytest.fixture -def sample_filenames() -> list[str]: - """Fixture to return a list of sample filenames.""" - return [ - "ae_indep_qiskit_10.qasm", - "ghz_nativegates_rigetti_qiskit_opt3_54.qasm", - "ae_indep_tket_93.qasm", - "wstate_nativegates_rigetti_qiskit_opt0_79.qasm", - "ae_mapped_ibm_montreal_qiskit_opt1_9.qasm", - "ae_mapped_ibm_washington_qiskit_opt0_38.qasm", - "ae_mapped_oqc_lucy_qiskit_opt0_5.qasm", - "ae_mapped_ibm_washington_qiskit_opt2_88.qasm", - "qnn_mapped_ionq_harmony_qiskit_opt3_3.qasm", - "qnn_mapped_oqc_lucy_tket_line_2.qasm", - "qaoa_mapped_quantinuum_h2_tket_graph_2.qasm", - "dj_mapped_quantinuum_h2_qiskit_opt3_23.qasm", - ] - - -def test_get_default_evaluation_output_path() -> None: - """Test the default evaluation output path.""" - path = utils.get_default_evaluation_output_path() - assert Path(path).exists() - - -def test_create_benchmarks_from_config_and_evaluation(output_path: str) -> None: - """Test the creation of benchmarks from a configuration file and the evaluation of the created benchmarks.""" - config = { - "timeout": 1, - "benchmarks": [ - { - "name": "ghz", - "include": True, - "min_qubits": 20, - "max_qubits": 21, - "stepsize": 1, - "precheck_possible": True, - }, - { - "name": "graphstate", - "include": True, - "min_qubits": 20, - "max_qubits": 21, - "stepsize": 1, - "precheck_possible": True, - }, - ], - } - file = Path("test_config.json") - with file.open("w") as f: - json.dump(config, f) - - generator = BenchmarkGenerator(cfg_path=str(file), qasm_output_path=output_path) - generator.create_benchmarks_from_config(num_jobs=-1) - file.unlink() - - create_statistics(source_directory=Path(output_path), target_directory=Path(output_path)) - - with (Path(output_path) / "evaluation_data.pkl").open("rb") as f: - res_dicts = pickle.load(f) - assert len(res_dicts) > 0 - - -def test_evaluate_qasm_file() -> None: - """Test the evaluation of a qasm file.""" - qc = get_benchmark("dj", 1, 5) - filename = "test_5.qasm" - with Path(filename).open("w", encoding="locale") as f: - dump(qc, f) - path = Path(filename) - res = evaluate_qasm_file(filename) - assert type(res) is EvaluationResult - path.unlink() - - res = evaluate_qasm_file("invalid_path.qasm") - assert type(res) is EvaluationResult - assert res.num_qubits == -1 - assert res.depth == -1 - assert res.num_gates == -1 - assert res.num_multiple_qubit_gates == -1 - assert res.supermarq_features == utils.SupermarqFeatures(-1.0, -1.0, -1.0, -1.0, -1.0) - - -@pytest.mark.parametrize( - ("search_str", "expected_val"), - [ - ("qiskit", 9), - ("tket", 3), - ("nativegates", 2), - ("indep", 2), - ("mapped", 8), - ("mapped_ibm_washington", 2), - ("mapped_ibm_montreal", 1), - ("mapped_oqc_lucy", 2), - ("mapped_rigetti_aspen_m3", 0), - ("mapped_ionq_harmony", 1), - ], -) -def test_count_occurrences(search_str: str, expected_val: int, sample_filenames: list[str]) -> None: - """Test the count_occurrences function.""" - assert count_occurrences(sample_filenames, search_str) == expected_val - - -@pytest.mark.parametrize( - ("compiler", "expected_val"), - [ - ("qiskit", [10, 54, 79, 9, 38, 5, 88, 3, 23]), - ("tket", [93, 2, 2]), - ], -) -def test_count_qubit_numbers_per_compiler(compiler: str, expected_val: list[int], sample_filenames: list[str]) -> None: - """Test the count_qubit_numbers_per_compiler function.""" - assert count_qubit_numbers_per_compiler(sample_filenames, compiler) == expected_val diff --git a/evaluation/uv.lock b/evaluation/uv.lock deleted file mode 100644 index cc274582d..000000000 --- a/evaluation/uv.lock +++ /dev/null @@ -1,1786 +0,0 @@ -version = 1 -requires-python = ">=3.10" -resolution-markers = [ - "python_full_version < '3.11'", - "python_full_version == '3.11.*'", - "python_full_version >= '3.12'", -] - -[[package]] -name = "annotated-types" -version = "0.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 }, -] - -[[package]] -name = "beautifulsoup4" -version = "4.12.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "soupsieve" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b3/ca/824b1195773ce6166d388573fc106ce56d4a805bd7427b624e063596ec58/beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051", size = 581181 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b1/fe/e8c672695b37eecc5cbf43e1d0638d88d66ba3a44c4d321c796f4e59167f/beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed", size = 147925 }, -] - -[[package]] -name = "certifi" -version = "2024.8.30" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b0/ee/9b19140fe824b367c04c5e1b369942dd754c4c5462d5674002f75c4dedc1/certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9", size = 168507 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8", size = 167321 }, -] - -[[package]] -name = "cffi" -version = "1.17.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pycparser" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/90/07/f44ca684db4e4f08a3fdc6eeb9a0d15dc6883efc7b8c90357fdbf74e186c/cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14", size = 182191 }, - { url = "https://files.pythonhosted.org/packages/08/fd/cc2fedbd887223f9f5d170c96e57cbf655df9831a6546c1727ae13fa977a/cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67", size = 178592 }, - { url = "https://files.pythonhosted.org/packages/de/cc/4635c320081c78d6ffc2cab0a76025b691a91204f4aa317d568ff9280a2d/cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382", size = 426024 }, - { url = "https://files.pythonhosted.org/packages/b6/7b/3b2b250f3aab91abe5f8a51ada1b717935fdaec53f790ad4100fe2ec64d1/cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702", size = 448188 }, - { url = "https://files.pythonhosted.org/packages/d3/48/1b9283ebbf0ec065148d8de05d647a986c5f22586b18120020452fff8f5d/cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3", size = 455571 }, - { url = "https://files.pythonhosted.org/packages/40/87/3b8452525437b40f39ca7ff70276679772ee7e8b394934ff60e63b7b090c/cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6", size = 436687 }, - { url = "https://files.pythonhosted.org/packages/8d/fb/4da72871d177d63649ac449aec2e8a29efe0274035880c7af59101ca2232/cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17", size = 446211 }, - { url = "https://files.pythonhosted.org/packages/ab/a0/62f00bcb411332106c02b663b26f3545a9ef136f80d5df746c05878f8c4b/cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8", size = 461325 }, - { url = "https://files.pythonhosted.org/packages/36/83/76127035ed2e7e27b0787604d99da630ac3123bfb02d8e80c633f218a11d/cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e", size = 438784 }, - { url = "https://files.pythonhosted.org/packages/21/81/a6cd025db2f08ac88b901b745c163d884641909641f9b826e8cb87645942/cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be", size = 461564 }, - { url = "https://files.pythonhosted.org/packages/f8/fe/4d41c2f200c4a457933dbd98d3cf4e911870877bd94d9656cc0fcb390681/cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c", size = 171804 }, - { url = "https://files.pythonhosted.org/packages/d1/b6/0b0f5ab93b0df4acc49cae758c81fe4e5ef26c3ae2e10cc69249dfd8b3ab/cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15", size = 181299 }, - { url = "https://files.pythonhosted.org/packages/6b/f4/927e3a8899e52a27fa57a48607ff7dc91a9ebe97399b357b85a0c7892e00/cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", size = 182264 }, - { url = "https://files.pythonhosted.org/packages/6c/f5/6c3a8efe5f503175aaddcbea6ad0d2c96dad6f5abb205750d1b3df44ef29/cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", size = 178651 }, - { url = "https://files.pythonhosted.org/packages/94/dd/a3f0118e688d1b1a57553da23b16bdade96d2f9bcda4d32e7d2838047ff7/cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", size = 445259 }, - { url = "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", size = 469200 }, - { url = "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", size = 477235 }, - { url = "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", size = 459721 }, - { url = "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", size = 467242 }, - { url = "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", size = 477999 }, - { url = "https://files.pythonhosted.org/packages/44/74/f2a2460684a1a2d00ca799ad880d54652841a780c4c97b87754f660c7603/cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", size = 454242 }, - { url = "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", size = 478604 }, - { url = "https://files.pythonhosted.org/packages/34/33/e1b8a1ba29025adbdcda5fb3a36f94c03d771c1b7b12f726ff7fef2ebe36/cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", size = 171727 }, - { url = "https://files.pythonhosted.org/packages/3d/97/50228be003bb2802627d28ec0627837ac0bf35c90cf769812056f235b2d1/cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", size = 181400 }, - { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178 }, - { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840 }, - { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803 }, - { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850 }, - { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729 }, - { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256 }, - { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424 }, - { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568 }, - { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736 }, - { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448 }, - { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976 }, - { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989 }, - { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802 }, - { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792 }, - { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893 }, - { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810 }, - { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200 }, - { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447 }, - { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358 }, - { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469 }, - { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475 }, - { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 }, -] - -[[package]] -name = "charset-normalizer" -version = "3.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f2/4f/e1808dc01273379acc506d18f1504eb2d299bd4131743b9fc54d7be4df1e/charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", size = 106620 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/69/8b/825cc84cf13a28bfbcba7c416ec22bf85a9584971be15b21dd8300c65b7f/charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6", size = 196363 }, - { url = "https://files.pythonhosted.org/packages/23/81/d7eef6a99e42c77f444fdd7bc894b0ceca6c3a95c51239e74a722039521c/charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b", size = 125639 }, - { url = "https://files.pythonhosted.org/packages/21/67/b4564d81f48042f520c948abac7079356e94b30cb8ffb22e747532cf469d/charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99", size = 120451 }, - { url = "https://files.pythonhosted.org/packages/c2/72/12a7f0943dd71fb5b4e7b55c41327ac0a1663046a868ee4d0d8e9c369b85/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca", size = 140041 }, - { url = "https://files.pythonhosted.org/packages/67/56/fa28c2c3e31217c4c52158537a2cf5d98a6c1e89d31faf476c89391cd16b/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d", size = 150333 }, - { url = "https://files.pythonhosted.org/packages/f9/d2/466a9be1f32d89eb1554cf84073a5ed9262047acee1ab39cbaefc19635d2/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7", size = 142921 }, - { url = "https://files.pythonhosted.org/packages/f8/01/344ec40cf5d85c1da3c1f57566c59e0c9b56bcc5566c08804a95a6cc8257/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3", size = 144785 }, - { url = "https://files.pythonhosted.org/packages/73/8b/2102692cb6d7e9f03b9a33a710e0164cadfce312872e3efc7cfe22ed26b4/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907", size = 146631 }, - { url = "https://files.pythonhosted.org/packages/d8/96/cc2c1b5d994119ce9f088a9a0c3ebd489d360a2eb058e2c8049f27092847/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b", size = 140867 }, - { url = "https://files.pythonhosted.org/packages/c9/27/cde291783715b8ec30a61c810d0120411844bc4c23b50189b81188b273db/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912", size = 149273 }, - { url = "https://files.pythonhosted.org/packages/3a/a4/8633b0fc1a2d1834d5393dafecce4a1cc56727bfd82b4dc18fc92f0d3cc3/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95", size = 152437 }, - { url = "https://files.pythonhosted.org/packages/64/ea/69af161062166b5975ccbb0961fd2384853190c70786f288684490913bf5/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e", size = 150087 }, - { url = "https://files.pythonhosted.org/packages/3b/fd/e60a9d9fd967f4ad5a92810138192f825d77b4fa2a557990fd575a47695b/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe", size = 145142 }, - { url = "https://files.pythonhosted.org/packages/6d/02/8cb0988a1e49ac9ce2eed1e07b77ff118f2923e9ebd0ede41ba85f2dcb04/charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc", size = 94701 }, - { url = "https://files.pythonhosted.org/packages/d6/20/f1d4670a8a723c46be695dff449d86d6092916f9e99c53051954ee33a1bc/charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749", size = 102191 }, - { url = "https://files.pythonhosted.org/packages/9c/61/73589dcc7a719582bf56aae309b6103d2762b526bffe189d635a7fcfd998/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c", size = 193339 }, - { url = "https://files.pythonhosted.org/packages/77/d5/8c982d58144de49f59571f940e329ad6e8615e1e82ef84584c5eeb5e1d72/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944", size = 124366 }, - { url = "https://files.pythonhosted.org/packages/bf/19/411a64f01ee971bed3231111b69eb56f9331a769072de479eae7de52296d/charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee", size = 118874 }, - { url = "https://files.pythonhosted.org/packages/4c/92/97509850f0d00e9f14a46bc751daabd0ad7765cff29cdfb66c68b6dad57f/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c", size = 138243 }, - { url = "https://files.pythonhosted.org/packages/e2/29/d227805bff72ed6d6cb1ce08eec707f7cfbd9868044893617eb331f16295/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6", size = 148676 }, - { url = "https://files.pythonhosted.org/packages/13/bc/87c2c9f2c144bedfa62f894c3007cd4530ba4b5351acb10dc786428a50f0/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea", size = 141289 }, - { url = "https://files.pythonhosted.org/packages/eb/5b/6f10bad0f6461fa272bfbbdf5d0023b5fb9bc6217c92bf068fa5a99820f5/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc", size = 142585 }, - { url = "https://files.pythonhosted.org/packages/3b/a0/a68980ab8a1f45a36d9745d35049c1af57d27255eff8c907e3add84cf68f/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5", size = 144408 }, - { url = "https://files.pythonhosted.org/packages/d7/a1/493919799446464ed0299c8eef3c3fad0daf1c3cd48bff9263c731b0d9e2/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594", size = 139076 }, - { url = "https://files.pythonhosted.org/packages/fb/9d/9c13753a5a6e0db4a0a6edb1cef7aee39859177b64e1a1e748a6e3ba62c2/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c", size = 146874 }, - { url = "https://files.pythonhosted.org/packages/75/d2/0ab54463d3410709c09266dfb416d032a08f97fd7d60e94b8c6ef54ae14b/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365", size = 150871 }, - { url = "https://files.pythonhosted.org/packages/8d/c9/27e41d481557be53d51e60750b85aa40eaf52b841946b3cdeff363105737/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129", size = 148546 }, - { url = "https://files.pythonhosted.org/packages/ee/44/4f62042ca8cdc0cabf87c0fc00ae27cd8b53ab68be3605ba6d071f742ad3/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236", size = 143048 }, - { url = "https://files.pythonhosted.org/packages/01/f8/38842422988b795220eb8038745d27a675ce066e2ada79516c118f291f07/charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99", size = 94389 }, - { url = "https://files.pythonhosted.org/packages/0b/6e/b13bd47fa9023b3699e94abf565b5a2f0b0be6e9ddac9812182596ee62e4/charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27", size = 101752 }, - { url = "https://files.pythonhosted.org/packages/d3/0b/4b7a70987abf9b8196845806198975b6aab4ce016632f817ad758a5aa056/charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6", size = 194445 }, - { url = "https://files.pythonhosted.org/packages/50/89/354cc56cf4dd2449715bc9a0f54f3aef3dc700d2d62d1fa5bbea53b13426/charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf", size = 125275 }, - { url = "https://files.pythonhosted.org/packages/fa/44/b730e2a2580110ced837ac083d8ad222343c96bb6b66e9e4e706e4d0b6df/charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db", size = 119020 }, - { url = "https://files.pythonhosted.org/packages/9d/e4/9263b8240ed9472a2ae7ddc3e516e71ef46617fe40eaa51221ccd4ad9a27/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1", size = 139128 }, - { url = "https://files.pythonhosted.org/packages/6b/e3/9f73e779315a54334240353eaea75854a9a690f3f580e4bd85d977cb2204/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03", size = 149277 }, - { url = "https://files.pythonhosted.org/packages/1a/cf/f1f50c2f295312edb8a548d3fa56a5c923b146cd3f24114d5adb7e7be558/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284", size = 142174 }, - { url = "https://files.pythonhosted.org/packages/16/92/92a76dc2ff3a12e69ba94e7e05168d37d0345fa08c87e1fe24d0c2a42223/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15", size = 143838 }, - { url = "https://files.pythonhosted.org/packages/a4/01/2117ff2b1dfc61695daf2babe4a874bca328489afa85952440b59819e9d7/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8", size = 146149 }, - { url = "https://files.pythonhosted.org/packages/f6/9b/93a332b8d25b347f6839ca0a61b7f0287b0930216994e8bf67a75d050255/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2", size = 140043 }, - { url = "https://files.pythonhosted.org/packages/ab/f6/7ac4a01adcdecbc7a7587767c776d53d369b8b971382b91211489535acf0/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719", size = 148229 }, - { url = "https://files.pythonhosted.org/packages/9d/be/5708ad18161dee7dc6a0f7e6cf3a88ea6279c3e8484844c0590e50e803ef/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631", size = 151556 }, - { url = "https://files.pythonhosted.org/packages/5a/bb/3d8bc22bacb9eb89785e83e6723f9888265f3a0de3b9ce724d66bd49884e/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b", size = 149772 }, - { url = "https://files.pythonhosted.org/packages/f7/fa/d3fc622de05a86f30beea5fc4e9ac46aead4731e73fd9055496732bcc0a4/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565", size = 144800 }, - { url = "https://files.pythonhosted.org/packages/9a/65/bdb9bc496d7d190d725e96816e20e2ae3a6fa42a5cac99c3c3d6ff884118/charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7", size = 94836 }, - { url = "https://files.pythonhosted.org/packages/3e/67/7b72b69d25b89c0b3cea583ee372c43aa24df15f0e0f8d3982c57804984b/charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9", size = 102187 }, - { url = "https://files.pythonhosted.org/packages/f3/89/68a4c86f1a0002810a27f12e9a7b22feb198c59b2f05231349fbce5c06f4/charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114", size = 194617 }, - { url = "https://files.pythonhosted.org/packages/4f/cd/8947fe425e2ab0aa57aceb7807af13a0e4162cd21eee42ef5b053447edf5/charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed", size = 125310 }, - { url = "https://files.pythonhosted.org/packages/5b/f0/b5263e8668a4ee9becc2b451ed909e9c27058337fda5b8c49588183c267a/charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250", size = 119126 }, - { url = "https://files.pythonhosted.org/packages/ff/6e/e445afe4f7fda27a533f3234b627b3e515a1b9429bc981c9a5e2aa5d97b6/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920", size = 139342 }, - { url = "https://files.pythonhosted.org/packages/a1/b2/4af9993b532d93270538ad4926c8e37dc29f2111c36f9c629840c57cd9b3/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64", size = 149383 }, - { url = "https://files.pythonhosted.org/packages/fb/6f/4e78c3b97686b871db9be6f31d64e9264e889f8c9d7ab33c771f847f79b7/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23", size = 142214 }, - { url = "https://files.pythonhosted.org/packages/2b/c9/1c8fe3ce05d30c87eff498592c89015b19fade13df42850aafae09e94f35/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc", size = 144104 }, - { url = "https://files.pythonhosted.org/packages/ee/68/efad5dcb306bf37db7db338338e7bb8ebd8cf38ee5bbd5ceaaaa46f257e6/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d", size = 146255 }, - { url = "https://files.pythonhosted.org/packages/0c/75/1ed813c3ffd200b1f3e71121c95da3f79e6d2a96120163443b3ad1057505/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88", size = 140251 }, - { url = "https://files.pythonhosted.org/packages/7d/0d/6f32255c1979653b448d3c709583557a4d24ff97ac4f3a5be156b2e6a210/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90", size = 148474 }, - { url = "https://files.pythonhosted.org/packages/ac/a0/c1b5298de4670d997101fef95b97ac440e8c8d8b4efa5a4d1ef44af82f0d/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b", size = 151849 }, - { url = "https://files.pythonhosted.org/packages/04/4f/b3961ba0c664989ba63e30595a3ed0875d6790ff26671e2aae2fdc28a399/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d", size = 149781 }, - { url = "https://files.pythonhosted.org/packages/d8/90/6af4cd042066a4adad58ae25648a12c09c879efa4849c705719ba1b23d8c/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482", size = 144970 }, - { url = "https://files.pythonhosted.org/packages/cc/67/e5e7e0cbfefc4ca79025238b43cdf8a2037854195b37d6417f3d0895c4c2/charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67", size = 94973 }, - { url = "https://files.pythonhosted.org/packages/65/97/fc9bbc54ee13d33dc54a7fcf17b26368b18505500fc01e228c27b5222d80/charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b", size = 102308 }, - { 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 = "contourpy" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/25/c2/fc7193cc5383637ff390a712e88e4ded0452c9fbcf84abe3de5ea3df1866/contourpy-1.3.1.tar.gz", hash = "sha256:dfd97abd83335045a913e3bcc4a09c0ceadbe66580cf573fe961f4a825efa699", size = 13465753 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b2/a3/80937fe3efe0edacf67c9a20b955139a1a622730042c1ea991956f2704ad/contourpy-1.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a045f341a77b77e1c5de31e74e966537bba9f3c4099b35bf4c2e3939dd54cdab", size = 268466 }, - { url = "https://files.pythonhosted.org/packages/82/1d/e3eaebb4aa2d7311528c048350ca8e99cdacfafd99da87bc0a5f8d81f2c2/contourpy-1.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:500360b77259914f7805af7462e41f9cb7ca92ad38e9f94d6c8641b089338124", size = 253314 }, - { url = "https://files.pythonhosted.org/packages/de/f3/d796b22d1a2b587acc8100ba8c07fb7b5e17fde265a7bb05ab967f4c935a/contourpy-1.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2f926efda994cdf3c8d3fdb40b9962f86edbc4457e739277b961eced3d0b4c1", size = 312003 }, - { url = "https://files.pythonhosted.org/packages/bf/f5/0e67902bc4394daee8daa39c81d4f00b50e063ee1a46cb3938cc65585d36/contourpy-1.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adce39d67c0edf383647a3a007de0a45fd1b08dedaa5318404f1a73059c2512b", size = 351896 }, - { url = "https://files.pythonhosted.org/packages/1f/d6/e766395723f6256d45d6e67c13bb638dd1fa9dc10ef912dc7dd3dcfc19de/contourpy-1.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abbb49fb7dac584e5abc6636b7b2a7227111c4f771005853e7d25176daaf8453", size = 320814 }, - { url = "https://files.pythonhosted.org/packages/a9/57/86c500d63b3e26e5b73a28b8291a67c5608d4aa87ebd17bd15bb33c178bc/contourpy-1.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0cffcbede75c059f535725c1680dfb17b6ba8753f0c74b14e6a9c68c29d7ea3", size = 324969 }, - { url = "https://files.pythonhosted.org/packages/b8/62/bb146d1289d6b3450bccc4642e7f4413b92ebffd9bf2e91b0404323704a7/contourpy-1.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ab29962927945d89d9b293eabd0d59aea28d887d4f3be6c22deaefbb938a7277", size = 1265162 }, - { url = "https://files.pythonhosted.org/packages/18/04/9f7d132ce49a212c8e767042cc80ae390f728060d2eea47058f55b9eff1c/contourpy-1.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:974d8145f8ca354498005b5b981165b74a195abfae9a8129df3e56771961d595", size = 1324328 }, - { url = "https://files.pythonhosted.org/packages/46/23/196813901be3f97c83ababdab1382e13e0edc0bb4e7b49a7bff15fcf754e/contourpy-1.3.1-cp310-cp310-win32.whl", hash = "sha256:ac4578ac281983f63b400f7fe6c101bedc10651650eef012be1ccffcbacf3697", size = 173861 }, - { url = "https://files.pythonhosted.org/packages/e0/82/c372be3fc000a3b2005061ca623a0d1ecd2eaafb10d9e883a2fc8566e951/contourpy-1.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:174e758c66bbc1c8576992cec9599ce8b6672b741b5d336b5c74e35ac382b18e", size = 218566 }, - { url = "https://files.pythonhosted.org/packages/12/bb/11250d2906ee2e8b466b5f93e6b19d525f3e0254ac8b445b56e618527718/contourpy-1.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3e8b974d8db2c5610fb4e76307e265de0edb655ae8169e8b21f41807ccbeec4b", size = 269555 }, - { url = "https://files.pythonhosted.org/packages/67/71/1e6e95aee21a500415f5d2dbf037bf4567529b6a4e986594d7026ec5ae90/contourpy-1.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:20914c8c973f41456337652a6eeca26d2148aa96dd7ac323b74516988bea89fc", size = 254549 }, - { url = "https://files.pythonhosted.org/packages/31/2c/b88986e8d79ac45efe9d8801ae341525f38e087449b6c2f2e6050468a42c/contourpy-1.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19d40d37c1c3a4961b4619dd9d77b12124a453cc3d02bb31a07d58ef684d3d86", size = 313000 }, - { url = "https://files.pythonhosted.org/packages/c4/18/65280989b151fcf33a8352f992eff71e61b968bef7432fbfde3a364f0730/contourpy-1.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:113231fe3825ebf6f15eaa8bc1f5b0ddc19d42b733345eae0934cb291beb88b6", size = 352925 }, - { url = "https://files.pythonhosted.org/packages/f5/c7/5fd0146c93220dbfe1a2e0f98969293b86ca9bc041d6c90c0e065f4619ad/contourpy-1.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4dbbc03a40f916a8420e420d63e96a1258d3d1b58cbdfd8d1f07b49fcbd38e85", size = 323693 }, - { url = "https://files.pythonhosted.org/packages/85/fc/7fa5d17daf77306840a4e84668a48ddff09e6bc09ba4e37e85ffc8e4faa3/contourpy-1.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a04ecd68acbd77fa2d39723ceca4c3197cb2969633836ced1bea14e219d077c", size = 326184 }, - { url = "https://files.pythonhosted.org/packages/ef/e7/104065c8270c7397c9571620d3ab880558957216f2b5ebb7e040f85eeb22/contourpy-1.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c414fc1ed8ee1dbd5da626cf3710c6013d3d27456651d156711fa24f24bd1291", size = 1268031 }, - { url = "https://files.pythonhosted.org/packages/e2/4a/c788d0bdbf32c8113c2354493ed291f924d4793c4a2e85b69e737a21a658/contourpy-1.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:31c1b55c1f34f80557d3830d3dd93ba722ce7e33a0b472cba0ec3b6535684d8f", size = 1325995 }, - { url = "https://files.pythonhosted.org/packages/a6/e6/a2f351a90d955f8b0564caf1ebe4b1451a3f01f83e5e3a414055a5b8bccb/contourpy-1.3.1-cp311-cp311-win32.whl", hash = "sha256:f611e628ef06670df83fce17805c344710ca5cde01edfdc72751311da8585375", size = 174396 }, - { url = "https://files.pythonhosted.org/packages/a8/7e/cd93cab453720a5d6cb75588cc17dcdc08fc3484b9de98b885924ff61900/contourpy-1.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:b2bdca22a27e35f16794cf585832e542123296b4687f9fd96822db6bae17bfc9", size = 219787 }, - { url = "https://files.pythonhosted.org/packages/37/6b/175f60227d3e7f5f1549fcb374592be311293132207e451c3d7c654c25fb/contourpy-1.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0ffa84be8e0bd33410b17189f7164c3589c229ce5db85798076a3fa136d0e509", size = 271494 }, - { url = "https://files.pythonhosted.org/packages/6b/6a/7833cfae2c1e63d1d8875a50fd23371394f540ce809d7383550681a1fa64/contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805617228ba7e2cbbfb6c503858e626ab528ac2a32a04a2fe88ffaf6b02c32bc", size = 255444 }, - { url = "https://files.pythonhosted.org/packages/7f/b3/7859efce66eaca5c14ba7619791b084ed02d868d76b928ff56890d2d059d/contourpy-1.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade08d343436a94e633db932e7e8407fe7de8083967962b46bdfc1b0ced39454", size = 307628 }, - { url = "https://files.pythonhosted.org/packages/48/b2/011415f5e3f0a50b1e285a0bf78eb5d92a4df000553570f0851b6e309076/contourpy-1.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47734d7073fb4590b4a40122b35917cd77be5722d80683b249dac1de266aac80", size = 347271 }, - { url = "https://files.pythonhosted.org/packages/84/7d/ef19b1db0f45b151ac78c65127235239a8cf21a59d1ce8507ce03e89a30b/contourpy-1.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2ba94a401342fc0f8b948e57d977557fbf4d515f03c67682dd5c6191cb2d16ec", size = 318906 }, - { url = "https://files.pythonhosted.org/packages/ba/99/6794142b90b853a9155316c8f470d2e4821fe6f086b03e372aca848227dd/contourpy-1.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efa874e87e4a647fd2e4f514d5e91c7d493697127beb95e77d2f7561f6905bd9", size = 323622 }, - { url = "https://files.pythonhosted.org/packages/3c/0f/37d2c84a900cd8eb54e105f4fa9aebd275e14e266736778bb5dccbf3bbbb/contourpy-1.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1bf98051f1045b15c87868dbaea84f92408337d4f81d0e449ee41920ea121d3b", size = 1266699 }, - { url = "https://files.pythonhosted.org/packages/3a/8a/deb5e11dc7d9cc8f0f9c8b29d4f062203f3af230ba83c30a6b161a6effc9/contourpy-1.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:61332c87493b00091423e747ea78200659dc09bdf7fd69edd5e98cef5d3e9a8d", size = 1326395 }, - { url = "https://files.pythonhosted.org/packages/1a/35/7e267ae7c13aaf12322ccc493531f1e7f2eb8fba2927b9d7a05ff615df7a/contourpy-1.3.1-cp312-cp312-win32.whl", hash = "sha256:e914a8cb05ce5c809dd0fe350cfbb4e881bde5e2a38dc04e3afe1b3e58bd158e", size = 175354 }, - { url = "https://files.pythonhosted.org/packages/a1/35/c2de8823211d07e8a79ab018ef03960716c5dff6f4d5bff5af87fd682992/contourpy-1.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:08d9d449a61cf53033612cb368f3a1b26cd7835d9b8cd326647efe43bca7568d", size = 220971 }, - { url = "https://files.pythonhosted.org/packages/9a/e7/de62050dce687c5e96f946a93546910bc67e483fe05324439e329ff36105/contourpy-1.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a761d9ccfc5e2ecd1bf05534eda382aa14c3e4f9205ba5b1684ecfe400716ef2", size = 271548 }, - { url = "https://files.pythonhosted.org/packages/78/4d/c2a09ae014ae984c6bdd29c11e74d3121b25eaa117eca0bb76340efd7e1c/contourpy-1.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:523a8ee12edfa36f6d2a49407f705a6ef4c5098de4f498619787e272de93f2d5", size = 255576 }, - { url = "https://files.pythonhosted.org/packages/ab/8a/915380ee96a5638bda80cd061ccb8e666bfdccea38d5741cb69e6dbd61fc/contourpy-1.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece6df05e2c41bd46776fbc712e0996f7c94e0d0543af1656956d150c4ca7c81", size = 306635 }, - { url = "https://files.pythonhosted.org/packages/29/5c/c83ce09375428298acd4e6582aeb68b1e0d1447f877fa993d9bf6cd3b0a0/contourpy-1.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:573abb30e0e05bf31ed067d2f82500ecfdaec15627a59d63ea2d95714790f5c2", size = 345925 }, - { url = "https://files.pythonhosted.org/packages/29/63/5b52f4a15e80c66c8078a641a3bfacd6e07106835682454647aca1afc852/contourpy-1.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fa36448e6a3a1a9a2ba23c02012c43ed88905ec80163f2ffe2421c7192a5d7", size = 318000 }, - { url = "https://files.pythonhosted.org/packages/9a/e2/30ca086c692691129849198659bf0556d72a757fe2769eb9620a27169296/contourpy-1.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ea9924d28fc5586bf0b42d15f590b10c224117e74409dd7a0be3b62b74a501c", size = 322689 }, - { url = "https://files.pythonhosted.org/packages/6b/77/f37812ef700f1f185d348394debf33f22d531e714cf6a35d13d68a7003c7/contourpy-1.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5b75aa69cb4d6f137b36f7eb2ace9280cfb60c55dc5f61c731fdf6f037f958a3", size = 1268413 }, - { url = "https://files.pythonhosted.org/packages/3f/6d/ce84e79cdd128542ebeb268f84abb4b093af78e7f8ec504676673d2675bc/contourpy-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:041b640d4ec01922083645a94bb3b2e777e6b626788f4095cf21abbe266413c1", size = 1326530 }, - { url = "https://files.pythonhosted.org/packages/72/22/8282f4eae20c73c89bee7a82a19c4e27af9b57bb602ecaa00713d5bdb54d/contourpy-1.3.1-cp313-cp313-win32.whl", hash = "sha256:36987a15e8ace5f58d4d5da9dca82d498c2bbb28dff6e5d04fbfcc35a9cb3a82", size = 175315 }, - { url = "https://files.pythonhosted.org/packages/e3/d5/28bca491f65312b438fbf076589dcde7f6f966b196d900777f5811b9c4e2/contourpy-1.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:a7895f46d47671fa7ceec40f31fae721da51ad34bdca0bee83e38870b1f47ffd", size = 220987 }, - { url = "https://files.pythonhosted.org/packages/2f/24/a4b285d6adaaf9746e4700932f579f1a7b6f9681109f694cfa233ae75c4e/contourpy-1.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ddeb796389dadcd884c7eb07bd14ef12408aaae358f0e2ae24114d797eede30", size = 285001 }, - { url = "https://files.pythonhosted.org/packages/48/1d/fb49a401b5ca4f06ccf467cd6c4f1fd65767e63c21322b29b04ec40b40b9/contourpy-1.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:19c1555a6801c2f084c7ddc1c6e11f02eb6a6016ca1318dd5452ba3f613a1751", size = 268553 }, - { url = "https://files.pythonhosted.org/packages/79/1e/4aef9470d13fd029087388fae750dccb49a50c012a6c8d1d634295caa644/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:841ad858cff65c2c04bf93875e384ccb82b654574a6d7f30453a04f04af71342", size = 310386 }, - { url = "https://files.pythonhosted.org/packages/b0/34/910dc706ed70153b60392b5305c708c9810d425bde12499c9184a1100888/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4318af1c925fb9a4fb190559ef3eec206845f63e80fb603d47f2d6d67683901c", size = 349806 }, - { url = "https://files.pythonhosted.org/packages/31/3c/faee6a40d66d7f2a87f7102236bf4780c57990dd7f98e5ff29881b1b1344/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:14c102b0eab282427b662cb590f2e9340a9d91a1c297f48729431f2dcd16e14f", size = 321108 }, - { url = "https://files.pythonhosted.org/packages/17/69/390dc9b20dd4bb20585651d7316cc3054b7d4a7b4f8b710b2b698e08968d/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e806338bfeaa006acbdeba0ad681a10be63b26e1b17317bfac3c5d98f36cda", size = 327291 }, - { url = "https://files.pythonhosted.org/packages/ef/74/7030b67c4e941fe1e5424a3d988080e83568030ce0355f7c9fc556455b01/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4d76d5993a34ef3df5181ba3c92fabb93f1eaa5729504fb03423fcd9f3177242", size = 1263752 }, - { url = "https://files.pythonhosted.org/packages/f0/ed/92d86f183a8615f13f6b9cbfc5d4298a509d6ce433432e21da838b4b63f4/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:89785bb2a1980c1bd87f0cb1517a71cde374776a5f150936b82580ae6ead44a1", size = 1318403 }, - { url = "https://files.pythonhosted.org/packages/b3/0e/c8e4950c77dcfc897c71d61e56690a0a9df39543d2164040301b5df8e67b/contourpy-1.3.1-cp313-cp313t-win32.whl", hash = "sha256:8eb96e79b9f3dcadbad2a3891672f81cdcab7f95b27f28f1c67d75f045b6b4f1", size = 185117 }, - { url = "https://files.pythonhosted.org/packages/c1/31/1ae946f11dfbd229222e6d6ad8e7bd1891d3d48bde5fbf7a0beb9491f8e3/contourpy-1.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:287ccc248c9e0d0566934e7d606201abd74761b5703d804ff3df8935f523d546", size = 236668 }, - { url = "https://files.pythonhosted.org/packages/3e/4f/e56862e64b52b55b5ddcff4090085521fc228ceb09a88390a2b103dccd1b/contourpy-1.3.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b457d6430833cee8e4b8e9b6f07aa1c161e5e0d52e118dc102c8f9bd7dd060d6", size = 265605 }, - { url = "https://files.pythonhosted.org/packages/b0/2e/52bfeeaa4541889f23d8eadc6386b442ee2470bd3cff9baa67deb2dd5c57/contourpy-1.3.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb76c1a154b83991a3cbbf0dfeb26ec2833ad56f95540b442c73950af2013750", size = 315040 }, - { url = "https://files.pythonhosted.org/packages/52/94/86bfae441707205634d80392e873295652fc313dfd93c233c52c4dc07874/contourpy-1.3.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:44a29502ca9c7b5ba389e620d44f2fbe792b1fb5734e8b931ad307071ec58c53", size = 218221 }, -] - -[[package]] -name = "cryptography" -version = "44.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/91/4c/45dfa6829acffa344e3967d6006ee4ae8be57af746ae2eba1c431949b32c/cryptography-44.0.0.tar.gz", hash = "sha256:cd4e834f340b4293430701e772ec543b0fbe6c2dea510a5286fe0acabe153a02", size = 710657 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/55/09/8cc67f9b84730ad330b3b72cf867150744bf07ff113cda21a15a1c6d2c7c/cryptography-44.0.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:84111ad4ff3f6253820e6d3e58be2cc2a00adb29335d4cacb5ab4d4d34f2a123", size = 6541833 }, - { url = "https://files.pythonhosted.org/packages/7e/5b/3759e30a103144e29632e7cb72aec28cedc79e514b2ea8896bb17163c19b/cryptography-44.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15492a11f9e1b62ba9d73c210e2416724633167de94607ec6069ef724fad092", size = 3922710 }, - { url = "https://files.pythonhosted.org/packages/5f/58/3b14bf39f1a0cfd679e753e8647ada56cddbf5acebffe7db90e184c76168/cryptography-44.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831c3c4d0774e488fdc83a1923b49b9957d33287de923d58ebd3cec47a0ae43f", size = 4137546 }, - { url = "https://files.pythonhosted.org/packages/98/65/13d9e76ca19b0ba5603d71ac8424b5694415b348e719db277b5edc985ff5/cryptography-44.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:761817a3377ef15ac23cd7834715081791d4ec77f9297ee694ca1ee9c2c7e5eb", size = 3915420 }, - { url = "https://files.pythonhosted.org/packages/b1/07/40fe09ce96b91fc9276a9ad272832ead0fddedcba87f1190372af8e3039c/cryptography-44.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3c672a53c0fb4725a29c303be906d3c1fa99c32f58abe008a82705f9ee96f40b", size = 4154498 }, - { url = "https://files.pythonhosted.org/packages/75/ea/af65619c800ec0a7e4034207aec543acdf248d9bffba0533342d1bd435e1/cryptography-44.0.0-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:4ac4c9f37eba52cb6fbeaf5b59c152ea976726b865bd4cf87883a7e7006cc543", size = 3932569 }, - { url = "https://files.pythonhosted.org/packages/4e/d5/9cc182bf24c86f542129565976c21301d4ac397e74bf5a16e48241aab8a6/cryptography-44.0.0-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:60eb32934076fa07e4316b7b2742fa52cbb190b42c2df2863dbc4230a0a9b385", size = 4164756 }, - { url = "https://files.pythonhosted.org/packages/c7/af/d1deb0c04d59612e3d5e54203159e284d3e7a6921e565bb0eeb6269bdd8a/cryptography-44.0.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ed3534eb1090483c96178fcb0f8893719d96d5274dfde98aa6add34614e97c8e", size = 4016721 }, - { url = "https://files.pythonhosted.org/packages/bd/69/7ca326c55698d0688db867795134bdfac87136b80ef373aaa42b225d6dd5/cryptography-44.0.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f3f6fdfa89ee2d9d496e2c087cebef9d4fcbb0ad63c40e821b39f74bf48d9c5e", size = 4240915 }, - { url = "https://files.pythonhosted.org/packages/ef/d4/cae11bf68c0f981e0413906c6dd03ae7fa864347ed5fac40021df1ef467c/cryptography-44.0.0-cp37-abi3-win32.whl", hash = "sha256:eb33480f1bad5b78233b0ad3e1b0be21e8ef1da745d8d2aecbb20671658b9053", size = 2757925 }, - { url = "https://files.pythonhosted.org/packages/64/b1/50d7739254d2002acae64eed4fc43b24ac0cc44bf0a0d388d1ca06ec5bb1/cryptography-44.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:abc998e0c0eee3c8a1904221d3f67dcfa76422b23620173e28c11d3e626c21bd", size = 3202055 }, - { url = "https://files.pythonhosted.org/packages/11/18/61e52a3d28fc1514a43b0ac291177acd1b4de00e9301aaf7ef867076ff8a/cryptography-44.0.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:660cb7312a08bc38be15b696462fa7cc7cd85c3ed9c576e81f4dc4d8b2b31591", size = 6542801 }, - { url = "https://files.pythonhosted.org/packages/1a/07/5f165b6c65696ef75601b781a280fc3b33f1e0cd6aa5a92d9fb96c410e97/cryptography-44.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1923cb251c04be85eec9fda837661c67c1049063305d6be5721643c22dd4e2b7", size = 3922613 }, - { url = "https://files.pythonhosted.org/packages/28/34/6b3ac1d80fc174812486561cf25194338151780f27e438526f9c64e16869/cryptography-44.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:404fdc66ee5f83a1388be54300ae978b2efd538018de18556dde92575e05defc", size = 4137925 }, - { url = "https://files.pythonhosted.org/packages/d0/c7/c656eb08fd22255d21bc3129625ed9cd5ee305f33752ef2278711b3fa98b/cryptography-44.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:c5eb858beed7835e5ad1faba59e865109f3e52b3783b9ac21e7e47dc5554e289", size = 3915417 }, - { url = "https://files.pythonhosted.org/packages/ef/82/72403624f197af0db6bac4e58153bc9ac0e6020e57234115db9596eee85d/cryptography-44.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f53c2c87e0fb4b0c00fa9571082a057e37690a8f12233306161c8f4b819960b7", size = 4155160 }, - { url = "https://files.pythonhosted.org/packages/a2/cd/2f3c440913d4329ade49b146d74f2e9766422e1732613f57097fea61f344/cryptography-44.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:9e6fc8a08e116fb7c7dd1f040074c9d7b51d74a8ea40d4df2fc7aa08b76b9e6c", size = 3932331 }, - { url = "https://files.pythonhosted.org/packages/31/d9/90409720277f88eb3ab72f9a32bfa54acdd97e94225df699e7713e850bd4/cryptography-44.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:9abcc2e083cbe8dde89124a47e5e53ec38751f0d7dfd36801008f316a127d7ba", size = 4165207 }, - { url = "https://files.pythonhosted.org/packages/7f/df/8be88797f0a1cca6e255189a57bb49237402b1880d6e8721690c5603ac23/cryptography-44.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:d2436114e46b36d00f8b72ff57e598978b37399d2786fd39793c36c6d5cb1c64", size = 4017372 }, - { url = "https://files.pythonhosted.org/packages/af/36/5ccc376f025a834e72b8e52e18746b927f34e4520487098e283a719c205e/cryptography-44.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a01956ddfa0a6790d594f5b34fc1bfa6098aca434696a03cfdbe469b8ed79285", size = 4239657 }, - { url = "https://files.pythonhosted.org/packages/46/b0/f4f7d0d0bcfbc8dd6296c1449be326d04217c57afb8b2594f017eed95533/cryptography-44.0.0-cp39-abi3-win32.whl", hash = "sha256:eca27345e1214d1b9f9490d200f9db5a874479be914199194e746c893788d417", size = 2758672 }, - { url = "https://files.pythonhosted.org/packages/97/9b/443270b9210f13f6ef240eff73fd32e02d381e7103969dc66ce8e89ee901/cryptography-44.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:708ee5f1bafe76d041b53a4f95eb28cdeb8d18da17e597d46d7833ee59b97ede", size = 3202071 }, - { url = "https://files.pythonhosted.org/packages/77/d4/fea74422326388bbac0c37b7489a0fcb1681a698c3b875959430ba550daa/cryptography-44.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:37d76e6863da3774cd9db5b409a9ecfd2c71c981c38788d3fcfaf177f447b731", size = 3338857 }, - { url = "https://files.pythonhosted.org/packages/1a/aa/ba8a7467c206cb7b62f09b4168da541b5109838627f582843bbbe0235e8e/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:f677e1268c4e23420c3acade68fac427fffcb8d19d7df95ed7ad17cdef8404f4", size = 3850615 }, - { url = "https://files.pythonhosted.org/packages/89/fa/b160e10a64cc395d090105be14f399b94e617c879efd401188ce0fea39ee/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f5e7cb1e5e56ca0933b4873c0220a78b773b24d40d186b6738080b73d3d0a756", size = 4081622 }, - { url = "https://files.pythonhosted.org/packages/47/8f/20ff0656bb0cf7af26ec1d01f780c5cfbaa7666736063378c5f48558b515/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:8b3e6eae66cf54701ee7d9c83c30ac0a1e3fa17be486033000f2a73a12ab507c", size = 3867546 }, - { url = "https://files.pythonhosted.org/packages/38/d9/28edf32ee2fcdca587146bcde90102a7319b2f2c690edfa627e46d586050/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:be4ce505894d15d5c5037167ffb7f0ae90b7be6f2a98f9a5c3442395501c32fa", size = 4090937 }, - { url = "https://files.pythonhosted.org/packages/cc/9d/37e5da7519de7b0b070a3fedd4230fe76d50d2a21403e0f2153d70ac4163/cryptography-44.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:62901fb618f74d7d81bf408c8719e9ec14d863086efe4185afd07c352aee1d2c", size = 3128774 }, -] - -[[package]] -name = "cycler" -version = "0.12.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321 }, -] - -[[package]] -name = "dill" -version = "0.3.9" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/70/43/86fe3f9e130c4137b0f1b50784dd70a5087b911fe07fa81e53e0c4c47fea/dill-0.3.9.tar.gz", hash = "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c", size = 187000 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/46/d1/e73b6ad76f0b1fb7f23c35c6d95dbc506a9c8804f43dda8cb5b0fa6331fd/dill-0.3.9-py3-none-any.whl", hash = "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a", size = 119418 }, -] - -[[package]] -name = "docplex" -version = "2.28.240" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "six" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/15/99/340a523d3e724df4ccb85180d5a539cb4a447fb4ca0fcc5897c054bc7adf/docplex-2.28.240.tar.gz", hash = "sha256:c0de407e33f8709bb4cd91b6efeb96fd88bfecbdce2caec51afb79253bde6ff5", size = 643369 } - -[[package]] -name = "fastdtw" -version = "0.3.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/99/43/30f2d8db076f216b15c10db663b46e22d1750b1ebacd7af6e62b83d6ab98/fastdtw-0.3.4.tar.gz", hash = "sha256:2350fa6ec36bcad186eaf81f46eff35181baf04e324f522de8aeb43d0243f64f", size = 133402 } - -[[package]] -name = "fonttools" -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/b4/4a/786589606d4989cb34d8bc766cd687d955aaf3039c367fe7104bcf82dc98/fonttools-4.55.0-py3-none-any.whl", hash = "sha256:12db5888cd4dd3fcc9f0ee60c6edd3c7e1fd44b7dd0f31381ea03df68f8a153f", size = 1100249 }, -] - -[[package]] -name = "frozendict" -version = "2.4.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bb/59/19eb300ba28e7547538bdf603f1c6c34793240a90e1a7b61b65d8517e35e/frozendict-2.4.6.tar.gz", hash = "sha256:df7cd16470fbd26fc4969a208efadc46319334eb97def1ddf48919b351192b8e", size = 316416 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a6/7f/e80cdbe0db930b2ba9d46ca35a41b0150156da16dfb79edcc05642690c3b/frozendict-2.4.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c3a05c0a50cab96b4bb0ea25aa752efbfceed5ccb24c007612bc63e51299336f", size = 37927 }, - { url = "https://files.pythonhosted.org/packages/29/98/27e145ff7e8e63caa95fb8ee4fc56c68acb208bef01a89c3678a66f9a34d/frozendict-2.4.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f5b94d5b07c00986f9e37a38dd83c13f5fe3bf3f1ccc8e88edea8fe15d6cd88c", size = 37945 }, - { url = "https://files.pythonhosted.org/packages/ac/f1/a10be024a9d53441c997b3661ea80ecba6e3130adc53812a4b95b607cdd1/frozendict-2.4.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4c789fd70879ccb6289a603cdebdc4953e7e5dea047d30c1b180529b28257b5", size = 117656 }, - { url = "https://files.pythonhosted.org/packages/46/a6/34c760975e6f1cb4db59a990d58dcf22287e10241c851804670c74c6a27a/frozendict-2.4.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da6a10164c8a50b34b9ab508a9420df38f4edf286b9ca7b7df8a91767baecb34", size = 117444 }, - { url = "https://files.pythonhosted.org/packages/62/dd/64bddd1ffa9617f50e7e63656b2a7ad7f0a46c86b5f4a3d2c714d0006277/frozendict-2.4.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9a8a43036754a941601635ea9c788ebd7a7efbed2becba01b54a887b41b175b9", size = 116801 }, - { url = "https://files.pythonhosted.org/packages/45/ae/af06a8bde1947277aad895c2f26c3b8b8b6ee9c0c2ad988fb58a9d1dde3f/frozendict-2.4.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c9905dcf7aa659e6a11b8051114c9fa76dfde3a6e50e6dc129d5aece75b449a2", size = 117329 }, - { url = "https://files.pythonhosted.org/packages/d2/df/be3fa0457ff661301228f4c59c630699568c8ed9b5480f113b3eea7d0cb3/frozendict-2.4.6-cp310-cp310-win_amd64.whl", hash = "sha256:323f1b674a2cc18f86ab81698e22aba8145d7a755e0ac2cccf142ee2db58620d", size = 37522 }, - { url = "https://files.pythonhosted.org/packages/4a/6f/c22e0266b4c85f58b4613fec024e040e93753880527bf92b0c1bc228c27c/frozendict-2.4.6-cp310-cp310-win_arm64.whl", hash = "sha256:eabd21d8e5db0c58b60d26b4bb9839cac13132e88277e1376970172a85ee04b3", size = 34056 }, - { url = "https://files.pythonhosted.org/packages/04/13/d9839089b900fa7b479cce495d62110cddc4bd5630a04d8469916c0e79c5/frozendict-2.4.6-py311-none-any.whl", hash = "sha256:d065db6a44db2e2375c23eac816f1a022feb2fa98cbb50df44a9e83700accbea", size = 16148 }, - { url = "https://files.pythonhosted.org/packages/ba/d0/d482c39cee2ab2978a892558cf130681d4574ea208e162da8958b31e9250/frozendict-2.4.6-py312-none-any.whl", hash = "sha256:49344abe90fb75f0f9fdefe6d4ef6d4894e640fadab71f11009d52ad97f370b9", size = 16146 }, - { url = "https://files.pythonhosted.org/packages/a5/8e/b6bf6a0de482d7d7d7a2aaac8fdc4a4d0bb24a809f5ddd422aa7060eb3d2/frozendict-2.4.6-py313-none-any.whl", hash = "sha256:7134a2bb95d4a16556bb5f2b9736dceb6ea848fa5b6f3f6c2d6dba93b44b4757", size = 16146 }, -] - -[[package]] -name = "graphviz" -version = "0.20.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fa/83/5a40d19b8347f017e417710907f824915fba411a9befd092e52746b63e9f/graphviz-0.20.3.zip", hash = "sha256:09d6bc81e6a9fa392e7ba52135a9d49f1ed62526f96499325930e87ca1b5925d", size = 256455 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/00/be/d59db2d1d52697c6adc9eacaf50e8965b6345cc143f671e1ed068818d5cf/graphviz-0.20.3-py3-none-any.whl", hash = "sha256:81f848f2904515d8cd359cc611faba817598d2feaac4027b266aa3eda7b3dde5", size = 47126 }, -] - -[[package]] -name = "h5py" -version = "3.12.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/cc/0c/5c2b0a88158682aeafb10c1c2b735df5bc31f165bfe192f2ee9f2a23b5f1/h5py-3.12.1.tar.gz", hash = "sha256:326d70b53d31baa61f00b8aa5f95c2fcb9621a3ee8365d770c551a13dbbcbfdf", size = 411457 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/df/7d/b21045fbb004ad8bb6fb3be4e6ca903841722706f7130b9bba31ef2f88e3/h5py-3.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f0f1a382cbf494679c07b4371f90c70391dedb027d517ac94fa2c05299dacda", size = 3402133 }, - { url = "https://files.pythonhosted.org/packages/29/a7/3c2a33fba1da64a0846744726fd067a92fb8abb887875a0dd8e3bac8b45d/h5py-3.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cb65f619dfbdd15e662423e8d257780f9a66677eae5b4b3fc9dca70b5fd2d2a3", size = 2866436 }, - { url = "https://files.pythonhosted.org/packages/1e/d0/4bf67c3937a2437c20844165766ddd1a1817ae6b9544c3743050d8e0f403/h5py-3.12.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b15d8dbd912c97541312c0e07438864d27dbca857c5ad634de68110c6beb1c2", size = 5168596 }, - { url = "https://files.pythonhosted.org/packages/85/bc/e76f4b2096e0859225f5441d1b7f5e2041fffa19fc2c16756c67078417aa/h5py-3.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59685fe40d8c1fbbee088c88cd4da415a2f8bee5c270337dc5a1c4aa634e3307", size = 5341537 }, - { url = "https://files.pythonhosted.org/packages/99/bd/fb8ed45308bb97e04c02bd7aed324ba11e6a4bf9ed73967ca2a168e9cf92/h5py-3.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:577d618d6b6dea3da07d13cc903ef9634cde5596b13e832476dd861aaf651f3e", size = 2990575 }, - { url = "https://files.pythonhosted.org/packages/33/61/c463dc5fc02fbe019566d067a9d18746cd3c664f29c9b8b3c3f9ed025365/h5py-3.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ccd9006d92232727d23f784795191bfd02294a4f2ba68708825cb1da39511a93", size = 3410828 }, - { url = "https://files.pythonhosted.org/packages/95/9d/eb91a9076aa998bb2179d6b1788055ea09cdf9d6619cd967f1d3321ed056/h5py-3.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ad8a76557880aed5234cfe7279805f4ab5ce16b17954606cca90d578d3e713ef", size = 2872586 }, - { url = "https://files.pythonhosted.org/packages/b0/62/e2b1f9723ff713e3bd3c16dfeceec7017eadc21ef063d8b7080c0fcdc58a/h5py-3.12.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1473348139b885393125126258ae2d70753ef7e9cec8e7848434f385ae72069e", size = 5273038 }, - { url = "https://files.pythonhosted.org/packages/e1/89/118c3255d6ff2db33b062ec996a762d99ae50c21f54a8a6047ae8eda1b9f/h5py-3.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:018a4597f35092ae3fb28ee851fdc756d2b88c96336b8480e124ce1ac6fb9166", size = 5452688 }, - { url = "https://files.pythonhosted.org/packages/1d/4d/cbd3014eb78d1e449b29beba1f3293a841aa8086c6f7968c383c2c7ff076/h5py-3.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:3fdf95092d60e8130ba6ae0ef7a9bd4ade8edbe3569c13ebbaf39baefffc5ba4", size = 3006095 }, - { url = "https://files.pythonhosted.org/packages/d4/e1/ea9bfe18a3075cdc873f0588ff26ce394726047653557876d7101bf0c74e/h5py-3.12.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:06a903a4e4e9e3ebbc8b548959c3c2552ca2d70dac14fcfa650d9261c66939ed", size = 3372538 }, - { url = "https://files.pythonhosted.org/packages/0d/74/1009b663387c025e8fa5f3ee3cf3cd0d99b1ad5c72eeb70e75366b1ce878/h5py-3.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7b3b8f3b48717e46c6a790e3128d39c61ab595ae0a7237f06dfad6a3b51d5351", size = 2868104 }, - { url = "https://files.pythonhosted.org/packages/af/52/c604adc06280c15a29037d4aa79a24fe54d8d0b51085e81ed24b2fa995f7/h5py-3.12.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:050a4f2c9126054515169c49cb900949814987f0c7ae74c341b0c9f9b5056834", size = 5194606 }, - { url = "https://files.pythonhosted.org/packages/fa/63/eeaacff417b393491beebabb8a3dc5342950409eb6d7b39d437289abdbae/h5py-3.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c4b41d1019322a5afc5082864dfd6359f8935ecd37c11ac0029be78c5d112c9", size = 5413256 }, - { url = "https://files.pythonhosted.org/packages/86/f7/bb465dcb92ca3521a15cbe1031f6d18234dbf1fb52a6796a00bfaa846ebf/h5py-3.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:e4d51919110a030913201422fb07987db4338eba5ec8c5a15d6fab8e03d443fc", size = 2993055 }, - { url = "https://files.pythonhosted.org/packages/23/1c/ecdd0efab52c24f2a9bf2324289828b860e8dd1e3c5ada3cf0889e14fdc1/h5py-3.12.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:513171e90ed92236fc2ca363ce7a2fc6f2827375efcbb0cc7fbdd7fe11fecafc", size = 3346239 }, - { url = "https://files.pythonhosted.org/packages/93/cd/5b6f574bf3e318bbe305bc93ba45181676550eb44ba35e006d2e98004eaa/h5py-3.12.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:59400f88343b79655a242068a9c900001a34b63e3afb040bd7cdf717e440f653", size = 2843416 }, - { url = "https://files.pythonhosted.org/packages/8a/4f/b74332f313bfbe94ba03fff784219b9db385e6139708e55b11490149f90a/h5py-3.12.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3e465aee0ec353949f0f46bf6c6f9790a2006af896cee7c178a8c3e5090aa32", size = 5154390 }, - { url = "https://files.pythonhosted.org/packages/1a/57/93ea9e10a6457ea8d3b867207deb29a527e966a08a84c57ffd954e32152a/h5py-3.12.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba51c0c5e029bb5420a343586ff79d56e7455d496d18a30309616fdbeed1068f", size = 5378244 }, - { url = "https://files.pythonhosted.org/packages/50/51/0bbf3663062b2eeee78aa51da71e065f8a0a6e3cb950cc7020b4444999e6/h5py-3.12.1-cp313-cp313-win_amd64.whl", hash = "sha256:52ab036c6c97055b85b2a242cb540ff9590bacfda0c03dd0cf0661b311f522f8", size = 2979760 }, -] - -[[package]] -name = "html5lib" -version = "1.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "six" }, - { name = "webencodings" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ac/b6/b55c3f49042f1df3dcd422b7f224f939892ee94f22abcf503a9b7339eaf2/html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f", size = 272215 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6c/dd/a834df6482147d48e225a49515aabc28974ad5a4ca3215c18a882565b028/html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d", size = 112173 }, -] - -[[package]] -name = "ibm-cloud-sdk-core" -version = "3.22.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pyjwt" }, - { name = "python-dateutil" }, - { name = "requests" }, - { name = "urllib3" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/4e/2d/730b09fdf054b31f37d5514ec0c5c9c521acad72cd25c7dbcd72998bf3f6/ibm_cloud_sdk_core-3.22.0.tar.gz", hash = "sha256:0aa5abc972b7d70ee4c39e3ad69c82c9717be847e5672928b416b8ea7d57a297", size = 70647 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/38/42/58a3de2e87d0a6b81278dc600d06a74f8542ad86114ad6cc61555cf00352/ibm_cloud_sdk_core-3.22.0-py3-none-any.whl", hash = "sha256:a86e9006d98f32510d47d4751d8ba04b64514e3c94b851511fd55d7b094c87b1", size = 69432 }, -] - -[[package]] -name = "ibm-platform-services" -version = "0.59.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "ibm-cloud-sdk-core" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9b/80/a65220c31897db166c455a2110108e6fddfd6c62466ca122b301fd00ce70/ibm_platform_services-0.59.0.tar.gz", hash = "sha256:4d63bfa25d9bf995ea75ed449ce26ce4d21c8e2385e04f6da864bdc97c4e62a0", size = 324387 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/86/8cd1079e3b1bc4a27b726fadd9f29ee61e513e36f952ad9b18b41e04d452/ibm_platform_services-0.59.0-py3-none-any.whl", hash = "sha256:2deba369f03843a0b628c03065b791f0738cd7a570b51836cb68ac7629ae545d", size = 340780 }, -] - -[[package]] -name = "idna" -version = "3.10" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, -] - -[[package]] -name = "inflection" -version = "0.5.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e1/7e/691d061b7329bc8d54edbf0ec22fbfb2afe61facb681f9aaa9bff7a27d04/inflection-0.5.1.tar.gz", hash = "sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417", size = 15091 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/59/91/aa6bde563e0085a02a435aa99b49ef75b0a4b062635e606dab23ce18d720/inflection-0.5.1-py2.py3-none-any.whl", hash = "sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2", size = 9454 }, -] - -[[package]] -name = "jinja2" -version = "3.1.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "markupsafe" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ed/55/39036716d19cab0747a5020fc7e907f362fbf48c984b14e62127f7e68e5d/jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369", size = 240245 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/31/80/3a54838c3fb461f6fec263ebf3a3a41771bd05190238de3486aae8540c36/jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d", size = 133271 }, -] - -[[package]] -name = "joblib" -version = "1.4.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/64/33/60135848598c076ce4b231e1b1895170f45fbcaeaa2c9d5e38b04db70c35/joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e", size = 2116621 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/91/29/df4b9b42f2be0b623cbd5e2140cafcaa2bef0759a00b7b70104dcfe2fb51/joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6", size = 301817 }, -] - -[[package]] -name = "kiwisolver" -version = "1.4.7" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/85/4d/2255e1c76304cbd60b48cee302b66d1dde4468dc5b1160e4b7cb43778f2a/kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60", size = 97286 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/97/14/fc943dd65268a96347472b4fbe5dcc2f6f55034516f80576cd0dd3a8930f/kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6", size = 122440 }, - { url = "https://files.pythonhosted.org/packages/1e/46/e68fed66236b69dd02fcdb506218c05ac0e39745d696d22709498896875d/kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17", size = 65758 }, - { url = "https://files.pythonhosted.org/packages/ef/fa/65de49c85838681fc9cb05de2a68067a683717321e01ddafb5b8024286f0/kiwisolver-1.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa0abdf853e09aff551db11fce173e2177d00786c688203f52c87ad7fcd91ef9", size = 64311 }, - { url = "https://files.pythonhosted.org/packages/42/9c/cc8d90f6ef550f65443bad5872ffa68f3dee36de4974768628bea7c14979/kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d53103597a252fb3ab8b5845af04c7a26d5e7ea8122303dd7a021176a87e8b9", size = 1637109 }, - { url = "https://files.pythonhosted.org/packages/55/91/0a57ce324caf2ff5403edab71c508dd8f648094b18cfbb4c8cc0fde4a6ac/kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:88f17c5ffa8e9462fb79f62746428dd57b46eb931698e42e990ad63103f35e6c", size = 1617814 }, - { url = "https://files.pythonhosted.org/packages/12/5d/c36140313f2510e20207708adf36ae4919416d697ee0236b0ddfb6fd1050/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a9ca9c710d598fd75ee5de59d5bda2684d9db36a9f50b6125eaea3969c2599", size = 1400881 }, - { url = "https://files.pythonhosted.org/packages/56/d0/786e524f9ed648324a466ca8df86298780ef2b29c25313d9a4f16992d3cf/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f4d742cb7af1c28303a51b7a27aaee540e71bb8e24f68c736f6f2ffc82f2bf05", size = 1512972 }, - { url = "https://files.pythonhosted.org/packages/67/5a/77851f2f201e6141d63c10a0708e996a1363efaf9e1609ad0441b343763b/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28c7fea2196bf4c2f8d46a0415c77a1c480cc0724722f23d7410ffe9842c407", size = 1444787 }, - { url = "https://files.pythonhosted.org/packages/06/5f/1f5eaab84355885e224a6fc8d73089e8713dc7e91c121f00b9a1c58a2195/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e968b84db54f9d42046cf154e02911e39c0435c9801681e3fc9ce8a3c4130278", size = 2199212 }, - { url = "https://files.pythonhosted.org/packages/b5/28/9152a3bfe976a0ae21d445415defc9d1cd8614b2910b7614b30b27a47270/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0c18ec74c0472de033e1bebb2911c3c310eef5649133dd0bedf2a169a1b269e5", size = 2346399 }, - { url = "https://files.pythonhosted.org/packages/26/f6/453d1904c52ac3b400f4d5e240ac5fec25263716723e44be65f4d7149d13/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8f0ea6da6d393d8b2e187e6a5e3fb81f5862010a40c3945e2c6d12ae45cfb2ad", size = 2308688 }, - { url = "https://files.pythonhosted.org/packages/5a/9a/d4968499441b9ae187e81745e3277a8b4d7c60840a52dc9d535a7909fac3/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f106407dda69ae456dd1227966bf445b157ccc80ba0dff3802bb63f30b74e895", size = 2445493 }, - { url = "https://files.pythonhosted.org/packages/07/c9/032267192e7828520dacb64dfdb1d74f292765f179e467c1cba97687f17d/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84ec80df401cfee1457063732d90022f93951944b5b58975d34ab56bb150dfb3", size = 2262191 }, - { url = "https://files.pythonhosted.org/packages/6c/ad/db0aedb638a58b2951da46ddaeecf204be8b4f5454df020d850c7fa8dca8/kiwisolver-1.4.7-cp310-cp310-win32.whl", hash = "sha256:71bb308552200fb2c195e35ef05de12f0c878c07fc91c270eb3d6e41698c3bcc", size = 46644 }, - { url = "https://files.pythonhosted.org/packages/12/ca/d0f7b7ffbb0be1e7c2258b53554efec1fd652921f10d7d85045aff93ab61/kiwisolver-1.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:44756f9fd339de0fb6ee4f8c1696cfd19b2422e0d70b4cefc1cc7f1f64045a8c", size = 55877 }, - { url = "https://files.pythonhosted.org/packages/97/6c/cfcc128672f47a3e3c0d918ecb67830600078b025bfc32d858f2e2d5c6a4/kiwisolver-1.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:78a42513018c41c2ffd262eb676442315cbfe3c44eed82385c2ed043bc63210a", size = 48347 }, - { url = "https://files.pythonhosted.org/packages/e9/44/77429fa0a58f941d6e1c58da9efe08597d2e86bf2b2cce6626834f49d07b/kiwisolver-1.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d2b0e12a42fb4e72d509fc994713d099cbb15ebf1103545e8a45f14da2dfca54", size = 122442 }, - { url = "https://files.pythonhosted.org/packages/e5/20/8c75caed8f2462d63c7fd65e16c832b8f76cda331ac9e615e914ee80bac9/kiwisolver-1.4.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a8781ac3edc42ea4b90bc23e7d37b665d89423818e26eb6df90698aa2287c95", size = 65762 }, - { url = "https://files.pythonhosted.org/packages/f4/98/fe010f15dc7230f45bc4cf367b012d651367fd203caaa992fd1f5963560e/kiwisolver-1.4.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46707a10836894b559e04b0fd143e343945c97fd170d69a2d26d640b4e297935", size = 64319 }, - { url = "https://files.pythonhosted.org/packages/8b/1b/b5d618f4e58c0675654c1e5051bcf42c776703edb21c02b8c74135541f60/kiwisolver-1.4.7-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef97b8df011141c9b0f6caf23b29379f87dd13183c978a30a3c546d2c47314cb", size = 1334260 }, - { url = "https://files.pythonhosted.org/packages/b8/01/946852b13057a162a8c32c4c8d2e9ed79f0bb5d86569a40c0b5fb103e373/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab58c12a2cd0fc769089e6d38466c46d7f76aced0a1f54c77652446733d2d02", size = 1426589 }, - { url = "https://files.pythonhosted.org/packages/70/d1/c9f96df26b459e15cf8a965304e6e6f4eb291e0f7a9460b4ad97b047561e/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:803b8e1459341c1bb56d1c5c010406d5edec8a0713a0945851290a7930679b51", size = 1541080 }, - { url = "https://files.pythonhosted.org/packages/d3/73/2686990eb8b02d05f3de759d6a23a4ee7d491e659007dd4c075fede4b5d0/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9a9e8a507420fe35992ee9ecb302dab68550dedc0da9e2880dd88071c5fb052", size = 1470049 }, - { url = "https://files.pythonhosted.org/packages/a7/4b/2db7af3ed3af7c35f388d5f53c28e155cd402a55432d800c543dc6deb731/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18077b53dc3bb490e330669a99920c5e6a496889ae8c63b58fbc57c3d7f33a18", size = 1426376 }, - { url = "https://files.pythonhosted.org/packages/05/83/2857317d04ea46dc5d115f0df7e676997bbd968ced8e2bd6f7f19cfc8d7f/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6af936f79086a89b3680a280c47ea90b4df7047b5bdf3aa5c524bbedddb9e545", size = 2222231 }, - { url = "https://files.pythonhosted.org/packages/0d/b5/866f86f5897cd4ab6d25d22e403404766a123f138bd6a02ecb2cdde52c18/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3abc5b19d24af4b77d1598a585b8a719beb8569a71568b66f4ebe1fb0449460b", size = 2368634 }, - { url = "https://files.pythonhosted.org/packages/c1/ee/73de8385403faba55f782a41260210528fe3273d0cddcf6d51648202d6d0/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:933d4de052939d90afbe6e9d5273ae05fb836cc86c15b686edd4b3560cc0ee36", size = 2329024 }, - { url = "https://files.pythonhosted.org/packages/a1/e7/cd101d8cd2cdfaa42dc06c433df17c8303d31129c9fdd16c0ea37672af91/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:65e720d2ab2b53f1f72fb5da5fb477455905ce2c88aaa671ff0a447c2c80e8e3", size = 2468484 }, - { url = "https://files.pythonhosted.org/packages/e1/72/84f09d45a10bc57a40bb58b81b99d8f22b58b2040c912b7eb97ebf625bf2/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3bf1ed55088f214ba6427484c59553123fdd9b218a42bbc8c6496d6754b1e523", size = 2284078 }, - { url = "https://files.pythonhosted.org/packages/d2/d4/71828f32b956612dc36efd7be1788980cb1e66bfb3706e6dec9acad9b4f9/kiwisolver-1.4.7-cp311-cp311-win32.whl", hash = "sha256:4c00336b9dd5ad96d0a558fd18a8b6f711b7449acce4c157e7343ba92dd0cf3d", size = 46645 }, - { url = "https://files.pythonhosted.org/packages/a1/65/d43e9a20aabcf2e798ad1aff6c143ae3a42cf506754bcb6a7ed8259c8425/kiwisolver-1.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:929e294c1ac1e9f615c62a4e4313ca1823ba37326c164ec720a803287c4c499b", size = 56022 }, - { url = "https://files.pythonhosted.org/packages/35/b3/9f75a2e06f1b4ca00b2b192bc2b739334127d27f1d0625627ff8479302ba/kiwisolver-1.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:e33e8fbd440c917106b237ef1a2f1449dfbb9b6f6e1ce17c94cd6a1e0d438376", size = 48536 }, - { url = "https://files.pythonhosted.org/packages/97/9c/0a11c714cf8b6ef91001c8212c4ef207f772dd84540104952c45c1f0a249/kiwisolver-1.4.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:5360cc32706dab3931f738d3079652d20982511f7c0ac5711483e6eab08efff2", size = 121808 }, - { url = "https://files.pythonhosted.org/packages/f2/d8/0fe8c5f5d35878ddd135f44f2af0e4e1d379e1c7b0716f97cdcb88d4fd27/kiwisolver-1.4.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942216596dc64ddb25adb215c3c783215b23626f8d84e8eff8d6d45c3f29f75a", size = 65531 }, - { url = "https://files.pythonhosted.org/packages/80/c5/57fa58276dfdfa612241d640a64ca2f76adc6ffcebdbd135b4ef60095098/kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:48b571ecd8bae15702e4f22d3ff6a0f13e54d3d00cd25216d5e7f658242065ee", size = 63894 }, - { url = "https://files.pythonhosted.org/packages/8b/e9/26d3edd4c4ad1c5b891d8747a4f81b1b0aba9fb9721de6600a4adc09773b/kiwisolver-1.4.7-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad42ba922c67c5f219097b28fae965e10045ddf145d2928bfac2eb2e17673640", size = 1369296 }, - { url = "https://files.pythonhosted.org/packages/b6/67/3f4850b5e6cffb75ec40577ddf54f7b82b15269cc5097ff2e968ee32ea7d/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:612a10bdae23404a72941a0fc8fa2660c6ea1217c4ce0dbcab8a8f6543ea9e7f", size = 1461450 }, - { url = "https://files.pythonhosted.org/packages/52/be/86cbb9c9a315e98a8dc6b1d23c43cffd91d97d49318854f9c37b0e41cd68/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e838bba3a3bac0fe06d849d29772eb1afb9745a59710762e4ba3f4cb8424483", size = 1579168 }, - { url = "https://files.pythonhosted.org/packages/0f/00/65061acf64bd5fd34c1f4ae53f20b43b0a017a541f242a60b135b9d1e301/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22f499f6157236c19f4bbbd472fa55b063db77a16cd74d49afe28992dff8c258", size = 1507308 }, - { url = "https://files.pythonhosted.org/packages/21/e4/c0b6746fd2eb62fe702118b3ca0cb384ce95e1261cfada58ff693aeec08a/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e", size = 1464186 }, - { url = "https://files.pythonhosted.org/packages/0a/0f/529d0a9fffb4d514f2782c829b0b4b371f7f441d61aa55f1de1c614c4ef3/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4e77f2126c3e0b0d055f44513ed349038ac180371ed9b52fe96a32aa071a5107", size = 2247877 }, - { url = "https://files.pythonhosted.org/packages/d1/e1/66603ad779258843036d45adcbe1af0d1a889a07af4635f8b4ec7dccda35/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:657a05857bda581c3656bfc3b20e353c232e9193eb167766ad2dc58b56504948", size = 2404204 }, - { url = "https://files.pythonhosted.org/packages/8d/61/de5fb1ca7ad1f9ab7970e340a5b833d735df24689047de6ae71ab9d8d0e7/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4bfa75a048c056a411f9705856abfc872558e33c055d80af6a380e3658766038", size = 2352461 }, - { url = "https://files.pythonhosted.org/packages/ba/d2/0edc00a852e369827f7e05fd008275f550353f1f9bcd55db9363d779fc63/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:34ea1de54beef1c104422d210c47c7d2a4999bdecf42c7b5718fbe59a4cac383", size = 2501358 }, - { url = "https://files.pythonhosted.org/packages/84/15/adc15a483506aec6986c01fb7f237c3aec4d9ed4ac10b756e98a76835933/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:90da3b5f694b85231cf93586dad5e90e2d71b9428f9aad96952c99055582f520", size = 2314119 }, - { url = "https://files.pythonhosted.org/packages/36/08/3a5bb2c53c89660863a5aa1ee236912269f2af8762af04a2e11df851d7b2/kiwisolver-1.4.7-cp312-cp312-win32.whl", hash = "sha256:18e0cca3e008e17fe9b164b55735a325140a5a35faad8de92dd80265cd5eb80b", size = 46367 }, - { url = "https://files.pythonhosted.org/packages/19/93/c05f0a6d825c643779fc3c70876bff1ac221f0e31e6f701f0e9578690d70/kiwisolver-1.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb", size = 55884 }, - { url = "https://files.pythonhosted.org/packages/d2/f9/3828d8f21b6de4279f0667fb50a9f5215e6fe57d5ec0d61905914f5b6099/kiwisolver-1.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:f5a8b53bdc0b3961f8b6125e198617c40aeed638b387913bf1ce78afb1b0be2a", size = 48528 }, - { url = "https://files.pythonhosted.org/packages/c4/06/7da99b04259b0f18b557a4effd1b9c901a747f7fdd84cf834ccf520cb0b2/kiwisolver-1.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2e6039dcbe79a8e0f044f1c39db1986a1b8071051efba3ee4d74f5b365f5226e", size = 121913 }, - { url = "https://files.pythonhosted.org/packages/97/f5/b8a370d1aa593c17882af0a6f6755aaecd643640c0ed72dcfd2eafc388b9/kiwisolver-1.4.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a1ecf0ac1c518487d9d23b1cd7139a6a65bc460cd101ab01f1be82ecf09794b6", size = 65627 }, - { url = "https://files.pythonhosted.org/packages/2a/fc/6c0374f7503522539e2d4d1b497f5ebad3f8ed07ab51aed2af988dd0fb65/kiwisolver-1.4.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ab9ccab2b5bd5702ab0803676a580fffa2aa178c2badc5557a84cc943fcf750", size = 63888 }, - { url = "https://files.pythonhosted.org/packages/bf/3e/0b7172793d0f41cae5c923492da89a2ffcd1adf764c16159ca047463ebd3/kiwisolver-1.4.7-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f816dd2277f8d63d79f9c8473a79fe54047bc0467754962840782c575522224d", size = 1369145 }, - { url = "https://files.pythonhosted.org/packages/77/92/47d050d6f6aced2d634258123f2688fbfef8ded3c5baf2c79d94d91f1f58/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf8bcc23ceb5a1b624572a1623b9f79d2c3b337c8c455405ef231933a10da379", size = 1461448 }, - { url = "https://files.pythonhosted.org/packages/9c/1b/8f80b18e20b3b294546a1adb41701e79ae21915f4175f311a90d042301cf/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dea0bf229319828467d7fca8c7c189780aa9ff679c94539eed7532ebe33ed37c", size = 1578750 }, - { url = "https://files.pythonhosted.org/packages/a4/fe/fe8e72f3be0a844f257cadd72689c0848c6d5c51bc1d60429e2d14ad776e/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c06a4c7cf15ec739ce0e5971b26c93638730090add60e183530d70848ebdd34", size = 1507175 }, - { url = "https://files.pythonhosted.org/packages/39/fa/cdc0b6105d90eadc3bee525fecc9179e2b41e1ce0293caaf49cb631a6aaf/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913983ad2deb14e66d83c28b632fd35ba2b825031f2fa4ca29675e665dfecbe1", size = 1463963 }, - { url = "https://files.pythonhosted.org/packages/6e/5c/0c03c4e542720c6177d4f408e56d1c8315899db72d46261a4e15b8b33a41/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5337ec7809bcd0f424c6b705ecf97941c46279cf5ed92311782c7c9c2026f07f", size = 2248220 }, - { url = "https://files.pythonhosted.org/packages/3d/ee/55ef86d5a574f4e767df7da3a3a7ff4954c996e12d4fbe9c408170cd7dcc/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c26ed10c4f6fa6ddb329a5120ba3b6db349ca192ae211e882970bfc9d91420b", size = 2404463 }, - { url = "https://files.pythonhosted.org/packages/0f/6d/73ad36170b4bff4825dc588acf4f3e6319cb97cd1fb3eb04d9faa6b6f212/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c619b101e6de2222c1fcb0531e1b17bbffbe54294bfba43ea0d411d428618c27", size = 2352842 }, - { url = "https://files.pythonhosted.org/packages/0b/16/fa531ff9199d3b6473bb4d0f47416cdb08d556c03b8bc1cccf04e756b56d/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:073a36c8273647592ea332e816e75ef8da5c303236ec0167196793eb1e34657a", size = 2501635 }, - { url = "https://files.pythonhosted.org/packages/78/7e/aa9422e78419db0cbe75fb86d8e72b433818f2e62e2e394992d23d23a583/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3ce6b2b0231bda412463e152fc18335ba32faf4e8c23a754ad50ffa70e4091ee", size = 2314556 }, - { url = "https://files.pythonhosted.org/packages/a8/b2/15f7f556df0a6e5b3772a1e076a9d9f6c538ce5f05bd590eca8106508e06/kiwisolver-1.4.7-cp313-cp313-win32.whl", hash = "sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07", size = 46364 }, - { url = "https://files.pythonhosted.org/packages/0b/db/32e897e43a330eee8e4770bfd2737a9584b23e33587a0812b8e20aac38f7/kiwisolver-1.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76", size = 55887 }, - { url = "https://files.pythonhosted.org/packages/c8/a4/df2bdca5270ca85fd25253049eb6708d4127be2ed0e5c2650217450b59e9/kiwisolver-1.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650", size = 48530 }, - { url = "https://files.pythonhosted.org/packages/ac/59/741b79775d67ab67ced9bb38552da688c0305c16e7ee24bba7a2be253fb7/kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:94252291e3fe68001b1dd747b4c0b3be12582839b95ad4d1b641924d68fd4643", size = 59491 }, - { url = "https://files.pythonhosted.org/packages/58/cc/fb239294c29a5656e99e3527f7369b174dd9cc7c3ef2dea7cb3c54a8737b/kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b7dfa3b546da08a9f622bb6becdb14b3e24aaa30adba66749d38f3cc7ea9706", size = 57648 }, - { url = "https://files.pythonhosted.org/packages/3b/ef/2f009ac1f7aab9f81efb2d837301d255279d618d27b6015780115ac64bdd/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd3de6481f4ed8b734da5df134cd5a6a64fe32124fe83dde1e5b5f29fe30b1e6", size = 84257 }, - { url = "https://files.pythonhosted.org/packages/81/e1/c64f50987f85b68b1c52b464bb5bf73e71570c0f7782d626d1eb283ad620/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a91b5f9f1205845d488c928e8570dcb62b893372f63b8b6e98b863ebd2368ff2", size = 80906 }, - { url = "https://files.pythonhosted.org/packages/fd/71/1687c5c0a0be2cee39a5c9c389e546f9c6e215e46b691d00d9f646892083/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fa14dbd66b8b8f470d5fc79c089a66185619d31645f9b0773b88b19f7223c4", size = 79951 }, - { url = "https://files.pythonhosted.org/packages/ea/8b/d7497df4a1cae9367adf21665dd1f896c2a7aeb8769ad77b662c5e2bcce7/kiwisolver-1.4.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:eb542fe7933aa09d8d8f9d9097ef37532a7df6497819d16efe4359890a2f417a", size = 55715 }, -] - -[[package]] -name = "lark" -version = "1.2.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/af/60/bc7622aefb2aee1c0b4ba23c1446d3e30225c8770b38d7aedbfb65ca9d5a/lark-1.2.2.tar.gz", hash = "sha256:ca807d0162cd16cef15a8feecb862d7319e7a09bdb13aef927968e45040fed80", size = 252132 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2d/00/d90b10b962b4277f5e64a78b6609968859ff86889f5b898c1a778c06ec00/lark-1.2.2-py3-none-any.whl", hash = "sha256:c2276486b02f0f1b90be155f2c8ba4a8e194d42775786db622faccd652d8e80c", size = 111036 }, -] - -[[package]] -name = "lxml" -version = "5.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e7/6b/20c3a4b24751377aaa6307eb230b66701024012c29dd374999cc92983269/lxml-5.3.0.tar.gz", hash = "sha256:4e109ca30d1edec1ac60cdbe341905dc3b8f55b16855e03a54aaf59e51ec8c6f", size = 3679318 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a1/ce/2789e39eddf2b13fac29878bfa465f0910eb6b0096e29090e5176bc8cf43/lxml-5.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd36439be765e2dde7660212b5275641edbc813e7b24668831a5c8ac91180656", size = 8124570 }, - { url = "https://files.pythonhosted.org/packages/24/a8/f4010166a25d41715527129af2675981a50d3bbf7df09c5d9ab8ca24fbf9/lxml-5.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ae5fe5c4b525aa82b8076c1a59d642c17b6e8739ecf852522c6321852178119d", size = 4413042 }, - { url = "https://files.pythonhosted.org/packages/41/a4/7e45756cecdd7577ddf67a68b69c1db0f5ddbf0c9f65021ee769165ffc5a/lxml-5.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:501d0d7e26b4d261fca8132854d845e4988097611ba2531408ec91cf3fd9d20a", size = 5139213 }, - { url = "https://files.pythonhosted.org/packages/02/e2/ecf845b12323c92748077e1818b64e8b4dba509a4cb12920b3762ebe7552/lxml-5.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb66442c2546446944437df74379e9cf9e9db353e61301d1a0e26482f43f0dd8", size = 4838814 }, - { url = "https://files.pythonhosted.org/packages/12/91/619f9fb72cf75e9ceb8700706f7276f23995f6ad757e6d400fbe35ca4990/lxml-5.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e41506fec7a7f9405b14aa2d5c8abbb4dbbd09d88f9496958b6d00cb4d45330", size = 5425084 }, - { url = "https://files.pythonhosted.org/packages/25/3b/162a85a8f0fd2a3032ec3f936636911c6e9523a8e263fffcfd581ce98b54/lxml-5.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f7d4a670107d75dfe5ad080bed6c341d18c4442f9378c9f58e5851e86eb79965", size = 4875993 }, - { url = "https://files.pythonhosted.org/packages/43/af/dd3f58cc7d946da6ae42909629a2b1d5dd2d1b583334d4af9396697d6863/lxml-5.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41ce1f1e2c7755abfc7e759dc34d7d05fd221723ff822947132dc934d122fe22", size = 5012462 }, - { url = "https://files.pythonhosted.org/packages/69/c1/5ea46b2d4c98f5bf5c83fffab8a0ad293c9bc74df9ecfbafef10f77f7201/lxml-5.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:44264ecae91b30e5633013fb66f6ddd05c006d3e0e884f75ce0b4755b3e3847b", size = 4815288 }, - { url = "https://files.pythonhosted.org/packages/1d/51/a0acca077ad35da458f4d3f729ef98effd2b90f003440d35fc36323f8ae6/lxml-5.3.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:3c174dc350d3ec52deb77f2faf05c439331d6ed5e702fc247ccb4e6b62d884b7", size = 5472435 }, - { url = "https://files.pythonhosted.org/packages/4d/6b/0989c9368986961a6b0f55b46c80404c4b758417acdb6d87bfc3bd5f4967/lxml-5.3.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:2dfab5fa6a28a0b60a20638dc48e6343c02ea9933e3279ccb132f555a62323d8", size = 4976354 }, - { url = "https://files.pythonhosted.org/packages/05/9e/87492d03ff604fbf656ed2bf3e2e8d28f5d58ea1f00ff27ac27b06509079/lxml-5.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b1c8c20847b9f34e98080da785bb2336ea982e7f913eed5809e5a3c872900f32", size = 5029973 }, - { url = "https://files.pythonhosted.org/packages/f9/cc/9ae1baf5472af88e19e2c454b3710c1be9ecafb20eb474eeabcd88a055d2/lxml-5.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2c86bf781b12ba417f64f3422cfc302523ac9cd1d8ae8c0f92a1c66e56ef2e86", size = 4888837 }, - { url = "https://files.pythonhosted.org/packages/d2/10/5594ffaec8c120d75b17e3ad23439b740a51549a9b5fd7484b2179adfe8f/lxml-5.3.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c162b216070f280fa7da844531169be0baf9ccb17263cf5a8bf876fcd3117fa5", size = 5530555 }, - { url = "https://files.pythonhosted.org/packages/ea/9b/de17f05377c8833343b629905571fb06cff2028f15a6f58ae2267662e341/lxml-5.3.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:36aef61a1678cb778097b4a6eeae96a69875d51d1e8f4d4b491ab3cfb54b5a03", size = 5405314 }, - { url = "https://files.pythonhosted.org/packages/8a/b4/227be0f1f3cca8255925985164c3838b8b36e441ff0cc10c1d3c6bdba031/lxml-5.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f65e5120863c2b266dbcc927b306c5b78e502c71edf3295dfcb9501ec96e5fc7", size = 5079303 }, - { url = "https://files.pythonhosted.org/packages/5c/ee/19abcebb7fc40319bb71cd6adefa1ad94d09b5660228715854d6cc420713/lxml-5.3.0-cp310-cp310-win32.whl", hash = "sha256:ef0c1fe22171dd7c7c27147f2e9c3e86f8bdf473fed75f16b0c2e84a5030ce80", size = 3475126 }, - { url = "https://files.pythonhosted.org/packages/a1/35/183d32551447e280032b2331738cd850da435a42f850b71ebeaab42c1313/lxml-5.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:052d99051e77a4f3e8482c65014cf6372e61b0a6f4fe9edb98503bb5364cfee3", size = 3805065 }, - { url = "https://files.pythonhosted.org/packages/5c/a8/449faa2a3cbe6a99f8d38dcd51a3ee8844c17862841a6f769ea7c2a9cd0f/lxml-5.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74bcb423462233bc5d6066e4e98b0264e7c1bed7541fff2f4e34fe6b21563c8b", size = 8141056 }, - { url = "https://files.pythonhosted.org/packages/ac/8a/ae6325e994e2052de92f894363b038351c50ee38749d30cc6b6d96aaf90f/lxml-5.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a3d819eb6f9b8677f57f9664265d0a10dd6551d227afb4af2b9cd7bdc2ccbf18", size = 4425238 }, - { url = "https://files.pythonhosted.org/packages/f8/fb/128dddb7f9086236bce0eeae2bfb316d138b49b159f50bc681d56c1bdd19/lxml-5.3.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b8f5db71b28b8c404956ddf79575ea77aa8b1538e8b2ef9ec877945b3f46442", size = 5095197 }, - { url = "https://files.pythonhosted.org/packages/b4/f9/a181a8ef106e41e3086629c8bdb2d21a942f14c84a0e77452c22d6b22091/lxml-5.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3406b63232fc7e9b8783ab0b765d7c59e7c59ff96759d8ef9632fca27c7ee4", size = 4809809 }, - { url = "https://files.pythonhosted.org/packages/25/2f/b20565e808f7f6868aacea48ddcdd7e9e9fb4c799287f21f1a6c7c2e8b71/lxml-5.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ecdd78ab768f844c7a1d4a03595038c166b609f6395e25af9b0f3f26ae1230f", size = 5407593 }, - { url = "https://files.pythonhosted.org/packages/23/0e/caac672ec246d3189a16c4d364ed4f7d6bf856c080215382c06764058c08/lxml-5.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168f2dfcfdedf611eb285efac1516c8454c8c99caf271dccda8943576b67552e", size = 4866657 }, - { url = "https://files.pythonhosted.org/packages/67/a4/1f5fbd3f58d4069000522196b0b776a014f3feec1796da03e495cf23532d/lxml-5.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa617107a410245b8660028a7483b68e7914304a6d4882b5ff3d2d3eb5948d8c", size = 4967017 }, - { url = "https://files.pythonhosted.org/packages/ee/73/623ecea6ca3c530dd0a4ed0d00d9702e0e85cd5624e2d5b93b005fe00abd/lxml-5.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:69959bd3167b993e6e710b99051265654133a98f20cec1d9b493b931942e9c16", size = 4810730 }, - { url = "https://files.pythonhosted.org/packages/1d/ce/fb84fb8e3c298f3a245ae3ea6221c2426f1bbaa82d10a88787412a498145/lxml-5.3.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:bd96517ef76c8654446fc3db9242d019a1bb5fe8b751ba414765d59f99210b79", size = 5455154 }, - { url = "https://files.pythonhosted.org/packages/b1/72/4d1ad363748a72c7c0411c28be2b0dc7150d91e823eadad3b91a4514cbea/lxml-5.3.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:ab6dd83b970dc97c2d10bc71aa925b84788c7c05de30241b9e96f9b6d9ea3080", size = 4969416 }, - { url = "https://files.pythonhosted.org/packages/42/07/b29571a58a3a80681722ea8ed0ba569211d9bb8531ad49b5cacf6d409185/lxml-5.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:eec1bb8cdbba2925bedc887bc0609a80e599c75b12d87ae42ac23fd199445654", size = 5013672 }, - { url = "https://files.pythonhosted.org/packages/b9/93/bde740d5a58cf04cbd38e3dd93ad1e36c2f95553bbf7d57807bc6815d926/lxml-5.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a7095eeec6f89111d03dabfe5883a1fd54da319c94e0fb104ee8f23616b572d", size = 4878644 }, - { url = "https://files.pythonhosted.org/packages/56/b5/645c8c02721d49927c93181de4017164ec0e141413577687c3df8ff0800f/lxml-5.3.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6f651ebd0b21ec65dfca93aa629610a0dbc13dbc13554f19b0113da2e61a4763", size = 5511531 }, - { url = "https://files.pythonhosted.org/packages/85/3f/6a99a12d9438316f4fc86ef88c5d4c8fb674247b17f3173ecadd8346b671/lxml-5.3.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f422a209d2455c56849442ae42f25dbaaba1c6c3f501d58761c619c7836642ec", size = 5402065 }, - { url = "https://files.pythonhosted.org/packages/80/8a/df47bff6ad5ac57335bf552babfb2408f9eb680c074ec1ba412a1a6af2c5/lxml-5.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:62f7fdb0d1ed2065451f086519865b4c90aa19aed51081979ecd05a21eb4d1be", size = 5069775 }, - { url = "https://files.pythonhosted.org/packages/08/ae/e7ad0f0fbe4b6368c5ee1e3ef0c3365098d806d42379c46c1ba2802a52f7/lxml-5.3.0-cp311-cp311-win32.whl", hash = "sha256:c6379f35350b655fd817cd0d6cbeef7f265f3ae5fedb1caae2eb442bbeae9ab9", size = 3474226 }, - { url = "https://files.pythonhosted.org/packages/c3/b5/91c2249bfac02ee514ab135e9304b89d55967be7e53e94a879b74eec7a5c/lxml-5.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c52100e2c2dbb0649b90467935c4b0de5528833c76a35ea1a2691ec9f1ee7a1", size = 3814971 }, - { url = "https://files.pythonhosted.org/packages/eb/6d/d1f1c5e40c64bf62afd7a3f9b34ce18a586a1cccbf71e783cd0a6d8e8971/lxml-5.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e99f5507401436fdcc85036a2e7dc2e28d962550afe1cbfc07c40e454256a859", size = 8171753 }, - { url = "https://files.pythonhosted.org/packages/bd/83/26b1864921869784355459f374896dcf8b44d4af3b15d7697e9156cb2de9/lxml-5.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:384aacddf2e5813a36495233b64cb96b1949da72bef933918ba5c84e06af8f0e", size = 4441955 }, - { url = "https://files.pythonhosted.org/packages/e0/d2/e9bff9fb359226c25cda3538f664f54f2804f4b37b0d7c944639e1a51f69/lxml-5.3.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:874a216bf6afaf97c263b56371434e47e2c652d215788396f60477540298218f", size = 5050778 }, - { url = "https://files.pythonhosted.org/packages/88/69/6972bfafa8cd3ddc8562b126dd607011e218e17be313a8b1b9cc5a0ee876/lxml-5.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65ab5685d56914b9a2a34d67dd5488b83213d680b0c5d10b47f81da5a16b0b0e", size = 4748628 }, - { url = "https://files.pythonhosted.org/packages/5d/ea/a6523c7c7f6dc755a6eed3d2f6d6646617cad4d3d6d8ce4ed71bfd2362c8/lxml-5.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aac0bbd3e8dd2d9c45ceb82249e8bdd3ac99131a32b4d35c8af3cc9db1657179", size = 5322215 }, - { url = "https://files.pythonhosted.org/packages/99/37/396fbd24a70f62b31d988e4500f2068c7f3fd399d2fd45257d13eab51a6f/lxml-5.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b369d3db3c22ed14c75ccd5af429086f166a19627e84a8fdade3f8f31426e52a", size = 4813963 }, - { url = "https://files.pythonhosted.org/packages/09/91/e6136f17459a11ce1757df864b213efbeab7adcb2efa63efb1b846ab6723/lxml-5.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c24037349665434f375645fa9d1f5304800cec574d0310f618490c871fd902b3", size = 4923353 }, - { url = "https://files.pythonhosted.org/packages/1d/7c/2eeecf87c9a1fca4f84f991067c693e67340f2b7127fc3eca8fa29d75ee3/lxml-5.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:62d172f358f33a26d6b41b28c170c63886742f5b6772a42b59b4f0fa10526cb1", size = 4740541 }, - { url = "https://files.pythonhosted.org/packages/3b/ed/4c38ba58defca84f5f0d0ac2480fdcd99fc7ae4b28fc417c93640a6949ae/lxml-5.3.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:c1f794c02903c2824fccce5b20c339a1a14b114e83b306ff11b597c5f71a1c8d", size = 5346504 }, - { url = "https://files.pythonhosted.org/packages/a5/22/bbd3995437e5745cb4c2b5d89088d70ab19d4feabf8a27a24cecb9745464/lxml-5.3.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:5d6a6972b93c426ace71e0be9a6f4b2cfae9b1baed2eed2006076a746692288c", size = 4898077 }, - { url = "https://files.pythonhosted.org/packages/0a/6e/94537acfb5b8f18235d13186d247bca478fea5e87d224644e0fe907df976/lxml-5.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:3879cc6ce938ff4eb4900d901ed63555c778731a96365e53fadb36437a131a99", size = 4946543 }, - { url = "https://files.pythonhosted.org/packages/8d/e8/4b15df533fe8e8d53363b23a41df9be907330e1fa28c7ca36893fad338ee/lxml-5.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:74068c601baff6ff021c70f0935b0c7bc528baa8ea210c202e03757c68c5a4ff", size = 4816841 }, - { url = "https://files.pythonhosted.org/packages/1a/e7/03f390ea37d1acda50bc538feb5b2bda6745b25731e4e76ab48fae7106bf/lxml-5.3.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ecd4ad8453ac17bc7ba3868371bffb46f628161ad0eefbd0a855d2c8c32dd81a", size = 5417341 }, - { url = "https://files.pythonhosted.org/packages/ea/99/d1133ab4c250da85a883c3b60249d3d3e7c64f24faff494cf0fd23f91e80/lxml-5.3.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7e2f58095acc211eb9d8b5771bf04df9ff37d6b87618d1cbf85f92399c98dae8", size = 5327539 }, - { url = "https://files.pythonhosted.org/packages/7d/ed/e6276c8d9668028213df01f598f385b05b55a4e1b4662ee12ef05dab35aa/lxml-5.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e63601ad5cd8f860aa99d109889b5ac34de571c7ee902d6812d5d9ddcc77fa7d", size = 5012542 }, - { url = "https://files.pythonhosted.org/packages/36/88/684d4e800f5aa28df2a991a6a622783fb73cf0e46235cfa690f9776f032e/lxml-5.3.0-cp312-cp312-win32.whl", hash = "sha256:17e8d968d04a37c50ad9c456a286b525d78c4a1c15dd53aa46c1d8e06bf6fa30", size = 3486454 }, - { url = "https://files.pythonhosted.org/packages/fc/82/ace5a5676051e60355bd8fb945df7b1ba4f4fb8447f2010fb816bfd57724/lxml-5.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:c1a69e58a6bb2de65902051d57fde951febad631a20a64572677a1052690482f", size = 3816857 }, - { url = "https://files.pythonhosted.org/packages/94/6a/42141e4d373903bfea6f8e94b2f554d05506dfda522ada5343c651410dc8/lxml-5.3.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c72e9563347c7395910de6a3100a4840a75a6f60e05af5e58566868d5eb2d6a", size = 8156284 }, - { url = "https://files.pythonhosted.org/packages/91/5e/fa097f0f7d8b3d113fb7312c6308af702f2667f22644441715be961f2c7e/lxml-5.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e92ce66cd919d18d14b3856906a61d3f6b6a8500e0794142338da644260595cd", size = 4432407 }, - { url = "https://files.pythonhosted.org/packages/2d/a1/b901988aa6d4ff937f2e5cfc114e4ec561901ff00660c3e56713642728da/lxml-5.3.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d04f064bebdfef9240478f7a779e8c5dc32b8b7b0b2fc6a62e39b928d428e51", size = 5048331 }, - { url = "https://files.pythonhosted.org/packages/30/0f/b2a54f48e52de578b71bbe2a2f8160672a8a5e103df3a78da53907e8c7ed/lxml-5.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c2fb570d7823c2bbaf8b419ba6e5662137f8166e364a8b2b91051a1fb40ab8b", size = 4744835 }, - { url = "https://files.pythonhosted.org/packages/82/9d/b000c15538b60934589e83826ecbc437a1586488d7c13f8ee5ff1f79a9b8/lxml-5.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c120f43553ec759f8de1fee2f4794452b0946773299d44c36bfe18e83caf002", size = 5316649 }, - { url = "https://files.pythonhosted.org/packages/e3/ee/ffbb9eaff5e541922611d2c56b175c45893d1c0b8b11e5a497708a6a3b3b/lxml-5.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:562e7494778a69086f0312ec9689f6b6ac1c6b65670ed7d0267e49f57ffa08c4", size = 4812046 }, - { url = "https://files.pythonhosted.org/packages/15/ff/7ff89d567485c7b943cdac316087f16b2399a8b997007ed352a1248397e5/lxml-5.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:423b121f7e6fa514ba0c7918e56955a1d4470ed35faa03e3d9f0e3baa4c7e492", size = 4918597 }, - { url = "https://files.pythonhosted.org/packages/c6/a3/535b6ed8c048412ff51268bdf4bf1cf052a37aa7e31d2e6518038a883b29/lxml-5.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c00f323cc00576df6165cc9d21a4c21285fa6b9989c5c39830c3903dc4303ef3", size = 4738071 }, - { url = "https://files.pythonhosted.org/packages/7a/8f/cbbfa59cb4d4fd677fe183725a76d8c956495d7a3c7f111ab8f5e13d2e83/lxml-5.3.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:1fdc9fae8dd4c763e8a31e7630afef517eab9f5d5d31a278df087f307bf601f4", size = 5342213 }, - { url = "https://files.pythonhosted.org/packages/5c/fb/db4c10dd9958d4b52e34d1d1f7c1f434422aeaf6ae2bbaaff2264351d944/lxml-5.3.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:658f2aa69d31e09699705949b5fc4719cbecbd4a97f9656a232e7d6c7be1a367", size = 4893749 }, - { url = "https://files.pythonhosted.org/packages/f2/38/bb4581c143957c47740de18a3281a0cab7722390a77cc6e610e8ebf2d736/lxml-5.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1473427aff3d66a3fa2199004c3e601e6c4500ab86696edffdbc84954c72d832", size = 4945901 }, - { url = "https://files.pythonhosted.org/packages/fc/d5/18b7de4960c731e98037bd48fa9f8e6e8f2558e6fbca4303d9b14d21ef3b/lxml-5.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a87de7dd873bf9a792bf1e58b1c3887b9264036629a5bf2d2e6579fe8e73edff", size = 4815447 }, - { url = "https://files.pythonhosted.org/packages/97/a8/cd51ceaad6eb849246559a8ef60ae55065a3df550fc5fcd27014361c1bab/lxml-5.3.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0d7b36afa46c97875303a94e8f3ad932bf78bace9e18e603f2085b652422edcd", size = 5411186 }, - { url = "https://files.pythonhosted.org/packages/89/c3/1e3dabab519481ed7b1fdcba21dcfb8832f57000733ef0e71cf6d09a5e03/lxml-5.3.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:cf120cce539453ae086eacc0130a324e7026113510efa83ab42ef3fcfccac7fb", size = 5324481 }, - { url = "https://files.pythonhosted.org/packages/b6/17/71e9984cf0570cd202ac0a1c9ed5c1b8889b0fc8dc736f5ef0ffb181c284/lxml-5.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:df5c7333167b9674aa8ae1d4008fa4bc17a313cc490b2cca27838bbdcc6bb15b", size = 5011053 }, - { url = "https://files.pythonhosted.org/packages/69/68/9f7e6d3312a91e30829368c2b3217e750adef12a6f8eb10498249f4e8d72/lxml-5.3.0-cp313-cp313-win32.whl", hash = "sha256:c802e1c2ed9f0c06a65bc4ed0189d000ada8049312cfeab6ca635e39c9608957", size = 3485634 }, - { url = "https://files.pythonhosted.org/packages/7d/db/214290d58ad68c587bd5d6af3d34e56830438733d0d0856c0275fde43652/lxml-5.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:406246b96d552e0503e17a1006fd27edac678b3fcc9f1be71a2f94b4ff61528d", size = 3814417 }, - { url = "https://files.pythonhosted.org/packages/99/f7/b73a431c8500565aa500e99e60b448d305eaf7c0b4c893c7c5a8a69cc595/lxml-5.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7b1cd427cb0d5f7393c31b7496419da594fe600e6fdc4b105a54f82405e6626c", size = 3925431 }, - { url = "https://files.pythonhosted.org/packages/db/48/4a206623c0d093d0e3b15f415ffb4345b0bdf661a3d0b15a112948c033c7/lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51806cfe0279e06ed8500ce19479d757db42a30fd509940b1701be9c86a5ff9a", size = 4216683 }, - { url = "https://files.pythonhosted.org/packages/54/47/577820c45dd954523ae8453b632d91e76da94ca6d9ee40d8c98dd86f916b/lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee70d08fd60c9565ba8190f41a46a54096afa0eeb8f76bd66f2c25d3b1b83005", size = 4326732 }, - { url = "https://files.pythonhosted.org/packages/68/de/96cb6d3269bc994b4f5ede8ca7bf0840f5de0a278bc6e50cb317ff71cafa/lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:8dc2c0395bea8254d8daebc76dcf8eb3a95ec2a46fa6fae5eaccee366bfe02ce", size = 4218377 }, - { url = "https://files.pythonhosted.org/packages/a5/43/19b1ef6cbffa4244a217f95cc5f41a6cb4720fed33510a49670b03c5f1a0/lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6ba0d3dcac281aad8a0e5b14c7ed6f9fa89c8612b47939fc94f80b16e2e9bc83", size = 4351237 }, - { url = "https://files.pythonhosted.org/packages/ba/b2/6a22fb5c0885da3b00e116aee81f0b829ec9ac8f736cd414b4a09413fc7d/lxml-5.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:6e91cf736959057f7aac7adfc83481e03615a8e8dd5758aa1d95ea69e8931dba", size = 3487557 }, -] - -[[package]] -name = "markupsafe" -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 }, -] - -[[package]] -name = "matplotlib" -version = "3.9.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "contourpy" }, - { name = "cycler" }, - { name = "fonttools" }, - { name = "kiwisolver" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "pillow" }, - { name = "pyparsing" }, - { name = "python-dateutil" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/75/9f/562ed484b11ac9f4bb4f9d2d7546954ec106a8c0f06cc755d6f63e519274/matplotlib-3.9.3.tar.gz", hash = "sha256:cd5dbbc8e25cad5f706845c4d100e2c8b34691b412b93717ce38d8ae803bcfa5", size = 36113438 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/09/c993dc1b2311228ddaaf3f963c57fed6f3e39957823fa269532896566dd7/matplotlib-3.9.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:41b016e3be4e740b66c79a031a0a6e145728dbc248142e751e8dab4f3188ca1d", size = 7877008 }, - { url = "https://files.pythonhosted.org/packages/18/a7/c1aa0bb4c9391d854e0abf55f75e1c46acb4f1b0fbc2692ad7f75ac44030/matplotlib-3.9.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e0143975fc2a6d7136c97e19c637321288371e8f09cff2564ecd73e865ea0b9", size = 7762521 }, - { url = "https://files.pythonhosted.org/packages/da/84/427a8ef8f3a00bc6f49edc82142c79f8fa0a1b2421dcfacede76b227cb64/matplotlib-3.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f459c8ee2c086455744723628264e43c884be0c7d7b45d84b8cd981310b4815", size = 8192058 }, - { url = "https://files.pythonhosted.org/packages/4a/86/bb508f20bdda70b5e7afdc15065ea8a4a5ce12d5f5822fa58cf3bc31e8fc/matplotlib-3.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:687df7ceff57b8f070d02b4db66f75566370e7ae182a0782b6d3d21b0d6917dc", size = 8304632 }, - { url = "https://files.pythonhosted.org/packages/25/45/7a8bfa0e7365d1b9a767b1f0611c5c94e783bfdbc8fb0a7e9a4436fc790e/matplotlib-3.9.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:edd14cf733fdc4f6e6fe3f705af97676a7e52859bf0044aa2c84e55be739241c", size = 9082543 }, - { url = "https://files.pythonhosted.org/packages/3c/cc/5dad07bf804a6e0250301c95d36d4c972689fd72757b438c0fd319ea789e/matplotlib-3.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:1c40c244221a1adbb1256692b1133c6fb89418df27bf759a31a333e7912a4010", size = 7820157 }, - { url = "https://files.pythonhosted.org/packages/12/ac/66ac58c42aad9ac0ed665746a8a36ecbd16a6c908527c305f9504c04fc2c/matplotlib-3.9.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:cf2a60daf6cecff6828bc608df00dbc794380e7234d2411c0ec612811f01969d", size = 7886350 }, - { url = "https://files.pythonhosted.org/packages/db/43/1274be2b1922858c7a43f0d6e00571fe24696788c7b5a8c980127af24a96/matplotlib-3.9.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:213d6dc25ce686516208d8a3e91120c6a4fdae4a3e06b8505ced5b716b50cc04", size = 7771966 }, - { url = "https://files.pythonhosted.org/packages/5f/89/f1bcc6b62707df427a5e6a34be59191da81d96e63d3f92cb61e948bcbca7/matplotlib-3.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c52f48eb75fcc119a4fdb68ba83eb5f71656999420375df7c94cc68e0e14686e", size = 8201827 }, - { url = "https://files.pythonhosted.org/packages/13/53/b178d51478109f7a700edc94757dd07112e9a0c7a158653b99434b74f9fb/matplotlib-3.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3c93796b44fa111049b88a24105e947f03c01966b5c0cc782e2ee3887b790a3", size = 8314794 }, - { url = "https://files.pythonhosted.org/packages/d6/57/d0ef6cef13ed0f55e37472cc458f2f1f8c4fe9aac69f794be7ccd0702d03/matplotlib-3.9.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cd1077b9a09b16d8c3c7075a8add5ffbfe6a69156a57e290c800ed4d435bef1d", size = 9091489 }, - { url = "https://files.pythonhosted.org/packages/33/97/40a1bed11f7817ba553afd2e7662e7364e3bac7ce4040835391eb558c86e/matplotlib-3.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:c96eeeb8c68b662c7747f91a385688d4b449687d29b691eff7068a4602fe6dc4", size = 7829997 }, - { url = "https://files.pythonhosted.org/packages/74/d5/eb2338d21b2d36511f9417230413fa0c30fc82283b33dc0e3643969f3b50/matplotlib-3.9.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0a361bd5583bf0bcc08841df3c10269617ee2a36b99ac39d455a767da908bbbc", size = 7883049 }, - { url = "https://files.pythonhosted.org/packages/e5/52/3910833a073e7182ab3ae03810ed418f71c7fdcd65e2862cda1c6a14ffc1/matplotlib-3.9.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e14485bb1b83eeb3d55b6878f9560240981e7bbc7a8d4e1e8c38b9bd6ec8d2de", size = 7768285 }, - { url = "https://files.pythonhosted.org/packages/92/67/69df4b6636e40e964788b003535561ea3e98e33e46df4d96fa8c34ef99e6/matplotlib-3.9.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a8d279f78844aad213c4935c18f8292a9432d51af2d88bca99072c903948045", size = 8192626 }, - { url = "https://files.pythonhosted.org/packages/40/d6/70a196b0cf62e0a5bc64ccab07816ab4f6c98db0414a55280331a481a5bf/matplotlib-3.9.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6c12514329ac0d03128cf1dcceb335f4fbf7c11da98bca68dca8dcb983153a9", size = 8305687 }, - { url = "https://files.pythonhosted.org/packages/c3/43/ef6ab78dd2d8eb362c1e5a31f9cec5ece5761e6143a519153d716d85e590/matplotlib-3.9.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6e9de2b390d253a508dd497e9b5579f3a851f208763ed67fdca5dc0c3ea6849c", size = 9087208 }, - { url = "https://files.pythonhosted.org/packages/30/cb/36844affc69490652b5a99296b9fcee530b96621e23d3143a4839f30fb22/matplotlib-3.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:d796272408f8567ff7eaa00eb2856b3a00524490e47ad505b0b4ca6bb8a7411f", size = 7833105 }, - { url = "https://files.pythonhosted.org/packages/60/04/949640040982822416c471d9ebe4e9e6c69ca9f9bb6ba82ed30808863c02/matplotlib-3.9.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:203d18df84f5288973b2d56de63d4678cc748250026ca9e1ad8f8a0fd8a75d83", size = 7883417 }, - { url = "https://files.pythonhosted.org/packages/9f/90/ebd37143cd3150b6c650ee1580024df3dd649d176e68d346f826b8d24e37/matplotlib-3.9.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b651b0d3642991259109dc0351fc33ad44c624801367bb8307be9bfc35e427ad", size = 7768720 }, - { url = "https://files.pythonhosted.org/packages/dc/84/6591e6b55d755d16dacdc113205067031867c1f5e3c08b32c01aad831420/matplotlib-3.9.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:66d7b171fecf96940ce069923a08ba3df33ef542de82c2ff4fe8caa8346fa95a", size = 8192723 }, - { url = "https://files.pythonhosted.org/packages/29/09/146a17d37e32313507f11ac984e65311f2d5805d731eb981d4f70eb928dc/matplotlib-3.9.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6be0ba61f6ff2e6b68e4270fb63b6813c9e7dec3d15fc3a93f47480444fd72f0", size = 8305801 }, - { url = "https://files.pythonhosted.org/packages/85/cb/d2690572c08f19ca7c0f44b1fb4d11c121d63467a57b508cc3656ff80b43/matplotlib-3.9.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d6b2e8856dec3a6db1ae51aec85c82223e834b228c1d3228aede87eee2b34f9", size = 9086564 }, - { url = "https://files.pythonhosted.org/packages/28/dd/0a5176027c1cb94fe75f69f76cb274180c8abf740df6fc0e6a1e4cbaec3f/matplotlib-3.9.3-cp313-cp313-win_amd64.whl", hash = "sha256:90a85a004fefed9e583597478420bf904bb1a065b0b0ee5b9d8d31b04b0f3f70", size = 7833257 }, - { url = "https://files.pythonhosted.org/packages/42/d4/e477d50a8e4b437c2afbb5c665cb8e5d79b06abe6fe3c6915d6f7f0c2ef2/matplotlib-3.9.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3119b2f16de7f7b9212ba76d8fe6a0e9f90b27a1e04683cd89833a991682f639", size = 7911906 }, - { url = "https://files.pythonhosted.org/packages/ae/a1/ba5ab89666c42ace8e31b4ff5a2c76a17e4d6f91aefce476b064c56ff61d/matplotlib-3.9.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:87ad73763d93add1b6c1f9fcd33af662fd62ed70e620c52fcb79f3ac427cf3a6", size = 7801336 }, - { url = "https://files.pythonhosted.org/packages/77/59/4dcdb3a6695af6c698a95aec13016a550ef2f85144d22f61f81d1e064148/matplotlib-3.9.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:026bdf3137ab6022c866efa4813b6bbeddc2ed4c9e7e02f0e323a7bca380dfa0", size = 8218178 }, - { url = "https://files.pythonhosted.org/packages/4f/27/7c72db0d0ee35d9237572565ffa3c0eb25fc46a3f47e0f16412a587bc9d8/matplotlib-3.9.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:760a5e89ebbb172989e8273024a1024b0f084510b9105261b3b00c15e9c9f006", size = 8327768 }, - { url = "https://files.pythonhosted.org/packages/de/ad/213eee624feadba7b77e881c9d2c04c1e036efe69d19031e3fa927fdb5dc/matplotlib-3.9.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a42b9dc42de2cfe357efa27d9c50c7833fc5ab9b2eb7252ccd5d5f836a84e1e4", size = 9094075 }, - { url = "https://files.pythonhosted.org/packages/19/1b/cb8e99a5fe2e2b14e3b8234cb1649a675be63f74a5224a648ae4ab61f60c/matplotlib-3.9.3-cp313-cp313t-win_amd64.whl", hash = "sha256:e0fcb7da73fbf67b5f4bdaa57d85bb585a4e913d4a10f3e15b32baea56a67f0a", size = 7888937 }, -] - -[[package]] -name = "more-itertools" -version = "10.5.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/51/78/65922308c4248e0eb08ebcbe67c95d48615cc6f27854b6f2e57143e9178f/more-itertools-10.5.0.tar.gz", hash = "sha256:5482bfef7849c25dc3c6dd53a6173ae4795da2a41a80faea6700d9f5846c5da6", size = 121020 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl", hash = "sha256:037b0d3203ce90cca8ab1defbbdac29d5f993fc20131f3664dc8d6acfa872aef", size = 60952 }, -] - -[[package]] -name = "mpmath" -version = "1.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198 }, -] - -[[package]] -name = "mqt-bench" -version = "1.1.9" -source = { directory = "../" } -dependencies = [ - { name = "joblib" }, - { name = "networkx" }, - { name = "numpy" }, - { name = "pytket" }, - { name = "pytket-qiskit" }, - { name = "qiskit" }, - { name = "qiskit-finance" }, - { name = "qiskit-nature", extra = ["pyscf"] }, - { name = "qiskit-optimization" }, -] - -[package.metadata] -requires-dist = [ - { name = "furo", marker = "extra == 'docs'", specifier = ">=2023.9.10" }, - { name = "ipykernel", marker = "extra == 'docs'" }, - { name = "ipython", marker = "extra == 'docs'" }, - { name = "joblib", specifier = ">=1.3.0" }, - { name = "mqt-bench", extras = ["coverage", "docs"], marker = "extra == 'dev'" }, - { name = "mqt-bench", extras = ["test"], marker = "extra == 'coverage'" }, - { name = "nbsphinx", marker = "extra == 'docs'" }, - { name = "networkx", specifier = ">=2.8.8" }, - { name = "numpy", specifier = ">=1.22" }, - { name = "numpy", marker = "python_full_version >= '3.11'", specifier = ">=1.24" }, - { name = "numpy", marker = "python_full_version >= '3.12'", specifier = ">=1.26" }, - { name = "pytest", marker = "extra == 'test'", specifier = ">=7.2" }, - { name = "pytest-console-scripts", marker = "extra == 'test'", specifier = ">=1.4" }, - { name = "pytest-cov", marker = "extra == 'coverage'", specifier = ">=4" }, - { name = "pytket", specifier = ">=1.29.0" }, - { name = "pytket-qiskit", specifier = ">=0.53.0" }, - { name = "qiskit", specifier = "!=1.2.0" }, - { name = "qiskit", extras = ["visualization"], marker = "extra == 'docs'" }, - { name = "qiskit-finance", specifier = ">=0.4.1" }, - { name = "qiskit-nature", extras = ["pyscf"], specifier = ">=0.7" }, - { name = "qiskit-optimization", specifier = ">=0.6" }, - { name = "setuptools-scm", marker = "extra == 'docs'", specifier = ">=8.1" }, - { name = "sphinx-autoapi", marker = "extra == 'docs'", specifier = ">=3" }, - { name = "sphinx-autodoc-typehints", marker = "extra == 'docs'" }, - { name = "sphinx-copybutton", marker = "extra == 'docs'", specifier = ">=0.5" }, - { name = "sphinx-design", marker = "extra == 'docs'", specifier = ">=0.6" }, - { name = "sphinxcontrib-bibtex", marker = "extra == 'docs'", specifier = ">=2.4.2" }, - { name = "sphinxcontrib-svg2pdfconverter", marker = "extra == 'docs'", specifier = ">=1.2" }, - { name = "sphinxext-opengraph", marker = "extra == 'docs'", specifier = ">=0.9" }, -] - -[[package]] -name = "mqt-bench-evaluation" -version = "1.0.0" -source = { editable = "." } -dependencies = [ - { name = "matplotlib" }, - { name = "mqt-bench" }, - { name = "pandas" }, - { name = "seaborn" }, -] - -[package.metadata] -requires-dist = [ - { name = "matplotlib", specifier = ">=3.9.2" }, - { name = "mqt-bench", directory = "../" }, - { name = "pandas", specifier = ">=2.2.3" }, - { name = "seaborn", specifier = ">=0.13.2" }, -] - -[[package]] -name = "multitasking" -version = "0.0.11" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6f/75/345e196762fc51fb5b4e9504631972b1271a0cb2ba1ce2afe5b185c95b64/multitasking-0.0.11.tar.gz", hash = "sha256:4d6bc3cc65f9b2dca72fb5a787850a88dae8f620c2b36ae9b55248e51bcd6026", size = 8150 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3e/8a/bb3160e76e844db9e69a413f055818969c8acade64e1a9ac5ce9dfdcf6c1/multitasking-0.0.11-py3-none-any.whl", hash = "sha256:1e5b37a5f8fc1e6cfaafd1a82b6b1cc6d2ed20037d3b89c25a84f499bd7b3dd4", size = 8533 }, -] - -[[package]] -name = "nasdaq-data-link" -version = "1.0.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "inflection" }, - { name = "more-itertools" }, - { name = "numpy" }, - { name = "pandas" }, - { name = "python-dateutil" }, - { name = "requests" }, - { name = "six" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/2a/f3c908206b530b93beaa90f0c645868a864bf7516fc0f0f5ed38f8f59fa1/Nasdaq_Data_Link-1.0.4-py2.py3-none-any.whl", hash = "sha256:214a620551da1c7521476839fb96f932234d4d78e7ba44310722709ca37b0691", size = 28127 }, -] - -[[package]] -name = "networkx" -version = "3.4.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f", size = 1723263 }, -] - -[[package]] -name = "numpy" -version = "2.1.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/25/ca/1166b75c21abd1da445b97bf1fa2f14f423c6cfb4fc7c4ef31dccf9f6a94/numpy-2.1.3.tar.gz", hash = "sha256:aa08e04e08aaf974d4458def539dece0d28146d866a39da5639596f4921fd761", size = 20166090 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/80/d572a4737626372915bca41c3afbfec9d173561a39a0a61bacbbfd1dafd4/numpy-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c894b4305373b9c5576d7a12b473702afdf48ce5369c074ba304cc5ad8730dff", size = 21152472 }, - { url = "https://files.pythonhosted.org/packages/6f/bb/7bfba10c791ae3bb6716da77ad85a82d5fac07fc96fb0023ef0571df9d20/numpy-2.1.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b47fbb433d3260adcd51eb54f92a2ffbc90a4595f8970ee00e064c644ac788f5", size = 13747967 }, - { url = "https://files.pythonhosted.org/packages/da/d6/2df7bde35f0478455f0be5934877b3e5a505f587b00230f54a519a6b55a5/numpy-2.1.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:825656d0743699c529c5943554d223c021ff0494ff1442152ce887ef4f7561a1", size = 5354921 }, - { url = "https://files.pythonhosted.org/packages/d1/bb/75b945874f931494891eac6ca06a1764d0e8208791f3addadb2963b83527/numpy-2.1.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:6a4825252fcc430a182ac4dee5a505053d262c807f8a924603d411f6718b88fd", size = 6888603 }, - { url = "https://files.pythonhosted.org/packages/68/a7/fde73636f6498dbfa6d82fc336164635fe592f1ad0d13285fcb6267fdc1c/numpy-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e711e02f49e176a01d0349d82cb5f05ba4db7d5e7e0defd026328e5cfb3226d3", size = 13889862 }, - { url = "https://files.pythonhosted.org/packages/05/db/5d9c91b2e1e2e72be1369278f696356d44975befcae830daf2e667dcb54f/numpy-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78574ac2d1a4a02421f25da9559850d59457bac82f2b8d7a44fe83a64f770098", size = 16328151 }, - { url = "https://files.pythonhosted.org/packages/3e/6a/7eb732109b53ae64a29e25d7e68eb9d6611037f6354875497008a49e74d3/numpy-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c7662f0e3673fe4e832fe07b65c50342ea27d989f92c80355658c7f888fcc83c", size = 16704107 }, - { url = "https://files.pythonhosted.org/packages/88/cc/278113b66a1141053cbda6f80e4200c6da06b3079c2d27bda1fde41f2c1f/numpy-2.1.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fa2d1337dc61c8dc417fbccf20f6d1e139896a30721b7f1e832b2bb6ef4eb6c4", size = 14385789 }, - { url = "https://files.pythonhosted.org/packages/f5/69/eb20f5e1bfa07449bc67574d2f0f7c1e6b335fb41672e43861a7727d85f2/numpy-2.1.3-cp310-cp310-win32.whl", hash = "sha256:72dcc4a35a8515d83e76b58fdf8113a5c969ccd505c8a946759b24e3182d1f23", size = 6536706 }, - { url = "https://files.pythonhosted.org/packages/8e/8b/1c131ab5a94c1086c289c6e1da1d843de9dbd95fe5f5ee6e61904c9518e2/numpy-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:ecc76a9ba2911d8d37ac01de72834d8849e55473457558e12995f4cd53e778e0", size = 12864165 }, - { url = "https://files.pythonhosted.org/packages/ad/81/c8167192eba5247593cd9d305ac236847c2912ff39e11402e72ae28a4985/numpy-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4d1167c53b93f1f5d8a139a742b3c6f4d429b54e74e6b57d0eff40045187b15d", size = 21156252 }, - { url = "https://files.pythonhosted.org/packages/da/74/5a60003fc3d8a718d830b08b654d0eea2d2db0806bab8f3c2aca7e18e010/numpy-2.1.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c80e4a09b3d95b4e1cac08643f1152fa71a0a821a2d4277334c88d54b2219a41", size = 13784119 }, - { url = "https://files.pythonhosted.org/packages/47/7c/864cb966b96fce5e63fcf25e1e4d957fe5725a635e5f11fe03f39dd9d6b5/numpy-2.1.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:576a1c1d25e9e02ed7fa5477f30a127fe56debd53b8d2c89d5578f9857d03ca9", size = 5352978 }, - { url = "https://files.pythonhosted.org/packages/09/ac/61d07930a4993dd9691a6432de16d93bbe6aa4b1c12a5e573d468eefc1ca/numpy-2.1.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:973faafebaae4c0aaa1a1ca1ce02434554d67e628b8d805e61f874b84e136b09", size = 6892570 }, - { url = "https://files.pythonhosted.org/packages/27/2f/21b94664f23af2bb52030653697c685022119e0dc93d6097c3cb45bce5f9/numpy-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:762479be47a4863e261a840e8e01608d124ee1361e48b96916f38b119cfda04a", size = 13896715 }, - { url = "https://files.pythonhosted.org/packages/7a/f0/80811e836484262b236c684a75dfc4ba0424bc670e765afaa911468d9f39/numpy-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc6f24b3d1ecc1eebfbf5d6051faa49af40b03be1aaa781ebdadcbc090b4539b", size = 16339644 }, - { url = "https://files.pythonhosted.org/packages/fa/81/ce213159a1ed8eb7d88a2a6ef4fbdb9e4ffd0c76b866c350eb4e3c37e640/numpy-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:17ee83a1f4fef3c94d16dc1802b998668b5419362c8a4f4e8a491de1b41cc3ee", size = 16712217 }, - { url = "https://files.pythonhosted.org/packages/7d/84/4de0b87d5a72f45556b2a8ee9fc8801e8518ec867fc68260c1f5dcb3903f/numpy-2.1.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15cb89f39fa6d0bdfb600ea24b250e5f1a3df23f901f51c8debaa6a5d122b2f0", size = 14399053 }, - { url = "https://files.pythonhosted.org/packages/7e/1c/e5fabb9ad849f9d798b44458fd12a318d27592d4bc1448e269dec070ff04/numpy-2.1.3-cp311-cp311-win32.whl", hash = "sha256:d9beb777a78c331580705326d2367488d5bc473b49a9bc3036c154832520aca9", size = 6534741 }, - { url = "https://files.pythonhosted.org/packages/1e/48/a9a4b538e28f854bfb62e1dea3c8fea12e90216a276c7777ae5345ff29a7/numpy-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:d89dd2b6da69c4fff5e39c28a382199ddedc3a5be5390115608345dec660b9e2", size = 12869487 }, - { url = "https://files.pythonhosted.org/packages/8a/f0/385eb9970309643cbca4fc6eebc8bb16e560de129c91258dfaa18498da8b/numpy-2.1.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f55ba01150f52b1027829b50d70ef1dafd9821ea82905b63936668403c3b471e", size = 20849658 }, - { url = "https://files.pythonhosted.org/packages/54/4a/765b4607f0fecbb239638d610d04ec0a0ded9b4951c56dc68cef79026abf/numpy-2.1.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13138eadd4f4da03074851a698ffa7e405f41a0845a6b1ad135b81596e4e9958", size = 13492258 }, - { url = "https://files.pythonhosted.org/packages/bd/a7/2332679479c70b68dccbf4a8eb9c9b5ee383164b161bee9284ac141fbd33/numpy-2.1.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a6b46587b14b888e95e4a24d7b13ae91fa22386c199ee7b418f449032b2fa3b8", size = 5090249 }, - { url = "https://files.pythonhosted.org/packages/c1/67/4aa00316b3b981a822c7a239d3a8135be2a6945d1fd11d0efb25d361711a/numpy-2.1.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:0fa14563cc46422e99daef53d725d0c326e99e468a9320a240affffe87852564", size = 6621704 }, - { url = "https://files.pythonhosted.org/packages/5e/da/1a429ae58b3b6c364eeec93bf044c532f2ff7b48a52e41050896cf15d5b1/numpy-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8637dcd2caa676e475503d1f8fdb327bc495554e10838019651b76d17b98e512", size = 13606089 }, - { url = "https://files.pythonhosted.org/packages/9e/3e/3757f304c704f2f0294a6b8340fcf2be244038be07da4cccf390fa678a9f/numpy-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2312b2aa89e1f43ecea6da6ea9a810d06aae08321609d8dc0d0eda6d946a541b", size = 16043185 }, - { url = "https://files.pythonhosted.org/packages/43/97/75329c28fea3113d00c8d2daf9bc5828d58d78ed661d8e05e234f86f0f6d/numpy-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a38c19106902bb19351b83802531fea19dee18e5b37b36454f27f11ff956f7fc", size = 16410751 }, - { url = "https://files.pythonhosted.org/packages/ad/7a/442965e98b34e0ae9da319f075b387bcb9a1e0658276cc63adb8c9686f7b/numpy-2.1.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02135ade8b8a84011cbb67dc44e07c58f28575cf9ecf8ab304e51c05528c19f0", size = 14082705 }, - { url = "https://files.pythonhosted.org/packages/ac/b6/26108cf2cfa5c7e03fb969b595c93131eab4a399762b51ce9ebec2332e80/numpy-2.1.3-cp312-cp312-win32.whl", hash = "sha256:e6988e90fcf617da2b5c78902fe8e668361b43b4fe26dbf2d7b0f8034d4cafb9", size = 6239077 }, - { url = "https://files.pythonhosted.org/packages/a6/84/fa11dad3404b7634aaab50733581ce11e5350383311ea7a7010f464c0170/numpy-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:0d30c543f02e84e92c4b1f415b7c6b5326cbe45ee7882b6b77db7195fb971e3a", size = 12566858 }, - { url = "https://files.pythonhosted.org/packages/4d/0b/620591441457e25f3404c8057eb924d04f161244cb8a3680d529419aa86e/numpy-2.1.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96fe52fcdb9345b7cd82ecd34547fca4321f7656d500eca497eb7ea5a926692f", size = 20836263 }, - { url = "https://files.pythonhosted.org/packages/45/e1/210b2d8b31ce9119145433e6ea78046e30771de3fe353f313b2778142f34/numpy-2.1.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f653490b33e9c3a4c1c01d41bc2aef08f9475af51146e4a7710c450cf9761598", size = 13507771 }, - { url = "https://files.pythonhosted.org/packages/55/44/aa9ee3caee02fa5a45f2c3b95cafe59c44e4b278fbbf895a93e88b308555/numpy-2.1.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:dc258a761a16daa791081d026f0ed4399b582712e6fc887a95af09df10c5ca57", size = 5075805 }, - { url = "https://files.pythonhosted.org/packages/78/d6/61de6e7e31915ba4d87bbe1ae859e83e6582ea14c6add07c8f7eefd8488f/numpy-2.1.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:016d0f6f5e77b0f0d45d77387ffa4bb89816b57c835580c3ce8e099ef830befe", size = 6608380 }, - { url = "https://files.pythonhosted.org/packages/3e/46/48bdf9b7241e317e6cf94276fe11ba673c06d1fdf115d8b4ebf616affd1a/numpy-2.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c181ba05ce8299c7aa3125c27b9c2167bca4a4445b7ce73d5febc411ca692e43", size = 13602451 }, - { url = "https://files.pythonhosted.org/packages/70/50/73f9a5aa0810cdccda9c1d20be3cbe4a4d6ea6bfd6931464a44c95eef731/numpy-2.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5641516794ca9e5f8a4d17bb45446998c6554704d888f86df9b200e66bdcce56", size = 16039822 }, - { url = "https://files.pythonhosted.org/packages/ad/cd/098bc1d5a5bc5307cfc65ee9369d0ca658ed88fbd7307b0d49fab6ca5fa5/numpy-2.1.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ea4dedd6e394a9c180b33c2c872b92f7ce0f8e7ad93e9585312b0c5a04777a4a", size = 16411822 }, - { url = "https://files.pythonhosted.org/packages/83/a2/7d4467a2a6d984549053b37945620209e702cf96a8bc658bc04bba13c9e2/numpy-2.1.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0df3635b9c8ef48bd3be5f862cf71b0a4716fa0e702155c45067c6b711ddcef", size = 14079598 }, - { url = "https://files.pythonhosted.org/packages/e9/6a/d64514dcecb2ee70bfdfad10c42b76cab657e7ee31944ff7a600f141d9e9/numpy-2.1.3-cp313-cp313-win32.whl", hash = "sha256:50ca6aba6e163363f132b5c101ba078b8cbd3fa92c7865fd7d4d62d9779ac29f", size = 6236021 }, - { url = "https://files.pythonhosted.org/packages/bb/f9/12297ed8d8301a401e7d8eb6b418d32547f1d700ed3c038d325a605421a4/numpy-2.1.3-cp313-cp313-win_amd64.whl", hash = "sha256:747641635d3d44bcb380d950679462fae44f54b131be347d5ec2bce47d3df9ed", size = 12560405 }, - { url = "https://files.pythonhosted.org/packages/a7/45/7f9244cd792e163b334e3a7f02dff1239d2890b6f37ebf9e82cbe17debc0/numpy-2.1.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:996bb9399059c5b82f76b53ff8bb686069c05acc94656bb259b1d63d04a9506f", size = 20859062 }, - { url = "https://files.pythonhosted.org/packages/b1/b4/a084218e7e92b506d634105b13e27a3a6645312b93e1c699cc9025adb0e1/numpy-2.1.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:45966d859916ad02b779706bb43b954281db43e185015df6eb3323120188f9e4", size = 13515839 }, - { url = "https://files.pythonhosted.org/packages/27/45/58ed3f88028dcf80e6ea580311dc3edefdd94248f5770deb980500ef85dd/numpy-2.1.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:baed7e8d7481bfe0874b566850cb0b85243e982388b7b23348c6db2ee2b2ae8e", size = 5116031 }, - { url = "https://files.pythonhosted.org/packages/37/a8/eb689432eb977d83229094b58b0f53249d2209742f7de529c49d61a124a0/numpy-2.1.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:a9f7f672a3388133335589cfca93ed468509cb7b93ba3105fce780d04a6576a0", size = 6629977 }, - { url = "https://files.pythonhosted.org/packages/42/a3/5355ad51ac73c23334c7caaed01adadfda49544f646fcbfbb4331deb267b/numpy-2.1.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7aac50327da5d208db2eec22eb11e491e3fe13d22653dce51b0f4109101b408", size = 13575951 }, - { url = "https://files.pythonhosted.org/packages/c4/70/ea9646d203104e647988cb7d7279f135257a6b7e3354ea6c56f8bafdb095/numpy-2.1.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4394bc0dbd074b7f9b52024832d16e019decebf86caf909d94f6b3f77a8ee3b6", size = 16022655 }, - { url = "https://files.pythonhosted.org/packages/14/ce/7fc0612903e91ff9d0b3f2eda4e18ef9904814afcae5b0f08edb7f637883/numpy-2.1.3-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:50d18c4358a0a8a53f12a8ba9d772ab2d460321e6a93d6064fc22443d189853f", size = 16399902 }, - { url = "https://files.pythonhosted.org/packages/ef/62/1d3204313357591c913c32132a28f09a26357e33ea3c4e2fe81269e0dca1/numpy-2.1.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:14e253bd43fc6b37af4921b10f6add6925878a42a0c5fe83daee390bca80bc17", size = 14067180 }, - { url = "https://files.pythonhosted.org/packages/24/d7/78a40ed1d80e23a774cb8a34ae8a9493ba1b4271dde96e56ccdbab1620ef/numpy-2.1.3-cp313-cp313t-win32.whl", hash = "sha256:08788d27a5fd867a663f6fc753fd7c3ad7e92747efc73c53bca2f19f8bc06f48", size = 6291907 }, - { url = "https://files.pythonhosted.org/packages/86/09/a5ab407bd7f5f5599e6a9261f964ace03a73e7c6928de906981c31c38082/numpy-2.1.3-cp313-cp313t-win_amd64.whl", hash = "sha256:2564fbdf2b99b3f815f2107c1bbc93e2de8ee655a69c261363a1172a79a257d4", size = 12644098 }, - { url = "https://files.pythonhosted.org/packages/00/e7/8d8bb791b62586cc432ecbb70632b4f23b7b7c88df41878de7528264f6d7/numpy-2.1.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4f2015dfe437dfebbfce7c85c7b53d81ba49e71ba7eadbf1df40c915af75979f", size = 20983893 }, - { url = "https://files.pythonhosted.org/packages/5e/f3/cb8118a044b5007586245a650360c9f5915b2f4232dd7658bb7a63dd1d02/numpy-2.1.3-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:3522b0dfe983a575e6a9ab3a4a4dfe156c3e428468ff08ce582b9bb6bd1d71d4", size = 6752501 }, - { url = "https://files.pythonhosted.org/packages/53/f5/365b46439b518d2ec6ebb880cc0edf90f225145dfd4db7958334f7164530/numpy-2.1.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c006b607a865b07cd981ccb218a04fc86b600411d83d6fc261357f1c0966755d", size = 16142601 }, - { url = "https://files.pythonhosted.org/packages/03/c2/d1fee6ba999aa7cd41ca6856937f2baaf604c3eec1565eae63451ec31e5e/numpy-2.1.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e14e26956e6f1696070788252dcdff11b4aca4c3e8bd166e0df1bb8f315a67cb", size = 12771397 }, -] - -[[package]] -name = "packaging" -version = "24.2" -source = { registry = "https://pypi.org/simple" } -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/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 }, -] - -[[package]] -name = "pandas" -version = "2.2.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, - { name = "python-dateutil" }, - { name = "pytz" }, - { name = "tzdata" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/9f8431bacc2e19dca897724cd097b1bb224a6ad5433784a44b587c7c13af/pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", size = 4399213 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/aa/70/c853aec59839bceed032d52010ff5f1b8d87dc3114b762e4ba2727661a3b/pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5", size = 12580827 }, - { url = "https://files.pythonhosted.org/packages/99/f2/c4527768739ffa4469b2b4fff05aa3768a478aed89a2f271a79a40eee984/pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348", size = 11303897 }, - { url = "https://files.pythonhosted.org/packages/ed/12/86c1747ea27989d7a4064f806ce2bae2c6d575b950be087837bdfcabacc9/pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed", size = 66480908 }, - { url = "https://files.pythonhosted.org/packages/44/50/7db2cd5e6373ae796f0ddad3675268c8d59fb6076e66f0c339d61cea886b/pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57", size = 13064210 }, - { url = "https://files.pythonhosted.org/packages/61/61/a89015a6d5536cb0d6c3ba02cebed51a95538cf83472975275e28ebf7d0c/pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42", size = 16754292 }, - { url = "https://files.pythonhosted.org/packages/ce/0d/4cc7b69ce37fac07645a94e1d4b0880b15999494372c1523508511b09e40/pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f", size = 14416379 }, - { url = "https://files.pythonhosted.org/packages/31/9e/6ebb433de864a6cd45716af52a4d7a8c3c9aaf3a98368e61db9e69e69a9c/pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645", size = 11598471 }, - { url = "https://files.pythonhosted.org/packages/a8/44/d9502bf0ed197ba9bf1103c9867d5904ddcaf869e52329787fc54ed70cc8/pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039", size = 12602222 }, - { url = "https://files.pythonhosted.org/packages/52/11/9eac327a38834f162b8250aab32a6781339c69afe7574368fffe46387edf/pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd", size = 11321274 }, - { url = "https://files.pythonhosted.org/packages/45/fb/c4beeb084718598ba19aa9f5abbc8aed8b42f90930da861fcb1acdb54c3a/pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698", size = 15579836 }, - { url = "https://files.pythonhosted.org/packages/cd/5f/4dba1d39bb9c38d574a9a22548c540177f78ea47b32f99c0ff2ec499fac5/pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc", size = 13058505 }, - { url = "https://files.pythonhosted.org/packages/b9/57/708135b90391995361636634df1f1130d03ba456e95bcf576fada459115a/pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3", size = 16744420 }, - { url = "https://files.pythonhosted.org/packages/86/4a/03ed6b7ee323cf30404265c284cee9c65c56a212e0a08d9ee06984ba2240/pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32", size = 14440457 }, - { url = "https://files.pythonhosted.org/packages/ed/8c/87ddf1fcb55d11f9f847e3c69bb1c6f8e46e2f40ab1a2d2abadb2401b007/pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5", size = 11617166 }, - { url = "https://files.pythonhosted.org/packages/17/a3/fb2734118db0af37ea7433f57f722c0a56687e14b14690edff0cdb4b7e58/pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9", size = 12529893 }, - { url = "https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4", size = 11363475 }, - { url = "https://files.pythonhosted.org/packages/c6/2a/4bba3f03f7d07207481fed47f5b35f556c7441acddc368ec43d6643c5777/pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3", size = 15188645 }, - { url = "https://files.pythonhosted.org/packages/38/f8/d8fddee9ed0d0c0f4a2132c1dfcf0e3e53265055da8df952a53e7eaf178c/pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319", size = 12739445 }, - { url = "https://files.pythonhosted.org/packages/20/e8/45a05d9c39d2cea61ab175dbe6a2de1d05b679e8de2011da4ee190d7e748/pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8", size = 16359235 }, - { url = "https://files.pythonhosted.org/packages/1d/99/617d07a6a5e429ff90c90da64d428516605a1ec7d7bea494235e1c3882de/pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a", size = 14056756 }, - { url = "https://files.pythonhosted.org/packages/29/d4/1244ab8edf173a10fd601f7e13b9566c1b525c4f365d6bee918e68381889/pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13", size = 11504248 }, - { url = "https://files.pythonhosted.org/packages/64/22/3b8f4e0ed70644e85cfdcd57454686b9057c6c38d2f74fe4b8bc2527214a/pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015", size = 12477643 }, - { url = "https://files.pythonhosted.org/packages/e4/93/b3f5d1838500e22c8d793625da672f3eec046b1a99257666c94446969282/pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28", size = 11281573 }, - { url = "https://files.pythonhosted.org/packages/f5/94/6c79b07f0e5aab1dcfa35a75f4817f5c4f677931d4234afcd75f0e6a66ca/pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0", size = 15196085 }, - { url = "https://files.pythonhosted.org/packages/e8/31/aa8da88ca0eadbabd0a639788a6da13bb2ff6edbbb9f29aa786450a30a91/pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24", size = 12711809 }, - { url = "https://files.pythonhosted.org/packages/ee/7c/c6dbdb0cb2a4344cacfb8de1c5808ca885b2e4dcfde8008266608f9372af/pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659", size = 16356316 }, - { url = "https://files.pythonhosted.org/packages/57/b7/8b757e7d92023b832869fa8881a992696a0bfe2e26f72c9ae9f255988d42/pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb", size = 14022055 }, - { url = "https://files.pythonhosted.org/packages/3b/bc/4b18e2b8c002572c5a441a64826252ce5da2aa738855747247a971988043/pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d", size = 11481175 }, - { url = "https://files.pythonhosted.org/packages/76/a3/a5d88146815e972d40d19247b2c162e88213ef51c7c25993942c39dbf41d/pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468", size = 12615650 }, - { url = "https://files.pythonhosted.org/packages/9c/8c/f0fd18f6140ddafc0c24122c8a964e48294acc579d47def376fef12bcb4a/pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18", size = 11290177 }, - { url = "https://files.pythonhosted.org/packages/ed/f9/e995754eab9c0f14c6777401f7eece0943840b7a9fc932221c19d1abee9f/pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2", size = 14651526 }, - { url = "https://files.pythonhosted.org/packages/25/b0/98d6ae2e1abac4f35230aa756005e8654649d305df9a28b16b9ae4353bff/pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4", size = 11871013 }, - { url = "https://files.pythonhosted.org/packages/cc/57/0f72a10f9db6a4628744c8e8f0df4e6e21de01212c7c981d31e50ffc8328/pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d", size = 15711620 }, - { url = "https://files.pythonhosted.org/packages/ab/5f/b38085618b950b79d2d9164a711c52b10aefc0ae6833b96f626b7021b2ed/pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", size = 13098436 }, -] - -[[package]] -name = "pbr" -version = "6.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/35/80cf8f6a4f34017a7fe28242dc45161a1baa55c41563c354d8147e8358b2/pbr-6.1.0.tar.gz", hash = "sha256:788183e382e3d1d7707db08978239965e8b9e4e5ed42669bf4758186734d5f24", size = 124032 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/44/6a65ecd630393d47ad3e7d5354768cb7f9a10b3a0eb2cd8c6f52b28211ee/pbr-6.1.0-py2.py3-none-any.whl", hash = "sha256:a776ae228892d8013649c0aeccbb3d5f99ee15e005a4cbb7e61d55a067b28a2a", size = 108529 }, -] - -[[package]] -name = "peewee" -version = "3.17.8" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b4/dc/832bcf4ea5ee2ebc4ea42ef36e44a451de5d80f8b9858bf2066e30738c67/peewee-3.17.8.tar.gz", hash = "sha256:ce1d05db3438830b989a1b9d0d0aa4e7f6134d5f6fd57686eeaa26a3e6485a8c", size = 948249 } - -[[package]] -name = "pillow" -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/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 }, -] - -[[package]] -name = "platformdirs" -version = "4.3.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/13/fc/128cc9cb8f03208bdbf93d3aa862e16d376844a14f9a0ce5cf4507372de4/platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907", size = 21302 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb", size = 18439 }, -] - -[[package]] -name = "psutil" -version = "6.1.0" -source = { registry = "https://pypi.org/simple" } -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/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]] -name = "pycparser" -version = "2.22" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 }, -] - -[[package]] -name = "pydantic" -version = "2.10.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "annotated-types" }, - { name = "pydantic-core" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/41/86/a03390cb12cf64e2a8df07c267f3eb8d5035e0f9a04bb20fb79403d2a00e/pydantic-2.10.2.tar.gz", hash = "sha256:2bc2d7f17232e0841cbba4641e65ba1eb6fafb3a08de3a091ff3ce14a197c4fa", size = 785401 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d5/74/da832196702d0c56eb86b75bfa346db9238617e29b0b7ee3b8b4eccfe654/pydantic-2.10.2-py3-none-any.whl", hash = "sha256:cfb96e45951117c3024e6b67b25cdc33a3cb7b2fa62e239f7af1378358a1d99e", size = 456364 }, -] - -[[package]] -name = "pydantic-core" -version = "2.27.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a6/9f/7de1f19b6aea45aeb441838782d68352e71bfa98ee6fa048d5041991b33e/pydantic_core-2.27.1.tar.gz", hash = "sha256:62a763352879b84aa31058fc931884055fd75089cccbd9d58bb6afd01141b235", size = 412785 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6e/ce/60fd96895c09738648c83f3f00f595c807cb6735c70d3306b548cc96dd49/pydantic_core-2.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:71a5e35c75c021aaf400ac048dacc855f000bdfed91614b4a726f7432f1f3d6a", size = 1897984 }, - { url = "https://files.pythonhosted.org/packages/fd/b9/84623d6b6be98cc209b06687d9bca5a7b966ffed008d15225dd0d20cce2e/pydantic_core-2.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f82d068a2d6ecfc6e054726080af69a6764a10015467d7d7b9f66d6ed5afa23b", size = 1807491 }, - { url = "https://files.pythonhosted.org/packages/01/72/59a70165eabbc93b1111d42df9ca016a4aa109409db04304829377947028/pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:121ceb0e822f79163dd4699e4c54f5ad38b157084d97b34de8b232bcaad70278", size = 1831953 }, - { url = "https://files.pythonhosted.org/packages/7c/0c/24841136476adafd26f94b45bb718a78cb0500bd7b4f8d667b67c29d7b0d/pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4603137322c18eaf2e06a4495f426aa8d8388940f3c457e7548145011bb68e05", size = 1856071 }, - { url = "https://files.pythonhosted.org/packages/53/5e/c32957a09cceb2af10d7642df45d1e3dbd8596061f700eac93b801de53c0/pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a33cd6ad9017bbeaa9ed78a2e0752c5e250eafb9534f308e7a5f7849b0b1bfb4", size = 2038439 }, - { url = "https://files.pythonhosted.org/packages/e4/8f/979ab3eccd118b638cd6d8f980fea8794f45018255a36044dea40fe579d4/pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15cc53a3179ba0fcefe1e3ae50beb2784dede4003ad2dfd24f81bba4b23a454f", size = 2787416 }, - { url = "https://files.pythonhosted.org/packages/02/1d/00f2e4626565b3b6d3690dab4d4fe1a26edd6a20e53749eb21ca892ef2df/pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45d9c5eb9273aa50999ad6adc6be5e0ecea7e09dbd0d31bd0c65a55a2592ca08", size = 2134548 }, - { url = "https://files.pythonhosted.org/packages/9d/46/3112621204128b90898adc2e721a3cd6cf5626504178d6f32c33b5a43b79/pydantic_core-2.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8bf7b66ce12a2ac52d16f776b31d16d91033150266eb796967a7e4621707e4f6", size = 1989882 }, - { url = "https://files.pythonhosted.org/packages/49/ec/557dd4ff5287ffffdf16a31d08d723de6762bb1b691879dc4423392309bc/pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:655d7dd86f26cb15ce8a431036f66ce0318648f8853d709b4167786ec2fa4807", size = 1995829 }, - { url = "https://files.pythonhosted.org/packages/6e/b2/610dbeb74d8d43921a7234555e4c091cb050a2bdb8cfea86d07791ce01c5/pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:5556470f1a2157031e676f776c2bc20acd34c1990ca5f7e56f1ebf938b9ab57c", size = 2091257 }, - { url = "https://files.pythonhosted.org/packages/8c/7f/4bf8e9d26a9118521c80b229291fa9558a07cdd9a968ec2d5c1026f14fbc/pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f69ed81ab24d5a3bd93861c8c4436f54afdf8e8cc421562b0c7504cf3be58206", size = 2143894 }, - { url = "https://files.pythonhosted.org/packages/1f/1c/875ac7139c958f4390f23656fe696d1acc8edf45fb81e4831960f12cd6e4/pydantic_core-2.27.1-cp310-none-win32.whl", hash = "sha256:f5a823165e6d04ccea61a9f0576f345f8ce40ed533013580e087bd4d7442b52c", size = 1816081 }, - { url = "https://files.pythonhosted.org/packages/d7/41/55a117acaeda25ceae51030b518032934f251b1dac3704a53781383e3491/pydantic_core-2.27.1-cp310-none-win_amd64.whl", hash = "sha256:57866a76e0b3823e0b56692d1a0bf722bffb324839bb5b7226a7dbd6c9a40b17", size = 1981109 }, - { url = "https://files.pythonhosted.org/packages/27/39/46fe47f2ad4746b478ba89c561cafe4428e02b3573df882334bd2964f9cb/pydantic_core-2.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac3b20653bdbe160febbea8aa6c079d3df19310d50ac314911ed8cc4eb7f8cb8", size = 1895553 }, - { url = "https://files.pythonhosted.org/packages/1c/00/0804e84a78b7fdb394fff4c4f429815a10e5e0993e6ae0e0b27dd20379ee/pydantic_core-2.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a5a8e19d7c707c4cadb8c18f5f60c843052ae83c20fa7d44f41594c644a1d330", size = 1807220 }, - { url = "https://files.pythonhosted.org/packages/01/de/df51b3bac9820d38371f5a261020f505025df732ce566c2a2e7970b84c8c/pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f7059ca8d64fea7f238994c97d91f75965216bcbe5f695bb44f354893f11d52", size = 1829727 }, - { url = "https://files.pythonhosted.org/packages/5f/d9/c01d19da8f9e9fbdb2bf99f8358d145a312590374d0dc9dd8dbe484a9cde/pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bed0f8a0eeea9fb72937ba118f9db0cb7e90773462af7962d382445f3005e5a4", size = 1854282 }, - { url = "https://files.pythonhosted.org/packages/5f/84/7db66eb12a0dc88c006abd6f3cbbf4232d26adfd827a28638c540d8f871d/pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3cb37038123447cf0f3ea4c74751f6a9d7afef0eb71aa07bf5f652b5e6a132c", size = 2037437 }, - { url = "https://files.pythonhosted.org/packages/34/ac/a2537958db8299fbabed81167d58cc1506049dba4163433524e06a7d9f4c/pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84286494f6c5d05243456e04223d5a9417d7f443c3b76065e75001beb26f88de", size = 2780899 }, - { url = "https://files.pythonhosted.org/packages/4a/c1/3e38cd777ef832c4fdce11d204592e135ddeedb6c6f525478a53d1c7d3e5/pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acc07b2cfc5b835444b44a9956846b578d27beeacd4b52e45489e93276241025", size = 2135022 }, - { url = "https://files.pythonhosted.org/packages/7a/69/b9952829f80fd555fe04340539d90e000a146f2a003d3fcd1e7077c06c71/pydantic_core-2.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4fefee876e07a6e9aad7a8c8c9f85b0cdbe7df52b8a9552307b09050f7512c7e", size = 1987969 }, - { url = "https://files.pythonhosted.org/packages/05/72/257b5824d7988af43460c4e22b63932ed651fe98804cc2793068de7ec554/pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:258c57abf1188926c774a4c94dd29237e77eda19462e5bb901d88adcab6af919", size = 1994625 }, - { url = "https://files.pythonhosted.org/packages/73/c3/78ed6b7f3278a36589bcdd01243189ade7fc9b26852844938b4d7693895b/pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:35c14ac45fcfdf7167ca76cc80b2001205a8d5d16d80524e13508371fb8cdd9c", size = 2090089 }, - { url = "https://files.pythonhosted.org/packages/8d/c8/b4139b2f78579960353c4cd987e035108c93a78371bb19ba0dc1ac3b3220/pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d1b26e1dff225c31897696cab7d4f0a315d4c0d9e8666dbffdb28216f3b17fdc", size = 2142496 }, - { url = "https://files.pythonhosted.org/packages/3e/f8/171a03e97eb36c0b51981efe0f78460554a1d8311773d3d30e20c005164e/pydantic_core-2.27.1-cp311-none-win32.whl", hash = "sha256:2cdf7d86886bc6982354862204ae3b2f7f96f21a3eb0ba5ca0ac42c7b38598b9", size = 1811758 }, - { url = "https://files.pythonhosted.org/packages/6a/fe/4e0e63c418c1c76e33974a05266e5633e879d4061f9533b1706a86f77d5b/pydantic_core-2.27.1-cp311-none-win_amd64.whl", hash = "sha256:3af385b0cee8df3746c3f406f38bcbfdc9041b5c2d5ce3e5fc6637256e60bbc5", size = 1980864 }, - { url = "https://files.pythonhosted.org/packages/50/fc/93f7238a514c155a8ec02fc7ac6376177d449848115e4519b853820436c5/pydantic_core-2.27.1-cp311-none-win_arm64.whl", hash = "sha256:81f2ec23ddc1b476ff96563f2e8d723830b06dceae348ce02914a37cb4e74b89", size = 1864327 }, - { url = "https://files.pythonhosted.org/packages/be/51/2e9b3788feb2aebff2aa9dfbf060ec739b38c05c46847601134cc1fed2ea/pydantic_core-2.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9cbd94fc661d2bab2bc702cddd2d3370bbdcc4cd0f8f57488a81bcce90c7a54f", size = 1895239 }, - { url = "https://files.pythonhosted.org/packages/7b/9e/f8063952e4a7d0127f5d1181addef9377505dcce3be224263b25c4f0bfd9/pydantic_core-2.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5f8c4718cd44ec1580e180cb739713ecda2bdee1341084c1467802a417fe0f02", size = 1805070 }, - { url = "https://files.pythonhosted.org/packages/2c/9d/e1d6c4561d262b52e41b17a7ef8301e2ba80b61e32e94520271029feb5d8/pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15aae984e46de8d376df515f00450d1522077254ef6b7ce189b38ecee7c9677c", size = 1828096 }, - { url = "https://files.pythonhosted.org/packages/be/65/80ff46de4266560baa4332ae3181fffc4488ea7d37282da1a62d10ab89a4/pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ba5e3963344ff25fc8c40da90f44b0afca8cfd89d12964feb79ac1411a260ac", size = 1857708 }, - { url = "https://files.pythonhosted.org/packages/d5/ca/3370074ad758b04d9562b12ecdb088597f4d9d13893a48a583fb47682cdf/pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:992cea5f4f3b29d6b4f7f1726ed8ee46c8331c6b4eed6db5b40134c6fe1768bb", size = 2037751 }, - { url = "https://files.pythonhosted.org/packages/b1/e2/4ab72d93367194317b99d051947c071aef6e3eb95f7553eaa4208ecf9ba4/pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0325336f348dbee6550d129b1627cb8f5351a9dc91aad141ffb96d4937bd9529", size = 2733863 }, - { url = "https://files.pythonhosted.org/packages/8a/c6/8ae0831bf77f356bb73127ce5a95fe115b10f820ea480abbd72d3cc7ccf3/pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7597c07fbd11515f654d6ece3d0e4e5093edc30a436c63142d9a4b8e22f19c35", size = 2161161 }, - { url = "https://files.pythonhosted.org/packages/f1/f4/b2fe73241da2429400fc27ddeaa43e35562f96cf5b67499b2de52b528cad/pydantic_core-2.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3bbd5d8cc692616d5ef6fbbbd50dbec142c7e6ad9beb66b78a96e9c16729b089", size = 1993294 }, - { url = "https://files.pythonhosted.org/packages/77/29/4bb008823a7f4cc05828198153f9753b3bd4c104d93b8e0b1bfe4e187540/pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:dc61505e73298a84a2f317255fcc72b710b72980f3a1f670447a21efc88f8381", size = 2001468 }, - { url = "https://files.pythonhosted.org/packages/f2/a9/0eaceeba41b9fad851a4107e0cf999a34ae8f0d0d1f829e2574f3d8897b0/pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:e1f735dc43da318cad19b4173dd1ffce1d84aafd6c9b782b3abc04a0d5a6f5bb", size = 2091413 }, - { url = "https://files.pythonhosted.org/packages/d8/36/eb8697729725bc610fd73940f0d860d791dc2ad557faaefcbb3edbd2b349/pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f4e5658dbffe8843a0f12366a4c2d1c316dbe09bb4dfbdc9d2d9cd6031de8aae", size = 2154735 }, - { url = "https://files.pythonhosted.org/packages/52/e5/4f0fbd5c5995cc70d3afed1b5c754055bb67908f55b5cb8000f7112749bf/pydantic_core-2.27.1-cp312-none-win32.whl", hash = "sha256:672ebbe820bb37988c4d136eca2652ee114992d5d41c7e4858cdd90ea94ffe5c", size = 1833633 }, - { url = "https://files.pythonhosted.org/packages/ee/f2/c61486eee27cae5ac781305658779b4a6b45f9cc9d02c90cb21b940e82cc/pydantic_core-2.27.1-cp312-none-win_amd64.whl", hash = "sha256:66ff044fd0bb1768688aecbe28b6190f6e799349221fb0de0e6f4048eca14c16", size = 1986973 }, - { url = "https://files.pythonhosted.org/packages/df/a6/e3f12ff25f250b02f7c51be89a294689d175ac76e1096c32bf278f29ca1e/pydantic_core-2.27.1-cp312-none-win_arm64.whl", hash = "sha256:9a3b0793b1bbfd4146304e23d90045f2a9b5fd5823aa682665fbdaf2a6c28f3e", size = 1883215 }, - { url = "https://files.pythonhosted.org/packages/0f/d6/91cb99a3c59d7b072bded9959fbeab0a9613d5a4935773c0801f1764c156/pydantic_core-2.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f216dbce0e60e4d03e0c4353c7023b202d95cbaeff12e5fd2e82ea0a66905073", size = 1895033 }, - { url = "https://files.pythonhosted.org/packages/07/42/d35033f81a28b27dedcade9e967e8a40981a765795c9ebae2045bcef05d3/pydantic_core-2.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a2e02889071850bbfd36b56fd6bc98945e23670773bc7a76657e90e6b6603c08", size = 1807542 }, - { url = "https://files.pythonhosted.org/packages/41/c2/491b59e222ec7e72236e512108ecad532c7f4391a14e971c963f624f7569/pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42b0e23f119b2b456d07ca91b307ae167cc3f6c846a7b169fca5326e32fdc6cf", size = 1827854 }, - { url = "https://files.pythonhosted.org/packages/e3/f3/363652651779113189cefdbbb619b7b07b7a67ebb6840325117cc8cc3460/pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:764be71193f87d460a03f1f7385a82e226639732214b402f9aa61f0d025f0737", size = 1857389 }, - { url = "https://files.pythonhosted.org/packages/5f/97/be804aed6b479af5a945daec7538d8bf358d668bdadde4c7888a2506bdfb/pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c00666a3bd2f84920a4e94434f5974d7bbc57e461318d6bb34ce9cdbbc1f6b2", size = 2037934 }, - { url = "https://files.pythonhosted.org/packages/42/01/295f0bd4abf58902917e342ddfe5f76cf66ffabfc57c2e23c7681a1a1197/pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ccaa88b24eebc0f849ce0a4d09e8a408ec5a94afff395eb69baf868f5183107", size = 2735176 }, - { url = "https://files.pythonhosted.org/packages/9d/a0/cd8e9c940ead89cc37812a1a9f310fef59ba2f0b22b4e417d84ab09fa970/pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c65af9088ac534313e1963443d0ec360bb2b9cba6c2909478d22c2e363d98a51", size = 2160720 }, - { url = "https://files.pythonhosted.org/packages/73/ae/9d0980e286627e0aeca4c352a60bd760331622c12d576e5ea4441ac7e15e/pydantic_core-2.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:206b5cf6f0c513baffaeae7bd817717140770c74528f3e4c3e1cec7871ddd61a", size = 1992972 }, - { url = "https://files.pythonhosted.org/packages/bf/ba/ae4480bc0292d54b85cfb954e9d6bd226982949f8316338677d56541b85f/pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:062f60e512fc7fff8b8a9d680ff0ddaaef0193dba9fa83e679c0c5f5fbd018bc", size = 2001477 }, - { url = "https://files.pythonhosted.org/packages/55/b7/e26adf48c2f943092ce54ae14c3c08d0d221ad34ce80b18a50de8ed2cba8/pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:a0697803ed7d4af5e4c1adf1670af078f8fcab7a86350e969f454daf598c4960", size = 2091186 }, - { url = "https://files.pythonhosted.org/packages/ba/cc/8491fff5b608b3862eb36e7d29d36a1af1c945463ca4c5040bf46cc73f40/pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:58ca98a950171f3151c603aeea9303ef6c235f692fe555e883591103da709b23", size = 2154429 }, - { url = "https://files.pythonhosted.org/packages/78/d8/c080592d80edd3441ab7f88f865f51dae94a157fc64283c680e9f32cf6da/pydantic_core-2.27.1-cp313-none-win32.whl", hash = "sha256:8065914ff79f7eab1599bd80406681f0ad08f8e47c880f17b416c9f8f7a26d05", size = 1833713 }, - { url = "https://files.pythonhosted.org/packages/83/84/5ab82a9ee2538ac95a66e51f6838d6aba6e0a03a42aa185ad2fe404a4e8f/pydantic_core-2.27.1-cp313-none-win_amd64.whl", hash = "sha256:ba630d5e3db74c79300d9a5bdaaf6200172b107f263c98a0539eeecb857b2337", size = 1987897 }, - { url = "https://files.pythonhosted.org/packages/df/c3/b15fb833926d91d982fde29c0624c9f225da743c7af801dace0d4e187e71/pydantic_core-2.27.1-cp313-none-win_arm64.whl", hash = "sha256:45cf8588c066860b623cd11c4ba687f8d7175d5f7ef65f7129df8a394c502de5", size = 1882983 }, - { url = "https://files.pythonhosted.org/packages/7c/60/e5eb2d462595ba1f622edbe7b1d19531e510c05c405f0b87c80c1e89d5b1/pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3fa80ac2bd5856580e242dbc202db873c60a01b20309c8319b5c5986fbe53ce6", size = 1894016 }, - { url = "https://files.pythonhosted.org/packages/61/20/da7059855225038c1c4326a840908cc7ca72c7198cb6addb8b92ec81c1d6/pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d950caa237bb1954f1b8c9227b5065ba6875ac9771bb8ec790d956a699b78676", size = 1771648 }, - { url = "https://files.pythonhosted.org/packages/8f/fc/5485cf0b0bb38da31d1d292160a4d123b5977841ddc1122c671a30b76cfd/pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e4216e64d203e39c62df627aa882f02a2438d18a5f21d7f721621f7a5d3611d", size = 1826929 }, - { url = "https://files.pythonhosted.org/packages/a1/ff/fb1284a210e13a5f34c639efc54d51da136074ffbe25ec0c279cf9fbb1c4/pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02a3d637bd387c41d46b002f0e49c52642281edacd2740e5a42f7017feea3f2c", size = 1980591 }, - { url = "https://files.pythonhosted.org/packages/f1/14/77c1887a182d05af74f6aeac7b740da3a74155d3093ccc7ee10b900cc6b5/pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:161c27ccce13b6b0c8689418da3885d3220ed2eae2ea5e9b2f7f3d48f1d52c27", size = 1981326 }, - { url = "https://files.pythonhosted.org/packages/06/aa/6f1b2747f811a9c66b5ef39d7f02fbb200479784c75e98290d70004b1253/pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:19910754e4cc9c63bc1c7f6d73aa1cfee82f42007e407c0f413695c2f7ed777f", size = 1989205 }, - { url = "https://files.pythonhosted.org/packages/7a/d2/8ce2b074d6835f3c88d85f6d8a399790043e9fdb3d0e43455e72d19df8cc/pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:e173486019cc283dc9778315fa29a363579372fe67045e971e89b6365cc035ed", size = 2079616 }, - { url = "https://files.pythonhosted.org/packages/65/71/af01033d4e58484c3db1e5d13e751ba5e3d6b87cc3368533df4c50932c8b/pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:af52d26579b308921b73b956153066481f064875140ccd1dfd4e77db89dbb12f", size = 2133265 }, - { url = "https://files.pythonhosted.org/packages/33/72/f881b5e18fbb67cf2fb4ab253660de3c6899dbb2dba409d0b757e3559e3d/pydantic_core-2.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:981fb88516bd1ae8b0cbbd2034678a39dedc98752f264ac9bc5839d3923fa04c", size = 2001864 }, -] - -[[package]] -name = "pyjwt" -version = "2.10.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e7/46/bd74733ff231675599650d3e47f361794b22ef3e3770998dda30d3b63726/pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", size = 87785 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb", size = 22997 }, -] - -[[package]] -name = "pyparsing" -version = "3.2.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8c/d5/e5aeee5387091148a19e1145f63606619cb5f20b83fccb63efae6474e7b2/pyparsing-3.2.0.tar.gz", hash = "sha256:cbf74e27246d595d9a74b186b810f6fbb86726dbf3b9532efb343f6d7294fe9c", size = 920984 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/be/ec/2eb3cd785efd67806c46c13a17339708ddc346cbb684eade7a6e6f79536a/pyparsing-3.2.0-py3-none-any.whl", hash = "sha256:93d9577b88da0bbea8cc8334ee8b918ed014968fd2ec383e868fb8afb1ccef84", size = 106921 }, -] - -[[package]] -name = "pyscf" -version = "2.7.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "h5py" }, - { name = "numpy" }, - { name = "scipy" }, - { name = "setuptools" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/84/44/b9fc70bd3ca53fd45ca3e397d0ed1b7911b235b75af1b33940909162df9d/pyscf-2.7.0.tar.gz", hash = "sha256:ca8efc2f28d72c3130f26a967e7fa8d0bbc4a6b47d16a7c4c732ec85a31b7eec", size = 8865796 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/23/5dc3ca0fa7ce768ec5c28be496f7c4ea2c70ffca1c9629ac4545a0b2ac37/pyscf-2.7.0-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:ec4b4356a2e1d801b92757235925efdde1ff6ecf99f0ec1d6d9c1307b5468d6f", size = 37928749 }, - { url = "https://files.pythonhosted.org/packages/43/38/3bf96ff39535a3d8f853a8345fbae9747cf9b4fe9f8b8ce36dd42f83645d/pyscf-2.7.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e76aee018da70ccd393a8a5f851a1738098c7289f4394ea840b441aaa692b470", size = 32896099 }, - { url = "https://files.pythonhosted.org/packages/d3/4c/0ec69b9ae4e0b74fc083a5cd9cc4f87f78403224d763ce32274230c1c177/pyscf-2.7.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:486638182902963f67224de5e35dae28223b7e1df852c6613ce581259489364f", size = 41951153 }, - { url = "https://files.pythonhosted.org/packages/a0/86/36a975aca3c3ce4db2e0fadac152528b16e01115b76521280822ba28c69b/pyscf-2.7.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b83a6685dceac36173a75fcd3366cf528527c5c9236bfa86845b9ebcc490d5a9", size = 48650157 }, -] - -[[package]] -name = "pyspnego" -version = "0.11.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cryptography" }, - { name = "sspilib", marker = "sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/6b/f8/53f1fc851dab776a183ffc9f29ebde244fbb467f5237f3ea809519fc4b2e/pyspnego-0.11.2.tar.gz", hash = "sha256:994388d308fb06e4498365ce78d222bf4f3570b6df4ec95738431f61510c971b", size = 225954 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/57/ea/b3c1438839d8724beff7b31ec42b9d041265dc9ca27ccb54477d442bfbcf/pyspnego-0.11.2-py3-none-any.whl", hash = "sha256:74abc1fb51e59360eb5c5c9086e5962174f1072c7a50cf6da0bda9a4bcfdfbd4", size = 130529 }, -] - -[[package]] -name = "python-dateutil" -version = "2.9.0.post0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "six" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, -] - -[[package]] -name = "pytket" -version = "1.36.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "graphviz" }, - { name = "jinja2" }, - { name = "lark" }, - { name = "networkx" }, - { name = "numpy" }, - { name = "qwasm" }, - { name = "scipy" }, - { name = "sympy" }, - { name = "typing-extensions" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/d8/67/1ef1fd1195157185893bad9f2cc41de8bb4329e5cfc2a720d6d1fda59771/pytket-1.36.0-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:4b360ba2362cc9ae75929a9c3e9b5259fe82214ca21aaf9e892811d5cc205bc1", size = 6085586 }, - { url = "https://files.pythonhosted.org/packages/67/5b/ac78651c112e8a2565ea457f9ed18fbb42cd4d3aa6796a7e4e9e3823ad6e/pytket-1.36.0-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:aacf6ca5565b0e8d73f06462600d4f66179b0a0ea7110ca3c496f5b1f27c2aa9", size = 6826928 }, - { url = "https://files.pythonhosted.org/packages/8f/b7/96f4a58dfee9131948e6f673a98e9313038b089e85d756b91db1be593192/pytket-1.36.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2dc9be3b03670343d2af5e171ef8a13450a39a48dc5ffb7098afa721256aea03", size = 7676453 }, - { url = "https://files.pythonhosted.org/packages/85/a1/e3f15499218ede27220e749f984fe0d5cfc0e24411948eacf22271a2f825/pytket-1.36.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8563d94c927cadac076eef6667721899a6f103e6b8cdc9d7b104624ab4b1cbc6", size = 8242695 }, - { url = "https://files.pythonhosted.org/packages/26/e5/853b120ae712bd9b8c34bf16ad2082b695fd68f0efa72dbe26a7dfec9ee6/pytket-1.36.0-cp310-cp310-win_amd64.whl", hash = "sha256:ffd37116afe4fa48910b8011458a05bde4eb82bb528fd7b5b60ffb2f5ec84efa", size = 8593668 }, - { url = "https://files.pythonhosted.org/packages/b6/86/56f6f3db522e5326f35ad172b17aa8c22d88cdf2a36fe3fe107907bb3e09/pytket-1.36.0-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:a7eb6f1baf1f239726484e97a39568710ae7f82f7185fa65e4aba8c9555d915a", size = 6100677 }, - { url = "https://files.pythonhosted.org/packages/05/21/eb2ed5aaa7ed385b5262016c00bbbb82c5e53d3aae24afe76ae430980864/pytket-1.36.0-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:2127df6cb5d1e72680eecba8e4535140214315b53d3d9fd98fef9158e7e4f320", size = 6843314 }, - { url = "https://files.pythonhosted.org/packages/43/1e/43bdffae68fd4f4484b78fe9b0136083b8811dac7b30a8819b6deecf4237/pytket-1.36.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dcfff1fde6c8018c8c58428cf33dbce10dccdfb19ef658ef77d930af0cf32ae0", size = 7687285 }, - { url = "https://files.pythonhosted.org/packages/9e/32/f7e448222e1c5160d17c646e6622a64e5c3d2e7eded8b3be12c3e407a95f/pytket-1.36.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:37b00e8aefc57802619e33582405d88fb0b9f372263d57217fd35e94f4fd92c5", size = 8253931 }, - { url = "https://files.pythonhosted.org/packages/a2/d1/0a4067470c2370192829a8bed33bdc9c75eab2c15e87ad6075bddfb269af/pytket-1.36.0-cp311-cp311-win_amd64.whl", hash = "sha256:419a95ce931d8f98abfb0339e8cdc7cce46d7453c1874d8e42df0e2617be5538", size = 8607414 }, - { url = "https://files.pythonhosted.org/packages/65/fb/32659600031d389b9f26b549748a2353027b5ef2fe675a2b26d64bab5156/pytket-1.36.0-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:f9176f7fa8a42d75a43caec2634e19f854f527947fe2b76c06b8ca4a61084028", size = 6310075 }, - { url = "https://files.pythonhosted.org/packages/86/3f/a7703bff05514fd0248c06b46fba732bf2a5dcaba417a1c8ac6962d834e2/pytket-1.36.0-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:982fbf203bc04266825680404e697ff38e1c1743b6d0305fda4b5d289ac4921a", size = 7078678 }, - { url = "https://files.pythonhosted.org/packages/13/5a/d202f5302246502da64a75c57dcb27553a71f0e5f56efe47055767fd1b60/pytket-1.36.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f8b8497067a092c8d6a7e3af86a3a78e7881d0ae45ea0f2904e45fe58d66719e", size = 7686128 }, - { url = "https://files.pythonhosted.org/packages/ae/16/34849e87fe850740dc41d7f270cbb34e997947a13f1a6f1ebe7bb05e4445/pytket-1.36.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a238300db1a27da8bb15aea1c334b7fe9bbc96c89f95a586bbe349d2771b652", size = 8252260 }, - { url = "https://files.pythonhosted.org/packages/80/41/02f6f284ad6a4e596ad330016a13d8f75e9b7e36f5439bd0a013c66321c5/pytket-1.36.0-cp312-cp312-win_amd64.whl", hash = "sha256:90cdbc7cceefee213d38d839de497786a5e70c71dc3c4f93f9e09c18e8316557", size = 8618712 }, - { url = "https://files.pythonhosted.org/packages/b9/e0/fea7f5cab10360063d2c1e091c497af62dd4746b5c690455729d27e47255/pytket-1.36.0-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:2bd76470aa3c0249141f0a24492f04e5910c3b1fede2eb4a78c0e312ee5aa7d7", size = 6311392 }, - { url = "https://files.pythonhosted.org/packages/08/5d/774cb5a3cf1b0e29de9fc772ef0670ee7814eb981ba4dd9be063f2f31266/pytket-1.36.0-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:551d736054357a64f9da405d89e62dd33cdbd679ecae94556de120063ea08d3c", size = 7078673 }, - { url = "https://files.pythonhosted.org/packages/fc/ba/588396b555a0fed5e2386e99aed028c0440302b421ab00b1d3c50d300d31/pytket-1.36.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f9404eecd9aa112d7ef5781bcc30167bf6e1760805877caf21380fed3c2f17cb", size = 7686470 }, - { url = "https://files.pythonhosted.org/packages/fa/cb/9a11af0518aad69aefb4692311f1215d7ce903f7d07d024a7a7fe61d652a/pytket-1.36.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f20619e577eb0ba6ac6b132dd070f7b9f29b71fb9dbc05ce4bc0bf1b2698372c", size = 8253048 }, - { url = "https://files.pythonhosted.org/packages/88/ef/23d46c11d05e143b1f26b723839580d682358b471f840da546086fa88d8b/pytket-1.36.0-cp313-cp313-win_amd64.whl", hash = "sha256:1f477d408e6a5684aabd9cd0e3f80fedcbcfb30ceb2af6f66bff6fcac54d0294", size = 8618877 }, -] - -[[package]] -name = "pytket-qiskit" -version = "0.60.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, - { name = "pytket" }, - { name = "qiskit" }, - { name = "qiskit-aer" }, - { name = "qiskit-ibm-runtime" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/21/ad/5b7c24de235d900c437297a43abce0147ab844483138630c176506da839d/pytket_qiskit-0.60.0-py3-none-any.whl", hash = "sha256:64f19a7deb33eaf85cf01c38244d973bc409c747b0a82d258bda3f82df6d38b3", size = 54821 }, -] - -[[package]] -name = "pytz" -version = "2024.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3a/31/3c70bf7603cc2dca0f19bdc53b4537a797747a58875b552c8c413d963a3f/pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a", size = 319692 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/11/c3/005fcca25ce078d2cc29fd559379817424e94885510568bc1bc53d7d5846/pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725", size = 508002 }, -] - -[[package]] -name = "qiskit" -version = "1.3.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "dill" }, - { name = "numpy" }, - { name = "python-dateutil" }, - { name = "rustworkx" }, - { name = "scipy" }, - { name = "stevedore" }, - { name = "symengine" }, - { name = "sympy" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/03/f6/02132670bdc688afe720d85fb5c8d98641e585f80e139db572f9712cadd7/qiskit-1.3.0.tar.gz", hash = "sha256:876aea2a215a990fa6e529fba5523c510a662332d86be96fd93c9ee2ee164578", size = 3908308 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/19/01b1e1cf1f6eb8b20b18c83b7ef8c266c0d89bcd23a62e3fea765c816029/qiskit-1.3.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:6162343c661e87e081aa2e2f28a8db9a31091d537ad4bc257f84295b8b12d6ad", size = 6482631 }, - { url = "https://files.pythonhosted.org/packages/03/67/8a4e508c42b7ebc1810cb2a3c7aff64eb4fcb9e8315d73c8d3bda3e46604/qiskit-1.3.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:c17508907936e4c717a4322a10e478955ab98c687797fc2ad4171d377b6823f5", size = 6165918 }, - { url = "https://files.pythonhosted.org/packages/d7/76/4f5d5f23234d736c9256ed86da63413b2255501332ceb2ed7efdd8e99ea2/qiskit-1.3.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dc8ee0807ea7d6a65cf9ea0b1ca3ea23a8c17d0e243ad20dc5566e71e5dd889", size = 6333278 }, - { url = "https://files.pythonhosted.org/packages/13/af/962dcfc83dd3bb3650955e538d5f470e6187f2116e73bbfc88789c5183ff/qiskit-1.3.0-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad1b0c5a3595a6c3f285281b40009132b124e99349a82b00bdd6ae251ac0c051", size = 6693357 }, - { url = "https://files.pythonhosted.org/packages/df/90/1aa40af8c0c6d3cfdfe5814045e01a42a6d018f511a7296569f8824de3ca/qiskit-1.3.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:629197937140c3588e468f2178591cff074ab67b90310edfb8b52a9c4c785d7f", size = 6730862 }, - { url = "https://files.pythonhosted.org/packages/3c/5d/8f003ff89d39061cfbc9b6734cffa8ad730bfa9d56719571055be0dbee91/qiskit-1.3.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b6160ef00a72907ea6d1deca37850647835421a9b850b08b156ece2555adb77f", size = 7941474 }, - { url = "https://files.pythonhosted.org/packages/d7/33/9d0911a65e9b5c5fc15ab74202d9934fb1162126271d2b0fafdfd2449645/qiskit-1.3.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d1f0e3cb5e5f08e9a2354b2f6b3553cfaef1b39451e7aa2ad3c6d4f284ede48", size = 6733587 }, - { url = "https://files.pythonhosted.org/packages/a3/b4/e32b439126b73f6e1193daa7b79fe938a17598f2463cd576d548224efbc4/qiskit-1.3.0-cp39-abi3-win32.whl", hash = "sha256:79b9c9db39870a37d929b1cb9ec75e6c8faab85d97535e5c305c8580ceb721cc", size = 6112260 }, - { url = "https://files.pythonhosted.org/packages/2c/b9/bdabd25b1e67bdd29ee69e688237f3b2267f55db5cc72e4e5326bc96144a/qiskit-1.3.0-cp39-abi3-win_amd64.whl", hash = "sha256:00af64d770f6c198755254d0761d65f7757893b7a87fc1246bb3f1638d146175", size = 6484339 }, -] - -[[package]] -name = "qiskit-aer" -version = "0.15.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, - { name = "psutil" }, - { name = "qiskit" }, - { name = "scipy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/37/39/044e35f1da0011fe44a3b2729b347851a452fc85e701b102dbdfbbbf6bd1/qiskit-aer-0.15.1.tar.gz", hash = "sha256:45f320790c9239bbe781a1ee14a329a20ad08878f01746fe405c836d202b2560", size = 6550165 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/87/29/34e5590ecb593602a75e6f07957797fd930d69d0543ad3de7fe097af70bf/qiskit_aer-0.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d8c403b4895ac3f00fe55e72473b3f4e4fbc8840f93c75d4a33da5de4230dfef", size = 2468132 }, - { url = "https://files.pythonhosted.org/packages/b2/e9/7decb0a806b7576a2b6cfb05529df40570b713870f744bea6b0c39ec2ebc/qiskit_aer-0.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0ad6cf30554cde3ae27850082c3673113385a5ee40b387557d306f35576c5d44", size = 2155999 }, - { url = "https://files.pythonhosted.org/packages/8a/b1/dad4be1c1f2e23d3fafe3325164c91f13bc8f2f49816fa67773dde32bf52/qiskit_aer-0.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02e2af134eb72bf3cde1fd959701655a392a53236d9bb9658278cba520a83aae", size = 6421853 }, - { url = "https://files.pythonhosted.org/packages/eb/ca/b40163b287015cf464cf4514a3dfe14bc8f63488b57cbd8acbd8b214095d/qiskit_aer-0.15.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5083333de4838da9436ceb76b6f964fb3184a8756561586bde03a4aa5fccf723", size = 7933314 }, - { url = "https://files.pythonhosted.org/packages/79/85/4422797e0097c679992422406ba73ecaa766572bae5c50750b5142be4050/qiskit_aer-0.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d42260fad7c81d71a12870f2269a959e1c782bc72ba14c85cf107d87e53a13ce", size = 7884238 }, - { url = "https://files.pythonhosted.org/packages/46/21/07222b2690dff882fe42870fabf9068f105b863a73382a6d29b9f9c46322/qiskit_aer-0.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f07b6f937bde64cb88d037e8805cdd3b6e2985231ac7dd18f27a7af4aa653a2c", size = 12337820 }, - { url = "https://files.pythonhosted.org/packages/e2/39/f33c8f32a68f073c0bc3a9cb92db2066d2733ee73d361572feab5c8a2401/qiskit_aer-0.15.1-cp310-cp310-win32.whl", hash = "sha256:354dd010928cf2f72a92a133ff906c5d173262e6d25d06bb5823d869e2fded93", size = 6895115 }, - { url = "https://files.pythonhosted.org/packages/8d/74/f015acab5231f6a93416dd96cb0fb316b1231044eeaa9b51cc60ca21b4d3/qiskit_aer-0.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:3d5948c3f910a3f4b7e997ce8e80ca7376715b1f3556244da0c84bd7d2e4b081", size = 9516934 }, - { url = "https://files.pythonhosted.org/packages/a5/66/1dd66527afd727d2530e0f634e3ee7b870d753dfdd4bd70403b53c9c4fb6/qiskit_aer-0.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6613f1238fba954e744a16e10c61732765541fde42f17029038d0d96b78ba6ee", size = 2469674 }, - { url = "https://files.pythonhosted.org/packages/0b/7c/ddb8380c58bbcc56a4fd9e427532885ce49dbb95ecd3d044bdf98ee536fa/qiskit_aer-0.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:83198f4a7b9949008297675725e9fec01ba47e9d7eec3f755c3eb720aaf78932", size = 2157425 }, - { url = "https://files.pythonhosted.org/packages/2c/32/0546057cdc043c25ea87e30219ec281ca2f43723ca9f5b8c21fd71e74760/qiskit_aer-0.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:196c8de494ff26195ef6fb40f5c9672b6281ab3fd768dc1f1866e7b3968c4d98", size = 6424933 }, - { url = "https://files.pythonhosted.org/packages/35/8a/773e0b32d008fd47ee68a2cb20afa3bd4c280826b79d749418b37f975fb8/qiskit_aer-0.15.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:334f8b323dd06793b11ad8aa8c7bcd56819e696017ce421db3cdc3c48f9da53e", size = 7933205 }, - { url = "https://files.pythonhosted.org/packages/ad/e7/625f792de490e14084ddae7e4be06c41127526328728b41e5b72b40d161a/qiskit_aer-0.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a4cb7d606808d7b437b783d1d9ded20063ce86e463736b7d6201a93caccf050e", size = 7885508 }, - { url = "https://files.pythonhosted.org/packages/0c/61/7cb8571a1f767e08511617c8e2ffc8284b1e512a3081807bea54772e58bc/qiskit_aer-0.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aabe19cfe9a93b76801da31e81b12671a301e0873d7eaf077d06c92e11394136", size = 12337954 }, - { url = "https://files.pythonhosted.org/packages/f9/bb/f714b936b3556ad64be962ffd610cc42547befc3d26dfca352db8ebd77f6/qiskit_aer-0.15.1-cp311-cp311-win32.whl", hash = "sha256:601ee3ad01a2aeef489f146ed0baf62965465b47324786ba88d80a1293740ac2", size = 6896059 }, - { url = "https://files.pythonhosted.org/packages/a3/4a/f40f4655010b104e4e98a89f13e960fb6f02f2b2ceb6ecf73762bce86d22/qiskit_aer-0.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:8d8685f23b844352a3f8f2991adaba91a43515e8883cd1cbdc654b4c61d104a9", size = 9517615 }, - { url = "https://files.pythonhosted.org/packages/9f/e6/f2611ada4690bacac3073873865d29eed15244d4f4a76c44a5da3855ac3d/qiskit_aer-0.15.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:df16643006cf25a1ed477a120b6146859f09e8dee09ca720befb3a1febee9546", size = 2475586 }, - { url = "https://files.pythonhosted.org/packages/7e/45/f35bc0971f7333cfeed6e28dc53d1c8a371f2177474176ce1c9585fa6d7d/qiskit_aer-0.15.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1d22c96bae21dbe4b97c30785ead2c2b53f897938da49bca6b4ef29d187765a6", size = 2158945 }, - { url = "https://files.pythonhosted.org/packages/9c/c0/c418189d92f92e713d6e096b9b5ead3b49d956465e7a952795b1763a80b3/qiskit_aer-0.15.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1288fd5c36235f5fedfc228956049e87bdd804cbc2b3a487a4453d9e7e72f420", size = 6420353 }, - { url = "https://files.pythonhosted.org/packages/99/92/fde09045179e7a5e2bae4185f311fde9ab9ef843440ff4bc69742de59a86/qiskit_aer-0.15.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca0783607942c724329172e21b53354c9d569420e02dbfd06c407ed588833cf6", size = 7939163 }, - { url = "https://files.pythonhosted.org/packages/ca/a7/baa91866f9468322ec212508dd5629f15a08a374800dfb75dc25ae409590/qiskit_aer-0.15.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cbad79290e4b850dca163b7960769a1a8db6d44abf232ecf0a6ce88740c83ab9", size = 7887094 }, - { url = "https://files.pythonhosted.org/packages/80/ae/85e51a211b387af4cb7526fac6e7850ec1a7f674e4a16ba623c46dbc61ac/qiskit_aer-0.15.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2257b4828df8cb3f37e153c220cd72f54a81d89875711efbc3ac2f265e0ae4a", size = 12339245 }, - { url = "https://files.pythonhosted.org/packages/1a/b4/b171b94f276ca8a853a0fc1acb38515936ca55d09e2118b90c1a9b839fdf/qiskit_aer-0.15.1-cp312-cp312-win32.whl", hash = "sha256:0f8a3f97f1bbeabb7d229879f7a0b6b8709f864fbc13ae78ec1569a65033ea3b", size = 6896779 }, - { url = "https://files.pythonhosted.org/packages/a7/eb/284cedc9cdeecd139939db70cf875806ca5df977d5af21e6fa09f1d82a8e/qiskit_aer-0.15.1-cp312-cp312-win_amd64.whl", hash = "sha256:af6501808b584b764e959af7a1edb2ef890c9a78f1ce418921dbdf6fd09ce0fc", size = 9519513 }, -] - -[[package]] -name = "qiskit-algorithms" -version = "0.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, - { name = "qiskit" }, - { name = "scipy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b6/b0/277f075f4758c474f026f2ffc9b6246b2cbe5658fbc95497764834685e15/qiskit_algorithms-0.3.1.tar.gz", hash = "sha256:cba9c573d47c0f9508745a5a2794298084ec4f8833781b426fa9b2cea0fca794", size = 243033 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f9/20/0db766da89de14111c4a1217dbb67d19036eb3e4ffba0fdc25f00e4d1615/qiskit_algorithms-0.3.1-py3-none-any.whl", hash = "sha256:d6c31d88a1ed65a9c6382c233ef10ecb9562e726f7b1b7823a0d178d63d29a0a", size = 310548 }, -] - -[[package]] -name = "qiskit-finance" -version = "0.4.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "fastdtw" }, - { name = "nasdaq-data-link" }, - { name = "numpy" }, - { name = "pandas" }, - { name = "psutil" }, - { name = "qiskit" }, - { name = "qiskit-algorithms" }, - { name = "qiskit-optimization" }, - { name = "scipy" }, - { name = "setuptools" }, - { name = "urllib3" }, - { name = "yfinance" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/06/59/d67fd31c54068606e22f28ccdfae8e9354039184b71ded4bd2e89a7c0207/qiskit-finance-0.4.1.tar.gz", hash = "sha256:dd9559775918f79f4c5f31577a73cf5f135d1911e6601ebcc1ade3901949908d", size = 40246 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/69/4f/d4a8f06b2d20b6054822f4ebf63be21ac2f39aee84266bdd2318950048d9/qiskit_finance-0.4.1-py3-none-any.whl", hash = "sha256:1aa46d1bfc1813144d504b1da3dbb7a45c14686b430be160952179d4f4dbdf60", size = 51155 }, -] - -[[package]] -name = "qiskit-ibm-runtime" -version = "0.33.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "ibm-platform-services" }, - { name = "numpy" }, - { name = "pydantic" }, - { name = "python-dateutil" }, - { name = "qiskit" }, - { name = "requests" }, - { name = "requests-ntlm" }, - { name = "urllib3" }, - { name = "websocket-client" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/1b/0e/e48b198760d702a378dc43a9f581067153fee16bad041253978516847a75/qiskit_ibm_runtime-0.33.2.tar.gz", hash = "sha256:f75bcfee97c4a8014a7999a353b5adc70dccf4b92eafc1cf81fa05a26ea5519b", size = 2844076 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/db/15ba13249d37ab89a6bdaa19c7811c4899fd1c9bc2fe3b899f6025c656cc/qiskit_ibm_runtime-0.33.2-py3-none-any.whl", hash = "sha256:fe414429098f49c7caddca31203b801eca0f2b587913eb3583c5b284a6c2c271", size = 2943948 }, -] - -[[package]] -name = "qiskit-nature" -version = "0.7.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "h5py" }, - { name = "numpy" }, - { name = "psutil" }, - { name = "qiskit" }, - { name = "qiskit-algorithms" }, - { name = "rustworkx" }, - { name = "scipy" }, - { name = "setuptools" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/89/36/d8dfb1b241a5c3ec5a8868bc4d7311af23dc741c81d0d8b93a6fb63c0366/qiskit-nature-0.7.2.tar.gz", hash = "sha256:621b9bb88c0fa4c705948af86e3ef7d36bb8e7aa11b95801264527de58fcd694", size = 2185596 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/66/16/2bf5c270457dbda2123604108f007f4b7087fa5a3913e60f5a4f75b76d92/qiskit_nature-0.7.2-py3-none-any.whl", hash = "sha256:9bc8900626b9a6f9c5dbe44589c53932408a661d61ad9003b8feadb30979cc05", size = 2156071 }, -] - -[package.optional-dependencies] -pyscf = [ - { name = "pyscf", marker = "sys_platform != 'win32'" }, -] - -[[package]] -name = "qiskit-optimization" -version = "0.6.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "docplex" }, - { name = "networkx" }, - { name = "numpy" }, - { name = "qiskit" }, - { name = "qiskit-algorithms" }, - { name = "scipy" }, - { name = "setuptools" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/80/63/30ae1aa61c407ccd7f2a1499884653cf6be87fd4a216013c226273796a8f/qiskit-optimization-0.6.1.tar.gz", hash = "sha256:0ad8c2bc83fe80657c788b5f282ce4055d0ec005c4876789e5069499ee3c00c0", size = 156898 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/67/7669e6ad0b41b1e4ab79b592a4f1de748cac946169f5409e7a9f4bafef10/qiskit_optimization-0.6.1-py3-none-any.whl", hash = "sha256:3f09f31289dfef66bbbb03b782a94d88a4ba5681c728b4b8e96884de5fc83879", size = 167560 }, -] - -[[package]] -name = "qwasm" -version = "1.0.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "setuptools" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/6f/a1/b52f356f907bedf02f536970c1b46aa69bc57280c4d17ed6b5c39180959f/qwasm-1.0.1.tar.gz", hash = "sha256:01f5dfe27159b7fdd9d02cd299833225d528fa383d1278268e5e1526357950fb", size = 13921 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f5/e9/fbde58bf8dcc05dc9d09dfcd06e631f470aa1e6732870cf06cd34ab86eaf/qwasm-1.0.1-py3-none-any.whl", hash = "sha256:c4c82a3f962d29314634868e06375f0cb4676c3d5266fbe137f6cd67321b0ef1", size = 15322 }, -] - -[[package]] -name = "requests" -version = "2.32.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "charset-normalizer" }, - { name = "idna" }, - { name = "urllib3" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 }, -] - -[[package]] -name = "requests-ntlm" -version = "1.3.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cryptography" }, - { name = "pyspnego" }, - { name = "requests" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/15/74/5d4e1815107e9d78c44c3ad04740b00efd1189e5a9ec11e5275b60864e54/requests_ntlm-1.3.0.tar.gz", hash = "sha256:b29cc2462623dffdf9b88c43e180ccb735b4007228a542220e882c58ae56c668", size = 16112 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/5d/836b97537a390cf811b0488490c389c5a614f0a93acb23f347bd37a2d914/requests_ntlm-1.3.0-py3-none-any.whl", hash = "sha256:4c7534a7d0e482bb0928531d621be4b2c74ace437e88c5a357ceb7452d25a510", size = 6577 }, -] - -[[package]] -name = "rustworkx" -version = "0.15.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5e/07/1af3ead27f1da113a60dc6735c761da6fc2e2db4cfc414bbcd03a989ccee/rustworkx-0.15.1.tar.gz", hash = "sha256:0e0cc86599f979285b2ab9c357276f3272f3fcb3b2df5651a6bf9704c570d4c1", size = 342216 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/37/06/adeed1d166c55920a6a83085e8c8c8b24c8d7708de99f7a814458a3c4529/rustworkx-0.15.1-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:6cd4496d3298cd3205c03545e48cc37d21e0455d57752af801d3fb250452d590", size = 1880966 }, - { url = "https://files.pythonhosted.org/packages/03/11/95350c7eeade2e61a736f1ca956ee04acb920b7b080ff0c058c40cc7bbf3/rustworkx-0.15.1-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:cb518f5649e62d753e29ca1e57290c8f58adbebcd154dc3159f4a36ebfa1e2b7", size = 1707452 }, - { url = "https://files.pythonhosted.org/packages/2f/2b/494982ecc4618796aacb8069bc176d895cec4bf1ac8dd0b1d69657d920c4/rustworkx-0.15.1-cp38-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac68ae2515ece22ba3ef56f3d16ad6bf707955f650d623190b2e7d706c6dc92", size = 2009359 }, - { url = "https://files.pythonhosted.org/packages/7f/3c/23304cf86c4af6014884bde046073105ace6250b6a0914c1090f2643d03c/rustworkx-0.15.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b903edec1d803704b499959f9d6f6119cdda63b9b64194a4b4307e506b112f0", size = 1862943 }, - { url = "https://files.pythonhosted.org/packages/b3/2a/03e6ff45cb772d249d4bf2d433a2acd2ec857615b3c1d44f0fa49e13aa63/rustworkx-0.15.1-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2c97a56ff8a0f6c273a83e26e627c72207442b4252aa550acad0bff42caac40", size = 2029096 }, - { url = "https://files.pythonhosted.org/packages/15/88/a3710209f647d89358c81b5974aee48b1ab361fd016dcae81824e29ee645/rustworkx-0.15.1-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:241c502532e348ba89200823326dba30de4df4b886cb2fd5a140b359ff124bb3", size = 3611892 }, - { url = "https://files.pythonhosted.org/packages/cb/a0/af448af28514e82f36e7431bc88e933ad043e5a95a7985bd9458a05877c6/rustworkx-0.15.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e5f4156f46fa03177c9b0580450eab87786063495d48b457762a5bdd20c55e2", size = 1950466 }, - { url = "https://files.pythonhosted.org/packages/c6/fe/1e9a8a29c21080155b7422011a3c472aa45dbb3b8bb6f610958eb906a713/rustworkx-0.15.1-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7834ab34748db6214ec3b3836b996b23882dc83184234e6d346d6bb85fd58ae5", size = 1888003 }, - { url = "https://files.pythonhosted.org/packages/65/66/daf6fffadb749574f78cd70919e598371d40484993ed005ed5efbef28b4e/rustworkx-0.15.1-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ce53f173fed16e1d51d9df9f23475a16c981b03bf1a412d991c75a70db6b1dc1", size = 1976312 }, - { url = "https://files.pythonhosted.org/packages/d5/ea/9cbf42b4d9a2b6ad18736bc2149d2b2439075b70094232ba3494fd14845b/rustworkx-0.15.1-cp38-abi3-win32.whl", hash = "sha256:308bc76a01bcae9af4602d8b9ed58021df37dd0bb5a7b2e3831ae53c5e234ff0", size = 1683889 }, - { url = "https://files.pythonhosted.org/packages/9c/c6/50f5736f5dac1709c6c8b6ac3470f466fd793dd25c081923942caf13051f/rustworkx-0.15.1-cp38-abi3-win_amd64.whl", hash = "sha256:89077382633e918d2392772f53b9d6d30eee51eb536f8d38ee195c212b2f0427", size = 1840525 }, -] - -[[package]] -name = "scipy" -version = "1.14.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/62/11/4d44a1f274e002784e4dbdb81e0ea96d2de2d1045b2132d5af62cc31fd28/scipy-1.14.1.tar.gz", hash = "sha256:5a275584e726026a5699459aa72f828a610821006228e841b94275c4a7c08417", size = 58620554 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/64/68/3bc0cfaf64ff507d82b1e5d5b64521df4c8bf7e22bc0b897827cbee9872c/scipy-1.14.1-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:b28d2ca4add7ac16ae8bb6632a3c86e4b9e4d52d3e34267f6e1b0c1f8d87e389", size = 39069598 }, - { url = "https://files.pythonhosted.org/packages/43/a5/8d02f9c372790326ad405d94f04d4339482ec082455b9e6e288f7100513b/scipy-1.14.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d0d2821003174de06b69e58cef2316a6622b60ee613121199cb2852a873f8cf3", size = 29879676 }, - { url = "https://files.pythonhosted.org/packages/07/42/0e0bea9666fcbf2cb6ea0205db42c81b1f34d7b729ba251010edf9c80ebd/scipy-1.14.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8bddf15838ba768bb5f5083c1ea012d64c9a444e16192762bd858f1e126196d0", size = 23088696 }, - { url = "https://files.pythonhosted.org/packages/15/47/298ab6fef5ebf31b426560e978b8b8548421d4ed0bf99263e1eb44532306/scipy-1.14.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:97c5dddd5932bd2a1a31c927ba5e1463a53b87ca96b5c9bdf5dfd6096e27efc3", size = 25470699 }, - { url = "https://files.pythonhosted.org/packages/d8/df/cdb6be5274bc694c4c22862ac3438cb04f360ed9df0aecee02ce0b798380/scipy-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ff0a7e01e422c15739ecd64432743cf7aae2b03f3084288f399affcefe5222d", size = 35606631 }, - { url = "https://files.pythonhosted.org/packages/47/78/b0c2c23880dd1e99e938ad49ccfb011ae353758a2dc5ed7ee59baff684c3/scipy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e32dced201274bf96899e6491d9ba3e9a5f6b336708656466ad0522d8528f69", size = 41178528 }, - { url = "https://files.pythonhosted.org/packages/5d/aa/994b45c34b897637b853ec04334afa55a85650a0d11dacfa67232260fb0a/scipy-1.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8426251ad1e4ad903a4514712d2fa8fdd5382c978010d1c6f5f37ef286a713ad", size = 42784535 }, - { url = "https://files.pythonhosted.org/packages/e7/1c/8daa6df17a945cb1a2a1e3bae3c49643f7b3b94017ff01a4787064f03f84/scipy-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:a49f6ed96f83966f576b33a44257d869756df6cf1ef4934f59dd58b25e0327e5", size = 44772117 }, - { url = "https://files.pythonhosted.org/packages/b2/ab/070ccfabe870d9f105b04aee1e2860520460ef7ca0213172abfe871463b9/scipy-1.14.1-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:2da0469a4ef0ecd3693761acbdc20f2fdeafb69e6819cc081308cc978153c675", size = 39076999 }, - { url = "https://files.pythonhosted.org/packages/a7/c5/02ac82f9bb8f70818099df7e86c3ad28dae64e1347b421d8e3adf26acab6/scipy-1.14.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:c0ee987efa6737242745f347835da2cc5bb9f1b42996a4d97d5c7ff7928cb6f2", size = 29894570 }, - { url = "https://files.pythonhosted.org/packages/ed/05/7f03e680cc5249c4f96c9e4e845acde08eb1aee5bc216eff8a089baa4ddb/scipy-1.14.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3a1b111fac6baec1c1d92f27e76511c9e7218f1695d61b59e05e0fe04dc59617", size = 23103567 }, - { url = "https://files.pythonhosted.org/packages/5e/fc/9f1413bef53171f379d786aabc104d4abeea48ee84c553a3e3d8c9f96a9c/scipy-1.14.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8475230e55549ab3f207bff11ebfc91c805dc3463ef62eda3ccf593254524ce8", size = 25499102 }, - { url = "https://files.pythonhosted.org/packages/c2/4b/b44bee3c2ddc316b0159b3d87a3d467ef8d7edfd525e6f7364a62cd87d90/scipy-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:278266012eb69f4a720827bdd2dc54b2271c97d84255b2faaa8f161a158c3b37", size = 35586346 }, - { url = "https://files.pythonhosted.org/packages/93/6b/701776d4bd6bdd9b629c387b5140f006185bd8ddea16788a44434376b98f/scipy-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fef8c87f8abfb884dac04e97824b61299880c43f4ce675dd2cbeadd3c9b466d2", size = 41165244 }, - { url = "https://files.pythonhosted.org/packages/06/57/e6aa6f55729a8f245d8a6984f2855696c5992113a5dc789065020f8be753/scipy-1.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b05d43735bb2f07d689f56f7b474788a13ed8adc484a85aa65c0fd931cf9ccd2", size = 42817917 }, - { url = "https://files.pythonhosted.org/packages/ea/c2/5ecadc5fcccefaece775feadcd795060adf5c3b29a883bff0e678cfe89af/scipy-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:716e389b694c4bb564b4fc0c51bc84d381735e0d39d3f26ec1af2556ec6aad94", size = 44781033 }, - { url = "https://files.pythonhosted.org/packages/c0/04/2bdacc8ac6387b15db6faa40295f8bd25eccf33f1f13e68a72dc3c60a99e/scipy-1.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:631f07b3734d34aced009aaf6fedfd0eb3498a97e581c3b1e5f14a04164a456d", size = 39128781 }, - { url = "https://files.pythonhosted.org/packages/c8/53/35b4d41f5fd42f5781dbd0dd6c05d35ba8aa75c84ecddc7d44756cd8da2e/scipy-1.14.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:af29a935803cc707ab2ed7791c44288a682f9c8107bc00f0eccc4f92c08d6e07", size = 29939542 }, - { url = "https://files.pythonhosted.org/packages/66/67/6ef192e0e4d77b20cc33a01e743b00bc9e68fb83b88e06e636d2619a8767/scipy-1.14.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:2843f2d527d9eebec9a43e6b406fb7266f3af25a751aa91d62ff416f54170bc5", size = 23148375 }, - { url = "https://files.pythonhosted.org/packages/f6/32/3a6dedd51d68eb7b8e7dc7947d5d841bcb699f1bf4463639554986f4d782/scipy-1.14.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:eb58ca0abd96911932f688528977858681a59d61a7ce908ffd355957f7025cfc", size = 25578573 }, - { url = "https://files.pythonhosted.org/packages/f0/5a/efa92a58dc3a2898705f1dc9dbaf390ca7d4fba26d6ab8cfffb0c72f656f/scipy-1.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30ac8812c1d2aab7131a79ba62933a2a76f582d5dbbc695192453dae67ad6310", size = 35319299 }, - { url = "https://files.pythonhosted.org/packages/8e/ee/8a26858ca517e9c64f84b4c7734b89bda8e63bec85c3d2f432d225bb1886/scipy-1.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f9ea80f2e65bdaa0b7627fb00cbeb2daf163caa015e59b7516395fe3bd1e066", size = 40849331 }, - { url = "https://files.pythonhosted.org/packages/a5/cd/06f72bc9187840f1c99e1a8750aad4216fc7dfdd7df46e6280add14b4822/scipy-1.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:edaf02b82cd7639db00dbff629995ef185c8df4c3ffa71a5562a595765a06ce1", size = 42544049 }, - { url = "https://files.pythonhosted.org/packages/aa/7d/43ab67228ef98c6b5dd42ab386eae2d7877036970a0d7e3dd3eb47a0d530/scipy-1.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:2ff38e22128e6c03ff73b6bb0f85f897d2362f8c052e3b8ad00532198fbdae3f", size = 44521212 }, - { url = "https://files.pythonhosted.org/packages/50/ef/ac98346db016ff18a6ad7626a35808f37074d25796fd0234c2bb0ed1e054/scipy-1.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1729560c906963fc8389f6aac023739ff3983e727b1a4d87696b7bf108316a79", size = 39091068 }, - { url = "https://files.pythonhosted.org/packages/b9/cc/70948fe9f393b911b4251e96b55bbdeaa8cca41f37c26fd1df0232933b9e/scipy-1.14.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:4079b90df244709e675cdc8b93bfd8a395d59af40b72e339c2287c91860deb8e", size = 29875417 }, - { url = "https://files.pythonhosted.org/packages/3b/2e/35f549b7d231c1c9f9639f9ef49b815d816bf54dd050da5da1c11517a218/scipy-1.14.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:e0cf28db0f24a38b2a0ca33a85a54852586e43cf6fd876365c86e0657cfe7d73", size = 23084508 }, - { url = "https://files.pythonhosted.org/packages/3f/d6/b028e3f3e59fae61fb8c0f450db732c43dd1d836223a589a8be9f6377203/scipy-1.14.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0c2f95de3b04e26f5f3ad5bb05e74ba7f68b837133a4492414b3afd79dfe540e", size = 25503364 }, - { url = "https://files.pythonhosted.org/packages/a7/2f/6c142b352ac15967744d62b165537a965e95d557085db4beab2a11f7943b/scipy-1.14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b99722ea48b7ea25e8e015e8341ae74624f72e5f21fc2abd45f3a93266de4c5d", size = 35292639 }, - { url = "https://files.pythonhosted.org/packages/56/46/2449e6e51e0d7c3575f289f6acb7f828938eaab8874dbccfeb0cd2b71a27/scipy-1.14.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5149e3fd2d686e42144a093b206aef01932a0059c2a33ddfa67f5f035bdfe13e", size = 40798288 }, - { url = "https://files.pythonhosted.org/packages/32/cd/9d86f7ed7f4497c9fd3e39f8918dd93d9f647ba80d7e34e4946c0c2d1a7c/scipy-1.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e4f5a7c49323533f9103d4dacf4e4f07078f360743dec7f7596949149efeec06", size = 42524647 }, - { url = "https://files.pythonhosted.org/packages/f5/1b/6ee032251bf4cdb0cc50059374e86a9f076308c1512b61c4e003e241efb7/scipy-1.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:baff393942b550823bfce952bb62270ee17504d02a1801d7fd0719534dfb9c84", size = 44469524 }, -] - -[[package]] -name = "seaborn" -version = "0.13.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "matplotlib" }, - { name = "numpy" }, - { name = "pandas" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/86/59/a451d7420a77ab0b98f7affa3a1d78a313d2f7281a57afb1a34bae8ab412/seaborn-0.13.2.tar.gz", hash = "sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7", size = 1457696 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl", hash = "sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987", size = 294914 }, -] - -[[package]] -name = "setuptools" -version = "75.6.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/54/292f26c208734e9a7f067aea4a7e282c080750c4546559b58e2e45413ca0/setuptools-75.6.0.tar.gz", hash = "sha256:8199222558df7c86216af4f84c30e9b34a61d8ba19366cc914424cdbd28252f6", size = 1337429 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/55/21/47d163f615df1d30c094f6c8bbb353619274edccf0327b185cc2493c2c33/setuptools-75.6.0-py3-none-any.whl", hash = "sha256:ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d", size = 1224032 }, -] - -[[package]] -name = "six" -version = "1.16.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/71/39/171f1c67cd00715f190ba0b100d606d440a28c93c7714febeca8b79af85e/six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", size = 34041 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254", size = 11053 }, -] - -[[package]] -name = "soupsieve" -version = "2.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/ce/fbaeed4f9fb8b2daa961f90591662df6a86c1abf25c548329a86920aedfb/soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb", size = 101569 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9", size = 36186 }, -] - -[[package]] -name = "sspilib" -version = "0.2.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/36/48/8d634ac9aa5404b77f2d66b5a354751b7bbbf2be2947328fe895034cb750/sspilib-0.2.0.tar.gz", hash = "sha256:4d6cd4290ca82f40705efeb5e9107f7abcd5e647cb201a3d04371305938615b8", size = 55815 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/49/ac/b59283a2a0c91ef136f4979d711cd8dcd005b9f18b4a50ffaaa50e00f200/sspilib-0.2.0-cp310-cp310-win32.whl", hash = "sha256:e436fa09bcf353a364a74b3ef6910d936fa8cd1493f136e517a9a7e11b319c57", size = 487673 }, - { url = "https://files.pythonhosted.org/packages/c5/bc/84cb16b512902b972cfd89130918f01aabb8016814442ff6bd2cf89d6530/sspilib-0.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:850a17c98d2b8579b183ce37a8df97d050bc5b31ab13f5a6d9e39c9692fe3754", size = 565326 }, - { url = "https://files.pythonhosted.org/packages/c5/0d/d15fe0e5c87a51b7d693e889656816fd8d67995fbd072ab9852934e9ecf4/sspilib-0.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:a4d788a53b8db6d1caafba36887d5ac2087e6b6be6f01eb48f8afea6b646dbb5", size = 473562 }, - { url = "https://files.pythonhosted.org/packages/70/16/c31487f432724813a27f30c1a63ec07217adf65572e33fe9c4dcfd47a1b3/sspilib-0.2.0-cp311-cp311-win32.whl", hash = "sha256:400d5922c2c2261009921157c4b43d868e84640ad86e4dc84c95b07e5cc38ac6", size = 485419 }, - { url = "https://files.pythonhosted.org/packages/15/e9/0cb63b7f1014eff9c1a5b83920a423080b10f29ddf0264fced6abbdbad28/sspilib-0.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:d3e7d19c16ba9189ef8687b591503db06cfb9c5eb32ab1ca3bb9ebc1a8a5f35c", size = 564816 }, - { url = "https://files.pythonhosted.org/packages/b9/d9/3b8295f652afe71c0cdfd731eb7d37cc13a8adbfeacd3d67606d486d79b2/sspilib-0.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:f65c52ead8ce95eb78a79306fe4269ee572ef3e4dcc108d250d5933da2455ecc", size = 472529 }, - { url = "https://files.pythonhosted.org/packages/a9/82/07a49f00c0e7feff26f288b5f0747add197fc0db1ddddfab5fd5bdd94bdf/sspilib-0.2.0-cp312-cp312-win32.whl", hash = "sha256:bdf9a4f424add02951e1f01f47441d2e69a9910471e99c2c88660bd8e184d7f8", size = 487318 }, - { url = "https://files.pythonhosted.org/packages/38/54/949a9e9c07cd6efead79a7f78cc951cb5fa4f9f1fcb25b8520fd2adcdbe0/sspilib-0.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:40a97ca83e503a175d1dc9461836994e47e8b9bcf56cab81a2c22e27f1993079", size = 569220 }, - { url = "https://files.pythonhosted.org/packages/8f/52/c7a16472e9582474626f48ec79a821f66e5698cf5552baf923dfc636989e/sspilib-0.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:8ffc09819a37005c66a580ff44f544775f9745d5ed1ceeb37df4e5ff128adf36", size = 471371 }, - { url = "https://files.pythonhosted.org/packages/bc/9c/8784d3afe27c2f68620ea60fa2b6347100694db35193ba42714bdf23f882/sspilib-0.2.0-cp313-cp313-win32.whl", hash = "sha256:b9044d6020aa88d512e7557694fe734a243801f9a6874e1c214451eebe493d92", size = 483600 }, - { url = "https://files.pythonhosted.org/packages/49/ad/40f898075c913c75060c17c9cc6d6b86e8f83b6f5e1e017627b07ff53fcd/sspilib-0.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:c39a698491f43618efca8776a40fb7201d08c415c507f899f0df5ada15abefaa", size = 563678 }, - { url = "https://files.pythonhosted.org/packages/dd/84/3232ee82e33e426cd9e2011111a3136e5715428f0331a6739930b530333a/sspilib-0.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:863b7b214517b09367511c0ef931370f0386ed2c7c5613092bf9b106114c4a0e", size = 469030 }, -] - -[[package]] -name = "stevedore" -version = "5.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pbr" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/4a/e9/4eedccff8332cc40cc60ddd3b28d4c3e255ee7e9c65679fa4533ab98f598/stevedore-5.4.0.tar.gz", hash = "sha256:79e92235ecb828fe952b6b8b0c6c87863248631922c8e8e0fa5b17b232c4514d", size = 513899 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/73/d0091d22a65b55e8fb6aca7b3b6713b5a261dd01cec4cfd28ed127ac0cfc/stevedore-5.4.0-py3-none-any.whl", hash = "sha256:b0be3c4748b3ea7b854b265dcb4caa891015e442416422be16f8b31756107857", size = 49534 }, -] - -[[package]] -name = "symengine" -version = "0.13.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6b/ff/a2041497a482a0ae585672fe12cc8983c7fc46ce792811b55a067e5e5516/symengine-0.13.0.tar.gz", hash = "sha256:ab83a08897ebf12579702c2b71ba73d4732fb706cc4291d810aedf39c690c14c", size = 114237 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/62/ed/964f75a2dc5b0e2c97b732f44dfb9c40fe7c0f5e21a1ecc2edff89db3d81/symengine-0.13.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:259fd4111c7a70c72bdff5686de1949e8132baeb612eacdaf8837720c6fe449b", size = 25867912 }, - { url = "https://files.pythonhosted.org/packages/a3/ce/c74dfbaf487a428984644b3cb5e1131c4808f60eab1456f37a107f20b87a/symengine-0.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:44f2eb28a1e36db0bbd6679435412f79da9743bf9c1cb3eff25e0c343b7ddd48", size = 22711016 }, - { url = "https://files.pythonhosted.org/packages/4b/65/df699e2b4c2bbf608394b05d1095d77b3f02569e09960f7840f708c7c5dc/symengine-0.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d141712fa14d9138bd19e64b10392f850c68d88cd7db29f1bda33e32d1095559", size = 61000047 }, - { url = "https://files.pythonhosted.org/packages/ff/a9/623d97da0da9615367484127dd3b5d1049675832fb9a6a3572f2e072bb86/symengine-0.13.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:830226d933bfcdb93546e4062541627d9a3bc7a178a63fb16c002eb5c5221938", size = 90017189 }, - { url = "https://files.pythonhosted.org/packages/79/a0/d30329ef1bd2b188cb5bbf6d9394e72fa9f38b33a6caa2128ee187716259/symengine-0.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a08090163819a0bbfa97d64bd2d8dac2c5268147ed9c242799d7f7e8728a6f4e", size = 49698796 }, - { url = "https://files.pythonhosted.org/packages/e8/e3/cf99b6353b46b8d9ff05e8d7d24764c8afed7c46b888eece99c6e04cc295/symengine-0.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:1e435dcd8ed25e4c7c21ab1c0376be910efc7f35da76d532367df27b359f0358", size = 17830331 }, - { url = "https://files.pythonhosted.org/packages/47/a7/e69cff22c2b169b469faa390f0102fbdefe1dfede893a086454483db0fc3/symengine-0.13.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:da0eba7e106095cdce88eb275c8a9d7c4586ad88f229394c53e1184155c00745", size = 25878286 }, - { url = "https://files.pythonhosted.org/packages/60/40/bb3faf5a3d4cc99cf5252cc3f4f5267568abd4aae6439374623841cc0025/symengine-0.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b0c175f4f895a73a925508af03faf7efd6cad8593256bbdb5346bd996d3ec5c8", size = 22721741 }, - { url = "https://files.pythonhosted.org/packages/de/da/d6350f60f11abc7ee56fcb6b996deba7b31584b5942a4c5db7d3d4f324dd/symengine-0.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e58d1e2abd08381aa0cf24c88c0e8b7f592df92619b51e32d36835fbd2dd6ae8", size = 60999516 }, - { url = "https://files.pythonhosted.org/packages/d1/ee/db107db7d0557aa8dbc9485741a60dd4f869d3da32180710506f9ba942b9/symengine-0.13.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1db745f2c7a3c5e83510cf4decb43201f43552dfb05ad8af9787c89708be9ede", size = 90019965 }, - { url = "https://files.pythonhosted.org/packages/8f/f0/0642f5d9681ff26e57c317d0514315cf1b0dfe1bc8f68ee14a13a270d704/symengine-0.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2572c98b09ac284db6ecff63f6170461194dc94c4209afd34c092ec67873d85", size = 49690621 }, - { url = "https://files.pythonhosted.org/packages/54/85/4300eda41959e3839115b2cb0ddb21818804f5eb129cf92eb9cc55c6efe5/symengine-0.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:12727f02a2919f005aee48e68e0cbb70cf857b19385857b4d985d1c9b075f620", size = 17831939 }, - { url = "https://files.pythonhosted.org/packages/a1/b2/786d3efb98ae1c8e0a9869d6901f24a6633bd621f9e4e1427c86bff35abb/symengine-0.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cf91d24f1bfd6d53228593c7804dd106b71b19674d5afc4fa322d516e1793bdd", size = 25853458 }, - { url = "https://files.pythonhosted.org/packages/3f/74/78b9e7f17c9b9b345d8ef0dbdefebbfc2c7f00693949c6b5808f8a9e54d8/symengine-0.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c5615b7eb68890917abd390ebb10434a949165f6064741c1a8cc345fee14e855", size = 22713256 }, - { url = "https://files.pythonhosted.org/packages/1d/a8/69f429946e9a9e63a141dcbe519df8a8c3d56aa75fa8440716871efd8b75/symengine-0.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb92bdf0890de264abaeacbfbdbd4dd7444b94057bd47958d913b662e549ad8a", size = 60847852 }, - { url = "https://files.pythonhosted.org/packages/f5/3c/a613d5fa73c1b05eb4f0a4bc2bfa21314d37c89dcdb355da684b5f9bea46/symengine-0.13.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7b3bce486fbc0b87970ed1b10ca9d5cafb1fd6b66382fe631261d83592851d7e", size = 89691094 }, - { url = "https://files.pythonhosted.org/packages/90/9f/5a171a9edff23eb0e33e0a2dca295a8b25fd64491ebe8cf765e489bd2bcd/symengine-0.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7e6bae9cfcdde2775d92fbb0abe3ef04e32f65ebc4c2d164ca33f4da202d4a7", size = 49584342 }, - { url = "https://files.pythonhosted.org/packages/07/16/a69dffc665e5007a0b4f1500fc401316aa070d109f83bc6887802dce199d/symengine-0.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:bced0a1dbdb94737c299384c85ddbad6944ce8dadc334f7bb8dbbd8f6c965807", size = 17787218 }, - { url = "https://files.pythonhosted.org/packages/f2/51/36ea8d87b61f34d585d09ff585cdc2ba136c501e0a96e861fe81fd0efa5b/symengine-0.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5d34df77971538e4c29f2d8e5ef7f459c2179465e6cdb7dfd48b79b87ecd8f4d", size = 25838153 }, - { url = "https://files.pythonhosted.org/packages/2a/f7/73cd707633c01760df27d340ac2868788fa0a35034aa09f51f6a289d9a07/symengine-0.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ab2661d9b18867e7c6edbfa7a74b8b0a2a694bd24aa08003dc3214f77cb9d6f2", size = 22706111 }, - { url = "https://files.pythonhosted.org/packages/bc/e7/a1ddc4cc3f2604b18965342523cddd6160b6406d1ef21b58a2dea1c46312/symengine-0.13.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53f27b9013878ee4419d8e853664d8ae4b68419e3f4b9b5b7f503d32bf904755", size = 60848269 }, - { url = "https://files.pythonhosted.org/packages/8a/f5/b127d236a8ccce8b85cec8bcb0221cbb6a4e651d6f5511da925e10714a4c/symengine-0.13.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:27987f75ce08c64f453e2b9b74fec6ffc5ca418c4deca0b75580979d4a4e242a", size = 89679345 }, - { url = "https://files.pythonhosted.org/packages/49/d0/b07c71dfb6f7f47f90495d67cb0b2264f94f2fb9380e528fe4fcec4c5cfa/symengine-0.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9ea9410330ea15ed4137d7a0a3c43caccacb71490e18036ce5182d08c93baf8", size = 49582795 }, - { url = "https://files.pythonhosted.org/packages/de/c6/3ce562ec269b033a738b99aa75729d564bfe465a765a5b5810200924f5c9/symengine-0.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:5031eb7a5c6675d5195bb57f93cc7d9ac5a7a9a826d4ad6f6b2927746ed7e6e6", size = 17786679 }, - { url = "https://files.pythonhosted.org/packages/ca/0f/02031b4ed54fb088ade94082e4658160333c2d5c6629ca7e567ea5a23720/symengine-0.13.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:ce0e5dfb19943bcf3e44a4485bcac4c5533ba3705c63083494eed0b3bf246076", size = 25795209 }, - { url = "https://files.pythonhosted.org/packages/34/c0/03e9e34a4e2af73dd786fb966ee3ad7ffa57659e79e4ac390be9e9f6aded/symengine-0.13.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c3b77dc54bf1181f6bd3b3338c4e6e5973a8b0fa20a189d15563ef5626e57b04", size = 22670484 }, - { url = "https://files.pythonhosted.org/packages/9d/13/66c8510403089ee157f0a8930a2e043e6f4de9ee514c8084adb958934058/symengine-0.13.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca7c3f6c168f6f5b06b421833c3d3baae56067a94b671bdffbe09b8e4fefd9be", size = 60739889 }, - { url = "https://files.pythonhosted.org/packages/70/fe/d0c778204d855257865e713fcbfef11dde34621e07fee439d4d117f43203/symengine-0.13.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:847523de682416811bacb3ad11507e663b3522fbb35cd27184757e9956d0eaf0", size = 89405899 }, - { url = "https://files.pythonhosted.org/packages/66/f6/f546e527caf35b7d0f14dbcea278134d4e46d7431821b9ca9f5ec3388a6a/symengine-0.13.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec2fc1b7d96426463f0c9011e9fb88459d906477c1baa8a996dde6fb2bfa99d4", size = 49474632 }, -] - -[[package]] -name = "sympy" -version = "1.13.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mpmath" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/11/8a/5a7fd6284fa8caac23a26c9ddf9c30485a48169344b4bd3b0f02fef1890f/sympy-1.13.3.tar.gz", hash = "sha256:b27fd2c6530e0ab39e275fc9b683895367e51d5da91baa8d3d64db2565fec4d9", size = 7533196 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/99/ff/c87e0622b1dadea79d2fb0b25ade9ed98954c9033722eb707053d310d4f3/sympy-1.13.3-py3-none-any.whl", hash = "sha256:54612cf55a62755ee71824ce692986f23c88ffa77207b30c1368eda4a7060f73", size = 6189483 }, -] - -[[package]] -name = "typing-extensions" -version = "4.12.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8", size = 85321 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", size = 37438 }, -] - -[[package]] -name = "tzdata" -version = "2024.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e1/34/943888654477a574a86a98e9896bae89c7aa15078ec29f490fef2f1e5384/tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc", size = 193282 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a6/ab/7e5f53c3b9d14972843a647d8d7a853969a58aecc7559cb3267302c94774/tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd", size = 346586 }, -] - -[[package]] -name = "urllib3" -version = "2.2.3" -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 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", size = 126338 }, -] - -[[package]] -name = "webencodings" -version = "0.5.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774 }, -] - -[[package]] -name = "websocket-client" -version = "1.8.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e6/30/fba0d96b4b5fbf5948ed3f4681f7da2f9f64512e1d303f94b4cc174c24a5/websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da", size = 54648 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526", size = 58826 }, -] - -[[package]] -name = "yfinance" -version = "0.2.50" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "beautifulsoup4" }, - { name = "frozendict" }, - { name = "html5lib" }, - { name = "lxml" }, - { name = "multitasking" }, - { name = "numpy" }, - { name = "pandas" }, - { name = "peewee" }, - { name = "platformdirs" }, - { name = "pytz" }, - { name = "requests" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d5/58/05bad58cd134b2c3b6a8ca46eca4cf74a740b47914439bdd0deeaaae3ac0/yfinance-0.2.50.tar.gz", hash = "sha256:33b379cad4261313dc93bfe3148d2f6e6083210e6341f0c93dd3af853019b1a0", size = 111862 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c5/98/6fd94db428a9670d638d4469cedfea51671de0126b8f50de1b06e2245c97/yfinance-0.2.50-py2.py3-none-any.whl", hash = "sha256:0db13b19313043328fe88ded2ddc306ede7d901d0f5181462a1cce76acdbcd2a", size = 102247 }, -] diff --git a/frontend/.python-version b/frontend/.python-version deleted file mode 100644 index e4fba2183..000000000 --- a/frontend/.python-version +++ /dev/null @@ -1 +0,0 @@ -3.12 diff --git a/frontend/pyproject.toml b/frontend/pyproject.toml deleted file mode 100644 index 5da243bda..000000000 --- a/frontend/pyproject.toml +++ /dev/null @@ -1,44 +0,0 @@ -[build-system] -requires = ["setuptools>=66.1"] -build-backend = "setuptools.build_meta" - -[project] -name = "mqt-bench-viewer" -version = "1.0.0" -description = "Frontend for MQT Bench" -requires-python = ">=3.10" -dependencies = [ - "flask>=3.0.3", - "mqt-bench", - "packaging>=24.1", - "pandas>=2.2.3", - "tqdm>=4.66.5", -] - -[project.scripts] -"mqt.bench.viewer" = "mqt.bench.viewer.main:start_server" - - -[tool.setuptools.package-data] -"mqt.bench.viewer" = ["static/**/*", "templates/*"] - - -[tool.pytest.ini_options] -minversion = "7.2" -testpaths = ["tests"] -addopts = ["-ra", "--strict-markers", "--strict-config", "--showlocals"] -log_cli_level = "INFO" -xfail_strict = true -filterwarnings = [ - "error", - 'ignore:.*qiskit.providers.models is deprecated since Qiskit 1.2*:DeprecationWarning:', - 'ignore:.*Treating CircuitInstruction as an iterable is deprecated legacy behavior since Qiskit 1.2*:DeprecationWarning:pytket.*', - 'ignore:.*qiskit.providers.models.* is deprecated since qiskit 1.2*:DeprecationWarning:qiskit.*', - 'ignore:.*qiskit.primitives.* is deprecated as of qiskit 1.2*:DeprecationWarning:qiskit.*', - 'ignore:.*The class ``qiskit.qobj.pulse_qobj.Pulse.*`` is deprecated as of qiskit 1.2.*:DeprecationWarning:qiskit.*', - 'ignore:.*The class ``qiskit.primitives.sampler.Sampler`` is deprecated as of qiskit 1.2*:DeprecationWarning:mqt.*', - 'ignore:.*The class ``qiskit.primitives.estimator.Estimator`` is deprecated as of qiskit 1.2*:DeprecationWarning:mqt.*', -] - -[tool.uv.sources] -mqt-bench = { path = "../" } diff --git a/frontend/src/mqt/bench/viewer/__init__.py b/frontend/src/mqt/bench/viewer/__init__.py deleted file mode 100644 index cfd2d4cc4..000000000 --- a/frontend/src/mqt/bench/viewer/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -"""MQT Bench Viewer. - -This file is part of the MQT Bench Benchmark library released under the MIT license. -See README.md or go to https://github.com/cda-tum/mqt-bench for more information. -""" - -from __future__ import annotations - -from mqt.bench.viewer.backend import Backend, BenchmarkConfiguration -from mqt.bench.viewer.main import Server, start_server - -__all__ = ["Backend", "BenchmarkConfiguration", "Server", "start_server"] diff --git a/frontend/src/mqt/bench/viewer/backend.py b/frontend/src/mqt/bench/viewer/backend.py deleted file mode 100644 index cd8805b82..000000000 --- a/frontend/src/mqt/bench/viewer/backend.py +++ /dev/null @@ -1,709 +0,0 @@ -"""This module contains the backend of the mqt.bench.viewer application.""" - -from __future__ import annotations - -import io -import os -import re -from dataclasses import dataclass -from importlib import metadata -from pathlib import Path -from typing import TYPE_CHECKING, cast -from zipfile import ZIP_DEFLATED, ZipFile - -import pandas as pd -import requests -from packaging import version -from tqdm import tqdm - -if TYPE_CHECKING: # pragma: no cover - from collections.abc import Iterable - - -@dataclass -class BenchmarkConfiguration: - """Class to store the user's filter criteria.""" - - min_qubits: int - max_qubits: int - indices_benchmarks: list[int] - indep_qiskit_compiler: bool - indep_tket_compiler: bool - nativegates_qiskit_compiler: bool - nativegates_tket_compiler: bool - mapped_qiskit_compiler: bool - mapped_tket_compiler: bool - native_qiskit_opt_lvls: list[int] | None = None - native_gatesets: list[str] | None = None - mapped_qiskit_opt_lvls: list[int] | None = None - mapped_tket_placements: list[str] | None = None - mapped_devices: list[str] | None = None - - -@dataclass -class ParsedBenchmarkName: - """Class to store the parsed data from a benchmark filename.""" - - benchmark: str - num_qubits: int - indep_flag: bool - nativegates_flag: bool - mapped_flag: bool - compiler: str | int - compiler_settings: str | int | None - gate_set: str | None - target_device: str | None - filename: str - - -class Backend: - """Class to manage the backend of the viewer.""" - - def __init__(self) -> None: - """Initializes the backend.""" - self.benchmarks = [ - {"name": "Amplitude Estimation (AE)", "id": "1", "filename": "ae"}, - {"name": "Deutsch-Jozsa", "id": "2", "filename": "dj"}, - {"name": "Graph State", "id": "3", "filename": "graphstate"}, - {"name": "GHZ State", "id": "4", "filename": "ghz"}, - { - "name": "Grover's (no ancilla)", - "id": "5", - "filename": "grover-noancilla", - }, - {"name": "Grover's (v-chain)", "id": "6", "filename": "grover-v-chain"}, - { - "name": "Portfolio Optimization with QAOA", - "id": "7", - "filename": "portfolioqaoa", - }, - { - "name": "Portfolio Optimization with VQE", - "id": "8", - "filename": "portfoliovqe", - }, - { - "name": "Quantum Approximation Optimization Algorithm (QAOA)", - "id": "9", - "filename": "qaoa", - }, - { - "name": "Quantum Fourier Transformation (QFT)", - "id": "10", - "filename": "qft", - }, - {"name": "QFT Entangled", "id": "11", "filename": "qftentangled"}, - {"name": "Quantum Neural Network (QNN)", "id": "12", "filename": "qnn"}, - { - "name": "Quantum Phase Estimation (QPE) exact", - "id": "13", - "filename": "qpeexact", - }, - { - "name": "Quantum Phase Estimation (QPE) inexact", - "id": "14", - "filename": "qpeinexact", - }, - { - "name": "Quantum Walk (no ancilla)", - "id": "15", - "filename": "qwalk-noancilla", - }, - {"name": "Quantum Walk (v-chain)", "id": "16", "filename": "qwalk-v-chain"}, - {"name": "Random Circuit", "id": "17", "filename": "random"}, - { - "name": "Variational Quantum Eigensolver (VQE)", - "id": "18", - "filename": "vqe", - }, - { - "name": "Efficient SU2 ansatz with Random Parameters", - "id": "19", - "filename": "su2random", - }, - { - "name": "Real Amplitudes ansatz with Random Parameters", - "id": "20", - "filename": "realamprandom", - }, - { - "name": "Two Local ansatz with Random Parameters", - "id": "21", - "filename": "twolocalrandom", - }, - {"name": "W-State", "id": "22", "filename": "wstate"}, - ] - - self.nonscalable_benchmarks = [ - {"name": "Ground State", "id": "23", "filename": "groundstate"}, - {"name": "Pricing Call Option", "id": "24", "filename": "pricingcall"}, - {"name": "Pricing Put Option", "id": "25", "filename": "pricingput"}, - {"name": "Routing", "id": "26", "filename": "routing"}, - {"name": "Shor's", "id": "27", "filename": "shor"}, - {"name": "Travelling Salesman", "id": "28", "filename": "tsp"}, - ] - - self.database: pd.DataFrame | None = None - self.mqtbench_all_zip: ZipFile | None = None - - def filter_database(self, benchmark_config: BenchmarkConfiguration) -> list[str]: - """Filters the database according to the filter criteria. - - Arguments: - benchmark_config: user's filter criteria - - Returns: - list of all file paths of the selected benchmark files - """ - colnames = list(ParsedBenchmarkName.__annotations__.keys()) - db_filtered = pd.DataFrame(columns=colnames) - db_filtered["indep_flag"] = db_filtered["indep_flag"].astype(bool) - db_filtered["nativegates_flag"] = db_filtered["nativegates_flag"].astype(bool) - db_filtered["mapped_flag"] = db_filtered["mapped_flag"].astype(bool) - if self.database is None or self.database.empty: - return [] - - selected_scalable_benchmarks = [] - selected_nonscalable_benchmarks = [] - - for identifier in benchmark_config.indices_benchmarks: - if 0 < identifier <= len(self.benchmarks): - name = self.benchmarks[identifier - 1]["filename"] - selected_scalable_benchmarks.append(name) - - elif 0 < identifier <= len(self.benchmarks) + len(self.nonscalable_benchmarks): - name = self.nonscalable_benchmarks[identifier - 1 - len(self.benchmarks)]["filename"] - selected_nonscalable_benchmarks.append(name) - - db_tmp = self.database.loc[ - ( - (self.database["num_qubits"] >= benchmark_config.min_qubits) - & (self.database["num_qubits"] <= benchmark_config.max_qubits) - & (self.database["benchmark"].isin(selected_scalable_benchmarks)) - ) - | (self.database["benchmark"].isin(selected_nonscalable_benchmarks)) - ] - - if benchmark_config.indep_qiskit_compiler: - db_tmp1 = db_tmp.loc[(db_tmp["indep_flag"]) & (db_tmp["compiler"] == "qiskit")] - db_filtered = pd.concat([db_filtered, db_tmp1]) - - if benchmark_config.indep_tket_compiler: - db_tmp2 = db_tmp.loc[(db_tmp["indep_flag"]) & (db_tmp["compiler"] == "tket")] - db_filtered = pd.concat([db_filtered, db_tmp2]) - - if ( - benchmark_config.nativegates_qiskit_compiler - and benchmark_config.native_gatesets - and benchmark_config.native_qiskit_opt_lvls - ): - for gate_set in benchmark_config.native_gatesets: - for opt_lvl in benchmark_config.native_qiskit_opt_lvls: - db_tmp3 = db_tmp.loc[ - (db_tmp["nativegates_flag"]) - & (db_tmp["gate_set"] == gate_set) - & (db_tmp["compiler"] == "qiskit") - & (db_tmp["compiler_settings"] == opt_lvl) - ] - db_filtered = pd.concat([db_filtered, db_tmp3]) - - if benchmark_config.nativegates_tket_compiler and benchmark_config.native_gatesets: - for gate_set in benchmark_config.native_gatesets: - db_tmp4 = db_tmp.loc[ - (db_tmp["nativegates_flag"]) & (db_tmp["gate_set"] == gate_set) & (db_tmp["compiler"] == "tket") - ] - db_filtered = pd.concat([db_filtered, db_tmp4]) - - if ( - benchmark_config.mapped_qiskit_compiler - and benchmark_config.mapped_qiskit_opt_lvls - and benchmark_config.mapped_devices - ): - for opt_lvl in benchmark_config.mapped_qiskit_opt_lvls: - for device in benchmark_config.mapped_devices: - db_tmp5 = db_tmp.loc[ - (db_tmp["mapped_flag"]) - & (db_tmp["target_device"] == device) - & (db_tmp["compiler"] == "qiskit") - & (db_tmp["compiler_settings"] == opt_lvl) - ] - db_filtered = pd.concat([db_filtered, db_tmp5]) - - if ( - benchmark_config.mapped_tket_compiler - and benchmark_config.mapped_tket_placements - and benchmark_config.mapped_devices - ): - for placement in benchmark_config.mapped_tket_placements: - for device in benchmark_config.mapped_devices: - db_tmp6 = db_tmp.loc[ - (db_tmp["mapped_flag"]) - & (db_tmp["target_device"] == device) - & (db_tmp["compiler"] == "tket") - & (db_tmp["compiler_settings"] == placement) - ] - db_filtered = pd.concat([db_filtered, db_tmp6]) - - return cast("list[str]", db_filtered["filename"].to_list()) - - def generate_zip_ephemeral_chunks( - self, - filenames: list[str], - ) -> Iterable[bytes]: - """Generates the zip file for the selected benchmarks and returns a generator of the chunks. - - Arguments: - filenames: list of file paths for all selected benchmarks - - Returns: - Generator of bytes to send to the browser - """ - fileobj = NoSeekBytesIO(io.BytesIO()) - - with ZipFile(fileobj, mode="w") as zf: # type: ignore[arg-type] - for individual_file in filenames: - individual_file_as_path = Path(individual_file) - assert self.mqtbench_all_zip is not None - zf.writestr( - individual_file_as_path.name, - data=self.mqtbench_all_zip.read(individual_file), - compress_type=ZIP_DEFLATED, - compresslevel=3, - ) - fileobj.hidden_seek(0) - yield fileobj.read() - fileobj.truncate_and_remember_offset(0) - - fileobj.hidden_seek(0) - yield fileobj.read() - fileobj.close() - - def get_selected_file_paths(self, prepared_data: BenchmarkConfiguration) -> list[str]: - """Extracts all file paths according to the prepared user's filter criteria. - - Arguments: - prepared_data: user's filter criteria after preparation step - - Returns: - file_paths: list of filter criteria for each selected benchmark - """ - return self.filter_database(prepared_data) - - def init_database(self) -> bool: - """Generates the database and saves it into a global variable.""" - assert self.mqtbench_all_zip is not None - - print("Initiating database...") - self.database = create_database(self.mqtbench_all_zip) - print(f"... done: {len(self.database)} benchmarks.") - - if not self.database.empty: - return True - - print("Database initialization failed.") - return False - - def prepare_form_input(self, form_data: dict[str, str]) -> BenchmarkConfiguration: - """Formats the formData extracted from the user's inputs.""" - min_qubits = 2 - max_qubits = 130 - indices_benchmarks = [] - indep_qiskit_compiler = False - indep_tket_compiler = False - nativegates_qiskit_compiler = False - nativegates_tket_compiler = False - native_qiskit_opt_lvls = [] - native_gatesets = [] - mapped_qiskit_compiler = False - mapped_tket_compiler = False - mapped_qiskit_opt_lvls = [] - mapped_tket_placements = [] - mapped_devices = [] - - for k, v in form_data.items(): - if "select" in k: - found_benchmark_id = parse_benchmark_id_from_form_key(k) - if found_benchmark_id: - indices_benchmarks.append(found_benchmark_id) - min_qubits = int(v) if "minQubits" in k and v else min_qubits - max_qubits = int(v) if "maxQubits" in k and v else max_qubits - - indep_qiskit_compiler = "indep_qiskit_compiler" in k or indep_qiskit_compiler - indep_tket_compiler = "indep_tket_compiler" in k or indep_tket_compiler - - nativegates_qiskit_compiler = "nativegates_qiskit_compiler" in k or nativegates_qiskit_compiler - nativegates_tket_compiler = "nativegates_tket_compiler" in k or nativegates_tket_compiler - native_qiskit_opt_lvls.append(0) if "nativegates_qiskit_compiler_opt0" in k else None - native_qiskit_opt_lvls.append(1) if "nativegates_qiskit_compiler_opt1" in k else None - native_qiskit_opt_lvls.append(2) if "nativegates_qiskit_compiler_opt2" in k else None - native_qiskit_opt_lvls.append(3) if "nativegates_qiskit_compiler_opt3" in k else None - native_gatesets.append("ibm") if "nativegates_ibm" in k else None - native_gatesets.append("rigetti") if "nativegates_rigetti" in k else None - native_gatesets.append("oqc") if "nativegates_oqc" in k else None - native_gatesets.append("ionq") if "nativegates_ionq" in k else None - native_gatesets.append("quantinuum") if "nativegates_quantinuum" in k else None - - mapped_qiskit_compiler = "mapped_qiskit_compiler" in k or mapped_qiskit_compiler - mapped_tket_compiler = "mapped_tket_compiler" in k or mapped_tket_compiler - mapped_qiskit_opt_lvls.append(0) if "mapped_qiskit_compiler_opt0" in k else None - mapped_qiskit_opt_lvls.append(1) if "mapped_qiskit_compiler_opt1" in k else None - mapped_qiskit_opt_lvls.append(2) if "mapped_qiskit_compiler_opt2" in k else None - mapped_qiskit_opt_lvls.append(3) if "mapped_qiskit_compiler_opt3" in k else None - mapped_tket_placements.append("graph") if "mapped_tket_compiler_graph" in k else None - mapped_tket_placements.append("line") if "mapped_tket_compiler_line" in k else None - mapped_devices.append("ibm_montreal") if "device_ibm_montreal" in k else None - mapped_devices.append("ibm_washington") if "device_ibm_washington" in k else None - mapped_devices.append("rigetti_aspen_m3") if "device_rigetti_aspen_m3" in k else None - mapped_devices.append("oqc_lucy") if "device_oqc_lucy" in k else None - mapped_devices.append("ionq_harmony") if "device_ionq_harmony" in k else None - mapped_devices.append("ionq_aria1") if "device_ionq_aria1" in k else None - mapped_devices.append("quantinuum_h2") if "device_quantinuum_h2" in k else None - - return BenchmarkConfiguration( - min_qubits=min_qubits, - max_qubits=max_qubits, - indices_benchmarks=indices_benchmarks, - indep_qiskit_compiler=indep_qiskit_compiler, - indep_tket_compiler=indep_tket_compiler, - nativegates_qiskit_compiler=nativegates_qiskit_compiler, - nativegates_tket_compiler=nativegates_tket_compiler, - native_qiskit_opt_lvls=native_qiskit_opt_lvls, - native_gatesets=native_gatesets, - mapped_qiskit_compiler=mapped_qiskit_compiler, - mapped_tket_compiler=mapped_tket_compiler, - mapped_qiskit_opt_lvls=mapped_qiskit_opt_lvls, - mapped_tket_placements=mapped_tket_placements, - mapped_devices=mapped_devices, - ) - - def read_mqtbench_all_zip( - self, - target_location: str, - skip_question: bool = False, - ) -> bool: - """Reads the 'MQTBench_all.zip' file from the target location.""" - huge_zip_path = Path(target_location) / "MQTBench_all.zip" - - try: - mqtbench_module_version = metadata.version("mqt.bench") - except Exception: - print("'mqt.bench' is most likely not installed. Please run 'pip install . or pip install mqt.bench'.") - return False - - print("Searching for local benchmarks...") - if huge_zip_path.is_file() and len(ZipFile(huge_zip_path, "r").namelist()) != 0: - print("... found.") - else: - print("No benchmarks found. Querying GitHub...") - - version_found = False - available_versions = [elem["name"] for elem in handle_github_api_request("tags").json()] - - for possible_version in available_versions: - if version.parse(mqtbench_module_version) >= version.parse(possible_version): - response_json = handle_github_api_request(f"releases/tags/{possible_version}").json() - if "assets" in response_json: - assets = response_json["assets"] - elif "asset" in response_json: - assets = [response_json["asset"]] - else: - assets = [] - - for asset in assets: - if asset["name"] == "MQTBench_all.zip": - version_found = True - - if version_found: - download_url = asset["browser_download_url"] - if not skip_question: - file_size = round((asset["size"]) / 2**20, 2) - print( - f"Found 'MQTBench_all.zip' (Version {possible_version}, Size {file_size} MB, Link: {download_url})" - ) - response = input("Would you like to downloaded the file? (Y/n)") - if skip_question or response.lower() == "y" or not response: - self.handle_downloading_benchmarks(target_location, download_url) - break - if version_found: - break - - if not version_found: - print("No suitable benchmarks found.") - return False - - with huge_zip_path.open("rb") as zf: - zip_bytes = io.BytesIO(zf.read()) - self.mqtbench_all_zip = ZipFile(zip_bytes, mode="r") - return True - - def handle_downloading_benchmarks(self, target_location: str, download_url: str) -> None: - """Downloads the benchmarks from the given URL and saves them to the target location.""" - print("Start downloading benchmarks...") - - r = requests.get(download_url, stream=True) - - content_length_response = r.headers.get("content-length") - assert content_length_response is not None - total_length = int(content_length_response) - fname = target_location + "/MQTBench_all.zip" - - Path(target_location).mkdir(parents=True, exist_ok=True) - with ( - Path(fname).open("wb") as f, - tqdm( - desc=fname, - total=total_length, - unit="iB", - unit_scale=True, - ) as bar, - ): - for data in r.iter_content(chunk_size=1024): - size = f.write(data) - bar.update(size) - print(f"Download completed to {fname}. Server is starting now.") - - -def parse_data(filename: str) -> ParsedBenchmarkName: - """Extracts the necessary information from a given filename. - - Arguments: - filename: name of file - - Returns: - parsed_data: parsed data extracted from filename - """ - benchmark = filename.split("_")[0].lower() - num_qubits = get_num_qubits(filename) - indep_flag = "indep" in filename - nativegates_flag = "nativegates" in filename - mapped_flag = "mapped" in filename - compiler, compiler_settings = get_compiler_and_settings(filename) - gate_set = get_gate_set(filename) if nativegates_flag or mapped_flag else None - target_device = get_target_device(filename) if mapped_flag else None - - return ParsedBenchmarkName( - benchmark=benchmark, - num_qubits=num_qubits, - indep_flag=indep_flag, - nativegates_flag=nativegates_flag, - mapped_flag=mapped_flag, - compiler=compiler, - compiler_settings=compiler_settings, - gate_set=gate_set, - target_device=target_device, - filename=filename, - ) - - -class NoSeekBytesIO: - """Class to handle the BytesIO object without seekable functionality.""" - - def __init__(self, fp: io.BytesIO) -> None: - """Initializes the BytesIO object.""" - self.fp = fp - self.deleted_offset = 0 - - def write(self, b: bytes) -> int: - """Writes the given bytes to the BytesIO object.""" - return self.fp.write(b) - - def tell(self) -> int: - """Returns the current position in the BytesIO object considering the deleted offset.""" - return self.deleted_offset + self.fp.tell() - - def hidden_tell(self) -> int: - """Returns the current position in the BytesIO object.""" - return self.fp.tell() - - def seekable(self) -> bool: - """Returns False because the BytesIO object is not seekable.""" - return False - - def hidden_seek(self, offset: int, start_point: int = io.SEEK_SET) -> int: - """Seeks the BytesIO object.""" - return self.fp.seek(offset, start_point) - - def truncate_and_remember_offset(self, size: int | None) -> int: - """Truncates the BytesIO object and remembers the deleted offset.""" - self.deleted_offset += self.fp.tell() - self.fp.seek(0) - return self.fp.truncate(size) - - def get_value(self) -> bytes: - """Returns the value of the BytesIO object.""" - return self.fp.getvalue() - - def close(self) -> None: - """Closes the BytesIO object.""" - return self.fp.close() - - def read(self) -> bytes: - """Reads the BytesIO object.""" - return self.fp.read() - - def flush(self) -> None: - """Flushes the BytesIO object.""" - return self.fp.flush() - - -def parse_benchmark_id_from_form_key(k: str) -> int | bool: - """Extracts the benchmark id from the form key.""" - pat = re.compile(r"_\d+") - m = pat.search(k) - if m: - return int(m.group()[1:]) - return False - - -def get_opt_level(filename: str) -> int: - """Extracts the optimization level based on a filename. - - Arguments: - filename: filename of a benchmark - - Returns: - num: optimization level. - """ - pat = re.compile(r"opt\d") - m = pat.search(filename) - num = m.group()[-1:] if m else -1 - return int(cast("str", num)) - - -def get_num_qubits(filename: str) -> int: - """Extracts the number of qubits based on a filename. - - Arguments: - filename: filename of a benchmark - - Returns: - num: number of qubits. - """ - pat = re.compile(r"(\d+)\.") - m = pat.search(filename) - num = m.group()[0:-1] if m else -1 - return int(cast("str", num)) - - -def get_tket_settings(filename: str) -> str | None: - """Extracts the tket settings based on a filename.""" - if "mapped" not in filename: - return None - if "line" in filename: - return "line" - if "graph" in filename: - return "graph" - error_msg = "Unknown tket settings in: " + filename - raise ValueError(error_msg) - - -def get_gate_set(filename: str) -> str: - """Extracts the gate set based on a filename.""" - if "oqc" in filename: - return "oqc" - if "ionq" in filename: - return "ionq" - if "ibm" in filename: - return "ibm" - if "rigetti" in filename: - return "rigetti" - if "quantinuum" in filename: - return "quantinuum" - raise ValueError("Unknown gate set: " + filename) - - -def get_target_device(filename: str) -> str: - """Extracts the target device based on a filename.""" - devices = [ - "ibm_washington", - "ibm_montreal", - "rigetti_aspen_m3", - "ionq_harmony", - "ionq_aria1", - "oqc_lucy", - "quantinuum_h2", - ] - for device in devices: - if device in filename: - return device - raise ValueError("Unknown target device: " + filename) - - -def get_compiler_and_settings(filename: str) -> tuple[str, str | int | None]: - """Extracts the compiler and its settings based on a filename.""" - if "qiskit" in filename: - return "qiskit", get_opt_level(filename) - if "tket" in filename: - return "tket", get_tket_settings(filename) - raise ValueError("Unknown compiler: " + filename) - - -def create_database(zip_file: ZipFile) -> pd.DataFrame: - """Creates the database based on the provided directories. - - Arguments: - zip_file: zip containing all .qasm files - - Returns: - database containing all available benchmarks - """ - rows_list = [] - - for filename in zip_file.namelist(): - if filename.endswith(".qasm"): - parsed_data = parse_data(filename) - rows_list.append(parsed_data) - - colnames = list(ParsedBenchmarkName.__annotations__.keys()) - - database = pd.DataFrame(rows_list, columns=colnames) - database["num_qubits"] = database["num_qubits"].astype(int) - database["benchmark"] = database["benchmark"].astype(str) - return database - - -def handle_downloading_benchmarks(target_location: str, download_url: str) -> None: - """Downloads the benchmarks from the given URL and saves them to the target location.""" - print("Start downloading benchmarks...") - - r = requests.get(download_url) - total_length = int(r.headers["content-length"]) - - fname = target_location + "/MQTBench_all.zip" - - Path(target_location).mkdir(parents=True, exist_ok=True) - with ( - Path(fname).open("wb") as f, - tqdm( - desc=fname, - total=total_length, - unit="iB", - unit_scale=True, - ) as bar, - ): - for data in r.iter_content(chunk_size=1024): - size = f.write(data) - bar.update(size) - print(f"Download completed to {fname}. Server is starting now.") - - -def handle_github_api_request(repo_url: str) -> requests.Response: - """Handles the GitHub API request and returns the response.""" - # If the environment variable GITHUB_TOKEN is set, use it to authenticate to the GitHub API - # to increase the rate limit from 60 to 5000 requests per hour per IP address. - headers = None - if "GITHUB_TOKEN" in os.environ: - headers = {"Authorization": f"token {os.environ['GITHUB_TOKEN']}"} - - response = requests.get(f"https://api.github.com/repos/cda-tum/mqtbench/{repo_url}", headers=headers) - success_code = 200 - if response.status_code == success_code: - return response - - msg = ( - f"Request to GitHub API failed with status code {response.status_code}!\n" - f"One reasons could be that the limit of 60 API calls per hour and IP address is exceeded.\n" - f"If you want to increase the limit, set the environment variable GITHUB_TOKEN to a GitHub personal access token.\n" - f"See https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token for more information." - ) - raise RuntimeError(msg) diff --git a/frontend/src/mqt/bench/viewer/main.py b/frontend/src/mqt/bench/viewer/main.py deleted file mode 100644 index 39c2d0448..000000000 --- a/frontend/src/mqt/bench/viewer/main.py +++ /dev/null @@ -1,188 +0,0 @@ -"""Main module to start the server.""" - -from __future__ import annotations - -import logging -import os -from datetime import datetime -from typing import TYPE_CHECKING - -from flask import Flask, cli, jsonify, render_template, request, send_from_directory - -from mqt.bench import utils - -from .backend import Backend - -if TYPE_CHECKING: # pragma: no cover - from flask import Response - - -class Server: - """Class to manage the server.""" - - def __init__( - self, - target_location: str, - skip_question: bool = False, - activate_logging: bool = False, - ) -> None: - """Initialize the server.""" - self.backend = Backend() - - self.target_location = target_location - if not os.access(self.target_location, os.W_OK): - msg = "target_location is not writable. Please specify a different path." - raise RuntimeError(msg) - - res_zip = self.backend.read_mqtbench_all_zip(self.target_location, skip_question) - if not res_zip: - msg = "Error while reading the MQTBench_all.zip file." - raise RuntimeError(msg) - self.backend.init_database() - if self.backend.database is None: - msg = "Error while initializing the database." - raise RuntimeError(msg) - - self.activate_logging = activate_logging - - if self.activate_logging: - logging.basicConfig(filename="/local/mqtbench/downloads.log", level=logging.INFO) - global SERVER # noqa: PLW0603 - SERVER = self - - -app = Flask(__name__, static_url_path="/mqtbench") -SERVER: Server = None # type: ignore[assignment] -PREFIX = "/mqtbench/" - - -@app.route(f"{PREFIX}/", methods=["POST", "GET"]) -@app.route(f"{PREFIX}/index", methods=["POST", "GET"]) -def index() -> str: - """Return the index.html file together with the benchmarks and nonscalable benchmarks.""" - return render_template( - "index.html", - benchmarks=SERVER.backend.benchmarks, - nonscalable_benchmarks=SERVER.backend.nonscalable_benchmarks, - ) - - -@app.route(f"{PREFIX}/get_pre_gen", methods=["POST", "GET"]) -def download_pre_gen_zip() -> Response: - """Return the pre-generated zip file.""" - filename = "MQTBench_all.zip" - - if SERVER.activate_logging: - timestamp = datetime.now().strftime("%Y-%m-%d-%H-%M-%S") - app.logger.info("###### Start ######") - app.logger.info("Timestamp: %s", timestamp) - headers = str(request.headers) - headers = headers.replace("\r\n", "").replace("\n", "") - app.logger.info("Headers: %s", headers) - app.logger.info("Download of pre-generated zip") - app.logger.info("###### End ######") - - return send_from_directory( - SERVER.target_location, - filename, - as_attachment=True, - mimetype="application/zip", - download_name="MQTBench_all.zip", - ) - - -@app.route(f"{PREFIX}/download", methods=["POST", "GET"]) -def download_data() -> str | Response: - """Triggers the downloading process of all benchmarks according to the user's input.""" - if request.method == "POST": - data = request.form - prepared_data = SERVER.backend.prepare_form_input(data) - file_paths = SERVER.backend.get_selected_file_paths(prepared_data) - timestamp = datetime.now().strftime("%Y-%m-%d-%H-%M-%S") - - if SERVER.activate_logging: - app.logger.info("###### Start ######") - app.logger.info("Timestamp: %s", timestamp) - headers = str(request.headers) - headers = headers.replace("\r\n", "").replace("\n", "") - app.logger.info("Headers: %s", headers) - app.logger.info("Prepared_data: %s", prepared_data) - app.logger.info("Download started: %s", len(file_paths)) - app.logger.info("###### End ######") - - if file_paths: - return app.response_class( # type: ignore[no-any-return] - SERVER.backend.generate_zip_ephemeral_chunks(file_paths), - mimetype="application/zip", - headers={"Content-Disposition": f'attachment; filename="MQTBench_{timestamp}.zip"'}, - direct_passthrough=True, - ) - - return render_template( - "index.html", - benchmarks=SERVER.backend.benchmarks, - nonscalable_benchmarks=SERVER.backend.nonscalable_benchmarks, - ) - - -@app.route(f"{PREFIX}/legal") -def legal() -> str: - """Return the legal.html file.""" - return render_template("legal.html") - - -@app.route(f"{PREFIX}/description") -def description() -> str: - """Return the description.html file in which the file formats are described.""" - return render_template("description.html") - - -@app.route(f"{PREFIX}/benchmark_description") -def benchmark_description() -> str: - """Return the benchmark_description.html file together in which all benchmark algorithms are described in detail.""" - return render_template("benchmark_description.html") - - -@app.route(f"{PREFIX}/get_num_benchmarks", methods=["POST"]) -def get_num_benchmarks() -> Response: - """Return the number of selected benchmarks.""" - if request.method == "POST": - data = request.form - prepared_data = SERVER.backend.prepare_form_input(data) - file_paths = SERVER.backend.get_selected_file_paths(prepared_data) - return jsonify({"num_selected": len(file_paths)}) # type: ignore[no-any-return] - return jsonify({"num_selected": 0}) # type: ignore[no-any-return] - - -def start_server( - skip_question: bool = False, - activate_logging: bool = False, - target_location: str | None = None, - debug_flag: bool = False, -) -> None: - """Start the server.""" - if not target_location: - target_location = utils.get_zip_folder_path() - - Server( - target_location=target_location, - skip_question=skip_question, - activate_logging=activate_logging, - ) - print( - "Server is hosted at: http://127.0.0.1:5000" + PREFIX + ".", - "To stop it, interrupt the process (e.g., via CTRL+C). \n", - ) - - # This line avoid the startup-message from flask - cli.show_server_banner = lambda *_args: None - - if not activate_logging: - log = logging.getLogger("werkzeug") - log.disabled = True - - app.run(debug=debug_flag) - - -if __name__ == "__main__": - start_server() diff --git a/frontend/src/mqt/bench/viewer/py.typed b/frontend/src/mqt/bench/viewer/py.typed deleted file mode 100644 index 5f3ea3d91..000000000 --- a/frontend/src/mqt/bench/viewer/py.typed +++ /dev/null @@ -1,2 +0,0 @@ -# Instruct type checkers to look for inline type annotations in this package. -# See PEP 561. diff --git a/frontend/src/mqt/bench/viewer/static/favicon.ico b/frontend/src/mqt/bench/viewer/static/favicon.ico deleted file mode 100644 index 5fe56cf64..000000000 Binary files a/frontend/src/mqt/bench/viewer/static/favicon.ico and /dev/null differ diff --git a/frontend/src/mqt/bench/viewer/static/files/MQTBench_all.zip b/frontend/src/mqt/bench/viewer/static/files/MQTBench_all.zip deleted file mode 100644 index 15cb0ecb3..000000000 Binary files a/frontend/src/mqt/bench/viewer/static/files/MQTBench_all.zip and /dev/null differ diff --git a/frontend/src/mqt/bench/viewer/static/files/qasm_output/.gitignore b/frontend/src/mqt/bench/viewer/static/files/qasm_output/.gitignore deleted file mode 100644 index 5e7d2734c..000000000 --- a/frontend/src/mqt/bench/viewer/static/files/qasm_output/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ignore everything in this directory -* -# Except this file -!.gitignore diff --git a/frontend/src/mqt/bench/viewer/static/mqt_dark.png b/frontend/src/mqt/bench/viewer/static/mqt_dark.png deleted file mode 100644 index adc910ce8..000000000 Binary files a/frontend/src/mqt/bench/viewer/static/mqt_dark.png and /dev/null differ diff --git a/frontend/src/mqt/bench/viewer/static/tum_logo.svg b/frontend/src/mqt/bench/viewer/static/tum_logo.svg deleted file mode 100644 index 82e109275..000000000 --- a/frontend/src/mqt/bench/viewer/static/tum_logo.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - 2015_Logo_TUM_RGB - Created with Sketch. - - - - - - - diff --git a/frontend/src/mqt/bench/viewer/templates/benchmark_description.html b/frontend/src/mqt/bench/viewer/templates/benchmark_description.html deleted file mode 100644 index 63d9c8d77..000000000 --- a/frontend/src/mqt/bench/viewer/templates/benchmark_description.html +++ /dev/null @@ -1,407 +0,0 @@ - - - - - - - - - - - - - MQT Bench - - - - - - -
- -
-

MQT Bench: Brief Description of Benchmarks

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Benchmark Descriptions -
Benchmark AlgorithmDescription
Amplitude Estimation (AE) - AE aims to find an estimation for the amplitude of a certain - quantum state. -
Deutsch-Jozsa - This algorithms determines, whether an unknown oracle mapping - input values either to 0 or 1 is constant (always output 1 or - always 0) or balanced (both outputs are equally likely). -
GHZ State - The Greenberger-Horne-Zeilinger state is an entangled quantum - state with a certain type of entanglement. -
Graph State - Graph states in quantum computing represent a graph with vertices - and edges through a quantum circuit. -
Ground State - A famous application of quantum computing and specifically of VQE - algorithms is the ground state estimation of molecules. Here, we - provide two different molecules, H2 ("small") and LiH ("medium"), - and estimate their ground state using VQE with a TwoLocal ansatz. - The source code for the algorithmic level originates from - this page. -
Grover's (no ancilla) - One of the most famous quantum algorithm known so far, Grover's - algorithm finds a certain goal quantum state determined by an - oracle. In our case, the oracle is implemented by a - multi-controlled Toffoli gate over all input qubits. In this no - ancilla version, no ancilla qubits are used during its - realization. -
Grover's (v-chain) - Similar to the algorithm above with the difference, that the - ancillary mode is a v-chain in this algorithm. -
- Portfolio Optimization with QAOA - - This algorithms solves the mean-variance portfolio optimization - problem for different assets. In this case, a QAOA algorithm - instance is used. The source code for the algorithmic level - originates from - this page. -
Portfolio Optimization with VQE - This algorithms solves the mean-variance portfolio optimization - problem for different assets. In this case, a VQE algorithm instance - is used. The source code for the algorithmic level originates from - this page. -
Pricing Call Option - This algorithm estimates the fair price of a european call option - using iterative amplitude estimation. The source code for the - algorithmic level originates from - this page. -
Pricing Put Option - This algorithm estimates the fair price of a european put option - using iterative amplitude estimation. The source code for the - algorithmic level originates from - this page. -
- Quantum Approximation Optimization Algorithm (QAOA) - - One of the most famous algorithm from the algorithmic class of - variational quantum algorithms. It is a parameterizable quantum - algorithms to solve optimization problems. Here, it solves a - max-cut problem instance. -
- Quantum Fourier Transformation (QFT) - - QFT embodies the quantum equivalent of the discrete Fourier - transform and is a very important building block in many quantum - algorithms. -
Entangled QFT - Applies regular QFT to entangled qubits. -
Quantum Neural Network (QNN) - This algorithm class is the quantum equivalent to classical Neural - Network. The source code for the algorithmic level originates from - this page. -
- Quantum Phase Estimation (QPE) exact - - QPE estimates the phase of a quantum operation and is a very - important building block in many quantum algorithms. In the exact - case, the applied phase is exactly representable by the number of - qubits. -
- Quantum Phase Estimation (QPE) inexact - - Similar to QPE exact with the difference, that the applied phase - is not exactly representable by the number of qubits. -
Quantum Walk (no ancilla) - Quantum walks are the quantum equivalent to classical random - walks. In this no ancilla version, no ancilla qubits are used - during its realization. -
Quantum Walk (v-chain) - Similar to the algorithm above with the difference, that the - ancillary mode is a v-chain in this algorithm. -
Random Circuit - This benchmark represents a random circuit which is twice as deep - as wide. It considers random quantum gates with up to four qubits. -
Routing - This problem is similar to the travelling salesman problem with - the difference, that more than one vehicle may be used to travel - between those to be visited points, such that each point is - visited at least once. The source code for the algorithmic level - originates from - this page. -
Shor's - This algorithm is one of the most famous quantum algorithms and - used to find prime factors of integers. Here, we provide quantum - algorithms solving this problem for the integers 9, 15, and 821. - The filename, e.g., shor_821_4_t-indep_42.qasm includes also the - to be factorized number (821) and the period used, namely 4. -
Travelling Salesman - The travelling salesman problem is a very prominent optimization - problem of calculation the shortest path of a number of to be - visited points. Here, this is formulated as a quadratic problem - and solved using VQE with a TwoLocal ansatz. The source code for - the algorithmic level originates from - this page. -
- Variational Quantum Eigensolver (VQE) - - VQE is also one of the most famous algorithm from the class of - variational quantum algorithms. It is a parameterizable quantum - algorithms with different possible choices of an ansatz function. - Here, a TwoLocal ansatz is chosen and applied to the same max-cut - problem instance as in QAOA. -
- Efficient SU2 ansatz with Random Parameters - - VQE ansatz with randomly initialized values. Detailed information - can be found on - this page. -
- Real Amplitudes ansatz with Random Parameters - - VQE ansatz with randomly initialized values. Detailed information - can be found on - this page. -
- Two Local ansatz with random parameters - - VQE ansatz with randomly initialized values. Detailed information - can be found on - this page. -
W-State - The W state is an entangled quantum state with a certain type of - entanglement. -
-
-
- - - - - - - diff --git a/frontend/src/mqt/bench/viewer/templates/description.html b/frontend/src/mqt/bench/viewer/templates/description.html deleted file mode 100644 index 1ee774182..000000000 --- a/frontend/src/mqt/bench/viewer/templates/description.html +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - - - - - - - MQT Bench - - - - - -
- -
-

MQT Bench: Level Description and File Format

-

Benchmarks are provided on four different abstraction levels:

-
    -
  • - Algorithmic Level: Circuits are described in a textbook-like - fashion using high-level constructs. -
  • -
  • - Target-Independent Level: Circuits are unfolded and unrolled - representations of the circuits from the algorithmic level. -
  • -
  • - Target-dependent Native Gates Level: Circuits are synthesized - to a particular native gate-set. -
  • -
  • - Target-dependent Mapped Level: Circuits are mapped to a - particular architecture. -
  • -
-

Used File Format:

-
    -
  • - Until openQASM 3.0 is widely supported, all circuits (except those on - the algorithmic level) are provided as .qasm files following - the openQASM 2.0 standard. Circuits on the algorithmic level can - directly be generated (as IBM Qiskit QuantumCircuit objects) using the - mqt.bench python package. More details on openQASM 2.0 can be - found here, and on - openQASM 3.0 here. -
  • -
  • - Not every benchmark is necessarily available for every possible - configuration of the available options. For example, not all qubit - counts in a given range might be available for a selected benchmark. -
  • -
  • - Mapped benchmarks are only available up to the biggest available - architecture. That is, for IBM (for Rigetti) mapped benchmarks are - available only for instances with up to 127 qubits (80 qubits). -
  • -
  • - Since the .zip file may be composed of numerous files - (currently, we offer more than 30.000 benchmark circuits), the - following naming convention is used for the respective files: -
  • -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Level Descriptions -
LevelFilenameExample
Algorithmic Level - For this level, dedicated .qasm files cannot be provided - yet, since openQASM 2.0 supports only a set of quantum gates. - Thus, we provide those benchmarks using our pypi package which is - accessible via pip. - - Python Qiskit::QuantumCircuit Object -
Target-independent Level - <benchmark_identifier>_indep_<compiler>_<number_of_qubits>.qasm - qft_indep_tket_5.qasm
- Target-dependent Native Gates Level - - <benchmark_identifier>_nativegates_<native_gate_set>_<compiler>_<optional: - compiler settings>_<number_of_qubits>.qasm - - qft_nativegates_ibm_qiskit_opt3_5.qasm -
Target-dependent Mapped Level - <benchmark_identifier>_mapped_<device>_<compiler>_<compiler - settings>_<number_of_qubits>.qasm - - qft_mapped_rigetti_aspen_m3_qiskit_opt3_5.qasm -
-
- -
- - - - - - - - diff --git a/frontend/src/mqt/bench/viewer/templates/index.html b/frontend/src/mqt/bench/viewer/templates/index.html deleted file mode 100644 index 578e92782..000000000 --- a/frontend/src/mqt/bench/viewer/templates/index.html +++ /dev/null @@ -1,782 +0,0 @@ - - - - - - - - - - - - - MQT Bench - - - - - - -
-

- - - -

-
-

- Welcome to the Munich Quantum Toolkit Benchmark Library (MQT Bench)! -

-

- Quantum software tools for a wide variety of design tasks on and across - different levels of abstraction are crucial for eventually realizing - useful quantum applications. This requires practical and relevant - benchmarks in order for new software tools or design automation methods - to be empirically evaluated and compared to the current state of the - art. Since these tools and methods operate on and across different - levels of abstraction, it is beneficial having benchmarks consistently - available across those levels. The MQT Benchmark Library (MQT Bench) - provides a single benchmark suite which offers the same benchmark - algorithms on different levels of abstractions. At the moment, MQT Bench - comprises around 70,000 benchmark circuits ranging from 2 up to 130 - qubits on four abstraction levels. -

- -

- In order to create a benchmark set according to your needs, simply fill - out the form below. Furthermore, MQT Bench is also available as a - PennyLane dataset. -

-
-
-
-
-

Benchmark Selection

-

- Please select the desired benchmarks from the set of all available - ones or select all (). For details, see the - benchmark description. -

-
-
-
-
-
-
Scalable Benchmarks:
-

- - The number of qubits for the following benchmarks is adjustable. - -

- - {% for benchmark in benchmarks %} - -
-
- - {{ benchmark.name }} -
-
- {% endfor %} - -
Qubit Range
-

- Select the desired qubit range for the scalable benchmarks. -

-
- - -
-
- -
-
Non-Scalable Benchmarks:
-

- - The number of qubits for the following benchmarks is fixed. - -

- - {% for nonscalable_benchmark in nonscalable_benchmarks %} - -
-
- - {{ nonscalable_benchmark.name }} -
-
- - {% endfor %} -
-
- -
-

Abstraction Level Selection

-

- Next, abstraction levels for the selected benchmarks must be chosen. - There are four available levels ranging from a rather high level - description on the algorithm level towards a rather low level - description on the target-dependent mapped level. For details, see - the level description. -

-
- -
-
-
-
-
Algorithm Level
-

- Currently, only available using the Python package. Details can be - found on our - GitHub page. -

-
- -
-
Target-independent Level
-

- Select the used compiler: -

-
-
- - -
- -
- - -
-
-
- -
-
Target-dependent Native Gates Level
- -

- Select targeted native gate-set: -

-
-
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
-

- Select the used compiler: -

- -
-
- - -
- -
- - -
-
-

- If Qiskit is selected, select its optimization level: -

-
- - - - - - - - -
-
- -
-
Target-dependent Mapped Level
-

- Select a targeted device: -

- -
-
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
-

- Select the used compiler: -

-
-
- - -
-
- - -
-
-
-

- If Qiskit is selected, select its optimization level: -

-
- - - - - - - - -
-

- If TKET is selected, select its placement settings: -

-
- - - - -
-
-
-
-
-

Download

-

-
-
Number of selected benchmarks:  
-
0
-
- After the download button is clicked, all benchmarks provided as - .qasm files are downloaded as a .zip archive. Details - of the file format are - provided. Alternatively, a pre-generated archive with - all benchmarks can be downloaded. - -
- -
-

- MQT Bench is also available as a - PennyLane dataset. -

-
-
-
-
- -
- -
-

Reference

-

- For a more detailed description of MQT Bench, we are referring to the - corresponding paper - "MQT Bench: Benchmarking Software and Design Automation Tools for - Quantum Computing". Our implementation is available on - GitHub. - - In case you are using MQT Bench in your work, we would be thankful if - you referred to it by citing the following publication: -

- -

- @article{quetschlich2023mqtbench,
-   title={{{MQT Bench}}: Benchmarking Software and - Design Automation Tools for Quantum Computing},
-   shorttitle = {{MQT Bench}},
-   journal = {{Quantum}},
-   author={Quetschlich, Nils and Burgholzer, Lukas and Wille, - Robert},
-   year={2023},
-   note={{{MQT Bench}} is available at - \url{https://www.cda.cit.tum.de/mqtbench/}},
- } -

- -

- In case you have any problems or questions feel free to contact us via - quantum.cda@xcit.tum.de. - More on our work on quantum computation is summarized on - this page. -

-
- - - - - - - - - - diff --git a/frontend/src/mqt/bench/viewer/templates/legal.html b/frontend/src/mqt/bench/viewer/templates/legal.html deleted file mode 100644 index 48c65550a..000000000 --- a/frontend/src/mqt/bench/viewer/templates/legal.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - - - - - - - MQT Bench - - - - - - -
-
- Herausgeber
- Technische Universität München
- Arcisstraße 21
- 80333 München
- Telefon: +49 89 289-01
- poststelle@tum.de

- - Rechtsform und Vertretung
- Die Technische Universität München ist eine Körperschaft des Öffentlichen - Rechts und staatliche Einrichtung (Art. 11 Abs. 1 BayHSchG). Sie wird - gesetzlich vertreten durch den Präsidenten Prof. Dr. Thomas F. Hofmann. -

- Zuständige Aufsichtsbehörde
- Bayerisches Staatsministerium für Wissenschaft und Kunst

- - Umsatzsteueridentifikationnummer
- DE811193231 (gemäß § 27a Umsatzsteuergesetz )

- - Inhaltlich verantwortlich
- Prof. Dr. Robert Wille
- Arcisstr. 21
- 80333 München
- E-Mail: robert.wille(at)tum.de

- - Namentlich gekennzeichnete Internetseiten geben die Auffassungen und - Erkenntnisse der genannten Personen wieder.

- - Nutzungsbedingungen
- Texte, Bilder, Grafiken sowie die Gestaltung dieses Webauftritts können - dem Urheberrecht unterliegen. Nicht urheberrechtlich geschützt sind nach § - 5 des Urheberrechtsgesetz (UrhG) -
    -
  • - Gesetze, Verordnungen, amtliche Erlasse und Bekanntmachungen sowie - Entscheidungen und amtlich verfasste Leitsätze zu Entscheidungen und -
  • -
  • - andere amtliche Werke, die im amtlichen Interesse zur allgemeinen - Kenntnisnahme veröffentlicht worden sind, mit der Einschränkung, dass - die Bestimmungen über Änderungsverbot und Quellenangabe in § 62 Abs. 1 - bis 3 und § 63 Abs. 1 und 2 UrhG entsprechend anzuwenden sind. -
  • -
- Als Privatperson dürfen Sie urheberrechtlich geschütztes Material zum - privaten und sonstigen eigenen Gebrauch im Rahmen des § 53 UrhG verwenden. - Eine Vervielfältigung oder Verwendung urheberrechtlich geschützten - Materials dieser Seiten oder Teilen davon in anderen elektronischen oder - gedruckten Publikationen und deren Veröffentlichung ist nur mit unserer - Einwilligung gestattet. Diese Einwilligung erteilen auf Anfrage die für - den Inhalt Verantwortlichen. Der Nachdruck und die Auswertung von - Pressemitteilungen und Reden sind mit Quellenangabe allgemein gestattet. -

- Weiterhin können Texte, Bilder, Grafiken und sonstige Dateien ganz oder - teilweise dem Urheberrecht Dritter unterliegen. Auch über das Bestehen - möglicher Rechte Dritter geben Ihnen die für den Inhalt Verantwortlichen - nähere Auskünfte. -

- Haftungsausschluss
- Alle in diesem Webauftritt bereitgestellten Informationen haben wir nach - bestem Wissen und Gewissen erarbeitet und geprüft. Eine Gewähr für die - jederzeitige Aktualität, Richtigkeit, Vollständigkeit und Verfügbarkeit - der bereit gestellten Informationen können wir allerdings nicht - übernehmen. Ein Vertragsverhältnis mit den Nutzern des Webauftritts kommt - nicht zustande. -

- Wir haften nicht für Schäden, die durch die Nutzung dieses Webauftritts - entstehen. Dieser Haftungsausschluss gilt nicht, soweit die Vorschriften - des § 839 BGB (Haftung bei Amtspflichtverletzung) einschlägig sind. Für - etwaige Schäden, die beim Aufrufen oder Herunterladen von Daten durch - Schadsoftware oder der Installation oder Nutzung von Software verursacht - werden, übernehmen wir keine Haftung. -

- Links
- Von unseren eigenen Inhalten sind Querverweise („Links") auf die Webseiten - anderer Anbieter zu unterscheiden. Durch diese Links ermöglichen wir - lediglich den Zugang zur Nutzung fremder Inhalte nach § 8 - Telemediengesetz. Bei der erstmaligen Verknüpfung mit diesen - Internetangeboten haben wir diese fremden Inhalte daraufhin überprüft, ob - durch sie eine mögliche zivilrechtliche oder strafrechtliche - Verantwortlichkeit ausgelöst wird. Wir können diese fremden Inhalte aber - nicht ständig auf Veränderungen überprüfen und daher auch keine - Verantwortung dafür übernehmen. Für illegale, fehlerhafte oder - unvollständige Inhalte und insbesondere für Schäden, die aus der Nutzung - oder Nichtnutzung von Informationen Dritter entstehen, haftet allein der - jeweilige Anbieter der Seite. -
- -
- - - - - - - diff --git a/frontend/tests/test_benchviewer.py b/frontend/tests/test_benchviewer.py deleted file mode 100644 index 5ec55d8a3..000000000 --- a/frontend/tests/test_benchviewer.py +++ /dev/null @@ -1,443 +0,0 @@ -"""Test the mqt.bench.viewer module.""" - -from __future__ import annotations - -from importlib import resources -from pathlib import Path - -import pytest - -from mqt.bench.viewer import Backend, BenchmarkConfiguration, Server, backend -from mqt.bench.viewer.main import app - - -@pytest.mark.parametrize( - ("filename", "expected_res"), - [ - ("shor_15_4_nativegates_rigetti_qiskit_opt0_18.qasm", 0), - ("dj_mapped_ibm_washington_qiskit_opt3_103.qasm", 3), - ("graphstate_nativegates_ibm_qiskit_opt2_15.qasm", 2), - ("grover-noancilla_nativegates_ibm_qiskit_opt1_8.qasm", 1), - ("random_indep_5.qasm", -1), - ], -) -def test_get_opt_level(filename: str, expected_res: int) -> None: - """Test the get_opt_level parsing function.""" - assert int(backend.get_opt_level(filename)) == expected_res - - -@pytest.mark.parametrize( - ("filename", "expected_res"), - [ - ("shor_15_4_nativegates_rigetti_qiskit_opt0_18.qasm", 18), - ("dj_mapped_ibm_washington_qiskit_opt3_103.qasm", 103), - ("graphstate_nativegates_ibm_qiskit_opt2_15.qasm", 15), - ("grover-noancilla_nativegates_ibm_qiskit_opt1_8.qasm", 8), - ("random_indep_5.qasm", 5), - ], -) -def test_get_num_qubits(filename: str, expected_res: int) -> None: - """Test the get_num_qubits parsing function.""" - assert int(backend.get_num_qubits(filename)) == expected_res - - -@pytest.mark.parametrize( - ("filename", "expected_res"), - [ - ( - "shor_15_4_nativegates_rigetti_qiskit_opt0_18.qasm", - backend.ParsedBenchmarkName( - benchmark="shor", - num_qubits=18, - indep_flag=False, - nativegates_flag=True, - mapped_flag=False, - compiler="qiskit", - compiler_settings=0, - gate_set="rigetti", - target_device=None, - filename="shor_15_4_nativegates_rigetti_qiskit_opt0_18.qasm", - ), - ), - ( - "dj_mapped_ibm_washington_qiskit_opt3_103.qasm", - backend.ParsedBenchmarkName( - benchmark="dj", - num_qubits=103, - indep_flag=False, - nativegates_flag=False, - mapped_flag=True, - compiler="qiskit", - compiler_settings=3, - gate_set="ibm", - target_device="ibm_washington", - filename="dj_mapped_ibm_washington_qiskit_opt3_103.qasm", - ), - ), - ( - "pricingcall_mapped_oqc_lucy_tket_line_5.qasm", - backend.ParsedBenchmarkName( - benchmark="pricingcall", - num_qubits=5, - indep_flag=False, - nativegates_flag=False, - mapped_flag=True, - compiler="tket", - compiler_settings="line", - gate_set="oqc", - target_device="oqc_lucy", - filename="pricingcall_mapped_oqc_lucy_tket_line_5.qasm", - ), - ), - ( - "portfoliovqe_nativegates_ionq_qiskit_opt1_3.qasm", - backend.ParsedBenchmarkName( - benchmark="portfoliovqe", - num_qubits=3, - indep_flag=False, - nativegates_flag=True, - mapped_flag=False, - compiler="qiskit", - compiler_settings=1, - gate_set="ionq", - target_device=None, - filename="portfoliovqe_nativegates_ionq_qiskit_opt1_3.qasm", - ), - ), - ( - "random_indep_qiskit_5.qasm", - backend.ParsedBenchmarkName( - benchmark="random", - num_qubits=5, - indep_flag=True, - nativegates_flag=False, - mapped_flag=False, - compiler="qiskit", - compiler_settings=-1, - gate_set=None, - target_device=None, - filename="random_indep_qiskit_5.qasm", - ), - ), - ], -) -def test_parse_data(filename: str, expected_res: backend.ParsedBenchmarkName) -> None: - """Test the parse_data parsing function.""" - assert backend.parse_data(filename) == expected_res - - -def test_prepare_form_input() -> None: - """Test the prepare_form_input function.""" - form_data = { - "all_benchmarks": "true", - "minQubits": "75", - "maxQubits": "110", - "selectBench_1": "Amplitude Estimation (AE)", - "selectBench_2": "Deutsch-Jozsa", - "selectBench_3": "Graph State", - "selectBench_4": "GHZ State", - "selectBench_5": "Grover's (no ancilla)", - "selectBench_6": "Grover's (v-chain)", - "selectBench_7": "Portfolio Optimization with QAOA", - "selectBench_8": "Portfolio Optimization with VQE", - "selectBench_9": "Quantum Approximation Optimization Algorithm (QAOA)", - "selectBench_10": "Quantum Fourier Transformation (QFT)", - "selectBench_11": "QFT Entangled", - "selectBench_12": "Quantum Neural Network (QNN)", - "selectBench_13": "Quantum Phase Estimation (QPE) exact", - "selectBench_14": "Quantum Phase Estimation (QPE) inexact", - "selectBench_15": "Quantum Walk (no ancilla)", - "selectBench_16": "Quantum Walk (v-chain)", - "selectBench_17": "Random Circuit", - "selectBench_18": "Variational Quantum Eigensolver (VQE)", - "selectBench_19": "Efficient SU2 ansatz with Random Parameters", - "selectBench_20": "Real Amplitudes ansatz with Random Parameters", - "selectBench_21": "Two Local ansatz with Random Parameters", - "selectBench_22": "W-State", - "selectBench_23": "Ground State", - "selectBench_24": "Pricing Call Option", - "selectBench_25": "Pricing Put Option", - "selectBench_26": "Routing", - "selectBench_27": "Shor's", - "selectBench_28": "Travelling Salesman", - "indep_qiskit_compiler": "true", - "indep_tket_compiler": "true", - "nativegates_qiskit_compiler": "true", - "nativegates_qiskit_compiler_opt0": "true", - "nativegates_qiskit_compiler_opt1": "true", - "nativegates_qiskit_compiler_opt2": "true", - "nativegates_qiskit_compiler_opt3": "true", - "nativegates_tket_compiler value=": "on", - "nativegates_ibm": "true", - "nativegates_rigetti": "true", - "nativegates_oqc": "true", - "nativegates_ionq": "true", - "nativegates_quantinuum": "true", - "mapped_qiskit_compiler": "true", - "mapped_qiskit_compiler_opt0": "true", - "mapped_qiskit_compiler_opt1": "true", - "mapped_qiskit_compiler_opt2": "true", - "mapped_qiskit_compiler_opt3": "true", - "mapped_tket_compiler": "true", - "mapped_tket_compiler_graph": "true", - "mapped_tket_compiler_line": "true", - "device_ibm_washington": "true", - "device_ibm_montreal": "true", - "device_rigetti_aspen_m3": "true", - "device_oqc_lucy": "true", - "device_ionq_harmony": "true", - "device_ionq_aria1": "true", - "device_quantinuum_h2": "true", - } - - expected_res = BenchmarkConfiguration( - min_qubits=75, - max_qubits=110, - indices_benchmarks=list(range(1, 29)), - indep_qiskit_compiler=True, - indep_tket_compiler=True, - nativegates_qiskit_compiler=True, - native_qiskit_opt_lvls=[0, 1, 2, 3], - nativegates_tket_compiler=True, - native_gatesets=["ibm", "rigetti", "oqc", "ionq", "quantinuum"], - mapped_qiskit_compiler=True, - mapped_qiskit_opt_lvls=[0, 1, 2, 3], - mapped_tket_compiler=True, - mapped_tket_placements=["graph", "line"], - mapped_devices=[ - "ibm_washington", - "ibm_montreal", - "rigetti_aspen_m3", - "oqc_lucy", - "ionq_harmony", - "ionq_aria1", - "quantinuum_h2", - ], - ) - backend = Backend() - assert backend.prepare_form_input(form_data) == expected_res - - form_data = { - "all_benchmarks": "true", - "minQubits": "75", - "maxQubits": "110", - "indep_qiskit_compiler": "true", - "indep_tket_compiler": "true", - "nativegates_qiskit_compiler": "true", - "nativegates_qiskit_compiler_opt0": "true", - "nativegates_qiskit_compiler_opt1": "true", - "nativegates_qiskit_compiler_opt2": "true", - "nativegates_qiskit_compiler_opt3": "true", - "nativegates_tket_compiler value=": "on", - "nativegates_ibm": "true", - "nativegates_rigetti": "true", - "nativegates_oqc": "true", - "nativegates_ionq": "true", - "nativegates_quantinuum": "true", - "mapped_qiskit_compiler": "true", - "mapped_qiskit_compiler_opt0": "true", - "mapped_qiskit_compiler_opt1": "true", - "mapped_qiskit_compiler_opt2": "true", - "mapped_qiskit_compiler_opt3": "true", - "mapped_tket_compiler": "true", - "mapped_tket_compiler_graph": "true", - "mapped_tket_compiler_line": "true", - "device_ibm_washington": "true", - "device_ibm_montreal": "true", - "device_rigetti_aspen_m3": "true", - "device_oqc_lucy": "true", - "device_ionq_harmony": "true", - "device_ionq_aria1": "true", - "device_quantinuum_h2": "true", - } - expected_res = BenchmarkConfiguration( - min_qubits=75, - max_qubits=110, - indices_benchmarks=[], - indep_qiskit_compiler=True, - indep_tket_compiler=True, - nativegates_qiskit_compiler=True, - native_qiskit_opt_lvls=[0, 1, 2, 3], - nativegates_tket_compiler=True, - native_gatesets=["ibm", "rigetti", "oqc", "ionq", "quantinuum"], - mapped_qiskit_compiler=True, - mapped_qiskit_opt_lvls=[0, 1, 2, 3], - mapped_tket_compiler=True, - mapped_tket_placements=["graph", "line"], - mapped_devices=[ - "ibm_washington", - "ibm_montreal", - "rigetti_aspen_m3", - "oqc_lucy", - "ionq_harmony", - "ionq_aria1", - "quantinuum_h2", - ], - ) - backend = Backend() - assert backend.prepare_form_input(form_data) == expected_res - - -benchviewer = resources.files("mqt.bench.viewer") - - -def test_read_mqtbench_all_zip() -> None: - """Test the read_mqtbench_all_zip function.""" - backend = Backend() - with resources.as_file(benchviewer): - target_location = str(Path("./tests").resolve()) - assert backend.read_mqtbench_all_zip(skip_question=True, target_location=target_location) - - -def test_create_database() -> None: - """Test the create_database function.""" - backend = Backend() - res_zip = backend.read_mqtbench_all_zip( - skip_question=True, - target_location=str(Path("./tests").resolve()), - ) - assert res_zip - - assert backend.database is None - backend.init_database() - - input_data = BenchmarkConfiguration( - min_qubits=2, - max_qubits=5, - indices_benchmarks=[4], - indep_qiskit_compiler=True, - indep_tket_compiler=False, - nativegates_qiskit_compiler=False, - nativegates_tket_compiler=False, - mapped_qiskit_compiler=False, - mapped_tket_compiler=False, - ) - - res = backend.get_selected_file_paths(input_data) - assert isinstance(res, list) - assert len(res) >= 0 - - input_data = BenchmarkConfiguration( - min_qubits=110, - max_qubits=120, - indices_benchmarks=[3], - indep_qiskit_compiler=False, - indep_tket_compiler=False, - nativegates_qiskit_compiler=False, - nativegates_tket_compiler=True, - mapped_qiskit_compiler=False, - mapped_tket_compiler=False, - native_gatesets=["rigetti", "ionq"], - ) - res = backend.get_selected_file_paths(input_data) - assert isinstance(res, list) - assert len(res) >= 0 - - input_data = BenchmarkConfiguration( - min_qubits=75, - max_qubits=110, - indices_benchmarks=[2], - indep_qiskit_compiler=False, - indep_tket_compiler=False, - nativegates_qiskit_compiler=False, - nativegates_tket_compiler=False, - mapped_qiskit_compiler=True, - mapped_tket_compiler=True, - native_gatesets=["rigetti", "ionq"], - mapped_devices=["ibm_washington", "rigetti_aspen_m3"], - mapped_tket_placements=["graph"], - ) - res = backend.get_selected_file_paths(input_data) - assert isinstance(res, list) - assert len(res) >= 0 - - input_data = BenchmarkConfiguration( - min_qubits=2, - max_qubits=5, - indices_benchmarks=[23], - indep_qiskit_compiler=True, - indep_tket_compiler=True, - nativegates_qiskit_compiler=True, - nativegates_tket_compiler=False, - mapped_qiskit_compiler=True, - mapped_tket_compiler=True, - native_gatesets=["rigetti", "ionq", "oqc", "ibm", "quantinuum"], - mapped_devices=[ - "ibm_montreal", - "rigetti_aspen_m3", - "ionq_harmony", - "ionq_aria1", - "ocq_lucy", - "quantinuum_h2", - ], - mapped_tket_placements=["graph", "line"], - native_qiskit_opt_lvls=[0, 3], - mapped_qiskit_opt_lvls=[0, 3], - ) - res = backend.get_selected_file_paths(input_data) - assert isinstance(res, list) - assert len(res) >= 0 - - input_data = BenchmarkConfiguration( - min_qubits=2, - max_qubits=130, - indices_benchmarks=[1], - indep_qiskit_compiler=False, - indep_tket_compiler=False, - nativegates_qiskit_compiler=True, - nativegates_tket_compiler=True, - mapped_qiskit_compiler=True, - mapped_tket_compiler=True, - ) - res = backend.get_selected_file_paths(input_data) - assert isinstance(res, list) - assert len(res) >= 0 - - -def test_streaming_zip() -> None: - """Test the streaming_zip function.""" - backend = Backend() - backend.read_mqtbench_all_zip( - skip_question=True, - target_location=str(Path("./tests").resolve()), - ) - res = backend.generate_zip_ephemeral_chunks(filenames=["ghz_indep_qiskit_2.qasm", "ghz_indep_tket_2.qasm"]) - assert list(res) - - with pytest.raises(KeyError): - assert not list(backend.generate_zip_ephemeral_chunks(filenames=["not_existing_file.qasm"])) - - -def test_flask_server() -> None: - """Test the flask server.""" - with resources.as_file(benchviewer) as benchviewer_path: - benchviewer_location = benchviewer_path - target_location = str(Path("./tests").resolve()) - - Server( - skip_question=True, - activate_logging=False, - target_location=target_location, - ) - - paths_to_check = [ - "static/files/MQTBench_all.zip", - "templates/benchmark_description.html", - "templates/index.html", - "templates/legal.html", - "templates/description.html", - ] - for path in paths_to_check: - assert (benchviewer_location / path).is_file() - - with app.test_client() as c: - success_code = 200 - links_to_check = [ - "/mqtbench/index", - "/mqtbench/download", - "/mqtbench/legal", - "/mqtbench/description", - "/mqtbench/benchmark_description", - ] - for link in links_to_check: - assert c.get(link).status_code == success_code diff --git a/frontend/tests/test_pregenerated_zip.py b/frontend/tests/test_pregenerated_zip.py deleted file mode 100644 index 69dc2dae5..000000000 --- a/frontend/tests/test_pregenerated_zip.py +++ /dev/null @@ -1,51 +0,0 @@ -"""Test the Flask server with the pregenerated zip file.""" - -from __future__ import annotations - -import os -from importlib import resources - -import pytest - -from mqt.bench import utils -from mqt.bench.viewer import Server -from mqt.bench.viewer.main import app - -# only run test when executed on GitHub runner -IN_GITHUB_ACTIONS = os.getenv("GITHUB_ACTIONS") == "true" - - -@pytest.mark.skipif(not IN_GITHUB_ACTIONS, reason="Only run this test on GitHub runner") -def test_flask_server_with_pregenerated_zip() -> None: - """Test the Flask server with the pregenerated zip file.""" - benchviewer = resources.files("mqt.bench.viewer") - with resources.as_file(benchviewer) as benchviewer_path: - benchviewer_location = benchviewer_path - - Server( - skip_question=True, - activate_logging=False, - target_location=str(utils.get_zip_folder_path()), - ) - - paths_to_check = [ - "static/files/MQTBench_all.zip", - "templates/benchmark_description.html", - "templates/index.html", - "templates/legal.html", - "templates/description.html", - ] - for path in paths_to_check: - assert (benchviewer_location / path).is_file() - - with app.test_client() as c: - success_code = 200 - links_to_check = [ - "/mqtbench/index", - "/mqtbench/download", - "/mqtbench/legal", - "/mqtbench/description", - "/mqtbench/benchmark_description", - ] - for link in links_to_check: - assert c.get(link).status_code == success_code diff --git a/frontend/uv.lock b/frontend/uv.lock deleted file mode 100644 index db05af962..000000000 --- a/frontend/uv.lock +++ /dev/null @@ -1,1536 +0,0 @@ -version = 1 -requires-python = ">=3.10" -resolution-markers = [ - "python_full_version < '3.11'", - "python_full_version == '3.11.*'", - "python_full_version >= '3.12'", -] - -[[package]] -name = "annotated-types" -version = "0.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 }, -] - -[[package]] -name = "beautifulsoup4" -version = "4.12.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "soupsieve" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b3/ca/824b1195773ce6166d388573fc106ce56d4a805bd7427b624e063596ec58/beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051", size = 581181 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b1/fe/e8c672695b37eecc5cbf43e1d0638d88d66ba3a44c4d321c796f4e59167f/beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed", size = 147925 }, -] - -[[package]] -name = "blinker" -version = "1.9.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/21/28/9b3f50ce0e048515135495f198351908d99540d69bfdc8c1d15b73dc55ce/blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf", size = 22460 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc", size = 8458 }, -] - -[[package]] -name = "certifi" -version = "2024.8.30" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b0/ee/9b19140fe824b367c04c5e1b369942dd754c4c5462d5674002f75c4dedc1/certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9", size = 168507 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8", size = 167321 }, -] - -[[package]] -name = "cffi" -version = "1.17.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pycparser" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/90/07/f44ca684db4e4f08a3fdc6eeb9a0d15dc6883efc7b8c90357fdbf74e186c/cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14", size = 182191 }, - { url = "https://files.pythonhosted.org/packages/08/fd/cc2fedbd887223f9f5d170c96e57cbf655df9831a6546c1727ae13fa977a/cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67", size = 178592 }, - { url = "https://files.pythonhosted.org/packages/de/cc/4635c320081c78d6ffc2cab0a76025b691a91204f4aa317d568ff9280a2d/cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382", size = 426024 }, - { url = "https://files.pythonhosted.org/packages/b6/7b/3b2b250f3aab91abe5f8a51ada1b717935fdaec53f790ad4100fe2ec64d1/cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702", size = 448188 }, - { url = "https://files.pythonhosted.org/packages/d3/48/1b9283ebbf0ec065148d8de05d647a986c5f22586b18120020452fff8f5d/cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3", size = 455571 }, - { url = "https://files.pythonhosted.org/packages/40/87/3b8452525437b40f39ca7ff70276679772ee7e8b394934ff60e63b7b090c/cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6", size = 436687 }, - { url = "https://files.pythonhosted.org/packages/8d/fb/4da72871d177d63649ac449aec2e8a29efe0274035880c7af59101ca2232/cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17", size = 446211 }, - { url = "https://files.pythonhosted.org/packages/ab/a0/62f00bcb411332106c02b663b26f3545a9ef136f80d5df746c05878f8c4b/cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8", size = 461325 }, - { url = "https://files.pythonhosted.org/packages/36/83/76127035ed2e7e27b0787604d99da630ac3123bfb02d8e80c633f218a11d/cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e", size = 438784 }, - { url = "https://files.pythonhosted.org/packages/21/81/a6cd025db2f08ac88b901b745c163d884641909641f9b826e8cb87645942/cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be", size = 461564 }, - { url = "https://files.pythonhosted.org/packages/f8/fe/4d41c2f200c4a457933dbd98d3cf4e911870877bd94d9656cc0fcb390681/cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c", size = 171804 }, - { url = "https://files.pythonhosted.org/packages/d1/b6/0b0f5ab93b0df4acc49cae758c81fe4e5ef26c3ae2e10cc69249dfd8b3ab/cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15", size = 181299 }, - { url = "https://files.pythonhosted.org/packages/6b/f4/927e3a8899e52a27fa57a48607ff7dc91a9ebe97399b357b85a0c7892e00/cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", size = 182264 }, - { url = "https://files.pythonhosted.org/packages/6c/f5/6c3a8efe5f503175aaddcbea6ad0d2c96dad6f5abb205750d1b3df44ef29/cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", size = 178651 }, - { url = "https://files.pythonhosted.org/packages/94/dd/a3f0118e688d1b1a57553da23b16bdade96d2f9bcda4d32e7d2838047ff7/cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", size = 445259 }, - { url = "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", size = 469200 }, - { url = "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", size = 477235 }, - { url = "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", size = 459721 }, - { url = "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", size = 467242 }, - { url = "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", size = 477999 }, - { url = "https://files.pythonhosted.org/packages/44/74/f2a2460684a1a2d00ca799ad880d54652841a780c4c97b87754f660c7603/cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", size = 454242 }, - { url = "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", size = 478604 }, - { url = "https://files.pythonhosted.org/packages/34/33/e1b8a1ba29025adbdcda5fb3a36f94c03d771c1b7b12f726ff7fef2ebe36/cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", size = 171727 }, - { url = "https://files.pythonhosted.org/packages/3d/97/50228be003bb2802627d28ec0627837ac0bf35c90cf769812056f235b2d1/cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", size = 181400 }, - { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178 }, - { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840 }, - { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803 }, - { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850 }, - { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729 }, - { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256 }, - { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424 }, - { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568 }, - { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736 }, - { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448 }, - { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976 }, - { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989 }, - { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802 }, - { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792 }, - { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893 }, - { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810 }, - { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200 }, - { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447 }, - { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358 }, - { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469 }, - { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475 }, - { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 }, -] - -[[package]] -name = "charset-normalizer" -version = "3.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f2/4f/e1808dc01273379acc506d18f1504eb2d299bd4131743b9fc54d7be4df1e/charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", size = 106620 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/69/8b/825cc84cf13a28bfbcba7c416ec22bf85a9584971be15b21dd8300c65b7f/charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6", size = 196363 }, - { url = "https://files.pythonhosted.org/packages/23/81/d7eef6a99e42c77f444fdd7bc894b0ceca6c3a95c51239e74a722039521c/charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b", size = 125639 }, - { url = "https://files.pythonhosted.org/packages/21/67/b4564d81f48042f520c948abac7079356e94b30cb8ffb22e747532cf469d/charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99", size = 120451 }, - { url = "https://files.pythonhosted.org/packages/c2/72/12a7f0943dd71fb5b4e7b55c41327ac0a1663046a868ee4d0d8e9c369b85/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca", size = 140041 }, - { url = "https://files.pythonhosted.org/packages/67/56/fa28c2c3e31217c4c52158537a2cf5d98a6c1e89d31faf476c89391cd16b/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d", size = 150333 }, - { url = "https://files.pythonhosted.org/packages/f9/d2/466a9be1f32d89eb1554cf84073a5ed9262047acee1ab39cbaefc19635d2/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7", size = 142921 }, - { url = "https://files.pythonhosted.org/packages/f8/01/344ec40cf5d85c1da3c1f57566c59e0c9b56bcc5566c08804a95a6cc8257/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3", size = 144785 }, - { url = "https://files.pythonhosted.org/packages/73/8b/2102692cb6d7e9f03b9a33a710e0164cadfce312872e3efc7cfe22ed26b4/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907", size = 146631 }, - { url = "https://files.pythonhosted.org/packages/d8/96/cc2c1b5d994119ce9f088a9a0c3ebd489d360a2eb058e2c8049f27092847/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b", size = 140867 }, - { url = "https://files.pythonhosted.org/packages/c9/27/cde291783715b8ec30a61c810d0120411844bc4c23b50189b81188b273db/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912", size = 149273 }, - { url = "https://files.pythonhosted.org/packages/3a/a4/8633b0fc1a2d1834d5393dafecce4a1cc56727bfd82b4dc18fc92f0d3cc3/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95", size = 152437 }, - { url = "https://files.pythonhosted.org/packages/64/ea/69af161062166b5975ccbb0961fd2384853190c70786f288684490913bf5/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e", size = 150087 }, - { url = "https://files.pythonhosted.org/packages/3b/fd/e60a9d9fd967f4ad5a92810138192f825d77b4fa2a557990fd575a47695b/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe", size = 145142 }, - { url = "https://files.pythonhosted.org/packages/6d/02/8cb0988a1e49ac9ce2eed1e07b77ff118f2923e9ebd0ede41ba85f2dcb04/charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc", size = 94701 }, - { url = "https://files.pythonhosted.org/packages/d6/20/f1d4670a8a723c46be695dff449d86d6092916f9e99c53051954ee33a1bc/charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749", size = 102191 }, - { url = "https://files.pythonhosted.org/packages/9c/61/73589dcc7a719582bf56aae309b6103d2762b526bffe189d635a7fcfd998/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c", size = 193339 }, - { url = "https://files.pythonhosted.org/packages/77/d5/8c982d58144de49f59571f940e329ad6e8615e1e82ef84584c5eeb5e1d72/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944", size = 124366 }, - { url = "https://files.pythonhosted.org/packages/bf/19/411a64f01ee971bed3231111b69eb56f9331a769072de479eae7de52296d/charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee", size = 118874 }, - { url = "https://files.pythonhosted.org/packages/4c/92/97509850f0d00e9f14a46bc751daabd0ad7765cff29cdfb66c68b6dad57f/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c", size = 138243 }, - { url = "https://files.pythonhosted.org/packages/e2/29/d227805bff72ed6d6cb1ce08eec707f7cfbd9868044893617eb331f16295/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6", size = 148676 }, - { url = "https://files.pythonhosted.org/packages/13/bc/87c2c9f2c144bedfa62f894c3007cd4530ba4b5351acb10dc786428a50f0/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea", size = 141289 }, - { url = "https://files.pythonhosted.org/packages/eb/5b/6f10bad0f6461fa272bfbbdf5d0023b5fb9bc6217c92bf068fa5a99820f5/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc", size = 142585 }, - { url = "https://files.pythonhosted.org/packages/3b/a0/a68980ab8a1f45a36d9745d35049c1af57d27255eff8c907e3add84cf68f/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5", size = 144408 }, - { url = "https://files.pythonhosted.org/packages/d7/a1/493919799446464ed0299c8eef3c3fad0daf1c3cd48bff9263c731b0d9e2/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594", size = 139076 }, - { url = "https://files.pythonhosted.org/packages/fb/9d/9c13753a5a6e0db4a0a6edb1cef7aee39859177b64e1a1e748a6e3ba62c2/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c", size = 146874 }, - { url = "https://files.pythonhosted.org/packages/75/d2/0ab54463d3410709c09266dfb416d032a08f97fd7d60e94b8c6ef54ae14b/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365", size = 150871 }, - { url = "https://files.pythonhosted.org/packages/8d/c9/27e41d481557be53d51e60750b85aa40eaf52b841946b3cdeff363105737/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129", size = 148546 }, - { url = "https://files.pythonhosted.org/packages/ee/44/4f62042ca8cdc0cabf87c0fc00ae27cd8b53ab68be3605ba6d071f742ad3/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236", size = 143048 }, - { url = "https://files.pythonhosted.org/packages/01/f8/38842422988b795220eb8038745d27a675ce066e2ada79516c118f291f07/charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99", size = 94389 }, - { url = "https://files.pythonhosted.org/packages/0b/6e/b13bd47fa9023b3699e94abf565b5a2f0b0be6e9ddac9812182596ee62e4/charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27", size = 101752 }, - { url = "https://files.pythonhosted.org/packages/d3/0b/4b7a70987abf9b8196845806198975b6aab4ce016632f817ad758a5aa056/charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6", size = 194445 }, - { url = "https://files.pythonhosted.org/packages/50/89/354cc56cf4dd2449715bc9a0f54f3aef3dc700d2d62d1fa5bbea53b13426/charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf", size = 125275 }, - { url = "https://files.pythonhosted.org/packages/fa/44/b730e2a2580110ced837ac083d8ad222343c96bb6b66e9e4e706e4d0b6df/charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db", size = 119020 }, - { url = "https://files.pythonhosted.org/packages/9d/e4/9263b8240ed9472a2ae7ddc3e516e71ef46617fe40eaa51221ccd4ad9a27/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1", size = 139128 }, - { url = "https://files.pythonhosted.org/packages/6b/e3/9f73e779315a54334240353eaea75854a9a690f3f580e4bd85d977cb2204/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03", size = 149277 }, - { url = "https://files.pythonhosted.org/packages/1a/cf/f1f50c2f295312edb8a548d3fa56a5c923b146cd3f24114d5adb7e7be558/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284", size = 142174 }, - { url = "https://files.pythonhosted.org/packages/16/92/92a76dc2ff3a12e69ba94e7e05168d37d0345fa08c87e1fe24d0c2a42223/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15", size = 143838 }, - { url = "https://files.pythonhosted.org/packages/a4/01/2117ff2b1dfc61695daf2babe4a874bca328489afa85952440b59819e9d7/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8", size = 146149 }, - { url = "https://files.pythonhosted.org/packages/f6/9b/93a332b8d25b347f6839ca0a61b7f0287b0930216994e8bf67a75d050255/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2", size = 140043 }, - { url = "https://files.pythonhosted.org/packages/ab/f6/7ac4a01adcdecbc7a7587767c776d53d369b8b971382b91211489535acf0/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719", size = 148229 }, - { url = "https://files.pythonhosted.org/packages/9d/be/5708ad18161dee7dc6a0f7e6cf3a88ea6279c3e8484844c0590e50e803ef/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631", size = 151556 }, - { url = "https://files.pythonhosted.org/packages/5a/bb/3d8bc22bacb9eb89785e83e6723f9888265f3a0de3b9ce724d66bd49884e/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b", size = 149772 }, - { url = "https://files.pythonhosted.org/packages/f7/fa/d3fc622de05a86f30beea5fc4e9ac46aead4731e73fd9055496732bcc0a4/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565", size = 144800 }, - { url = "https://files.pythonhosted.org/packages/9a/65/bdb9bc496d7d190d725e96816e20e2ae3a6fa42a5cac99c3c3d6ff884118/charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7", size = 94836 }, - { url = "https://files.pythonhosted.org/packages/3e/67/7b72b69d25b89c0b3cea583ee372c43aa24df15f0e0f8d3982c57804984b/charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9", size = 102187 }, - { url = "https://files.pythonhosted.org/packages/f3/89/68a4c86f1a0002810a27f12e9a7b22feb198c59b2f05231349fbce5c06f4/charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114", size = 194617 }, - { url = "https://files.pythonhosted.org/packages/4f/cd/8947fe425e2ab0aa57aceb7807af13a0e4162cd21eee42ef5b053447edf5/charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed", size = 125310 }, - { url = "https://files.pythonhosted.org/packages/5b/f0/b5263e8668a4ee9becc2b451ed909e9c27058337fda5b8c49588183c267a/charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250", size = 119126 }, - { url = "https://files.pythonhosted.org/packages/ff/6e/e445afe4f7fda27a533f3234b627b3e515a1b9429bc981c9a5e2aa5d97b6/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920", size = 139342 }, - { url = "https://files.pythonhosted.org/packages/a1/b2/4af9993b532d93270538ad4926c8e37dc29f2111c36f9c629840c57cd9b3/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64", size = 149383 }, - { url = "https://files.pythonhosted.org/packages/fb/6f/4e78c3b97686b871db9be6f31d64e9264e889f8c9d7ab33c771f847f79b7/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23", size = 142214 }, - { url = "https://files.pythonhosted.org/packages/2b/c9/1c8fe3ce05d30c87eff498592c89015b19fade13df42850aafae09e94f35/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc", size = 144104 }, - { url = "https://files.pythonhosted.org/packages/ee/68/efad5dcb306bf37db7db338338e7bb8ebd8cf38ee5bbd5ceaaaa46f257e6/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d", size = 146255 }, - { url = "https://files.pythonhosted.org/packages/0c/75/1ed813c3ffd200b1f3e71121c95da3f79e6d2a96120163443b3ad1057505/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88", size = 140251 }, - { url = "https://files.pythonhosted.org/packages/7d/0d/6f32255c1979653b448d3c709583557a4d24ff97ac4f3a5be156b2e6a210/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90", size = 148474 }, - { url = "https://files.pythonhosted.org/packages/ac/a0/c1b5298de4670d997101fef95b97ac440e8c8d8b4efa5a4d1ef44af82f0d/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b", size = 151849 }, - { url = "https://files.pythonhosted.org/packages/04/4f/b3961ba0c664989ba63e30595a3ed0875d6790ff26671e2aae2fdc28a399/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d", size = 149781 }, - { url = "https://files.pythonhosted.org/packages/d8/90/6af4cd042066a4adad58ae25648a12c09c879efa4849c705719ba1b23d8c/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482", size = 144970 }, - { url = "https://files.pythonhosted.org/packages/cc/67/e5e7e0cbfefc4ca79025238b43cdf8a2037854195b37d6417f3d0895c4c2/charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67", size = 94973 }, - { url = "https://files.pythonhosted.org/packages/65/97/fc9bbc54ee13d33dc54a7fcf17b26368b18505500fc01e228c27b5222d80/charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b", size = 102308 }, - { 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 = "click" -version = "8.1.7" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "platform_system == 'Windows'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/96/d3/f04c7bfcf5c1862a2a5b845c6b2b360488cf47af55dfa79c98f6a6bf98b5/click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de", size = 336121 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", size = 97941 }, -] - -[[package]] -name = "colorama" -version = "0.4.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, -] - -[[package]] -name = "cryptography" -version = "44.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/91/4c/45dfa6829acffa344e3967d6006ee4ae8be57af746ae2eba1c431949b32c/cryptography-44.0.0.tar.gz", hash = "sha256:cd4e834f340b4293430701e772ec543b0fbe6c2dea510a5286fe0acabe153a02", size = 710657 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/55/09/8cc67f9b84730ad330b3b72cf867150744bf07ff113cda21a15a1c6d2c7c/cryptography-44.0.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:84111ad4ff3f6253820e6d3e58be2cc2a00adb29335d4cacb5ab4d4d34f2a123", size = 6541833 }, - { url = "https://files.pythonhosted.org/packages/7e/5b/3759e30a103144e29632e7cb72aec28cedc79e514b2ea8896bb17163c19b/cryptography-44.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15492a11f9e1b62ba9d73c210e2416724633167de94607ec6069ef724fad092", size = 3922710 }, - { url = "https://files.pythonhosted.org/packages/5f/58/3b14bf39f1a0cfd679e753e8647ada56cddbf5acebffe7db90e184c76168/cryptography-44.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831c3c4d0774e488fdc83a1923b49b9957d33287de923d58ebd3cec47a0ae43f", size = 4137546 }, - { url = "https://files.pythonhosted.org/packages/98/65/13d9e76ca19b0ba5603d71ac8424b5694415b348e719db277b5edc985ff5/cryptography-44.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:761817a3377ef15ac23cd7834715081791d4ec77f9297ee694ca1ee9c2c7e5eb", size = 3915420 }, - { url = "https://files.pythonhosted.org/packages/b1/07/40fe09ce96b91fc9276a9ad272832ead0fddedcba87f1190372af8e3039c/cryptography-44.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3c672a53c0fb4725a29c303be906d3c1fa99c32f58abe008a82705f9ee96f40b", size = 4154498 }, - { url = "https://files.pythonhosted.org/packages/75/ea/af65619c800ec0a7e4034207aec543acdf248d9bffba0533342d1bd435e1/cryptography-44.0.0-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:4ac4c9f37eba52cb6fbeaf5b59c152ea976726b865bd4cf87883a7e7006cc543", size = 3932569 }, - { url = "https://files.pythonhosted.org/packages/4e/d5/9cc182bf24c86f542129565976c21301d4ac397e74bf5a16e48241aab8a6/cryptography-44.0.0-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:60eb32934076fa07e4316b7b2742fa52cbb190b42c2df2863dbc4230a0a9b385", size = 4164756 }, - { url = "https://files.pythonhosted.org/packages/c7/af/d1deb0c04d59612e3d5e54203159e284d3e7a6921e565bb0eeb6269bdd8a/cryptography-44.0.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ed3534eb1090483c96178fcb0f8893719d96d5274dfde98aa6add34614e97c8e", size = 4016721 }, - { url = "https://files.pythonhosted.org/packages/bd/69/7ca326c55698d0688db867795134bdfac87136b80ef373aaa42b225d6dd5/cryptography-44.0.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f3f6fdfa89ee2d9d496e2c087cebef9d4fcbb0ad63c40e821b39f74bf48d9c5e", size = 4240915 }, - { url = "https://files.pythonhosted.org/packages/ef/d4/cae11bf68c0f981e0413906c6dd03ae7fa864347ed5fac40021df1ef467c/cryptography-44.0.0-cp37-abi3-win32.whl", hash = "sha256:eb33480f1bad5b78233b0ad3e1b0be21e8ef1da745d8d2aecbb20671658b9053", size = 2757925 }, - { url = "https://files.pythonhosted.org/packages/64/b1/50d7739254d2002acae64eed4fc43b24ac0cc44bf0a0d388d1ca06ec5bb1/cryptography-44.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:abc998e0c0eee3c8a1904221d3f67dcfa76422b23620173e28c11d3e626c21bd", size = 3202055 }, - { url = "https://files.pythonhosted.org/packages/11/18/61e52a3d28fc1514a43b0ac291177acd1b4de00e9301aaf7ef867076ff8a/cryptography-44.0.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:660cb7312a08bc38be15b696462fa7cc7cd85c3ed9c576e81f4dc4d8b2b31591", size = 6542801 }, - { url = "https://files.pythonhosted.org/packages/1a/07/5f165b6c65696ef75601b781a280fc3b33f1e0cd6aa5a92d9fb96c410e97/cryptography-44.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1923cb251c04be85eec9fda837661c67c1049063305d6be5721643c22dd4e2b7", size = 3922613 }, - { url = "https://files.pythonhosted.org/packages/28/34/6b3ac1d80fc174812486561cf25194338151780f27e438526f9c64e16869/cryptography-44.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:404fdc66ee5f83a1388be54300ae978b2efd538018de18556dde92575e05defc", size = 4137925 }, - { url = "https://files.pythonhosted.org/packages/d0/c7/c656eb08fd22255d21bc3129625ed9cd5ee305f33752ef2278711b3fa98b/cryptography-44.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:c5eb858beed7835e5ad1faba59e865109f3e52b3783b9ac21e7e47dc5554e289", size = 3915417 }, - { url = "https://files.pythonhosted.org/packages/ef/82/72403624f197af0db6bac4e58153bc9ac0e6020e57234115db9596eee85d/cryptography-44.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f53c2c87e0fb4b0c00fa9571082a057e37690a8f12233306161c8f4b819960b7", size = 4155160 }, - { url = "https://files.pythonhosted.org/packages/a2/cd/2f3c440913d4329ade49b146d74f2e9766422e1732613f57097fea61f344/cryptography-44.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:9e6fc8a08e116fb7c7dd1f040074c9d7b51d74a8ea40d4df2fc7aa08b76b9e6c", size = 3932331 }, - { url = "https://files.pythonhosted.org/packages/31/d9/90409720277f88eb3ab72f9a32bfa54acdd97e94225df699e7713e850bd4/cryptography-44.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:9abcc2e083cbe8dde89124a47e5e53ec38751f0d7dfd36801008f316a127d7ba", size = 4165207 }, - { url = "https://files.pythonhosted.org/packages/7f/df/8be88797f0a1cca6e255189a57bb49237402b1880d6e8721690c5603ac23/cryptography-44.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:d2436114e46b36d00f8b72ff57e598978b37399d2786fd39793c36c6d5cb1c64", size = 4017372 }, - { url = "https://files.pythonhosted.org/packages/af/36/5ccc376f025a834e72b8e52e18746b927f34e4520487098e283a719c205e/cryptography-44.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a01956ddfa0a6790d594f5b34fc1bfa6098aca434696a03cfdbe469b8ed79285", size = 4239657 }, - { url = "https://files.pythonhosted.org/packages/46/b0/f4f7d0d0bcfbc8dd6296c1449be326d04217c57afb8b2594f017eed95533/cryptography-44.0.0-cp39-abi3-win32.whl", hash = "sha256:eca27345e1214d1b9f9490d200f9db5a874479be914199194e746c893788d417", size = 2758672 }, - { url = "https://files.pythonhosted.org/packages/97/9b/443270b9210f13f6ef240eff73fd32e02d381e7103969dc66ce8e89ee901/cryptography-44.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:708ee5f1bafe76d041b53a4f95eb28cdeb8d18da17e597d46d7833ee59b97ede", size = 3202071 }, - { url = "https://files.pythonhosted.org/packages/77/d4/fea74422326388bbac0c37b7489a0fcb1681a698c3b875959430ba550daa/cryptography-44.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:37d76e6863da3774cd9db5b409a9ecfd2c71c981c38788d3fcfaf177f447b731", size = 3338857 }, - { url = "https://files.pythonhosted.org/packages/1a/aa/ba8a7467c206cb7b62f09b4168da541b5109838627f582843bbbe0235e8e/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:f677e1268c4e23420c3acade68fac427fffcb8d19d7df95ed7ad17cdef8404f4", size = 3850615 }, - { url = "https://files.pythonhosted.org/packages/89/fa/b160e10a64cc395d090105be14f399b94e617c879efd401188ce0fea39ee/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f5e7cb1e5e56ca0933b4873c0220a78b773b24d40d186b6738080b73d3d0a756", size = 4081622 }, - { url = "https://files.pythonhosted.org/packages/47/8f/20ff0656bb0cf7af26ec1d01f780c5cfbaa7666736063378c5f48558b515/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:8b3e6eae66cf54701ee7d9c83c30ac0a1e3fa17be486033000f2a73a12ab507c", size = 3867546 }, - { url = "https://files.pythonhosted.org/packages/38/d9/28edf32ee2fcdca587146bcde90102a7319b2f2c690edfa627e46d586050/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:be4ce505894d15d5c5037167ffb7f0ae90b7be6f2a98f9a5c3442395501c32fa", size = 4090937 }, - { url = "https://files.pythonhosted.org/packages/cc/9d/37e5da7519de7b0b070a3fedd4230fe76d50d2a21403e0f2153d70ac4163/cryptography-44.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:62901fb618f74d7d81bf408c8719e9ec14d863086efe4185afd07c352aee1d2c", size = 3128774 }, -] - -[[package]] -name = "dill" -version = "0.3.9" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/70/43/86fe3f9e130c4137b0f1b50784dd70a5087b911fe07fa81e53e0c4c47fea/dill-0.3.9.tar.gz", hash = "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c", size = 187000 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/46/d1/e73b6ad76f0b1fb7f23c35c6d95dbc506a9c8804f43dda8cb5b0fa6331fd/dill-0.3.9-py3-none-any.whl", hash = "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a", size = 119418 }, -] - -[[package]] -name = "docplex" -version = "2.28.240" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "six" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/15/99/340a523d3e724df4ccb85180d5a539cb4a447fb4ca0fcc5897c054bc7adf/docplex-2.28.240.tar.gz", hash = "sha256:c0de407e33f8709bb4cd91b6efeb96fd88bfecbdce2caec51afb79253bde6ff5", size = 643369 } - -[[package]] -name = "fastdtw" -version = "0.3.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/99/43/30f2d8db076f216b15c10db663b46e22d1750b1ebacd7af6e62b83d6ab98/fastdtw-0.3.4.tar.gz", hash = "sha256:2350fa6ec36bcad186eaf81f46eff35181baf04e324f522de8aeb43d0243f64f", size = 133402 } - -[[package]] -name = "flask" -version = "3.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "blinker" }, - { name = "click" }, - { name = "itsdangerous" }, - { name = "jinja2" }, - { name = "werkzeug" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/89/50/dff6380f1c7f84135484e176e0cac8690af72fa90e932ad2a0a60e28c69b/flask-3.1.0.tar.gz", hash = "sha256:5f873c5184c897c8d9d1b05df1e3d01b14910ce69607a117bd3277098a5836ac", size = 680824 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/af/47/93213ee66ef8fae3b93b3e29206f6b251e65c97bd91d8e1c5596ef15af0a/flask-3.1.0-py3-none-any.whl", hash = "sha256:d667207822eb83f1c4b50949b1623c8fc8d51f2341d65f72e1a1815397551136", size = 102979 }, -] - -[[package]] -name = "frozendict" -version = "2.4.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bb/59/19eb300ba28e7547538bdf603f1c6c34793240a90e1a7b61b65d8517e35e/frozendict-2.4.6.tar.gz", hash = "sha256:df7cd16470fbd26fc4969a208efadc46319334eb97def1ddf48919b351192b8e", size = 316416 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a6/7f/e80cdbe0db930b2ba9d46ca35a41b0150156da16dfb79edcc05642690c3b/frozendict-2.4.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c3a05c0a50cab96b4bb0ea25aa752efbfceed5ccb24c007612bc63e51299336f", size = 37927 }, - { url = "https://files.pythonhosted.org/packages/29/98/27e145ff7e8e63caa95fb8ee4fc56c68acb208bef01a89c3678a66f9a34d/frozendict-2.4.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f5b94d5b07c00986f9e37a38dd83c13f5fe3bf3f1ccc8e88edea8fe15d6cd88c", size = 37945 }, - { url = "https://files.pythonhosted.org/packages/ac/f1/a10be024a9d53441c997b3661ea80ecba6e3130adc53812a4b95b607cdd1/frozendict-2.4.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4c789fd70879ccb6289a603cdebdc4953e7e5dea047d30c1b180529b28257b5", size = 117656 }, - { url = "https://files.pythonhosted.org/packages/46/a6/34c760975e6f1cb4db59a990d58dcf22287e10241c851804670c74c6a27a/frozendict-2.4.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da6a10164c8a50b34b9ab508a9420df38f4edf286b9ca7b7df8a91767baecb34", size = 117444 }, - { url = "https://files.pythonhosted.org/packages/62/dd/64bddd1ffa9617f50e7e63656b2a7ad7f0a46c86b5f4a3d2c714d0006277/frozendict-2.4.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9a8a43036754a941601635ea9c788ebd7a7efbed2becba01b54a887b41b175b9", size = 116801 }, - { url = "https://files.pythonhosted.org/packages/45/ae/af06a8bde1947277aad895c2f26c3b8b8b6ee9c0c2ad988fb58a9d1dde3f/frozendict-2.4.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c9905dcf7aa659e6a11b8051114c9fa76dfde3a6e50e6dc129d5aece75b449a2", size = 117329 }, - { url = "https://files.pythonhosted.org/packages/d2/df/be3fa0457ff661301228f4c59c630699568c8ed9b5480f113b3eea7d0cb3/frozendict-2.4.6-cp310-cp310-win_amd64.whl", hash = "sha256:323f1b674a2cc18f86ab81698e22aba8145d7a755e0ac2cccf142ee2db58620d", size = 37522 }, - { url = "https://files.pythonhosted.org/packages/4a/6f/c22e0266b4c85f58b4613fec024e040e93753880527bf92b0c1bc228c27c/frozendict-2.4.6-cp310-cp310-win_arm64.whl", hash = "sha256:eabd21d8e5db0c58b60d26b4bb9839cac13132e88277e1376970172a85ee04b3", size = 34056 }, - { url = "https://files.pythonhosted.org/packages/04/13/d9839089b900fa7b479cce495d62110cddc4bd5630a04d8469916c0e79c5/frozendict-2.4.6-py311-none-any.whl", hash = "sha256:d065db6a44db2e2375c23eac816f1a022feb2fa98cbb50df44a9e83700accbea", size = 16148 }, - { url = "https://files.pythonhosted.org/packages/ba/d0/d482c39cee2ab2978a892558cf130681d4574ea208e162da8958b31e9250/frozendict-2.4.6-py312-none-any.whl", hash = "sha256:49344abe90fb75f0f9fdefe6d4ef6d4894e640fadab71f11009d52ad97f370b9", size = 16146 }, - { url = "https://files.pythonhosted.org/packages/a5/8e/b6bf6a0de482d7d7d7a2aaac8fdc4a4d0bb24a809f5ddd422aa7060eb3d2/frozendict-2.4.6-py313-none-any.whl", hash = "sha256:7134a2bb95d4a16556bb5f2b9736dceb6ea848fa5b6f3f6c2d6dba93b44b4757", size = 16146 }, -] - -[[package]] -name = "graphviz" -version = "0.20.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fa/83/5a40d19b8347f017e417710907f824915fba411a9befd092e52746b63e9f/graphviz-0.20.3.zip", hash = "sha256:09d6bc81e6a9fa392e7ba52135a9d49f1ed62526f96499325930e87ca1b5925d", size = 256455 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/00/be/d59db2d1d52697c6adc9eacaf50e8965b6345cc143f671e1ed068818d5cf/graphviz-0.20.3-py3-none-any.whl", hash = "sha256:81f848f2904515d8cd359cc611faba817598d2feaac4027b266aa3eda7b3dde5", size = 47126 }, -] - -[[package]] -name = "h5py" -version = "3.12.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/cc/0c/5c2b0a88158682aeafb10c1c2b735df5bc31f165bfe192f2ee9f2a23b5f1/h5py-3.12.1.tar.gz", hash = "sha256:326d70b53d31baa61f00b8aa5f95c2fcb9621a3ee8365d770c551a13dbbcbfdf", size = 411457 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/df/7d/b21045fbb004ad8bb6fb3be4e6ca903841722706f7130b9bba31ef2f88e3/h5py-3.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f0f1a382cbf494679c07b4371f90c70391dedb027d517ac94fa2c05299dacda", size = 3402133 }, - { url = "https://files.pythonhosted.org/packages/29/a7/3c2a33fba1da64a0846744726fd067a92fb8abb887875a0dd8e3bac8b45d/h5py-3.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cb65f619dfbdd15e662423e8d257780f9a66677eae5b4b3fc9dca70b5fd2d2a3", size = 2866436 }, - { url = "https://files.pythonhosted.org/packages/1e/d0/4bf67c3937a2437c20844165766ddd1a1817ae6b9544c3743050d8e0f403/h5py-3.12.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b15d8dbd912c97541312c0e07438864d27dbca857c5ad634de68110c6beb1c2", size = 5168596 }, - { url = "https://files.pythonhosted.org/packages/85/bc/e76f4b2096e0859225f5441d1b7f5e2041fffa19fc2c16756c67078417aa/h5py-3.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59685fe40d8c1fbbee088c88cd4da415a2f8bee5c270337dc5a1c4aa634e3307", size = 5341537 }, - { url = "https://files.pythonhosted.org/packages/99/bd/fb8ed45308bb97e04c02bd7aed324ba11e6a4bf9ed73967ca2a168e9cf92/h5py-3.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:577d618d6b6dea3da07d13cc903ef9634cde5596b13e832476dd861aaf651f3e", size = 2990575 }, - { url = "https://files.pythonhosted.org/packages/33/61/c463dc5fc02fbe019566d067a9d18746cd3c664f29c9b8b3c3f9ed025365/h5py-3.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ccd9006d92232727d23f784795191bfd02294a4f2ba68708825cb1da39511a93", size = 3410828 }, - { url = "https://files.pythonhosted.org/packages/95/9d/eb91a9076aa998bb2179d6b1788055ea09cdf9d6619cd967f1d3321ed056/h5py-3.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ad8a76557880aed5234cfe7279805f4ab5ce16b17954606cca90d578d3e713ef", size = 2872586 }, - { url = "https://files.pythonhosted.org/packages/b0/62/e2b1f9723ff713e3bd3c16dfeceec7017eadc21ef063d8b7080c0fcdc58a/h5py-3.12.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1473348139b885393125126258ae2d70753ef7e9cec8e7848434f385ae72069e", size = 5273038 }, - { url = "https://files.pythonhosted.org/packages/e1/89/118c3255d6ff2db33b062ec996a762d99ae50c21f54a8a6047ae8eda1b9f/h5py-3.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:018a4597f35092ae3fb28ee851fdc756d2b88c96336b8480e124ce1ac6fb9166", size = 5452688 }, - { url = "https://files.pythonhosted.org/packages/1d/4d/cbd3014eb78d1e449b29beba1f3293a841aa8086c6f7968c383c2c7ff076/h5py-3.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:3fdf95092d60e8130ba6ae0ef7a9bd4ade8edbe3569c13ebbaf39baefffc5ba4", size = 3006095 }, - { url = "https://files.pythonhosted.org/packages/d4/e1/ea9bfe18a3075cdc873f0588ff26ce394726047653557876d7101bf0c74e/h5py-3.12.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:06a903a4e4e9e3ebbc8b548959c3c2552ca2d70dac14fcfa650d9261c66939ed", size = 3372538 }, - { url = "https://files.pythonhosted.org/packages/0d/74/1009b663387c025e8fa5f3ee3cf3cd0d99b1ad5c72eeb70e75366b1ce878/h5py-3.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7b3b8f3b48717e46c6a790e3128d39c61ab595ae0a7237f06dfad6a3b51d5351", size = 2868104 }, - { url = "https://files.pythonhosted.org/packages/af/52/c604adc06280c15a29037d4aa79a24fe54d8d0b51085e81ed24b2fa995f7/h5py-3.12.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:050a4f2c9126054515169c49cb900949814987f0c7ae74c341b0c9f9b5056834", size = 5194606 }, - { url = "https://files.pythonhosted.org/packages/fa/63/eeaacff417b393491beebabb8a3dc5342950409eb6d7b39d437289abdbae/h5py-3.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c4b41d1019322a5afc5082864dfd6359f8935ecd37c11ac0029be78c5d112c9", size = 5413256 }, - { url = "https://files.pythonhosted.org/packages/86/f7/bb465dcb92ca3521a15cbe1031f6d18234dbf1fb52a6796a00bfaa846ebf/h5py-3.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:e4d51919110a030913201422fb07987db4338eba5ec8c5a15d6fab8e03d443fc", size = 2993055 }, - { url = "https://files.pythonhosted.org/packages/23/1c/ecdd0efab52c24f2a9bf2324289828b860e8dd1e3c5ada3cf0889e14fdc1/h5py-3.12.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:513171e90ed92236fc2ca363ce7a2fc6f2827375efcbb0cc7fbdd7fe11fecafc", size = 3346239 }, - { url = "https://files.pythonhosted.org/packages/93/cd/5b6f574bf3e318bbe305bc93ba45181676550eb44ba35e006d2e98004eaa/h5py-3.12.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:59400f88343b79655a242068a9c900001a34b63e3afb040bd7cdf717e440f653", size = 2843416 }, - { url = "https://files.pythonhosted.org/packages/8a/4f/b74332f313bfbe94ba03fff784219b9db385e6139708e55b11490149f90a/h5py-3.12.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3e465aee0ec353949f0f46bf6c6f9790a2006af896cee7c178a8c3e5090aa32", size = 5154390 }, - { url = "https://files.pythonhosted.org/packages/1a/57/93ea9e10a6457ea8d3b867207deb29a527e966a08a84c57ffd954e32152a/h5py-3.12.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba51c0c5e029bb5420a343586ff79d56e7455d496d18a30309616fdbeed1068f", size = 5378244 }, - { url = "https://files.pythonhosted.org/packages/50/51/0bbf3663062b2eeee78aa51da71e065f8a0a6e3cb950cc7020b4444999e6/h5py-3.12.1-cp313-cp313-win_amd64.whl", hash = "sha256:52ab036c6c97055b85b2a242cb540ff9590bacfda0c03dd0cf0661b311f522f8", size = 2979760 }, -] - -[[package]] -name = "html5lib" -version = "1.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "six" }, - { name = "webencodings" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ac/b6/b55c3f49042f1df3dcd422b7f224f939892ee94f22abcf503a9b7339eaf2/html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f", size = 272215 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6c/dd/a834df6482147d48e225a49515aabc28974ad5a4ca3215c18a882565b028/html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d", size = 112173 }, -] - -[[package]] -name = "ibm-cloud-sdk-core" -version = "3.22.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pyjwt" }, - { name = "python-dateutil" }, - { name = "requests" }, - { name = "urllib3" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/4e/2d/730b09fdf054b31f37d5514ec0c5c9c521acad72cd25c7dbcd72998bf3f6/ibm_cloud_sdk_core-3.22.0.tar.gz", hash = "sha256:0aa5abc972b7d70ee4c39e3ad69c82c9717be847e5672928b416b8ea7d57a297", size = 70647 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/38/42/58a3de2e87d0a6b81278dc600d06a74f8542ad86114ad6cc61555cf00352/ibm_cloud_sdk_core-3.22.0-py3-none-any.whl", hash = "sha256:a86e9006d98f32510d47d4751d8ba04b64514e3c94b851511fd55d7b094c87b1", size = 69432 }, -] - -[[package]] -name = "ibm-platform-services" -version = "0.59.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "ibm-cloud-sdk-core" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9b/80/a65220c31897db166c455a2110108e6fddfd6c62466ca122b301fd00ce70/ibm_platform_services-0.59.0.tar.gz", hash = "sha256:4d63bfa25d9bf995ea75ed449ce26ce4d21c8e2385e04f6da864bdc97c4e62a0", size = 324387 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/86/8cd1079e3b1bc4a27b726fadd9f29ee61e513e36f952ad9b18b41e04d452/ibm_platform_services-0.59.0-py3-none-any.whl", hash = "sha256:2deba369f03843a0b628c03065b791f0738cd7a570b51836cb68ac7629ae545d", size = 340780 }, -] - -[[package]] -name = "idna" -version = "3.10" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, -] - -[[package]] -name = "inflection" -version = "0.5.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e1/7e/691d061b7329bc8d54edbf0ec22fbfb2afe61facb681f9aaa9bff7a27d04/inflection-0.5.1.tar.gz", hash = "sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417", size = 15091 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/59/91/aa6bde563e0085a02a435aa99b49ef75b0a4b062635e606dab23ce18d720/inflection-0.5.1-py2.py3-none-any.whl", hash = "sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2", size = 9454 }, -] - -[[package]] -name = "itsdangerous" -version = "2.2.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9c/cb/8ac0172223afbccb63986cc25049b154ecfb5e85932587206f42317be31d/itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173", size = 54410 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef", size = 16234 }, -] - -[[package]] -name = "jinja2" -version = "3.1.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "markupsafe" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ed/55/39036716d19cab0747a5020fc7e907f362fbf48c984b14e62127f7e68e5d/jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369", size = 240245 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/31/80/3a54838c3fb461f6fec263ebf3a3a41771bd05190238de3486aae8540c36/jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d", size = 133271 }, -] - -[[package]] -name = "joblib" -version = "1.4.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/64/33/60135848598c076ce4b231e1b1895170f45fbcaeaa2c9d5e38b04db70c35/joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e", size = 2116621 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/91/29/df4b9b42f2be0b623cbd5e2140cafcaa2bef0759a00b7b70104dcfe2fb51/joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6", size = 301817 }, -] - -[[package]] -name = "lark" -version = "1.2.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/af/60/bc7622aefb2aee1c0b4ba23c1446d3e30225c8770b38d7aedbfb65ca9d5a/lark-1.2.2.tar.gz", hash = "sha256:ca807d0162cd16cef15a8feecb862d7319e7a09bdb13aef927968e45040fed80", size = 252132 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2d/00/d90b10b962b4277f5e64a78b6609968859ff86889f5b898c1a778c06ec00/lark-1.2.2-py3-none-any.whl", hash = "sha256:c2276486b02f0f1b90be155f2c8ba4a8e194d42775786db622faccd652d8e80c", size = 111036 }, -] - -[[package]] -name = "lxml" -version = "5.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e7/6b/20c3a4b24751377aaa6307eb230b66701024012c29dd374999cc92983269/lxml-5.3.0.tar.gz", hash = "sha256:4e109ca30d1edec1ac60cdbe341905dc3b8f55b16855e03a54aaf59e51ec8c6f", size = 3679318 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a1/ce/2789e39eddf2b13fac29878bfa465f0910eb6b0096e29090e5176bc8cf43/lxml-5.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd36439be765e2dde7660212b5275641edbc813e7b24668831a5c8ac91180656", size = 8124570 }, - { url = "https://files.pythonhosted.org/packages/24/a8/f4010166a25d41715527129af2675981a50d3bbf7df09c5d9ab8ca24fbf9/lxml-5.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ae5fe5c4b525aa82b8076c1a59d642c17b6e8739ecf852522c6321852178119d", size = 4413042 }, - { url = "https://files.pythonhosted.org/packages/41/a4/7e45756cecdd7577ddf67a68b69c1db0f5ddbf0c9f65021ee769165ffc5a/lxml-5.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:501d0d7e26b4d261fca8132854d845e4988097611ba2531408ec91cf3fd9d20a", size = 5139213 }, - { url = "https://files.pythonhosted.org/packages/02/e2/ecf845b12323c92748077e1818b64e8b4dba509a4cb12920b3762ebe7552/lxml-5.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb66442c2546446944437df74379e9cf9e9db353e61301d1a0e26482f43f0dd8", size = 4838814 }, - { url = "https://files.pythonhosted.org/packages/12/91/619f9fb72cf75e9ceb8700706f7276f23995f6ad757e6d400fbe35ca4990/lxml-5.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e41506fec7a7f9405b14aa2d5c8abbb4dbbd09d88f9496958b6d00cb4d45330", size = 5425084 }, - { url = "https://files.pythonhosted.org/packages/25/3b/162a85a8f0fd2a3032ec3f936636911c6e9523a8e263fffcfd581ce98b54/lxml-5.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f7d4a670107d75dfe5ad080bed6c341d18c4442f9378c9f58e5851e86eb79965", size = 4875993 }, - { url = "https://files.pythonhosted.org/packages/43/af/dd3f58cc7d946da6ae42909629a2b1d5dd2d1b583334d4af9396697d6863/lxml-5.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41ce1f1e2c7755abfc7e759dc34d7d05fd221723ff822947132dc934d122fe22", size = 5012462 }, - { url = "https://files.pythonhosted.org/packages/69/c1/5ea46b2d4c98f5bf5c83fffab8a0ad293c9bc74df9ecfbafef10f77f7201/lxml-5.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:44264ecae91b30e5633013fb66f6ddd05c006d3e0e884f75ce0b4755b3e3847b", size = 4815288 }, - { url = "https://files.pythonhosted.org/packages/1d/51/a0acca077ad35da458f4d3f729ef98effd2b90f003440d35fc36323f8ae6/lxml-5.3.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:3c174dc350d3ec52deb77f2faf05c439331d6ed5e702fc247ccb4e6b62d884b7", size = 5472435 }, - { url = "https://files.pythonhosted.org/packages/4d/6b/0989c9368986961a6b0f55b46c80404c4b758417acdb6d87bfc3bd5f4967/lxml-5.3.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:2dfab5fa6a28a0b60a20638dc48e6343c02ea9933e3279ccb132f555a62323d8", size = 4976354 }, - { url = "https://files.pythonhosted.org/packages/05/9e/87492d03ff604fbf656ed2bf3e2e8d28f5d58ea1f00ff27ac27b06509079/lxml-5.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b1c8c20847b9f34e98080da785bb2336ea982e7f913eed5809e5a3c872900f32", size = 5029973 }, - { url = "https://files.pythonhosted.org/packages/f9/cc/9ae1baf5472af88e19e2c454b3710c1be9ecafb20eb474eeabcd88a055d2/lxml-5.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2c86bf781b12ba417f64f3422cfc302523ac9cd1d8ae8c0f92a1c66e56ef2e86", size = 4888837 }, - { url = "https://files.pythonhosted.org/packages/d2/10/5594ffaec8c120d75b17e3ad23439b740a51549a9b5fd7484b2179adfe8f/lxml-5.3.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c162b216070f280fa7da844531169be0baf9ccb17263cf5a8bf876fcd3117fa5", size = 5530555 }, - { url = "https://files.pythonhosted.org/packages/ea/9b/de17f05377c8833343b629905571fb06cff2028f15a6f58ae2267662e341/lxml-5.3.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:36aef61a1678cb778097b4a6eeae96a69875d51d1e8f4d4b491ab3cfb54b5a03", size = 5405314 }, - { url = "https://files.pythonhosted.org/packages/8a/b4/227be0f1f3cca8255925985164c3838b8b36e441ff0cc10c1d3c6bdba031/lxml-5.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f65e5120863c2b266dbcc927b306c5b78e502c71edf3295dfcb9501ec96e5fc7", size = 5079303 }, - { url = "https://files.pythonhosted.org/packages/5c/ee/19abcebb7fc40319bb71cd6adefa1ad94d09b5660228715854d6cc420713/lxml-5.3.0-cp310-cp310-win32.whl", hash = "sha256:ef0c1fe22171dd7c7c27147f2e9c3e86f8bdf473fed75f16b0c2e84a5030ce80", size = 3475126 }, - { url = "https://files.pythonhosted.org/packages/a1/35/183d32551447e280032b2331738cd850da435a42f850b71ebeaab42c1313/lxml-5.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:052d99051e77a4f3e8482c65014cf6372e61b0a6f4fe9edb98503bb5364cfee3", size = 3805065 }, - { url = "https://files.pythonhosted.org/packages/5c/a8/449faa2a3cbe6a99f8d38dcd51a3ee8844c17862841a6f769ea7c2a9cd0f/lxml-5.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74bcb423462233bc5d6066e4e98b0264e7c1bed7541fff2f4e34fe6b21563c8b", size = 8141056 }, - { url = "https://files.pythonhosted.org/packages/ac/8a/ae6325e994e2052de92f894363b038351c50ee38749d30cc6b6d96aaf90f/lxml-5.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a3d819eb6f9b8677f57f9664265d0a10dd6551d227afb4af2b9cd7bdc2ccbf18", size = 4425238 }, - { url = "https://files.pythonhosted.org/packages/f8/fb/128dddb7f9086236bce0eeae2bfb316d138b49b159f50bc681d56c1bdd19/lxml-5.3.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b8f5db71b28b8c404956ddf79575ea77aa8b1538e8b2ef9ec877945b3f46442", size = 5095197 }, - { url = "https://files.pythonhosted.org/packages/b4/f9/a181a8ef106e41e3086629c8bdb2d21a942f14c84a0e77452c22d6b22091/lxml-5.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3406b63232fc7e9b8783ab0b765d7c59e7c59ff96759d8ef9632fca27c7ee4", size = 4809809 }, - { url = "https://files.pythonhosted.org/packages/25/2f/b20565e808f7f6868aacea48ddcdd7e9e9fb4c799287f21f1a6c7c2e8b71/lxml-5.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ecdd78ab768f844c7a1d4a03595038c166b609f6395e25af9b0f3f26ae1230f", size = 5407593 }, - { url = "https://files.pythonhosted.org/packages/23/0e/caac672ec246d3189a16c4d364ed4f7d6bf856c080215382c06764058c08/lxml-5.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168f2dfcfdedf611eb285efac1516c8454c8c99caf271dccda8943576b67552e", size = 4866657 }, - { url = "https://files.pythonhosted.org/packages/67/a4/1f5fbd3f58d4069000522196b0b776a014f3feec1796da03e495cf23532d/lxml-5.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa617107a410245b8660028a7483b68e7914304a6d4882b5ff3d2d3eb5948d8c", size = 4967017 }, - { url = "https://files.pythonhosted.org/packages/ee/73/623ecea6ca3c530dd0a4ed0d00d9702e0e85cd5624e2d5b93b005fe00abd/lxml-5.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:69959bd3167b993e6e710b99051265654133a98f20cec1d9b493b931942e9c16", size = 4810730 }, - { url = "https://files.pythonhosted.org/packages/1d/ce/fb84fb8e3c298f3a245ae3ea6221c2426f1bbaa82d10a88787412a498145/lxml-5.3.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:bd96517ef76c8654446fc3db9242d019a1bb5fe8b751ba414765d59f99210b79", size = 5455154 }, - { url = "https://files.pythonhosted.org/packages/b1/72/4d1ad363748a72c7c0411c28be2b0dc7150d91e823eadad3b91a4514cbea/lxml-5.3.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:ab6dd83b970dc97c2d10bc71aa925b84788c7c05de30241b9e96f9b6d9ea3080", size = 4969416 }, - { url = "https://files.pythonhosted.org/packages/42/07/b29571a58a3a80681722ea8ed0ba569211d9bb8531ad49b5cacf6d409185/lxml-5.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:eec1bb8cdbba2925bedc887bc0609a80e599c75b12d87ae42ac23fd199445654", size = 5013672 }, - { url = "https://files.pythonhosted.org/packages/b9/93/bde740d5a58cf04cbd38e3dd93ad1e36c2f95553bbf7d57807bc6815d926/lxml-5.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a7095eeec6f89111d03dabfe5883a1fd54da319c94e0fb104ee8f23616b572d", size = 4878644 }, - { url = "https://files.pythonhosted.org/packages/56/b5/645c8c02721d49927c93181de4017164ec0e141413577687c3df8ff0800f/lxml-5.3.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6f651ebd0b21ec65dfca93aa629610a0dbc13dbc13554f19b0113da2e61a4763", size = 5511531 }, - { url = "https://files.pythonhosted.org/packages/85/3f/6a99a12d9438316f4fc86ef88c5d4c8fb674247b17f3173ecadd8346b671/lxml-5.3.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f422a209d2455c56849442ae42f25dbaaba1c6c3f501d58761c619c7836642ec", size = 5402065 }, - { url = "https://files.pythonhosted.org/packages/80/8a/df47bff6ad5ac57335bf552babfb2408f9eb680c074ec1ba412a1a6af2c5/lxml-5.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:62f7fdb0d1ed2065451f086519865b4c90aa19aed51081979ecd05a21eb4d1be", size = 5069775 }, - { url = "https://files.pythonhosted.org/packages/08/ae/e7ad0f0fbe4b6368c5ee1e3ef0c3365098d806d42379c46c1ba2802a52f7/lxml-5.3.0-cp311-cp311-win32.whl", hash = "sha256:c6379f35350b655fd817cd0d6cbeef7f265f3ae5fedb1caae2eb442bbeae9ab9", size = 3474226 }, - { url = "https://files.pythonhosted.org/packages/c3/b5/91c2249bfac02ee514ab135e9304b89d55967be7e53e94a879b74eec7a5c/lxml-5.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c52100e2c2dbb0649b90467935c4b0de5528833c76a35ea1a2691ec9f1ee7a1", size = 3814971 }, - { url = "https://files.pythonhosted.org/packages/eb/6d/d1f1c5e40c64bf62afd7a3f9b34ce18a586a1cccbf71e783cd0a6d8e8971/lxml-5.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e99f5507401436fdcc85036a2e7dc2e28d962550afe1cbfc07c40e454256a859", size = 8171753 }, - { url = "https://files.pythonhosted.org/packages/bd/83/26b1864921869784355459f374896dcf8b44d4af3b15d7697e9156cb2de9/lxml-5.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:384aacddf2e5813a36495233b64cb96b1949da72bef933918ba5c84e06af8f0e", size = 4441955 }, - { url = "https://files.pythonhosted.org/packages/e0/d2/e9bff9fb359226c25cda3538f664f54f2804f4b37b0d7c944639e1a51f69/lxml-5.3.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:874a216bf6afaf97c263b56371434e47e2c652d215788396f60477540298218f", size = 5050778 }, - { url = "https://files.pythonhosted.org/packages/88/69/6972bfafa8cd3ddc8562b126dd607011e218e17be313a8b1b9cc5a0ee876/lxml-5.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65ab5685d56914b9a2a34d67dd5488b83213d680b0c5d10b47f81da5a16b0b0e", size = 4748628 }, - { url = "https://files.pythonhosted.org/packages/5d/ea/a6523c7c7f6dc755a6eed3d2f6d6646617cad4d3d6d8ce4ed71bfd2362c8/lxml-5.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aac0bbd3e8dd2d9c45ceb82249e8bdd3ac99131a32b4d35c8af3cc9db1657179", size = 5322215 }, - { url = "https://files.pythonhosted.org/packages/99/37/396fbd24a70f62b31d988e4500f2068c7f3fd399d2fd45257d13eab51a6f/lxml-5.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b369d3db3c22ed14c75ccd5af429086f166a19627e84a8fdade3f8f31426e52a", size = 4813963 }, - { url = "https://files.pythonhosted.org/packages/09/91/e6136f17459a11ce1757df864b213efbeab7adcb2efa63efb1b846ab6723/lxml-5.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c24037349665434f375645fa9d1f5304800cec574d0310f618490c871fd902b3", size = 4923353 }, - { url = "https://files.pythonhosted.org/packages/1d/7c/2eeecf87c9a1fca4f84f991067c693e67340f2b7127fc3eca8fa29d75ee3/lxml-5.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:62d172f358f33a26d6b41b28c170c63886742f5b6772a42b59b4f0fa10526cb1", size = 4740541 }, - { url = "https://files.pythonhosted.org/packages/3b/ed/4c38ba58defca84f5f0d0ac2480fdcd99fc7ae4b28fc417c93640a6949ae/lxml-5.3.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:c1f794c02903c2824fccce5b20c339a1a14b114e83b306ff11b597c5f71a1c8d", size = 5346504 }, - { url = "https://files.pythonhosted.org/packages/a5/22/bbd3995437e5745cb4c2b5d89088d70ab19d4feabf8a27a24cecb9745464/lxml-5.3.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:5d6a6972b93c426ace71e0be9a6f4b2cfae9b1baed2eed2006076a746692288c", size = 4898077 }, - { url = "https://files.pythonhosted.org/packages/0a/6e/94537acfb5b8f18235d13186d247bca478fea5e87d224644e0fe907df976/lxml-5.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:3879cc6ce938ff4eb4900d901ed63555c778731a96365e53fadb36437a131a99", size = 4946543 }, - { url = "https://files.pythonhosted.org/packages/8d/e8/4b15df533fe8e8d53363b23a41df9be907330e1fa28c7ca36893fad338ee/lxml-5.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:74068c601baff6ff021c70f0935b0c7bc528baa8ea210c202e03757c68c5a4ff", size = 4816841 }, - { url = "https://files.pythonhosted.org/packages/1a/e7/03f390ea37d1acda50bc538feb5b2bda6745b25731e4e76ab48fae7106bf/lxml-5.3.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ecd4ad8453ac17bc7ba3868371bffb46f628161ad0eefbd0a855d2c8c32dd81a", size = 5417341 }, - { url = "https://files.pythonhosted.org/packages/ea/99/d1133ab4c250da85a883c3b60249d3d3e7c64f24faff494cf0fd23f91e80/lxml-5.3.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7e2f58095acc211eb9d8b5771bf04df9ff37d6b87618d1cbf85f92399c98dae8", size = 5327539 }, - { url = "https://files.pythonhosted.org/packages/7d/ed/e6276c8d9668028213df01f598f385b05b55a4e1b4662ee12ef05dab35aa/lxml-5.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e63601ad5cd8f860aa99d109889b5ac34de571c7ee902d6812d5d9ddcc77fa7d", size = 5012542 }, - { url = "https://files.pythonhosted.org/packages/36/88/684d4e800f5aa28df2a991a6a622783fb73cf0e46235cfa690f9776f032e/lxml-5.3.0-cp312-cp312-win32.whl", hash = "sha256:17e8d968d04a37c50ad9c456a286b525d78c4a1c15dd53aa46c1d8e06bf6fa30", size = 3486454 }, - { url = "https://files.pythonhosted.org/packages/fc/82/ace5a5676051e60355bd8fb945df7b1ba4f4fb8447f2010fb816bfd57724/lxml-5.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:c1a69e58a6bb2de65902051d57fde951febad631a20a64572677a1052690482f", size = 3816857 }, - { url = "https://files.pythonhosted.org/packages/94/6a/42141e4d373903bfea6f8e94b2f554d05506dfda522ada5343c651410dc8/lxml-5.3.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c72e9563347c7395910de6a3100a4840a75a6f60e05af5e58566868d5eb2d6a", size = 8156284 }, - { url = "https://files.pythonhosted.org/packages/91/5e/fa097f0f7d8b3d113fb7312c6308af702f2667f22644441715be961f2c7e/lxml-5.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e92ce66cd919d18d14b3856906a61d3f6b6a8500e0794142338da644260595cd", size = 4432407 }, - { url = "https://files.pythonhosted.org/packages/2d/a1/b901988aa6d4ff937f2e5cfc114e4ec561901ff00660c3e56713642728da/lxml-5.3.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d04f064bebdfef9240478f7a779e8c5dc32b8b7b0b2fc6a62e39b928d428e51", size = 5048331 }, - { url = "https://files.pythonhosted.org/packages/30/0f/b2a54f48e52de578b71bbe2a2f8160672a8a5e103df3a78da53907e8c7ed/lxml-5.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c2fb570d7823c2bbaf8b419ba6e5662137f8166e364a8b2b91051a1fb40ab8b", size = 4744835 }, - { url = "https://files.pythonhosted.org/packages/82/9d/b000c15538b60934589e83826ecbc437a1586488d7c13f8ee5ff1f79a9b8/lxml-5.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c120f43553ec759f8de1fee2f4794452b0946773299d44c36bfe18e83caf002", size = 5316649 }, - { url = "https://files.pythonhosted.org/packages/e3/ee/ffbb9eaff5e541922611d2c56b175c45893d1c0b8b11e5a497708a6a3b3b/lxml-5.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:562e7494778a69086f0312ec9689f6b6ac1c6b65670ed7d0267e49f57ffa08c4", size = 4812046 }, - { url = "https://files.pythonhosted.org/packages/15/ff/7ff89d567485c7b943cdac316087f16b2399a8b997007ed352a1248397e5/lxml-5.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:423b121f7e6fa514ba0c7918e56955a1d4470ed35faa03e3d9f0e3baa4c7e492", size = 4918597 }, - { url = "https://files.pythonhosted.org/packages/c6/a3/535b6ed8c048412ff51268bdf4bf1cf052a37aa7e31d2e6518038a883b29/lxml-5.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c00f323cc00576df6165cc9d21a4c21285fa6b9989c5c39830c3903dc4303ef3", size = 4738071 }, - { url = "https://files.pythonhosted.org/packages/7a/8f/cbbfa59cb4d4fd677fe183725a76d8c956495d7a3c7f111ab8f5e13d2e83/lxml-5.3.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:1fdc9fae8dd4c763e8a31e7630afef517eab9f5d5d31a278df087f307bf601f4", size = 5342213 }, - { url = "https://files.pythonhosted.org/packages/5c/fb/db4c10dd9958d4b52e34d1d1f7c1f434422aeaf6ae2bbaaff2264351d944/lxml-5.3.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:658f2aa69d31e09699705949b5fc4719cbecbd4a97f9656a232e7d6c7be1a367", size = 4893749 }, - { url = "https://files.pythonhosted.org/packages/f2/38/bb4581c143957c47740de18a3281a0cab7722390a77cc6e610e8ebf2d736/lxml-5.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1473427aff3d66a3fa2199004c3e601e6c4500ab86696edffdbc84954c72d832", size = 4945901 }, - { url = "https://files.pythonhosted.org/packages/fc/d5/18b7de4960c731e98037bd48fa9f8e6e8f2558e6fbca4303d9b14d21ef3b/lxml-5.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a87de7dd873bf9a792bf1e58b1c3887b9264036629a5bf2d2e6579fe8e73edff", size = 4815447 }, - { url = "https://files.pythonhosted.org/packages/97/a8/cd51ceaad6eb849246559a8ef60ae55065a3df550fc5fcd27014361c1bab/lxml-5.3.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0d7b36afa46c97875303a94e8f3ad932bf78bace9e18e603f2085b652422edcd", size = 5411186 }, - { url = "https://files.pythonhosted.org/packages/89/c3/1e3dabab519481ed7b1fdcba21dcfb8832f57000733ef0e71cf6d09a5e03/lxml-5.3.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:cf120cce539453ae086eacc0130a324e7026113510efa83ab42ef3fcfccac7fb", size = 5324481 }, - { url = "https://files.pythonhosted.org/packages/b6/17/71e9984cf0570cd202ac0a1c9ed5c1b8889b0fc8dc736f5ef0ffb181c284/lxml-5.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:df5c7333167b9674aa8ae1d4008fa4bc17a313cc490b2cca27838bbdcc6bb15b", size = 5011053 }, - { url = "https://files.pythonhosted.org/packages/69/68/9f7e6d3312a91e30829368c2b3217e750adef12a6f8eb10498249f4e8d72/lxml-5.3.0-cp313-cp313-win32.whl", hash = "sha256:c802e1c2ed9f0c06a65bc4ed0189d000ada8049312cfeab6ca635e39c9608957", size = 3485634 }, - { url = "https://files.pythonhosted.org/packages/7d/db/214290d58ad68c587bd5d6af3d34e56830438733d0d0856c0275fde43652/lxml-5.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:406246b96d552e0503e17a1006fd27edac678b3fcc9f1be71a2f94b4ff61528d", size = 3814417 }, - { url = "https://files.pythonhosted.org/packages/99/f7/b73a431c8500565aa500e99e60b448d305eaf7c0b4c893c7c5a8a69cc595/lxml-5.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7b1cd427cb0d5f7393c31b7496419da594fe600e6fdc4b105a54f82405e6626c", size = 3925431 }, - { url = "https://files.pythonhosted.org/packages/db/48/4a206623c0d093d0e3b15f415ffb4345b0bdf661a3d0b15a112948c033c7/lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51806cfe0279e06ed8500ce19479d757db42a30fd509940b1701be9c86a5ff9a", size = 4216683 }, - { url = "https://files.pythonhosted.org/packages/54/47/577820c45dd954523ae8453b632d91e76da94ca6d9ee40d8c98dd86f916b/lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee70d08fd60c9565ba8190f41a46a54096afa0eeb8f76bd66f2c25d3b1b83005", size = 4326732 }, - { url = "https://files.pythonhosted.org/packages/68/de/96cb6d3269bc994b4f5ede8ca7bf0840f5de0a278bc6e50cb317ff71cafa/lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:8dc2c0395bea8254d8daebc76dcf8eb3a95ec2a46fa6fae5eaccee366bfe02ce", size = 4218377 }, - { url = "https://files.pythonhosted.org/packages/a5/43/19b1ef6cbffa4244a217f95cc5f41a6cb4720fed33510a49670b03c5f1a0/lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6ba0d3dcac281aad8a0e5b14c7ed6f9fa89c8612b47939fc94f80b16e2e9bc83", size = 4351237 }, - { url = "https://files.pythonhosted.org/packages/ba/b2/6a22fb5c0885da3b00e116aee81f0b829ec9ac8f736cd414b4a09413fc7d/lxml-5.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:6e91cf736959057f7aac7adfc83481e03615a8e8dd5758aa1d95ea69e8931dba", size = 3487557 }, -] - -[[package]] -name = "markupsafe" -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 }, -] - -[[package]] -name = "more-itertools" -version = "10.5.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/51/78/65922308c4248e0eb08ebcbe67c95d48615cc6f27854b6f2e57143e9178f/more-itertools-10.5.0.tar.gz", hash = "sha256:5482bfef7849c25dc3c6dd53a6173ae4795da2a41a80faea6700d9f5846c5da6", size = 121020 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl", hash = "sha256:037b0d3203ce90cca8ab1defbbdac29d5f993fc20131f3664dc8d6acfa872aef", size = 60952 }, -] - -[[package]] -name = "mpmath" -version = "1.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198 }, -] - -[[package]] -name = "mqt-bench" -version = "1.1.10.dev0+g9ac1ecf.d20241202" -source = { directory = "../" } -dependencies = [ - { name = "joblib" }, - { name = "networkx" }, - { name = "numpy" }, - { name = "pytket" }, - { name = "pytket-qiskit" }, - { name = "qiskit" }, - { name = "qiskit-finance" }, - { name = "qiskit-nature", extra = ["pyscf"] }, - { name = "qiskit-optimization" }, -] - -[package.metadata] -requires-dist = [ - { name = "furo", marker = "extra == 'docs'", specifier = ">=2023.9.10" }, - { name = "ipykernel", marker = "extra == 'docs'" }, - { name = "ipython", marker = "extra == 'docs'" }, - { name = "joblib", specifier = ">=1.3.0" }, - { name = "mqt-bench", extras = ["coverage", "docs"], marker = "extra == 'dev'" }, - { name = "mqt-bench", extras = ["test"], marker = "extra == 'coverage'" }, - { name = "nbsphinx", marker = "extra == 'docs'" }, - { name = "networkx", specifier = ">=2.8.8" }, - { name = "numpy", specifier = ">=1.22" }, - { name = "numpy", marker = "python_full_version >= '3.11'", specifier = ">=1.24" }, - { name = "numpy", marker = "python_full_version >= '3.12'", specifier = ">=1.26" }, - { name = "pytest", marker = "extra == 'test'", specifier = ">=7.2" }, - { name = "pytest-console-scripts", marker = "extra == 'test'", specifier = ">=1.4" }, - { name = "pytest-cov", marker = "extra == 'coverage'", specifier = ">=4" }, - { name = "pytket", specifier = ">=1.29.0" }, - { name = "pytket-qiskit", specifier = ">=0.53.0" }, - { name = "qiskit", specifier = "!=1.2.0" }, - { name = "qiskit", extras = ["visualization"], marker = "extra == 'docs'" }, - { name = "qiskit-finance", specifier = ">=0.4.1" }, - { name = "qiskit-nature", extras = ["pyscf"], specifier = ">=0.7" }, - { name = "qiskit-optimization", specifier = ">=0.6" }, - { name = "setuptools-scm", marker = "extra == 'docs'", specifier = ">=8.1" }, - { name = "sphinx-autoapi", marker = "extra == 'docs'", specifier = ">=3" }, - { name = "sphinx-autodoc-typehints", marker = "extra == 'docs'" }, - { name = "sphinx-copybutton", marker = "extra == 'docs'", specifier = ">=0.5" }, - { name = "sphinx-design", marker = "extra == 'docs'", specifier = ">=0.6" }, - { name = "sphinxcontrib-bibtex", marker = "extra == 'docs'", specifier = ">=2.4.2" }, - { name = "sphinxcontrib-svg2pdfconverter", marker = "extra == 'docs'", specifier = ">=1.2" }, - { name = "sphinxext-opengraph", marker = "extra == 'docs'", specifier = ">=0.9" }, -] - -[[package]] -name = "mqt-bench-viewer" -version = "1.0.0" -source = { editable = "." } -dependencies = [ - { name = "flask" }, - { name = "mqt-bench" }, - { name = "packaging" }, - { name = "pandas" }, - { name = "tqdm" }, -] - -[package.metadata] -requires-dist = [ - { name = "flask", specifier = ">=3.0.3" }, - { name = "mqt-bench", directory = "../" }, - { name = "packaging", specifier = ">=24.1" }, - { name = "pandas", specifier = ">=2.2.3" }, - { name = "tqdm", specifier = ">=4.66.5" }, -] - -[[package]] -name = "multitasking" -version = "0.0.11" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6f/75/345e196762fc51fb5b4e9504631972b1271a0cb2ba1ce2afe5b185c95b64/multitasking-0.0.11.tar.gz", hash = "sha256:4d6bc3cc65f9b2dca72fb5a787850a88dae8f620c2b36ae9b55248e51bcd6026", size = 8150 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3e/8a/bb3160e76e844db9e69a413f055818969c8acade64e1a9ac5ce9dfdcf6c1/multitasking-0.0.11-py3-none-any.whl", hash = "sha256:1e5b37a5f8fc1e6cfaafd1a82b6b1cc6d2ed20037d3b89c25a84f499bd7b3dd4", size = 8533 }, -] - -[[package]] -name = "nasdaq-data-link" -version = "1.0.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "inflection" }, - { name = "more-itertools" }, - { name = "numpy" }, - { name = "pandas" }, - { name = "python-dateutil" }, - { name = "requests" }, - { name = "six" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/2a/f3c908206b530b93beaa90f0c645868a864bf7516fc0f0f5ed38f8f59fa1/Nasdaq_Data_Link-1.0.4-py2.py3-none-any.whl", hash = "sha256:214a620551da1c7521476839fb96f932234d4d78e7ba44310722709ca37b0691", size = 28127 }, -] - -[[package]] -name = "networkx" -version = "3.4.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f", size = 1723263 }, -] - -[[package]] -name = "numpy" -version = "2.1.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/25/ca/1166b75c21abd1da445b97bf1fa2f14f423c6cfb4fc7c4ef31dccf9f6a94/numpy-2.1.3.tar.gz", hash = "sha256:aa08e04e08aaf974d4458def539dece0d28146d866a39da5639596f4921fd761", size = 20166090 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/80/d572a4737626372915bca41c3afbfec9d173561a39a0a61bacbbfd1dafd4/numpy-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c894b4305373b9c5576d7a12b473702afdf48ce5369c074ba304cc5ad8730dff", size = 21152472 }, - { url = "https://files.pythonhosted.org/packages/6f/bb/7bfba10c791ae3bb6716da77ad85a82d5fac07fc96fb0023ef0571df9d20/numpy-2.1.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b47fbb433d3260adcd51eb54f92a2ffbc90a4595f8970ee00e064c644ac788f5", size = 13747967 }, - { url = "https://files.pythonhosted.org/packages/da/d6/2df7bde35f0478455f0be5934877b3e5a505f587b00230f54a519a6b55a5/numpy-2.1.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:825656d0743699c529c5943554d223c021ff0494ff1442152ce887ef4f7561a1", size = 5354921 }, - { url = "https://files.pythonhosted.org/packages/d1/bb/75b945874f931494891eac6ca06a1764d0e8208791f3addadb2963b83527/numpy-2.1.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:6a4825252fcc430a182ac4dee5a505053d262c807f8a924603d411f6718b88fd", size = 6888603 }, - { url = "https://files.pythonhosted.org/packages/68/a7/fde73636f6498dbfa6d82fc336164635fe592f1ad0d13285fcb6267fdc1c/numpy-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e711e02f49e176a01d0349d82cb5f05ba4db7d5e7e0defd026328e5cfb3226d3", size = 13889862 }, - { url = "https://files.pythonhosted.org/packages/05/db/5d9c91b2e1e2e72be1369278f696356d44975befcae830daf2e667dcb54f/numpy-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78574ac2d1a4a02421f25da9559850d59457bac82f2b8d7a44fe83a64f770098", size = 16328151 }, - { url = "https://files.pythonhosted.org/packages/3e/6a/7eb732109b53ae64a29e25d7e68eb9d6611037f6354875497008a49e74d3/numpy-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c7662f0e3673fe4e832fe07b65c50342ea27d989f92c80355658c7f888fcc83c", size = 16704107 }, - { url = "https://files.pythonhosted.org/packages/88/cc/278113b66a1141053cbda6f80e4200c6da06b3079c2d27bda1fde41f2c1f/numpy-2.1.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fa2d1337dc61c8dc417fbccf20f6d1e139896a30721b7f1e832b2bb6ef4eb6c4", size = 14385789 }, - { url = "https://files.pythonhosted.org/packages/f5/69/eb20f5e1bfa07449bc67574d2f0f7c1e6b335fb41672e43861a7727d85f2/numpy-2.1.3-cp310-cp310-win32.whl", hash = "sha256:72dcc4a35a8515d83e76b58fdf8113a5c969ccd505c8a946759b24e3182d1f23", size = 6536706 }, - { url = "https://files.pythonhosted.org/packages/8e/8b/1c131ab5a94c1086c289c6e1da1d843de9dbd95fe5f5ee6e61904c9518e2/numpy-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:ecc76a9ba2911d8d37ac01de72834d8849e55473457558e12995f4cd53e778e0", size = 12864165 }, - { url = "https://files.pythonhosted.org/packages/ad/81/c8167192eba5247593cd9d305ac236847c2912ff39e11402e72ae28a4985/numpy-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4d1167c53b93f1f5d8a139a742b3c6f4d429b54e74e6b57d0eff40045187b15d", size = 21156252 }, - { url = "https://files.pythonhosted.org/packages/da/74/5a60003fc3d8a718d830b08b654d0eea2d2db0806bab8f3c2aca7e18e010/numpy-2.1.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c80e4a09b3d95b4e1cac08643f1152fa71a0a821a2d4277334c88d54b2219a41", size = 13784119 }, - { url = "https://files.pythonhosted.org/packages/47/7c/864cb966b96fce5e63fcf25e1e4d957fe5725a635e5f11fe03f39dd9d6b5/numpy-2.1.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:576a1c1d25e9e02ed7fa5477f30a127fe56debd53b8d2c89d5578f9857d03ca9", size = 5352978 }, - { url = "https://files.pythonhosted.org/packages/09/ac/61d07930a4993dd9691a6432de16d93bbe6aa4b1c12a5e573d468eefc1ca/numpy-2.1.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:973faafebaae4c0aaa1a1ca1ce02434554d67e628b8d805e61f874b84e136b09", size = 6892570 }, - { url = "https://files.pythonhosted.org/packages/27/2f/21b94664f23af2bb52030653697c685022119e0dc93d6097c3cb45bce5f9/numpy-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:762479be47a4863e261a840e8e01608d124ee1361e48b96916f38b119cfda04a", size = 13896715 }, - { url = "https://files.pythonhosted.org/packages/7a/f0/80811e836484262b236c684a75dfc4ba0424bc670e765afaa911468d9f39/numpy-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc6f24b3d1ecc1eebfbf5d6051faa49af40b03be1aaa781ebdadcbc090b4539b", size = 16339644 }, - { url = "https://files.pythonhosted.org/packages/fa/81/ce213159a1ed8eb7d88a2a6ef4fbdb9e4ffd0c76b866c350eb4e3c37e640/numpy-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:17ee83a1f4fef3c94d16dc1802b998668b5419362c8a4f4e8a491de1b41cc3ee", size = 16712217 }, - { url = "https://files.pythonhosted.org/packages/7d/84/4de0b87d5a72f45556b2a8ee9fc8801e8518ec867fc68260c1f5dcb3903f/numpy-2.1.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15cb89f39fa6d0bdfb600ea24b250e5f1a3df23f901f51c8debaa6a5d122b2f0", size = 14399053 }, - { url = "https://files.pythonhosted.org/packages/7e/1c/e5fabb9ad849f9d798b44458fd12a318d27592d4bc1448e269dec070ff04/numpy-2.1.3-cp311-cp311-win32.whl", hash = "sha256:d9beb777a78c331580705326d2367488d5bc473b49a9bc3036c154832520aca9", size = 6534741 }, - { url = "https://files.pythonhosted.org/packages/1e/48/a9a4b538e28f854bfb62e1dea3c8fea12e90216a276c7777ae5345ff29a7/numpy-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:d89dd2b6da69c4fff5e39c28a382199ddedc3a5be5390115608345dec660b9e2", size = 12869487 }, - { url = "https://files.pythonhosted.org/packages/8a/f0/385eb9970309643cbca4fc6eebc8bb16e560de129c91258dfaa18498da8b/numpy-2.1.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f55ba01150f52b1027829b50d70ef1dafd9821ea82905b63936668403c3b471e", size = 20849658 }, - { url = "https://files.pythonhosted.org/packages/54/4a/765b4607f0fecbb239638d610d04ec0a0ded9b4951c56dc68cef79026abf/numpy-2.1.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13138eadd4f4da03074851a698ffa7e405f41a0845a6b1ad135b81596e4e9958", size = 13492258 }, - { url = "https://files.pythonhosted.org/packages/bd/a7/2332679479c70b68dccbf4a8eb9c9b5ee383164b161bee9284ac141fbd33/numpy-2.1.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a6b46587b14b888e95e4a24d7b13ae91fa22386c199ee7b418f449032b2fa3b8", size = 5090249 }, - { url = "https://files.pythonhosted.org/packages/c1/67/4aa00316b3b981a822c7a239d3a8135be2a6945d1fd11d0efb25d361711a/numpy-2.1.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:0fa14563cc46422e99daef53d725d0c326e99e468a9320a240affffe87852564", size = 6621704 }, - { url = "https://files.pythonhosted.org/packages/5e/da/1a429ae58b3b6c364eeec93bf044c532f2ff7b48a52e41050896cf15d5b1/numpy-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8637dcd2caa676e475503d1f8fdb327bc495554e10838019651b76d17b98e512", size = 13606089 }, - { url = "https://files.pythonhosted.org/packages/9e/3e/3757f304c704f2f0294a6b8340fcf2be244038be07da4cccf390fa678a9f/numpy-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2312b2aa89e1f43ecea6da6ea9a810d06aae08321609d8dc0d0eda6d946a541b", size = 16043185 }, - { url = "https://files.pythonhosted.org/packages/43/97/75329c28fea3113d00c8d2daf9bc5828d58d78ed661d8e05e234f86f0f6d/numpy-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a38c19106902bb19351b83802531fea19dee18e5b37b36454f27f11ff956f7fc", size = 16410751 }, - { url = "https://files.pythonhosted.org/packages/ad/7a/442965e98b34e0ae9da319f075b387bcb9a1e0658276cc63adb8c9686f7b/numpy-2.1.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02135ade8b8a84011cbb67dc44e07c58f28575cf9ecf8ab304e51c05528c19f0", size = 14082705 }, - { url = "https://files.pythonhosted.org/packages/ac/b6/26108cf2cfa5c7e03fb969b595c93131eab4a399762b51ce9ebec2332e80/numpy-2.1.3-cp312-cp312-win32.whl", hash = "sha256:e6988e90fcf617da2b5c78902fe8e668361b43b4fe26dbf2d7b0f8034d4cafb9", size = 6239077 }, - { url = "https://files.pythonhosted.org/packages/a6/84/fa11dad3404b7634aaab50733581ce11e5350383311ea7a7010f464c0170/numpy-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:0d30c543f02e84e92c4b1f415b7c6b5326cbe45ee7882b6b77db7195fb971e3a", size = 12566858 }, - { url = "https://files.pythonhosted.org/packages/4d/0b/620591441457e25f3404c8057eb924d04f161244cb8a3680d529419aa86e/numpy-2.1.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96fe52fcdb9345b7cd82ecd34547fca4321f7656d500eca497eb7ea5a926692f", size = 20836263 }, - { url = "https://files.pythonhosted.org/packages/45/e1/210b2d8b31ce9119145433e6ea78046e30771de3fe353f313b2778142f34/numpy-2.1.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f653490b33e9c3a4c1c01d41bc2aef08f9475af51146e4a7710c450cf9761598", size = 13507771 }, - { url = "https://files.pythonhosted.org/packages/55/44/aa9ee3caee02fa5a45f2c3b95cafe59c44e4b278fbbf895a93e88b308555/numpy-2.1.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:dc258a761a16daa791081d026f0ed4399b582712e6fc887a95af09df10c5ca57", size = 5075805 }, - { url = "https://files.pythonhosted.org/packages/78/d6/61de6e7e31915ba4d87bbe1ae859e83e6582ea14c6add07c8f7eefd8488f/numpy-2.1.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:016d0f6f5e77b0f0d45d77387ffa4bb89816b57c835580c3ce8e099ef830befe", size = 6608380 }, - { url = "https://files.pythonhosted.org/packages/3e/46/48bdf9b7241e317e6cf94276fe11ba673c06d1fdf115d8b4ebf616affd1a/numpy-2.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c181ba05ce8299c7aa3125c27b9c2167bca4a4445b7ce73d5febc411ca692e43", size = 13602451 }, - { url = "https://files.pythonhosted.org/packages/70/50/73f9a5aa0810cdccda9c1d20be3cbe4a4d6ea6bfd6931464a44c95eef731/numpy-2.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5641516794ca9e5f8a4d17bb45446998c6554704d888f86df9b200e66bdcce56", size = 16039822 }, - { url = "https://files.pythonhosted.org/packages/ad/cd/098bc1d5a5bc5307cfc65ee9369d0ca658ed88fbd7307b0d49fab6ca5fa5/numpy-2.1.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ea4dedd6e394a9c180b33c2c872b92f7ce0f8e7ad93e9585312b0c5a04777a4a", size = 16411822 }, - { url = "https://files.pythonhosted.org/packages/83/a2/7d4467a2a6d984549053b37945620209e702cf96a8bc658bc04bba13c9e2/numpy-2.1.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0df3635b9c8ef48bd3be5f862cf71b0a4716fa0e702155c45067c6b711ddcef", size = 14079598 }, - { url = "https://files.pythonhosted.org/packages/e9/6a/d64514dcecb2ee70bfdfad10c42b76cab657e7ee31944ff7a600f141d9e9/numpy-2.1.3-cp313-cp313-win32.whl", hash = "sha256:50ca6aba6e163363f132b5c101ba078b8cbd3fa92c7865fd7d4d62d9779ac29f", size = 6236021 }, - { url = "https://files.pythonhosted.org/packages/bb/f9/12297ed8d8301a401e7d8eb6b418d32547f1d700ed3c038d325a605421a4/numpy-2.1.3-cp313-cp313-win_amd64.whl", hash = "sha256:747641635d3d44bcb380d950679462fae44f54b131be347d5ec2bce47d3df9ed", size = 12560405 }, - { url = "https://files.pythonhosted.org/packages/a7/45/7f9244cd792e163b334e3a7f02dff1239d2890b6f37ebf9e82cbe17debc0/numpy-2.1.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:996bb9399059c5b82f76b53ff8bb686069c05acc94656bb259b1d63d04a9506f", size = 20859062 }, - { url = "https://files.pythonhosted.org/packages/b1/b4/a084218e7e92b506d634105b13e27a3a6645312b93e1c699cc9025adb0e1/numpy-2.1.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:45966d859916ad02b779706bb43b954281db43e185015df6eb3323120188f9e4", size = 13515839 }, - { url = "https://files.pythonhosted.org/packages/27/45/58ed3f88028dcf80e6ea580311dc3edefdd94248f5770deb980500ef85dd/numpy-2.1.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:baed7e8d7481bfe0874b566850cb0b85243e982388b7b23348c6db2ee2b2ae8e", size = 5116031 }, - { url = "https://files.pythonhosted.org/packages/37/a8/eb689432eb977d83229094b58b0f53249d2209742f7de529c49d61a124a0/numpy-2.1.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:a9f7f672a3388133335589cfca93ed468509cb7b93ba3105fce780d04a6576a0", size = 6629977 }, - { url = "https://files.pythonhosted.org/packages/42/a3/5355ad51ac73c23334c7caaed01adadfda49544f646fcbfbb4331deb267b/numpy-2.1.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7aac50327da5d208db2eec22eb11e491e3fe13d22653dce51b0f4109101b408", size = 13575951 }, - { url = "https://files.pythonhosted.org/packages/c4/70/ea9646d203104e647988cb7d7279f135257a6b7e3354ea6c56f8bafdb095/numpy-2.1.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4394bc0dbd074b7f9b52024832d16e019decebf86caf909d94f6b3f77a8ee3b6", size = 16022655 }, - { url = "https://files.pythonhosted.org/packages/14/ce/7fc0612903e91ff9d0b3f2eda4e18ef9904814afcae5b0f08edb7f637883/numpy-2.1.3-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:50d18c4358a0a8a53f12a8ba9d772ab2d460321e6a93d6064fc22443d189853f", size = 16399902 }, - { url = "https://files.pythonhosted.org/packages/ef/62/1d3204313357591c913c32132a28f09a26357e33ea3c4e2fe81269e0dca1/numpy-2.1.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:14e253bd43fc6b37af4921b10f6add6925878a42a0c5fe83daee390bca80bc17", size = 14067180 }, - { url = "https://files.pythonhosted.org/packages/24/d7/78a40ed1d80e23a774cb8a34ae8a9493ba1b4271dde96e56ccdbab1620ef/numpy-2.1.3-cp313-cp313t-win32.whl", hash = "sha256:08788d27a5fd867a663f6fc753fd7c3ad7e92747efc73c53bca2f19f8bc06f48", size = 6291907 }, - { url = "https://files.pythonhosted.org/packages/86/09/a5ab407bd7f5f5599e6a9261f964ace03a73e7c6928de906981c31c38082/numpy-2.1.3-cp313-cp313t-win_amd64.whl", hash = "sha256:2564fbdf2b99b3f815f2107c1bbc93e2de8ee655a69c261363a1172a79a257d4", size = 12644098 }, - { url = "https://files.pythonhosted.org/packages/00/e7/8d8bb791b62586cc432ecbb70632b4f23b7b7c88df41878de7528264f6d7/numpy-2.1.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4f2015dfe437dfebbfce7c85c7b53d81ba49e71ba7eadbf1df40c915af75979f", size = 20983893 }, - { url = "https://files.pythonhosted.org/packages/5e/f3/cb8118a044b5007586245a650360c9f5915b2f4232dd7658bb7a63dd1d02/numpy-2.1.3-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:3522b0dfe983a575e6a9ab3a4a4dfe156c3e428468ff08ce582b9bb6bd1d71d4", size = 6752501 }, - { url = "https://files.pythonhosted.org/packages/53/f5/365b46439b518d2ec6ebb880cc0edf90f225145dfd4db7958334f7164530/numpy-2.1.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c006b607a865b07cd981ccb218a04fc86b600411d83d6fc261357f1c0966755d", size = 16142601 }, - { url = "https://files.pythonhosted.org/packages/03/c2/d1fee6ba999aa7cd41ca6856937f2baaf604c3eec1565eae63451ec31e5e/numpy-2.1.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e14e26956e6f1696070788252dcdff11b4aca4c3e8bd166e0df1bb8f315a67cb", size = 12771397 }, -] - -[[package]] -name = "packaging" -version = "24.2" -source = { registry = "https://pypi.org/simple" } -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/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 }, -] - -[[package]] -name = "pandas" -version = "2.2.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, - { name = "python-dateutil" }, - { name = "pytz" }, - { name = "tzdata" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/9f8431bacc2e19dca897724cd097b1bb224a6ad5433784a44b587c7c13af/pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", size = 4399213 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/aa/70/c853aec59839bceed032d52010ff5f1b8d87dc3114b762e4ba2727661a3b/pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5", size = 12580827 }, - { url = "https://files.pythonhosted.org/packages/99/f2/c4527768739ffa4469b2b4fff05aa3768a478aed89a2f271a79a40eee984/pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348", size = 11303897 }, - { url = "https://files.pythonhosted.org/packages/ed/12/86c1747ea27989d7a4064f806ce2bae2c6d575b950be087837bdfcabacc9/pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed", size = 66480908 }, - { url = "https://files.pythonhosted.org/packages/44/50/7db2cd5e6373ae796f0ddad3675268c8d59fb6076e66f0c339d61cea886b/pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57", size = 13064210 }, - { url = "https://files.pythonhosted.org/packages/61/61/a89015a6d5536cb0d6c3ba02cebed51a95538cf83472975275e28ebf7d0c/pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42", size = 16754292 }, - { url = "https://files.pythonhosted.org/packages/ce/0d/4cc7b69ce37fac07645a94e1d4b0880b15999494372c1523508511b09e40/pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f", size = 14416379 }, - { url = "https://files.pythonhosted.org/packages/31/9e/6ebb433de864a6cd45716af52a4d7a8c3c9aaf3a98368e61db9e69e69a9c/pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645", size = 11598471 }, - { url = "https://files.pythonhosted.org/packages/a8/44/d9502bf0ed197ba9bf1103c9867d5904ddcaf869e52329787fc54ed70cc8/pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039", size = 12602222 }, - { url = "https://files.pythonhosted.org/packages/52/11/9eac327a38834f162b8250aab32a6781339c69afe7574368fffe46387edf/pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd", size = 11321274 }, - { url = "https://files.pythonhosted.org/packages/45/fb/c4beeb084718598ba19aa9f5abbc8aed8b42f90930da861fcb1acdb54c3a/pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698", size = 15579836 }, - { url = "https://files.pythonhosted.org/packages/cd/5f/4dba1d39bb9c38d574a9a22548c540177f78ea47b32f99c0ff2ec499fac5/pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc", size = 13058505 }, - { url = "https://files.pythonhosted.org/packages/b9/57/708135b90391995361636634df1f1130d03ba456e95bcf576fada459115a/pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3", size = 16744420 }, - { url = "https://files.pythonhosted.org/packages/86/4a/03ed6b7ee323cf30404265c284cee9c65c56a212e0a08d9ee06984ba2240/pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32", size = 14440457 }, - { url = "https://files.pythonhosted.org/packages/ed/8c/87ddf1fcb55d11f9f847e3c69bb1c6f8e46e2f40ab1a2d2abadb2401b007/pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5", size = 11617166 }, - { url = "https://files.pythonhosted.org/packages/17/a3/fb2734118db0af37ea7433f57f722c0a56687e14b14690edff0cdb4b7e58/pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9", size = 12529893 }, - { url = "https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4", size = 11363475 }, - { url = "https://files.pythonhosted.org/packages/c6/2a/4bba3f03f7d07207481fed47f5b35f556c7441acddc368ec43d6643c5777/pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3", size = 15188645 }, - { url = "https://files.pythonhosted.org/packages/38/f8/d8fddee9ed0d0c0f4a2132c1dfcf0e3e53265055da8df952a53e7eaf178c/pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319", size = 12739445 }, - { url = "https://files.pythonhosted.org/packages/20/e8/45a05d9c39d2cea61ab175dbe6a2de1d05b679e8de2011da4ee190d7e748/pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8", size = 16359235 }, - { url = "https://files.pythonhosted.org/packages/1d/99/617d07a6a5e429ff90c90da64d428516605a1ec7d7bea494235e1c3882de/pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a", size = 14056756 }, - { url = "https://files.pythonhosted.org/packages/29/d4/1244ab8edf173a10fd601f7e13b9566c1b525c4f365d6bee918e68381889/pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13", size = 11504248 }, - { url = "https://files.pythonhosted.org/packages/64/22/3b8f4e0ed70644e85cfdcd57454686b9057c6c38d2f74fe4b8bc2527214a/pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015", size = 12477643 }, - { url = "https://files.pythonhosted.org/packages/e4/93/b3f5d1838500e22c8d793625da672f3eec046b1a99257666c94446969282/pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28", size = 11281573 }, - { url = "https://files.pythonhosted.org/packages/f5/94/6c79b07f0e5aab1dcfa35a75f4817f5c4f677931d4234afcd75f0e6a66ca/pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0", size = 15196085 }, - { url = "https://files.pythonhosted.org/packages/e8/31/aa8da88ca0eadbabd0a639788a6da13bb2ff6edbbb9f29aa786450a30a91/pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24", size = 12711809 }, - { url = "https://files.pythonhosted.org/packages/ee/7c/c6dbdb0cb2a4344cacfb8de1c5808ca885b2e4dcfde8008266608f9372af/pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659", size = 16356316 }, - { url = "https://files.pythonhosted.org/packages/57/b7/8b757e7d92023b832869fa8881a992696a0bfe2e26f72c9ae9f255988d42/pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb", size = 14022055 }, - { url = "https://files.pythonhosted.org/packages/3b/bc/4b18e2b8c002572c5a441a64826252ce5da2aa738855747247a971988043/pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d", size = 11481175 }, - { url = "https://files.pythonhosted.org/packages/76/a3/a5d88146815e972d40d19247b2c162e88213ef51c7c25993942c39dbf41d/pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468", size = 12615650 }, - { url = "https://files.pythonhosted.org/packages/9c/8c/f0fd18f6140ddafc0c24122c8a964e48294acc579d47def376fef12bcb4a/pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18", size = 11290177 }, - { url = "https://files.pythonhosted.org/packages/ed/f9/e995754eab9c0f14c6777401f7eece0943840b7a9fc932221c19d1abee9f/pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2", size = 14651526 }, - { url = "https://files.pythonhosted.org/packages/25/b0/98d6ae2e1abac4f35230aa756005e8654649d305df9a28b16b9ae4353bff/pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4", size = 11871013 }, - { url = "https://files.pythonhosted.org/packages/cc/57/0f72a10f9db6a4628744c8e8f0df4e6e21de01212c7c981d31e50ffc8328/pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d", size = 15711620 }, - { url = "https://files.pythonhosted.org/packages/ab/5f/b38085618b950b79d2d9164a711c52b10aefc0ae6833b96f626b7021b2ed/pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", size = 13098436 }, -] - -[[package]] -name = "pbr" -version = "6.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/35/80cf8f6a4f34017a7fe28242dc45161a1baa55c41563c354d8147e8358b2/pbr-6.1.0.tar.gz", hash = "sha256:788183e382e3d1d7707db08978239965e8b9e4e5ed42669bf4758186734d5f24", size = 124032 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/44/6a65ecd630393d47ad3e7d5354768cb7f9a10b3a0eb2cd8c6f52b28211ee/pbr-6.1.0-py2.py3-none-any.whl", hash = "sha256:a776ae228892d8013649c0aeccbb3d5f99ee15e005a4cbb7e61d55a067b28a2a", size = 108529 }, -] - -[[package]] -name = "peewee" -version = "3.17.8" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b4/dc/832bcf4ea5ee2ebc4ea42ef36e44a451de5d80f8b9858bf2066e30738c67/peewee-3.17.8.tar.gz", hash = "sha256:ce1d05db3438830b989a1b9d0d0aa4e7f6134d5f6fd57686eeaa26a3e6485a8c", size = 948249 } - -[[package]] -name = "platformdirs" -version = "4.3.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/13/fc/128cc9cb8f03208bdbf93d3aa862e16d376844a14f9a0ce5cf4507372de4/platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907", size = 21302 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb", size = 18439 }, -] - -[[package]] -name = "psutil" -version = "6.1.0" -source = { registry = "https://pypi.org/simple" } -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/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]] -name = "pycparser" -version = "2.22" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 }, -] - -[[package]] -name = "pydantic" -version = "2.10.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "annotated-types" }, - { name = "pydantic-core" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/41/86/a03390cb12cf64e2a8df07c267f3eb8d5035e0f9a04bb20fb79403d2a00e/pydantic-2.10.2.tar.gz", hash = "sha256:2bc2d7f17232e0841cbba4641e65ba1eb6fafb3a08de3a091ff3ce14a197c4fa", size = 785401 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d5/74/da832196702d0c56eb86b75bfa346db9238617e29b0b7ee3b8b4eccfe654/pydantic-2.10.2-py3-none-any.whl", hash = "sha256:cfb96e45951117c3024e6b67b25cdc33a3cb7b2fa62e239f7af1378358a1d99e", size = 456364 }, -] - -[[package]] -name = "pydantic-core" -version = "2.27.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a6/9f/7de1f19b6aea45aeb441838782d68352e71bfa98ee6fa048d5041991b33e/pydantic_core-2.27.1.tar.gz", hash = "sha256:62a763352879b84aa31058fc931884055fd75089cccbd9d58bb6afd01141b235", size = 412785 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6e/ce/60fd96895c09738648c83f3f00f595c807cb6735c70d3306b548cc96dd49/pydantic_core-2.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:71a5e35c75c021aaf400ac048dacc855f000bdfed91614b4a726f7432f1f3d6a", size = 1897984 }, - { url = "https://files.pythonhosted.org/packages/fd/b9/84623d6b6be98cc209b06687d9bca5a7b966ffed008d15225dd0d20cce2e/pydantic_core-2.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f82d068a2d6ecfc6e054726080af69a6764a10015467d7d7b9f66d6ed5afa23b", size = 1807491 }, - { url = "https://files.pythonhosted.org/packages/01/72/59a70165eabbc93b1111d42df9ca016a4aa109409db04304829377947028/pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:121ceb0e822f79163dd4699e4c54f5ad38b157084d97b34de8b232bcaad70278", size = 1831953 }, - { url = "https://files.pythonhosted.org/packages/7c/0c/24841136476adafd26f94b45bb718a78cb0500bd7b4f8d667b67c29d7b0d/pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4603137322c18eaf2e06a4495f426aa8d8388940f3c457e7548145011bb68e05", size = 1856071 }, - { url = "https://files.pythonhosted.org/packages/53/5e/c32957a09cceb2af10d7642df45d1e3dbd8596061f700eac93b801de53c0/pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a33cd6ad9017bbeaa9ed78a2e0752c5e250eafb9534f308e7a5f7849b0b1bfb4", size = 2038439 }, - { url = "https://files.pythonhosted.org/packages/e4/8f/979ab3eccd118b638cd6d8f980fea8794f45018255a36044dea40fe579d4/pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15cc53a3179ba0fcefe1e3ae50beb2784dede4003ad2dfd24f81bba4b23a454f", size = 2787416 }, - { url = "https://files.pythonhosted.org/packages/02/1d/00f2e4626565b3b6d3690dab4d4fe1a26edd6a20e53749eb21ca892ef2df/pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45d9c5eb9273aa50999ad6adc6be5e0ecea7e09dbd0d31bd0c65a55a2592ca08", size = 2134548 }, - { url = "https://files.pythonhosted.org/packages/9d/46/3112621204128b90898adc2e721a3cd6cf5626504178d6f32c33b5a43b79/pydantic_core-2.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8bf7b66ce12a2ac52d16f776b31d16d91033150266eb796967a7e4621707e4f6", size = 1989882 }, - { url = "https://files.pythonhosted.org/packages/49/ec/557dd4ff5287ffffdf16a31d08d723de6762bb1b691879dc4423392309bc/pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:655d7dd86f26cb15ce8a431036f66ce0318648f8853d709b4167786ec2fa4807", size = 1995829 }, - { url = "https://files.pythonhosted.org/packages/6e/b2/610dbeb74d8d43921a7234555e4c091cb050a2bdb8cfea86d07791ce01c5/pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:5556470f1a2157031e676f776c2bc20acd34c1990ca5f7e56f1ebf938b9ab57c", size = 2091257 }, - { url = "https://files.pythonhosted.org/packages/8c/7f/4bf8e9d26a9118521c80b229291fa9558a07cdd9a968ec2d5c1026f14fbc/pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f69ed81ab24d5a3bd93861c8c4436f54afdf8e8cc421562b0c7504cf3be58206", size = 2143894 }, - { url = "https://files.pythonhosted.org/packages/1f/1c/875ac7139c958f4390f23656fe696d1acc8edf45fb81e4831960f12cd6e4/pydantic_core-2.27.1-cp310-none-win32.whl", hash = "sha256:f5a823165e6d04ccea61a9f0576f345f8ce40ed533013580e087bd4d7442b52c", size = 1816081 }, - { url = "https://files.pythonhosted.org/packages/d7/41/55a117acaeda25ceae51030b518032934f251b1dac3704a53781383e3491/pydantic_core-2.27.1-cp310-none-win_amd64.whl", hash = "sha256:57866a76e0b3823e0b56692d1a0bf722bffb324839bb5b7226a7dbd6c9a40b17", size = 1981109 }, - { url = "https://files.pythonhosted.org/packages/27/39/46fe47f2ad4746b478ba89c561cafe4428e02b3573df882334bd2964f9cb/pydantic_core-2.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac3b20653bdbe160febbea8aa6c079d3df19310d50ac314911ed8cc4eb7f8cb8", size = 1895553 }, - { url = "https://files.pythonhosted.org/packages/1c/00/0804e84a78b7fdb394fff4c4f429815a10e5e0993e6ae0e0b27dd20379ee/pydantic_core-2.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a5a8e19d7c707c4cadb8c18f5f60c843052ae83c20fa7d44f41594c644a1d330", size = 1807220 }, - { url = "https://files.pythonhosted.org/packages/01/de/df51b3bac9820d38371f5a261020f505025df732ce566c2a2e7970b84c8c/pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f7059ca8d64fea7f238994c97d91f75965216bcbe5f695bb44f354893f11d52", size = 1829727 }, - { url = "https://files.pythonhosted.org/packages/5f/d9/c01d19da8f9e9fbdb2bf99f8358d145a312590374d0dc9dd8dbe484a9cde/pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bed0f8a0eeea9fb72937ba118f9db0cb7e90773462af7962d382445f3005e5a4", size = 1854282 }, - { url = "https://files.pythonhosted.org/packages/5f/84/7db66eb12a0dc88c006abd6f3cbbf4232d26adfd827a28638c540d8f871d/pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3cb37038123447cf0f3ea4c74751f6a9d7afef0eb71aa07bf5f652b5e6a132c", size = 2037437 }, - { url = "https://files.pythonhosted.org/packages/34/ac/a2537958db8299fbabed81167d58cc1506049dba4163433524e06a7d9f4c/pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84286494f6c5d05243456e04223d5a9417d7f443c3b76065e75001beb26f88de", size = 2780899 }, - { url = "https://files.pythonhosted.org/packages/4a/c1/3e38cd777ef832c4fdce11d204592e135ddeedb6c6f525478a53d1c7d3e5/pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acc07b2cfc5b835444b44a9956846b578d27beeacd4b52e45489e93276241025", size = 2135022 }, - { url = "https://files.pythonhosted.org/packages/7a/69/b9952829f80fd555fe04340539d90e000a146f2a003d3fcd1e7077c06c71/pydantic_core-2.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4fefee876e07a6e9aad7a8c8c9f85b0cdbe7df52b8a9552307b09050f7512c7e", size = 1987969 }, - { url = "https://files.pythonhosted.org/packages/05/72/257b5824d7988af43460c4e22b63932ed651fe98804cc2793068de7ec554/pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:258c57abf1188926c774a4c94dd29237e77eda19462e5bb901d88adcab6af919", size = 1994625 }, - { url = "https://files.pythonhosted.org/packages/73/c3/78ed6b7f3278a36589bcdd01243189ade7fc9b26852844938b4d7693895b/pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:35c14ac45fcfdf7167ca76cc80b2001205a8d5d16d80524e13508371fb8cdd9c", size = 2090089 }, - { url = "https://files.pythonhosted.org/packages/8d/c8/b4139b2f78579960353c4cd987e035108c93a78371bb19ba0dc1ac3b3220/pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d1b26e1dff225c31897696cab7d4f0a315d4c0d9e8666dbffdb28216f3b17fdc", size = 2142496 }, - { url = "https://files.pythonhosted.org/packages/3e/f8/171a03e97eb36c0b51981efe0f78460554a1d8311773d3d30e20c005164e/pydantic_core-2.27.1-cp311-none-win32.whl", hash = "sha256:2cdf7d86886bc6982354862204ae3b2f7f96f21a3eb0ba5ca0ac42c7b38598b9", size = 1811758 }, - { url = "https://files.pythonhosted.org/packages/6a/fe/4e0e63c418c1c76e33974a05266e5633e879d4061f9533b1706a86f77d5b/pydantic_core-2.27.1-cp311-none-win_amd64.whl", hash = "sha256:3af385b0cee8df3746c3f406f38bcbfdc9041b5c2d5ce3e5fc6637256e60bbc5", size = 1980864 }, - { url = "https://files.pythonhosted.org/packages/50/fc/93f7238a514c155a8ec02fc7ac6376177d449848115e4519b853820436c5/pydantic_core-2.27.1-cp311-none-win_arm64.whl", hash = "sha256:81f2ec23ddc1b476ff96563f2e8d723830b06dceae348ce02914a37cb4e74b89", size = 1864327 }, - { url = "https://files.pythonhosted.org/packages/be/51/2e9b3788feb2aebff2aa9dfbf060ec739b38c05c46847601134cc1fed2ea/pydantic_core-2.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9cbd94fc661d2bab2bc702cddd2d3370bbdcc4cd0f8f57488a81bcce90c7a54f", size = 1895239 }, - { url = "https://files.pythonhosted.org/packages/7b/9e/f8063952e4a7d0127f5d1181addef9377505dcce3be224263b25c4f0bfd9/pydantic_core-2.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5f8c4718cd44ec1580e180cb739713ecda2bdee1341084c1467802a417fe0f02", size = 1805070 }, - { url = "https://files.pythonhosted.org/packages/2c/9d/e1d6c4561d262b52e41b17a7ef8301e2ba80b61e32e94520271029feb5d8/pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15aae984e46de8d376df515f00450d1522077254ef6b7ce189b38ecee7c9677c", size = 1828096 }, - { url = "https://files.pythonhosted.org/packages/be/65/80ff46de4266560baa4332ae3181fffc4488ea7d37282da1a62d10ab89a4/pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ba5e3963344ff25fc8c40da90f44b0afca8cfd89d12964feb79ac1411a260ac", size = 1857708 }, - { url = "https://files.pythonhosted.org/packages/d5/ca/3370074ad758b04d9562b12ecdb088597f4d9d13893a48a583fb47682cdf/pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:992cea5f4f3b29d6b4f7f1726ed8ee46c8331c6b4eed6db5b40134c6fe1768bb", size = 2037751 }, - { url = "https://files.pythonhosted.org/packages/b1/e2/4ab72d93367194317b99d051947c071aef6e3eb95f7553eaa4208ecf9ba4/pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0325336f348dbee6550d129b1627cb8f5351a9dc91aad141ffb96d4937bd9529", size = 2733863 }, - { url = "https://files.pythonhosted.org/packages/8a/c6/8ae0831bf77f356bb73127ce5a95fe115b10f820ea480abbd72d3cc7ccf3/pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7597c07fbd11515f654d6ece3d0e4e5093edc30a436c63142d9a4b8e22f19c35", size = 2161161 }, - { url = "https://files.pythonhosted.org/packages/f1/f4/b2fe73241da2429400fc27ddeaa43e35562f96cf5b67499b2de52b528cad/pydantic_core-2.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3bbd5d8cc692616d5ef6fbbbd50dbec142c7e6ad9beb66b78a96e9c16729b089", size = 1993294 }, - { url = "https://files.pythonhosted.org/packages/77/29/4bb008823a7f4cc05828198153f9753b3bd4c104d93b8e0b1bfe4e187540/pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:dc61505e73298a84a2f317255fcc72b710b72980f3a1f670447a21efc88f8381", size = 2001468 }, - { url = "https://files.pythonhosted.org/packages/f2/a9/0eaceeba41b9fad851a4107e0cf999a34ae8f0d0d1f829e2574f3d8897b0/pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:e1f735dc43da318cad19b4173dd1ffce1d84aafd6c9b782b3abc04a0d5a6f5bb", size = 2091413 }, - { url = "https://files.pythonhosted.org/packages/d8/36/eb8697729725bc610fd73940f0d860d791dc2ad557faaefcbb3edbd2b349/pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f4e5658dbffe8843a0f12366a4c2d1c316dbe09bb4dfbdc9d2d9cd6031de8aae", size = 2154735 }, - { url = "https://files.pythonhosted.org/packages/52/e5/4f0fbd5c5995cc70d3afed1b5c754055bb67908f55b5cb8000f7112749bf/pydantic_core-2.27.1-cp312-none-win32.whl", hash = "sha256:672ebbe820bb37988c4d136eca2652ee114992d5d41c7e4858cdd90ea94ffe5c", size = 1833633 }, - { url = "https://files.pythonhosted.org/packages/ee/f2/c61486eee27cae5ac781305658779b4a6b45f9cc9d02c90cb21b940e82cc/pydantic_core-2.27.1-cp312-none-win_amd64.whl", hash = "sha256:66ff044fd0bb1768688aecbe28b6190f6e799349221fb0de0e6f4048eca14c16", size = 1986973 }, - { url = "https://files.pythonhosted.org/packages/df/a6/e3f12ff25f250b02f7c51be89a294689d175ac76e1096c32bf278f29ca1e/pydantic_core-2.27.1-cp312-none-win_arm64.whl", hash = "sha256:9a3b0793b1bbfd4146304e23d90045f2a9b5fd5823aa682665fbdaf2a6c28f3e", size = 1883215 }, - { url = "https://files.pythonhosted.org/packages/0f/d6/91cb99a3c59d7b072bded9959fbeab0a9613d5a4935773c0801f1764c156/pydantic_core-2.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f216dbce0e60e4d03e0c4353c7023b202d95cbaeff12e5fd2e82ea0a66905073", size = 1895033 }, - { url = "https://files.pythonhosted.org/packages/07/42/d35033f81a28b27dedcade9e967e8a40981a765795c9ebae2045bcef05d3/pydantic_core-2.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a2e02889071850bbfd36b56fd6bc98945e23670773bc7a76657e90e6b6603c08", size = 1807542 }, - { url = "https://files.pythonhosted.org/packages/41/c2/491b59e222ec7e72236e512108ecad532c7f4391a14e971c963f624f7569/pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42b0e23f119b2b456d07ca91b307ae167cc3f6c846a7b169fca5326e32fdc6cf", size = 1827854 }, - { url = "https://files.pythonhosted.org/packages/e3/f3/363652651779113189cefdbbb619b7b07b7a67ebb6840325117cc8cc3460/pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:764be71193f87d460a03f1f7385a82e226639732214b402f9aa61f0d025f0737", size = 1857389 }, - { url = "https://files.pythonhosted.org/packages/5f/97/be804aed6b479af5a945daec7538d8bf358d668bdadde4c7888a2506bdfb/pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c00666a3bd2f84920a4e94434f5974d7bbc57e461318d6bb34ce9cdbbc1f6b2", size = 2037934 }, - { url = "https://files.pythonhosted.org/packages/42/01/295f0bd4abf58902917e342ddfe5f76cf66ffabfc57c2e23c7681a1a1197/pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ccaa88b24eebc0f849ce0a4d09e8a408ec5a94afff395eb69baf868f5183107", size = 2735176 }, - { url = "https://files.pythonhosted.org/packages/9d/a0/cd8e9c940ead89cc37812a1a9f310fef59ba2f0b22b4e417d84ab09fa970/pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c65af9088ac534313e1963443d0ec360bb2b9cba6c2909478d22c2e363d98a51", size = 2160720 }, - { url = "https://files.pythonhosted.org/packages/73/ae/9d0980e286627e0aeca4c352a60bd760331622c12d576e5ea4441ac7e15e/pydantic_core-2.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:206b5cf6f0c513baffaeae7bd817717140770c74528f3e4c3e1cec7871ddd61a", size = 1992972 }, - { url = "https://files.pythonhosted.org/packages/bf/ba/ae4480bc0292d54b85cfb954e9d6bd226982949f8316338677d56541b85f/pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:062f60e512fc7fff8b8a9d680ff0ddaaef0193dba9fa83e679c0c5f5fbd018bc", size = 2001477 }, - { url = "https://files.pythonhosted.org/packages/55/b7/e26adf48c2f943092ce54ae14c3c08d0d221ad34ce80b18a50de8ed2cba8/pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:a0697803ed7d4af5e4c1adf1670af078f8fcab7a86350e969f454daf598c4960", size = 2091186 }, - { url = "https://files.pythonhosted.org/packages/ba/cc/8491fff5b608b3862eb36e7d29d36a1af1c945463ca4c5040bf46cc73f40/pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:58ca98a950171f3151c603aeea9303ef6c235f692fe555e883591103da709b23", size = 2154429 }, - { url = "https://files.pythonhosted.org/packages/78/d8/c080592d80edd3441ab7f88f865f51dae94a157fc64283c680e9f32cf6da/pydantic_core-2.27.1-cp313-none-win32.whl", hash = "sha256:8065914ff79f7eab1599bd80406681f0ad08f8e47c880f17b416c9f8f7a26d05", size = 1833713 }, - { url = "https://files.pythonhosted.org/packages/83/84/5ab82a9ee2538ac95a66e51f6838d6aba6e0a03a42aa185ad2fe404a4e8f/pydantic_core-2.27.1-cp313-none-win_amd64.whl", hash = "sha256:ba630d5e3db74c79300d9a5bdaaf6200172b107f263c98a0539eeecb857b2337", size = 1987897 }, - { url = "https://files.pythonhosted.org/packages/df/c3/b15fb833926d91d982fde29c0624c9f225da743c7af801dace0d4e187e71/pydantic_core-2.27.1-cp313-none-win_arm64.whl", hash = "sha256:45cf8588c066860b623cd11c4ba687f8d7175d5f7ef65f7129df8a394c502de5", size = 1882983 }, - { url = "https://files.pythonhosted.org/packages/7c/60/e5eb2d462595ba1f622edbe7b1d19531e510c05c405f0b87c80c1e89d5b1/pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3fa80ac2bd5856580e242dbc202db873c60a01b20309c8319b5c5986fbe53ce6", size = 1894016 }, - { url = "https://files.pythonhosted.org/packages/61/20/da7059855225038c1c4326a840908cc7ca72c7198cb6addb8b92ec81c1d6/pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d950caa237bb1954f1b8c9227b5065ba6875ac9771bb8ec790d956a699b78676", size = 1771648 }, - { url = "https://files.pythonhosted.org/packages/8f/fc/5485cf0b0bb38da31d1d292160a4d123b5977841ddc1122c671a30b76cfd/pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e4216e64d203e39c62df627aa882f02a2438d18a5f21d7f721621f7a5d3611d", size = 1826929 }, - { url = "https://files.pythonhosted.org/packages/a1/ff/fb1284a210e13a5f34c639efc54d51da136074ffbe25ec0c279cf9fbb1c4/pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02a3d637bd387c41d46b002f0e49c52642281edacd2740e5a42f7017feea3f2c", size = 1980591 }, - { url = "https://files.pythonhosted.org/packages/f1/14/77c1887a182d05af74f6aeac7b740da3a74155d3093ccc7ee10b900cc6b5/pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:161c27ccce13b6b0c8689418da3885d3220ed2eae2ea5e9b2f7f3d48f1d52c27", size = 1981326 }, - { url = "https://files.pythonhosted.org/packages/06/aa/6f1b2747f811a9c66b5ef39d7f02fbb200479784c75e98290d70004b1253/pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:19910754e4cc9c63bc1c7f6d73aa1cfee82f42007e407c0f413695c2f7ed777f", size = 1989205 }, - { url = "https://files.pythonhosted.org/packages/7a/d2/8ce2b074d6835f3c88d85f6d8a399790043e9fdb3d0e43455e72d19df8cc/pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:e173486019cc283dc9778315fa29a363579372fe67045e971e89b6365cc035ed", size = 2079616 }, - { url = "https://files.pythonhosted.org/packages/65/71/af01033d4e58484c3db1e5d13e751ba5e3d6b87cc3368533df4c50932c8b/pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:af52d26579b308921b73b956153066481f064875140ccd1dfd4e77db89dbb12f", size = 2133265 }, - { url = "https://files.pythonhosted.org/packages/33/72/f881b5e18fbb67cf2fb4ab253660de3c6899dbb2dba409d0b757e3559e3d/pydantic_core-2.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:981fb88516bd1ae8b0cbbd2034678a39dedc98752f264ac9bc5839d3923fa04c", size = 2001864 }, -] - -[[package]] -name = "pyjwt" -version = "2.10.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e7/46/bd74733ff231675599650d3e47f361794b22ef3e3770998dda30d3b63726/pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", size = 87785 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb", size = 22997 }, -] - -[[package]] -name = "pyscf" -version = "2.7.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "h5py" }, - { name = "numpy" }, - { name = "scipy" }, - { name = "setuptools" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/84/44/b9fc70bd3ca53fd45ca3e397d0ed1b7911b235b75af1b33940909162df9d/pyscf-2.7.0.tar.gz", hash = "sha256:ca8efc2f28d72c3130f26a967e7fa8d0bbc4a6b47d16a7c4c732ec85a31b7eec", size = 8865796 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/23/5dc3ca0fa7ce768ec5c28be496f7c4ea2c70ffca1c9629ac4545a0b2ac37/pyscf-2.7.0-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:ec4b4356a2e1d801b92757235925efdde1ff6ecf99f0ec1d6d9c1307b5468d6f", size = 37928749 }, - { url = "https://files.pythonhosted.org/packages/43/38/3bf96ff39535a3d8f853a8345fbae9747cf9b4fe9f8b8ce36dd42f83645d/pyscf-2.7.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e76aee018da70ccd393a8a5f851a1738098c7289f4394ea840b441aaa692b470", size = 32896099 }, - { url = "https://files.pythonhosted.org/packages/d3/4c/0ec69b9ae4e0b74fc083a5cd9cc4f87f78403224d763ce32274230c1c177/pyscf-2.7.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:486638182902963f67224de5e35dae28223b7e1df852c6613ce581259489364f", size = 41951153 }, - { url = "https://files.pythonhosted.org/packages/a0/86/36a975aca3c3ce4db2e0fadac152528b16e01115b76521280822ba28c69b/pyscf-2.7.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b83a6685dceac36173a75fcd3366cf528527c5c9236bfa86845b9ebcc490d5a9", size = 48650157 }, -] - -[[package]] -name = "pyspnego" -version = "0.11.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cryptography" }, - { name = "sspilib", marker = "sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/6b/f8/53f1fc851dab776a183ffc9f29ebde244fbb467f5237f3ea809519fc4b2e/pyspnego-0.11.2.tar.gz", hash = "sha256:994388d308fb06e4498365ce78d222bf4f3570b6df4ec95738431f61510c971b", size = 225954 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/57/ea/b3c1438839d8724beff7b31ec42b9d041265dc9ca27ccb54477d442bfbcf/pyspnego-0.11.2-py3-none-any.whl", hash = "sha256:74abc1fb51e59360eb5c5c9086e5962174f1072c7a50cf6da0bda9a4bcfdfbd4", size = 130529 }, -] - -[[package]] -name = "python-dateutil" -version = "2.9.0.post0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "six" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, -] - -[[package]] -name = "pytket" -version = "1.36.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "graphviz" }, - { name = "jinja2" }, - { name = "lark" }, - { name = "networkx" }, - { name = "numpy" }, - { name = "qwasm" }, - { name = "scipy" }, - { name = "sympy" }, - { name = "typing-extensions" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/d8/67/1ef1fd1195157185893bad9f2cc41de8bb4329e5cfc2a720d6d1fda59771/pytket-1.36.0-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:4b360ba2362cc9ae75929a9c3e9b5259fe82214ca21aaf9e892811d5cc205bc1", size = 6085586 }, - { url = "https://files.pythonhosted.org/packages/67/5b/ac78651c112e8a2565ea457f9ed18fbb42cd4d3aa6796a7e4e9e3823ad6e/pytket-1.36.0-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:aacf6ca5565b0e8d73f06462600d4f66179b0a0ea7110ca3c496f5b1f27c2aa9", size = 6826928 }, - { url = "https://files.pythonhosted.org/packages/8f/b7/96f4a58dfee9131948e6f673a98e9313038b089e85d756b91db1be593192/pytket-1.36.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2dc9be3b03670343d2af5e171ef8a13450a39a48dc5ffb7098afa721256aea03", size = 7676453 }, - { url = "https://files.pythonhosted.org/packages/85/a1/e3f15499218ede27220e749f984fe0d5cfc0e24411948eacf22271a2f825/pytket-1.36.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8563d94c927cadac076eef6667721899a6f103e6b8cdc9d7b104624ab4b1cbc6", size = 8242695 }, - { url = "https://files.pythonhosted.org/packages/26/e5/853b120ae712bd9b8c34bf16ad2082b695fd68f0efa72dbe26a7dfec9ee6/pytket-1.36.0-cp310-cp310-win_amd64.whl", hash = "sha256:ffd37116afe4fa48910b8011458a05bde4eb82bb528fd7b5b60ffb2f5ec84efa", size = 8593668 }, - { url = "https://files.pythonhosted.org/packages/b6/86/56f6f3db522e5326f35ad172b17aa8c22d88cdf2a36fe3fe107907bb3e09/pytket-1.36.0-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:a7eb6f1baf1f239726484e97a39568710ae7f82f7185fa65e4aba8c9555d915a", size = 6100677 }, - { url = "https://files.pythonhosted.org/packages/05/21/eb2ed5aaa7ed385b5262016c00bbbb82c5e53d3aae24afe76ae430980864/pytket-1.36.0-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:2127df6cb5d1e72680eecba8e4535140214315b53d3d9fd98fef9158e7e4f320", size = 6843314 }, - { url = "https://files.pythonhosted.org/packages/43/1e/43bdffae68fd4f4484b78fe9b0136083b8811dac7b30a8819b6deecf4237/pytket-1.36.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dcfff1fde6c8018c8c58428cf33dbce10dccdfb19ef658ef77d930af0cf32ae0", size = 7687285 }, - { url = "https://files.pythonhosted.org/packages/9e/32/f7e448222e1c5160d17c646e6622a64e5c3d2e7eded8b3be12c3e407a95f/pytket-1.36.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:37b00e8aefc57802619e33582405d88fb0b9f372263d57217fd35e94f4fd92c5", size = 8253931 }, - { url = "https://files.pythonhosted.org/packages/a2/d1/0a4067470c2370192829a8bed33bdc9c75eab2c15e87ad6075bddfb269af/pytket-1.36.0-cp311-cp311-win_amd64.whl", hash = "sha256:419a95ce931d8f98abfb0339e8cdc7cce46d7453c1874d8e42df0e2617be5538", size = 8607414 }, - { url = "https://files.pythonhosted.org/packages/65/fb/32659600031d389b9f26b549748a2353027b5ef2fe675a2b26d64bab5156/pytket-1.36.0-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:f9176f7fa8a42d75a43caec2634e19f854f527947fe2b76c06b8ca4a61084028", size = 6310075 }, - { url = "https://files.pythonhosted.org/packages/86/3f/a7703bff05514fd0248c06b46fba732bf2a5dcaba417a1c8ac6962d834e2/pytket-1.36.0-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:982fbf203bc04266825680404e697ff38e1c1743b6d0305fda4b5d289ac4921a", size = 7078678 }, - { url = "https://files.pythonhosted.org/packages/13/5a/d202f5302246502da64a75c57dcb27553a71f0e5f56efe47055767fd1b60/pytket-1.36.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f8b8497067a092c8d6a7e3af86a3a78e7881d0ae45ea0f2904e45fe58d66719e", size = 7686128 }, - { url = "https://files.pythonhosted.org/packages/ae/16/34849e87fe850740dc41d7f270cbb34e997947a13f1a6f1ebe7bb05e4445/pytket-1.36.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a238300db1a27da8bb15aea1c334b7fe9bbc96c89f95a586bbe349d2771b652", size = 8252260 }, - { url = "https://files.pythonhosted.org/packages/80/41/02f6f284ad6a4e596ad330016a13d8f75e9b7e36f5439bd0a013c66321c5/pytket-1.36.0-cp312-cp312-win_amd64.whl", hash = "sha256:90cdbc7cceefee213d38d839de497786a5e70c71dc3c4f93f9e09c18e8316557", size = 8618712 }, - { url = "https://files.pythonhosted.org/packages/b9/e0/fea7f5cab10360063d2c1e091c497af62dd4746b5c690455729d27e47255/pytket-1.36.0-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:2bd76470aa3c0249141f0a24492f04e5910c3b1fede2eb4a78c0e312ee5aa7d7", size = 6311392 }, - { url = "https://files.pythonhosted.org/packages/08/5d/774cb5a3cf1b0e29de9fc772ef0670ee7814eb981ba4dd9be063f2f31266/pytket-1.36.0-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:551d736054357a64f9da405d89e62dd33cdbd679ecae94556de120063ea08d3c", size = 7078673 }, - { url = "https://files.pythonhosted.org/packages/fc/ba/588396b555a0fed5e2386e99aed028c0440302b421ab00b1d3c50d300d31/pytket-1.36.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f9404eecd9aa112d7ef5781bcc30167bf6e1760805877caf21380fed3c2f17cb", size = 7686470 }, - { url = "https://files.pythonhosted.org/packages/fa/cb/9a11af0518aad69aefb4692311f1215d7ce903f7d07d024a7a7fe61d652a/pytket-1.36.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f20619e577eb0ba6ac6b132dd070f7b9f29b71fb9dbc05ce4bc0bf1b2698372c", size = 8253048 }, - { url = "https://files.pythonhosted.org/packages/88/ef/23d46c11d05e143b1f26b723839580d682358b471f840da546086fa88d8b/pytket-1.36.0-cp313-cp313-win_amd64.whl", hash = "sha256:1f477d408e6a5684aabd9cd0e3f80fedcbcfb30ceb2af6f66bff6fcac54d0294", size = 8618877 }, -] - -[[package]] -name = "pytket-qiskit" -version = "0.60.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, - { name = "pytket" }, - { name = "qiskit" }, - { name = "qiskit-aer" }, - { name = "qiskit-ibm-runtime" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/21/ad/5b7c24de235d900c437297a43abce0147ab844483138630c176506da839d/pytket_qiskit-0.60.0-py3-none-any.whl", hash = "sha256:64f19a7deb33eaf85cf01c38244d973bc409c747b0a82d258bda3f82df6d38b3", size = 54821 }, -] - -[[package]] -name = "pytz" -version = "2024.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3a/31/3c70bf7603cc2dca0f19bdc53b4537a797747a58875b552c8c413d963a3f/pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a", size = 319692 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/11/c3/005fcca25ce078d2cc29fd559379817424e94885510568bc1bc53d7d5846/pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725", size = 508002 }, -] - -[[package]] -name = "qiskit" -version = "1.3.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "dill" }, - { name = "numpy" }, - { name = "python-dateutil" }, - { name = "rustworkx" }, - { name = "scipy" }, - { name = "stevedore" }, - { name = "symengine" }, - { name = "sympy" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/03/f6/02132670bdc688afe720d85fb5c8d98641e585f80e139db572f9712cadd7/qiskit-1.3.0.tar.gz", hash = "sha256:876aea2a215a990fa6e529fba5523c510a662332d86be96fd93c9ee2ee164578", size = 3908308 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/19/01b1e1cf1f6eb8b20b18c83b7ef8c266c0d89bcd23a62e3fea765c816029/qiskit-1.3.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:6162343c661e87e081aa2e2f28a8db9a31091d537ad4bc257f84295b8b12d6ad", size = 6482631 }, - { url = "https://files.pythonhosted.org/packages/03/67/8a4e508c42b7ebc1810cb2a3c7aff64eb4fcb9e8315d73c8d3bda3e46604/qiskit-1.3.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:c17508907936e4c717a4322a10e478955ab98c687797fc2ad4171d377b6823f5", size = 6165918 }, - { url = "https://files.pythonhosted.org/packages/d7/76/4f5d5f23234d736c9256ed86da63413b2255501332ceb2ed7efdd8e99ea2/qiskit-1.3.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dc8ee0807ea7d6a65cf9ea0b1ca3ea23a8c17d0e243ad20dc5566e71e5dd889", size = 6333278 }, - { url = "https://files.pythonhosted.org/packages/13/af/962dcfc83dd3bb3650955e538d5f470e6187f2116e73bbfc88789c5183ff/qiskit-1.3.0-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad1b0c5a3595a6c3f285281b40009132b124e99349a82b00bdd6ae251ac0c051", size = 6693357 }, - { url = "https://files.pythonhosted.org/packages/df/90/1aa40af8c0c6d3cfdfe5814045e01a42a6d018f511a7296569f8824de3ca/qiskit-1.3.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:629197937140c3588e468f2178591cff074ab67b90310edfb8b52a9c4c785d7f", size = 6730862 }, - { url = "https://files.pythonhosted.org/packages/3c/5d/8f003ff89d39061cfbc9b6734cffa8ad730bfa9d56719571055be0dbee91/qiskit-1.3.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b6160ef00a72907ea6d1deca37850647835421a9b850b08b156ece2555adb77f", size = 7941474 }, - { url = "https://files.pythonhosted.org/packages/d7/33/9d0911a65e9b5c5fc15ab74202d9934fb1162126271d2b0fafdfd2449645/qiskit-1.3.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d1f0e3cb5e5f08e9a2354b2f6b3553cfaef1b39451e7aa2ad3c6d4f284ede48", size = 6733587 }, - { url = "https://files.pythonhosted.org/packages/a3/b4/e32b439126b73f6e1193daa7b79fe938a17598f2463cd576d548224efbc4/qiskit-1.3.0-cp39-abi3-win32.whl", hash = "sha256:79b9c9db39870a37d929b1cb9ec75e6c8faab85d97535e5c305c8580ceb721cc", size = 6112260 }, - { url = "https://files.pythonhosted.org/packages/2c/b9/bdabd25b1e67bdd29ee69e688237f3b2267f55db5cc72e4e5326bc96144a/qiskit-1.3.0-cp39-abi3-win_amd64.whl", hash = "sha256:00af64d770f6c198755254d0761d65f7757893b7a87fc1246bb3f1638d146175", size = 6484339 }, -] - -[[package]] -name = "qiskit-aer" -version = "0.15.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, - { name = "psutil" }, - { name = "qiskit" }, - { name = "scipy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/37/39/044e35f1da0011fe44a3b2729b347851a452fc85e701b102dbdfbbbf6bd1/qiskit-aer-0.15.1.tar.gz", hash = "sha256:45f320790c9239bbe781a1ee14a329a20ad08878f01746fe405c836d202b2560", size = 6550165 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/87/29/34e5590ecb593602a75e6f07957797fd930d69d0543ad3de7fe097af70bf/qiskit_aer-0.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d8c403b4895ac3f00fe55e72473b3f4e4fbc8840f93c75d4a33da5de4230dfef", size = 2468132 }, - { url = "https://files.pythonhosted.org/packages/b2/e9/7decb0a806b7576a2b6cfb05529df40570b713870f744bea6b0c39ec2ebc/qiskit_aer-0.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0ad6cf30554cde3ae27850082c3673113385a5ee40b387557d306f35576c5d44", size = 2155999 }, - { url = "https://files.pythonhosted.org/packages/8a/b1/dad4be1c1f2e23d3fafe3325164c91f13bc8f2f49816fa67773dde32bf52/qiskit_aer-0.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02e2af134eb72bf3cde1fd959701655a392a53236d9bb9658278cba520a83aae", size = 6421853 }, - { url = "https://files.pythonhosted.org/packages/eb/ca/b40163b287015cf464cf4514a3dfe14bc8f63488b57cbd8acbd8b214095d/qiskit_aer-0.15.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5083333de4838da9436ceb76b6f964fb3184a8756561586bde03a4aa5fccf723", size = 7933314 }, - { url = "https://files.pythonhosted.org/packages/79/85/4422797e0097c679992422406ba73ecaa766572bae5c50750b5142be4050/qiskit_aer-0.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d42260fad7c81d71a12870f2269a959e1c782bc72ba14c85cf107d87e53a13ce", size = 7884238 }, - { url = "https://files.pythonhosted.org/packages/46/21/07222b2690dff882fe42870fabf9068f105b863a73382a6d29b9f9c46322/qiskit_aer-0.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f07b6f937bde64cb88d037e8805cdd3b6e2985231ac7dd18f27a7af4aa653a2c", size = 12337820 }, - { url = "https://files.pythonhosted.org/packages/e2/39/f33c8f32a68f073c0bc3a9cb92db2066d2733ee73d361572feab5c8a2401/qiskit_aer-0.15.1-cp310-cp310-win32.whl", hash = "sha256:354dd010928cf2f72a92a133ff906c5d173262e6d25d06bb5823d869e2fded93", size = 6895115 }, - { url = "https://files.pythonhosted.org/packages/8d/74/f015acab5231f6a93416dd96cb0fb316b1231044eeaa9b51cc60ca21b4d3/qiskit_aer-0.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:3d5948c3f910a3f4b7e997ce8e80ca7376715b1f3556244da0c84bd7d2e4b081", size = 9516934 }, - { url = "https://files.pythonhosted.org/packages/a5/66/1dd66527afd727d2530e0f634e3ee7b870d753dfdd4bd70403b53c9c4fb6/qiskit_aer-0.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6613f1238fba954e744a16e10c61732765541fde42f17029038d0d96b78ba6ee", size = 2469674 }, - { url = "https://files.pythonhosted.org/packages/0b/7c/ddb8380c58bbcc56a4fd9e427532885ce49dbb95ecd3d044bdf98ee536fa/qiskit_aer-0.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:83198f4a7b9949008297675725e9fec01ba47e9d7eec3f755c3eb720aaf78932", size = 2157425 }, - { url = "https://files.pythonhosted.org/packages/2c/32/0546057cdc043c25ea87e30219ec281ca2f43723ca9f5b8c21fd71e74760/qiskit_aer-0.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:196c8de494ff26195ef6fb40f5c9672b6281ab3fd768dc1f1866e7b3968c4d98", size = 6424933 }, - { url = "https://files.pythonhosted.org/packages/35/8a/773e0b32d008fd47ee68a2cb20afa3bd4c280826b79d749418b37f975fb8/qiskit_aer-0.15.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:334f8b323dd06793b11ad8aa8c7bcd56819e696017ce421db3cdc3c48f9da53e", size = 7933205 }, - { url = "https://files.pythonhosted.org/packages/ad/e7/625f792de490e14084ddae7e4be06c41127526328728b41e5b72b40d161a/qiskit_aer-0.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a4cb7d606808d7b437b783d1d9ded20063ce86e463736b7d6201a93caccf050e", size = 7885508 }, - { url = "https://files.pythonhosted.org/packages/0c/61/7cb8571a1f767e08511617c8e2ffc8284b1e512a3081807bea54772e58bc/qiskit_aer-0.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aabe19cfe9a93b76801da31e81b12671a301e0873d7eaf077d06c92e11394136", size = 12337954 }, - { url = "https://files.pythonhosted.org/packages/f9/bb/f714b936b3556ad64be962ffd610cc42547befc3d26dfca352db8ebd77f6/qiskit_aer-0.15.1-cp311-cp311-win32.whl", hash = "sha256:601ee3ad01a2aeef489f146ed0baf62965465b47324786ba88d80a1293740ac2", size = 6896059 }, - { url = "https://files.pythonhosted.org/packages/a3/4a/f40f4655010b104e4e98a89f13e960fb6f02f2b2ceb6ecf73762bce86d22/qiskit_aer-0.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:8d8685f23b844352a3f8f2991adaba91a43515e8883cd1cbdc654b4c61d104a9", size = 9517615 }, - { url = "https://files.pythonhosted.org/packages/9f/e6/f2611ada4690bacac3073873865d29eed15244d4f4a76c44a5da3855ac3d/qiskit_aer-0.15.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:df16643006cf25a1ed477a120b6146859f09e8dee09ca720befb3a1febee9546", size = 2475586 }, - { url = "https://files.pythonhosted.org/packages/7e/45/f35bc0971f7333cfeed6e28dc53d1c8a371f2177474176ce1c9585fa6d7d/qiskit_aer-0.15.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1d22c96bae21dbe4b97c30785ead2c2b53f897938da49bca6b4ef29d187765a6", size = 2158945 }, - { url = "https://files.pythonhosted.org/packages/9c/c0/c418189d92f92e713d6e096b9b5ead3b49d956465e7a952795b1763a80b3/qiskit_aer-0.15.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1288fd5c36235f5fedfc228956049e87bdd804cbc2b3a487a4453d9e7e72f420", size = 6420353 }, - { url = "https://files.pythonhosted.org/packages/99/92/fde09045179e7a5e2bae4185f311fde9ab9ef843440ff4bc69742de59a86/qiskit_aer-0.15.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca0783607942c724329172e21b53354c9d569420e02dbfd06c407ed588833cf6", size = 7939163 }, - { url = "https://files.pythonhosted.org/packages/ca/a7/baa91866f9468322ec212508dd5629f15a08a374800dfb75dc25ae409590/qiskit_aer-0.15.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cbad79290e4b850dca163b7960769a1a8db6d44abf232ecf0a6ce88740c83ab9", size = 7887094 }, - { url = "https://files.pythonhosted.org/packages/80/ae/85e51a211b387af4cb7526fac6e7850ec1a7f674e4a16ba623c46dbc61ac/qiskit_aer-0.15.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2257b4828df8cb3f37e153c220cd72f54a81d89875711efbc3ac2f265e0ae4a", size = 12339245 }, - { url = "https://files.pythonhosted.org/packages/1a/b4/b171b94f276ca8a853a0fc1acb38515936ca55d09e2118b90c1a9b839fdf/qiskit_aer-0.15.1-cp312-cp312-win32.whl", hash = "sha256:0f8a3f97f1bbeabb7d229879f7a0b6b8709f864fbc13ae78ec1569a65033ea3b", size = 6896779 }, - { url = "https://files.pythonhosted.org/packages/a7/eb/284cedc9cdeecd139939db70cf875806ca5df977d5af21e6fa09f1d82a8e/qiskit_aer-0.15.1-cp312-cp312-win_amd64.whl", hash = "sha256:af6501808b584b764e959af7a1edb2ef890c9a78f1ce418921dbdf6fd09ce0fc", size = 9519513 }, -] - -[[package]] -name = "qiskit-algorithms" -version = "0.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, - { name = "qiskit" }, - { name = "scipy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b6/b0/277f075f4758c474f026f2ffc9b6246b2cbe5658fbc95497764834685e15/qiskit_algorithms-0.3.1.tar.gz", hash = "sha256:cba9c573d47c0f9508745a5a2794298084ec4f8833781b426fa9b2cea0fca794", size = 243033 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f9/20/0db766da89de14111c4a1217dbb67d19036eb3e4ffba0fdc25f00e4d1615/qiskit_algorithms-0.3.1-py3-none-any.whl", hash = "sha256:d6c31d88a1ed65a9c6382c233ef10ecb9562e726f7b1b7823a0d178d63d29a0a", size = 310548 }, -] - -[[package]] -name = "qiskit-finance" -version = "0.4.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "fastdtw" }, - { name = "nasdaq-data-link" }, - { name = "numpy" }, - { name = "pandas" }, - { name = "psutil" }, - { name = "qiskit" }, - { name = "qiskit-algorithms" }, - { name = "qiskit-optimization" }, - { name = "scipy" }, - { name = "setuptools" }, - { name = "urllib3" }, - { name = "yfinance" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/06/59/d67fd31c54068606e22f28ccdfae8e9354039184b71ded4bd2e89a7c0207/qiskit-finance-0.4.1.tar.gz", hash = "sha256:dd9559775918f79f4c5f31577a73cf5f135d1911e6601ebcc1ade3901949908d", size = 40246 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/69/4f/d4a8f06b2d20b6054822f4ebf63be21ac2f39aee84266bdd2318950048d9/qiskit_finance-0.4.1-py3-none-any.whl", hash = "sha256:1aa46d1bfc1813144d504b1da3dbb7a45c14686b430be160952179d4f4dbdf60", size = 51155 }, -] - -[[package]] -name = "qiskit-ibm-runtime" -version = "0.33.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "ibm-platform-services" }, - { name = "numpy" }, - { name = "pydantic" }, - { name = "python-dateutil" }, - { name = "qiskit" }, - { name = "requests" }, - { name = "requests-ntlm" }, - { name = "urllib3" }, - { name = "websocket-client" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/1b/0e/e48b198760d702a378dc43a9f581067153fee16bad041253978516847a75/qiskit_ibm_runtime-0.33.2.tar.gz", hash = "sha256:f75bcfee97c4a8014a7999a353b5adc70dccf4b92eafc1cf81fa05a26ea5519b", size = 2844076 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/db/15ba13249d37ab89a6bdaa19c7811c4899fd1c9bc2fe3b899f6025c656cc/qiskit_ibm_runtime-0.33.2-py3-none-any.whl", hash = "sha256:fe414429098f49c7caddca31203b801eca0f2b587913eb3583c5b284a6c2c271", size = 2943948 }, -] - -[[package]] -name = "qiskit-nature" -version = "0.7.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "h5py" }, - { name = "numpy" }, - { name = "psutil" }, - { name = "qiskit" }, - { name = "qiskit-algorithms" }, - { name = "rustworkx" }, - { name = "scipy" }, - { name = "setuptools" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/89/36/d8dfb1b241a5c3ec5a8868bc4d7311af23dc741c81d0d8b93a6fb63c0366/qiskit-nature-0.7.2.tar.gz", hash = "sha256:621b9bb88c0fa4c705948af86e3ef7d36bb8e7aa11b95801264527de58fcd694", size = 2185596 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/66/16/2bf5c270457dbda2123604108f007f4b7087fa5a3913e60f5a4f75b76d92/qiskit_nature-0.7.2-py3-none-any.whl", hash = "sha256:9bc8900626b9a6f9c5dbe44589c53932408a661d61ad9003b8feadb30979cc05", size = 2156071 }, -] - -[package.optional-dependencies] -pyscf = [ - { name = "pyscf", marker = "sys_platform != 'win32'" }, -] - -[[package]] -name = "qiskit-optimization" -version = "0.6.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "docplex" }, - { name = "networkx" }, - { name = "numpy" }, - { name = "qiskit" }, - { name = "qiskit-algorithms" }, - { name = "scipy" }, - { name = "setuptools" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/80/63/30ae1aa61c407ccd7f2a1499884653cf6be87fd4a216013c226273796a8f/qiskit-optimization-0.6.1.tar.gz", hash = "sha256:0ad8c2bc83fe80657c788b5f282ce4055d0ec005c4876789e5069499ee3c00c0", size = 156898 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/67/7669e6ad0b41b1e4ab79b592a4f1de748cac946169f5409e7a9f4bafef10/qiskit_optimization-0.6.1-py3-none-any.whl", hash = "sha256:3f09f31289dfef66bbbb03b782a94d88a4ba5681c728b4b8e96884de5fc83879", size = 167560 }, -] - -[[package]] -name = "qwasm" -version = "1.0.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "setuptools" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/6f/a1/b52f356f907bedf02f536970c1b46aa69bc57280c4d17ed6b5c39180959f/qwasm-1.0.1.tar.gz", hash = "sha256:01f5dfe27159b7fdd9d02cd299833225d528fa383d1278268e5e1526357950fb", size = 13921 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f5/e9/fbde58bf8dcc05dc9d09dfcd06e631f470aa1e6732870cf06cd34ab86eaf/qwasm-1.0.1-py3-none-any.whl", hash = "sha256:c4c82a3f962d29314634868e06375f0cb4676c3d5266fbe137f6cd67321b0ef1", size = 15322 }, -] - -[[package]] -name = "requests" -version = "2.32.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "charset-normalizer" }, - { name = "idna" }, - { name = "urllib3" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 }, -] - -[[package]] -name = "requests-ntlm" -version = "1.3.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cryptography" }, - { name = "pyspnego" }, - { name = "requests" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/15/74/5d4e1815107e9d78c44c3ad04740b00efd1189e5a9ec11e5275b60864e54/requests_ntlm-1.3.0.tar.gz", hash = "sha256:b29cc2462623dffdf9b88c43e180ccb735b4007228a542220e882c58ae56c668", size = 16112 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/5d/836b97537a390cf811b0488490c389c5a614f0a93acb23f347bd37a2d914/requests_ntlm-1.3.0-py3-none-any.whl", hash = "sha256:4c7534a7d0e482bb0928531d621be4b2c74ace437e88c5a357ceb7452d25a510", size = 6577 }, -] - -[[package]] -name = "rustworkx" -version = "0.15.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5e/07/1af3ead27f1da113a60dc6735c761da6fc2e2db4cfc414bbcd03a989ccee/rustworkx-0.15.1.tar.gz", hash = "sha256:0e0cc86599f979285b2ab9c357276f3272f3fcb3b2df5651a6bf9704c570d4c1", size = 342216 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/37/06/adeed1d166c55920a6a83085e8c8c8b24c8d7708de99f7a814458a3c4529/rustworkx-0.15.1-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:6cd4496d3298cd3205c03545e48cc37d21e0455d57752af801d3fb250452d590", size = 1880966 }, - { url = "https://files.pythonhosted.org/packages/03/11/95350c7eeade2e61a736f1ca956ee04acb920b7b080ff0c058c40cc7bbf3/rustworkx-0.15.1-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:cb518f5649e62d753e29ca1e57290c8f58adbebcd154dc3159f4a36ebfa1e2b7", size = 1707452 }, - { url = "https://files.pythonhosted.org/packages/2f/2b/494982ecc4618796aacb8069bc176d895cec4bf1ac8dd0b1d69657d920c4/rustworkx-0.15.1-cp38-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac68ae2515ece22ba3ef56f3d16ad6bf707955f650d623190b2e7d706c6dc92", size = 2009359 }, - { url = "https://files.pythonhosted.org/packages/7f/3c/23304cf86c4af6014884bde046073105ace6250b6a0914c1090f2643d03c/rustworkx-0.15.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b903edec1d803704b499959f9d6f6119cdda63b9b64194a4b4307e506b112f0", size = 1862943 }, - { url = "https://files.pythonhosted.org/packages/b3/2a/03e6ff45cb772d249d4bf2d433a2acd2ec857615b3c1d44f0fa49e13aa63/rustworkx-0.15.1-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2c97a56ff8a0f6c273a83e26e627c72207442b4252aa550acad0bff42caac40", size = 2029096 }, - { url = "https://files.pythonhosted.org/packages/15/88/a3710209f647d89358c81b5974aee48b1ab361fd016dcae81824e29ee645/rustworkx-0.15.1-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:241c502532e348ba89200823326dba30de4df4b886cb2fd5a140b359ff124bb3", size = 3611892 }, - { url = "https://files.pythonhosted.org/packages/cb/a0/af448af28514e82f36e7431bc88e933ad043e5a95a7985bd9458a05877c6/rustworkx-0.15.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e5f4156f46fa03177c9b0580450eab87786063495d48b457762a5bdd20c55e2", size = 1950466 }, - { url = "https://files.pythonhosted.org/packages/c6/fe/1e9a8a29c21080155b7422011a3c472aa45dbb3b8bb6f610958eb906a713/rustworkx-0.15.1-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7834ab34748db6214ec3b3836b996b23882dc83184234e6d346d6bb85fd58ae5", size = 1888003 }, - { url = "https://files.pythonhosted.org/packages/65/66/daf6fffadb749574f78cd70919e598371d40484993ed005ed5efbef28b4e/rustworkx-0.15.1-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ce53f173fed16e1d51d9df9f23475a16c981b03bf1a412d991c75a70db6b1dc1", size = 1976312 }, - { url = "https://files.pythonhosted.org/packages/d5/ea/9cbf42b4d9a2b6ad18736bc2149d2b2439075b70094232ba3494fd14845b/rustworkx-0.15.1-cp38-abi3-win32.whl", hash = "sha256:308bc76a01bcae9af4602d8b9ed58021df37dd0bb5a7b2e3831ae53c5e234ff0", size = 1683889 }, - { url = "https://files.pythonhosted.org/packages/9c/c6/50f5736f5dac1709c6c8b6ac3470f466fd793dd25c081923942caf13051f/rustworkx-0.15.1-cp38-abi3-win_amd64.whl", hash = "sha256:89077382633e918d2392772f53b9d6d30eee51eb536f8d38ee195c212b2f0427", size = 1840525 }, -] - -[[package]] -name = "scipy" -version = "1.14.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/62/11/4d44a1f274e002784e4dbdb81e0ea96d2de2d1045b2132d5af62cc31fd28/scipy-1.14.1.tar.gz", hash = "sha256:5a275584e726026a5699459aa72f828a610821006228e841b94275c4a7c08417", size = 58620554 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/64/68/3bc0cfaf64ff507d82b1e5d5b64521df4c8bf7e22bc0b897827cbee9872c/scipy-1.14.1-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:b28d2ca4add7ac16ae8bb6632a3c86e4b9e4d52d3e34267f6e1b0c1f8d87e389", size = 39069598 }, - { url = "https://files.pythonhosted.org/packages/43/a5/8d02f9c372790326ad405d94f04d4339482ec082455b9e6e288f7100513b/scipy-1.14.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d0d2821003174de06b69e58cef2316a6622b60ee613121199cb2852a873f8cf3", size = 29879676 }, - { url = "https://files.pythonhosted.org/packages/07/42/0e0bea9666fcbf2cb6ea0205db42c81b1f34d7b729ba251010edf9c80ebd/scipy-1.14.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8bddf15838ba768bb5f5083c1ea012d64c9a444e16192762bd858f1e126196d0", size = 23088696 }, - { url = "https://files.pythonhosted.org/packages/15/47/298ab6fef5ebf31b426560e978b8b8548421d4ed0bf99263e1eb44532306/scipy-1.14.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:97c5dddd5932bd2a1a31c927ba5e1463a53b87ca96b5c9bdf5dfd6096e27efc3", size = 25470699 }, - { url = "https://files.pythonhosted.org/packages/d8/df/cdb6be5274bc694c4c22862ac3438cb04f360ed9df0aecee02ce0b798380/scipy-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ff0a7e01e422c15739ecd64432743cf7aae2b03f3084288f399affcefe5222d", size = 35606631 }, - { url = "https://files.pythonhosted.org/packages/47/78/b0c2c23880dd1e99e938ad49ccfb011ae353758a2dc5ed7ee59baff684c3/scipy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e32dced201274bf96899e6491d9ba3e9a5f6b336708656466ad0522d8528f69", size = 41178528 }, - { url = "https://files.pythonhosted.org/packages/5d/aa/994b45c34b897637b853ec04334afa55a85650a0d11dacfa67232260fb0a/scipy-1.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8426251ad1e4ad903a4514712d2fa8fdd5382c978010d1c6f5f37ef286a713ad", size = 42784535 }, - { url = "https://files.pythonhosted.org/packages/e7/1c/8daa6df17a945cb1a2a1e3bae3c49643f7b3b94017ff01a4787064f03f84/scipy-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:a49f6ed96f83966f576b33a44257d869756df6cf1ef4934f59dd58b25e0327e5", size = 44772117 }, - { url = "https://files.pythonhosted.org/packages/b2/ab/070ccfabe870d9f105b04aee1e2860520460ef7ca0213172abfe871463b9/scipy-1.14.1-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:2da0469a4ef0ecd3693761acbdc20f2fdeafb69e6819cc081308cc978153c675", size = 39076999 }, - { url = "https://files.pythonhosted.org/packages/a7/c5/02ac82f9bb8f70818099df7e86c3ad28dae64e1347b421d8e3adf26acab6/scipy-1.14.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:c0ee987efa6737242745f347835da2cc5bb9f1b42996a4d97d5c7ff7928cb6f2", size = 29894570 }, - { url = "https://files.pythonhosted.org/packages/ed/05/7f03e680cc5249c4f96c9e4e845acde08eb1aee5bc216eff8a089baa4ddb/scipy-1.14.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3a1b111fac6baec1c1d92f27e76511c9e7218f1695d61b59e05e0fe04dc59617", size = 23103567 }, - { url = "https://files.pythonhosted.org/packages/5e/fc/9f1413bef53171f379d786aabc104d4abeea48ee84c553a3e3d8c9f96a9c/scipy-1.14.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8475230e55549ab3f207bff11ebfc91c805dc3463ef62eda3ccf593254524ce8", size = 25499102 }, - { url = "https://files.pythonhosted.org/packages/c2/4b/b44bee3c2ddc316b0159b3d87a3d467ef8d7edfd525e6f7364a62cd87d90/scipy-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:278266012eb69f4a720827bdd2dc54b2271c97d84255b2faaa8f161a158c3b37", size = 35586346 }, - { url = "https://files.pythonhosted.org/packages/93/6b/701776d4bd6bdd9b629c387b5140f006185bd8ddea16788a44434376b98f/scipy-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fef8c87f8abfb884dac04e97824b61299880c43f4ce675dd2cbeadd3c9b466d2", size = 41165244 }, - { url = "https://files.pythonhosted.org/packages/06/57/e6aa6f55729a8f245d8a6984f2855696c5992113a5dc789065020f8be753/scipy-1.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b05d43735bb2f07d689f56f7b474788a13ed8adc484a85aa65c0fd931cf9ccd2", size = 42817917 }, - { url = "https://files.pythonhosted.org/packages/ea/c2/5ecadc5fcccefaece775feadcd795060adf5c3b29a883bff0e678cfe89af/scipy-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:716e389b694c4bb564b4fc0c51bc84d381735e0d39d3f26ec1af2556ec6aad94", size = 44781033 }, - { url = "https://files.pythonhosted.org/packages/c0/04/2bdacc8ac6387b15db6faa40295f8bd25eccf33f1f13e68a72dc3c60a99e/scipy-1.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:631f07b3734d34aced009aaf6fedfd0eb3498a97e581c3b1e5f14a04164a456d", size = 39128781 }, - { url = "https://files.pythonhosted.org/packages/c8/53/35b4d41f5fd42f5781dbd0dd6c05d35ba8aa75c84ecddc7d44756cd8da2e/scipy-1.14.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:af29a935803cc707ab2ed7791c44288a682f9c8107bc00f0eccc4f92c08d6e07", size = 29939542 }, - { url = "https://files.pythonhosted.org/packages/66/67/6ef192e0e4d77b20cc33a01e743b00bc9e68fb83b88e06e636d2619a8767/scipy-1.14.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:2843f2d527d9eebec9a43e6b406fb7266f3af25a751aa91d62ff416f54170bc5", size = 23148375 }, - { url = "https://files.pythonhosted.org/packages/f6/32/3a6dedd51d68eb7b8e7dc7947d5d841bcb699f1bf4463639554986f4d782/scipy-1.14.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:eb58ca0abd96911932f688528977858681a59d61a7ce908ffd355957f7025cfc", size = 25578573 }, - { url = "https://files.pythonhosted.org/packages/f0/5a/efa92a58dc3a2898705f1dc9dbaf390ca7d4fba26d6ab8cfffb0c72f656f/scipy-1.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30ac8812c1d2aab7131a79ba62933a2a76f582d5dbbc695192453dae67ad6310", size = 35319299 }, - { url = "https://files.pythonhosted.org/packages/8e/ee/8a26858ca517e9c64f84b4c7734b89bda8e63bec85c3d2f432d225bb1886/scipy-1.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f9ea80f2e65bdaa0b7627fb00cbeb2daf163caa015e59b7516395fe3bd1e066", size = 40849331 }, - { url = "https://files.pythonhosted.org/packages/a5/cd/06f72bc9187840f1c99e1a8750aad4216fc7dfdd7df46e6280add14b4822/scipy-1.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:edaf02b82cd7639db00dbff629995ef185c8df4c3ffa71a5562a595765a06ce1", size = 42544049 }, - { url = "https://files.pythonhosted.org/packages/aa/7d/43ab67228ef98c6b5dd42ab386eae2d7877036970a0d7e3dd3eb47a0d530/scipy-1.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:2ff38e22128e6c03ff73b6bb0f85f897d2362f8c052e3b8ad00532198fbdae3f", size = 44521212 }, - { url = "https://files.pythonhosted.org/packages/50/ef/ac98346db016ff18a6ad7626a35808f37074d25796fd0234c2bb0ed1e054/scipy-1.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1729560c906963fc8389f6aac023739ff3983e727b1a4d87696b7bf108316a79", size = 39091068 }, - { url = "https://files.pythonhosted.org/packages/b9/cc/70948fe9f393b911b4251e96b55bbdeaa8cca41f37c26fd1df0232933b9e/scipy-1.14.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:4079b90df244709e675cdc8b93bfd8a395d59af40b72e339c2287c91860deb8e", size = 29875417 }, - { url = "https://files.pythonhosted.org/packages/3b/2e/35f549b7d231c1c9f9639f9ef49b815d816bf54dd050da5da1c11517a218/scipy-1.14.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:e0cf28db0f24a38b2a0ca33a85a54852586e43cf6fd876365c86e0657cfe7d73", size = 23084508 }, - { url = "https://files.pythonhosted.org/packages/3f/d6/b028e3f3e59fae61fb8c0f450db732c43dd1d836223a589a8be9f6377203/scipy-1.14.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0c2f95de3b04e26f5f3ad5bb05e74ba7f68b837133a4492414b3afd79dfe540e", size = 25503364 }, - { url = "https://files.pythonhosted.org/packages/a7/2f/6c142b352ac15967744d62b165537a965e95d557085db4beab2a11f7943b/scipy-1.14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b99722ea48b7ea25e8e015e8341ae74624f72e5f21fc2abd45f3a93266de4c5d", size = 35292639 }, - { url = "https://files.pythonhosted.org/packages/56/46/2449e6e51e0d7c3575f289f6acb7f828938eaab8874dbccfeb0cd2b71a27/scipy-1.14.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5149e3fd2d686e42144a093b206aef01932a0059c2a33ddfa67f5f035bdfe13e", size = 40798288 }, - { url = "https://files.pythonhosted.org/packages/32/cd/9d86f7ed7f4497c9fd3e39f8918dd93d9f647ba80d7e34e4946c0c2d1a7c/scipy-1.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e4f5a7c49323533f9103d4dacf4e4f07078f360743dec7f7596949149efeec06", size = 42524647 }, - { url = "https://files.pythonhosted.org/packages/f5/1b/6ee032251bf4cdb0cc50059374e86a9f076308c1512b61c4e003e241efb7/scipy-1.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:baff393942b550823bfce952bb62270ee17504d02a1801d7fd0719534dfb9c84", size = 44469524 }, -] - -[[package]] -name = "setuptools" -version = "75.6.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/54/292f26c208734e9a7f067aea4a7e282c080750c4546559b58e2e45413ca0/setuptools-75.6.0.tar.gz", hash = "sha256:8199222558df7c86216af4f84c30e9b34a61d8ba19366cc914424cdbd28252f6", size = 1337429 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/55/21/47d163f615df1d30c094f6c8bbb353619274edccf0327b185cc2493c2c33/setuptools-75.6.0-py3-none-any.whl", hash = "sha256:ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d", size = 1224032 }, -] - -[[package]] -name = "six" -version = "1.16.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/71/39/171f1c67cd00715f190ba0b100d606d440a28c93c7714febeca8b79af85e/six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", size = 34041 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254", size = 11053 }, -] - -[[package]] -name = "soupsieve" -version = "2.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/ce/fbaeed4f9fb8b2daa961f90591662df6a86c1abf25c548329a86920aedfb/soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb", size = 101569 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9", size = 36186 }, -] - -[[package]] -name = "sspilib" -version = "0.2.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/36/48/8d634ac9aa5404b77f2d66b5a354751b7bbbf2be2947328fe895034cb750/sspilib-0.2.0.tar.gz", hash = "sha256:4d6cd4290ca82f40705efeb5e9107f7abcd5e647cb201a3d04371305938615b8", size = 55815 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/49/ac/b59283a2a0c91ef136f4979d711cd8dcd005b9f18b4a50ffaaa50e00f200/sspilib-0.2.0-cp310-cp310-win32.whl", hash = "sha256:e436fa09bcf353a364a74b3ef6910d936fa8cd1493f136e517a9a7e11b319c57", size = 487673 }, - { url = "https://files.pythonhosted.org/packages/c5/bc/84cb16b512902b972cfd89130918f01aabb8016814442ff6bd2cf89d6530/sspilib-0.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:850a17c98d2b8579b183ce37a8df97d050bc5b31ab13f5a6d9e39c9692fe3754", size = 565326 }, - { url = "https://files.pythonhosted.org/packages/c5/0d/d15fe0e5c87a51b7d693e889656816fd8d67995fbd072ab9852934e9ecf4/sspilib-0.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:a4d788a53b8db6d1caafba36887d5ac2087e6b6be6f01eb48f8afea6b646dbb5", size = 473562 }, - { url = "https://files.pythonhosted.org/packages/70/16/c31487f432724813a27f30c1a63ec07217adf65572e33fe9c4dcfd47a1b3/sspilib-0.2.0-cp311-cp311-win32.whl", hash = "sha256:400d5922c2c2261009921157c4b43d868e84640ad86e4dc84c95b07e5cc38ac6", size = 485419 }, - { url = "https://files.pythonhosted.org/packages/15/e9/0cb63b7f1014eff9c1a5b83920a423080b10f29ddf0264fced6abbdbad28/sspilib-0.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:d3e7d19c16ba9189ef8687b591503db06cfb9c5eb32ab1ca3bb9ebc1a8a5f35c", size = 564816 }, - { url = "https://files.pythonhosted.org/packages/b9/d9/3b8295f652afe71c0cdfd731eb7d37cc13a8adbfeacd3d67606d486d79b2/sspilib-0.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:f65c52ead8ce95eb78a79306fe4269ee572ef3e4dcc108d250d5933da2455ecc", size = 472529 }, - { url = "https://files.pythonhosted.org/packages/a9/82/07a49f00c0e7feff26f288b5f0747add197fc0db1ddddfab5fd5bdd94bdf/sspilib-0.2.0-cp312-cp312-win32.whl", hash = "sha256:bdf9a4f424add02951e1f01f47441d2e69a9910471e99c2c88660bd8e184d7f8", size = 487318 }, - { url = "https://files.pythonhosted.org/packages/38/54/949a9e9c07cd6efead79a7f78cc951cb5fa4f9f1fcb25b8520fd2adcdbe0/sspilib-0.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:40a97ca83e503a175d1dc9461836994e47e8b9bcf56cab81a2c22e27f1993079", size = 569220 }, - { url = "https://files.pythonhosted.org/packages/8f/52/c7a16472e9582474626f48ec79a821f66e5698cf5552baf923dfc636989e/sspilib-0.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:8ffc09819a37005c66a580ff44f544775f9745d5ed1ceeb37df4e5ff128adf36", size = 471371 }, - { url = "https://files.pythonhosted.org/packages/bc/9c/8784d3afe27c2f68620ea60fa2b6347100694db35193ba42714bdf23f882/sspilib-0.2.0-cp313-cp313-win32.whl", hash = "sha256:b9044d6020aa88d512e7557694fe734a243801f9a6874e1c214451eebe493d92", size = 483600 }, - { url = "https://files.pythonhosted.org/packages/49/ad/40f898075c913c75060c17c9cc6d6b86e8f83b6f5e1e017627b07ff53fcd/sspilib-0.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:c39a698491f43618efca8776a40fb7201d08c415c507f899f0df5ada15abefaa", size = 563678 }, - { url = "https://files.pythonhosted.org/packages/dd/84/3232ee82e33e426cd9e2011111a3136e5715428f0331a6739930b530333a/sspilib-0.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:863b7b214517b09367511c0ef931370f0386ed2c7c5613092bf9b106114c4a0e", size = 469030 }, -] - -[[package]] -name = "stevedore" -version = "5.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pbr" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/4a/e9/4eedccff8332cc40cc60ddd3b28d4c3e255ee7e9c65679fa4533ab98f598/stevedore-5.4.0.tar.gz", hash = "sha256:79e92235ecb828fe952b6b8b0c6c87863248631922c8e8e0fa5b17b232c4514d", size = 513899 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/73/d0091d22a65b55e8fb6aca7b3b6713b5a261dd01cec4cfd28ed127ac0cfc/stevedore-5.4.0-py3-none-any.whl", hash = "sha256:b0be3c4748b3ea7b854b265dcb4caa891015e442416422be16f8b31756107857", size = 49534 }, -] - -[[package]] -name = "symengine" -version = "0.13.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6b/ff/a2041497a482a0ae585672fe12cc8983c7fc46ce792811b55a067e5e5516/symengine-0.13.0.tar.gz", hash = "sha256:ab83a08897ebf12579702c2b71ba73d4732fb706cc4291d810aedf39c690c14c", size = 114237 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/62/ed/964f75a2dc5b0e2c97b732f44dfb9c40fe7c0f5e21a1ecc2edff89db3d81/symengine-0.13.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:259fd4111c7a70c72bdff5686de1949e8132baeb612eacdaf8837720c6fe449b", size = 25867912 }, - { url = "https://files.pythonhosted.org/packages/a3/ce/c74dfbaf487a428984644b3cb5e1131c4808f60eab1456f37a107f20b87a/symengine-0.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:44f2eb28a1e36db0bbd6679435412f79da9743bf9c1cb3eff25e0c343b7ddd48", size = 22711016 }, - { url = "https://files.pythonhosted.org/packages/4b/65/df699e2b4c2bbf608394b05d1095d77b3f02569e09960f7840f708c7c5dc/symengine-0.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d141712fa14d9138bd19e64b10392f850c68d88cd7db29f1bda33e32d1095559", size = 61000047 }, - { url = "https://files.pythonhosted.org/packages/ff/a9/623d97da0da9615367484127dd3b5d1049675832fb9a6a3572f2e072bb86/symengine-0.13.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:830226d933bfcdb93546e4062541627d9a3bc7a178a63fb16c002eb5c5221938", size = 90017189 }, - { url = "https://files.pythonhosted.org/packages/79/a0/d30329ef1bd2b188cb5bbf6d9394e72fa9f38b33a6caa2128ee187716259/symengine-0.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a08090163819a0bbfa97d64bd2d8dac2c5268147ed9c242799d7f7e8728a6f4e", size = 49698796 }, - { url = "https://files.pythonhosted.org/packages/e8/e3/cf99b6353b46b8d9ff05e8d7d24764c8afed7c46b888eece99c6e04cc295/symengine-0.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:1e435dcd8ed25e4c7c21ab1c0376be910efc7f35da76d532367df27b359f0358", size = 17830331 }, - { url = "https://files.pythonhosted.org/packages/47/a7/e69cff22c2b169b469faa390f0102fbdefe1dfede893a086454483db0fc3/symengine-0.13.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:da0eba7e106095cdce88eb275c8a9d7c4586ad88f229394c53e1184155c00745", size = 25878286 }, - { url = "https://files.pythonhosted.org/packages/60/40/bb3faf5a3d4cc99cf5252cc3f4f5267568abd4aae6439374623841cc0025/symengine-0.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b0c175f4f895a73a925508af03faf7efd6cad8593256bbdb5346bd996d3ec5c8", size = 22721741 }, - { url = "https://files.pythonhosted.org/packages/de/da/d6350f60f11abc7ee56fcb6b996deba7b31584b5942a4c5db7d3d4f324dd/symengine-0.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e58d1e2abd08381aa0cf24c88c0e8b7f592df92619b51e32d36835fbd2dd6ae8", size = 60999516 }, - { url = "https://files.pythonhosted.org/packages/d1/ee/db107db7d0557aa8dbc9485741a60dd4f869d3da32180710506f9ba942b9/symengine-0.13.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1db745f2c7a3c5e83510cf4decb43201f43552dfb05ad8af9787c89708be9ede", size = 90019965 }, - { url = "https://files.pythonhosted.org/packages/8f/f0/0642f5d9681ff26e57c317d0514315cf1b0dfe1bc8f68ee14a13a270d704/symengine-0.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2572c98b09ac284db6ecff63f6170461194dc94c4209afd34c092ec67873d85", size = 49690621 }, - { url = "https://files.pythonhosted.org/packages/54/85/4300eda41959e3839115b2cb0ddb21818804f5eb129cf92eb9cc55c6efe5/symengine-0.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:12727f02a2919f005aee48e68e0cbb70cf857b19385857b4d985d1c9b075f620", size = 17831939 }, - { url = "https://files.pythonhosted.org/packages/a1/b2/786d3efb98ae1c8e0a9869d6901f24a6633bd621f9e4e1427c86bff35abb/symengine-0.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cf91d24f1bfd6d53228593c7804dd106b71b19674d5afc4fa322d516e1793bdd", size = 25853458 }, - { url = "https://files.pythonhosted.org/packages/3f/74/78b9e7f17c9b9b345d8ef0dbdefebbfc2c7f00693949c6b5808f8a9e54d8/symengine-0.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c5615b7eb68890917abd390ebb10434a949165f6064741c1a8cc345fee14e855", size = 22713256 }, - { url = "https://files.pythonhosted.org/packages/1d/a8/69f429946e9a9e63a141dcbe519df8a8c3d56aa75fa8440716871efd8b75/symengine-0.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb92bdf0890de264abaeacbfbdbd4dd7444b94057bd47958d913b662e549ad8a", size = 60847852 }, - { url = "https://files.pythonhosted.org/packages/f5/3c/a613d5fa73c1b05eb4f0a4bc2bfa21314d37c89dcdb355da684b5f9bea46/symengine-0.13.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7b3bce486fbc0b87970ed1b10ca9d5cafb1fd6b66382fe631261d83592851d7e", size = 89691094 }, - { url = "https://files.pythonhosted.org/packages/90/9f/5a171a9edff23eb0e33e0a2dca295a8b25fd64491ebe8cf765e489bd2bcd/symengine-0.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7e6bae9cfcdde2775d92fbb0abe3ef04e32f65ebc4c2d164ca33f4da202d4a7", size = 49584342 }, - { url = "https://files.pythonhosted.org/packages/07/16/a69dffc665e5007a0b4f1500fc401316aa070d109f83bc6887802dce199d/symengine-0.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:bced0a1dbdb94737c299384c85ddbad6944ce8dadc334f7bb8dbbd8f6c965807", size = 17787218 }, - { url = "https://files.pythonhosted.org/packages/f2/51/36ea8d87b61f34d585d09ff585cdc2ba136c501e0a96e861fe81fd0efa5b/symengine-0.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5d34df77971538e4c29f2d8e5ef7f459c2179465e6cdb7dfd48b79b87ecd8f4d", size = 25838153 }, - { url = "https://files.pythonhosted.org/packages/2a/f7/73cd707633c01760df27d340ac2868788fa0a35034aa09f51f6a289d9a07/symengine-0.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ab2661d9b18867e7c6edbfa7a74b8b0a2a694bd24aa08003dc3214f77cb9d6f2", size = 22706111 }, - { url = "https://files.pythonhosted.org/packages/bc/e7/a1ddc4cc3f2604b18965342523cddd6160b6406d1ef21b58a2dea1c46312/symengine-0.13.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53f27b9013878ee4419d8e853664d8ae4b68419e3f4b9b5b7f503d32bf904755", size = 60848269 }, - { url = "https://files.pythonhosted.org/packages/8a/f5/b127d236a8ccce8b85cec8bcb0221cbb6a4e651d6f5511da925e10714a4c/symengine-0.13.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:27987f75ce08c64f453e2b9b74fec6ffc5ca418c4deca0b75580979d4a4e242a", size = 89679345 }, - { url = "https://files.pythonhosted.org/packages/49/d0/b07c71dfb6f7f47f90495d67cb0b2264f94f2fb9380e528fe4fcec4c5cfa/symengine-0.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9ea9410330ea15ed4137d7a0a3c43caccacb71490e18036ce5182d08c93baf8", size = 49582795 }, - { url = "https://files.pythonhosted.org/packages/de/c6/3ce562ec269b033a738b99aa75729d564bfe465a765a5b5810200924f5c9/symengine-0.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:5031eb7a5c6675d5195bb57f93cc7d9ac5a7a9a826d4ad6f6b2927746ed7e6e6", size = 17786679 }, - { url = "https://files.pythonhosted.org/packages/ca/0f/02031b4ed54fb088ade94082e4658160333c2d5c6629ca7e567ea5a23720/symengine-0.13.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:ce0e5dfb19943bcf3e44a4485bcac4c5533ba3705c63083494eed0b3bf246076", size = 25795209 }, - { url = "https://files.pythonhosted.org/packages/34/c0/03e9e34a4e2af73dd786fb966ee3ad7ffa57659e79e4ac390be9e9f6aded/symengine-0.13.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c3b77dc54bf1181f6bd3b3338c4e6e5973a8b0fa20a189d15563ef5626e57b04", size = 22670484 }, - { url = "https://files.pythonhosted.org/packages/9d/13/66c8510403089ee157f0a8930a2e043e6f4de9ee514c8084adb958934058/symengine-0.13.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca7c3f6c168f6f5b06b421833c3d3baae56067a94b671bdffbe09b8e4fefd9be", size = 60739889 }, - { url = "https://files.pythonhosted.org/packages/70/fe/d0c778204d855257865e713fcbfef11dde34621e07fee439d4d117f43203/symengine-0.13.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:847523de682416811bacb3ad11507e663b3522fbb35cd27184757e9956d0eaf0", size = 89405899 }, - { url = "https://files.pythonhosted.org/packages/66/f6/f546e527caf35b7d0f14dbcea278134d4e46d7431821b9ca9f5ec3388a6a/symengine-0.13.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec2fc1b7d96426463f0c9011e9fb88459d906477c1baa8a996dde6fb2bfa99d4", size = 49474632 }, -] - -[[package]] -name = "sympy" -version = "1.13.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mpmath" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/11/8a/5a7fd6284fa8caac23a26c9ddf9c30485a48169344b4bd3b0f02fef1890f/sympy-1.13.3.tar.gz", hash = "sha256:b27fd2c6530e0ab39e275fc9b683895367e51d5da91baa8d3d64db2565fec4d9", size = 7533196 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/99/ff/c87e0622b1dadea79d2fb0b25ade9ed98954c9033722eb707053d310d4f3/sympy-1.13.3-py3-none-any.whl", hash = "sha256:54612cf55a62755ee71824ce692986f23c88ffa77207b30c1368eda4a7060f73", size = 6189483 }, -] - -[[package]] -name = "tqdm" -version = "4.67.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "platform_system == 'Windows'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540 }, -] - -[[package]] -name = "typing-extensions" -version = "4.12.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8", size = 85321 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", size = 37438 }, -] - -[[package]] -name = "tzdata" -version = "2024.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e1/34/943888654477a574a86a98e9896bae89c7aa15078ec29f490fef2f1e5384/tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc", size = 193282 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a6/ab/7e5f53c3b9d14972843a647d8d7a853969a58aecc7559cb3267302c94774/tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd", size = 346586 }, -] - -[[package]] -name = "urllib3" -version = "2.2.3" -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 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", size = 126338 }, -] - -[[package]] -name = "webencodings" -version = "0.5.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774 }, -] - -[[package]] -name = "websocket-client" -version = "1.8.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e6/30/fba0d96b4b5fbf5948ed3f4681f7da2f9f64512e1d303f94b4cc174c24a5/websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da", size = 54648 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526", size = 58826 }, -] - -[[package]] -name = "werkzeug" -version = "3.1.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "markupsafe" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9f/69/83029f1f6300c5fb2471d621ab06f6ec6b3324685a2ce0f9777fd4a8b71e/werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746", size = 806925 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/52/24/ab44c871b0f07f491e5d2ad12c9bd7358e527510618cb1b803a88e986db1/werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e", size = 224498 }, -] - -[[package]] -name = "yfinance" -version = "0.2.50" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "beautifulsoup4" }, - { name = "frozendict" }, - { name = "html5lib" }, - { name = "lxml" }, - { name = "multitasking" }, - { name = "numpy" }, - { name = "pandas" }, - { name = "peewee" }, - { name = "platformdirs" }, - { name = "pytz" }, - { name = "requests" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d5/58/05bad58cd134b2c3b6a8ca46eca4cf74a740b47914439bdd0deeaaae3ac0/yfinance-0.2.50.tar.gz", hash = "sha256:33b379cad4261313dc93bfe3148d2f6e6083210e6341f0c93dd3af853019b1a0", size = 111862 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c5/98/6fd94db428a9670d638d4469cedfea51671de0126b8f50de1b06e2245c97/yfinance-0.2.50-py2.py3-none-any.whl", hash = "sha256:0db13b19313043328fe88ded2ddc306ede7d901d0f5181462a1cce76acdbcd2a", size = 102247 }, -] diff --git a/pyproject.toml b/pyproject.toml index a55a4493f..a4e8646bc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,14 +25,13 @@ dependencies = [ "pytket>=1.29.0", # there is a bug in 1.2.0 that causes an error some benchmarks, see https://github.com/Qiskit/qiskit/issues/12969 "qiskit!=1.2.0", - "qiskit_optimization>=0.6", - "qiskit_nature[pyscf]>=0.7", - "qiskit_finance>=0.4.1", + "qiskit_qasm3_import>=0.5.0", "networkx>=2.8.8", "joblib>=1.3.0", "numpy>=1.26; python_version >= '3.12'", "numpy>=1.24; python_version >= '3.11'", "numpy>=1.22", + "scikit-learn>=1.5.2", ] @@ -66,6 +65,7 @@ docs = [ "sphinxcontrib-bibtex>=2.4.2", "sphinxcontrib-svg2pdfconverter>=1.2", "sphinxext-opengraph>=0.9", + "jupyter_sphinx", "ipython", "ipykernel", "nbsphinx", @@ -114,7 +114,7 @@ filterwarnings = [ # TKET Warnings 'ignore:.*The pytket Circuit contains implicit qubit permutations*.:UserWarning:pytket.extensions.qiskit.qiskit_convert', # Qiskit 1.3 deprecations - 'ignore:.*The property ``qiskit.dagcircuit.dagcircuit.DAGCircuit.*`` is deprecated as of qiskit 1.3.0.*:DeprecationWarning:qiskit.*', + 'ignore:.*The property ``qiskit.dagcircuit.dagcircuit.DAGCircuit.*`` is deprecated as of qiskit 1.3.0.*:DeprecationWarning:', 'ignore:.*The class ``qiskit.pulse.*`` is deprecated as of Qiskit 1.3.*:DeprecationWarning:qiskit.*', 'ignore:.*The class ``qiskit.qobj.*`` is deprecated as of Qiskit 1.3.*:DeprecationWarning:qiskit.*', 'ignore:.*The property ``qiskit.transpiler.target.*`` is deprecated as of Qiskit 1.3.*:DeprecationWarning:qiskit.*', diff --git a/src/mqt/bench/__init__.py b/src/mqt/bench/__init__.py index 553c99535..295931611 100644 --- a/src/mqt/bench/__init__.py +++ b/src/mqt/bench/__init__.py @@ -9,13 +9,11 @@ from mqt.bench.benchmark_generator import ( CompilerSettings, QiskitSettings, - TKETSettings, get_benchmark, ) __all__ = [ "CompilerSettings", "QiskitSettings", - "TKETSettings", "get_benchmark", ] diff --git a/src/mqt/bench/benchmark_generator.py b/src/mqt/bench/benchmark_generator.py index 4c2a9e526..1ea9e3317 100644 --- a/src/mqt/bench/benchmark_generator.py +++ b/src/mqt/bench/benchmark_generator.py @@ -16,13 +16,14 @@ from . import qiskit_helper, tket_helper from .devices import ( get_available_device_names, - get_available_provider_names, - get_available_providers, + get_available_devices, + get_available_native_gatesets, get_device_by_name, - get_provider_by_name, + get_native_gateset_by_name, ) from .utils import ( get_default_config_path, + get_default_qasm_output_path, get_module_for_benchmark, get_supported_benchmarks, get_supported_compilers, @@ -35,8 +36,9 @@ from pytket.circuit import Circuit + from .devices import Gateset + from dataclasses import dataclass -from importlib import resources class Benchmark(TypedDict, total=False): @@ -65,19 +67,11 @@ class QiskitSettings: optimization_level: int = 1 -@dataclass -class TKETSettings: - """Data class for the TKET compiler settings.""" - - placement: str = "lineplacement" - - @dataclass class CompilerSettings: """Data class for the compiler settings.""" qiskit: QiskitSettings | None = None - tket: TKETSettings | None = None class BenchmarkGenerator: @@ -92,7 +86,7 @@ def __init__(self, cfg_path: str | None = None, qasm_output_path: str | None = N print("Read config successful") self.timeout = self.cfg["timeout"] if qasm_output_path is None: - self.qasm_output_path = str(resources.files("mqt.bench") / "viewer" / "static" / "files" / "qasm_output") + self.qasm_output_path = get_default_qasm_output_path() else: self.qasm_output_path = qasm_output_path @@ -134,15 +128,6 @@ def define_benchmark_instances(self, benchmark: Benchmark) -> None: elif benchmark["name"] == "shor": instances = [lib.get_instance(choice) for choice in benchmark["instances"]] - elif benchmark["name"] in ("routing", "tsp"): - instances = range(benchmark["min_nodes"], benchmark["max_nodes"]) - - elif benchmark["name"] == "groundstate": - instances = benchmark["instances"] - - elif benchmark["name"] in ("pricingcall", "pricingput"): - instances = range(benchmark["min_uncertainty"], benchmark["max_uncertainty"]) - else: instances = range( benchmark["min_qubits"], @@ -159,6 +144,7 @@ def generate_all_benchmarks( file_precheck: bool, ) -> None: """Generate all benchmarks for a given benchmark.""" + self.generate_alg_levels(file_precheck, lib, parameter_space) self.generate_indep_levels(file_precheck, lib, parameter_space) self.generate_native_gates_levels(file_precheck, lib, parameter_space) self.generate_mapped_levels(file_precheck, lib, parameter_space) @@ -170,8 +156,8 @@ def generate_mapped_levels( parameter_space: list[tuple[int, str]] | list[int] | list[str] | range, ) -> None: """Generate mapped level benchmarks for a given benchmark.""" - for provider in get_available_providers(): - for device in provider.get_available_devices(): + for qasm_format in ["qasm2", "qasm3"]: + for device in get_available_devices(): for opt_level in [0, 1, 2, 3]: for parameter_instance in parameter_space: qc = timeout_watcher(lib.create_circuit, self.timeout, parameter_instance) @@ -190,6 +176,7 @@ def generate_mapped_levels( file_precheck, False, self.qasm_output_path, + qasm_format, ], ) if not res: @@ -197,30 +184,21 @@ def generate_mapped_levels( else: break - for lineplacement in (False, True): - for parameter_instance in parameter_space: - qc = timeout_watcher(lib.create_circuit, self.timeout, parameter_instance) - if not qc: - break - assert isinstance(qc, QuantumCircuit) - if qc.num_qubits <= device.num_qubits: - res = timeout_watcher( - tket_helper.get_mapped_level, - self.timeout, - [ - qc, - qc.num_qubits, - device, - lineplacement, - file_precheck, - False, - self.qasm_output_path, - ], - ) - if not res: - break - else: + for parameter_instance in parameter_space: + qc = timeout_watcher(lib.create_circuit, self.timeout, parameter_instance) + if not qc: + break + assert isinstance(qc, QuantumCircuit) + if qc.num_qubits <= device.num_qubits: + res = timeout_watcher( + tket_helper.get_mapped_level, + self.timeout, + [qc, qc.num_qubits, device, file_precheck, False, self.qasm_output_path, qasm_format], + ) + if not res: break + else: + break def generate_native_gates_levels( self, @@ -229,48 +207,73 @@ def generate_native_gates_levels( parameter_space: list[tuple[int, str]] | list[int] | list[str] | range, ) -> None: """Generate native gates level benchmarks for a given benchmark.""" - for provider in get_available_providers(): - for opt_level in [0, 1, 2, 3]: + for qasm_format in ["qasm2", "qasm3"]: + for native_gateset in get_available_native_gatesets(): + for opt_level in [0, 1, 2, 3]: + for parameter_instance in parameter_space: + qc = timeout_watcher(lib.create_circuit, self.timeout, parameter_instance) + if not qc: + break + assert isinstance(qc, QuantumCircuit) + res = timeout_watcher( + qiskit_helper.get_native_gates_level, + self.timeout, + [ + qc, + native_gateset, + qc.num_qubits, + opt_level, + file_precheck, + False, + self.qasm_output_path, + qasm_format, + ], + ) + if not res: + break + for parameter_instance in parameter_space: qc = timeout_watcher(lib.create_circuit, self.timeout, parameter_instance) if not qc: break assert isinstance(qc, QuantumCircuit) res = timeout_watcher( - qiskit_helper.get_native_gates_level, + tket_helper.get_native_gates_level, self.timeout, [ qc, - provider, + native_gateset, qc.num_qubits, - opt_level, file_precheck, False, self.qasm_output_path, + qasm_format, ], ) if not res: break + def generate_alg_levels( + self, + file_precheck: bool, + lib: ModuleType, + parameter_space: list[tuple[int, str]] | list[int] | list[str] | range, + ) -> None: + """Generate algorithm level benchmarks for a given benchmark.""" + for function in [qiskit_helper.get_alg_level]: for parameter_instance in parameter_space: - qc = timeout_watcher(lib.create_circuit, self.timeout, parameter_instance) - if not qc: - break - assert isinstance(qc, QuantumCircuit) - res = timeout_watcher( - tket_helper.get_native_gates_level, - self.timeout, - [ - qc, - provider, - qc.num_qubits, - file_precheck, - False, - self.qasm_output_path, - ], - ) - if not res: - break + for qasm_format in ["qasm3"]: + qc = timeout_watcher(lib.create_circuit, self.timeout, parameter_instance) + if not qc: + break + assert isinstance(qc, QuantumCircuit) + res = timeout_watcher( + function, + self.timeout, + [qc, qc.num_qubits, file_precheck, False, self.qasm_output_path, qasm_format], + ) + if not res: + break def generate_indep_levels( self, @@ -281,17 +284,18 @@ def generate_indep_levels( """Generate independent level benchmarks for a given benchmark.""" for function in [qiskit_helper.get_indep_level, tket_helper.get_indep_level]: for parameter_instance in parameter_space: - qc = timeout_watcher(lib.create_circuit, self.timeout, parameter_instance) - if not qc: - break - assert isinstance(qc, QuantumCircuit) - res = timeout_watcher( - function, - self.timeout, - [qc, qc.num_qubits, file_precheck, False, self.qasm_output_path], - ) - if not res: - break + for qasm_format in ["qasm2", "qasm3"]: + qc = timeout_watcher(lib.create_circuit, self.timeout, parameter_instance) + if not qc: + break + assert isinstance(qc, QuantumCircuit) + res = timeout_watcher( + function, + self.timeout, + [qc, qc.num_qubits, file_precheck, False, self.qasm_output_path, qasm_format], + ) + if not res: + break @overload @@ -302,7 +306,7 @@ def get_benchmark( benchmark_instance_name: str | None = None, compiler: Literal["qiskit"] = "qiskit", compiler_settings: CompilerSettings | None = None, - provider_name: str = "ibm", + gateset: str | Gateset = "ibm_falcon", device_name: str = "ibm_washington", **kwargs: str, ) -> QuantumCircuit: ... @@ -316,7 +320,7 @@ def get_benchmark( benchmark_instance_name: str | None = None, compiler: Literal["tket"] = "tket", compiler_settings: CompilerSettings | None = None, - provider_name: str = "ibm", + gateset: str | Gateset = "ibm_falcon", device_name: str = "ibm_washington", **kwargs: str, ) -> Circuit: ... @@ -330,7 +334,7 @@ def get_benchmark( benchmark_instance_name: str | None = None, compiler: str = "qiskit", compiler_settings: CompilerSettings | None = None, - provider_name: str = "ibm", + gateset: str | Gateset = "ibm_falcon", device_name: str = "ibm_washington", **kwargs: str, ) -> QuantumCircuit | Circuit: ... @@ -343,7 +347,7 @@ def get_benchmark( benchmark_instance_name: str | None = None, compiler: str = "qiskit", compiler_settings: CompilerSettings | None = None, - provider_name: str = "ibm", + gateset: str | Gateset = "ibm_falcon", device_name: str = "ibm_washington", **kwargs: str, ) -> QuantumCircuit | Circuit: @@ -353,10 +357,10 @@ def get_benchmark( benchmark_name: name of the to be generated benchmark level: Choice of level, either as a string ("alg", "indep", "nativegates" or "mapped") or as a number between 0-3 where 0 corresponds to "alg" level and 3 to "mapped" level circuit_size: Input for the benchmark creation, in most cases this is equal to the qubit number - benchmark_instance_name: Input selection for some benchmarks, namely "groundstate" and "shor" + benchmark_instance_name: Input selection for some benchmarks, namely and "shor" compiler: "qiskit" or "tket" - compiler_settings: Data class containing the respective compiler settings for the specified compiler (e.g., optimization level for Qiskit or placement for TKET) - provider_name: "ibm", "rigetti", "ionq", "oqc", or "quantinuum" (required for "nativegates" level) + compiler_settings: Data class containing the respective compiler settings for the specified compiler (e.g., optimization level for Qiskit) + gateset: Name of the gateset or tuple containing the name of the gateset and the gateset itself (required for "nativegates" level) device_name: "ibm_washington", "ibm_montreal", "rigetti_aspen_m3", "ionq_harmony", "ionq_aria1", "oqc_lucy", "quantinuum_h2" (required for "mapped" level) kwargs: Additional arguments for the benchmark generation @@ -371,11 +375,11 @@ def get_benchmark( msg = f"Selected level must be in {get_supported_levels()}." raise ValueError(msg) - if benchmark_name not in ["shor", "groundstate"] and not (isinstance(circuit_size, int) and circuit_size > 0): + if benchmark_name != "shor" and not (isinstance(circuit_size, int) and circuit_size > 0): msg = "circuit_size must be None or int for this benchmark." raise ValueError(msg) - if benchmark_name in ["shor", "groundstate"] and not isinstance(benchmark_instance_name, str): + if benchmark_name == "shor" and not isinstance(benchmark_instance_name, str): msg = "benchmark_instance_name must be defined for this benchmark." raise ValueError(msg) @@ -388,9 +392,6 @@ def get_benchmark( anc_mode = "noancilla" elif "v-chain" in benchmark_name: anc_mode = "v-chain" - else: - msg = "Either `noancilla` or `v-chain` must be specified for ancillary mode of Grover and QWalk benchmarks." - raise ValueError(msg) qc = lib.create_circuit(circuit_size, ancillary_mode=anc_mode) @@ -398,9 +399,6 @@ def get_benchmark( to_be_factored_number, a_value = lib.get_instance(benchmark_instance_name) qc = lib.create_circuit(to_be_factored_number, a_value) - elif benchmark_name == "groundstate": - qc = lib.create_circuit(benchmark_instance_name) - else: qc = lib.create_circuit(circuit_size) @@ -414,7 +412,7 @@ def get_benchmark( raise ValueError(msg) if compiler_settings is None: - compiler_settings = CompilerSettings(QiskitSettings(), TKETSettings()) + compiler_settings = CompilerSettings(QiskitSettings()) elif not isinstance(compiler_settings, CompilerSettings): msg = "compiler_settings must be of type CompilerSettings or None." # type: ignore[unreachable] raise ValueError(msg) @@ -428,16 +426,14 @@ def get_benchmark( native_gates_level = 2 if level in ("nativegates", native_gates_level): - if provider_name not in get_available_provider_names(): - msg = f"Selected provider_name must be in {get_available_provider_names()}." - raise ValueError(msg) - provider = get_provider_by_name(provider_name) + if isinstance(gateset, str): + gateset = get_native_gateset_by_name(gateset) if compiler == "qiskit": assert compiler_settings.qiskit is not None opt_level = compiler_settings.qiskit.optimization_level - return qiskit_helper.get_native_gates_level(qc, provider, circuit_size, opt_level, False, True) + return qiskit_helper.get_native_gates_level(qc, gateset, circuit_size, opt_level, False, True) if compiler == "tket": - return tket_helper.get_native_gates_level(qc, provider, circuit_size, False, True) + return tket_helper.get_native_gates_level(qc, gateset, circuit_size, False, True) if device_name not in get_available_device_names(): msg = f"Selected device_name must be in {get_available_device_names()}." @@ -459,20 +455,14 @@ def get_benchmark( True, ) if compiler == "tket": - assert compiler_settings.tket is not None - placement = compiler_settings.tket.placement.lower() - lineplacement = placement == "lineplacement" return tket_helper.get_mapped_level( qc, circuit_size, device, - lineplacement, False, True, ) - - msg = f"Invalid level specified. Must be in {get_supported_levels()}." - raise ValueError(msg) + return None def generate(num_jobs: int = -1) -> None: diff --git a/src/mqt/bench/benchmarks/__init__.py b/src/mqt/bench/benchmarks/__init__.py index d77918927..00a5e8413 100644 --- a/src/mqt/bench/benchmarks/__init__.py +++ b/src/mqt/bench/benchmarks/__init__.py @@ -5,24 +5,3 @@ """ from __future__ import annotations - -from mqt.bench.benchmarks.qiskit_application_finance import ( - portfolioqaoa, - portfoliovqe, - pricingcall, - pricingput, -) -from mqt.bench.benchmarks.qiskit_application_ml import qnn -from mqt.bench.benchmarks.qiskit_application_nature import groundstate -from mqt.bench.benchmarks.qiskit_application_optimization import routing, tsp - -__all__ = [ - "groundstate", - "portfolioqaoa", - "portfoliovqe", - "pricingcall", - "pricingput", - "qnn", - "routing", - "tsp", -] diff --git a/src/mqt/bench/benchmarks/ae.py b/src/mqt/bench/benchmarks/ae.py index c08327ed7..c3141db2f 100644 --- a/src/mqt/bench/benchmarks/ae.py +++ b/src/mqt/bench/benchmarks/ae.py @@ -4,66 +4,76 @@ import numpy as np from qiskit import QuantumCircuit -from qiskit_algorithms import AmplitudeEstimation, EstimationProblem -def create_circuit(num_qubits: int) -> QuantumCircuit: +def create_circuit(num_qubits: int, probability: float = 0.2) -> QuantumCircuit: """Returns a quantum circuit implementing Quantum Amplitude Estimation. Arguments: - num_qubits: number of qubits of the returned quantum circuit - """ - ae = AmplitudeEstimation( - num_eval_qubits=num_qubits - 1, # -1 because of the to be estimated qubit - ) - problem = get_estimation_problem() + num_qubits: Total number of qubits, including evaluation and target qubits. + probability: Probability of the "good" state. - qc = ae.construct_circuit(problem) - qc.name = "ae" - qc.measure_all() + Returns: + QuantumCircuit: The constructed amplitude estimation circuit. + """ + if num_qubits < 2: + msg = "Number of qubits must be at least 2 (1 evaluation + 1 target)." + raise ValueError(msg) - return qc + num_eval_qubits = num_qubits - 1 # Number of evaluation qubits + qc = QuantumCircuit(num_qubits, num_eval_qubits) + # Define the Bernoulli A operator + theta_p = 2 * np.arcsin(np.sqrt(probability)) + a = QuantumCircuit(1) + a.ry(theta_p, 0) -class BernoulliQ(QuantumCircuit): # type: ignore[misc] - """A circuit representing the Bernoulli Q operator.""" + # Define the Grover operator Q = -A S_0 A† S_f + def grover_operator() -> QuantumCircuit: + """Construct the Grover operator.""" + q = QuantumCircuit(1) + # Apply A + q.ry(theta_p, 0) + # Apply S0 (reflection around |0>) + q.z(0) + # Apply A† + q.ry(-theta_p, 0) + return q - def __init__(self, probability: float) -> None: - """Initialize the Bernoulli Q operator.""" - super().__init__(1) # circuit on 1 qubit + q = grover_operator() - self._theta_p = 2 * np.arcsin(np.sqrt(probability)) - self.ry(2 * self._theta_p, 0) + # Apply Hadamard gates to the evaluation qubits + qc.h(range(num_eval_qubits)) - def __eq__(self, other: object) -> bool: - """Return if the operators are equal.""" - return isinstance(other, BernoulliQ) and self._theta_p == other._theta_p + # Controlled applications of A and powers of Q + for i in range(num_eval_qubits): + qc.append(a.control(1), [i, num_eval_qubits]) # Controlled A + qc.append(q.control(1), [i, num_eval_qubits]) # Controlled powers of Q - def __hash__(self) -> int: - """Return a hash of the operator.""" - return hash(self._theta_p) + # Apply the inverse QFT to the evaluation qubits + qc.append(inverse_qft(num_eval_qubits), range(num_eval_qubits)) - def power(self, power: float, _matrix_power: bool = True) -> QuantumCircuit: - """Return a circuit implementing the power of the operator.""" - q_k = QuantumCircuit(1) - q_k.ry(2 * power * self._theta_p, 0) - return q_k + # Measure the evaluation qubits + qc.measure(range(num_eval_qubits), range(num_eval_qubits)) + qc.name = "ae" + return qc -def get_estimation_problem() -> EstimationProblem: - """Returns a estimation problem instance for a fixed p value.""" - p = 0.2 - """A circuit representing the Bernoulli A operator.""" - a = QuantumCircuit(1) - theta_p = 2 * np.arcsin(np.sqrt(p)) - a.ry(theta_p, 0) +def inverse_qft(num_qubits: int) -> QuantumCircuit: + """Constructs the inverse Quantum Fourier Transform circuit. - """A circuit representing the Bernoulli Q operator.""" - q = BernoulliQ(p) + Arguments: + num_qubits: Number of qubits. - return EstimationProblem( - state_preparation=a, # A operator - grover_operator=q, # Q operator - objective_qubits=[0], # the "good" state Psi1 is identified as measuring |1> in qubit 0 - ) + Returns: + QuantumCircuit: The inverse QFT circuit. + """ + qc = QuantumCircuit(num_qubits) + for i in range(num_qubits // 2): + qc.swap(i, num_qubits - i - 1) + for i in range(num_qubits): + qc.h(i) + for j in range(i + 1, num_qubits): + qc.cp(-np.pi / (2 ** (j - i)), j, i) + return qc diff --git a/src/mqt/bench/benchmarks/bv.py b/src/mqt/bench/benchmarks/bv.py new file mode 100644 index 000000000..a9c904693 --- /dev/null +++ b/src/mqt/bench/benchmarks/bv.py @@ -0,0 +1,73 @@ +"""Bernstein-Vazirani benchmark definition.""" + +from __future__ import annotations + +from qiskit import QuantumCircuit + + +def create_circuit(num_qubits: int, dynamic: bool = False, hidden_string: str | None = None) -> QuantumCircuit: + """Create a quantum circuit for the Bernstein-Vazirani algorithm. + + Arguments: + num_qubits: Total number of qubits in the circuit (including the flag qubit). + hidden_string: The hidden bitstring to be found (default: alternating pattern of 1 and 0). + dynamic: Whether to use a dynamic layout (default: False). + + Returns: + QuantumCircuit: Circuit implementing the Bernstein-Vazirani algorithm. + """ + # Generate a default hidden string if not provided + if hidden_string is None: + hidden_string = "".join([str(i % 2) for i in range(num_qubits - 1)]) + + # Ensure the hidden string matches the number of input qubits (excluding the flag qubit) + if len(hidden_string) != num_qubits - 1: + msg = "Length of hidden_string must be num_qubits - 1." + raise ValueError(msg) + + # Create a quantum circuit: num_qubits (flag + inputs) and num_qubits - 1 classical bits + circuit = QuantumCircuit(num_qubits, num_qubits - 1) + + # Prepare the flag qubit in the |1⟩ state + circuit.x(0) + + if dynamic: + # Dynamic layout: process one input qubit at a time + for i in range(num_qubits - 1): + # Apply Hadamard to the working qubit + circuit.h(1) + + # Apply controlled-Z based on the hidden bitstring + if hidden_string[i] == "1": + circuit.cz(1, 0) + + # Apply Hadamard to the working qubit again + circuit.h(1) + + # Measure the working qubit + circuit.measure(1, i) + + # Reset the working qubit if more rounds are needed + if i < num_qubits - 2: + circuit.reset(1) + else: + # Static layout: process all input qubits at once + # Apply Hadamard to all input qubits + for i in range(1, num_qubits): + circuit.h(i) + + # Apply controlled-Z gates based on the hidden bitstring + for i in range(1, num_qubits): + if hidden_string[i - 1] == "1": + circuit.cz(i, 0) + + # Apply Hadamard to all input qubits again + for i in range(1, num_qubits): + circuit.h(i) + + # Measure all input qubits + for i in range(1, num_qubits): + circuit.measure(i, i - 1) + circuit.name = "bv" + + return circuit diff --git a/src/mqt/bench/benchmarks/grover.py b/src/mqt/bench/benchmarks/grover.py index c290c1d56..f4b19c28c 100644 --- a/src/mqt/bench/benchmarks/grover.py +++ b/src/mqt/bench/benchmarks/grover.py @@ -5,7 +5,6 @@ import numpy as np from qiskit import AncillaRegister, QuantumCircuit, QuantumRegister from qiskit.circuit.library import GroverOperator -from qiskit_algorithms import Grover def create_circuit(num_qubits: int, ancillary_mode: str = "noancilla") -> QuantumCircuit: @@ -27,7 +26,7 @@ def create_circuit(num_qubits: int, ancillary_mode: str = "noancilla") -> Quantu oracle.mcp(np.pi, q, flag) operator = GroverOperator(oracle, mcx_mode=ancillary_mode) - iterations = Grover.optimal_num_iterations(1, num_qubits) + iterations = int(np.pi / 4 * np.sqrt(2**num_qubits)) num_qubits = operator.num_qubits - 1 # -1 because last qubit is "flag" qubit and already taken care of diff --git a/src/mqt/bench/benchmarks/qaoa.py b/src/mqt/bench/benchmarks/qaoa.py index addeb67fc..07aaac4f0 100644 --- a/src/mqt/bench/benchmarks/qaoa.py +++ b/src/mqt/bench/benchmarks/qaoa.py @@ -2,34 +2,48 @@ from __future__ import annotations -from typing import TYPE_CHECKING +import numpy as np +from qiskit import QuantumCircuit -from qiskit.primitives import Sampler -from qiskit_algorithms.minimum_eigensolvers import QAOA -from qiskit_algorithms.optimizers import SLSQP -from qiskit_optimization import QuadraticProgram -from mqt.bench.utils import get_examplary_max_cut_qp - -if TYPE_CHECKING: # pragma: no cover - from qiskit import QuantumCircuit - - -def create_circuit(num_qubits: int) -> QuantumCircuit: - """Returns a quantum circuit implementing the Quantum Approximation Optimization Algorithm for a specific max-cut example. +def create_circuit(num_qubits: int, repetitions: int = 2) -> QuantumCircuit: + """Constructs a quantum circuit implementing QAOA for a Max-Cut example with random parameters. Arguments: - num_qubits: number of qubits of the returned quantum circuit + num_qubits: Number of qubits in the circuit (equal to the number of graph nodes). + repetitions: Number of QAOA layers (repetitions of the ansatz). Returns: - QuantumCircuit: quantum circuit implementing the Quantum Approximation Optimization Algorithm + QuantumCircuit: Quantum circuit implementing QAOA. """ - qp = get_examplary_max_cut_qp(num_qubits) - assert isinstance(qp, QuadraticProgram) - - qaoa = QAOA(sampler=Sampler(), reps=2, optimizer=SLSQP(maxiter=25)) - qaoa_result = qaoa.compute_minimum_eigenvalue(qp.to_ising()[0]) - qc = qaoa.ansatz.assign_parameters(qaoa_result.optimal_point) + # Set the random number generator + rng = np.random.default_rng(10) + + # Example adjacency matrix for Max-Cut (toy problem) + adjacency_matrix = rng.integers(0, 2, size=(num_qubits, num_qubits)) + adjacency_matrix = np.triu(adjacency_matrix, 1) # Upper triangular part for undirected graph + + # Random initialization of parameters + gamma_values = rng.uniform(0, np.pi, repetitions) + beta_values = rng.uniform(0, np.pi, repetitions) + + # Initialize QAOA circuit + qc = QuantumCircuit(num_qubits) + + # Start in uniform superposition + qc.h(range(num_qubits)) + + # Define cost and mixer operators for each layer + for layer in range(repetitions): + # Cost Hamiltonian + for i in range(num_qubits): + for j in range(i + 1, num_qubits): + if adjacency_matrix[i, j] != 0: + qc.rzz(2 * gamma_values[layer], i, j) + + # Mixer Hamiltonian + for i in range(num_qubits): + qc.rx(2 * beta_values[layer], i) qc.name = "qaoa" diff --git a/src/mqt/bench/benchmarks/qiskit_application_finance/portfolioqaoa.py b/src/mqt/bench/benchmarks/qiskit_application_finance/portfolioqaoa.py deleted file mode 100644 index 9f49099f4..000000000 --- a/src/mqt/bench/benchmarks/qiskit_application_finance/portfolioqaoa.py +++ /dev/null @@ -1,55 +0,0 @@ -"""Portfolio QAOA benchmark definition. Code is based on https://qiskit.org/documentation/tutorials/finance/01_portfolio_optimization.html.""" - -from __future__ import annotations - -import datetime -from typing import TYPE_CHECKING - -from qiskit.primitives import Sampler -from qiskit_algorithms.minimum_eigensolvers import QAOA -from qiskit_algorithms.optimizers import COBYLA -from qiskit_finance.applications import PortfolioOptimization -from qiskit_finance.data_providers import RandomDataProvider -from qiskit_optimization.converters import QuadraticProgramToQubo - -if TYPE_CHECKING: # pragma: no cover - from qiskit import QuantumCircuit - - -def create_circuit(num_qubits: int) -> QuantumCircuit: - """Returns a quantum circuit of QAOA applied to a specific portfolio optimization task. - - Arguments: - num_qubits: number of qubits of the returned quantum circuit - """ - # set number of assets (= number of qubits) - num_assets = num_qubits - - # Generate expected return and covariance matrix from (random) time-series - stocks = [(f"TICKER{i}") for i in range(num_assets)] - data = RandomDataProvider( - tickers=stocks, - start=datetime.datetime(2016, 1, 1), - end=datetime.datetime(2016, 1, 30), - ) - data.run() - mu = data.get_period_return_mean_vector() - sigma = data.get_period_return_covariance_matrix() - - q = 0.5 # set risk factor - budget = num_assets // 2 # set budget - - portfolio = PortfolioOptimization(expected_returns=mu, covariances=sigma, risk_factor=q, budget=budget) - qp = portfolio.to_quadratic_program() - conv = QuadraticProgramToQubo() - qp_qubo = conv.convert(qp) - - cobyla = COBYLA() - cobyla.set_options(maxiter=25) - qaoa = QAOA(sampler=Sampler(), optimizer=cobyla, reps=3) - qaoa.random_seed = 10 - qaoa_result = qaoa.compute_minimum_eigenvalue(qp_qubo.to_ising()[0]) - qc = qaoa.ansatz.assign_parameters(qaoa_result.optimal_point) - - qc.name = "portfolioqaoa" - return qc diff --git a/src/mqt/bench/benchmarks/qiskit_application_finance/portfoliovqe.py b/src/mqt/bench/benchmarks/qiskit_application_finance/portfoliovqe.py deleted file mode 100644 index 560eb4e2f..000000000 --- a/src/mqt/bench/benchmarks/qiskit_application_finance/portfoliovqe.py +++ /dev/null @@ -1,59 +0,0 @@ -"""Portfolio VQE benchmark definition. Code is based on https://qiskit.org/documentation/tutorials/finance/01_portfolio_optimization.html.""" - -from __future__ import annotations - -import datetime -from typing import TYPE_CHECKING - -from qiskit.circuit.library import TwoLocal -from qiskit.primitives import Estimator -from qiskit_algorithms.minimum_eigensolvers import VQE -from qiskit_algorithms.optimizers import COBYLA -from qiskit_finance.applications import PortfolioOptimization -from qiskit_finance.data_providers import RandomDataProvider -from qiskit_optimization.converters import QuadraticProgramToQubo - -if TYPE_CHECKING: # pragma: no cover - from qiskit import QuantumCircuit - - -def create_circuit(num_qubits: int) -> QuantumCircuit: - """Returns a quantum circuit of VQE applied to a specific portfolio optimization task. - - Arguments: - num_qubits: number of qubits of the returned quantum circuit - """ - # set number of assets (= number of qubits) - num_assets = num_qubits - - # Generate expected return and covariance matrix from (random) time-series - stocks = [(f"TICKER{i}") for i in range(num_assets)] - data = RandomDataProvider( - tickers=stocks, - start=datetime.datetime(2016, 1, 1), - end=datetime.datetime(2016, 1, 30), - ) - data.run() - mu = data.get_period_return_mean_vector() - sigma = data.get_period_return_covariance_matrix() - - q = 0.5 # set risk factor - budget = num_assets // 2 # set budget - - portfolio = PortfolioOptimization(expected_returns=mu, covariances=sigma, risk_factor=q, budget=budget) - qp = portfolio.to_quadratic_program() - conv = QuadraticProgramToQubo() - qp_qubo = conv.convert(qp) - cobyla = COBYLA() - cobyla.set_options(maxiter=25) - ry = TwoLocal(num_assets, "ry", "cz", reps=3, entanglement="full") - - vqe = VQE(ansatz=ry, optimizer=cobyla, estimator=Estimator()) - vqe.random_seed = 10 - vqe_result = vqe.compute_minimum_eigenvalue(qp_qubo.to_ising()[0]) - qc = vqe.ansatz.assign_parameters(vqe_result.optimal_point) - - qc.name = "portfoliovqe" - qc.measure_all() - - return qc diff --git a/src/mqt/bench/benchmarks/qiskit_application_finance/pricingcall.py b/src/mqt/bench/benchmarks/qiskit_application_finance/pricingcall.py deleted file mode 100644 index d0898daa1..000000000 --- a/src/mqt/bench/benchmarks/qiskit_application_finance/pricingcall.py +++ /dev/null @@ -1,67 +0,0 @@ -"""Pricing call benchmark definition. Code is based on https://qiskit.org/documentation/tutorials/finance/03_european_call_option_pricing.html.""" - -from __future__ import annotations - -from typing import TYPE_CHECKING - -import numpy as np -from qiskit_algorithms import IterativeAmplitudeEstimation -from qiskit_finance.applications.estimation import EuropeanCallPricing -from qiskit_finance.circuit.library import LogNormalDistribution - -if TYPE_CHECKING: # pragma: no cover - from qiskit import QuantumCircuit - - -def create_circuit(num_uncertainty_qubits: int = 5) -> QuantumCircuit: - """Returns a quantum circuit of Iterative Amplitude Estimation applied to a problem instance of pricing call options. - - Arguments: - num_uncertainty_qubits: number of qubits to measure uncertainty - """ - # parameters for considered random distribution - s = 2.0 # initial spot price - vol = 0.4 # volatility of 40% - r = 0.05 # annual interest rate of 4% - t = 40 / 365 # 40 days to maturity - - mu = (r - 0.5 * vol**2) * t + np.log(s) - sigma = vol * np.sqrt(t) - mean = np.exp(mu + sigma**2 / 2) - variance = (np.exp(sigma**2) - 1) * np.exp(2 * mu + sigma**2) - stddev = np.sqrt(variance) - - # lowest and highest value considered for the spot price; in between, an equidistant discretization is considered. - low = np.maximum(0, mean - 3 * stddev) - high = mean + 3 * stddev - - # construct A operator for QAE for the payoff function by - # composing the uncertainty model and the objective - uncertainty_model = LogNormalDistribution(num_uncertainty_qubits, mu=mu, sigma=sigma**2, bounds=(low, high)) - - # set the strike price (should be within the low and the high value of the uncertainty) - strike_price = 1.896 - - # set the approximation scaling for the payoff function - c_approx = 0.25 - - european_call_pricing = EuropeanCallPricing( - num_state_qubits=num_uncertainty_qubits, - strike_price=strike_price, - rescaling_factor=c_approx, - bounds=(low, high), - uncertainty_model=uncertainty_model, - ) - - # set target precision and confidence level - epsilon = 0.01 - alpha = 0.05 - - problem = european_call_pricing.to_estimation_problem() - iae = IterativeAmplitudeEstimation(epsilon, alpha=alpha) - - qc = iae.construct_circuit(problem) - qc.measure_all() - qc.name = "pricingcall" - - return qc diff --git a/src/mqt/bench/benchmarks/qiskit_application_finance/pricingput.py b/src/mqt/bench/benchmarks/qiskit_application_finance/pricingput.py deleted file mode 100644 index 16700f7cd..000000000 --- a/src/mqt/bench/benchmarks/qiskit_application_finance/pricingput.py +++ /dev/null @@ -1,84 +0,0 @@ -"""Pricing put benchmark definition. Code is based on https://qiskit.org/documentation/tutorials/finance/04_european_put_option_pricing.html.""" - -from __future__ import annotations - -from typing import TYPE_CHECKING - -import numpy as np -from qiskit.circuit.library import LinearAmplitudeFunction -from qiskit_algorithms import EstimationProblem, IterativeAmplitudeEstimation -from qiskit_finance.circuit.library import LogNormalDistribution - -if TYPE_CHECKING: # pragma: no cover - from qiskit import QuantumCircuit - - -def create_circuit(num_uncertainty_qubits: int = 5) -> QuantumCircuit: - """Returns a quantum circuit of Iterative Amplitude Estimation applied to a problem instance of pricing put options. - - Arguments: - num_uncertainty_qubits: number of qubits to measure uncertainty - """ - # parameters for considered random distribution - s = 2.0 # initial spot price - vol = 0.4 # volatility of 40% - r = 0.05 # annual interest rate of 4% - t = 40 / 365 # 40 days to maturity - - mu = (r - 0.5 * vol**2) * t + np.log(s) - sigma = vol * np.sqrt(t) - mean = np.exp(mu + sigma**2 / 2) - variance = (np.exp(sigma**2) - 1) * np.exp(2 * mu + sigma**2) - stddev = np.sqrt(variance) - - # lowest and highest value considered for the spot price; in between, an equidistant discretization is considered. - low = np.maximum(0, mean - 3 * stddev) - high = mean + 3 * stddev - - # construct A operator for QAE for the payoff function by - # composing the uncertainty model and the objective - uncertainty_model = LogNormalDistribution(num_uncertainty_qubits, mu=mu, sigma=sigma**2, bounds=(low, high)) - - # set the strike price (should be within the low and the high value of the uncertainty) - strike_price = 2.126 - - # set the approximation scaling for the payoff function - rescaling_factor = 0.25 - - # setup piecewise linear objective fcuntion - breakpoints = [low, strike_price] - slopes = [-1, 0] - offsets = [strike_price - low, 0] - f_min = 0 - f_max = strike_price - low - european_put_objective = LinearAmplitudeFunction( - num_uncertainty_qubits, - slopes, - offsets, - domain=(low, high), - image=(f_min, f_max), - breakpoints=breakpoints, - rescaling_factor=rescaling_factor, - ) - - # construct A operator for QAE for the payoff function by - # composing the uncertainty model and the objective - european_put = european_put_objective.compose(uncertainty_model, front=True) - - # set target precision and confidence level - epsilon = 0.01 - alpha = 0.05 - - problem = EstimationProblem( - state_preparation=european_put, - objective_qubits=[num_uncertainty_qubits], - post_processing=european_put_objective.post_processing, - ) - - iae = IterativeAmplitudeEstimation(epsilon, alpha=alpha) - qc = iae.construct_circuit(problem) - - qc.measure_all() - qc.name = "pricingput" - - return qc diff --git a/src/mqt/bench/benchmarks/qiskit_application_nature/groundstate.py b/src/mqt/bench/benchmarks/qiskit_application_nature/groundstate.py deleted file mode 100644 index 10719d51f..000000000 --- a/src/mqt/bench/benchmarks/qiskit_application_nature/groundstate.py +++ /dev/null @@ -1,68 +0,0 @@ -"""Groundstate benchmark definition. Code is based on https://qiskit.org/documentation/nature/tutorials/03_ground_state_solvers.html.""" - -from __future__ import annotations - -from typing import TYPE_CHECKING - -from qiskit.circuit.library import TwoLocal -from qiskit.exceptions import MissingOptionalLibraryError -from qiskit.primitives import Estimator -from qiskit_algorithms.minimum_eigensolvers import VQE -from qiskit_algorithms.optimizers import COBYLA -from qiskit_nature.second_q.drivers import PySCFDriver -from qiskit_nature.second_q.mappers import JordanWignerMapper - -if TYPE_CHECKING: # pragma: no cover - from qiskit import QuantumCircuit - - -def create_circuit(choice: str) -> QuantumCircuit: - """Returns a quantum circuit implementing Ground State Estimation. - - Arguments: - choice: problem instance for which the ground state shall be estimated - """ - molecule = get_molecule(choice) - - try: - driver = PySCFDriver(atom=molecule) - except MissingOptionalLibraryError: - msg = ( - "PySCF is not installed (most likely because you are on a Windows system)." - "Please either download benchmark from https://www.cda.cit.tum.de/mqtbench/ or try to manually install PySCF." - ) - raise ImportError(msg) from None - - es_problem = driver.run() - mapper = JordanWignerMapper() - second_q_op = es_problem.second_q_ops() - operator = mapper.map(second_q_op[0]) - - tl_circuit = TwoLocal( - rotation_blocks=["h", "rx"], - entanglement_blocks="cz", - entanglement="full", - reps=2, - parameter_prefix="y", - ) - - another_solver = VQE(ansatz=tl_circuit, estimator=Estimator(), optimizer=COBYLA(maxiter=25)) - - result = another_solver.compute_minimum_eigenvalue(operator) - qc = another_solver.ansatz.assign_parameters(result.optimal_point) - - qc.name = "groundstate" - qc.name = qc.name + "_" + choice - qc.measure_all() - - return qc - - -def get_molecule(benchmark_instance_name: str) -> list[str]: - """Returns a Molecule object depending on the parameter value.""" - m_1 = ["H 0.0 0.0 0.0", "H 0.0 0.0 0.735"] - m_2 = ["Li 0.0 0.0 0.0", "H 0.0 0.0 2.5"] - m_3 = ["O 0.0 0.0 0.0", "H 0.586, 0.757, 0.0", "H 0.586, -0.757, 0.0"] - instances = {"small": m_1, "medium": m_2, "large": m_3} - - return instances[benchmark_instance_name] diff --git a/src/mqt/bench/benchmarks/qiskit_application_optimization/routing.py b/src/mqt/bench/benchmarks/qiskit_application_optimization/routing.py deleted file mode 100644 index c025ca47f..000000000 --- a/src/mqt/bench/benchmarks/qiskit_application_optimization/routing.py +++ /dev/null @@ -1,167 +0,0 @@ -"""Routing benchmark definition. Code is based on https://qiskit.org/documentation/tutorials/optimization/7_examples_vehicle_routing.html.""" - -from __future__ import annotations - -from typing import TYPE_CHECKING, cast - -import numpy as np -from qiskit.circuit.library import RealAmplitudes -from qiskit.primitives import Estimator -from qiskit_algorithms.minimum_eigensolvers import VQE -from qiskit_algorithms.optimizers import SLSQP -from qiskit_optimization import QuadraticProgram - -if TYPE_CHECKING: # pragma: no cover - from numpy.typing import NDArray - from qiskit import QuantumCircuit - from qiskit_optimization.problems import LinearExpression, QuadraticExpression - - -class Initializer: - """Initializes the problem by randomly generating the instance.""" - - def __init__(self, n: int) -> None: - """Initializes the problem by randomly generating the instance.""" - self.n = n - - def generate_instance( - self, - ) -> tuple[ - NDArray[np.float64], - NDArray[np.float64], - NDArray[np.float64], - ]: - """Generates a random instance of the problem.""" - n = self.n - rng = np.random.default_rng(10) - - xc = (rng.random(n) - 0.5) * 10 - yc = (rng.random(n) - 0.5) * 10 - - instance = np.zeros([n, n]) - for ii in range(n): - for jj in range(ii + 1, n): - instance[ii, jj] = (xc[ii] - xc[jj]) ** 2 + (yc[ii] - yc[jj]) ** 2 - instance[jj, ii] = instance[ii, jj] - - return xc, yc, instance - - -class QuantumOptimizer: - """Class to solve the problem using a quantum optimizer.""" - - def __init__(self, instance: NDArray[np.float64], n: int, k: int) -> None: - """Initializes the class to solve the problem using a quantum optimizer.""" - self.instance = instance - self.n = n - self.k = k - - def binary_representation( - self, x_sol: NDArray[np.float64] - ) -> tuple[NDArray[np.float64], NDArray[np.float64], float, float]: - """Returns the binary representation of the problem.""" - instance = self.instance - n = self.n - k = self.k - - a = np.max(instance) * 100 # A parameter of cost function - - # Determine the weights w - instance_vec = instance.reshape(n**2) - w_list = [instance_vec[x] for x in range(n**2) if instance_vec[x] > 0] - w = np.zeros(n * (n - 1)) - for ii in range(len(w_list)): - w[ii] = w_list[ii] - - # Some variables I will use - id_n = np.eye(n) - im_n_1 = np.ones([n - 1, n - 1]) - iv_n_1 = np.ones(n) - iv_n_1[0] = 0 - iv_n = np.ones(n - 1) - neg_iv_n_1 = np.ones(n) - iv_n_1 - - v = np.zeros([n, n * (n - 1)]) - for ii in range(n): - count = ii - 1 - for jj in range(n * (n - 1)): - if jj // (n - 1) == ii: - count = ii - - if jj // (n - 1) != ii and jj % (n - 1) == count: - v[ii][jj] = 1.0 - - vn = np.sum(v[1:], axis=0) - - # Q defines the interactions between variables - q = a * (np.kron(id_n, im_n_1) + np.dot(v.T, v)) - - # g defines the contribution from the individual variables - g = w - 2 * a * (np.kron(iv_n_1, iv_n) + vn.T) - 2 * a * k * (np.kron(neg_iv_n_1, iv_n) + v[0].T) - - # c is the constant offset - c = 2 * a * (n - 1) + 2 * a * (k**2) - - try: - # Evaluates the cost distance from a binary representation of a path - def fun(x: NDArray[np.float64]) -> float: - return cast( - "float", - np.dot(np.around(x), np.dot(q, np.around(x))) + np.dot(g, np.around(x)) + c, - ) - - cost = fun(x_sol) - except Exception: - cost = 0 - - return q, g, cast("float", c), cost - - def construct_problem(self, q: QuadraticExpression, g: LinearExpression, c: float) -> QuadraticProgram: - """Constructs the problem.""" - qp = QuadraticProgram() - for i in range(self.n * (self.n - 1)): - qp.binary_var(str(i)) - - qp.objective.quadratic = q - qp.objective.linear = g - qp.objective.constant = c - return qp - - def solve_problem(self, qp: QuadraticProgram) -> QuantumCircuit: - """Solves the problem.""" - ansatz = RealAmplitudes(self.n) - vqe = VQE(estimator=Estimator(), optimizer=SLSQP(maxiter=25), ansatz=ansatz) - vqe.random_seed = 10 - vqe_result = vqe.compute_minimum_eigenvalue(qp.to_ising()[0]) - return vqe.ansatz.assign_parameters(vqe_result.optimal_point) - - -def create_circuit(num_nodes: int = 3, num_vehs: int = 2) -> QuantumCircuit: - """Returns a quantum circuit solving a routing problem. - - Arguments: - num_nodes: number of to be visited nodes - num_vehs: number of used vehicles - - Returns: - QuantumCircuit: quantum circuit solving the routing problem - """ - # Initialize the problem by defining the parameters - n = num_nodes # number of nodes + depot (n+1) - k = num_vehs # number of vehicles - # Initialize the problem by randomly generating the instance - initializer = Initializer(n) - _xc, _yc, instance = initializer.generate_instance() - - quantum_optimizer = QuantumOptimizer(instance, n, k) - q, g, c, _binary_cost = quantum_optimizer.binary_representation(x_sol=np.array(0.0, dtype=float)) - q_casted = cast("QuadraticExpression", q) - g_casted = cast("LinearExpression", g) - qp = quantum_optimizer.construct_problem(q_casted, g_casted, c) - # Instantiate the quantum optimizer class with parameters: - qc = quantum_optimizer.solve_problem(qp) - - qc.measure_all() - qc.name = "routing" - - return qc diff --git a/src/mqt/bench/benchmarks/qiskit_application_optimization/tsp.py b/src/mqt/bench/benchmarks/qiskit_application_optimization/tsp.py deleted file mode 100644 index d77d145f1..000000000 --- a/src/mqt/bench/benchmarks/qiskit_application_optimization/tsp.py +++ /dev/null @@ -1,44 +0,0 @@ -"""TSP benchmark definition. Code is based on https://qiskit.org/documentation/optimization/tutorials/06_examples_max_cut_and_tsp.html.""" - -from __future__ import annotations - -from typing import TYPE_CHECKING - -from qiskit.circuit.library import TwoLocal -from qiskit.primitives import Estimator -from qiskit_algorithms.minimum_eigensolvers import VQE -from qiskit_algorithms.optimizers import SPSA -from qiskit_optimization.applications import Tsp -from qiskit_optimization.converters import QuadraticProgramToQubo - -if TYPE_CHECKING: # pragma: no cover - from qiskit import QuantumCircuit - - -def create_circuit(num_nodes: int) -> QuantumCircuit: - """Returns a quantum circuit solving the Travelling Salesman Problem (TSP). - - Arguments: - num_nodes: number of to be visited nodes - """ - # Generating a graph of 3 nodes - n = num_nodes - tsp = Tsp.create_random_instance(n, seed=10) - - qp = tsp.to_quadratic_program() - - qp2qubo = QuadraticProgramToQubo() - qubo = qp2qubo.convert(qp) - qubit_op, _offset = qubo.to_ising() - - spsa = SPSA(maxiter=25) - ry = TwoLocal(qubit_op.num_qubits, "ry", "cz", reps=5, entanglement="linear") - vqe = VQE(ansatz=ry, optimizer=spsa, estimator=Estimator()) - vqe.random_seed = 10 - - vqe_result = vqe.compute_minimum_eigenvalue(qubit_op) - qc = vqe.ansatz.assign_parameters(vqe_result.optimal_point) - qc.measure_all() - qc.name = "tsp" - - return qc diff --git a/src/mqt/bench/benchmarks/qiskit_application_ml/qnn.py b/src/mqt/bench/benchmarks/qnn.py similarity index 100% rename from src/mqt/bench/benchmarks/qiskit_application_ml/qnn.py rename to src/mqt/bench/benchmarks/qnn.py diff --git a/src/mqt/bench/benchmarks/random.py b/src/mqt/bench/benchmarks/randomcircuit.py similarity index 91% rename from src/mqt/bench/benchmarks/random.py rename to src/mqt/bench/benchmarks/randomcircuit.py index 867a5b954..7eac2acd5 100644 --- a/src/mqt/bench/benchmarks/random.py +++ b/src/mqt/bench/benchmarks/randomcircuit.py @@ -1,4 +1,4 @@ -"""Random benchmark definition.""" # noqa: A005 +"""Random benchmark definition.""" from __future__ import annotations @@ -26,5 +26,5 @@ def create_circuit(num_qubits: int) -> QuantumCircuit: optimization_level=1, ) qc.measure_all() - qc.name = "random" + qc.name = "randomcircuit" return qc diff --git a/src/mqt/bench/benchmarks/shor.py b/src/mqt/bench/benchmarks/shor.py index 72dd0e0b0..4a5a23ea8 100644 --- a/src/mqt/bench/benchmarks/shor.py +++ b/src/mqt/bench/benchmarks/shor.py @@ -24,7 +24,6 @@ from qiskit import QuantumCircuit, QuantumRegister from qiskit.circuit import Gate, Instruction, ParameterVector from qiskit.circuit.library import QFT -from qiskit_algorithms.utils.validation import validate_min def create_circuit(num_to_be_factorized: int, a: int = 2) -> QuantumCircuit: @@ -208,11 +207,12 @@ def _validate_input(to_be_factored_number: int, a: int) -> None: ValueError: Invalid input """ - validate_min("N", to_be_factored_number, 3) - validate_min("a", a, 2) + if a < 2: + msg = f"{'a'} must have value >= {2}, was {a}" + raise ValueError(msg) - if to_be_factored_number < 1 or to_be_factored_number % 2 == 0: - msg = "The input needs to be an odd integer greater than 1." + if to_be_factored_number < 3 or to_be_factored_number % 2 == 0: + msg = "The input needs to be an odd integer greater than 3." raise ValueError(msg) if a >= to_be_factored_number or math.gcd(a, to_be_factored_number) != 1: diff --git a/src/mqt/bench/benchmarks/vqe.py b/src/mqt/bench/benchmarks/vqe.py deleted file mode 100644 index 69da9d6ef..000000000 --- a/src/mqt/bench/benchmarks/vqe.py +++ /dev/null @@ -1,39 +0,0 @@ -"""VQE benchmark definition. Code is based on https://github.com/qiskit-community/qiskit-application-modules-demo-sessions/blob/main/qiskit-optimization/qiskit-optimization-demo.ipynb.""" - -from __future__ import annotations - -from typing import TYPE_CHECKING - -from qiskit.circuit.library import RealAmplitudes -from qiskit.primitives import Estimator -from qiskit_algorithms.minimum_eigensolvers import VQE -from qiskit_algorithms.optimizers import SLSQP -from qiskit_optimization import QuadraticProgram - -from mqt.bench.utils import get_examplary_max_cut_qp - -if TYPE_CHECKING: # pragma: no cover - from qiskit import QuantumCircuit - - -def create_circuit(num_qubits: int) -> QuantumCircuit: - """Returns a quantum circuit implementing the Variational Quantum Eigensolver Algorithm for a specific max-cut example. - - Arguments: - num_qubits: number of qubits of the returned quantum circuit - - Returns: - QuantumCircuit: a quantum circuit implementing the Variational Quantum Eigensolver Algorithm for a specific - """ - qp = get_examplary_max_cut_qp(num_qubits) - assert isinstance(qp, QuadraticProgram) - - ansatz = RealAmplitudes(num_qubits, reps=2) - vqe = VQE(ansatz=ansatz, optimizer=SLSQP(maxiter=25), estimator=Estimator()) - vqe_result = vqe.compute_minimum_eigenvalue(qp.to_ising()[0]) - qc = vqe.ansatz.assign_parameters(vqe_result.optimal_point) - - qc.measure_all() - qc.name = "vqe" - - return qc diff --git a/src/mqt/bench/benchmarks/realamprandom.py b/src/mqt/bench/benchmarks/vqerealamprandom.py similarity index 96% rename from src/mqt/bench/benchmarks/realamprandom.py rename to src/mqt/bench/benchmarks/vqerealamprandom.py index 04dbfc3ee..aed6f0dcd 100644 --- a/src/mqt/bench/benchmarks/realamprandom.py +++ b/src/mqt/bench/benchmarks/vqerealamprandom.py @@ -25,6 +25,6 @@ def create_circuit(num_qubits: int) -> QuantumCircuit: num_params = qc.num_parameters qc = qc.assign_parameters(2 * np.pi * rng.random(num_params)) qc.measure_all() - qc.name = "realamprandom" + qc.name = "vqerealamprandom" return qc diff --git a/src/mqt/bench/benchmarks/su2random.py b/src/mqt/bench/benchmarks/vqesu2random.py similarity index 96% rename from src/mqt/bench/benchmarks/su2random.py rename to src/mqt/bench/benchmarks/vqesu2random.py index 8f0a9347b..42ea162f5 100644 --- a/src/mqt/bench/benchmarks/su2random.py +++ b/src/mqt/bench/benchmarks/vqesu2random.py @@ -25,6 +25,6 @@ def create_circuit(num_qubits: int) -> QuantumCircuit: num_params = qc.num_parameters qc = qc.assign_parameters(2 * np.pi * rng.random(num_params)) qc.measure_all() - qc.name = "su2random" + qc.name = "vqesu2random" return qc diff --git a/src/mqt/bench/benchmarks/twolocalrandom.py b/src/mqt/bench/benchmarks/vqetwolocalrandom.py similarity index 96% rename from src/mqt/bench/benchmarks/twolocalrandom.py rename to src/mqt/bench/benchmarks/vqetwolocalrandom.py index 037d7ca86..c0ba611e0 100644 --- a/src/mqt/bench/benchmarks/twolocalrandom.py +++ b/src/mqt/bench/benchmarks/vqetwolocalrandom.py @@ -25,6 +25,6 @@ def create_circuit(num_qubits: int) -> QuantumCircuit: num_params = qc.num_parameters qc = qc.assign_parameters(2 * np.pi * rng.random(num_params)) qc.measure_all() - qc.name = "twolocalrandom" + qc.name = "vqetwolocalrandom" return qc diff --git a/src/mqt/bench/calibration_files/ibm_montreal_calibration.json b/src/mqt/bench/calibration_files/ibm_montreal_calibration.json deleted file mode 100644 index 93dcd9c2e..000000000 --- a/src/mqt/bench/calibration_files/ibm_montreal_calibration.json +++ /dev/null @@ -1,426 +0,0 @@ -{ - "name": "ibm_montreal", - "num_qubits": 27, - "basis_gates": ["id", "rz", "sx", "x", "cx", "measure", "barrier"], - "connectivity": [ - [0, 1], - [1, 0], - [1, 2], - [1, 4], - [2, 1], - [2, 3], - [3, 2], - [3, 5], - [4, 1], - [4, 7], - [5, 3], - [5, 8], - [6, 7], - [7, 4], - [7, 6], - [7, 10], - [8, 5], - [8, 9], - [8, 11], - [9, 8], - [10, 7], - [10, 12], - [11, 8], - [11, 14], - [12, 10], - [12, 13], - [12, 15], - [13, 12], - [13, 14], - [14, 11], - [14, 13], - [14, 16], - [15, 12], - [15, 18], - [16, 14], - [16, 19], - [17, 18], - [18, 15], - [18, 17], - [18, 21], - [19, 16], - [19, 20], - [19, 22], - [20, 19], - [21, 18], - [21, 23], - [22, 19], - [22, 25], - [23, 21], - [23, 24], - [24, 23], - [24, 25], - [25, 22], - [25, 24], - [25, 26], - [26, 25] - ], - "properties": { - "0": { - "T1": 71.66672291703205, - "T2": 7.112762140066229, - "eRO": 0.0938, - "tRO": 5201.777777777777, - "eID": 0.0010518203623417416, - "eSX": 0.0010518203623417416, - "eX": 0.0010518203623417416, - "eCX": { "0_1": 0.019235556262839848 }, - "tCX": { "0_1": 384 } - }, - "1": { - "T1": 64.66507592010221, - "T2": 7.681003865655532, - "eRO": 0.07940000000000003, - "tRO": 5201.777777777777, - "eID": 0.0006927722309073223, - "eSX": 0.0006927722309073223, - "eX": 0.0006927722309073223, - "eCX": { - "1_4": 0.023429394122931796, - "1_2": 0.03009867438057126, - "1_0": 0.019235556262839848 - }, - "tCX": { - "1_4": 526.2222222222222, - "1_2": 568.8888888888889, - "1_0": 419.55555555555554 - } - }, - "2": { - "T1": 49.908817200355, - "T2": 6.754112230265546, - "eRO": 0.0928, - "tRO": 5201.777777777777, - "eID": 0.0009197035609403231, - "eSX": 0.0009197035609403231, - "eX": 0.0009197035609403231, - "eCX": { "2_3": 0.023413172409800398, "2_1": 0.03009867438057126 }, - "tCX": { "2_3": 405.3333333333333, "2_1": 533.3333333333333 } - }, - "3": { - "T1": 58.025329689987004, - "T2": 7.334818899642508, - "eRO": 0.07709999999999995, - "tRO": 5201.777777777777, - "eID": 0.0006740046038981555, - "eSX": 0.0006740046038981555, - "eX": 0.0006740046038981555, - "eCX": { "3_5": 0.02590167633562271, "3_2": 0.023413172409800398 }, - "tCX": { "3_5": 398.2222222222222, "3_2": 369.77777777777777 } - }, - "4": { - "T1": 99.45976032088674, - "T2": 7.584520400893627, - "eRO": 0.09759999999999991, - "tRO": 5201.777777777777, - "eID": 0.0007435779250637797, - "eSX": 0.0007435779250637797, - "eX": 0.0007435779250637797, - "eCX": { "4_7": 0.020766456691068497, "4_1": 0.023429394122931796 }, - "tCX": { "4_7": 284.44444444444446, "4_1": 561.7777777777777 } - }, - "5": { - "T1": 28.230364723457136, - "T2": 4.399137221277155, - "eRO": 0.13280000000000003, - "tRO": 5201.777777777777, - "eID": 0.0028667893889678486, - "eSX": 0.0028667893889678486, - "eX": 0.0028667893889678486, - "eCX": { "5_3": 0.02590167633562271, "5_8": 0.02760597906236456 }, - "tCX": { "5_3": 362.66666666666663, "5_8": 355.55555555555554 } - }, - "6": { - "T1": 128.0652127389986, - "T2": 5.9139547843874025, - "eRO": 0.1794, - "tRO": 5201.777777777777, - "eID": 0.0007316153886784232, - "eSX": 0.0007316153886784232, - "eX": 0.0007316153886784232, - "eCX": { "6_7": 0.030234939462440824 }, - "tCX": { "6_7": 526.2222222222222 } - }, - "7": { - "T1": 94.96280704315383, - "T2": 6.206525824711734, - "eRO": 0.21089999999999998, - "tRO": 5201.777777777777, - "eID": 0.0007412208999774296, - "eSX": 0.0007412208999774296, - "eX": 0.0007412208999774296, - "eCX": { - "7_10": 0.05091381677485815, - "7_6": 0.030234939462440824, - "7_4": 0.020766456691068497 - }, - "tCX": { - "7_10": 1059.5555555555554, - "7_6": 490.66666666666663, - "7_4": 320 - } - }, - "8": { - "T1": 92.56327355414118, - "T2": 7.738098089400849, - "eRO": 0.09199999999999997, - "tRO": 5201.777777777777, - "eID": 0.0008290924103647915, - "eSX": 0.0008290924103647915, - "eX": 0.0008290924103647915, - "eCX": { - "8_9": 0.018568259254578307, - "8_11": 0.026158348483140276, - "8_5": 0.02760597906236456 - }, - "tCX": { - "8_9": 405.3333333333333, - "8_11": 483.55555555555554, - "8_5": 391.1111111111111 - } - }, - "9": { - "T1": 76.54950481273094, - "T2": 8.662755001877471, - "eRO": 0.07780000000000009, - "tRO": 5201.777777777777, - "eID": 0.0007795177139074391, - "eSX": 0.0007795177139074391, - "eX": 0.0007795177139074391, - "eCX": { "9_8": 0.018568259254578307 }, - "tCX": { "9_8": 369.77777777777777 } - }, - "10": { - "T1": 49.21451672208631, - "T2": 6.987492990379841, - "eRO": 0.0726, - "tRO": 5201.777777777777, - "eID": 0.0008075297219840171, - "eSX": 0.0008075297219840171, - "eX": 0.0008075297219840171, - "eCX": { "10_7": 0.05091381677485815, "10_12": 0.03613773720461208 }, - "tCX": { "10_7": 1024, "10_12": 412.4444444444444 } - }, - "11": { - "T1": 97.19826382613067, - "T2": 5.251464246513595, - "eRO": 0.08079999999999998, - "tRO": 5201.777777777777, - "eID": 0.0008521765546116179, - "eSX": 0.0008521765546116179, - "eX": 0.0008521765546116179, - "eCX": { "11_14": 0.019395692937878822, "11_8": 0.026158348483140276 }, - "tCX": { "11_14": 341.3333333333333, "11_8": 448 } - }, - "12": { - "T1": 62.763979533681855, - "T2": 2.7323151883970964, - "eRO": 0.09289999999999998, - "tRO": 5201.777777777777, - "eID": 0.0024782168308529824, - "eSX": 0.0024782168308529824, - "eX": 0.0024782168308529824, - "eCX": { - "12_15": 0.038963765783884496, - "12_13": 0.04810986531286929, - "12_10": 0.03613773720461208 - }, - "tCX": { - "12_15": 405.3333333333333, - "12_13": 391.1111111111111, - "12_10": 376.88888888888886 - } - }, - "13": { - "T1": 82.14667944835949, - "T2": 4.75194977220945, - "eRO": 0.08409999999999995, - "tRO": 5201.777777777777, - "eID": 0.0013638449728659565, - "eSX": 0.0013638449728659565, - "eX": 0.0013638449728659565, - "eCX": { "13_12": 0.04810986531286929, "13_14": 0.03515134344366225 }, - "tCX": { "13_12": 426.66666666666663, "13_14": 490.66666666666663 } - }, - "14": { - "T1": 101.3516091045827, - "T2": 7.150020502550195, - "eRO": 0.08660000000000001, - "tRO": 5201.777777777777, - "eID": 0.0008924277390830977, - "eSX": 0.0008924277390830977, - "eX": 0.0008924277390830977, - "eCX": { - "14_16": 0.017672309126417873, - "14_11": 0.019395692937878822, - "14_13": 0.03515134344366225 - }, - "tCX": { - "14_16": 355.55555555555554, - "14_11": 376.88888888888886, - "14_13": 526.2222222222222 - } - }, - "15": { - "T1": 119.70155831502971, - "T2": 6.808538026290434, - "eRO": 0.08519999999999994, - "tRO": 5201.777777777777, - "eID": 0.0009953754724409574, - "eSX": 0.0009953754724409574, - "eX": 0.0009953754724409574, - "eCX": { "15_18": 0.03174109991617888, "15_12": 0.038963765783884496 }, - "tCX": { "15_18": 597.3333333333333, "15_12": 369.77777777777777 } - }, - "16": { - "T1": 99.24189585218217, - "T2": 5.731781942310519, - "eRO": 0.07769999999999999, - "tRO": 5201.777777777777, - "eID": 0.0009763382374726048, - "eSX": 0.0009763382374726048, - "eX": 0.0009763382374726048, - "eCX": { "16_19": 0.020968638393350808, "16_14": 0.017672309126417873 }, - "tCX": { "16_19": 270.22222222222223, "16_14": 320 } - }, - "17": { - "T1": 60.996936524913664, - "T2": 6.128828530429623, - "eRO": 0.08610000000000007, - "tRO": 5201.777777777777, - "eID": 0.0008231438365734483, - "eSX": 0.0008231438365734483, - "eX": 0.0008231438365734483, - "eCX": { "17_18": 0.021370531195367665 }, - "tCX": { "17_18": 348.4444444444444 } - }, - "18": { - "T1": 72.6975470835247, - "T2": 6.141018020800822, - "eRO": 0.10960000000000003, - "tRO": 5201.777777777777, - "eID": 0.001075126508100258, - "eSX": 0.001075126508100258, - "eX": 0.001075126508100258, - "eCX": { - "18_21": 0.027167558998595437, - "18_15": 0.03174109991617888, - "18_17": 0.021370531195367665 - }, - "tCX": { - "18_21": 440.88888888888886, - "18_15": 632.8888888888888, - "18_17": 384 - } - }, - "19": { - "T1": 49.48945759427588, - "T2": 7.070086207254359, - "eRO": 0.09399999999999997, - "tRO": 5201.777777777777, - "eID": 0.0007754869465086841, - "eSX": 0.0007754869465086841, - "eX": 0.0007754869465086841, - "eCX": { - "19_22": 0.02029345822862655, - "19_16": 0.020968638393350808, - "19_20": 0.018880215750069623 - }, - "tCX": { - "19_22": 327.1111111111111, - "19_16": 305.77777777777777, - "19_20": 355.55555555555554 - } - }, - "20": { - "T1": 112.83967472627702, - "T2": 8.822478037091743, - "eRO": 0.07420000000000004, - "tRO": 5201.777777777777, - "eID": 0.0006592131802886608, - "eSX": 0.0006592131802886608, - "eX": 0.0006592131802886608, - "eCX": { "20_19": 0.018880215750069623 }, - "tCX": { "20_19": 320 } - }, - "21": { - "T1": 84.30472917229271, - "T2": 6.720184243797487, - "eRO": 0.11319999999999997, - "tRO": 5201.777777777777, - "eID": 0.0009421203058207778, - "eSX": 0.0009421203058207778, - "eX": 0.0009421203058207778, - "eCX": { "21_18": 0.027167558998595437, "21_23": 0.018062254377289116 }, - "tCX": { "21_18": 405.3333333333333, "21_23": 426.66666666666663 } - }, - "22": { - "T1": 106.19453574946131, - "T2": 8.178786305512608, - "eRO": 0.07909999999999995, - "tRO": 5201.777777777777, - "eID": 0.0012060940334783464, - "eSX": 0.0012060940334783464, - "eX": 0.0012060940334783464, - "eCX": { "22_19": 0.02029345822862655, "22_25": 0.031187785577445087 }, - "tCX": { "22_19": 291.55555555555554, "22_25": 611.5555555555555 } - }, - "23": { - "T1": 51.72708626720041, - "T2": 5.239066706028801, - "eRO": 0.08220000000000005, - "tRO": 5201.777777777777, - "eID": 0.0007402065734556359, - "eSX": 0.0007402065734556359, - "eX": 0.0007402065734556359, - "eCX": { "23_24": 0.02237554712385767, "23_21": 0.018062254377289116 }, - "tCX": { "23_24": 405.3333333333333, "23_21": 391.1111111111111 } - }, - "24": { - "T1": 78.6264732783898, - "T2": 5.58819526810166, - "eRO": 0.10129999999999995, - "tRO": 5201.777777777777, - "eID": 0.0008117959568067544, - "eSX": 0.0008117959568067544, - "eX": 0.0008117959568067544, - "eCX": { "24_23": 0.02237554712385767, "24_25": 0.02299926454286011 }, - "tCX": { "24_23": 440.88888888888886, "24_25": 376.88888888888886 } - }, - "25": { - "T1": 80.05589287367846, - "T2": 5.572164782651632, - "eRO": 0.0817000000000001, - "tRO": 5201.777777777777, - "eID": 0.0011198999935133345, - "eSX": 0.0011198999935133345, - "eX": 0.0011198999935133345, - "eCX": { - "25_24": 0.02299926454286011, - "25_26": 0.028456127532710235, - "25_22": 0.031187785577445087 - }, - "tCX": { - "25_24": 412.4444444444444, - "25_26": 483.55555555555554, - "25_22": 576 - } - }, - "26": { - "T1": 87.6395983328302, - "T2": 8.828892257055283, - "eRO": 0.08440000000000003, - "tRO": 5201.777777777777, - "eID": 0.0005962768633409694, - "eSX": 0.0005962768633409694, - "eX": 0.0005962768633409694, - "eCX": { "26_25": 0.028456127532710235 }, - "tCX": { "26_25": 519.1111111111111 } - } - } -} diff --git a/src/mqt/bench/calibration_files/ibm_washington_calibration.json b/src/mqt/bench/calibration_files/ibm_washington_calibration.json deleted file mode 100644 index f2e186a78..000000000 --- a/src/mqt/bench/calibration_files/ibm_washington_calibration.json +++ /dev/null @@ -1,2014 +0,0 @@ -{ - "name": "ibm_washington", - "num_qubits": 127, - "basis_gates": ["id", "rz", "sx", "x", "cx", "measure", "barrier"], - "connectivity": [ - [0, 1], - [0, 14], - [1, 0], - [1, 2], - [2, 1], - [2, 3], - [3, 2], - [3, 4], - [4, 3], - [4, 5], - [4, 15], - [5, 4], - [5, 6], - [6, 5], - [6, 7], - [7, 6], - [7, 8], - [8, 7], - [8, 16], - [9, 10], - [10, 9], - [10, 11], - [11, 10], - [11, 12], - [12, 11], - [12, 13], - [12, 17], - [13, 12], - [14, 0], - [14, 18], - [15, 4], - [15, 22], - [16, 8], - [16, 26], - [17, 12], - [17, 30], - [18, 14], - [18, 19], - [19, 18], - [19, 20], - [20, 19], - [20, 21], - [20, 33], - [21, 20], - [21, 22], - [22, 15], - [22, 21], - [22, 23], - [23, 22], - [23, 24], - [24, 23], - [24, 25], - [24, 34], - [25, 24], - [25, 26], - [26, 16], - [26, 25], - [26, 27], - [27, 26], - [27, 28], - [28, 27], - [28, 29], - [28, 35], - [29, 28], - [29, 30], - [30, 17], - [30, 29], - [30, 31], - [31, 30], - [31, 32], - [32, 31], - [32, 36], - [33, 20], - [33, 39], - [34, 24], - [34, 43], - [35, 28], - [35, 47], - [36, 32], - [36, 51], - [37, 38], - [37, 52], - [38, 37], - [38, 39], - [39, 33], - [39, 38], - [39, 40], - [40, 39], - [40, 41], - [41, 40], - [41, 42], - [41, 53], - [42, 41], - [42, 43], - [43, 34], - [43, 42], - [43, 44], - [44, 43], - [44, 45], - [45, 44], - [45, 46], - [45, 54], - [46, 45], - [46, 47], - [47, 35], - [47, 46], - [47, 48], - [48, 47], - [48, 49], - [49, 48], - [49, 50], - [49, 55], - [50, 49], - [50, 51], - [51, 36], - [51, 50], - [52, 37], - [52, 56], - [53, 41], - [53, 60], - [54, 45], - [54, 64], - [55, 49], - [55, 68], - [56, 52], - [56, 57], - [57, 56], - [57, 58], - [58, 57], - [58, 59], - [58, 71], - [59, 58], - [59, 60], - [60, 53], - [60, 59], - [60, 61], - [61, 60], - [61, 62], - [62, 61], - [62, 63], - [62, 72], - [63, 62], - [63, 64], - [64, 54], - [64, 63], - [64, 65], - [65, 64], - [65, 66], - [66, 65], - [66, 67], - [66, 73], - [67, 66], - [67, 68], - [68, 55], - [68, 67], - [68, 69], - [69, 68], - [69, 70], - [70, 69], - [70, 74], - [71, 58], - [71, 77], - [72, 62], - [72, 81], - [73, 66], - [73, 85], - [74, 70], - [74, 89], - [75, 76], - [75, 90], - [76, 75], - [76, 77], - [77, 71], - [77, 76], - [77, 78], - [78, 77], - [78, 79], - [79, 78], - [79, 80], - [79, 91], - [80, 79], - [80, 81], - [81, 72], - [81, 80], - [81, 82], - [82, 81], - [82, 83], - [83, 82], - [83, 84], - [83, 92], - [84, 83], - [84, 85], - [85, 73], - [85, 84], - [85, 86], - [86, 85], - [86, 87], - [87, 86], - [87, 88], - [87, 93], - [88, 87], - [88, 89], - [89, 74], - [89, 88], - [90, 75], - [90, 94], - [91, 79], - [91, 98], - [92, 83], - [92, 102], - [93, 87], - [93, 106], - [94, 90], - [94, 95], - [95, 94], - [95, 96], - [96, 95], - [96, 97], - [96, 109], - [97, 96], - [97, 98], - [98, 91], - [98, 97], - [98, 99], - [99, 98], - [99, 100], - [100, 99], - [100, 101], - [100, 110], - [101, 100], - [101, 102], - [102, 92], - [102, 101], - [102, 103], - [103, 102], - [103, 104], - [104, 103], - [104, 105], - [104, 111], - [105, 104], - [105, 106], - [106, 93], - [106, 105], - [106, 107], - [107, 106], - [107, 108], - [108, 107], - [108, 112], - [109, 96], - [110, 100], - [110, 118], - [111, 104], - [111, 122], - [112, 108], - [112, 126], - [113, 114], - [114, 113], - [114, 115], - [115, 114], - [115, 116], - [116, 115], - [116, 117], - [117, 116], - [117, 118], - [118, 110], - [118, 117], - [118, 119], - [119, 118], - [119, 120], - [120, 119], - [120, 121], - [121, 120], - [121, 122], - [122, 111], - [122, 121], - [122, 123], - [123, 122], - [123, 124], - [124, 123], - [124, 125], - [125, 124], - [125, 126], - [126, 112], - [126, 125] - ], - "properties": { - "0": { - "T1": 87.09260002558416, - "T2": 11.072975771977102, - "eRO": 0.0024999999999999467, - "tRO": 864, - "eID": 0.00028682547409006727, - "eSX": 0.00028682547409006727, - "eX": 0.00028682547409006727, - "eCX": { "0_14": 0.011722654311785735, "0_1": 0.013351301758041306 }, - "tCX": { "0_14": 519.1111111111111, "0_1": 853.3333333333333 } - }, - "1": { - "T1": 97.7204901211154, - "T2": 97.84643458913281, - "eRO": 0.0020000000000000018, - "tRO": 864, - "eID": 0.0001669624730417375, - "eSX": 0.0001669624730417375, - "eX": 0.0001669624730417375, - "eCX": { "1_2": 0.015797985393789904, "1_0": 0.013351301758041306 }, - "tCX": { "1_2": 298.66666666666663, "1_0": 817.7777777777777 } - }, - "2": { - "T1": 96.02233273070243, - "T2": 15.711774971872142, - "eRO": 0.025700000000000056, - "tRO": 864, - "eID": 0.000267416108486628, - "eSX": 0.000267416108486628, - "eX": 0.000267416108486628, - "eCX": { "2_3": 0.010583055358179994, "2_1": 0.015797985393789904 }, - "tCX": { "2_3": 462.2222222222222, "2_1": 334.22222222222223 } - }, - "3": { - "T1": 104.15757403931073, - "T2": 30.95731306903599, - "eRO": 0.09800000000000009, - "tRO": 864, - "eID": 0.00047155843582770884, - "eSX": 0.00047155843582770884, - "eX": 0.00047155843582770884, - "eCX": { "3_4": 0.023794650758814595, "3_2": 0.010583055358179994 }, - "tCX": { "3_4": 775.1111111111111, "3_2": 497.77777777777777 } - }, - "4": { - "T1": 42.958876903045066, - "T2": 81.78491335656253, - "eRO": 0.3436, - "tRO": 864, - "eID": 0.0013268248525471695, - "eSX": 0.0013268248525471695, - "eX": 0.0013268248525471695, - "eCX": { - "4_15": 0.012809157786878689, - "4_3": 0.023794650758814595, - "4_5": 0.01538130267051635 - }, - "tCX": { - "4_15": 689.7777777777777, - "4_3": 810.6666666666666, - "4_5": 760.8888888888888 - } - }, - "5": { - "T1": 127.03294165942658, - "T2": 125.63705065266883, - "eRO": 0.0817, - "tRO": 864, - "eID": 0.0006235865820115135, - "eSX": 0.0006235865820115135, - "eX": 0.0006235865820115135, - "eCX": { "5_6": 0.006606098582958214, "5_4": 0.01538130267051635 }, - "tCX": { "5_6": 405.3333333333333, "5_4": 725.3333333333333 } - }, - "6": { - "T1": 102.15415792150624, - "T2": 168.83797904645613, - "eRO": 0.04630000000000001, - "tRO": 864, - "eID": 0.00030645217010972034, - "eSX": 0.00030645217010972034, - "eX": 0.00030645217010972034, - "eCX": { "6_5": 0.006606098582958214, "6_7": 0.00847894332457752 }, - "tCX": { "6_5": 369.77777777777777, "6_7": 455.1111111111111 } - }, - "7": { - "T1": 89.75859989817073, - "T2": 73.39570873465864, - "eRO": 0.0043999999999999595, - "tRO": 864, - "eID": 0.0002972571137020554, - "eSX": 0.0002972571137020554, - "eX": 0.0002972571137020554, - "eCX": { "7_8": 0.01112359466999338, "7_6": 0.00847894332457752 }, - "tCX": { "7_8": 533.3333333333333, "7_6": 419.55555555555554 } - }, - "8": { - "T1": 93.03513604019784, - "T2": 115.73767398239141, - "eRO": 0.010599999999999943, - "tRO": 864, - "eID": 0.00031693632353316443, - "eSX": 0.00031693632353316443, - "eX": 0.00031693632353316443, - "eCX": { "8_16": 0.030987911356317954, "8_7": 0.01112359466999338 }, - "tCX": { "8_16": 391.1111111111111, "8_7": 568.8888888888889 } - }, - "9": { - "T1": 116.1197861043309, - "T2": 13.966133982877633, - "eRO": 0.3095, - "tRO": 864, - "eID": 0.007677902049880135, - "eSX": 0.007677902049880135, - "eX": 0.007677902049880135, - "eCX": { "9_10": 0.09599291096958273 }, - "tCX": { "9_10": 1009.7777777777777 } - }, - "10": { - "T1": 168.09006046602374, - "T2": 17.87252145681176, - "eRO": 0.13959999999999995, - "tRO": 864, - "eID": 0.009247265691757843, - "eSX": 0.009247265691757843, - "eX": 0.009247265691757843, - "eCX": { "10_11": 0.049086362284502943, "10_9": 0.09599291096958273 }, - "tCX": { "10_11": 1130.6666666666665, "10_9": 974.2222222222222 } - }, - "11": { - "T1": 139.4033866806111, - "T2": 27.11938585753691, - "eRO": 0.29100000000000004, - "tRO": 864, - "eID": 0.0037723480547889377, - "eSX": 0.0037723480547889377, - "eX": 0.0037723480547889377, - "eCX": { "11_10": 0.049086362284502943, "11_12": 0.05989626134191309 }, - "tCX": { "11_10": 1166.2222222222222, "11_12": 796.4444444444443 } - }, - "12": { - "T1": 151.9505915916196, - "T2": 24.56241376137705, - "eRO": 0.4788, - "tRO": 864, - "eID": 0.0025979584952065525, - "eSX": 0.0025979584952065525, - "eX": 0.0025979584952065525, - "eCX": { - "12_17": 0.05120980561608421, - "12_13": 0.011509961500424243, - "12_11": 0.05989626134191309 - }, - "tCX": { - "12_17": 846.2222222222222, - "12_13": 490.66666666666663, - "12_11": 832 - } - }, - "13": { - "T1": 58.04868582351983, - "T2": 10.564242807845805, - "eRO": 0.019499999999999962, - "tRO": 864, - "eID": 0.00036834278795276236, - "eSX": 0.00036834278795276236, - "eX": 0.00036834278795276236, - "eCX": { "13_12": 0.011509961500424243 }, - "tCX": { "13_12": 455.1111111111111 } - }, - "14": { - "T1": 100.85934768123371, - "T2": 104.20771388143798, - "eRO": 0.0129999999999999, - "tRO": 864, - "eID": 0.0002904652373611458, - "eSX": 0.0002904652373611458, - "eX": 0.0002904652373611458, - "eCX": { "14_0": 0.011722654311785735, "14_18": 0.0076584428129527204 }, - "tCX": { "14_0": 483.55555555555554, "14_18": 355.55555555555554 } - }, - "15": { - "T1": 68.93896004309661, - "T2": 62.63893913138886, - "eRO": 0.013400000000000079, - "tRO": 864, - "eID": 0.0013761785752297083, - "eSX": 0.0013761785752297083, - "eX": 0.0013761785752297083, - "eCX": { "15_22": 0.026766001427731695, "15_4": 0.012809157786878689 }, - "tCX": { "15_22": 753.7777777777777, "15_4": 654.2222222222222 } - }, - "16": { - "T1": 115.34191845623879, - "T2": 222.92520942643472, - "eRO": 0.0031999999999999806, - "tRO": 864, - "eID": 0.000162437999956314, - "eSX": 0.000162437999956314, - "eX": 0.000162437999956314, - "eCX": { "16_8": 0.030987911356317954, "16_26": 0.01196827924074953 }, - "tCX": { "16_8": 426.66666666666663, "16_26": 348.4444444444444 } - }, - "17": { - "T1": 19.904099488624958, - "T2": 19.079955410704727, - "eRO": 0.0495000000000001, - "tRO": 864, - "eID": 0.0003624096224452838, - "eSX": 0.0003624096224452838, - "eX": 0.0003624096224452838, - "eCX": { "17_30": 0.009899095240941319, "17_12": 0.05120980561608421 }, - "tCX": { "17_30": 384, "17_12": 881.7777777777777 } - }, - "18": { - "T1": 53.78223276777933, - "T2": 143.44053111854163, - "eRO": 0.04499999999999993, - "tRO": 864, - "eID": 0.0001894782606947969, - "eSX": 0.0001894782606947969, - "eX": 0.0001894782606947969, - "eCX": { "18_19": 0.007408571391818913, "18_14": 0.0076584428129527204 }, - "tCX": { "18_19": 405.3333333333333, "18_14": 391.1111111111111 } - }, - "19": { - "T1": 84.81033761157866, - "T2": 125.28859431320562, - "eRO": 0.015199999999999991, - "tRO": 864, - "eID": 0.00021070622171689345, - "eSX": 0.00021070622171689345, - "eX": 0.00021070622171689345, - "eCX": { "19_18": 0.007408571391818913, "19_20": 0.013554132261585222 }, - "tCX": { "19_18": 369.77777777777777, "19_20": 348.4444444444444 } - }, - "20": { - "T1": 104.02307159729244, - "T2": 70.9123254479678, - "eRO": 0.010099999999999998, - "tRO": 864, - "eID": 0.0004799541023149979, - "eSX": 0.0004799541023149979, - "eX": 0.0004799541023149979, - "eCX": { - "20_33": 0.028269705771342107, - "20_19": 0.013554132261585222, - "20_21": 0.012423173975614404 - }, - "tCX": { - "20_33": 398.2222222222222, - "20_19": 384, - "20_21": 810.6666666666666 - } - }, - "21": { - "T1": 109.04553466074397, - "T2": 109.43777415555344, - "eRO": 0.006800000000000028, - "tRO": 864, - "eID": 0.00023710277912439867, - "eSX": 0.00023710277912439867, - "eX": 0.00023710277912439867, - "eCX": { "21_22": 0.017058339175159865, "21_20": 0.012423173975614404 }, - "tCX": { "21_22": 590.2222222222222, "21_20": 846.2222222222222 } - }, - "22": { - "T1": 93.24941190135648, - "T2": 51.28846320689741, - "eRO": 0.024499999999999966, - "tRO": 864, - "eID": 0.00037642319492437826, - "eSX": 0.00037642319492437826, - "eX": 0.00037642319492437826, - "eCX": { - "22_15": 0.026766001427731695, - "22_21": 0.017058339175159865, - "22_23": 0.012316167038532555 - }, - "tCX": { - "22_15": 789.3333333333333, - "22_21": 625.7777777777777, - "22_23": 583.1111111111111 - } - }, - "23": { - "T1": 90.0093309740558, - "T2": 120.35191145294434, - "eRO": 0.01629999999999998, - "tRO": 864, - "eID": 0.0002671206577218262, - "eSX": 0.0002671206577218262, - "eX": 0.0002671206577218262, - "eCX": { "23_22": 0.012316167038532555, "23_24": 0.018176604562083087 }, - "tCX": { "23_22": 547.5555555555555, "23_24": 846.2222222222222 } - }, - "24": { - "T1": 140.50222441683195, - "T2": 131.5844812898152, - "eRO": 0.04289999999999994, - "tRO": 864, - "eID": 0.0028157266058212497, - "eSX": 0.0028157266058212497, - "eX": 0.0028157266058212497, - "eCX": { - "24_34": 0.02487067929624706, - "24_23": 0.018176604562083087, - "24_25": 0.01010850440097727 - }, - "tCX": { - "24_34": 952.8888888888888, - "24_23": 881.7777777777777, - "24_25": 455.1111111111111 - } - }, - "25": { - "T1": 142.60467138693255, - "T2": 145.43738293061062, - "eRO": 0.01200000000000001, - "tRO": 864, - "eID": 0.00018520485805629126, - "eSX": 0.00018520485805629126, - "eX": 0.00018520485805629126, - "eCX": { "25_26": 0.011301460304009053, "25_24": 0.01010850440097727 }, - "tCX": { "25_26": 462.2222222222222, "25_24": 419.55555555555554 } - }, - "26": { - "T1": 55.28641317460338, - "T2": 167.03388485324027, - "eRO": 0.0041999999999999815, - "tRO": 864, - "eID": 0.0002190516583137885, - "eSX": 0.0002190516583137885, - "eX": 0.0002190516583137885, - "eCX": { - "26_25": 0.011301460304009053, - "26_27": 0.011391807502226237, - "26_16": 0.01196827924074953 - }, - "tCX": { - "26_25": 426.66666666666663, - "26_27": 384, - "26_16": 312.88888888888886 - } - }, - "27": { - "T1": 76.81211081001584, - "T2": 26.480226835617884, - "eRO": 0.10719999999999996, - "tRO": 864, - "eID": 0.00027722993504227325, - "eSX": 0.00027722993504227325, - "eX": 0.00027722993504227325, - "eCX": { "27_28": 0.019178207851474643, "27_26": 0.011391807502226237 }, - "tCX": { "27_28": 1009.7777777777777, "27_26": 348.4444444444444 } - }, - "28": { - "T1": 97.78238137591214, - "T2": 79.34125257699658, - "eRO": 0.007000000000000006, - "tRO": 864, - "eID": 0.00021003373518533453, - "eSX": 0.00021003373518533453, - "eX": 0.00021003373518533453, - "eCX": { - "28_35": 0.05220426326988978, - "28_27": 0.019178207851474643, - "28_29": 0.00991871017755841 - }, - "tCX": { - "28_35": 1123.5555555555554, - "28_27": 1045.3333333333333, - "28_29": 412.4444444444444 - } - }, - "29": { - "T1": 138.67586759040512, - "T2": 15.957508838739638, - "eRO": 0.08350000000000002, - "tRO": 864, - "eID": 0.00039803749526520467, - "eSX": 0.00039803749526520467, - "eX": 0.00039803749526520467, - "eCX": { "29_30": 0.009294437258379529, "29_28": 0.00991871017755841 }, - "tCX": { "29_30": 568.8888888888889, "29_28": 448 } - }, - "30": { - "T1": 172.12170551180503, - "T2": 230.2601374389926, - "eRO": 0.0024999999999999467, - "tRO": 864, - "eID": 0.00022236243920587947, - "eSX": 0.00022236243920587947, - "eX": 0.00022236243920587947, - "eCX": { - "30_31": 0.007258526187827741, - "30_29": 0.009294437258379529, - "30_17": 0.009899095240941319 - }, - "tCX": { - "30_31": 469.3333333333333, - "30_29": 604.4444444444445, - "30_17": 419.55555555555554 - } - }, - "31": { - "T1": 75.68747039357015, - "T2": 58.04069709192274, - "eRO": 0.00550000000000006, - "tRO": 864, - "eID": 0.00033352199985688217, - "eSX": 0.00033352199985688217, - "eX": 0.00033352199985688217, - "eCX": { "31_30": 0.007258526187827741, "31_32": 0.006992871401972661 }, - "tCX": { "31_30": 433.77777777777777, "31_32": 362.66666666666663 } - }, - "32": { - "T1": 99.22761684965414, - "T2": 33.54986666122251, - "eRO": 0.0050000000000000044, - "tRO": 864, - "eID": 0.0002107666739874187, - "eSX": 0.0002107666739874187, - "eX": 0.0002107666739874187, - "eCX": { "32_36": 0.006622079870259173, "32_31": 0.006992871401972661 }, - "tCX": { "32_36": 320, "32_31": 327.1111111111111 } - }, - "33": { - "T1": 103.6123835220194, - "T2": 63.243287104322185, - "eRO": 0.09749999999999992, - "tRO": 864, - "eID": 0.0012684476916216003, - "eSX": 0.0012684476916216003, - "eX": 0.0012684476916216003, - "eCX": { "33_20": 0.028269705771342107, "33_39": 1 }, - "tCX": { "33_20": 362.66666666666663, "33_39": 448 } - }, - "34": { - "T1": 95.79222802395971, - "T2": 126.66082416511802, - "eRO": 0.012299999999999978, - "tRO": 864, - "eID": 0.00025795821814896604, - "eSX": 0.00025795821814896604, - "eX": 0.00025795821814896604, - "eCX": { "34_43": 0.008758987321571376, "34_24": 0.02487067929624706 }, - "tCX": { "34_43": 483.55555555555554, "34_24": 917.3333333333333 } - }, - "35": { - "T1": 31.020437018861596, - "T2": 13.086089466892021, - "eRO": 0.013500000000000068, - "tRO": 864, - "eID": 0.0013129534024471515, - "eSX": 0.0013129534024471515, - "eX": 0.0013129534024471515, - "eCX": { "35_28": 0.05220426326988978, "35_47": 0.016124868126858927 }, - "tCX": { "35_28": 1088, "35_47": 376.88888888888886 } - }, - "36": { - "T1": 137.5441549672128, - "T2": 117.97011052489793, - "eRO": 0.008799999999999919, - "tRO": 864, - "eID": 0.00031496579107558926, - "eSX": 0.00031496579107558926, - "eX": 0.00031496579107558926, - "eCX": { "36_32": 0.006622079870259173, "36_51": 0.009507086606510617 }, - "tCX": { "36_32": 355.55555555555554, "36_51": 433.77777777777777 } - }, - "37": { - "T1": 75.83749017709559, - "T2": 68.36954255695203, - "eRO": 0.030100000000000016, - "tRO": 864, - "eID": 0.001279932451812516, - "eSX": 0.001279932451812516, - "eX": 0.001279932451812516, - "eCX": { "37_52": 0.0182066469353247, "37_38": 0.013074596772075425 }, - "tCX": { "37_52": 1016.8888888888888, "37_38": 462.2222222222222 } - }, - "38": { - "T1": 82.58780258708283, - "T2": 103.04689828901415, - "eRO": 0.009500000000000064, - "tRO": 864, - "eID": 0.0002949312873746432, - "eSX": 0.0002949312873746432, - "eX": 0.0002949312873746432, - "eCX": { "38_39": 0.009071400199297391, "38_37": 0.013074596772075425 }, - "tCX": { "38_39": 483.55555555555554, "38_37": 426.66666666666663 } - }, - "39": { - "T1": 82.19930646849159, - "T2": 145.94111118280063, - "eRO": 0.011400000000000077, - "tRO": 864, - "eID": 0.0005713458173118502, - "eSX": 0.0005713458173118502, - "eX": 0.0005713458173118502, - "eCX": { - "39_40": 0.025896761126604245, - "39_38": 0.009071400199297391, - "39_33": 1 - }, - "tCX": { - "39_40": 647.1111111111111, - "39_38": 519.1111111111111, - "39_33": 412.4444444444444 - } - }, - "40": { - "T1": 91.87336454761821, - "T2": 14.39508927140449, - "eRO": 0.05800000000000005, - "tRO": 864, - "eID": 0.00028216021174312054, - "eSX": 0.00028216021174312054, - "eX": 0.00028216021174312054, - "eCX": { "40_39": 0.025896761126604245, "40_41": 0.008960772303613307 }, - "tCX": { "40_39": 611.5555555555555, "40_41": 320 } - }, - "41": { - "T1": 86.32568723385063, - "T2": 45.67707926354805, - "eRO": 0.07220000000000004, - "tRO": 864, - "eID": 0.0007269534108787259, - "eSX": 0.0007269534108787259, - "eX": 0.0007269534108787259, - "eCX": { - "41_42": 0.010265704815024729, - "41_53": 0.020506617091342855, - "41_40": 0.008960772303613307 - }, - "tCX": { - "41_42": 583.1111111111111, - "41_53": 341.3333333333333, - "41_40": 355.55555555555554 - } - }, - "42": { - "T1": 132.99658868409756, - "T2": 193.83922718922375, - "eRO": 0.022199999999999998, - "tRO": 864, - "eID": 0.00021032885673063343, - "eSX": 0.00021032885673063343, - "eX": 0.00021032885673063343, - "eCX": { "42_41": 0.010265704815024729, "42_43": 0.009222219941674353 }, - "tCX": { "42_41": 618.6666666666666, "42_43": 512 } - }, - "43": { - "T1": 113.36779690811949, - "T2": 163.7674767744715, - "eRO": 0.03410000000000002, - "tRO": 864, - "eID": 0.00029175222616001763, - "eSX": 0.00029175222616001763, - "eX": 0.00029175222616001763, - "eCX": { - "43_34": 0.008758987321571376, - "43_44": 0.009836557668963491, - "43_42": 0.009222219941674353 - }, - "tCX": { - "43_34": 519.1111111111111, - "43_44": 440.88888888888886, - "43_42": 547.5555555555555 - } - }, - "44": { - "T1": 119.07252295162426, - "T2": 175.28963209842607, - "eRO": 0.010299999999999976, - "tRO": 864, - "eID": 0.0005946358387043752, - "eSX": 0.0005946358387043752, - "eX": 0.0005946358387043752, - "eCX": { "44_45": 0.015153488512764046, "44_43": 0.009836557668963491 }, - "tCX": { "44_45": 1073.7777777777778, "44_43": 405.3333333333333 } - }, - "45": { - "T1": 117.89019739153962, - "T2": 174.87010063047077, - "eRO": 0.05349999999999999, - "tRO": 864, - "eID": 0.00019085993665316677, - "eSX": 0.00019085993665316677, - "eX": 0.00019085993665316677, - "eCX": { - "45_54": 0.03330398105042062, - "45_44": 0.015153488512764046, - "45_46": 0.011936581310800054 - }, - "tCX": { - "45_54": 583.1111111111111, - "45_44": 1109.3333333333333, - "45_46": 867.5555555555555 - } - }, - "46": { - "T1": 57.97963931524563, - "T2": 110.50385969076551, - "eRO": 0.00869999999999993, - "tRO": 864, - "eID": 0.0002717197652962155, - "eSX": 0.0002717197652962155, - "eX": 0.0002717197652962155, - "eCX": { "46_47": 0.014698799854906047, "46_45": 0.011936581310800054 }, - "tCX": { "46_47": 910.2222222222222, "46_45": 832 } - }, - "47": { - "T1": 122.56726612271461, - "T2": 29.81846290790891, - "eRO": 0.01990000000000003, - "tRO": 864, - "eID": 0.000178405818332485, - "eSX": 0.000178405818332485, - "eX": 0.000178405818332485, - "eCX": { - "47_35": 0.016124868126858927, - "47_46": 0.014698799854906047, - "47_48": 0.007323370681402763 - }, - "tCX": { - "47_35": 412.4444444444444, - "47_46": 945.7777777777777, - "47_48": 341.3333333333333 - } - }, - "48": { - "T1": 148.5923871586073, - "T2": 92.4279630615001, - "eRO": 0.09150000000000003, - "tRO": 864, - "eID": 0.00018120187196640376, - "eSX": 0.00018120187196640376, - "eX": 0.00018120187196640376, - "eCX": { "48_49": 0.012499937001832107, "48_47": 0.007323370681402763 }, - "tCX": { "48_49": 1009.7777777777777, "48_47": 376.88888888888886 } - }, - "49": { - "T1": 90.56318257751211, - "T2": 119.36856283601098, - "eRO": 0.0040999999999999925, - "tRO": 864, - "eID": 0.00026911438089218854, - "eSX": 0.00026911438089218854, - "eX": 0.00026911438089218854, - "eCX": { - "49_50": 0.008761353299553604, - "49_48": 0.012499937001832107, - "49_55": 0.01272961602136688 - }, - "tCX": { - "49_50": 497.77777777777777, - "49_48": 974.2222222222222, - "49_55": 448 - } - }, - "50": { - "T1": 96.16114360922961, - "T2": 163.66349190265467, - "eRO": 0.09519999999999995, - "tRO": 864, - "eID": 0.0002651344665533049, - "eSX": 0.0002651344665533049, - "eX": 0.0002651344665533049, - "eCX": { "50_51": 0.0202251765488988, "50_49": 0.008761353299553604 }, - "tCX": { "50_51": 348.4444444444444, "50_49": 462.2222222222222 } - }, - "51": { - "T1": 122.82558257652694, - "T2": 79.03089085715668, - "eRO": 0.0045999999999999375, - "tRO": 864, - "eID": 0.0003116266382161441, - "eSX": 0.0003116266382161441, - "eX": 0.0003116266382161441, - "eCX": { "51_50": 0.0202251765488988, "51_36": 0.009507086606510617 }, - "tCX": { "51_50": 312.88888888888886, "51_36": 398.2222222222222 } - }, - "52": { - "T1": 62.36971402158043, - "T2": 61.474929491587154, - "eRO": 0.008199999999999985, - "tRO": 864, - "eID": 0.0003294866768794426, - "eSX": 0.0003294866768794426, - "eX": 0.0003294866768794426, - "eCX": { "52_56": 0.012639279092095806, "52_37": 0.0182066469353247 }, - "tCX": { "52_56": 561.7777777777777, "52_37": 981.3333333333333 } - }, - "53": { - "T1": 65.6370595872403, - "T2": 15.523810108683485, - "eRO": 0.05259999999999998, - "tRO": 864, - "eID": 0.0011450468015988804, - "eSX": 0.0011450468015988804, - "eX": 0.0011450468015988804, - "eCX": { "53_60": 0.0452403345139393, "53_41": 0.020506617091342855 }, - "tCX": { "53_60": 384, "53_41": 376.88888888888886 } - }, - "54": { - "T1": 123.08719333000201, - "T2": 111.32892011505625, - "eRO": 0.01760000000000006, - "tRO": 864, - "eID": 0.00020120554119786892, - "eSX": 0.00020120554119786892, - "eX": 0.00020120554119786892, - "eCX": { "54_45": 0.03330398105042062, "54_64": 0.0088894875667056 }, - "tCX": { "54_45": 547.5555555555555, "54_64": 376.88888888888886 } - }, - "55": { - "T1": 60.57197473728128, - "T2": 108.9578578185634, - "eRO": 0.0020999999999999908, - "tRO": 864, - "eID": 0.00042231297417709977, - "eSX": 0.00042231297417709977, - "eX": 0.00042231297417709977, - "eCX": { "55_68": 0.012400346754738306, "55_49": 0.01272961602136688 }, - "tCX": { "55_68": 469.3333333333333, "55_49": 483.55555555555554 } - }, - "56": { - "T1": 64.41970923296844, - "T2": 91.33780894582395, - "eRO": 0.005700000000000038, - "tRO": 864, - "eID": 0.0002940292713394282, - "eSX": 0.0002940292713394282, - "eX": 0.0002940292713394282, - "eCX": { "56_52": 0.012639279092095806, "56_57": 0.010898931401280787 }, - "tCX": { "56_52": 526.2222222222222, "56_57": 419.55555555555554 } - }, - "57": { - "T1": 72.96228667577806, - "T2": 53.66011636301696, - "eRO": 0.00869999999999993, - "tRO": 864, - "eID": 0.0002785068538804344, - "eSX": 0.0002785068538804344, - "eX": 0.0002785068538804344, - "eCX": { "57_56": 0.010898931401280787, "57_58": 0.006832216696871285 }, - "tCX": { "57_56": 384, "57_58": 398.2222222222222 } - }, - "58": { - "T1": 88.23057610608767, - "T2": 71.56638659989054, - "eRO": 0.0353, - "tRO": 864, - "eID": 0.00019970967690099558, - "eSX": 0.00019970967690099558, - "eX": 0.00019970967690099558, - "eCX": { - "58_71": 0.07939331067041192, - "58_59": 0.008618541161640292, - "58_57": 0.006832216696871285 - }, - "tCX": { - "58_71": 625.7777777777777, - "58_59": 526.2222222222222, - "58_57": 433.77777777777777 - } - }, - "59": { - "T1": 82.04348923713736, - "T2": 94.67902389564698, - "eRO": 0.015100000000000002, - "tRO": 864, - "eID": 0.00031864836878312534, - "eSX": 0.00031864836878312534, - "eX": 0.00031864836878312534, - "eCX": { "59_60": 0.023747142929181814, "59_58": 0.008618541161640292 }, - "tCX": { "59_60": 440.88888888888886, "59_58": 490.66666666666663 } - }, - "60": { - "T1": 77.74538151575544, - "T2": 57.55166388880238, - "eRO": 0.03859999999999997, - "tRO": 864, - "eID": 0.0032770221507079414, - "eSX": 0.0032770221507079414, - "eX": 0.0032770221507079414, - "eCX": { - "60_61": 0.02940361373180872, - "60_59": 0.023747142929181814, - "60_53": 0.0452403345139393 - }, - "tCX": { - "60_61": 426.66666666666663, - "60_59": 405.3333333333333, - "60_53": 419.55555555555554 - } - }, - "61": { - "T1": 111.88701970280066, - "T2": 174.30959725342885, - "eRO": 0.03639999999999999, - "tRO": 864, - "eID": 0.00020484235318871268, - "eSX": 0.00020484235318871268, - "eX": 0.00020484235318871268, - "eCX": { "61_60": 0.02940361373180872, "61_62": 0.007429318021739212 }, - "tCX": { "61_60": 462.2222222222222, "61_62": 526.2222222222222 } - }, - "62": { - "T1": 93.77208120318454, - "T2": 155.91389224022942, - "eRO": 0.020100000000000007, - "tRO": 864, - "eID": 0.00019778776933938527, - "eSX": 0.00019778776933938527, - "eX": 0.00019778776933938527, - "eCX": { - "62_61": 0.007429318021739212, - "62_63": 0.01666687552067439, - "62_72": 0.009426656427731772 - }, - "tCX": { - "62_61": 561.7777777777777, - "62_63": 512, - "62_72": 376.88888888888886 - } - }, - "63": { - "T1": 116.4732638328924, - "T2": 92.1575737951853, - "eRO": 0.021700000000000053, - "tRO": 864, - "eID": 0.0009185130279976855, - "eSX": 0.0009185130279976855, - "eX": 0.0009185130279976855, - "eCX": { "63_62": 0.01666687552067439, "63_64": 0.010183859902199194 }, - "tCX": { "63_62": 547.5555555555555, "63_64": 440.88888888888886 } - }, - "64": { - "T1": 86.22515388803168, - "T2": 113.88050824023655, - "eRO": 0.027200000000000002, - "tRO": 864, - "eID": 0.00038416354091095755, - "eSX": 0.00038416354091095755, - "eX": 0.00038416354091095755, - "eCX": { - "64_65": 0.019981103454825982, - "64_63": 0.010183859902199194, - "64_54": 0.0088894875667056 - }, - "tCX": { - "64_65": 853.3333333333333, - "64_63": 405.3333333333333, - "64_54": 341.3333333333333 - } - }, - "65": { - "T1": 141.41633323363075, - "T2": 132.29259822917334, - "eRO": 0.0026999999999999247, - "tRO": 864, - "eID": 0.00022745985390831906, - "eSX": 0.00022745985390831906, - "eX": 0.00022745985390831906, - "eCX": { "65_66": 0.013878645506283788, "65_64": 0.019981103454825982 }, - "tCX": { "65_66": 682.6666666666666, "65_64": 817.7777777777777 } - }, - "66": { - "T1": 95.610909817898, - "T2": 81.90531582501684, - "eRO": 0.013900000000000023, - "tRO": 864, - "eID": 0.0025118156048658385, - "eSX": 0.0025118156048658385, - "eX": 0.0025118156048658385, - "eCX": { - "66_65": 0.013878645506283788, - "66_67": 0.04296657241349744, - "66_73": 0.04414269175474461 - }, - "tCX": { - "66_65": 718.2222222222222, - "66_67": 888.8888888888888, - "66_73": 504.88888888888886 - } - }, - "67": { - "T1": 121.97829146767822, - "T2": 95.78355516261828, - "eRO": 0.08430000000000004, - "tRO": 864, - "eID": 0.0003280024433213016, - "eSX": 0.0003280024433213016, - "eX": 0.0003280024433213016, - "eCX": { "67_66": 0.04296657241349744, "67_68": 0.00977265524312429 }, - "tCX": { "67_66": 924.4444444444443, "67_68": 412.4444444444444 } - }, - "68": { - "T1": 74.61849642365455, - "T2": 74.34390933252797, - "eRO": 0.0051000000000001044, - "tRO": 864, - "eID": 0.0002409841802987552, - "eSX": 0.0002409841802987552, - "eX": 0.0002409841802987552, - "eCX": { - "68_69": 0.018522547286120766, - "68_55": 0.012400346754738306, - "68_67": 0.00977265524312429 - }, - "tCX": { - "68_69": 440.88888888888886, - "68_55": 433.77777777777777, - "68_67": 376.88888888888886 - } - }, - "69": { - "T1": 107.70091865669835, - "T2": 150.88500593340353, - "eRO": 0.00550000000000006, - "tRO": 864, - "eID": 0.000954214536230684, - "eSX": 0.000954214536230684, - "eX": 0.000954214536230684, - "eCX": { "69_68": 0.018522547286120766, "69_70": 0.008994414784630922 }, - "tCX": { "69_68": 476.4444444444444, "69_70": 369.77777777777777 } - }, - "70": { - "T1": 124.78932080964597, - "T2": 72.64147331275463, - "eRO": 0.0052000000000000934, - "tRO": 864, - "eID": 0.00025390543895504014, - "eSX": 0.00025390543895504014, - "eX": 0.00025390543895504014, - "eCX": { "70_69": 0.008994414784630922, "70_74": 0.02062583381958516 }, - "tCX": { "70_69": 334.22222222222223, "70_74": 817.7777777777777 } - }, - "71": { - "T1": 107.61305495906393, - "T2": 130.40452431129992, - "eRO": 0.08079999999999998, - "tRO": 864, - "eID": 0.0003995153718981115, - "eSX": 0.0003995153718981115, - "eX": 0.0003995153718981115, - "eCX": { "71_58": 0.07939331067041192, "71_77": 0.012058746519723745 }, - "tCX": { "71_58": 590.2222222222222, "71_77": 462.2222222222222 } - }, - "72": { - "T1": 103.95980261634588, - "T2": 112.75456207439072, - "eRO": 0.005600000000000049, - "tRO": 864, - "eID": 0.00025126854243321534, - "eSX": 0.00025126854243321534, - "eX": 0.00025126854243321534, - "eCX": { "72_81": 0.008928158529307395, "72_62": 0.009426656427731772 }, - "tCX": { "72_81": 369.77777777777777, "72_62": 341.3333333333333 } - }, - "73": { - "T1": 131.88324921912843, - "T2": 134.18214680028768, - "eRO": 0.0023999999999999577, - "tRO": 864, - "eID": 0.00019913008260773763, - "eSX": 0.00019913008260773763, - "eX": 0.00019913008260773763, - "eCX": { "73_85": 0.007875196008838459, "73_66": 0.04414269175474461 }, - "tCX": { "73_85": 462.2222222222222, "73_66": 540.4444444444445 } - }, - "74": { - "T1": 142.60769543567469, - "T2": 23.798678395053123, - "eRO": 0.07389999999999997, - "tRO": 864, - "eID": 0.00023671421538318444, - "eSX": 0.00023671421538318444, - "eX": 0.00023671421538318444, - "eCX": { "74_89": 0.008411368322336521, "74_70": 0.02062583381958516 }, - "tCX": { "74_89": 419.55555555555554, "74_70": 853.3333333333333 } - }, - "75": { - "T1": 62.01546411212035, - "T2": 130.28635465073492, - "eRO": 0.009400000000000075, - "tRO": 864, - "eID": 0.00019383439116393115, - "eSX": 0.00019383439116393115, - "eX": 0.00019383439116393115, - "eCX": { "75_90": 0.011707765255847769, "75_76": 0.010234551302274603 }, - "tCX": { "75_90": 448, "75_76": 867.5555555555555 } - }, - "76": { - "T1": 125.80876993108579, - "T2": 174.7062650185701, - "eRO": 0.0021999999999999797, - "tRO": 864, - "eID": 0.0001775401911141015, - "eSX": 0.0001775401911141015, - "eX": 0.0001775401911141015, - "eCX": { "76_77": 0.011713129482361029, "76_75": 0.010234551302274603 }, - "tCX": { "76_77": 405.3333333333333, "76_75": 832 } - }, - "77": { - "T1": 79.17272913466392, - "T2": 147.63011658061012, - "eRO": 0.16649999999999998, - "tRO": 864, - "eID": 0.00033018604812694655, - "eSX": 0.00033018604812694655, - "eX": 0.00033018604812694655, - "eCX": { - "77_71": 0.012058746519723745, - "77_76": 0.011713129482361029, - "77_78": 0.014241799719579284 - }, - "tCX": { - "77_71": 426.66666666666663, - "77_76": 369.77777777777777, - "77_78": 917.3333333333333 - } - }, - "78": { - "T1": 87.0144824185138, - "T2": 18.355723978999084, - "eRO": 0.0023999999999999577, - "tRO": 864, - "eID": 0.00026086337365611046, - "eSX": 0.00026086337365611046, - "eX": 0.00026086337365611046, - "eCX": { "78_79": 0.01429443871967126, "78_77": 0.014241799719579284 }, - "tCX": { "78_79": 640, "78_77": 881.7777777777777 } - }, - "79": { - "T1": 109.21319614398216, - "T2": 16.2161591419614, - "eRO": 0.013700000000000045, - "tRO": 864, - "eID": 0.000684224679058518, - "eSX": 0.000684224679058518, - "eX": 0.000684224679058518, - "eCX": { - "79_78": 0.01429443871967126, - "79_91": 0.01273695773657757, - "79_80": 0.009317842731654924 - }, - "tCX": { - "79_78": 675.5555555555555, - "79_91": 440.88888888888886, - "79_80": 348.4444444444444 - } - }, - "80": { - "T1": 46.51210789367094, - "T2": 136.43520328053708, - "eRO": 0.11019999999999996, - "tRO": 864, - "eID": 0.0002562989003104538, - "eSX": 0.0002562989003104538, - "eX": 0.0002562989003104538, - "eCX": { "80_81": 0.009291134996790185, "80_79": 0.009317842731654924 }, - "tCX": { "80_81": 540.4444444444445, "80_79": 312.88888888888886 } - }, - "81": { - "T1": 88.92483074274578, - "T2": 110.82042567239512, - "eRO": 0.009399999999999964, - "tRO": 864, - "eID": 0.0001918177199661583, - "eSX": 0.0001918177199661583, - "eX": 0.0001918177199661583, - "eCX": { - "81_80": 0.009291134996790185, - "81_82": 0.010611062410495115, - "81_72": 0.008928158529307395 - }, - "tCX": { - "81_80": 576, - "81_82": 533.3333333333333, - "81_72": 405.3333333333333 - } - }, - "82": { - "T1": 105.44330024573149, - "T2": 33.66773754850312, - "eRO": 0.03869999999999996, - "tRO": 864, - "eID": 0.0007281099108295647, - "eSX": 0.0007281099108295647, - "eX": 0.0007281099108295647, - "eCX": { "82_81": 0.010611062410495115, "82_83": 0.0371647364361202 }, - "tCX": { "82_81": 497.77777777777777, "82_83": 433.77777777777777 } - }, - "83": { - "T1": 92.31487360824624, - "T2": 109.79936002689281, - "eRO": 0.02729999999999999, - "tRO": 864, - "eID": 0.0008598872222427489, - "eSX": 0.0008598872222427489, - "eX": 0.0008598872222427489, - "eCX": { - "83_92": 0.010546680177364154, - "83_82": 0.0371647364361202, - "83_84": 1 - }, - "tCX": { - "83_92": 440.88888888888886, - "83_82": 469.3333333333333, - "83_84": 490.66666666666663 - } - }, - "84": { - "T1": 142.84306212145302, - "T2": 14.021146360167396, - "eRO": 0.0020000000000000018, - "tRO": 864, - "eID": 0.0002179534136144466, - "eSX": 0.0002179534136144466, - "eX": 0.0002179534136144466, - "eCX": { "84_85": 0.007123436309594, "84_83": 1 }, - "tCX": { "84_85": 433.77777777777777, "84_83": 526.2222222222222 } - }, - "85": { - "T1": 114.01668452562491, - "T2": 76.17761879543944, - "eRO": 0.0035000000000000586, - "tRO": 864, - "eID": 0.0002476944677869078, - "eSX": 0.0002476944677869078, - "eX": 0.0002476944677869078, - "eCX": { - "85_86": 0.041231965244719115, - "85_73": 0.007875196008838459, - "85_84": 0.007123436309594 - }, - "tCX": { - "85_86": 433.77777777777777, - "85_73": 426.66666666666663, - "85_84": 398.2222222222222 - } - }, - "86": { - "T1": 96.4850211313414, - "T2": 188.09093661185062, - "eRO": 0.008499999999999952, - "tRO": 864, - "eID": 0.0002249672827749646, - "eSX": 0.0002249672827749646, - "eX": 0.0002249672827749646, - "eCX": { "86_85": 0.041231965244719115, "86_87": 0.010872533547303553 }, - "tCX": { "86_85": 469.3333333333333, "86_87": 661.3333333333333 } - }, - "87": { - "T1": 106.01264449053683, - "T2": 127.34997777314356, - "eRO": 0.023499999999999965, - "tRO": 864, - "eID": 0.00022973669816065033, - "eSX": 0.00022973669816065033, - "eX": 0.00022973669816065033, - "eCX": { - "87_93": 0.009064038262154045, - "87_86": 0.010872533547303553, - "87_88": 0.006834328585855948 - }, - "tCX": { - "87_93": 476.4444444444444, - "87_86": 625.7777777777777, - "87_88": 426.66666666666663 - } - }, - "88": { - "T1": 95.6046871118693, - "T2": 131.96430278763907, - "eRO": 0.027800000000000047, - "tRO": 864, - "eID": 0.00025518706969413337, - "eSX": 0.00025518706969413337, - "eX": 0.00025518706969413337, - "eCX": { "88_89": 0.009599713963437118, "88_87": 0.006834328585855948 }, - "tCX": { "88_89": 533.3333333333333, "88_87": 462.2222222222222 } - }, - "89": { - "T1": 142.09094270457845, - "T2": 38.314201623890895, - "eRO": 0.012699999999999934, - "tRO": 864, - "eID": 0.0001771683322291251, - "eSX": 0.0001771683322291251, - "eX": 0.0001771683322291251, - "eCX": { "89_88": 0.009599713963437118, "89_74": 0.008411368322336521 }, - "tCX": { "89_88": 568.8888888888889, "89_74": 384 } - }, - "90": { - "T1": 86.07475651712474, - "T2": 89.35276706148366, - "eRO": 0.0039000000000000146, - "tRO": 864, - "eID": 0.0003645630683139821, - "eSX": 0.0003645630683139821, - "eX": 0.0003645630683139821, - "eCX": { "90_94": 0.014605882716217072, "90_75": 0.011707765255847769 }, - "tCX": { "90_94": 369.77777777777777, "90_75": 412.4444444444444 } - }, - "91": { - "T1": 99.14998528021971, - "T2": 54.50256377606547, - "eRO": 0.019000000000000017, - "tRO": 864, - "eID": 0.0005834192287906349, - "eSX": 0.0005834192287906349, - "eX": 0.0005834192287906349, - "eCX": { "91_98": 0.019919920225823895, "91_79": 0.01273695773657757 }, - "tCX": { "91_98": 632.8888888888888, "91_79": 405.3333333333333 } - }, - "92": { - "T1": 100.50401126565265, - "T2": 141.02006630936845, - "eRO": 0.0040999999999999925, - "tRO": 864, - "eID": 0.00021330230726567613, - "eSX": 0.00021330230726567613, - "eX": 0.00021330230726567613, - "eCX": { "92_83": 0.010546680177364154, "92_102": 0.010001128057285341 }, - "tCX": { "92_83": 405.3333333333333, "92_102": 540.4444444444445 } - }, - "93": { - "T1": 64.2114310901037, - "T2": 106.58817877470663, - "eRO": 0.006399999999999961, - "tRO": 864, - "eID": 0.00022967576014093963, - "eSX": 0.00022967576014093963, - "eX": 0.00022967576014093963, - "eCX": { "93_106": 0.009224747146289652, "93_87": 0.009064038262154045 }, - "tCX": { "93_106": 440.88888888888886, "93_87": 440.88888888888886 } - }, - "94": { - "T1": 112.98470956696943, - "T2": 67.07283686297714, - "eRO": 0.01540000000000008, - "tRO": 864, - "eID": 0.0002558056844275436, - "eSX": 0.0002558056844275436, - "eX": 0.0002558056844275436, - "eCX": { "94_90": 0.014605882716217072, "94_95": 0.009022775840809877 }, - "tCX": { "94_90": 405.3333333333333, "94_95": 398.2222222222222 } - }, - "95": { - "T1": 104.09405911899486, - "T2": 131.1332642901761, - "eRO": 0.1905, - "tRO": 864, - "eID": 0.0004201602790499425, - "eSX": 0.0004201602790499425, - "eX": 0.0004201602790499425, - "eCX": { "95_96": 0.011076741296564385, "95_94": 0.009022775840809877 }, - "tCX": { "95_96": 455.1111111111111, "95_94": 362.66666666666663 } - }, - "96": { - "T1": 78.53686644052961, - "T2": 45.78312664265569, - "eRO": 0.05059999999999998, - "tRO": 864, - "eID": 0.00031384637014597204, - "eSX": 0.00031384637014597204, - "eX": 0.00031384637014597204, - "eCX": { - "96_95": 0.011076741296564385, - "96_97": 0.010000888062061147, - "96_109": 1 - }, - "tCX": { - "96_95": 490.66666666666663, - "96_97": 362.66666666666663, - "96_109": 1187.5555555555554 - } - }, - "97": { - "T1": 92.56007309657224, - "T2": 99.20335840717688, - "eRO": 0.007500000000000062, - "tRO": 864, - "eID": 0.0002177633732371756, - "eSX": 0.0002177633732371756, - "eX": 0.0002177633732371756, - "eCX": { "97_96": 0.010000888062061147, "97_98": 0.01901758368551562 }, - "tCX": { "97_96": 398.2222222222222, "97_98": 917.3333333333333 } - }, - "98": { - "T1": 92.95688212458518, - "T2": 54.7319894039672, - "eRO": 0.03059999999999996, - "tRO": 864, - "eID": 0.005375229984910652, - "eSX": 0.005375229984910652, - "eX": 0.005375229984910652, - "eCX": { - "98_91": 0.019919920225823895, - "98_99": 0.025343819154153124, - "98_97": 0.01901758368551562 - }, - "tCX": { - "98_91": 668.4444444444445, - "98_99": 405.3333333333333, - "98_97": 952.8888888888888 - } - }, - "99": { - "T1": 104.06339022354209, - "T2": 35.99747065029276, - "eRO": 0.07309999999999994, - "tRO": 864, - "eID": 0.0019469750022725616, - "eSX": 0.0019469750022725616, - "eX": 0.0019469750022725616, - "eCX": { "99_98": 0.025343819154153124, "99_100": 0.032253378628793516 }, - "tCX": { "99_98": 369.77777777777777, "99_100": 732.4444444444445 } - }, - "100": { - "T1": 89.20763298525858, - "T2": 52.2848911941528, - "eRO": 0.01980000000000004, - "tRO": 864, - "eID": 0.0002520995157419971, - "eSX": 0.0002520995157419971, - "eX": 0.0002520995157419971, - "eCX": { - "100_110": 0.016120321317288244, - "100_101": 0.006070928766399836, - "100_99": 0.032253378628793516 - }, - "tCX": { "100_110": 832, "100_101": 419.55555555555554, "100_99": 768 } - }, - "101": { - "T1": 112.33264014635591, - "T2": 106.96584040064565, - "eRO": 0.016999999999999904, - "tRO": 864, - "eID": 0.00017009788630864211, - "eSX": 0.00017009788630864211, - "eX": 0.00017009788630864211, - "eCX": { - "101_102": 0.007494037196363518, - "101_100": 0.006070928766399836 - }, - "tCX": { "101_102": 362.66666666666663, "101_100": 384 } - }, - "102": { - "T1": 41.93474263823825, - "T2": 88.3530405880468, - "eRO": 0.0042999999999999705, - "tRO": 864, - "eID": 0.00022660817583434965, - "eSX": 0.00022660817583434965, - "eX": 0.00022660817583434965, - "eCX": { - "102_101": 0.007494037196363518, - "102_92": 0.010001128057285341, - "102_103": 0.018086404147196367 - }, - "tCX": { - "102_101": 398.2222222222222, - "102_92": 576, - "102_103": 391.1111111111111 - } - }, - "103": { - "T1": 58.24588611680468, - "T2": 48.027226898995586, - "eRO": 0.10650000000000004, - "tRO": 864, - "eID": 0.01683553280221, - "eSX": 0.01683553280221, - "eX": 0.01683553280221, - "eCX": { - "103_104": 0.014954290370575274, - "103_102": 0.018086404147196367 - }, - "tCX": { "103_104": 476.4444444444444, "103_102": 355.55555555555554 } - }, - "104": { - "T1": 97.33161738703151, - "T2": 137.47871948638635, - "eRO": 0.0010999999999999899, - "tRO": 864, - "eID": 0.00021428777953857032, - "eSX": 0.00021428777953857032, - "eX": 0.00021428777953857032, - "eCX": { - "104_103": 0.014954290370575274, - "104_105": 0.022290944221630332, - "104_111": 0.008128121768128632 - }, - "tCX": { - "104_103": 512, - "104_105": 654.2222222222222, - "104_111": 483.55555555555554 - } - }, - "105": { - "T1": 82.94081484498399, - "T2": 96.33426629072966, - "eRO": 0.014599999999999946, - "tRO": 864, - "eID": 0.0003033938517896687, - "eSX": 0.0003033938517896687, - "eX": 0.0003033938517896687, - "eCX": { - "105_106": 0.009887955476411942, - "105_104": 0.022290944221630332 - }, - "tCX": { "105_106": 483.55555555555554, "105_104": 689.7777777777777 } - }, - "106": { - "T1": 70.62973484584778, - "T2": 72.38554532227865, - "eRO": 0.014100000000000001, - "tRO": 864, - "eID": 0.00027670595415579325, - "eSX": 0.00027670595415579325, - "eX": 0.00027670595415579325, - "eCX": { - "106_105": 0.009887955476411942, - "106_93": 0.009224747146289652, - "106_107": 0.0088981036161557 - }, - "tCX": { - "106_105": 448, - "106_93": 476.4444444444444, - "106_107": 369.77777777777777 - } - }, - "107": { - "T1": 110.0033308693325, - "T2": 115.91038762728947, - "eRO": 0.0036000000000000476, - "tRO": 864, - "eID": 0.00023436206109936112, - "eSX": 0.00023436206109936112, - "eX": 0.00023436206109936112, - "eCX": { "107_108": 0.011484230207009977, "107_106": 0.0088981036161557 }, - "tCX": { "107_108": 554.6666666666666, "107_106": 334.22222222222223 } - }, - "108": { - "T1": 104.61123155997578, - "T2": 51.84796386434363, - "eRO": 0.08109999999999995, - "tRO": 864, - "eID": 0.0005837011082181873, - "eSX": 0.0005837011082181873, - "eX": 0.0005837011082181873, - "eCX": { - "108_112": 0.015909778925800172, - "108_107": 0.011484230207009977 - }, - "tCX": { "108_112": 533.3333333333333, "108_107": 519.1111111111111 } - }, - "109": { - "T1": 102.14929156102997, - "T2": 94.12567605841977, - "eRO": 0.16920000000000002, - "tRO": 864, - "eID": 0.000364303443434257, - "eSX": 0.000364303443434257, - "eX": 0.000364303443434257, - "eCX": { "109_114": 1, "109_96": 1 }, - "tCX": { "109_114": 668.4444444444445, "109_96": 1009.7777777777777 } - }, - "110": { - "T1": 97.9134446006523, - "T2": 47.354119741865134, - "eRO": 0.008299999999999974, - "tRO": 864, - "eID": 0.0002648200475773011, - "eSX": 0.0002648200475773011, - "eX": 0.0002648200475773011, - "eCX": { - "110_100": 0.016120321317288244, - "110_118": 0.007993550748154665 - }, - "tCX": { "110_100": 796.4444444444443, "110_118": 405.3333333333333 } - }, - "111": { - "T1": 100.1671467665419, - "T2": 113.10550308716748, - "eRO": 0.0017000000000000348, - "tRO": 864, - "eID": 0.00025885847662478044, - "eSX": 0.00025885847662478044, - "eX": 0.00025885847662478044, - "eCX": { - "111_122": 0.009561872658582438, - "111_104": 0.008128121768128632 - }, - "tCX": { "111_122": 426.66666666666663, "111_104": 448 } - }, - "112": { - "T1": 110.0187084810474, - "T2": 82.19700896237332, - "eRO": 0.050799999999999956, - "tRO": 864, - "eID": 0.0005412752874939324, - "eSX": 0.0005412752874939324, - "eX": 0.0005412752874939324, - "eCX": { - "112_108": 0.015909778925800172, - "112_126": 0.022466645235490884 - }, - "tCX": { "112_108": 568.8888888888889, "112_126": 376.88888888888886 } - }, - "113": { - "T1": 61.598175053178956, - "T2": 113.51409546178313, - "eRO": 0.02410000000000001, - "tRO": 864, - "eID": 0.00025640905091284797, - "eSX": 0.00025640905091284797, - "eX": 0.00025640905091284797, - "eCX": { "113_114": 0.009566397722493791 }, - "tCX": { "113_114": 483.55555555555554 } - }, - "114": { - "T1": 86.91983945021029, - "T2": 26.436927385417718, - "eRO": 0.07709999999999995, - "tRO": 864, - "eID": 0.0005081810792615109, - "eSX": 0.0005081810792615109, - "eX": 0.0005081810792615109, - "eCX": { - "114_113": 0.009566397722493791, - "114_115": 0.027396609626709173, - "114_109": 1 - }, - "tCX": { - "114_113": 519.1111111111111, - "114_115": 732.4444444444445, - "114_109": 704 - } - }, - "115": { - "T1": 66.01624411583873, - "T2": 69.44780704405423, - "eRO": 0.017900000000000027, - "tRO": 864, - "eID": 0.0010272697480514777, - "eSX": 0.0010272697480514777, - "eX": 0.0010272697480514777, - "eCX": { - "115_116": 0.02576447194311779, - "115_114": 0.027396609626709173 - }, - "tCX": { "115_116": 533.3333333333333, "115_114": 696.8888888888888 } - }, - "116": { - "T1": 138.22894474237793, - "T2": 147.01589390667547, - "eRO": 0.0021999999999999797, - "tRO": 864, - "eID": 0.00019603982578578658, - "eSX": 0.00019603982578578658, - "eX": 0.00019603982578578658, - "eCX": { - "116_115": 0.02576447194311779, - "116_117": 0.011206786931789253 - }, - "tCX": { "116_115": 568.8888888888889, "116_117": 348.4444444444444 } - }, - "117": { - "T1": 74.4864887908141, - "T2": 114.68290188344685, - "eRO": 0.0038000000000000256, - "tRO": 864, - "eID": 0.0003330639563331991, - "eSX": 0.0003330639563331991, - "eX": 0.0003330639563331991, - "eCX": { - "117_118": 0.009546779947456452, - "117_116": 0.011206786931789253 - }, - "tCX": { "117_118": 433.77777777777777, "117_116": 312.88888888888886 } - }, - "118": { - "T1": 122.5753150861503, - "T2": 126.38611554281331, - "eRO": 0.024699999999999944, - "tRO": 864, - "eID": 0.0002671689692877082, - "eSX": 0.0002671689692877082, - "eX": 0.0002671689692877082, - "eCX": { - "118_117": 0.009546779947456452, - "118_119": 0.012356917729275746, - "118_110": 0.007993550748154665 - }, - "tCX": { - "118_117": 469.3333333333333, - "118_119": 881.7777777777777, - "118_110": 440.88888888888886 - } - }, - "119": { - "T1": 81.59773680220509, - "T2": 91.78388988584005, - "eRO": 0.007099999999999995, - "tRO": 864, - "eID": 0.00020498397103382133, - "eSX": 0.00020498397103382133, - "eX": 0.00020498397103382133, - "eCX": { - "119_120": 0.018729665154804925, - "119_118": 0.012356917729275746 - }, - "tCX": { "119_120": 1130.6666666666665, "119_118": 846.2222222222222 } - }, - "120": { - "T1": 60.25833884431985, - "T2": 60.07570475798692, - "eRO": 0.0035000000000000586, - "tRO": 864, - "eID": 0.00022120594377437715, - "eSX": 0.00022120594377437715, - "eX": 0.00022120594377437715, - "eCX": { - "120_121": 0.010240049082525043, - "120_119": 0.018729665154804925 - }, - "tCX": { "120_121": 476.4444444444444, "120_119": 1166.2222222222222 } - }, - "121": { - "T1": 76.68959641667072, - "T2": 49.871529688578875, - "eRO": 0.012399999999999967, - "tRO": 864, - "eID": 0.0002849073925835129, - "eSX": 0.0002849073925835129, - "eX": 0.0002849073925835129, - "eCX": { - "121_120": 0.010240049082525043, - "121_122": 0.01735305875966467 - }, - "tCX": { "121_120": 440.88888888888886, "121_122": 846.2222222222222 } - }, - "122": { - "T1": 93.42232224829289, - "T2": 118.10195000045648, - "eRO": 0.0035000000000000586, - "tRO": 864, - "eID": 0.0002532617883045333, - "eSX": 0.0002532617883045333, - "eX": 0.0002532617883045333, - "eCX": { - "122_111": 0.009561872658582438, - "122_123": 0.04122130063906035, - "122_121": 0.01735305875966467 - }, - "tCX": { - "122_111": 462.2222222222222, - "122_123": 561.7777777777777, - "122_121": 810.6666666666666 - } - }, - "123": { - "T1": 86.60791354521089, - "T2": 7.421745300564297, - "eRO": 0.0026999999999999247, - "tRO": 864, - "eID": 0.0012252912338056978, - "eSX": 0.0012252912338056978, - "eX": 0.0012252912338056978, - "eCX": { "123_124": 0.06621535654256899, "123_122": 0.04122130063906035 }, - "tCX": { "123_124": 533.3333333333333, "123_122": 597.3333333333333 } - }, - "124": { - "T1": 104.83399723126419, - "T2": 96.42386470914, - "eRO": 0.01959999999999995, - "tRO": 864, - "eID": 0.001027366807551197, - "eSX": 0.001027366807551197, - "eX": 0.001027366807551197, - "eCX": { - "124_125": 0.014599757017027065, - "124_123": 0.06621535654256899 - }, - "tCX": { "124_125": 789.3333333333333, "124_123": 497.77777777777777 } - }, - "125": { - "T1": 94.21683304897701, - "T2": 120.02260072630652, - "eRO": 0.0020999999999999908, - "tRO": 864, - "eID": 0.00022831064206038976, - "eSX": 0.00022831064206038976, - "eX": 0.00022831064206038976, - "eCX": { - "125_124": 0.014599757017027065, - "125_126": 0.00974743027204264 - }, - "tCX": { "125_124": 753.7777777777777, "125_126": 504.88888888888886 } - }, - "126": { - "T1": 107.34940803380395, - "T2": 87.82373133219541, - "eRO": 0.0050000000000000044, - "tRO": 864, - "eID": 0.00036456984506060794, - "eSX": 0.00036456984506060794, - "eX": 0.00036456984506060794, - "eCX": { - "126_112": 0.022466645235490884, - "126_125": 0.00974743027204264 - }, - "tCX": { "126_112": 412.4444444444444, "126_125": 469.3333333333333 } - } - } -} diff --git a/src/mqt/bench/cli.py b/src/mqt/bench/cli.py index c59f3b6a9..eb35c0a4e 100644 --- a/src/mqt/bench/cli.py +++ b/src/mqt/bench/cli.py @@ -10,7 +10,7 @@ from qiskit import QuantumCircuit from qiskit.qasm2 import dumps as qiskit_circuit_to_str -from . import CompilerSettings, QiskitSettings, TKETSettings, get_benchmark +from . import CompilerSettings, QiskitSettings, get_benchmark class CustomArgumentParser(argparse.ArgumentParser): @@ -44,8 +44,7 @@ def main() -> None: parser.add_argument("--num-qubits", type=int, help="Number of Qubits", required=True) parser.add_argument("--compiler", type=str, help="Name of the compiler") parser.add_argument("--qiskit-optimization-level", type=int, help="Qiskit compiler optimization level") - parser.add_argument("--tket-placement", type=str, help="TKET placement") - parser.add_argument("--native-gate-set", type=str, help="Name of the provider") + parser.add_argument("--gateset", type=str, help="Name of the provider") parser.add_argument("--device", type=str, help="Name of the device") args = parser.parse_args() @@ -53,10 +52,6 @@ def main() -> None: if args.qiskit_optimization_level is not None: qiskit_settings = QiskitSettings(args.qiskit_optimization_level) - tket_settings = TKETSettings() - if args.tket_placement is not None: - tket_settings = TKETSettings(args.tket_placement) - # Note: Assertions about argument validity are in get_benchmark() # Temporary workaround to "get things working" with benchmark instances. @@ -71,9 +66,8 @@ def main() -> None: compiler=args.compiler, compiler_settings=CompilerSettings( qiskit=qiskit_settings, - tket=tket_settings, ), - provider_name=args.native_gate_set, + provider_name=args.gateset, device_name=args.device, ) @@ -86,7 +80,7 @@ def main() -> None: def parse_benchmark_name_and_instance(algorithm: str) -> tuple[str, str | None]: """Parse an algorithm name like "shor_xlarge" into a benchmark and instance name as expected by :func:`get_benchmark`.""" - if algorithm.startswith(("shor_", "groundstate_")): + if algorithm.startswith("shor_"): as_list = algorithm.split("_", 2) assert len(as_list) == 2 return cast("tuple[str, str]", tuple(as_list)) diff --git a/src/mqt/bench/config.json b/src/mqt/bench/config.json index b7222a339..bbc424633 100644 --- a/src/mqt/bench/config.json +++ b/src/mqt/bench/config.json @@ -9,6 +9,14 @@ "stepsize": 1, "precheck_possible": true }, + { + "name": "bv", + "include": true, + "min_qubits": 2, + "max_qubits": 131, + "stepsize": 1, + "precheck_possible": true + }, { "name": "dj", "include": true, @@ -33,12 +41,6 @@ "stepsize": 1, "precheck_possible": true }, - { - "name": "groundstate", - "include": true, - "instances": ["small", "medium", "large"], - "precheck_possible": false - }, { "name": "grover", "include": true, @@ -48,36 +50,6 @@ "ancillary_mode": ["noancilla", "v-chain"], "precheck_possible": false }, - { - "name": "portfolioqaoa", - "include": true, - "min_qubits": 3, - "max_qubits": 14, - "stepsize": 1, - "precheck_possible": true - }, - { - "name": "portfoliovqe", - "include": true, - "min_qubits": 3, - "max_qubits": 14, - "stepsize": 1, - "precheck_possible": true - }, - { - "name": "pricingcall", - "include": true, - "min_uncertainty": 2, - "max_uncertainty": 131, - "precheck_possible": false - }, - { - "name": "pricingput", - "include": true, - "min_uncertainty": 2, - "max_uncertainty": 131, - "precheck_possible": false - }, { "name": "qaoa", "include": true, @@ -136,7 +108,7 @@ "precheck_possible": false }, { - "name": "random", + "name": "randomcircuit", "include": true, "min_qubits": 2, "max_qubits": 131, @@ -144,20 +116,13 @@ "precheck_possible": true }, { - "name": "realamprandom", + "name": "vqerealamprandom", "include": true, "min_qubits": 2, "max_qubits": 131, "stepsize": 1, "precheck_possible": true }, - { - "name": "routing", - "include": true, - "min_nodes": 2, - "max_nodes": 131, - "precheck_possible": false - }, { "name": "shor", "include": true, @@ -165,7 +130,7 @@ "precheck_possible": false }, { - "name": "su2random", + "name": "vqesu2random", "include": true, "min_qubits": 2, "max_qubits": 131, @@ -173,28 +138,13 @@ "precheck_possible": true }, { - "name": "tsp", - "include": true, - "min_nodes": 2, - "max_nodes": 131, - "precheck_possible": false - }, - { - "name": "twolocalrandom", + "name": "vqetwolocalrandom", "include": true, "min_qubits": 2, "max_qubits": 131, "stepsize": 1, "precheck_possible": true }, - { - "name": "vqe", - "include": true, - "min_qubits": 3, - "max_qubits": 131, - "stepsize": 1, - "precheck_possible": true - }, { "name": "wstate", "include": true, diff --git a/src/mqt/bench/devices/__init__.py b/src/mqt/bench/devices/__init__.py index 7d070c9fb..0da3f6c0b 100644 --- a/src/mqt/bench/devices/__init__.py +++ b/src/mqt/bench/devices/__init__.py @@ -6,66 +6,35 @@ from __future__ import annotations -# ruff: noqa: I001 from .calibration import DeviceCalibration -from .device import Device -from .provider import Provider +from .device import Device, Gateset +from .ibm import IBMMontreal, IBMTorino, IBMWashington +from .ionq import IonQAria1, IonQHarmony +from .iqm import IQMAdonis, IQMApollo +from .oqc import OQCLucy +from .quantinuum import QuantinuumH2 +from .rigetti import RigettiAspenM3 -from .ibm import IBMProvider -from .ionq import IonQProvider -from .iqm import IQMProvider -from .oqc import OQCProvider -from .quantinuum import QuantinuumProvider -from .rigetti import RigettiProvider - -class NotFoundError(Exception): - """Raised when a device or provider is not found within the available ones.""" - - -def get_available_providers() -> list[Provider]: - """Get a list of all available providers.""" - return [IBMProvider(), IonQProvider(), OQCProvider(), RigettiProvider(), QuantinuumProvider(), IQMProvider()] - - -def get_available_provider_names() -> list[str]: - """Get a list of all available provider names.""" - return [prov.provider_name for prov in get_available_providers()] - - -def get_provider_by_name(provider_name: str) -> Provider: - """Get a provider by its name. - - Arguments: - provider_name: the name of the provider - """ - provider = None - for prov in get_available_providers(): - if prov.provider_name == provider_name: - provider = prov - break - - if provider is None: - msg = f"Provider '{provider_name}' not found among available providers." - raise NotFoundError(msg) - - return provider - - -def get_available_devices(sanitize_device: bool = False) -> list[Device]: - """Get a list of all available devices. - - Arguments: - sanitize_device: whether to sanitize the device calibration data - """ +def get_available_devices() -> list[Device]: + """Get a list of all available devices.""" return [ - dev for prov in get_available_providers() for dev in prov.get_available_devices(sanitize_device=sanitize_device) + IBMTorino(), + IBMMontreal(), + IBMWashington(), + IonQAria1(), + IonQHarmony(), + IQMAdonis(), + IQMApollo(), + OQCLucy(), + QuantinuumH2(), + RigettiAspenM3(), ] def get_available_device_names() -> list[str]: """Get a list of all available device names.""" - return [name for prov in get_available_providers() for name in prov.get_available_device_names()] + return [device.name for device in get_available_devices()] def get_device_by_name(device_name: str) -> Device: @@ -74,35 +43,68 @@ def get_device_by_name(device_name: str) -> Device: Arguments: device_name: the name of the device """ - device = None - for provider in get_available_providers(): - try: - device = provider.get_device(device_name) - break - except ValueError: - continue - - if device is None: - msg = f"Device '{device_name}' not found among available providers." - raise NotFoundError(msg) + for device in get_available_devices(): + if device.name == device_name: + return device - return device + msg = f"Device {device_name} not found in available devices." + raise ValueError(msg) __all__ = [ "Device", "DeviceCalibration", - "IBMProvider", - "IQMProvider", - "IonQProvider", - "OQCProvider", - "Provider", - "QuantinuumProvider", - "RigettiProvider", + "Gateset", "get_available_device_names", "get_available_devices", - "get_available_provider_names", - "get_available_providers", "get_device_by_name", - "get_provider_by_name", ] + + +def get_available_native_gatesets() -> list[Gateset]: + """Get a list of all available native gatesets.""" + available_gatesets = [] + for device in get_available_devices(): + if device.gateset not in available_gatesets: + available_gatesets.append(device.gateset) + available_gatesets.append( + Gateset( + "clifford+t", + [ + "i", + "x", + "y", + "z", + "h", + "s", + "sdg", + "t", + "tdg", + "sx", + "sxdg", + "cx", + "cy", + "cz", + "swap", + "iswap", + "dcx", + "ecr", + "measure", + "barrier", + ], + ) + ) + return available_gatesets + + +def get_native_gateset_by_name(gateset_name: str) -> Gateset: + """Get a native gateset by its name. + + Arguments: + gateset_name: the name of the gateset + """ + for gateset in get_available_native_gatesets(): + if gateset.gateset_name == gateset_name: + return gateset + msg = f"Gateset {gateset_name} not found in available gatesets." + raise ValueError(msg) diff --git a/src/mqt/bench/devices/calibration.py b/src/mqt/bench/devices/calibration.py index eea1cf81c..6f3ec841f 100644 --- a/src/mqt/bench/devices/calibration.py +++ b/src/mqt/bench/devices/calibration.py @@ -3,6 +3,8 @@ from __future__ import annotations from dataclasses import dataclass, field +from importlib import resources +from pathlib import Path @dataclass @@ -18,7 +20,6 @@ class DeviceCalibration: readout_duration: readout duration for each qubit t1: T1 time for each qubit t2: T2 time for each qubit - frequency: frequency for each qubit """ single_qubit_gate_fidelity: dict[int, dict[str, float]] = field(default_factory=dict) @@ -235,3 +236,14 @@ def compute_average_readout_duration(self) -> float: raise ValueError(msg) return sum(self.readout_duration.values()) / len(self.readout_duration) + + +def get_device_calibration_path(filename: str) -> Path: + """Get the path to the calibration file for a device.""" + calibration_path = resources.files("mqt.bench") / "calibration_files" / f"{filename}_calibration.json" + + if not calibration_path.is_file(): + msg = f"Calibration file not found: {calibration_path}" + raise FileNotFoundError(msg) + + return Path(str(calibration_path)) diff --git a/src/mqt/bench/devices/device.py b/src/mqt/bench/devices/device.py index 61e129e0a..05cda4f40 100644 --- a/src/mqt/bench/devices/device.py +++ b/src/mqt/bench/devices/device.py @@ -2,6 +2,7 @@ from __future__ import annotations +from abc import ABC, abstractmethod from dataclasses import dataclass, field from typing import TYPE_CHECKING @@ -10,23 +11,35 @@ @dataclass -class Device: +class Gateset: + """A class to represent a set of native gates.""" + + gateset_name: str + gates: list[str] + + +@dataclass +class Device(ABC): """A class to represent a (generic) quantum device. Attributes: name: name of the device num_qubits: number of qubits - basis_gates: list of basis gates supported by the device + gateset: gateset of the device coupling_map: coupling map of the device's qubits calibration: calibration information for the device """ name: str = "" + gateset: Gateset = field(default_factory=Gateset) # type: ignore[arg-type] num_qubits: int = 0 - basis_gates: list[str] = field(default_factory=list) coupling_map: list[list[int]] = field(default_factory=list) calibration: DeviceCalibration | None = None + @abstractmethod + def read_calibration(self) -> None: + """Read the calibration data for the device.""" + def get_single_qubit_gate_fidelity(self, gate_type: str, qubit: int) -> float: """Get the single-qubit fidelity for a given gate type and qubit. @@ -34,16 +47,21 @@ def get_single_qubit_gate_fidelity(self, gate_type: str, qubit: int) -> float: gate_type: name of the gate qubit: index of the qubit """ - if self.calibration is None: - msg = f"Calibration data not available for device {self.name}." - raise ValueError(msg) + self.check_calibration() - if gate_type not in self.basis_gates: + assert self.calibration is not None + + if gate_type not in self.gateset.gates: msg = f"Gate {gate_type} not supported by device {self.name}." raise ValueError(msg) return self.calibration.get_single_qubit_gate_fidelity(gate_type, qubit) + def check_calibration(self) -> None: + """Check if the calibration data is read and do so if that was not the case.""" + if self.calibration is None: + self.read_calibration() + def get_single_qubit_gate_duration(self, gate_type: str, qubit: int) -> float: """Get the single-qubit gate duration for a given gate type and qubit. @@ -51,11 +69,10 @@ def get_single_qubit_gate_duration(self, gate_type: str, qubit: int) -> float: gate_type: name of the gate qubit: index of the qubit """ - if self.calibration is None: - msg = f"Calibration data not available for device {self.name}." - raise ValueError(msg) + self.check_calibration() + assert self.calibration is not None - if gate_type not in self.basis_gates: + if gate_type not in self.gateset.gates: msg = f"Gate {gate_type} not supported by device {self.name}." raise ValueError(msg) @@ -69,11 +86,10 @@ def get_two_qubit_gate_fidelity(self, gate_type: str, qubit1: int, qubit2: int) qubit1: index of the first qubit qubit2: index of the second qubit """ - if self.calibration is None: - msg = f"Calibration data not available for device {self.name}." - raise ValueError(msg) + self.check_calibration() + assert self.calibration is not None - if gate_type not in self.basis_gates: + if gate_type not in self.gateset.gates: msg = f"Gate {gate_type} not supported by device {self.name}." raise ValueError(msg) @@ -87,11 +103,10 @@ def get_two_qubit_gate_duration(self, gate_type: str, qubit1: int, qubit2: int) qubit1: index of the first qubit qubit2: index of the second qubit """ - if self.calibration is None: - msg = f"Calibration data not available for device {self.name}." - raise ValueError(msg) + self.check_calibration() + assert self.calibration is not None - if gate_type not in self.basis_gates: + if gate_type not in self.gateset.gates: msg = f"Gate {gate_type} not supported by device {self.name}." raise ValueError(msg) @@ -103,9 +118,8 @@ def get_readout_fidelity(self, qubit: int) -> float: Arguments: qubit: index of the qubit """ - if self.calibration is None: - msg = f"Calibration data not available for device {self.name}." - raise ValueError(msg) + self.check_calibration() + assert self.calibration is not None return self.calibration.get_readout_fidelity(qubit) @@ -115,9 +129,8 @@ def get_readout_duration(self, qubit: int) -> float: Arguments: qubit: index of the qubit """ - if self.calibration is None: - msg = f"Calibration data not available for device {self.name}." - raise ValueError(msg) + self.check_calibration() + assert self.calibration is not None return self.calibration.get_readout_duration(qubit) @@ -127,6 +140,7 @@ def get_single_qubit_gates(self) -> set[str]: Returns: list of single-qubit gates """ + self.check_calibration() assert self.calibration is not None return {gate for qubit in range(self.num_qubits) for gate in self.calibration.single_qubit_gate_fidelity[qubit]} @@ -136,6 +150,7 @@ def get_two_qubit_gates(self) -> set[str]: Returns: list of two-qubit gates """ + self.check_calibration() assert self.calibration is not None return { gate @@ -154,9 +169,8 @@ def sanitize_device(self) -> None: * all two-qubit gates have fidelity data for all qubit pairs in the coupling map. This is accomplished by substituting the missing fidelity data with the average fidelity for the gate. """ - if self.calibration is None: - msg = f"Calibration data not available for device {self.name}." - raise ValueError(msg) + self.check_calibration() + assert self.calibration is not None # ensure that all single-qubit gates have fidelity data for all qubits in the coupling map for gate in self.get_single_qubit_gates(): @@ -170,7 +184,7 @@ def sanitize_device(self) -> None: # remove any edge from the coupling map that has a fidelity of 0 for all gates (see ibm_washington) self.coupling_map = [ - edge + list(edge) for edge in self.coupling_map if all(fidelity != 0 for fidelity in self.calibration.two_qubit_gate_fidelity[tuple(edge)].values()) ] diff --git a/src/mqt/bench/devices/ibm.py b/src/mqt/bench/devices/ibm.py index 9063f399a..2224db51c 100644 --- a/src/mqt/bench/devices/ibm.py +++ b/src/mqt/bench/devices/ibm.py @@ -2,136 +2,58 @@ from __future__ import annotations -import json -from typing import TYPE_CHECKING, TypedDict, cast - -if TYPE_CHECKING: - from pathlib import Path - - from qiskit.providers import BackendV2 - from qiskit.transpiler import Target +import logging +from typing import TYPE_CHECKING, cast +from qiskit_ibm_runtime.fake_provider import FakeMontrealV2, FakeTorino, FakeWashingtonV2 +from . import Gateset from .calibration import DeviceCalibration from .device import Device -from .provider import Provider - - -class QubitProperties(TypedDict): - """Class to store the properties of a single qubit.""" - - T1: float # us - T2: float # us - eRO: float - tRO: float # ns - eID: float - eSX: float - eX: float - eCX: dict[str, float] - tCX: dict[str, float] # ns - - -class IBMCalibration(TypedDict): - """Class to store the calibration data of an IBM device.""" - - name: str - basis_gates: list[str] - num_qubits: int - connectivity: list[list[int]] - properties: dict[str, QubitProperties] - - -class IBMProvider(Provider): - """Class to manage IBM devices.""" - - provider_name = "ibm" - @classmethod - def get_available_device_names(cls) -> list[str]: - """Get the names of all available IBM devices.""" - return ["ibm_washington", "ibm_montreal"] # NOTE: update when adding new devices +logger = logging.getLogger(__name__) - @classmethod - def get_native_gates(cls) -> list[str]: - """Get a list of provider specific native gates.""" - return ["id", "rz", "sx", "x", "cx", "measure", "barrier"] # washington, montreal - - @classmethod - def import_backend(cls, path: Path) -> Device: - """Import an IBM backend. +if TYPE_CHECKING: + from qiskit.providers import BackendV2 - Arguments: - path: the path to the JSON file containing the calibration data. - Returns: the Device object - """ - with path.open() as json_file: - ibm_calibration = cast("IBMCalibration", json.load(json_file)) +class IBMDevice(Device): + """IBM Washington device.""" - device = Device() - device.name = ibm_calibration["name"] - device.num_qubits = ibm_calibration["num_qubits"] - device.basis_gates = ibm_calibration["basis_gates"] - device.coupling_map = list(ibm_calibration["connectivity"]) + def __init__(self, backend: BackendV2, device_name: str, gateset_name: str) -> None: + """Initialize the IBM device.""" + self.name = device_name + self.gateset = Gateset(gateset_name, backend.operation_names) + self.num_qubits = backend.num_qubits + self.coupling_map = backend.coupling_map + self.calibration = None + self.target = backend.target + def read_calibration(self) -> None: + """Read the calibration data for the device.""" calibration = DeviceCalibration() - for qubit in range(device.num_qubits): - calibration.single_qubit_gate_fidelity[qubit] = { - "id": 1 - ibm_calibration["properties"][str(qubit)]["eID"], - "rz": 1, # rz is always perfect - "sx": 1 - ibm_calibration["properties"][str(qubit)]["eSX"], - "x": 1 - ibm_calibration["properties"][str(qubit)]["eX"], - } - calibration.readout_fidelity[qubit] = 1 - ibm_calibration["properties"][str(qubit)]["eRO"] - # data in nanoseconds, convert to SI unit (seconds) - calibration.readout_duration[qubit] = ibm_calibration["properties"][str(qubit)]["tRO"] * 1e-9 - # data in microseconds, convert to SI unit (seconds) - calibration.t1[qubit] = ibm_calibration["properties"][str(qubit)]["T1"] * 1e-6 - calibration.t2[qubit] = ibm_calibration["properties"][str(qubit)]["T2"] * 1e-6 - - for qubit1, qubit2 in device.coupling_map: - edge = f"{qubit1}_{qubit2}" - - error = ibm_calibration["properties"][str(qubit1)]["eCX"][edge] - calibration.two_qubit_gate_fidelity[qubit1, qubit2] = {"cx": 1 - error} - - # data in nanoseconds, convert to SI unit (seconds) - duration = ibm_calibration["properties"][str(qubit1)]["tCX"][edge] * 1e-9 - calibration.two_qubit_gate_duration[qubit1, qubit2] = {"cx": duration} - - device.calibration = calibration - return device - - @classmethod - def __import_target(cls, target: Target) -> DeviceCalibration: - """Import calibration data from a Qiskit `Target` object. - - Arguments: - target: the Qiskit `Target` object. - - Returns: Collection of calibration data - """ - calibration = DeviceCalibration() - num_qubits = len(target.qubit_properties) + num_qubits = len(self.target.qubit_properties) for qubit in range(num_qubits): - qubit_props = target.qubit_properties[qubit] + qubit_props = self.target.qubit_properties[qubit] calibration.t1[qubit] = cast("float", qubit_props.t1) calibration.t2[qubit] = cast("float", qubit_props.t2) calibration.single_qubit_gate_fidelity = {qubit: {} for qubit in range(num_qubits)} calibration.single_qubit_gate_duration = {qubit: {} for qubit in range(num_qubits)} - coupling_map = target.build_coupling_map().get_edges() + coupling_map = self.target.build_coupling_map().get_edges() calibration.two_qubit_gate_fidelity = {(qubit1, qubit2): {} for qubit1, qubit2 in coupling_map} calibration.two_qubit_gate_duration = {(qubit1, qubit2): {} for qubit1, qubit2 in coupling_map} - for instruction, qargs in target.instructions: - # Skip `reset` and `delay` gate as their error information is not exposed. + for instruction, qargs in self.target.instructions: if instruction.name == "reset" or instruction.name == "delay": continue - - instruction_props = target[instruction.name][qargs] - error: float = instruction_props.error - duration: float = instruction_props.duration + # Skip control flow operations like ForLoopOp, IfElseOp, SwitchCaseOp, etc. + try: + instruction_props = self.target[instruction.name][qargs] + error: float = instruction_props.error + duration: float = instruction_props.duration + except KeyError: + continue qubit = qargs[0] if instruction.name == "measure": calibration.readout_fidelity[qubit] = 1 - error @@ -144,21 +66,28 @@ def __import_target(cls, target: Target) -> DeviceCalibration: calibration.two_qubit_gate_fidelity[qubit1, qubit2][instruction.name] = 1 - error calibration.two_qubit_gate_duration[qubit1, qubit2][instruction.name] = duration - return calibration + self.calibration = calibration + + +class IBMWashington(IBMDevice): + """IBM Washington device.""" + + def __init__(self) -> None: + """Initialize the IBM Washington device.""" + super().__init__(backend=FakeWashingtonV2(), device_name="ibm_washington", gateset_name="ibm_falcon") + + +class IBMTorino(IBMDevice): + """IBM Torino device.""" + + def __init__(self) -> None: + """Initialize the IBM Torino device.""" + super().__init__(backend=FakeTorino(), device_name="ibm_torino", gateset_name="ibm_heron_r1") - @classmethod - def import_qiskit_backend(cls, backend: BackendV2) -> Device: - """Import device data from a Qiskit `Backend` object. - Arguments: - backend: the Qiskit `BackendV2` object. +class IBMMontreal(IBMDevice): + """IBM Montreal device.""" - Returns: Collection of device data - """ - device = Device() - device.name = backend.name - device.num_qubits = backend.num_qubits - device.basis_gates = backend.operation_names - device.coupling_map = backend.coupling_map.get_edges() - device.calibration = cls.__import_target(backend.target) - return device + def __init__(self) -> None: + """Initialize the IBM Montreal device.""" + super().__init__(backend=FakeMontrealV2(), device_name="ibm_montreal", gateset_name="ibm_falcon") diff --git a/src/mqt/bench/devices/ionq.py b/src/mqt/bench/devices/ionq.py index e586202f4..45f0e2633 100644 --- a/src/mqt/bench/devices/ionq.py +++ b/src/mqt/bench/devices/ionq.py @@ -1,16 +1,70 @@ -"""Module to manage IonQ devices.""" +"""IonQ devices.""" from __future__ import annotations import json from typing import TYPE_CHECKING, TypedDict, cast +from .calibration import DeviceCalibration, get_device_calibration_path +from .device import Device, Gateset + if TYPE_CHECKING: from pathlib import Path -from .calibration import DeviceCalibration -from .device import Device -from .provider import Provider + +class IonQDevice(Device): + """IonQ device.""" + + def __init__(self, calibration_path: Path) -> None: + """Initialize the IonQ device.""" + with calibration_path.open() as json_file: + self.ionq_calibration = cast("IonQCalibration", json.load(json_file)) + self.calibration = None + + self.name = self.ionq_calibration["name"] + self.gateset = Gateset("ionq", self.ionq_calibration["basis_gates"]) + self.num_qubits = self.ionq_calibration["num_qubits"] + self.coupling_map = list(self.ionq_calibration["connectivity"]) + + def read_calibration(self) -> None: + """Read the calibration data for the device.""" + calibration = DeviceCalibration() + for qubit in range(self.num_qubits): + calibration.single_qubit_gate_fidelity[qubit] = dict.fromkeys( + ["ry", "rx"], self.ionq_calibration["fidelity"]["1q"]["mean"] + ) + calibration.single_qubit_gate_fidelity[qubit]["rz"] = 1 # rz is always perfect + calibration.single_qubit_gate_duration[qubit] = dict.fromkeys( + ["ry", "rx"], self.ionq_calibration["timing"]["1q"] + ) + calibration.single_qubit_gate_duration[qubit]["rz"] = 0 # rz is always instantaneous + calibration.readout_fidelity[qubit] = self.ionq_calibration["fidelity"]["spam"]["mean"] + calibration.readout_duration[qubit] = self.ionq_calibration["timing"]["readout"] + calibration.t1[qubit] = self.ionq_calibration["timing"]["t1"] + calibration.t2[qubit] = self.ionq_calibration["timing"]["t2"] + + for qubit1, qubit2 in self.coupling_map: + calibration.two_qubit_gate_fidelity[qubit1, qubit2] = { + "rxx": self.ionq_calibration["fidelity"]["2q"]["mean"] + } + calibration.two_qubit_gate_duration[qubit1, qubit2] = {"rxx": self.ionq_calibration["timing"]["2q"]} + self.calibration = calibration + + +class IonQHarmony(IonQDevice): + """IonQ Harmony device.""" + + def __init__(self) -> None: + """Initialize the IonQ Harmony device.""" + super().__init__(get_device_calibration_path("ionq_harmony")) + + +class IonQAria1(IonQDevice): + """IonQ Aria1 device.""" + + def __init__(self) -> None: + """Initialize the IonQ Aria1 device.""" + super().__init__(get_device_calibration_path("ionq_aria1")) class Statistics(TypedDict): @@ -32,58 +86,3 @@ class IonQCalibration(TypedDict): fidelity: Fidelity num_qubits: int timing: Timing - - -class IonQProvider(Provider): - """Class to manage IonQ devices.""" - - provider_name = "ionq" - - @classmethod - def get_available_device_names(cls) -> list[str]: - """Get the names of all available IonQ devices.""" - return ["ionq_harmony", "ionq_aria1"] # NOTE: update when adding new devices - - @classmethod - def get_native_gates(cls) -> list[str]: - """Get a list of provider specific native gates.""" - return ["rxx", "rz", "ry", "rx", "measure", "barrier"] # harmony, aria1 - - @classmethod - def import_backend(cls, path: Path) -> Device: - """Import an IonQ backend as a Device object. - - Arguments: - path: the path to the JSON file containing the calibration data. - - Returns: - the Device object - """ - with path.open() as json_file: - ionq_calibration = cast("IonQCalibration", json.load(json_file)) - - device = Device() - device.name = ionq_calibration["name"] - device.num_qubits = ionq_calibration["num_qubits"] - device.basis_gates = ionq_calibration["basis_gates"] - device.coupling_map = list(ionq_calibration["connectivity"]) - calibration = DeviceCalibration() - for qubit in range(device.num_qubits): - calibration.single_qubit_gate_fidelity[qubit] = dict.fromkeys( - ["ry", "rx"], ionq_calibration["fidelity"]["1q"]["mean"] - ) - calibration.single_qubit_gate_fidelity[qubit]["rz"] = 1 # rz is always perfect - calibration.single_qubit_gate_duration[qubit] = dict.fromkeys( - ["ry", "rx"], ionq_calibration["timing"]["1q"] - ) - calibration.single_qubit_gate_duration[qubit]["rz"] = 0 # rz is always instantaneous - calibration.readout_fidelity[qubit] = ionq_calibration["fidelity"]["spam"]["mean"] - calibration.readout_duration[qubit] = ionq_calibration["timing"]["readout"] - calibration.t1[qubit] = ionq_calibration["timing"]["t1"] - calibration.t2[qubit] = ionq_calibration["timing"]["t2"] - - for qubit1, qubit2 in device.coupling_map: - calibration.two_qubit_gate_fidelity[qubit1, qubit2] = {"rxx": ionq_calibration["fidelity"]["2q"]["mean"]} - calibration.two_qubit_gate_duration[qubit1, qubit2] = {"rxx": ionq_calibration["timing"]["2q"]} - device.calibration = calibration - return device diff --git a/src/mqt/bench/devices/iqm.py b/src/mqt/bench/devices/iqm.py index afaf21a48..7224fc929 100644 --- a/src/mqt/bench/devices/iqm.py +++ b/src/mqt/bench/devices/iqm.py @@ -5,12 +5,74 @@ import json from typing import TYPE_CHECKING, TypedDict, cast +from .calibration import DeviceCalibration, get_device_calibration_path +from .device import Device, Gateset + if TYPE_CHECKING: from pathlib import Path -from .calibration import DeviceCalibration -from .device import Device -from .provider import Provider + +class IQMDevice(Device): + """IQM device.""" + + def __init__(self, calibration_path: Path) -> None: + """Initialize the device.""" + with calibration_path.open() as json_file: + self.iqm_calibration = cast("IQMCalibration", json.load(json_file)) + self.calibration = None + + self.name = self.iqm_calibration["name"] + self.gateset = Gateset("iqm", self.iqm_calibration["basis_gates"]) + self.num_qubits = self.iqm_calibration["num_qubits"] + self.coupling_map = list(self.iqm_calibration["connectivity"]) + + def read_calibration(self) -> None: + """Read the calibration data for the device.""" + calibration = DeviceCalibration() + for qubit in range(self.num_qubits): + calibration.single_qubit_gate_fidelity[qubit] = dict.fromkeys( + ["r"], 1.0 - self.iqm_calibration["error"]["one_q"][str(qubit)] + ) + calibration.single_qubit_gate_duration[qubit] = dict.fromkeys( + ["r"], + self.iqm_calibration["timing"]["one_q"] * 1e-9, # ns to s + ) + calibration.readout_fidelity[qubit] = 1.0 - self.iqm_calibration["error"]["readout"][str(qubit)] + calibration.readout_duration[qubit] = self.iqm_calibration["timing"]["readout"] * 1e-9 # ns to s + calibration.t1[qubit] = self.iqm_calibration["timing"]["t1"][str(qubit)] * 1e-9 # ns to s + calibration.t2[qubit] = self.iqm_calibration["timing"]["t2"][str(qubit)] * 1e-9 # ns to s + + for qubit1, qubit2 in self.coupling_map: + if (qubit1, qubit2) in calibration.two_qubit_gate_fidelity: + continue # Skip reverse direction + calibration.two_qubit_gate_fidelity[qubit1, qubit2] = { + "cz": 1.0 - self.iqm_calibration["error"]["two_q"][str(qubit1) + "-" + str(qubit2)] + } + calibration.two_qubit_gate_duration[qubit1, qubit2] = { + "cz": self.iqm_calibration["timing"]["two_q"] * 1e-9 # ns to s + } + + # Same values for the reverse direction + calibration.two_qubit_gate_fidelity[qubit2, qubit1] = calibration.two_qubit_gate_fidelity[qubit1, qubit2] + calibration.two_qubit_gate_duration[qubit2, qubit1] = calibration.two_qubit_gate_duration[qubit1, qubit2] + + self.calibration = calibration + + +class IQMAdonis(IQMDevice): + """IQM Adonis device.""" + + def __init__(self) -> None: + """Initialize the IQM Adonis device.""" + super().__init__(get_device_calibration_path("iqm_adonis")) + + +class IQMApollo(IQMDevice): + """IQM Apollo device.""" + + def __init__(self) -> None: + """Initialize the IQM Apollo device.""" + super().__init__(get_device_calibration_path("iqm_apollo")) class Infidelity(TypedDict): @@ -43,67 +105,3 @@ class IQMCalibration(TypedDict): error: Infidelity num_qubits: int timing: Timing - - -class IQMProvider(Provider): - """Class to manage IQM devices.""" - - provider_name = "iqm" - - @classmethod - def get_available_device_names(cls) -> list[str]: - """Get the names of all available IQM devices.""" - return ["iqm_adonis", "iqm_apollo"] # NOTE: update when adding new devices - - @classmethod - def get_native_gates(cls) -> list[str]: - """Get a list of provider specific native gates.""" - return ["r", "cz", "measure", "barrier"] - - @classmethod - def import_backend(cls, path: Path) -> Device: - """Import an iqm backend as a Device object. - - Args: - path: the path to the JSON file containing the calibration data. - - Returns: the Device object - """ - with path.open() as json_file: - iqm_calibration = cast("IQMCalibration", json.load(json_file)) - - device = Device() - device.name = iqm_calibration["name"] - device.num_qubits = iqm_calibration["num_qubits"] - device.basis_gates = iqm_calibration["basis_gates"] - device.coupling_map = list(iqm_calibration["connectivity"]) - calibration = DeviceCalibration() - for qubit in range(device.num_qubits): - calibration.single_qubit_gate_fidelity[qubit] = dict.fromkeys( - ["r"], 1.0 - iqm_calibration["error"]["one_q"][str(qubit)] - ) - calibration.single_qubit_gate_duration[qubit] = dict.fromkeys( - ["r"], - iqm_calibration["timing"]["one_q"] * 1e-9, # ns to s - ) - calibration.readout_fidelity[qubit] = 1.0 - iqm_calibration["error"]["readout"][str(qubit)] - calibration.readout_duration[qubit] = iqm_calibration["timing"]["readout"] * 1e-9 # ns to s - calibration.t1[qubit] = iqm_calibration["timing"]["t1"][str(qubit)] * 1e-9 # ns to s - calibration.t2[qubit] = iqm_calibration["timing"]["t2"][str(qubit)] * 1e-9 # ns to s - - for qubit1, qubit2 in device.coupling_map: - if (qubit1, qubit2) in calibration.two_qubit_gate_fidelity: - continue # Skip reverse direction - calibration.two_qubit_gate_fidelity[qubit1, qubit2] = { - "cz": 1.0 - iqm_calibration["error"]["two_q"][str(qubit1) + "-" + str(qubit2)] - } - calibration.two_qubit_gate_duration[qubit1, qubit2] = { - "cz": iqm_calibration["timing"]["two_q"] * 1e-9 # ns to s - } - - # Same values for the reverse direction - calibration.two_qubit_gate_fidelity[qubit2, qubit1] = calibration.two_qubit_gate_fidelity[qubit1, qubit2] - calibration.two_qubit_gate_duration[qubit2, qubit1] = calibration.two_qubit_gate_duration[qubit1, qubit2] - - device.calibration = calibration - return device diff --git a/src/mqt/bench/devices/oqc.py b/src/mqt/bench/devices/oqc.py index 14cf54711..c0a4413de 100644 --- a/src/mqt/bench/devices/oqc.py +++ b/src/mqt/bench/devices/oqc.py @@ -3,14 +3,43 @@ from __future__ import annotations import json -from typing import TYPE_CHECKING, TypedDict, cast +from typing import TypedDict, cast -if TYPE_CHECKING: - from pathlib import Path +from .calibration import DeviceCalibration, get_device_calibration_path +from .device import Device, Gateset -from .calibration import DeviceCalibration -from .device import Device -from .provider import Provider + +class OQCLucy(Device): + """OQC Lucy device.""" + + def __init__(self) -> None: + """Initialize the OQC device.""" + with get_device_calibration_path("oqc_lucy").open() as json_file: + self.oqc_calibration = cast("OQCCalibration", json.load(json_file)) + self.calibration = None + + self.name = self.oqc_calibration["name"] + self.gateset = Gateset("oqc", self.oqc_calibration["basis_gates"]) + self.num_qubits = self.oqc_calibration["num_qubits"] + self.coupling_map = list(self.oqc_calibration["connectivity"]) + + def read_calibration(self) -> None: + """Read the calibration data for the device.""" + calibration = DeviceCalibration() + for qubit in range(self.num_qubits): + calibration.single_qubit_gate_fidelity[qubit] = { + gate: self.oqc_calibration["properties"]["one_qubit"][str(qubit)]["fRB"] for gate in ["rz", "sx", "x"] + } + calibration.readout_fidelity[qubit] = self.oqc_calibration["properties"]["one_qubit"][str(qubit)]["fRO"] + # data in microseconds, convert to SI unit (seconds) + calibration.t1[qubit] = self.oqc_calibration["properties"]["one_qubit"][str(qubit)]["T1"] * 1e-6 + calibration.t2[qubit] = self.oqc_calibration["properties"]["one_qubit"][str(qubit)]["T2"] * 1e-6 + + for qubit1, qubit2 in self.coupling_map: + calibration.two_qubit_gate_fidelity[qubit1, qubit2] = dict.fromkeys( + ["ecr"], self.oqc_calibration["properties"]["two_qubit"][f"{qubit1}-{qubit2}"]["fECR"] + ) + self.calibration = calibration class QubitProperties(TypedDict): @@ -52,55 +81,3 @@ class OQCCalibration(TypedDict): num_qubits: int connectivity: list[list[int]] properties: Properties - - -class OQCProvider(Provider): - """Class to manage OQC devices.""" - - provider_name = "oqc" - - @classmethod - def get_available_device_names(cls) -> list[str]: - """Get the names of all available OQC devices.""" - return ["oqc_lucy"] # NOTE: update when adding new devices - - @classmethod - def get_native_gates(cls) -> list[str]: - """Get a list of provider specific native gates.""" - return ["rz", "sx", "x", "ecr", "measure", "barrier"] # lucy - - @classmethod - def import_backend(cls, path: Path) -> Device: - """Import an OQC backend. - - Arguments: - path: the path to the JSON file containing the calibration data. - - Returns: - the Device object - """ - with path.open() as json_file: - oqc_calibration = cast("OQCCalibration", json.load(json_file)) - - device = Device() - device.name = oqc_calibration["name"] - device.num_qubits = oqc_calibration["num_qubits"] - device.basis_gates = oqc_calibration["basis_gates"] - device.coupling_map = list(oqc_calibration["connectivity"]) - - calibration = DeviceCalibration() - for qubit in range(device.num_qubits): - calibration.single_qubit_gate_fidelity[qubit] = { - gate: oqc_calibration["properties"]["one_qubit"][str(qubit)]["fRB"] for gate in ["rz", "sx", "x"] - } - calibration.readout_fidelity[qubit] = oqc_calibration["properties"]["one_qubit"][str(qubit)]["fRO"] - # data in microseconds, convert to SI unit (seconds) - calibration.t1[qubit] = oqc_calibration["properties"]["one_qubit"][str(qubit)]["T1"] * 1e-6 - calibration.t2[qubit] = oqc_calibration["properties"]["one_qubit"][str(qubit)]["T2"] * 1e-6 - - for qubit1, qubit2 in device.coupling_map: - calibration.two_qubit_gate_fidelity[qubit1, qubit2] = dict.fromkeys( - ["ecr"], oqc_calibration["properties"]["two_qubit"][f"{qubit1}-{qubit2}"]["fECR"] - ) - device.calibration = calibration - return device diff --git a/src/mqt/bench/devices/provider.py b/src/mqt/bench/devices/provider.py deleted file mode 100644 index e8641a349..000000000 --- a/src/mqt/bench/devices/provider.py +++ /dev/null @@ -1,77 +0,0 @@ -"""Abstract class for a quantum device provider.""" - -from __future__ import annotations - -from abc import ABC, abstractmethod -from dataclasses import dataclass -from importlib import resources -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from pathlib import Path - - from .device import Device - - -@dataclass -class Provider(ABC): - """Abstract class for a quantum device provider.""" - - @property - @abstractmethod - def provider_name(self) -> str: - """Get the name of the provider.""" - - @classmethod - def get_available_devices(cls, sanitize_device: bool = False) -> list[Device]: - """Get a list of all available devices. - - Arguments: - sanitize_device: whether to sanitize the device calibration data - """ - return [cls.get_device(name, sanitize_device=sanitize_device) for name in cls.get_available_device_names()] - - @classmethod - @abstractmethod - def get_available_device_names(cls) -> list[str]: - """Get a list of all available device names.""" - - @classmethod - @abstractmethod - def get_native_gates(cls) -> list[str]: - """Get a list of provider specific native gates.""" - - @classmethod - def get_available_basis_gates(cls) -> list[list[str]]: - """Get a list of all available basis gates.""" - unique_basis_gates = {tuple(device.basis_gates) for device in cls.get_available_devices()} - return [list(basis_gates) for basis_gates in unique_basis_gates] - - @classmethod - def get_max_qubits(cls) -> int: - """Get the maximum number of qubits offered by a device from the provider.""" - return max(device.num_qubits for device in cls.get_available_devices()) - - @classmethod - @abstractmethod - def import_backend(cls, path: Path) -> Device: - """Import a device from a file containing calibration data.""" - - @classmethod - def get_device(cls, name: str, sanitize_device: bool = False) -> Device: - """Get a device by name. - - Arguments: - name: the name of the device - sanitize_device: whether to sanitize the device calibration data - """ - if name not in cls.get_available_device_names(): - msg = f"Device {name} not found." - raise ValueError(msg) - - ref = resources.files("mqt.bench") / "calibration_files" / f"{name}_calibration.json" - with resources.as_file(ref) as json_path: - device = cls.import_backend(json_path) - if sanitize_device: - device.sanitize_device() - return device diff --git a/src/mqt/bench/devices/quantinuum.py b/src/mqt/bench/devices/quantinuum.py index 1fcc2d7dd..dfa6f6b7c 100644 --- a/src/mqt/bench/devices/quantinuum.py +++ b/src/mqt/bench/devices/quantinuum.py @@ -3,14 +3,41 @@ from __future__ import annotations import json -from typing import TYPE_CHECKING, TypedDict, cast +from typing import TypedDict, cast -if TYPE_CHECKING: - from pathlib import Path +from .calibration import DeviceCalibration, get_device_calibration_path +from .device import Device, Gateset -from .calibration import DeviceCalibration -from .device import Device -from .provider import Provider + +class QuantinuumH2(Device): + """Quantinuum H2 device.""" + + def __init__(self) -> None: + """Initialize the Quantinuum device.""" + with get_device_calibration_path("quantinuum_h2").open() as json_file: + self.quantinuum_calibration = cast("QuantinuumCalibration", json.load(json_file)) + self.calibration = None + + self.name = self.quantinuum_calibration["name"] + self.gateset = Gateset("quantinuum", self.quantinuum_calibration["basis_gates"]) + self.num_qubits = self.quantinuum_calibration["num_qubits"] + self.coupling_map = list(self.quantinuum_calibration["connectivity"]) + + def read_calibration(self) -> None: + """Read the calibration data for the device.""" + calibration = DeviceCalibration() + for qubit in range(self.num_qubits): + calibration.single_qubit_gate_fidelity[qubit] = dict.fromkeys( + ["ry", "rx"], self.quantinuum_calibration["fidelity"]["1q"]["mean"] + ) + calibration.single_qubit_gate_fidelity[qubit]["rz"] = 1 # rz is always perfect + calibration.readout_fidelity[qubit] = self.quantinuum_calibration["fidelity"]["spam"]["mean"] + + for qubit1, qubit2 in self.coupling_map: + calibration.two_qubit_gate_fidelity[qubit1, qubit2] = { + "rzz": self.quantinuum_calibration["fidelity"]["2q"]["mean"] + } + self.calibration = calibration class Statistics(TypedDict): @@ -30,52 +57,3 @@ class QuantinuumCalibration(TypedDict): connectivity: list[list[int]] fidelity: Fidelity num_qubits: int - - -class QuantinuumProvider(Provider): - """Class to manage Quantinuum devices.""" - - provider_name = "quantinuum" - - @classmethod - def get_available_device_names(cls) -> list[str]: - """Get the names of all available Quantinuum devices.""" - return ["quantinuum_h2"] # NOTE: update when adding new devices - - @classmethod - def get_native_gates(cls) -> list[str]: - """Get a list of provider specific native gates.""" - return ["rzz", "rz", "ry", "rx", "measure", "barrier"] # h2 - - @classmethod - def import_backend(cls, path: Path) -> Device: - """Import an Quantinuum backend as a Device object. - - Arguments: - path: the path to the JSON file containing the calibration data. - - Returns: - the Device object - """ - with path.open() as json_file: - quantinuum_calibration = cast("QuantinuumCalibration", json.load(json_file)) - - device = Device() - device.name = quantinuum_calibration["name"] - device.num_qubits = quantinuum_calibration["num_qubits"] - device.basis_gates = quantinuum_calibration["basis_gates"] - device.coupling_map = list(quantinuum_calibration["connectivity"]) - calibration = DeviceCalibration() - for qubit in range(device.num_qubits): - calibration.single_qubit_gate_fidelity[qubit] = dict.fromkeys( - ["ry", "rx"], quantinuum_calibration["fidelity"]["1q"]["mean"] - ) - calibration.single_qubit_gate_fidelity[qubit]["rz"] = 1 # rz is always perfect - calibration.readout_fidelity[qubit] = quantinuum_calibration["fidelity"]["spam"]["mean"] - - for qubit1, qubit2 in device.coupling_map: - calibration.two_qubit_gate_fidelity[qubit1, qubit2] = { - "rzz": quantinuum_calibration["fidelity"]["2q"]["mean"] - } - device.calibration = calibration - return device diff --git a/src/mqt/bench/devices/rigetti.py b/src/mqt/bench/devices/rigetti.py index bad9dcdb9..381aab2fb 100644 --- a/src/mqt/bench/devices/rigetti.py +++ b/src/mqt/bench/devices/rigetti.py @@ -4,146 +4,41 @@ import json import warnings -from typing import TYPE_CHECKING, TypedDict, cast +from typing import TypedDict, cast -if TYPE_CHECKING: - from pathlib import Path +from .calibration import DeviceCalibration, get_device_calibration_path +from .device import Device, Gateset -from .calibration import DeviceCalibration -from .device import Device -from .provider import Provider +class RigettiAspenM3(Device): + """Rigetti Aspen M3 device.""" -class QubitProperties(TypedDict): - """Class to store the properties of a single qubit.""" - - fActiveReset: float - fRO: float - f1QRB: float - f1QRB_std_err: float - f1Q_simultaneous_RB: float - f1Q_simultaneous_RB_std_err: float - T1: float - T2: float - - -class TwoQubitProperties(TypedDict): - """Class to store the properties of a two-qubit gate.""" - - fCZ: float - fCZ_std_err: float - fCPHASE: float - fCPHASE_std_err: float - fXY: float - fXY_std_err: float - - -Properties = TypedDict("Properties", {"1Q": dict[str, QubitProperties], "2Q": dict[str, TwoQubitProperties]}) - - -class RigettiCalibration(TypedDict): - """Class to store the calibration data of a Rigetti device.""" + def __init__(self) -> None: + """Initialize the Rigetti Aspen M3 device.""" + with get_device_calibration_path("rigetti_aspen_m3").open() as json_file: + self.rigetti_calibration = cast("RigettiCalibration", json.load(json_file)) + self.calibration = None - name: str - num_qubits: int - basis_gates: list[str] - connectivity: list[tuple[int, int]] - properties: Properties - - -class RigettiProvider(Provider): - """Class to manage Rigetti devices.""" - - provider_name = "rigetti" - - @classmethod - def get_available_device_names(cls) -> list[str]: - """Get the names of all available Rigetti devices.""" - return ["rigetti_aspen_m3"] # NOTE: update when adding new devices - - @classmethod - def get_native_gates(cls) -> list[str]: - """Get a list of provider specific native gates.""" - return ["rx", "rz", "cz", "cp", "xx_plus_yy", "measure", "barrier"] # aspen_m3 - - @classmethod - def __from_rigetti_index(cls, rigetti_index: int) -> int: - """Convert the Rigetti qubit index to a consecutive index. - - The Rigetti architectures consist of 8-qubit rings arranged in a two-dimensional grid. - Each qubit is identified by a three digit number, where: - * the first digit is the row index, - * the second digit is the column index, and - * the third digit is the ring index. - - Arguments: - rigetti_index: the Rigetti qubit index - - Returns: the consecutive index - """ - ring_size = 8 - columns = 5 - row = rigetti_index // 100 - column = (rigetti_index % 100) // 10 - ring = rigetti_index % 10 - qubit_indx = row * (ring_size * columns) + column * ring_size + ring - # Account for missing qubit in Aspen-M3 - # rigetti_index: 136 = qubit_indx: 70 - if qubit_indx >= 70: - qubit_indx = qubit_indx - 1 - return qubit_indx - - @classmethod - def __to_rigetti_index(cls, index: int) -> int: - """Convert the consecutive index to the Rigetti qubit index. - - Arguments: - index: the consecutive index. - - Returns: the Rigetti qubit index - """ - # Account for missing qubit in Aspen-M3 - # rigetti_index: 136 = qubit_indx: 70 - if index >= 70: - index = index + 1 - ring_size = 8 - columns = 5 - row = index // (ring_size * columns) - column = (index % (ring_size * columns)) // ring_size - ring = (index % (ring_size * columns)) % ring_size - return row * 100 + column * 10 + ring - - @classmethod - def import_backend(cls, path: Path) -> Device: - """Import a Rigetti backend. - - Arguments: - path: the path to the JSON file containing the calibration data. - - Returns: - the Device object - """ - with path.open() as json_file: - rigetti_calibration = cast("RigettiCalibration", json.load(json_file)) - - device = Device() - device.name = rigetti_calibration["name"] - device.num_qubits = rigetti_calibration["num_qubits"] - device.basis_gates = rigetti_calibration["basis_gates"] - - device.coupling_map = [ - [cls.__from_rigetti_index(a), cls.__from_rigetti_index(b)] for a, b in rigetti_calibration["connectivity"] + self.name = self.rigetti_calibration["name"] + self.gateset = Gateset("rigetti", self.rigetti_calibration["basis_gates"]) + self.num_qubits = self.rigetti_calibration["num_qubits"] + self.coupling_map = [ + [from_rigetti_index(a), from_rigetti_index(b)] for a, b in self.rigetti_calibration["connectivity"] ] + def read_calibration(self) -> None: + """Read the calibration data for the device.""" calibration = DeviceCalibration() - for qubit in range(device.num_qubits): - rigetti_index = cls.__to_rigetti_index(qubit) + for qubit in range(self.num_qubits): + rigetti_index = to_rigetti_index(qubit) calibration.single_qubit_gate_fidelity[qubit] = { - gate: rigetti_calibration["properties"]["1Q"][str(rigetti_index)]["f1QRB"] for gate in ["rx", "rz"] + gate: self.rigetti_calibration["properties"]["1Q"][str(rigetti_index)]["f1QRB"] for gate in ["rx", "rz"] } - calibration.readout_fidelity[qubit] = rigetti_calibration["properties"]["1Q"][str(rigetti_index)]["fRO"] - calibration.t1[qubit] = rigetti_calibration["properties"]["1Q"][str(rigetti_index)]["T1"] - calibration.t2[qubit] = rigetti_calibration["properties"]["1Q"][str(rigetti_index)]["T2"] + calibration.readout_fidelity[qubit] = self.rigetti_calibration["properties"]["1Q"][str(rigetti_index)][ + "fRO" + ] + calibration.t1[qubit] = self.rigetti_calibration["properties"]["1Q"][str(rigetti_index)]["T1"] + calibration.t2[qubit] = self.rigetti_calibration["properties"]["1Q"][str(rigetti_index)]["T2"] # Store the fidelity data of all two-qubit gates for averaging cz_lst, cp_lst, xx_plus_yy_lst = [], [], [] @@ -153,26 +48,26 @@ def import_backend(cls, path: Path) -> Device: ) warnings.warn(msg, stacklevel=1) - for qubit1, qubit2 in device.coupling_map: - rigetti_index1 = cls.__to_rigetti_index(qubit1) - rigetti_index2 = cls.__to_rigetti_index(qubit2) + for qubit1, qubit2 in self.coupling_map: + rigetti_index1 = to_rigetti_index(qubit1) + rigetti_index2 = to_rigetti_index(qubit2) if qubit1 > qubit2: # Rigetti calibration data is symmetric continue # Reverse edge will be set later edge = f"{rigetti_index1}-{rigetti_index2}" fidelity = {} try: # Collect the fidelity data if available and save in lst for averaging - fidelity["cz"] = rigetti_calibration["properties"]["2Q"][edge]["fCZ"] + fidelity["cz"] = self.rigetti_calibration["properties"]["2Q"][edge]["fCZ"] cz_lst.append(fidelity["cz"]) except KeyError: # If not available, set to -1 to indicate missing fidelity["cz"] = -1.0 try: - fidelity["cp"] = rigetti_calibration["properties"]["2Q"][edge]["fCPHASE"] + fidelity["cp"] = self.rigetti_calibration["properties"]["2Q"][edge]["fCPHASE"] cp_lst.append(fidelity["cp"]) except KeyError: fidelity["cp"] = -1.0 try: - fidelity["xx_plus_yy"] = rigetti_calibration["properties"]["2Q"][edge]["fXY"] + fidelity["xx_plus_yy"] = self.rigetti_calibration["properties"]["2Q"][edge]["fXY"] xx_plus_yy_lst.append(fidelity["xx_plus_yy"]) except KeyError: fidelity["xx_plus_yy"] = -1.0 @@ -185,7 +80,7 @@ def import_backend(cls, path: Path) -> Device: cp_avg = sum(cp_lst) / len(cp_lst) xx_plus_yy_avg = sum(xx_plus_yy_lst) / len(xx_plus_yy_lst) - for qubit1, qubit2 in device.coupling_map: + for qubit1, qubit2 in self.coupling_map: if qubit1 > qubit2: continue # Check if the fidelity data is missing (== -1) and set to average if so @@ -198,5 +93,88 @@ def import_backend(cls, path: Path) -> Device: # Rigetti calibration data is symmetric, set same values for reverse edge calibration.two_qubit_gate_fidelity[qubit2, qubit1] = calibration.two_qubit_gate_fidelity[qubit1, qubit2] - device.calibration = calibration - return device + self.calibration = calibration + + +class QubitProperties(TypedDict): + """Class to store the properties of a single qubit.""" + + fActiveReset: float + fRO: float + f1QRB: float + f1QRB_std_err: float + f1Q_simultaneous_RB: float + f1Q_simultaneous_RB_std_err: float + T1: float + T2: float + + +class TwoQubitProperties(TypedDict): + """Class to store the properties of a two-qubit gate.""" + + fCZ: float + fCZ_std_err: float + fCPHASE: float + fCPHASE_std_err: float + fXY: float + fXY_std_err: float + + +Properties = TypedDict("Properties", {"1Q": dict[str, QubitProperties], "2Q": dict[str, TwoQubitProperties]}) + + +class RigettiCalibration(TypedDict): + """Class to store the calibration data of a Rigetti device.""" + + name: str + num_qubits: int + basis_gates: list[str] + connectivity: list[tuple[int, int]] + properties: Properties + + +def from_rigetti_index(rigetti_index: int) -> int: + """Convert the Rigetti qubit index to a consecutive index. + + The Rigetti architectures consist of 8-qubit rings arranged in a two-dimensional grid. + Each qubit is identified by a three digit number, where: + * the first digit is the row index, + * the second digit is the column index, and + * the third digit is the ring index. + + Arguments: + rigetti_index: the Rigetti qubit index + + Returns: the consecutive index + """ + ring_size = 8 + columns = 5 + row = rigetti_index // 100 + column = (rigetti_index % 100) // 10 + ring = rigetti_index % 10 + qubit_indx = row * (ring_size * columns) + column * ring_size + ring + # Account for missing qubit in Aspen-M3 + # rigetti_index: 136 = qubit_indx: 70 + if qubit_indx >= 70: + qubit_indx = qubit_indx - 1 + return qubit_indx + + +def to_rigetti_index(index: int) -> int: + """Convert the consecutive index to the Rigetti qubit index. + + Arguments: + index: the consecutive index. + + Returns: the Rigetti qubit index + """ + # Account for missing qubit in Aspen-M3 + # rigetti_index: 136 = qubit_indx: 70 + if index >= 70: + index = index + 1 + ring_size = 8 + columns = 5 + row = index // (ring_size * columns) + column = (index % (ring_size * columns)) // ring_size + ring = (index % (ring_size * columns)) % ring_size + return row * 100 + column * 10 + ring diff --git a/src/mqt/bench/qiskit_helper.py b/src/mqt/bench/qiskit_helper.py index 8edd30f17..814ebeb5b 100644 --- a/src/mqt/bench/qiskit_helper.py +++ b/src/mqt/bench/qiskit_helper.py @@ -8,14 +8,54 @@ if TYPE_CHECKING: # pragma: no cover from qiskit import QuantumCircuit - from .devices import Device, Provider + from .devices import Device, Gateset from qiskit import transpile -from qiskit.qasm2 import dumps from .utils import get_openqasm_gates, save_as_qasm +def get_alg_level( + qc: QuantumCircuit, + num_qubits: int | None, + file_precheck: bool, + return_qc: bool = False, + target_directory: str = "./", + target_filename: str = "", + qasm_format: str = "qasm3", +) -> bool | QuantumCircuit: + """Handles the creation of the benchmark on the algorithm level. + + Arguments: + qc: quantum circuit which the to be created benchmark circuit is based on + num_qubits: number of qubits + file_precheck: flag indicating whether to check whether the file already exists before creating it (again) + return_qc: flag if the actual circuit shall be returned + target_directory: alternative directory to the default one to store the created circuit + target_filename: alternative filename to the default one + qasm_format: qasm format (qasm2 or qasm3) + + + Returns: + if return_qc == True: quantum circuit object + else: True/False indicating whether the function call was successful or not + """ + if return_qc: + return qc + + if qasm_format == "qasm2": + msg = "'qasm2' is not supported for the algorithm level, please use 'qasm3' instead." + raise ValueError(msg) + filename_alg = target_filename or qc.name + "_alg_qiskit_" + str(num_qubits) + "_" + qasm_format + + path = Path(target_directory, filename_alg + ".qasm") + + if file_precheck and path.is_file(): + return True + + return save_as_qasm(qc=qc, filename=filename_alg, qasm_format="qasm3", target_directory=target_directory) + + @overload def get_indep_level( qc: QuantumCircuit, @@ -24,6 +64,7 @@ def get_indep_level( return_qc: Literal[True], target_directory: str = "./", target_filename: str = "", + qasm_format: str = "qasm3", ) -> QuantumCircuit: ... @@ -35,6 +76,7 @@ def get_indep_level( return_qc: Literal[False], target_directory: str = "./", target_filename: str = "", + qasm_format: str = "qasm3", ) -> bool: ... @@ -45,6 +87,7 @@ def get_indep_level( return_qc: bool = False, target_directory: str = "./", target_filename: str = "", + qasm_format: str = "qasm3", ) -> bool | QuantumCircuit: """Handles the creation of the benchmark on the target-independent level. @@ -55,12 +98,14 @@ def get_indep_level( return_qc: flag if the actual circuit shall be returned target_directory: alternative directory to the default one to store the created circuit target_filename: alternative filename to the default one + qasm_format: qasm format (qasm2 or qasm3) + Returns: if return_qc == True: quantum circuit object else: True/False indicating whether the function call was successful or not """ - filename_indep = target_filename or qc.name + "_indep_qiskit_" + str(num_qubits) + filename_indep = target_filename or qc.name + "_indep_qiskit_" + str(num_qubits) + "_" + qasm_format path = Path(target_directory, filename_indep + ".qasm") if file_precheck and path.is_file(): @@ -70,60 +115,63 @@ def get_indep_level( if return_qc: return target_independent + return save_as_qasm( - dumps(target_independent), - filename_indep, - target_directory=target_directory, + qc=target_independent, filename=filename_indep, qasm_format=qasm_format, target_directory=target_directory ) @overload def get_native_gates_level( qc: QuantumCircuit, - provider: Provider, + gateset: Gateset, num_qubits: int | None, opt_level: int, file_precheck: bool, return_qc: Literal[True], target_directory: str = "./", target_filename: str = "", + qasm_format: str = "qasm3", ) -> QuantumCircuit: ... @overload def get_native_gates_level( qc: QuantumCircuit, - provider: Provider, + gateset: Gateset, num_qubits: int | None, opt_level: int, file_precheck: bool, return_qc: Literal[False], target_directory: str = "./", target_filename: str = "", + qasm_format: str = "qasm3", ) -> bool: ... def get_native_gates_level( qc: QuantumCircuit, - provider: Provider, + gateset: Gateset, num_qubits: int | None, opt_level: int, file_precheck: bool, return_qc: bool = False, target_directory: str = "./", target_filename: str = "", + qasm_format: str = "qasm3", ) -> bool | QuantumCircuit: """Handles the creation of the benchmark on the target-dependent native gates level. Arguments: qc: quantum circuit which the to be created benchmark circuit is based on - provider: determines the native gate set + gateset: contains the name of the gateset and a list of native gates num_qubits: number of qubits opt_level: optimization level file_precheck: flag indicating whether to check whether the file already exists before creating it (again) return_qc: flag if the actual circuit shall be returned target_directory: alternative directory to the default one to store the created circuit target_filename: alternative filename to the default one + qasm_format: qasm format (qasm2 or qasm3) Returns: if return_qc == True: quantum circuit object @@ -131,7 +179,7 @@ def get_native_gates_level( """ if not target_filename: filename_native = ( - qc.name + "_nativegates_" + provider.provider_name + "_qiskit_opt" + str(opt_level) + "_" + str(num_qubits) + qc.name + "_nativegates_" + gateset.gateset_name + "_qiskit_opt" + str(opt_level) + "_" + str(num_qubits) ) else: filename_native = target_filename @@ -140,16 +188,41 @@ def get_native_gates_level( if file_precheck and path.is_file(): return True - gate_set = provider.get_native_gates() - compiled_without_architecture = transpile( - qc, basis_gates=gate_set, optimization_level=opt_level, seed_transpiler=10 - ) + if gateset.gateset_name == "clifford+t": + from qiskit.converters import circuit_to_dag, dag_to_circuit # noqa: PLC0415 + from qiskit.transpiler.passes.synthesis import SolovayKitaev # noqa: PLC0415 + + # Transpile the circuit to single- and two-qubit gates including rotations + compiled_for_sk = transpile( + qc, + basis_gates=[*gateset.gates, "rx", "ry", "rz"], + optimization_level=opt_level, + seed_transpiler=10, + ) + # Synthesize the rotations to Clifford+T gates + # Measurements are removed and added back after the synthesis to avoid errors in the Solovay-Kitaev pass + pass_ = SolovayKitaev() + new_qc = dag_to_circuit(pass_.run(circuit_to_dag(compiled_for_sk.remove_final_measurements(inplace=False)))) + new_qc.measure_all() + # Transpile once more to remove unnecessary gates and optimize the circuit + compiled_without_architecture = transpile( + new_qc, + basis_gates=gateset.gates, + optimization_level=opt_level, + seed_transpiler=10, + ) + else: + compiled_without_architecture = transpile( + qc, basis_gates=gateset.gates, optimization_level=opt_level, seed_transpiler=10 + ) if return_qc: return compiled_without_architecture + return save_as_qasm( - dumps(compiled_without_architecture), - filename_native, - gate_set, + qc=compiled_without_architecture, + filename=filename_native, + qasm_format=qasm_format, + gateset=gateset.gates, target_directory=target_directory, ) @@ -164,6 +237,7 @@ def get_mapped_level( return_qc: Literal[True], target_directory: str = "./", target_filename: str = "", + qasm_format: str = "qasm3", ) -> QuantumCircuit: ... @@ -177,6 +251,7 @@ def get_mapped_level( return_qc: Literal[False], target_directory: str = "./", target_filename: str = "", + qasm_format: str = "qasm3", ) -> bool: ... @@ -189,6 +264,7 @@ def get_mapped_level( return_qc: bool = False, target_directory: str = "./", target_filename: str = "", + qasm_format: str = "qasm3", ) -> bool | QuantumCircuit: """Handles the creation of the benchmark on the target-dependent mapped level. @@ -201,6 +277,7 @@ def get_mapped_level( return_qc: flag if the actual circuit shall be returned target_directory: alternative directory to the default one to store the created circuit target_filename: alternative filename to the default one + qasm_format: qasm format (qasm2 or qasm3) Returns: if return_qc == True: quantum circuit object @@ -219,17 +296,19 @@ def get_mapped_level( compiled_with_architecture = transpile( qc, optimization_level=opt_level, - basis_gates=device.basis_gates, + basis_gates=device.gateset.gates, coupling_map=c_map, seed_transpiler=10, ) if return_qc: return compiled_with_architecture + return save_as_qasm( - dumps(compiled_with_architecture), - filename_mapped, - device.basis_gates, - True, - c_map, - target_directory, + qc=compiled_with_architecture, + filename=filename_mapped, + qasm_format=qasm_format, + gateset=device.gateset.gates, + mapped=True, + c_map=c_map, + target_directory=target_directory, ) diff --git a/src/mqt/bench/tket_helper.py b/src/mqt/bench/tket_helper.py index 63b71596d..3dead3f47 100644 --- a/src/mqt/bench/tket_helper.py +++ b/src/mqt/bench/tket_helper.py @@ -17,20 +17,19 @@ RoutingPass, SynthesiseTket, ) -from pytket.placement import GraphPlacement, LinePlacement -from pytket.qasm import circuit_to_qasm_str +from pytket.placement import LinePlacement from qiskit import QuantumCircuit, transpile -from .utils import convert_cmap_to_tuple_list, get_openqasm_gates, save_as_qasm +from .utils import get_openqasm_gates, save_as_qasm if TYPE_CHECKING: # pragma: no cover from pytket._tket.passes import BasePass from pytket.circuit import Circuit - from .devices import Device, Provider + from .devices import Device, Gateset -def get_rebase(gate_set: list[str]) -> BasePass: +def get_rebase(gateset: list[str]) -> BasePass: """Get the rebase pass for the given gate set.""" op_dict = { "r": OpType.U3, @@ -46,7 +45,7 @@ def get_rebase(gate_set: list[str]) -> BasePass: "ecr": OpType.ECR, "measure": OpType.Measure, } - return AutoRebase({op_dict[key] for key in gate_set if key in op_dict}) + return AutoRebase({op_dict[key] for key in gateset if key in op_dict}) @overload @@ -57,6 +56,7 @@ def get_indep_level( return_qc: Literal[True], target_directory: str = "./", target_filename: str = "", + qasm_format: str = "qasm2", ) -> Circuit: ... @@ -68,6 +68,7 @@ def get_indep_level( return_qc: Literal[False], target_directory: str = "./", target_filename: str = "", + qasm_format: str = "qasm2", ) -> bool: ... @@ -78,6 +79,7 @@ def get_indep_level( return_qc: bool = False, target_directory: str = "./", target_filename: str = "", + qasm_format: str = "qasm2", ) -> bool | Circuit: """Handles the creation of the benchmark on the target-independent level. @@ -88,6 +90,7 @@ def get_indep_level( return_qc: flag if the actual circuit shall be returned target_directory: alternative directory to the default one to store the created circuit target_filename: alternative filename to the default one + qasm_format: qasm format (qasm2 or qasm3) Returns: if return_qc == True: quantum circuit object @@ -114,8 +117,9 @@ def get_indep_level( if return_qc: return qc_tket return save_as_qasm( - circuit_to_qasm_str(qc_tket, maxwidth=qc.num_qubits), - filename_indep, + qc=qc_tket, + filename=filename_indep, + qasm_format=qasm_format, target_directory=target_directory, ) @@ -123,53 +127,60 @@ def get_indep_level( @overload def get_native_gates_level( qc: QuantumCircuit, - provider: Provider, + gateset: Gateset, num_qubits: int | None, file_precheck: bool, return_qc: Literal[True], target_directory: str = "./", target_filename: str = "", + qasm_format: str = "qasm2", ) -> Circuit: ... @overload def get_native_gates_level( qc: QuantumCircuit, - provider: Provider, + gateset: Gateset, num_qubits: int | None, file_precheck: bool, return_qc: Literal[False], target_directory: str = "./", target_filename: str = "", + qasm_format: str = "qasm2", ) -> bool: ... def get_native_gates_level( qc: QuantumCircuit, - provider: Provider, + gateset: Gateset, num_qubits: int | None, file_precheck: bool, return_qc: bool = False, target_directory: str = "./", target_filename: str = "", + qasm_format: str = "qasm2", ) -> bool | Circuit: """Handles the creation of the benchmark on the target-dependent native gates level. Arguments: qc: quantum circuit which the to be created benchmark circuit is based on - provider: determines the native gate set + gateset: contains the name of the gateset and a list of native gates num_qubits: number of qubits file_precheck: flag indicating whether to check whether the file already exists before creating it (again) return_qc: flag if the actual circuit shall be returned target_directory: alternative directory to the default one to store the created circuit target_filename: alternative filename to the default one + qasm_format: qasm format (qasm2 or qasm3) Returns: if return_qc == True: quantum circuit object else: True/False indicating whether the function call was successful or not """ + if gateset.gateset_name == "clifford+t": + msg = "The gateset 'clifford+t' is not supported by TKET. Please use Qiskit instead." + raise ValueError(msg) if not target_filename: - filename_native = qc.name + "_nativegates_" + provider.provider_name + "_tket_" + str(num_qubits) + filename_native = qc.name + "_nativegates_" + gateset.gateset_name + "_tket_" + str(num_qubits) else: filename_native = target_filename @@ -190,18 +201,18 @@ def get_native_gates_level( print("TKET Exception NativeGates: ", e) return False - gate_set = provider.get_native_gates() - native_gate_set_rebase = get_rebase(gate_set) - native_gate_set_rebase.apply(qc_tket) + native_gateset_rebase = get_rebase(gateset.gates) + native_gateset_rebase.apply(qc_tket) FullPeepholeOptimise(target_2qb_gate=OpType.TK2).apply(qc_tket) - native_gate_set_rebase.apply(qc_tket) + native_gateset_rebase.apply(qc_tket) if return_qc: return qc_tket return save_as_qasm( - circuit_to_qasm_str(qc_tket, maxwidth=qc.num_qubits), - filename_native, - gate_set, + qc=qc_tket, + filename=filename_native, + qasm_format=qasm_format, + gateset=gateset.gates, target_directory=target_directory, ) @@ -211,11 +222,11 @@ def get_mapped_level( qc: QuantumCircuit, num_qubits: int | None, device: Device, - lineplacement: bool, file_precheck: bool, return_qc: Literal[True], target_directory: str = "./", target_filename: str = "", + qasm_format: str = "qasm2", ) -> Circuit: ... @@ -224,11 +235,11 @@ def get_mapped_level( qc: QuantumCircuit, num_qubits: int | None, device: Device, - lineplacement: bool, file_precheck: bool, return_qc: Literal[False], target_directory: str = "./", target_filename: str = "", + qasm_format: str = "qasm2", ) -> bool: ... @@ -236,11 +247,11 @@ def get_mapped_level( qc: QuantumCircuit, num_qubits: int | None, device: Device, - lineplacement: bool, file_precheck: bool, return_qc: bool = False, target_directory: str = "./", target_filename: str = "", + qasm_format: str = "qasm2", ) -> bool | Circuit: """Handles the creation of the benchmark on the target-dependent mapped level. @@ -248,20 +259,18 @@ def get_mapped_level( qc: quantum circuit which the to be created benchmark circuit is based on num_qubits: number of qubits device: target device - lineplacement: if true line placement is used, else graph placement file_precheck: flag indicating whether to check whether the file already exists before creating it (again) return_qc: flag if the actual circuit shall be returned target_directory: alternative directory to the default one to store the created circuit target_filename: alternative filename to the default one + qasm_format: qasm format (qasm2 or qasm3) Returns: if return_qc == True: quantum circuit object else: True/False indicating whether the function call was successful or not """ - placement = "line" if lineplacement else "graph" - if not target_filename: - filename_mapped = qc.name + "_mapped_" + device.name + "_tket_" + placement + "_" + str(num_qubits) + filename_mapped = qc.name + "_mapped_" + device.name + "_tket_" + str(num_qubits) else: filename_mapped = target_filename @@ -284,7 +293,7 @@ def get_mapped_level( return False cmap = device.coupling_map - cmap_converted = convert_cmap_to_tuple_list(cmap) + cmap_converted = [(c[0], c[1]) for c in cmap] arch = Architecture(cmap_converted) # add blank wires to the circuit such that afterwards the number of qubits is equal to the number of qubits of the architecture @@ -292,25 +301,27 @@ def get_mapped_level( diff = highest_used_qubit_index + 1 - qc_tket.n_qubits # offset of one is added because the indices start at 0 qc_tket.add_blank_wires(diff) - native_gate_set_rebase = get_rebase(device.basis_gates) - native_gate_set_rebase.apply(qc_tket) + native_gateset_rebase = get_rebase(device.gateset.gates) + native_gateset_rebase.apply(qc_tket) FullPeepholeOptimise(target_2qb_gate=OpType.TK2).apply(qc_tket) - placer = LinePlacement(arch) if lineplacement else GraphPlacement(arch) + placer = LinePlacement(arch) PlacementPass(placer).apply(qc_tket) RoutingPass(arch).apply(qc_tket) PeepholeOptimise2Q(allow_swaps=False).apply(qc_tket) SynthesiseTket().apply(qc_tket) if not qc_tket.valid_connectivity(arch, directed=True): CXMappingPass(arc=arch, placer=placer, directed_cx=True, delay_measures=False).apply(qc_tket) - native_gate_set_rebase.apply(qc_tket) - + native_gateset_rebase.apply(qc_tket) if return_qc: return qc_tket + return save_as_qasm( - circuit_to_qasm_str(qc_tket, maxwidth=qc.num_qubits), - filename_mapped, - device.basis_gates, - True, - cmap, - target_directory, + qc=qc_tket, + filename=filename_mapped, + qasm_format=qasm_format, + gateset=device.gateset.gates, + mapped=True, + c_map=cmap, + target_directory=target_directory, + initial_qubits=qc.num_qubits, ) diff --git a/src/mqt/bench/utils.py b/src/mqt/bench/utils.py index f9dac75b2..b34392d4e 100644 --- a/src/mqt/bench/utils.py +++ b/src/mqt/bench/utils.py @@ -10,16 +10,19 @@ import networkx as nx import numpy as np +from pytket import Circuit from pytket import __version__ as __tket_version__ +from pytket.extensions.qiskit import tk_to_qiskit +from pytket.qasm import circuit_to_qasm_str from qiskit import QuantumCircuit from qiskit import __version__ as __qiskit_version__ from qiskit.converters import circuit_to_dag +from qiskit.qasm2 import dumps as dumps2 +from qiskit.qasm3 import dumps as dumps3 if TYPE_CHECKING: # pragma: no cover from types import ModuleType - from qiskit_optimization import QuadraticProgram - @dataclass class SupermarqFeatures: @@ -36,13 +39,12 @@ def get_supported_benchmarks() -> list[str]: """Returns a list of all supported benchmarks.""" return [ "ae", + "bv", "dj", "grover-noancilla", "grover-v-chain", "ghz", "graphstate", - "portfolioqaoa", - "portfoliovqe", "qaoa", "qft", "qftentangled", @@ -51,18 +53,12 @@ def get_supported_benchmarks() -> list[str]: "qpeinexact", "qwalk-noancilla", "qwalk-v-chain", - "random", - "realamprandom", - "su2random", - "twolocalrandom", - "vqe", + "randomcircuit", + "vqerealamprandom", + "vqesu2random", + "vqetwolocalrandom", "wstate", "shor", - "pricingcall", - "pricingput", - "groundstate", - "routing", - "tsp", ] @@ -83,31 +79,7 @@ def get_default_config_path() -> str: def get_default_qasm_output_path() -> str: """Returns the path where all .qasm files are stored.""" - return str(resources.files("mqt.bench") / "viewer" / "static" / "files" / "qasm_output") - - -def get_default_evaluation_output_path() -> str: - """Returns the path where all .qasm files are stored.""" - return str(resources.files("mqt.bench") / "evaluation") - - -def get_zip_folder_path() -> str: - """Returns the path where the zip file is stored.""" - return str(resources.files("mqt.bench") / "viewer" / "static" / "files") - - -def get_examplary_max_cut_qp(n_nodes: int, degree: int = 2) -> QuadraticProgram: - """Returns a quadratic problem formulation of a max cut problem of a random graph. - - Arguments: - n_nodes: number of graph nodes (and also number of qubits) - degree: edges per node - """ - from qiskit_optimization.applications import Maxcut # noqa: PLC0415 lazy import to reduce import cost - - graph = nx.random_regular_graph(d=degree, n=n_nodes, seed=111) - maxcut = Maxcut(graph) - return maxcut.to_quadratic_program() + return str(resources.files("mqt.bench") / "qasm_output") def get_openqasm_gates() -> list[str]: @@ -160,28 +132,46 @@ def get_openqasm_gates() -> list[str]: def save_as_qasm( - qc_str: str, + qc: QuantumCircuit | Circuit, filename: str, - gate_set: list[str] | None = None, + qasm_format: str = "qasm2", + gateset: list[str] | None = None, mapped: bool = False, c_map: list[list[int]] | None = None, target_directory: str = "", + initial_qubits: int = 32, ) -> bool: """Saves a quantum circuit as a qasm file. Arguments: - qc_str: Quantum circuit to be stored as a string + qc: Quantum circuit to be stored as a string filename: filename - gate_set: set of used gates + qasm_format: qasm format (qasm2 or qasm3) + gateset: set of used gates mapped: boolean indicating whether the quantum circuit is mapped to a specific hardware layout c_map: coupling map of used hardware layout target_directory: directory where the qasm file is stored + initial_qubits: number of qubits of the original quantum circuit (only need for mapped TKET circuits) """ if c_map is None: c_map = [] file = Path(target_directory, filename + ".qasm") + if qasm_format == "qasm2": + if isinstance(qc, QuantumCircuit): + qc_str = dumps2(qc) + elif isinstance(qc, Circuit): + qc_str = circuit_to_qasm_str(qc, maxwidth=initial_qubits) + elif qasm_format == "qasm3": + if isinstance(qc, QuantumCircuit): + qc_str = dumps3(qc) + elif isinstance(qc, Circuit): + qc_str = dumps3(tk_to_qiskit(qc)) # pytket does not support qasm3 export at the moment + else: + msg = f"Unknown qasm format: {qasm_format}" + raise ValueError(msg) + try: mqtbench_module_version = metadata.version("mqt.bench") except Exception: @@ -196,8 +186,8 @@ def save_as_qasm( f.write("// Qiskit version: " + str(__qiskit_version__) + "\n") elif "tket" in filename: f.write("// TKET version: " + str(__tket_version__) + "\n") - if gate_set: - f.write("// Used Gate Set: " + str(gate_set) + "\n") + if gateset: + f.write("// Used Gate Set: " + str(gateset) + "\n") if mapped: f.write("// Coupling List: " + str(c_map) + "\n") f.write("\n") @@ -264,19 +254,4 @@ def calc_supermarq_features( def get_module_for_benchmark(benchmark_name: str) -> ModuleType: """Returns the module for a specific benchmark.""" - if benchmark_name in ["portfolioqaoa", "portfoliovqe", "pricingcall", "pricingput"]: - return import_module("mqt.bench.benchmarks.qiskit_application_finance." + benchmark_name) - if benchmark_name == "qnn": - return import_module("mqt.bench.benchmarks.qiskit_application_ml.qnn") - if benchmark_name == "groundstate": - return import_module("mqt.bench.benchmarks.qiskit_application_nature.groundstate") - if benchmark_name == "routing": - return import_module("mqt.bench.benchmarks.qiskit_application_optimization.routing") - if benchmark_name == "tsp": - return import_module("mqt.bench.benchmarks.qiskit_application_optimization.tsp") return import_module("mqt.bench.benchmarks." + benchmark_name) - - -def convert_cmap_to_tuple_list(c_map: list[list[int]]) -> list[tuple[int, int]]: - """Converts a coupling map to a list of tuples.""" - return [(c[0], c[1]) for c in c_map] diff --git a/tests/devices/test_devices.py b/tests/devices/test_devices.py index 647ff3197..852cbfb9c 100644 --- a/tests/devices/test_devices.py +++ b/tests/devices/test_devices.py @@ -8,19 +8,20 @@ from mqt.bench.devices import ( Device, - DeviceCalibration, - NotFoundError, + IBMWashington, get_available_devices, - get_available_providers, - get_provider_by_name, + get_device_by_name, + get_native_gateset_by_name, ) +from mqt.bench.devices.calibration import get_device_calibration_path +from mqt.bench.devices.ionq import DeviceCalibration, IonQHarmony -@pytest.mark.parametrize( - "device", get_available_devices(sanitize_device=True), ids=lambda device: cast("str", device.name) -) +@pytest.mark.parametrize("device", get_available_devices(), ids=lambda device: cast("str", device.name)) def test_sanitized_devices(device: Device) -> None: """Test that all devices can be sanitized and provide complete fidelity data.""" + device.read_calibration() + device.sanitize_device() assert device.calibration is not None for qubit in range(device.num_qubits): assert qubit in device.calibration.single_qubit_gate_fidelity @@ -36,74 +37,96 @@ def test_sanitized_devices(device: Device) -> None: assert device.calibration.two_qubit_gate_fidelity[qubit1, qubit2][gate] > 0 +def test_unsupported_device() -> None: + """Test that unsupported devices raise errors.""" + with pytest.raises(ValueError, match="Device unsupported not found in available devices."): + get_device_by_name("unsupported") + with pytest.raises(ValueError, match="Gateset unsupported not found in available gatesets."): + get_native_gateset_by_name("unsupported") + + +def test_device_calibration_autoread() -> None: + """Test that all device calibration methods raise errors when no calibration data is available.""" + IBMWashington() + + def test_device_calibration_errors() -> None: """Test that all device calibration methods raise errors when no calibration data is available.""" - device = Device(name="test", num_qubits=1, basis_gates=[], coupling_map=[], calibration=None) - - # Test all methods with no calibration - with pytest.raises(ValueError, match="Calibration data not available for device test."): - device.get_single_qubit_gate_fidelity("gate1", 0) - with pytest.raises(ValueError, match="Calibration data not available for device test."): - device.get_single_qubit_gate_duration("gate1", 0) - with pytest.raises(ValueError, match="Calibration data not available for device test."): - device.get_two_qubit_gate_fidelity("gate2", 0, 1) - with pytest.raises(ValueError, match="Calibration data not available for device test."): - device.get_two_qubit_gate_duration("gate2", 0, 1) - with pytest.raises(ValueError, match="Calibration data not available for device test."): - device.get_readout_fidelity(0) - with pytest.raises(ValueError, match="Calibration data not available for device test."): - device.get_readout_duration(0) - with pytest.raises(ValueError, match="Calibration data not available for device test."): - device.sanitize_device() + device = IonQHarmony() + device.calibration = DeviceCalibration() + qubit1, qubit2 = -1, -2 + gate = "wrong" # Test all methods with missing calibration data - device.calibration = DeviceCalibration() - with pytest.raises(ValueError, match="Gate gate1 not supported by device test."): - device.get_single_qubit_gate_fidelity("gate1", 0) - with pytest.raises(ValueError, match="Gate gate1 not supported by device test."): - device.get_single_qubit_gate_duration("gate1", 0) - with pytest.raises(ValueError, match="Gate gate2 not supported by device test."): - device.get_two_qubit_gate_fidelity("gate2", 0, 1) - with pytest.raises(ValueError, match="Gate gate2 not supported by device test."): - device.get_two_qubit_gate_duration("gate2", 0, 1) + with pytest.raises(ValueError, match="Gate wrong not supported by device ionq_harmony."): + device.get_single_qubit_gate_fidelity(gate, qubit1) + with pytest.raises(ValueError, match="Gate wrong not supported by device ionq_harmony."): + device.get_single_qubit_gate_duration(gate, qubit1) + with pytest.raises(ValueError, match="Gate wrong not supported by device ionq_harmony."): + device.get_two_qubit_gate_fidelity(gate, qubit1, qubit2) + with pytest.raises(ValueError, match="Gate wrong not supported by device ionq_harmony."): + device.get_two_qubit_gate_duration(gate, qubit1, qubit2) with pytest.raises(ValueError, match="Readout fidelity values not available."): - device.get_readout_fidelity(0) + device.get_readout_fidelity(qubit1) with pytest.raises(ValueError, match="Readout duration values not available."): - device.get_readout_duration(0) + device.get_readout_duration(qubit1) + with pytest.raises(ValueError, match="Single-qubit gate fidelity values not available."): - device.calibration.get_single_qubit_gate_fidelity("gate_type", 0) + device.calibration.get_single_qubit_gate_fidelity(gate, qubit1) with pytest.raises(ValueError, match="Single-qubit gate duration values not available."): - device.calibration.get_single_qubit_gate_duration("gate_type", 0) + device.calibration.get_single_qubit_gate_duration(gate, qubit1) with pytest.raises(ValueError, match="Two-qubit gate fidelity values not available."): - device.calibration.get_two_qubit_gate_fidelity("gate_type", 0, 1) + device.calibration.get_two_qubit_gate_fidelity(gate, qubit1, qubit2) with pytest.raises(ValueError, match="Two-qubit gate duration values not available."): - device.calibration.get_two_qubit_gate_duration("gate_type", 0, 1) - with pytest.raises(ValueError, match="Readout fidelity values not available."): - device.calibration.get_readout_fidelity(0) - with pytest.raises(ValueError, match="Readout duration values not available."): - device.calibration.get_readout_duration(0) + device.calibration.get_two_qubit_gate_duration(gate, qubit1, qubit2) with pytest.raises(ValueError, match="T1 values not available."): - device.calibration.get_t1(0) + device.calibration.get_t1(qubit1) with pytest.raises(ValueError, match="T2 values not available."): - device.calibration.get_t2(0) + device.calibration.get_t2(qubit1) with pytest.raises(ValueError, match="Single-qubit gate fidelity values not available."): - device.calibration.compute_average_single_qubit_gate_fidelity("gate") + device.calibration.compute_average_single_qubit_gate_fidelity(gate) with pytest.raises(ValueError, match="Single-qubit gate duration values not available."): - device.calibration.compute_average_single_qubit_gate_duration("gate") + device.calibration.compute_average_single_qubit_gate_duration(gate) with pytest.raises(ValueError, match="Two-qubit gate fidelity values not available."): - device.calibration.compute_average_two_qubit_gate_fidelity("gate") + device.calibration.compute_average_two_qubit_gate_fidelity(gate) with pytest.raises(ValueError, match="Two-qubit gate duration values not available."): - device.calibration.compute_average_two_qubit_gate_duration("gate") + device.calibration.compute_average_two_qubit_gate_duration(gate) with pytest.raises(ValueError, match="Readout fidelity values not available."): device.calibration.compute_average_readout_fidelity() with pytest.raises(ValueError, match="Readout duration values not available."): device.calibration.compute_average_readout_duration() + device.read_calibration() + with pytest.raises(ValueError, match=f"Single-qubit fidelity for gate {gate} and qubit {qubit1} not available."): + device.calibration.get_single_qubit_gate_fidelity(gate, qubit1) + with pytest.raises(ValueError, match=f"Single-qubit duration for gate {gate} and qubit {qubit1} not available."): + device.calibration.get_single_qubit_gate_duration(gate, qubit1) + with pytest.raises( + ValueError, + match=f"Two-qubit fidelity for gate {gate} and qubits {qubit1} and {qubit2} not available.", + ): + device.calibration.get_two_qubit_gate_fidelity(gate, qubit1, qubit2) + with pytest.raises( + ValueError, + match=f"Two-qubit duration for gate {gate} and qubits {qubit1} and {qubit2} not available.", + ): + device.calibration.get_two_qubit_gate_duration(gate, qubit1, qubit2) + with pytest.raises(ValueError, match=f"Readout fidelity for qubit {qubit1} not available."): + device.calibration.get_readout_fidelity(qubit1) + with pytest.raises(ValueError, match=f"Readout duration for qubit {qubit1} not available."): + device.calibration.get_readout_duration(qubit1) + for gate in device.get_single_qubit_gates(): + assert gate in device.gateset.gates + device.calibration = None + for gate in device.get_two_qubit_gates(): + assert gate in device.gateset.gates + with pytest.raises(ValueError, match=f"T1 for qubit {qubit1} not available."): + device.calibration.get_t1(qubit1) + with pytest.raises(ValueError, match=f"T2 for qubit {qubit1} not available."): + device.calibration.get_t2(qubit1) -def test_provider() -> None: - """Test that all providers can be imported.""" - for provider in get_available_providers(): - assert provider.provider_name in ["ibm", "rigetti", "oqc", "ionq", "quantinuum", "iqm"] - with pytest.raises(NotFoundError, match="Provider 'test' not found among available providers."): - get_provider_by_name("test") +def test_get_device_calibration_path() -> None: + """Test if the correct error message is shown if the calibration file does not exist.""" + with pytest.raises(FileNotFoundError, match="Calibration file not found"): + get_device_calibration_path("wrong_path") diff --git a/tests/devices/test_ibm_device_support.py b/tests/devices/test_ibm_device_support.py index 0e04ed2f1..e735a72f8 100644 --- a/tests/devices/test_ibm_device_support.py +++ b/tests/devices/test_ibm_device_support.py @@ -2,67 +2,12 @@ from __future__ import annotations -import pytest -from qiskit_ibm_runtime.fake_provider import FakeMontrealV2 - -from mqt.bench.devices import IBMProvider - - -def test_ibm_provider_methods() -> None: - """Test the methods of the IBMProvider class.""" - assert IBMProvider.get_available_device_names() == ["ibm_washington", "ibm_montreal"] - assert IBMProvider.get_available_basis_gates() == [["id", "rz", "sx", "x", "cx", "measure", "barrier"]] - assert IBMProvider.get_native_gates() == ["id", "rz", "sx", "x", "cx", "measure", "barrier"] - assert IBMProvider.get_max_qubits() == 127 - with pytest.raises(ValueError, match="Device ibm_unknown not found."): - IBMProvider.get_device("ibm_unknown") - - -def test_import_v2_backend() -> None: - """Test importing a Qiskit `BackendV2` object.""" - backend = FakeMontrealV2() - device = IBMProvider.import_qiskit_backend(backend) - single_qubit_gates = device.get_single_qubit_gates() - two_qubit_gates = device.get_two_qubit_gates() - - assert device.name == backend.name - assert device.num_qubits == backend.num_qubits - assert device.coupling_map == backend.coupling_map.get_edges() - assert device.basis_gates == backend.operation_names - - assert all(gate in ["id", "rz", "sx", "x", "cx", "measure", "barrier"] for gate in single_qubit_gates) - assert all(gate == "cx" for gate in two_qubit_gates) - - for q in range(device.num_qubits): - assert 0 <= device.get_readout_fidelity(q) <= 1 - assert device.get_readout_duration(q) >= 0 - if device.calibration is not None: - assert device.calibration.get_t1(q) >= 0 - assert device.calibration.get_t2(q) >= 0 - - for gate in single_qubit_gates: - assert 0 <= device.get_single_qubit_gate_fidelity(gate, q) <= 1 - assert device.get_single_qubit_gate_duration(gate, q) >= 0 - if device.calibration is not None: - assert 0 <= device.calibration.compute_average_single_qubit_gate_fidelity(gate) <= 1 - assert device.calibration.compute_average_single_qubit_gate_duration(gate) >= 0 - - for q0, q1 in device.coupling_map: - for gate in two_qubit_gates: - assert 0 <= device.get_two_qubit_gate_fidelity(gate, q0, q1) <= 1 - assert device.get_two_qubit_gate_duration(gate, q0, q1) >= 0 - if device.calibration is not None: - assert 0 <= device.calibration.compute_average_two_qubit_gate_fidelity(gate) <= 1 - assert device.calibration.compute_average_two_qubit_gate_duration(gate) >= 0 - - if device.calibration is not None: - assert 0 <= device.calibration.compute_average_readout_fidelity() <= 1 - assert device.calibration.compute_average_readout_duration() >= 0 +from mqt.bench.devices import get_device_by_name def test_get_ibm_washington_device() -> None: """Test getting the IBM Washington device.""" - device = IBMProvider.get_device("ibm_washington") + device = get_device_by_name("ibm_washington") single_qubit_gates = device.get_single_qubit_gates() two_qubit_gates = device.get_two_qubit_gates() @@ -78,8 +23,7 @@ def test_get_ibm_washington_device() -> None: for gate in single_qubit_gates: assert 0 <= device.get_single_qubit_gate_fidelity(gate, q) <= 1 - with pytest.raises(ValueError, match="Single-qubit gate duration values not available."): - device.get_single_qubit_gate_duration(gate, q) + assert device.get_single_qubit_gate_duration(gate, q) >= 0 for q0, q1 in device.coupling_map: for gate in two_qubit_gates: @@ -89,7 +33,7 @@ def test_get_ibm_washington_device() -> None: def test_get_ibmq_montreal_device() -> None: """Test getting the IBM Montreal device.""" - device = IBMProvider.get_device("ibm_montreal") + device = get_device_by_name("ibm_montreal") single_qubit_gates = device.get_single_qubit_gates() two_qubit_gates = device.get_two_qubit_gates() @@ -105,8 +49,7 @@ def test_get_ibmq_montreal_device() -> None: for gate in single_qubit_gates: assert 0 <= device.get_single_qubit_gate_fidelity(gate, q) <= 1 - with pytest.raises(ValueError, match="Single-qubit gate duration values not available."): - device.get_single_qubit_gate_duration(gate, q) + assert device.get_single_qubit_gate_duration(gate, q) >= 0 for q0, q1 in device.coupling_map: for gate in two_qubit_gates: assert 0 <= device.get_two_qubit_gate_fidelity(gate, q0, q1) <= 1 diff --git a/tests/devices/test_ionq_device_support.py b/tests/devices/test_ionq_device_support.py index 3928c22a0..c98b5318a 100644 --- a/tests/devices/test_ionq_device_support.py +++ b/tests/devices/test_ionq_device_support.py @@ -2,20 +2,12 @@ from __future__ import annotations -from mqt.bench.devices import IonQProvider - - -def test_ionq_provider_methods() -> None: - """Test the methods of the IonQProvider class.""" - assert IonQProvider.get_available_device_names() == ["ionq_harmony", "ionq_aria1"] - assert IonQProvider.get_available_basis_gates() == [["rxx", "rz", "ry", "rx", "measure", "barrier"]] - assert IonQProvider.get_native_gates() == ["rxx", "rz", "ry", "rx", "measure", "barrier"] - assert IonQProvider.get_max_qubits() == 25 +from mqt.bench.devices import get_device_by_name def test_ionq_harmony_device() -> None: """Test the import of the IonQ Harmony quantum computer.""" - device = IonQProvider.get_device("ionq_harmony") + device = get_device_by_name("ionq_harmony") single_qubit_gates = device.get_single_qubit_gates() two_qubit_gates = device.get_two_qubit_gates() @@ -40,7 +32,7 @@ def test_ionq_harmony_device() -> None: def test_ionq_aria1_device() -> None: """Test the import of the IonQ Aria quantum computer.""" - device = IonQProvider.get_device("ionq_aria1") + device = get_device_by_name("ionq_aria1") single_qubit_gates = device.get_single_qubit_gates() two_qubit_gates = device.get_two_qubit_gates() diff --git a/tests/devices/test_iqm_device_support.py b/tests/devices/test_iqm_device_support.py index d978d6ea5..5242d5e91 100644 --- a/tests/devices/test_iqm_device_support.py +++ b/tests/devices/test_iqm_device_support.py @@ -2,30 +2,12 @@ from __future__ import annotations -import pytest - -from mqt.bench.devices import IQMProvider - - -def test_iqm_provider_methods() -> None: - """Test the methods of the IQMProvider class. - - - get_available_device_names - - get_available_basis_gates - - get_native_gates - - get_max_qubits. - """ - assert IQMProvider.get_available_device_names() == ["iqm_adonis", "iqm_apollo"] - assert IQMProvider.get_available_basis_gates() == [["r", "cz", "measure", "barrier"]] - assert IQMProvider.get_native_gates() == ["r", "cz", "measure", "barrier"] - assert IQMProvider.get_max_qubits() == 20 - with pytest.raises(ValueError, match="Device iqm_unknown not found."): - IQMProvider.get_device("iqm_unknown") +from mqt.bench.devices import get_device_by_name def test_get_iqm_apollo_device() -> None: """Test getting the IQM Apollo device.""" - device = IQMProvider.get_device("iqm_apollo") + device = get_device_by_name("iqm_apollo") single_qubit_gates = device.get_single_qubit_gates() two_qubit_gates = device.get_two_qubit_gates() @@ -64,7 +46,7 @@ def test_get_iqm_apollo_device() -> None: def test_get_iqm_adonis_device() -> None: """Test getting the IQM Adonis device.""" - device = IQMProvider.get_device("iqm_adonis") + device = get_device_by_name("iqm_adonis") single_qubit_gates = device.get_single_qubit_gates() two_qubit_gates = device.get_two_qubit_gates() diff --git a/tests/devices/test_oqc_device_support.py b/tests/devices/test_oqc_device_support.py index 1c244df0a..74a630751 100644 --- a/tests/devices/test_oqc_device_support.py +++ b/tests/devices/test_oqc_device_support.py @@ -4,20 +4,12 @@ import pytest -from mqt.bench.devices import OQCProvider - - -def test_oqc_provider_methods() -> None: - """Test the methods of the OQCrovider class.""" - assert OQCProvider.get_available_device_names() == ["oqc_lucy"] - assert OQCProvider.get_available_basis_gates() == [["rz", "sx", "x", "ecr", "measure", "barrier"]] - assert OQCProvider.get_native_gates() == ["rz", "sx", "x", "ecr", "measure", "barrier"] - assert OQCProvider.get_max_qubits() == 8 +from mqt.bench.devices import get_device_by_name def test_oqc_lucy_device() -> None: """Test the import of the OQC Lucy quantum computer.""" - device = OQCProvider.get_device("oqc_lucy") + device = get_device_by_name("oqc_lucy") single_qubit_gates = device.get_single_qubit_gates() two_qubit_gates = device.get_two_qubit_gates() diff --git a/tests/devices/test_quantinuum_device_support.py b/tests/devices/test_quantinuum_device_support.py index d14beebdc..3e107f7dc 100644 --- a/tests/devices/test_quantinuum_device_support.py +++ b/tests/devices/test_quantinuum_device_support.py @@ -4,20 +4,12 @@ import pytest -from mqt.bench.devices import QuantinuumProvider - - -def test_quantinuum_provider_methods() -> None: - """Test the methods of the QuantinuumProvider class.""" - assert QuantinuumProvider.get_available_device_names() == ["quantinuum_h2"] - assert QuantinuumProvider.get_available_basis_gates() == [["rzz", "rz", "ry", "rx", "measure", "barrier"]] - assert QuantinuumProvider.get_native_gates() == ["rzz", "rz", "ry", "rx", "measure", "barrier"] - assert QuantinuumProvider.get_max_qubits() == 32 +from mqt.bench.devices import get_device_by_name def test_quantinuum_h2_device() -> None: """Test the import of the Quantinuum H2 quantum computer.""" - device = QuantinuumProvider.get_device("quantinuum_h2") + device = get_device_by_name("quantinuum_h2") single_qubit_gates = device.get_single_qubit_gates() two_qubit_gates = device.get_two_qubit_gates() diff --git a/tests/devices/test_rigetti_device_support.py b/tests/devices/test_rigetti_device_support.py index 6764a8927..d50a22b1d 100644 --- a/tests/devices/test_rigetti_device_support.py +++ b/tests/devices/test_rigetti_device_support.py @@ -4,20 +4,12 @@ import pytest -from mqt.bench.devices import RigettiProvider - - -def test_rigetti_provider_methods() -> None: - """Test the methods of the RigettiProvider class.""" - assert RigettiProvider.get_available_device_names() == ["rigetti_aspen_m3"] - assert RigettiProvider.get_available_basis_gates() == [["rx", "rz", "cz", "cp", "xx_plus_yy", "measure", "barrier"]] - assert RigettiProvider.get_native_gates() == ["rx", "rz", "cz", "cp", "xx_plus_yy", "measure", "barrier"] - assert RigettiProvider.get_max_qubits() == 79 +from mqt.bench.devices import get_device_by_name def test_rigetti_aspen_m3_device() -> None: """Test the import of the Rigetti Aspen-M3 quantum computer.""" - device = RigettiProvider.get_device("rigetti_aspen_m3") + device = get_device_by_name("rigetti_aspen_m3") single_qubit_gates = device.get_single_qubit_gates() two_qubit_gates = device.get_two_qubit_gates() diff --git a/tests/test_bench.py b/tests/test_bench.py deleted file mode 100644 index 6a6243481..000000000 --- a/tests/test_bench.py +++ /dev/null @@ -1,1059 +0,0 @@ -"""Tests for the benchmark generation.""" - -from __future__ import annotations - -import sys -from pathlib import Path -from typing import TYPE_CHECKING - -import pytket - -if TYPE_CHECKING: # pragma: no cover - import types - -import pytest -from pytket.extensions.qiskit import tk_to_qiskit -from qiskit import QuantumCircuit - -from mqt.bench import utils -from mqt.bench.benchmark_generator import ( - BenchmarkGenerator, - CompilerSettings, - QiskitSettings, - TKETSettings, - get_benchmark, - qiskit_helper, - timeout_watcher, - tket_helper, -) -from mqt.bench.benchmarks import ( - ae, - dj, - ghz, - graphstate, - groundstate, - grover, - portfolioqaoa, - portfoliovqe, - pricingcall, - pricingput, - qaoa, - qft, - qftentangled, - qnn, - qpeexact, - qpeinexact, - qwalk, - random, - realamprandom, - routing, - shor, - su2random, - tsp, - twolocalrandom, - vqe, - wstate, -) -from mqt.bench.devices import IBMProvider, OQCProvider, get_available_providers, get_provider_by_name - - -@pytest.fixture -def output_path() -> str: - """Fixture to create the output path for the tests.""" - output_path = Path("./tests/test_output/") - output_path.mkdir(parents=True, exist_ok=True) - return str(output_path) - - -@pytest.fixture -def sample_filenames() -> list[str]: - """Fixture to return a list of sample filenames.""" - return [ - "ae_indep_qiskit_10.qasm", - "ghz_nativegates_rigetti_qiskit_opt3_54.qasm", - "ae_indep_tket_93.qasm", - "wstate_nativegates_rigetti_qiskit_opt0_79.qasm", - "ae_mapped_ibm_montreal_qiskit_opt1_9.qasm", - "ae_mapped_ibm_washington_qiskit_opt0_38.qasm", - "ae_mapped_oqc_lucy_qiskit_opt0_5.qasm", - "ae_mapped_ibm_washington_qiskit_opt2_88.qasm", - "qnn_mapped_ionq_harmony_qiskit_opt3_3.qasm", - "qnn_mapped_oqc_lucy_tket_line_2.qasm", - "qaoa_mapped_quantinuum_h2_tket_graph_2.qasm", - "dj_mapped_quantinuum_h2_qiskit_opt3_23.qasm", - ] - - -@pytest.mark.parametrize( - ("benchmark", "input_value", "scalable"), - [ - (ae, 3, True), - (ghz, 2, True), # the generated GHZ benchmarks are later used in test_benchviewer.py::test_streaming_zip - (dj, 3, True), - (graphstate, 3, True), - (grover, 3, False), - (qaoa, 3, True), - (qft, 3, True), - (qftentangled, 3, True), - (qnn, 3, True), - (qpeexact, 3, True), - (qpeinexact, 3, True), - (tsp, 3, False), - (qwalk, 3, False), - (vqe, 3, True), - (random, 3, True), - (realamprandom, 3, True), - (su2random, 3, True), - (twolocalrandom, 3, True), - (wstate, 3, True), - (portfolioqaoa, 3, True), - (shor, 3, False), - (portfoliovqe, 3, True), - (pricingcall, 3, False), - (pricingput, 3, False), - ], -) -def test_quantumcircuit_indep_level( - benchmark: types.ModuleType, input_value: int, scalable: bool, output_path: str -) -> None: - """Test the creation of the independent level benchmarks for the benchmarks.""" - if benchmark in (grover, qwalk): - qc = benchmark.create_circuit(input_value, ancillary_mode="noancilla") - else: - qc = benchmark.create_circuit(input_value) - - if scalable: - assert qc.num_qubits == input_value - assert benchmark.__name__.split(".")[-1] in qc.name - res = qiskit_helper.get_indep_level( - qc, - input_value, - file_precheck=False, - return_qc=False, - target_directory=output_path, - ) - assert res - res = qiskit_helper.get_indep_level( - qc, - input_value, - file_precheck=True, - return_qc=False, - target_directory=output_path, - ) - assert res - - res = tket_helper.get_indep_level( - qc, - input_value, - file_precheck=False, - return_qc=False, - target_directory=output_path, - ) - assert res - res = tket_helper.get_indep_level( - qc, - input_value, - file_precheck=True, - return_qc=False, - target_directory=output_path, - ) - assert res - - -@pytest.mark.parametrize( - ("benchmark", "input_value", "scalable"), - [ - (ae, 3, True), - (ghz, 3, True), - (dj, 3, True), - (graphstate, 3, True), - (grover, 3, False), - (qaoa, 3, True), - (qft, 3, True), - (qftentangled, 3, True), - (qnn, 3, True), - (qpeexact, 3, True), - (qpeinexact, 3, True), - (tsp, 3, False), - (qwalk, 3, False), - (vqe, 3, True), - (random, 3, True), - (realamprandom, 3, True), - (su2random, 3, True), - (twolocalrandom, 3, True), - (wstate, 3, True), - (portfolioqaoa, 3, True), - (portfoliovqe, 3, True), - (pricingcall, 3, False), - (pricingput, 3, False), - ], -) -def test_quantumcircuit_native_and_mapped_levels( - benchmark: types.ModuleType, input_value: int, scalable: bool, output_path: str -) -> None: - """Test the creation of the native and mapped level benchmarks for the benchmarks.""" - if benchmark in (grover, qwalk): - qc = benchmark.create_circuit(input_value, ancillary_mode="noancilla") - else: - qc = benchmark.create_circuit(input_value) - - assert isinstance(qc, QuantumCircuit) - if scalable: - assert qc.num_qubits == input_value - - providers = get_available_providers() - for provider in providers: - opt_level = 1 - res = qiskit_helper.get_native_gates_level( - qc, - provider, - qc.num_qubits, - opt_level, - file_precheck=False, - return_qc=False, - target_directory=output_path, - ) - assert res - res = qiskit_helper.get_native_gates_level( - qc, - provider, - qc.num_qubits, - opt_level, - file_precheck=True, - return_qc=False, - target_directory=output_path, - ) - assert res - - provider.get_native_gates() - for device in provider.get_available_devices(): - # Creating the circuit on target-dependent: mapped level qiskit - if device.num_qubits >= qc.num_qubits: - res = qiskit_helper.get_mapped_level( - qc, - qc.num_qubits, - device, - opt_level, - file_precheck=False, - return_qc=False, - target_directory=output_path, - ) - assert res - res = qiskit_helper.get_mapped_level( - qc, - qc.num_qubits, - device, - opt_level, - file_precheck=True, - return_qc=False, - target_directory=output_path, - ) - assert res - - for provider in providers: - res = tket_helper.get_native_gates_level( - qc, - provider, - qc.num_qubits, - file_precheck=False, - return_qc=False, - target_directory=output_path, - ) - assert res - res = tket_helper.get_native_gates_level( - qc, - provider, - qc.num_qubits, - file_precheck=True, - return_qc=False, - target_directory=output_path, - ) - assert res - - for device in provider.get_available_devices(): - # Creating the circuit on target-dependent: mapped level qiskit - if device.num_qubits >= qc.num_qubits: - res = tket_helper.get_mapped_level( - qc, - qc.num_qubits, - device, - True, - file_precheck=False, - return_qc=False, - target_directory=output_path, - ) - assert res - res = tket_helper.get_mapped_level( - qc, - qc.num_qubits, - device, - False, - file_precheck=True, - return_qc=False, - target_directory=output_path, - ) - assert res - - -def test_openqasm_gates() -> None: - """Test the openqasm gates.""" - openqasm_gates = utils.get_openqasm_gates() - num_openqasm_gates = 42 - assert len(openqasm_gates) == num_openqasm_gates - - -def test_dj_constant_oracle() -> None: - """Test the creation of the DJ benchmark constant oracle.""" - qc = dj.create_circuit(5, False) - assert qc.depth() > 0 - - -def test_routing() -> None: - """Test the creation of the routing benchmark.""" - qc = routing.create_circuit(4, 2) - assert qc.depth() > 0 - - -def test_unidirectional_coupling_map() -> None: - """Test the unidirectional coupling map for the OQC Lucy device.""" - qc = get_benchmark( - benchmark_name="dj", - level="mapped", - circuit_size=3, - compiler="tket", - compiler_settings=CompilerSettings(tket=TKETSettings(placement="graphplacement")), - provider_name="oqc", - device_name="oqc_lucy", - ) - # check that all gates in the circuit are in the coupling map - cmap = utils.convert_cmap_to_tuple_list(OQCProvider.get_device("oqc_lucy").coupling_map) - assert qc.valid_connectivity(arch=pytket.architecture.Architecture(cmap), directed=True) - - -@pytest.mark.parametrize( - ( - "benchmark_name", - "level", - "circuit_size", - "benchmark_instance_name", - "compiler", - "compiler_settings", - "provider_name", - "device_name", - ), - [ - ( - "dj", - "alg", - 5, - None, - "qiskit", - None, - "", - "", - ), - ( - "wstate", - 0, - 6, - None, - "tket", - None, - "", - "", - ), - ( - "ghz", - "indep", - 5, - None, - "qiskit", - None, - "", - "", - ), - ( - "graphstate", - 1, - 4, - None, - "qiskit", - None, - "", - "", - ), - ( - "graphstate", - 1, - 4, - None, - "tket", - None, - "", - "", - ), - ( - "dj", - "nativegates", - 5, - None, - "qiskit", - CompilerSettings(qiskit=QiskitSettings(optimization_level=2)), - "ionq", - "", - ), - ( - "dj", - "nativegates", - 5, - None, - "qiskit", - CompilerSettings(qiskit=QiskitSettings(optimization_level=2)), - "ibm", - "", - ), - ( - "dj", - "nativegates", - 5, - None, - "qiskit", - CompilerSettings(qiskit=QiskitSettings(optimization_level=2)), - "rigetti", - "rigetti_aspen_m3", - ), - ( - "dj", - "nativegates", - 5, - None, - "qiskit", - CompilerSettings(qiskit=QiskitSettings(optimization_level=2)), - "oqc", - "oqc_lucy", - ), - ( - "qft", - 2, - 6, - None, - "qiskit", - CompilerSettings(qiskit=QiskitSettings(optimization_level=3)), - "ionq", - "ionq_harmony1", - ), - ( - "qft", - 2, - 6, - None, - "qiskit", - CompilerSettings(qiskit=QiskitSettings(optimization_level=3)), - "ibm", - "ibm_montreal", - ), - ("qft", 2, 6, None, "tket", None, "rigetti", "rigetti_aspen_m3"), - ( - "qft", - 2, - 6, - None, - "tket", - None, - "oqc", - "oqc_lucy", - ), - ( - "qpeexact", - "mapped", - 5, - None, - "qiskit", - CompilerSettings(qiskit=QiskitSettings(optimization_level=1)), - "ibm", - "ibm_washington", - ), - ( - "qpeexact", - "mapped", - 5, - None, - "qiskit", - CompilerSettings(qiskit=QiskitSettings(optimization_level=1)), - "ibm", - "ibm_montreal", - ), - ( - "qpeexact", - "mapped", - 5, - None, - "qiskit", - CompilerSettings(qiskit=QiskitSettings(optimization_level=1)), - "rigetti", - "rigetti_aspen_m3", - ), - ( - "qpeexact", - "mapped", - 5, - None, - "qiskit", - CompilerSettings(qiskit=QiskitSettings(optimization_level=1)), - "ionq", - "ionq_harmony", - ), - ( - "qpeexact", - "mapped", - 5, - None, - "qiskit", - CompilerSettings(qiskit=QiskitSettings(optimization_level=1)), - "ionq", - "ionq_aria1", - ), - ( - "qpeexact", - "mapped", - 5, - None, - "qiskit", - CompilerSettings(qiskit=QiskitSettings(optimization_level=2)), - "ionq", - "ionq_aria1", - ), - ( - "qpeexact", - "mapped", - 5, - None, - "qiskit", - CompilerSettings(qiskit=QiskitSettings(optimization_level=1)), - "oqc", - "oqc_lucy", - ), - ( - "qpeinexact", - 3, - 4, - None, - "qiskit", - CompilerSettings(qiskit=QiskitSettings(optimization_level=1)), - "ibm", - "ibm_washington", - ), - ( - "qpeinexact", - 3, - 4, - None, - "tket", - CompilerSettings(tket=TKETSettings(placement="lineplacement")), - "ibm", - "ibm_washington", - ), - ( - "qpeinexact", - 3, - 4, - None, - "qiskit", - CompilerSettings(qiskit=QiskitSettings(optimization_level=1)), - "ibm", - "ibm_montreal", - ), - ( - "qpeinexact", - 3, - 4, - None, - "tket", - CompilerSettings(tket=TKETSettings(placement="graphplacement")), - "ibm", - "ibm_montreal", - ), - ( - "qpeinexact", - 3, - 4, - None, - "qiskit", - CompilerSettings(qiskit=QiskitSettings(optimization_level=1)), - "rigetti", - "rigetti_aspen_m3", - ), - ( - "qpeinexact", - 3, - 4, - None, - "tket", - CompilerSettings(tket=TKETSettings(placement="lineplacement")), - "rigetti", - "rigetti_aspen_m3", - ), - ( - "qpeinexact", - 3, - 4, - None, - "qiskit", - CompilerSettings(qiskit=QiskitSettings(optimization_level=1)), - "oqc", - "oqc_lucy", - ), - ( - "qpeinexact", - 3, - 4, - None, - "tket", - CompilerSettings(tket=TKETSettings(placement="graphplacement")), - "oqc", - "oqc_lucy", - ), - ( - "qpeinexact", - 3, - 4, - None, - "tket", - CompilerSettings(tket=TKETSettings(placement="graphplacement")), - "quantinuum", - "quantinuum_h2", - ), - ( - "qpeinexact", - 3, - 4, - None, - "qiskit", - CompilerSettings(qiskit=QiskitSettings(optimization_level=2)), - "quantinuum", - "quantinuum_h2", - ), - ( - "grover-noancilla", - "alg", - 5, - None, - "qiskit", - None, - "", - "", - ), - ( - "qwalk-noancilla", - "alg", - 5, - None, - "qiskit", - None, - "", - "", - ), - ( - "grover-v-chain", - "alg", - 5, - None, - "qiskit", - None, - "", - "", - ), - ( - "qwalk-v-chain", - "alg", - 5, - None, - "qiskit", - None, - "", - "", - ), - ( - "shor", - "alg", - None, - "xsmall", - "qiskit", - None, - "", - "", - ), - ], -) -def test_get_benchmark( - benchmark_name: str, - level: str | int, - circuit_size: int | None, - benchmark_instance_name: str | None, - compiler: str, - compiler_settings: CompilerSettings | None, - provider_name: str, - device_name: str, -) -> None: - """Test the creation of the benchmarks using the get_benchmark method.""" - qc = get_benchmark( - benchmark_name, - level, - circuit_size, - benchmark_instance_name, - compiler, - compiler_settings, - provider_name, - device_name, - ) - assert qc.depth() > 0 - if provider_name and "oqc" not in provider_name: - if compiler == "tket": - qc = tk_to_qiskit(qc, replace_implicit_swaps=False) - assert isinstance(qc, QuantumCircuit) - for qc_instruction in qc.data: - instruction = qc_instruction.operation - gate_type = instruction.name - provider = get_provider_by_name(provider_name) - assert gate_type in provider.get_native_gates() or gate_type == "barrier" - - -def test_get_benchmark_faulty_parameters() -> None: - """Test the get_benchmark method with faulty parameters.""" - match = "Selected benchmark is not supported. Valid benchmarks are" - with pytest.raises(ValueError, match=match): - get_benchmark("wrong_name", 2, 6) - match = "Selected level must be in" - with pytest.raises(ValueError, match=match): - get_benchmark( # type: ignore[call-overload] - "qpeexact", - 8, - "wrong_size", - None, - "qiskit", - CompilerSettings(qiskit=QiskitSettings(optimization_level=1)), - "rigetti", - "rigetti_aspen_m3", - ) - match = "circuit_size must be None or int for this benchmark." - with pytest.raises(ValueError, match=match): - get_benchmark( - "dj", - 1, - -1, - None, - "qiskit", - CompilerSettings(qiskit=QiskitSettings(optimization_level=1)), - "rigetti", - "rigetti_aspen_m3", - ) - - match = "benchmark_instance_name must be defined for this benchmark." - with pytest.raises(ValueError, match=match): - get_benchmark( # type: ignore[call-overload] - "shor", - 1, - 3, - 2, - "qiskit", - CompilerSettings(qiskit=QiskitSettings(optimization_level=1)), - "rigetti", - "rigetti_aspen_m3", - ) - - match = "Selected compiler must be in" - with pytest.raises(ValueError, match=match): - get_benchmark( - "qpeexact", - 1, - 3, - None, - "wrong_compiler", - CompilerSettings(qiskit=QiskitSettings(optimization_level=1)), - "rigetti", - "rigetti_aspen_m3", - ) - match = "compiler_settings must be of type CompilerSettings or None" - with pytest.raises(ValueError, match=match): - get_benchmark( # type: ignore[call-overload] - "qpeexact", - 1, - 3, - None, - "qiskit", - "wrong_compiler_settings", - "rigetti", - "rigetti_aspen_m3", - ) - match = "Selected provider_name must be in" - with pytest.raises(ValueError, match=match): - get_benchmark( - "qpeexact", - 2, - 3, - None, - "qiskit", - CompilerSettings(qiskit=QiskitSettings(optimization_level=1)), - "wrong_gateset", - "rigetti_aspen_m3", - ) - match = "Selected device_name must be in" - with pytest.raises(ValueError, match=match): - get_benchmark( - "qpeexact", - 3, - 3, - None, - "qiskit", - CompilerSettings(qiskit=QiskitSettings(optimization_level=1)), - "rigetti", - "wrong_device", - ) - - -def test_configure_end(output_path: str) -> None: - """Removes all temporarily created files while testing.""" - # delete all files in the test directory and the directory itself - for f in Path(output_path).iterdir(): - f.unlink() - Path(output_path).rmdir() - - -@pytest.mark.parametrize( - "abstraction_level", - [ - (1), - (2), - (3), - ], -) -def test_saving_qasm_to_alternative_location_with_alternative_filename( - abstraction_level: int, -) -> None: - """Test saving the qasm file to an alternative location with an alternative filename.""" - directory = "." - filename = "ae_test_qiskit" - qc = get_benchmark("ae", abstraction_level, 5) - assert qc - res = qiskit_helper.get_mapped_level( - qc, - qc.num_qubits, - IBMProvider.get_device("ibm_washington"), - 1, - False, - False, - directory, - filename, - ) - assert res - path = Path(directory) / Path(filename).with_suffix(".qasm") - assert path.is_file() - path.unlink() - - filename = "ae_test_tket" - qc = get_benchmark("ae", abstraction_level, 7) - assert qc - res = tket_helper.get_mapped_level( - qc, - qc.num_qubits, - IBMProvider.get_device("ibm_washington"), - False, - False, - False, - directory, - filename, - ) - assert res - path = Path(directory) / Path(filename).with_suffix(".qasm") - assert path.is_file() - path.unlink() - - -def test_oqc_benchmarks() -> None: - """Test the creation of benchmarks for the OQC devices.""" - qc = get_benchmark("ghz", 1, 5) - directory = "." - filename = "ghz_oqc" - path = Path(directory) / Path(filename).with_suffix(".qasm") - - tket_helper.get_native_gates_level( - qc, - OQCProvider(), - qc.num_qubits, - file_precheck=False, - return_qc=False, - target_directory=directory, - target_filename=filename, - ) - - assert QuantumCircuit.from_qasm_file(str(path)) - path.unlink() - - directory = "." - filename = "ghz_oqc2" - path = Path(directory) / Path(filename).with_suffix(".qasm") - tket_helper.get_mapped_level( - qc, - qc.num_qubits, - OQCProvider().get_device("oqc_lucy"), - lineplacement=False, - file_precheck=False, - return_qc=False, - target_directory=directory, - target_filename=filename, - ) - assert QuantumCircuit.from_qasm_file(str(path)) - path.unlink() - directory = "." - filename = "ghz_oqc3" - path = Path(directory) / Path(filename).with_suffix(".qasm") - qiskit_helper.get_native_gates_level( - qc, - OQCProvider(), - qc.num_qubits, - opt_level=1, - file_precheck=False, - return_qc=False, - target_directory=directory, - target_filename=filename, - ) - assert QuantumCircuit.from_qasm_file(str(path)) - path.unlink() - directory = "." - filename = "ghz_oqc4" - path = Path(directory) / Path(filename).with_suffix(".qasm") - qiskit_helper.get_mapped_level( - qc, - qc.num_qubits, - OQCProvider().get_device("oqc_lucy"), - opt_level=1, - file_precheck=False, - return_qc=False, - target_directory=directory, - target_filename=filename, - ) - - assert QuantumCircuit.from_qasm_file(str(path)) - path.unlink() - - -def test_calc_supermarq_features() -> None: - """Test the calculation of the supermarq features.""" - ghz_qc = get_benchmark("ghz", 1, 5) - ghz_features = utils.calc_supermarq_features(ghz_qc) - assert ghz_features.program_communication == 0.4 - assert ghz_features.entanglement_ratio == 0.8 - assert ghz_features.critical_depth == 1.0 - assert ghz_features.parallelism == 0.0 - - empty_qc = QuantumCircuit(2) - empty_features = utils.calc_supermarq_features(empty_qc) - assert empty_features.parallelism == 0.0 - assert empty_features.entanglement_ratio == 0.0 - assert empty_features.critical_depth == 0.0 - assert empty_features.program_communication == 0.0 - - dense_qc = QuantumCircuit(2) - dense_qc.h([0, 1]) - dense_features = utils.calc_supermarq_features(dense_qc) - assert dense_features.parallelism == 1.0 - assert dense_features.entanglement_ratio == 0.0 - assert dense_features.critical_depth == 0.0 - assert dense_features.program_communication == 0.0 - - regular_qc = get_benchmark("vqe", 1, 5) - regular_features = utils.calc_supermarq_features(regular_qc) - assert 0 < regular_features.parallelism < 1 - assert 0 < regular_features.entanglement_ratio < 1 - assert 0 < regular_features.critical_depth < 1 - assert 0 < regular_features.program_communication < 1 - assert 0 < regular_features.liveness < 1 - - -def test_benchmark_generator() -> None: - """Test the BenchmarkGenerator class.""" - generator = BenchmarkGenerator(qasm_output_path="test") - assert generator.qasm_output_path == "test" - assert generator.timeout > 0 - assert generator.cfg is not None - - -# This function is used to test the timeout watchers and needs two parameters since those values are logged when a timeout occurs. -def endless_loop(arg1: SampleObject, run_forever: bool) -> bool: # noqa: ARG001 - """Endless loop necessary for testing the timeout watcher.""" - while run_forever: - pass - return True - - -class SampleObject: - """Sample object for testing the timeout watcher.""" - - def __init__(self, name: str) -> None: - """Initialize the sample object.""" - self.name = name - - -def test_timeout_watchers() -> None: - """Test the timeout watcher.""" - timeout = 1 - if sys.platform == "win32": - with pytest.warns(RuntimeWarning, match="Timeout is not supported on Windows."): - timeout_watcher(endless_loop, timeout, [SampleObject("test"), False]) - else: - assert not timeout_watcher(endless_loop, timeout, [SampleObject("test"), True]) - assert timeout_watcher(endless_loop, timeout, [SampleObject("test"), False]) - - -def test_get_module_for_benchmark() -> None: - """Test the get_module_for_benchmark function.""" - for benchmark in utils.get_supported_benchmarks(): - assert utils.get_module_for_benchmark(benchmark.split("-")[0]) is not None - - -def test_benchmark_helper_shor() -> None: - """Testing the Shor benchmarks.""" - shor_instances = ["xsmall", "small", "medium", "large", "xlarge"] - for elem in shor_instances: - res_shor = shor.get_instance(elem) - assert res_shor - - -@pytest.mark.skipif( - sys.platform == "win32", - reason="PySCF is not available on Windows.", -) -def test_benchmark_groundstate_non_windows() -> None: - """Testing the Groundstate benchmarks.""" - groundstate_instances = ["small", "medium", "large"] - for elem in groundstate_instances: - res_groundstate = groundstate.get_molecule(elem) - assert res_groundstate - - qc = groundstate.create_circuit("small") - assert qc.depth() > 0 - - -@pytest.mark.skipif( - sys.platform != "win32", - reason="Windows-specific test.", -) -def test_benchmark_groundstate_windows() -> None: - """Testing the Groundstate benchmarks on Windows.""" - with pytest.raises(ImportError, match=r"PySCF is not installed"): - groundstate.create_circuit("small") - - -def test_tket_mapped_circuit_qubit_number() -> None: - """Test the number of qubits in the tket-mapped circuit.""" - qc = get_benchmark("ghz", 1, 5) - res = tket_helper.get_mapped_level( - qc, - qc.num_qubits, - IBMProvider().get_device("ibm_washington"), - True, - file_precheck=False, - return_qc=True, - ) - assert isinstance(res, pytket.Circuit) - assert res.n_qubits == 127 diff --git a/tests/test_benchmark_generation.py b/tests/test_benchmark_generation.py new file mode 100644 index 000000000..e9aa21b76 --- /dev/null +++ b/tests/test_benchmark_generation.py @@ -0,0 +1,437 @@ +"""Tests for the benchmark generation.""" + +from __future__ import annotations + +import re +import sys +from pathlib import Path +from typing import TYPE_CHECKING + +if TYPE_CHECKING: # pragma: no cover + import types + from collections.abc import Callable + + from qiskit import QuantumCircuit + +import pytest +from qiskit import QuantumCircuit +from qiskit.qasm2 import LEGACY_CUSTOM_INSTRUCTIONS +from qiskit.qasm2 import load as load_qasm2 +from qiskit.qasm3 import load as load_qasm3 + +from mqt.bench import utils +from mqt.bench.benchmark_generator import ( + BenchmarkGenerator, + qiskit_helper, + timeout_watcher, + tket_helper, +) +from mqt.bench.benchmarks import ( + ae, + bv, + dj, + ghz, + graphstate, + grover, + qaoa, + qft, + qftentangled, + qnn, + qpeexact, + qpeinexact, + qwalk, + randomcircuit, + shor, + vqerealamprandom, + vqesu2random, + vqetwolocalrandom, + wstate, +) +from mqt.bench.devices import ( + get_available_devices, + get_available_native_gatesets, +) + + +@pytest.fixture +def output_path() -> str: + """Fixture to create the output path for the tests.""" + output_path = Path("./tests/test_output/") + output_path.mkdir(parents=True, exist_ok=True) + return str(output_path) + + +@pytest.fixture +def quantum_circuit() -> str: + """Fixture to return a GHZ quantum circuit.""" + return ghz.create_circuit(3) + + +@pytest.mark.parametrize( + ("benchmark", "input_value", "scalable"), + [ + (ae, 3, True), + (bv, 3, True), + (ghz, 2, True), + (dj, 3, True), + (graphstate, 3, True), + (grover, 3, False), + (qaoa, 3, True), + (qft, 3, True), + (qftentangled, 3, True), + (qnn, 3, True), + (qpeexact, 3, True), + (qpeinexact, 3, True), + (qwalk, 3, False), + (randomcircuit, 3, True), + (vqerealamprandom, 3, True), + (vqesu2random, 3, True), + (vqetwolocalrandom, 3, True), + (wstate, 3, True), + (shor, 3, False), + ], +) +def test_quantumcircuit_alg_level( + benchmark: types.ModuleType, input_value: int, scalable: bool, output_path: str +) -> None: + """Test the creation of the algorithm level benchmarks for the benchmarks.""" + qc = benchmark.create_circuit(input_value) + if scalable: + assert qc.num_qubits == input_value + assert benchmark.__name__.split(".")[-1] in qc.name + filename = "testfile" + filepath = Path(output_path) / (filename + ".qasm") + res = qiskit_helper.get_alg_level(qc, input_value, False, False, output_path, filename) + assert res + assert load_qasm3(filepath) + + res = qiskit_helper.get_alg_level( + qc, + input_value, + file_precheck=True, + return_qc=False, + target_directory=output_path, + target_filename=filename, + qasm_format="qasm3", + ) + assert res + assert load_qasm3(filepath) + filepath.unlink() + + with pytest.raises( + ValueError, match="'qasm2' is not supported for the algorithm level, please use 'qasm3' instead." + ): + qiskit_helper.get_alg_level(qc, input_value, False, False, output_path, filename, qasm_format="qasm2") + + +@pytest.mark.parametrize( + ("benchmark", "input_value", "scalable"), + [ + (ae, 3, True), + (bv, 3, True), + (ghz, 2, True), + (dj, 3, True), + (graphstate, 3, True), + (grover, 3, False), + (qaoa, 3, True), + (qft, 3, True), + (qftentangled, 3, True), + (qnn, 3, True), + (qpeexact, 3, True), + (qpeinexact, 3, True), + (qwalk, 3, False), + (randomcircuit, 3, True), + (vqerealamprandom, 3, True), + (vqesu2random, 3, True), + (vqetwolocalrandom, 3, True), + (wstate, 3, True), + (shor, 3, False), + ], +) +def test_quantumcircuit_indep_level( + benchmark: types.ModuleType, input_value: int, scalable: bool, output_path: str +) -> None: + """Test the creation of the independent level benchmarks for the benchmarks.""" + qc = benchmark.create_circuit(input_value) + + if scalable: + assert qc.num_qubits == input_value + assert benchmark.__name__.split(".")[-1] in qc.name + filename = "testfile" + filepath = Path(output_path) / (filename + ".qasm") + evaluate_benchmark_with_qasm_formats( + qiskit_helper.get_indep_level, (qc, input_value, False, False, output_path, filename), output_path + ) + + res = qiskit_helper.get_indep_level( + qc, + input_value, + file_precheck=True, + return_qc=False, + target_directory=output_path, + target_filename=filename, + qasm_format="qasm3", + ) + assert res + filepath.unlink() + + evaluate_benchmark_with_qasm_formats( + tket_helper.get_indep_level, (qc, input_value, False, False, output_path, filename), output_path + ) + + res = tket_helper.get_indep_level( + qc, + input_value, + file_precheck=True, + return_qc=False, + target_directory=output_path, + target_filename=filename, + qasm_format="qasm3", + ) + assert res + filepath.unlink() + + +def test_native_gates_level_qiskit(quantum_circuit: QuantumCircuit, output_path: str) -> None: + """Test the native gates level for the Qiskit compiler.""" + native_gatesets = get_available_native_gatesets() + filename = "testfile" + filepath = Path(output_path) / (filename + ".qasm") + opt_level = 0 + for gateset in native_gatesets: + evaluate_benchmark_with_qasm_formats( + qiskit_helper.get_native_gates_level, + (quantum_circuit, gateset, quantum_circuit.num_qubits, 0, False, False, output_path, filename), + output_path, + ) + + res = qiskit_helper.get_native_gates_level( + quantum_circuit, + gateset, + quantum_circuit.num_qubits, + opt_level, + file_precheck=True, + return_qc=False, + target_directory=output_path, + target_filename=filename, + qasm_format="qasm3", + ) + assert res + filepath.unlink() + + +def test_native_gates_level_tket(quantum_circuit: QuantumCircuit, output_path: str) -> None: + """Test the native gates level for the TKET compiler.""" + filename = "testfile" + filepath = Path(output_path) / (filename + ".qasm") + + for gateset in get_available_native_gatesets(): + if gateset.gateset_name != "clifford+t": + evaluate_benchmark_with_qasm_formats( + tket_helper.get_native_gates_level, + (quantum_circuit, gateset, quantum_circuit.num_qubits, False, False, output_path, filename), + output_path, + ) + + res = tket_helper.get_native_gates_level( + quantum_circuit, + gateset, + quantum_circuit.num_qubits, + file_precheck=True, + return_qc=False, + target_directory=output_path, + target_filename=filename, + qasm_format="qasm3", + ) + assert res + filepath.unlink() + else: + with pytest.raises( + ValueError, match=r"The gateset 'clifford\+t' is not supported by TKET. Please use Qiskit instead." + ): + tket_helper.get_native_gates_level( + quantum_circuit, + gateset, + quantum_circuit.num_qubits, + file_precheck=False, + return_qc=False, + target_directory=output_path, + ) + + +def test_mapped_level_qiskit(quantum_circuit: QuantumCircuit, output_path: str) -> None: + """Test the mapped level for the Qiskit compiler.""" + filename = "testfile" + filepath = Path(output_path) / (filename + ".qasm") + for device in get_available_devices(): + if device.num_qubits >= quantum_circuit.num_qubits: + evaluate_benchmark_with_qasm_formats( + qiskit_helper.get_mapped_level, + (quantum_circuit, quantum_circuit.num_qubits, device, 0, False, False, output_path, filename), + output_path, + ) + + res = qiskit_helper.get_mapped_level( + quantum_circuit, + quantum_circuit.num_qubits, + device, + opt_level=0, + file_precheck=True, + return_qc=False, + target_directory=output_path, + target_filename=filename, + qasm_format="qasm3", + ) + assert res + filepath.unlink() + + +def test_mapped_level_tket(quantum_circuit: QuantumCircuit, output_path: str) -> None: + """Test the mapped level for the TKET compiler.""" + filename = "testfile" + filepath = Path(output_path) / (filename + ".qasm") + for device in get_available_devices(): + if device.num_qubits >= quantum_circuit.num_qubits: + evaluate_benchmark_with_qasm_formats( + tket_helper.get_mapped_level, + (quantum_circuit, quantum_circuit.num_qubits, device, False, False, output_path, filename), + output_path, + ) + + res = tket_helper.get_mapped_level( + quantum_circuit, + quantum_circuit.num_qubits, + device, + file_precheck=True, + return_qc=False, + target_directory=output_path, + target_filename=filename, + qasm_format="qasm3", + ) + assert res + filepath.unlink() + + +def test_openqasm_gates() -> None: + """Test the openqasm gates.""" + openqasm_gates = utils.get_openqasm_gates() + num_openqasm_gates = 42 + assert len(openqasm_gates) == num_openqasm_gates + + +def test_dj_constant_oracle() -> None: + """Test the creation of the DJ benchmark constant oracle.""" + qc = dj.create_circuit(5, False) + assert qc.depth() > 0 + + +def test_configure_end(output_path: str) -> None: + """Removes all temporarily created files while testing.""" + # delete all files in the test directory and the directory itself + for f in Path(output_path).iterdir(): + f.unlink() + Path(output_path).rmdir() + + +def test_benchmark_generator() -> None: + """Test the BenchmarkGenerator class.""" + generator = BenchmarkGenerator(qasm_output_path="test") + assert generator.qasm_output_path == "test" + assert generator.timeout > 0 + assert generator.cfg is not None + + +# This function is used to test the timeout watchers and needs two parameters since those values are logged when a timeout occurs. +def endless_loop(arg1: SampleObject, run_forever: bool) -> bool: # noqa: ARG001 + """Endless loop necessary for testing the timeout watcher.""" + while run_forever: + pass + return True + + +class SampleObject: + """Sample object for testing the timeout watcher.""" + + def __init__(self, name: str) -> None: + """Initialize the sample object.""" + self.name = name + + +def test_timeout_watchers() -> None: + """Test the timeout watcher.""" + timeout = 1 + if sys.platform == "win32": + with pytest.warns(RuntimeWarning, match="Timeout is not supported on Windows."): + timeout_watcher(endless_loop, timeout, [SampleObject("test"), False]) + else: + assert not timeout_watcher(endless_loop, timeout, [SampleObject("test"), True]) + assert timeout_watcher(endless_loop, timeout, [SampleObject("test"), False]) + + +def test_get_module_for_benchmark() -> None: + """Test the get_module_for_benchmark function.""" + for benchmark in utils.get_supported_benchmarks(): + assert utils.get_module_for_benchmark(benchmark.split("-")[0]) is not None + + +def test_shor() -> None: + """Testing the Shor benchmarks.""" + shor_instances = ["xsmall", "small", "medium", "large", "xlarge"] + for elem in shor_instances: + res_shor = shor.get_instance(elem) + assert res_shor + + with pytest.raises(ValueError, match="The input needs to be an odd integer greater than 3."): + shor.Shor._validate_input(2, 2) # noqa: SLF001 + with pytest.raises(ValueError, match="a must have value >= 2, was 1"): + shor.Shor._validate_input(4, 1) # noqa: SLF001 + with pytest.raises(ValueError, match=re.escape("The integer a needs to satisfy a < N and gcd(a, N) = 1.")): + shor.Shor._validate_input(3, 6) # noqa: SLF001 + + +def evaluate_benchmark_with_qasm_formats( + fct: Callable, args: list[int | QuantumCircuit | str | bool], output_path: str +) -> None: + """Evaluate the benchmarks with different QASM formats.""" + for qasm_format in ["qasm2", "qasm3"]: + res = fct(*args, qasm_format=qasm_format) + assert res + filepath = Path(output_path) / "testfile.qasm" + if qasm_format == "qasm2": + assert load_qasm2(filepath, custom_instructions=LEGACY_CUSTOM_INSTRUCTIONS) + else: + assert load_qasm3(filepath) + + +def test_bv() -> None: + """Test the creation of the BV benchmark.""" + qc = bv.create_circuit(3) + assert qc.depth() > 0 + assert qc.num_qubits == 3 + assert "bv" in qc.name + + qc = bv.create_circuit(3, dynamic=True) + assert qc.depth() > 0 + assert qc.num_qubits == 3 + assert "bv" in qc.name + + with pytest.raises(ValueError, match="Length of hidden_string must be num_qubits - 1."): + bv.create_circuit(3, hidden_string="wrong") + + +def test_ae() -> None: + """Test the creation of the AE benchmark with wrong input.""" + with pytest.raises(ValueError, match=re.escape("Number of qubits must be at least 2 (1 evaluation + 1 target).")): + ae.create_circuit(1) + + +def test_get_default_qasm_output_path() -> None: + """Test the default QASM output path.""" + assert Path(utils.get_default_qasm_output_path()) + + +def test_save_as_qasm() -> None: + """Test the save_as_qasm function with wrong input.""" + qc = QuantumCircuit(0) + with pytest.raises(ValueError, match="Unknown qasm format: wrong_format"): + utils.save_as_qasm(qc=qc, filename="testfile", qasm_format="wrong_format") diff --git a/tests/test_cli.py b/tests/test_cli.py index f01f23a93..4c136bd15 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -43,16 +43,16 @@ "--algorithm", "ghz", "--num-qubits", "20", "--compiler", "qiskit", - "--native-gate-set", "ibm", + "--gateset", "ibm_falcon", "--device", None, - ], dumps(get_benchmark(level="nativegates", benchmark_name="ghz", circuit_size=20, compiler="qiskit", provider_name="ibm"))), + ], dumps(get_benchmark(level="nativegates", benchmark_name="ghz", circuit_size=20, compiler="qiskit", gateset="ibm_falcon"))), ([ "--level", "mapped", "--algorithm", "ghz", "--num-qubits", "20", "--compiler", "qiskit", "--qiskit-optimization-level", "2", - "--native-gate-set", "ibm", + "--gateset", "ibm_falcon", "--device", "ibm_montreal", ], dumps(get_benchmark( level="mapped", @@ -60,7 +60,7 @@ circuit_size=20, compiler="qiskit", compiler_settings=CompilerSettings(QiskitSettings(optimization_level=2)), - provider_name="ibm", + gateset="ibm_falcon", device_name="ibm_montreal", ))), ([ @@ -84,7 +84,7 @@ "--num-qubits", "20", "--compiler", "qiskit", "--qiskit-optimization-level", "2", - "--native-gate-set", None, + "--gateset", None, "--device", "ibm_montreal", ], dumps(get_benchmark( level="mapped", diff --git a/tests/test_get_benchmark.py b/tests/test_get_benchmark.py new file mode 100644 index 000000000..c6a76d3c0 --- /dev/null +++ b/tests/test_get_benchmark.py @@ -0,0 +1,333 @@ +"""Tests for the get_benchmark method.""" + +from __future__ import annotations + +from pathlib import Path + +import pytest +import pytket +from pytket.extensions.qiskit import tk_to_qiskit +from qiskit import QuantumCircuit + +from mqt.bench import get_benchmark, utils +from mqt.bench.benchmark_generator import ( + CompilerSettings, + QiskitSettings, + qiskit_helper, + tket_helper, +) +from mqt.bench.devices import ( + get_device_by_name, + get_native_gateset_by_name, +) + + +@pytest.mark.parametrize( + ( + "benchmark_name", + "level", + "circuit_size", + "benchmark_instance_name", + "compiler", + "compiler_settings", + "gateset_name", + "device_name", + ), + [ + # Algorithm-level tests + ("dj", "alg", 3, None, "qiskit", None, "", ""), + ("wstate", 0, 3, None, "tket", None, "", ""), + ("shor", "alg", None, "xsmall", "qiskit", None, "", ""), + ("grover-noancilla", "alg", 3, None, "qiskit", None, "", ""), + ("qwalk-v-chain", "alg", 3, None, "qiskit", None, "", ""), + # Independent level tests + ("ghz", "indep", 3, None, "qiskit", None, "", ""), + ("graphstate", 1, 3, None, "qiskit", None, "", ""), + ("graphstate", 1, 3, None, "tket", None, "", ""), + # Native gates level tests + ( + "dj", + "nativegates", + 3, + None, + "qiskit", + CompilerSettings(qiskit=QiskitSettings(optimization_level=0)), + "ionq", + "", + ), + ("qft", 2, 3, None, "tket", None, "rigetti", "rigetti_aspen_m3"), + # Mapped level tests + ( + "ghz", + "mapped", + 3, + None, + "qiskit", + CompilerSettings(qiskit=QiskitSettings(optimization_level=0)), + "", + "ibm_washington", + ), + ("ghz", 3, 3, None, "tket", None, "ibm_falcon", "ibm_montreal"), + ("ghz", 3, 3, None, "qiskit", CompilerSettings(qiskit=QiskitSettings(optimization_level=0)), "", "ionq_aria1"), + ], +) +def test_get_benchmark( + benchmark_name: str, + level: str | int, + circuit_size: int | None, + benchmark_instance_name: str | None, + compiler: str, + compiler_settings: CompilerSettings | None, + gateset_name: str, + device_name: str, +) -> None: + """Test the creation of the benchmarks using the get_benchmark method.""" + qc = get_benchmark( + benchmark_name, + level, + circuit_size, + benchmark_instance_name, + compiler, + compiler_settings, + gateset_name, + device_name, + ) + assert qc.depth() > 0 + if gateset_name: + if compiler == "tket": + qc = tk_to_qiskit(qc, replace_implicit_swaps=False) + assert isinstance(qc, QuantumCircuit) + for qc_instruction in qc.data: + instruction = qc_instruction.operation + gate_type = instruction.name + gateset = get_native_gateset_by_name(gateset_name) + assert gate_type in gateset.gates or gate_type == "barrier" + + +def test_get_benchmark_faulty_parameters() -> None: + """Test the get_benchmark method with faulty parameters.""" + match = "Selected benchmark is not supported. Valid benchmarks are" + with pytest.raises(ValueError, match=match): + get_benchmark("wrong_name", 2, 6) + match = "Selected level must be in" + with pytest.raises(ValueError, match=match): + get_benchmark( # type: ignore[call-overload] + "qpeexact", + 8, + "wrong_size", + None, + "qiskit", + CompilerSettings(qiskit=QiskitSettings(optimization_level=1)), + "rigetti", + "rigetti_aspen_m3", + ) + match = "circuit_size must be None or int for this benchmark." + with pytest.raises(ValueError, match=match): + get_benchmark( + "dj", + 1, + -1, + None, + "qiskit", + CompilerSettings(qiskit=QiskitSettings(optimization_level=1)), + "rigetti", + "rigetti_aspen_m3", + ) + + match = "benchmark_instance_name must be defined for this benchmark." + with pytest.raises(ValueError, match=match): + get_benchmark( # type: ignore[call-overload] + "shor", + 1, + 3, + 2, + "qiskit", + CompilerSettings(qiskit=QiskitSettings(optimization_level=1)), + "rigetti", + "rigetti_aspen_m3", + ) + + match = "Selected compiler must be in" + with pytest.raises(ValueError, match=match): + get_benchmark( + "qpeexact", + 1, + 3, + None, + "wrong_compiler", + CompilerSettings(qiskit=QiskitSettings(optimization_level=1)), + "rigetti", + "rigetti_aspen_m3", + ) + match = "compiler_settings must be of type CompilerSettings or None" + with pytest.raises(ValueError, match=match): + get_benchmark( # type: ignore[call-overload] + "qpeexact", + 1, + 3, + None, + "qiskit", + "wrong_compiler_settings", + "rigetti", + "rigetti_aspen_m3", + ) + match = "Gateset wrong_gateset not found in available gatesets." + with pytest.raises(ValueError, match=match): + get_benchmark( + "qpeexact", + 2, + 3, + None, + "qiskit", + CompilerSettings(qiskit=QiskitSettings(optimization_level=1)), + "wrong_gateset", + "rigetti_aspen_m3", + ) + match = "Selected device_name must be in" + with pytest.raises(ValueError, match=match): + get_benchmark( + "qpeexact", + 3, + 3, + None, + "qiskit", + CompilerSettings(qiskit=QiskitSettings(optimization_level=1)), + "rigetti", + "wrong_device", + ) + + +def test_tket_mapped_circuit_qubit_number() -> None: + """Test the number of qubits in the tket-mapped circuit.""" + qc = get_benchmark("ghz", 1, 5) + res = tket_helper.get_mapped_level( + qc, + qc.num_qubits, + get_device_by_name("ibm_washington"), + file_precheck=False, + return_qc=True, + ) + assert isinstance(res, pytket.Circuit) + assert res.n_qubits == 127 + + +@pytest.mark.parametrize( + "abstraction_level", + [ + (1), + (2), + (3), + ], +) +def test_saving_qasm_to_alternative_location_with_alternative_filename( + abstraction_level: int, +) -> None: + """Test saving the qasm file to an alternative location with an alternative filename.""" + directory = "." + filename = "ae_test_qiskit" + qc = get_benchmark("ae", abstraction_level, 5) + assert qc + res = qiskit_helper.get_mapped_level( + qc, + qc.num_qubits, + get_device_by_name("ibm_washington"), + 1, + False, + False, + directory, + filename, + ) + assert res + path = Path(directory) / Path(filename).with_suffix(".qasm") + assert path.is_file() + # path.unlink() + + filename = "ae_test_tket" + qc = get_benchmark("ae", abstraction_level, 7) + assert qc + res = tket_helper.get_mapped_level( + qc, + qc.num_qubits, + get_device_by_name("ibm_washington"), + False, + False, + directory, + filename, + ) + assert res + path = Path(directory) / Path(filename).with_suffix(".qasm") + assert path.is_file() + path.unlink() + + +def test_unidirectional_coupling_map() -> None: + """Test the unidirectional coupling map for the OQC Lucy device.""" + qc = get_benchmark( + benchmark_name="dj", + level="mapped", + circuit_size=3, + compiler="tket", + gateset="oqc", + device_name="oqc_lucy", + ) + # check that all gates in the circuit are in the coupling map + cmap = [(c[0], c[1]) for c in get_device_by_name("oqc_lucy").coupling_map] + assert qc.valid_connectivity(arch=pytket.architecture.Architecture(cmap), directed=True) + + +def test_calc_supermarq_features() -> None: + """Test the calculation of the supermarq features.""" + ghz_qc = get_benchmark("ghz", 1, 5) + ghz_features = utils.calc_supermarq_features(ghz_qc) + assert ghz_features.program_communication == 0.4 + assert ghz_features.entanglement_ratio == 0.8 + assert ghz_features.critical_depth == 1.0 + assert ghz_features.parallelism == 0.0 + + empty_qc = QuantumCircuit(2) + empty_features = utils.calc_supermarq_features(empty_qc) + assert empty_features.parallelism == 0.0 + assert empty_features.entanglement_ratio == 0.0 + assert empty_features.critical_depth == 0.0 + assert empty_features.program_communication == 0.0 + + dense_qc = QuantumCircuit(2) + dense_qc.h([0, 1]) + dense_features = utils.calc_supermarq_features(dense_qc) + assert dense_features.parallelism == 1.0 + assert dense_features.entanglement_ratio == 0.0 + assert dense_features.critical_depth == 0.0 + assert dense_features.program_communication == 0.0 + + regular_qc = get_benchmark("qaoa", 1, 5) + regular_features = utils.calc_supermarq_features(regular_qc) + assert 0 < regular_features.parallelism < 1 + assert 0 < regular_features.entanglement_ratio < 1 + assert 0 < regular_features.critical_depth < 1 + assert 0 < regular_features.program_communication < 1 + assert 0 < regular_features.liveness < 1 + + +def test_clifford_t() -> None: + """Test the Clifford+T gateset.""" + qc = get_benchmark( + benchmark_name="qft", + level="nativegates", + circuit_size=4, + compiler="qiskit", + gateset="clifford+t", + ) + + for gate_type in qc.count_ops(): + assert gate_type in get_native_gateset_by_name("clifford+t").gates + + with pytest.raises( + ValueError, match=r"The gateset 'clifford\+t' is not supported by TKET. Please use Qiskit instead." + ): + get_benchmark( + benchmark_name="qft", + level="nativegates", + circuit_size=4, + compiler="tket", + gateset="clifford+t", + ) diff --git a/uv.lock b/uv.lock index 8245d70e1..84d10b340 100644 --- a/uv.lock +++ b/uv.lock @@ -24,6 +24,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 }, ] +[[package]] +name = "antlr4-python3-runtime" +version = "4.13.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/33/5f/2cdf6f7aca3b20d3f316e9f505292e1f256a32089bd702034c29ebde6242/antlr4_python3_runtime-4.13.2.tar.gz", hash = "sha256:909b647e1d2fc2b70180ac586df3933e38919c85f98ccc656a96cd3f25ef3916", size = 117467 } +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 = "appnope" version = "0.1.4" @@ -480,15 +489,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/46/d1/e73b6ad76f0b1fb7f23c35c6d95dbc506a9c8804f43dda8cb5b0fa6331fd/dill-0.3.9-py3-none-any.whl", hash = "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a", size = 119418 }, ] -[[package]] -name = "docplex" -version = "2.28.240" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "six" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/15/99/340a523d3e724df4ccb85180d5a539cb4a447fb4ca0fcc5897c054bc7adf/docplex-2.28.240.tar.gz", hash = "sha256:c0de407e33f8709bb4cd91b6efeb96fd88bfecbdce2caec51afb79253bde6ff5", size = 643369 } - [[package]] name = "docutils" version = "0.21.2" @@ -516,22 +516,13 @@ 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 = "fastdtw" -version = "0.3.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/99/43/30f2d8db076f216b15c10db663b46e22d1750b1ebacd7af6e62b83d6ab98/fastdtw-0.3.4.tar.gz", hash = "sha256:2350fa6ec36bcad186eaf81f46eff35181baf04e324f522de8aeb43d0243f64f", size = 133402 } - [[package]] name = "fastjsonschema" -version = "2.21.0" +version = "2.21.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/31/d0/492a26afa3bdd0cb5dd78f59d7f4ca902d8e335856530e599e0d1ed9140d/fastjsonschema-2.21.0.tar.gz", hash = "sha256:a02026bbbedc83729da3bfff215564b71902757f33f60089f1abae193daa4771", size = 373839 } +sdist = { url = "https://files.pythonhosted.org/packages/8b/50/4b769ce1ac4071a1ef6d86b1a3fb56cdc3a37615e8c5519e1af96cdac366/fastjsonschema-2.21.1.tar.gz", hash = "sha256:794d4f0a58f848961ba16af7b9c85a3e88cd360df008c59aac6fc5ae9323b5d4", size = 373939 } wheels = [ - { url = "https://files.pythonhosted.org/packages/3f/3a/404a60bb9789ce4daecbb4ec780bee1c46d2ea5258cf689b7ab63acefd6f/fastjsonschema-2.21.0-py3-none-any.whl", hash = "sha256:5b23b8e7c9c6adc0ecb91c03a0768cb48cd154d9159378a69c8318532e0b5cbf", size = 23911 }, + { url = "https://files.pythonhosted.org/packages/90/2b/0817a2b257fe88725c25589d89aec060581aabf668707a8d03b2e9e0cb2a/fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667", size = 23924 }, ] [[package]] @@ -575,25 +566,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b4/4a/786589606d4989cb34d8bc766cd687d955aaf3039c367fe7104bcf82dc98/fonttools-4.55.0-py3-none-any.whl", hash = "sha256:12db5888cd4dd3fcc9f0ee60c6edd3c7e1fd44b7dd0f31381ea03df68f8a153f", size = 1100249 }, ] -[[package]] -name = "frozendict" -version = "2.4.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bb/59/19eb300ba28e7547538bdf603f1c6c34793240a90e1a7b61b65d8517e35e/frozendict-2.4.6.tar.gz", hash = "sha256:df7cd16470fbd26fc4969a208efadc46319334eb97def1ddf48919b351192b8e", size = 316416 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a6/7f/e80cdbe0db930b2ba9d46ca35a41b0150156da16dfb79edcc05642690c3b/frozendict-2.4.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c3a05c0a50cab96b4bb0ea25aa752efbfceed5ccb24c007612bc63e51299336f", size = 37927 }, - { url = "https://files.pythonhosted.org/packages/29/98/27e145ff7e8e63caa95fb8ee4fc56c68acb208bef01a89c3678a66f9a34d/frozendict-2.4.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f5b94d5b07c00986f9e37a38dd83c13f5fe3bf3f1ccc8e88edea8fe15d6cd88c", size = 37945 }, - { url = "https://files.pythonhosted.org/packages/ac/f1/a10be024a9d53441c997b3661ea80ecba6e3130adc53812a4b95b607cdd1/frozendict-2.4.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4c789fd70879ccb6289a603cdebdc4953e7e5dea047d30c1b180529b28257b5", size = 117656 }, - { url = "https://files.pythonhosted.org/packages/46/a6/34c760975e6f1cb4db59a990d58dcf22287e10241c851804670c74c6a27a/frozendict-2.4.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da6a10164c8a50b34b9ab508a9420df38f4edf286b9ca7b7df8a91767baecb34", size = 117444 }, - { url = "https://files.pythonhosted.org/packages/62/dd/64bddd1ffa9617f50e7e63656b2a7ad7f0a46c86b5f4a3d2c714d0006277/frozendict-2.4.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9a8a43036754a941601635ea9c788ebd7a7efbed2becba01b54a887b41b175b9", size = 116801 }, - { url = "https://files.pythonhosted.org/packages/45/ae/af06a8bde1947277aad895c2f26c3b8b8b6ee9c0c2ad988fb58a9d1dde3f/frozendict-2.4.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c9905dcf7aa659e6a11b8051114c9fa76dfde3a6e50e6dc129d5aece75b449a2", size = 117329 }, - { url = "https://files.pythonhosted.org/packages/d2/df/be3fa0457ff661301228f4c59c630699568c8ed9b5480f113b3eea7d0cb3/frozendict-2.4.6-cp310-cp310-win_amd64.whl", hash = "sha256:323f1b674a2cc18f86ab81698e22aba8145d7a755e0ac2cccf142ee2db58620d", size = 37522 }, - { url = "https://files.pythonhosted.org/packages/4a/6f/c22e0266b4c85f58b4613fec024e040e93753880527bf92b0c1bc228c27c/frozendict-2.4.6-cp310-cp310-win_arm64.whl", hash = "sha256:eabd21d8e5db0c58b60d26b4bb9839cac13132e88277e1376970172a85ee04b3", size = 34056 }, - { url = "https://files.pythonhosted.org/packages/04/13/d9839089b900fa7b479cce495d62110cddc4bd5630a04d8469916c0e79c5/frozendict-2.4.6-py311-none-any.whl", hash = "sha256:d065db6a44db2e2375c23eac816f1a022feb2fa98cbb50df44a9e83700accbea", size = 16148 }, - { url = "https://files.pythonhosted.org/packages/ba/d0/d482c39cee2ab2978a892558cf130681d4574ea208e162da8958b31e9250/frozendict-2.4.6-py312-none-any.whl", hash = "sha256:49344abe90fb75f0f9fdefe6d4ef6d4894e640fadab71f11009d52ad97f370b9", size = 16146 }, - { url = "https://files.pythonhosted.org/packages/a5/8e/b6bf6a0de482d7d7d7a2aaac8fdc4a4d0bb24a809f5ddd422aa7060eb3d2/frozendict-2.4.6-py313-none-any.whl", hash = "sha256:7134a2bb95d4a16556bb5f2b9736dceb6ea848fa5b6f3f6c2d6dba93b44b4757", size = 16146 }, -] - [[package]] name = "furo" version = "2024.8.6" @@ -618,50 +590,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/00/be/d59db2d1d52697c6adc9eacaf50e8965b6345cc143f671e1ed068818d5cf/graphviz-0.20.3-py3-none-any.whl", hash = "sha256:81f848f2904515d8cd359cc611faba817598d2feaac4027b266aa3eda7b3dde5", size = 47126 }, ] -[[package]] -name = "h5py" -version = "3.12.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/cc/0c/5c2b0a88158682aeafb10c1c2b735df5bc31f165bfe192f2ee9f2a23b5f1/h5py-3.12.1.tar.gz", hash = "sha256:326d70b53d31baa61f00b8aa5f95c2fcb9621a3ee8365d770c551a13dbbcbfdf", size = 411457 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/df/7d/b21045fbb004ad8bb6fb3be4e6ca903841722706f7130b9bba31ef2f88e3/h5py-3.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f0f1a382cbf494679c07b4371f90c70391dedb027d517ac94fa2c05299dacda", size = 3402133 }, - { url = "https://files.pythonhosted.org/packages/29/a7/3c2a33fba1da64a0846744726fd067a92fb8abb887875a0dd8e3bac8b45d/h5py-3.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cb65f619dfbdd15e662423e8d257780f9a66677eae5b4b3fc9dca70b5fd2d2a3", size = 2866436 }, - { url = "https://files.pythonhosted.org/packages/1e/d0/4bf67c3937a2437c20844165766ddd1a1817ae6b9544c3743050d8e0f403/h5py-3.12.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b15d8dbd912c97541312c0e07438864d27dbca857c5ad634de68110c6beb1c2", size = 5168596 }, - { url = "https://files.pythonhosted.org/packages/85/bc/e76f4b2096e0859225f5441d1b7f5e2041fffa19fc2c16756c67078417aa/h5py-3.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59685fe40d8c1fbbee088c88cd4da415a2f8bee5c270337dc5a1c4aa634e3307", size = 5341537 }, - { url = "https://files.pythonhosted.org/packages/99/bd/fb8ed45308bb97e04c02bd7aed324ba11e6a4bf9ed73967ca2a168e9cf92/h5py-3.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:577d618d6b6dea3da07d13cc903ef9634cde5596b13e832476dd861aaf651f3e", size = 2990575 }, - { url = "https://files.pythonhosted.org/packages/33/61/c463dc5fc02fbe019566d067a9d18746cd3c664f29c9b8b3c3f9ed025365/h5py-3.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ccd9006d92232727d23f784795191bfd02294a4f2ba68708825cb1da39511a93", size = 3410828 }, - { url = "https://files.pythonhosted.org/packages/95/9d/eb91a9076aa998bb2179d6b1788055ea09cdf9d6619cd967f1d3321ed056/h5py-3.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ad8a76557880aed5234cfe7279805f4ab5ce16b17954606cca90d578d3e713ef", size = 2872586 }, - { url = "https://files.pythonhosted.org/packages/b0/62/e2b1f9723ff713e3bd3c16dfeceec7017eadc21ef063d8b7080c0fcdc58a/h5py-3.12.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1473348139b885393125126258ae2d70753ef7e9cec8e7848434f385ae72069e", size = 5273038 }, - { url = "https://files.pythonhosted.org/packages/e1/89/118c3255d6ff2db33b062ec996a762d99ae50c21f54a8a6047ae8eda1b9f/h5py-3.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:018a4597f35092ae3fb28ee851fdc756d2b88c96336b8480e124ce1ac6fb9166", size = 5452688 }, - { url = "https://files.pythonhosted.org/packages/1d/4d/cbd3014eb78d1e449b29beba1f3293a841aa8086c6f7968c383c2c7ff076/h5py-3.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:3fdf95092d60e8130ba6ae0ef7a9bd4ade8edbe3569c13ebbaf39baefffc5ba4", size = 3006095 }, - { url = "https://files.pythonhosted.org/packages/d4/e1/ea9bfe18a3075cdc873f0588ff26ce394726047653557876d7101bf0c74e/h5py-3.12.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:06a903a4e4e9e3ebbc8b548959c3c2552ca2d70dac14fcfa650d9261c66939ed", size = 3372538 }, - { url = "https://files.pythonhosted.org/packages/0d/74/1009b663387c025e8fa5f3ee3cf3cd0d99b1ad5c72eeb70e75366b1ce878/h5py-3.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7b3b8f3b48717e46c6a790e3128d39c61ab595ae0a7237f06dfad6a3b51d5351", size = 2868104 }, - { url = "https://files.pythonhosted.org/packages/af/52/c604adc06280c15a29037d4aa79a24fe54d8d0b51085e81ed24b2fa995f7/h5py-3.12.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:050a4f2c9126054515169c49cb900949814987f0c7ae74c341b0c9f9b5056834", size = 5194606 }, - { url = "https://files.pythonhosted.org/packages/fa/63/eeaacff417b393491beebabb8a3dc5342950409eb6d7b39d437289abdbae/h5py-3.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c4b41d1019322a5afc5082864dfd6359f8935ecd37c11ac0029be78c5d112c9", size = 5413256 }, - { url = "https://files.pythonhosted.org/packages/86/f7/bb465dcb92ca3521a15cbe1031f6d18234dbf1fb52a6796a00bfaa846ebf/h5py-3.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:e4d51919110a030913201422fb07987db4338eba5ec8c5a15d6fab8e03d443fc", size = 2993055 }, - { url = "https://files.pythonhosted.org/packages/23/1c/ecdd0efab52c24f2a9bf2324289828b860e8dd1e3c5ada3cf0889e14fdc1/h5py-3.12.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:513171e90ed92236fc2ca363ce7a2fc6f2827375efcbb0cc7fbdd7fe11fecafc", size = 3346239 }, - { url = "https://files.pythonhosted.org/packages/93/cd/5b6f574bf3e318bbe305bc93ba45181676550eb44ba35e006d2e98004eaa/h5py-3.12.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:59400f88343b79655a242068a9c900001a34b63e3afb040bd7cdf717e440f653", size = 2843416 }, - { url = "https://files.pythonhosted.org/packages/8a/4f/b74332f313bfbe94ba03fff784219b9db385e6139708e55b11490149f90a/h5py-3.12.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3e465aee0ec353949f0f46bf6c6f9790a2006af896cee7c178a8c3e5090aa32", size = 5154390 }, - { url = "https://files.pythonhosted.org/packages/1a/57/93ea9e10a6457ea8d3b867207deb29a527e966a08a84c57ffd954e32152a/h5py-3.12.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba51c0c5e029bb5420a343586ff79d56e7455d496d18a30309616fdbeed1068f", size = 5378244 }, - { url = "https://files.pythonhosted.org/packages/50/51/0bbf3663062b2eeee78aa51da71e065f8a0a6e3cb950cc7020b4444999e6/h5py-3.12.1-cp313-cp313-win_amd64.whl", hash = "sha256:52ab036c6c97055b85b2a242cb540ff9590bacfda0c03dd0cf0661b311f522f8", size = 2979760 }, -] - -[[package]] -name = "html5lib" -version = "1.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "six" }, - { name = "webencodings" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ac/b6/b55c3f49042f1df3dcd422b7f224f939892ee94f22abcf503a9b7339eaf2/html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f", size = 272215 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6c/dd/a834df6482147d48e225a49515aabc28974ad5a4ca3215c18a882565b028/html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d", size = 112173 }, -] - [[package]] name = "ibm-cloud-sdk-core" version = "3.22.0" @@ -707,15 +635,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b", size = 8769 }, ] -[[package]] -name = "inflection" -version = "0.5.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e1/7e/691d061b7329bc8d54edbf0ec22fbfb2afe61facb681f9aaa9bff7a27d04/inflection-0.5.1.tar.gz", hash = "sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417", size = 15091 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/59/91/aa6bde563e0085a02a435aa99b49ef75b0a4b062635e606dab23ce18d720/inflection-0.5.1-py2.py3-none-any.whl", hash = "sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2", size = 9454 }, -] - [[package]] name = "iniconfig" version = "2.0.0" @@ -771,6 +690,22 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1d/f3/1332ba2f682b07b304ad34cad2f003adcfeb349486103f4b632335074a7c/ipython-8.30.0-py3-none-any.whl", hash = "sha256:85ec56a7e20f6c38fce7727dcca699ae4ffc85985aa7b23635a8008f918ae321", size = 820765 }, ] +[[package]] +name = "ipywidgets" +version = "8.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "comm" }, + { name = "ipython" }, + { name = "jupyterlab-widgets" }, + { name = "traitlets" }, + { name = "widgetsnbextension" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c7/4c/dab2a281b07596a5fc220d49827fe6c794c66f1493d7a74f1df0640f2cc5/ipywidgets-8.1.5.tar.gz", hash = "sha256:870e43b1a35656a80c18c9503bbf2d16802db1cb487eec6fab27d683381dde17", size = 116723 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/2d/9c0b76f2f9cc0ebede1b9371b6f317243028ed60b90705863d493bae622e/ipywidgets-8.1.5-py3-none-any.whl", hash = "sha256:3290f526f87ae6e77655555baba4f36681c555b8bdbbff430b70e52c34c86245", size = 139767 }, +] + [[package]] name = "jedi" version = "0.19.2" @@ -861,6 +796,23 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c9/fb/108ecd1fe961941959ad0ee4e12ee7b8b1477247f30b1fdfd83ceaf017f0/jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409", size = 28965 }, ] +[[package]] +name = "jupyter-sphinx" +version = "0.5.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ipykernel" }, + { name = "ipython" }, + { name = "ipywidgets" }, + { name = "nbconvert" }, + { name = "nbformat" }, + { name = "sphinx" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1a/b5/40f540cc9e54ee829f79daac43456a8d5ab4b70c8d26f0b9eca0dfcb4ad5/jupyter_sphinx-0.5.3.tar.gz", hash = "sha256:2e23699a3a1cf5db31b10981da5aa32606ee730f6b73a844d1e76d800756af56", size = 17532 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6f/1c/45251d4b9624e42b9e4f369dae2a64f5ea19b9387ba492ceb7be65343dda/jupyter_sphinx-0.5.3-py3-none-any.whl", hash = "sha256:a67b3208d4da5b3508dbb8260d3b359ae476c36c6c642747b78a2520e5be0b05", size = 21918 }, +] + [[package]] name = "jupyterlab-pygments" version = "0.3.0" @@ -870,6 +822,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780", size = 15884 }, ] +[[package]] +name = "jupyterlab-widgets" +version = "3.0.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/59/73/fa26bbb747a9ea4fca6b01453aa22990d52ab62dd61384f1ac0dc9d4e7ba/jupyterlab_widgets-3.0.13.tar.gz", hash = "sha256:a2966d385328c1942b683a8cd96b89b8dd82c8b8f81dda902bb2bc06d46f5bed", size = 203556 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/93/858e87edc634d628e5d752ba944c2833133a28fa87bb093e6832ced36a3e/jupyterlab_widgets-3.0.13-py3-none-any.whl", hash = "sha256:e3cda2c233ce144192f1e29914ad522b2f4c40e77214b0cc97377ca3d323db54", size = 214392 }, +] + [[package]] name = "kiwisolver" version = "1.4.7" @@ -966,88 +927,6 @@ 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 = "lxml" -version = "5.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e7/6b/20c3a4b24751377aaa6307eb230b66701024012c29dd374999cc92983269/lxml-5.3.0.tar.gz", hash = "sha256:4e109ca30d1edec1ac60cdbe341905dc3b8f55b16855e03a54aaf59e51ec8c6f", size = 3679318 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a1/ce/2789e39eddf2b13fac29878bfa465f0910eb6b0096e29090e5176bc8cf43/lxml-5.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd36439be765e2dde7660212b5275641edbc813e7b24668831a5c8ac91180656", size = 8124570 }, - { url = "https://files.pythonhosted.org/packages/24/a8/f4010166a25d41715527129af2675981a50d3bbf7df09c5d9ab8ca24fbf9/lxml-5.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ae5fe5c4b525aa82b8076c1a59d642c17b6e8739ecf852522c6321852178119d", size = 4413042 }, - { url = "https://files.pythonhosted.org/packages/41/a4/7e45756cecdd7577ddf67a68b69c1db0f5ddbf0c9f65021ee769165ffc5a/lxml-5.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:501d0d7e26b4d261fca8132854d845e4988097611ba2531408ec91cf3fd9d20a", size = 5139213 }, - { url = "https://files.pythonhosted.org/packages/02/e2/ecf845b12323c92748077e1818b64e8b4dba509a4cb12920b3762ebe7552/lxml-5.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb66442c2546446944437df74379e9cf9e9db353e61301d1a0e26482f43f0dd8", size = 4838814 }, - { url = "https://files.pythonhosted.org/packages/12/91/619f9fb72cf75e9ceb8700706f7276f23995f6ad757e6d400fbe35ca4990/lxml-5.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e41506fec7a7f9405b14aa2d5c8abbb4dbbd09d88f9496958b6d00cb4d45330", size = 5425084 }, - { url = "https://files.pythonhosted.org/packages/25/3b/162a85a8f0fd2a3032ec3f936636911c6e9523a8e263fffcfd581ce98b54/lxml-5.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f7d4a670107d75dfe5ad080bed6c341d18c4442f9378c9f58e5851e86eb79965", size = 4875993 }, - { url = "https://files.pythonhosted.org/packages/43/af/dd3f58cc7d946da6ae42909629a2b1d5dd2d1b583334d4af9396697d6863/lxml-5.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41ce1f1e2c7755abfc7e759dc34d7d05fd221723ff822947132dc934d122fe22", size = 5012462 }, - { url = "https://files.pythonhosted.org/packages/69/c1/5ea46b2d4c98f5bf5c83fffab8a0ad293c9bc74df9ecfbafef10f77f7201/lxml-5.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:44264ecae91b30e5633013fb66f6ddd05c006d3e0e884f75ce0b4755b3e3847b", size = 4815288 }, - { url = "https://files.pythonhosted.org/packages/1d/51/a0acca077ad35da458f4d3f729ef98effd2b90f003440d35fc36323f8ae6/lxml-5.3.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:3c174dc350d3ec52deb77f2faf05c439331d6ed5e702fc247ccb4e6b62d884b7", size = 5472435 }, - { url = "https://files.pythonhosted.org/packages/4d/6b/0989c9368986961a6b0f55b46c80404c4b758417acdb6d87bfc3bd5f4967/lxml-5.3.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:2dfab5fa6a28a0b60a20638dc48e6343c02ea9933e3279ccb132f555a62323d8", size = 4976354 }, - { url = "https://files.pythonhosted.org/packages/05/9e/87492d03ff604fbf656ed2bf3e2e8d28f5d58ea1f00ff27ac27b06509079/lxml-5.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b1c8c20847b9f34e98080da785bb2336ea982e7f913eed5809e5a3c872900f32", size = 5029973 }, - { url = "https://files.pythonhosted.org/packages/f9/cc/9ae1baf5472af88e19e2c454b3710c1be9ecafb20eb474eeabcd88a055d2/lxml-5.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2c86bf781b12ba417f64f3422cfc302523ac9cd1d8ae8c0f92a1c66e56ef2e86", size = 4888837 }, - { url = "https://files.pythonhosted.org/packages/d2/10/5594ffaec8c120d75b17e3ad23439b740a51549a9b5fd7484b2179adfe8f/lxml-5.3.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c162b216070f280fa7da844531169be0baf9ccb17263cf5a8bf876fcd3117fa5", size = 5530555 }, - { url = "https://files.pythonhosted.org/packages/ea/9b/de17f05377c8833343b629905571fb06cff2028f15a6f58ae2267662e341/lxml-5.3.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:36aef61a1678cb778097b4a6eeae96a69875d51d1e8f4d4b491ab3cfb54b5a03", size = 5405314 }, - { url = "https://files.pythonhosted.org/packages/8a/b4/227be0f1f3cca8255925985164c3838b8b36e441ff0cc10c1d3c6bdba031/lxml-5.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f65e5120863c2b266dbcc927b306c5b78e502c71edf3295dfcb9501ec96e5fc7", size = 5079303 }, - { url = "https://files.pythonhosted.org/packages/5c/ee/19abcebb7fc40319bb71cd6adefa1ad94d09b5660228715854d6cc420713/lxml-5.3.0-cp310-cp310-win32.whl", hash = "sha256:ef0c1fe22171dd7c7c27147f2e9c3e86f8bdf473fed75f16b0c2e84a5030ce80", size = 3475126 }, - { url = "https://files.pythonhosted.org/packages/a1/35/183d32551447e280032b2331738cd850da435a42f850b71ebeaab42c1313/lxml-5.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:052d99051e77a4f3e8482c65014cf6372e61b0a6f4fe9edb98503bb5364cfee3", size = 3805065 }, - { url = "https://files.pythonhosted.org/packages/5c/a8/449faa2a3cbe6a99f8d38dcd51a3ee8844c17862841a6f769ea7c2a9cd0f/lxml-5.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74bcb423462233bc5d6066e4e98b0264e7c1bed7541fff2f4e34fe6b21563c8b", size = 8141056 }, - { url = "https://files.pythonhosted.org/packages/ac/8a/ae6325e994e2052de92f894363b038351c50ee38749d30cc6b6d96aaf90f/lxml-5.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a3d819eb6f9b8677f57f9664265d0a10dd6551d227afb4af2b9cd7bdc2ccbf18", size = 4425238 }, - { url = "https://files.pythonhosted.org/packages/f8/fb/128dddb7f9086236bce0eeae2bfb316d138b49b159f50bc681d56c1bdd19/lxml-5.3.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b8f5db71b28b8c404956ddf79575ea77aa8b1538e8b2ef9ec877945b3f46442", size = 5095197 }, - { url = "https://files.pythonhosted.org/packages/b4/f9/a181a8ef106e41e3086629c8bdb2d21a942f14c84a0e77452c22d6b22091/lxml-5.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3406b63232fc7e9b8783ab0b765d7c59e7c59ff96759d8ef9632fca27c7ee4", size = 4809809 }, - { url = "https://files.pythonhosted.org/packages/25/2f/b20565e808f7f6868aacea48ddcdd7e9e9fb4c799287f21f1a6c7c2e8b71/lxml-5.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ecdd78ab768f844c7a1d4a03595038c166b609f6395e25af9b0f3f26ae1230f", size = 5407593 }, - { url = "https://files.pythonhosted.org/packages/23/0e/caac672ec246d3189a16c4d364ed4f7d6bf856c080215382c06764058c08/lxml-5.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168f2dfcfdedf611eb285efac1516c8454c8c99caf271dccda8943576b67552e", size = 4866657 }, - { url = "https://files.pythonhosted.org/packages/67/a4/1f5fbd3f58d4069000522196b0b776a014f3feec1796da03e495cf23532d/lxml-5.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa617107a410245b8660028a7483b68e7914304a6d4882b5ff3d2d3eb5948d8c", size = 4967017 }, - { url = "https://files.pythonhosted.org/packages/ee/73/623ecea6ca3c530dd0a4ed0d00d9702e0e85cd5624e2d5b93b005fe00abd/lxml-5.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:69959bd3167b993e6e710b99051265654133a98f20cec1d9b493b931942e9c16", size = 4810730 }, - { url = "https://files.pythonhosted.org/packages/1d/ce/fb84fb8e3c298f3a245ae3ea6221c2426f1bbaa82d10a88787412a498145/lxml-5.3.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:bd96517ef76c8654446fc3db9242d019a1bb5fe8b751ba414765d59f99210b79", size = 5455154 }, - { url = "https://files.pythonhosted.org/packages/b1/72/4d1ad363748a72c7c0411c28be2b0dc7150d91e823eadad3b91a4514cbea/lxml-5.3.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:ab6dd83b970dc97c2d10bc71aa925b84788c7c05de30241b9e96f9b6d9ea3080", size = 4969416 }, - { url = "https://files.pythonhosted.org/packages/42/07/b29571a58a3a80681722ea8ed0ba569211d9bb8531ad49b5cacf6d409185/lxml-5.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:eec1bb8cdbba2925bedc887bc0609a80e599c75b12d87ae42ac23fd199445654", size = 5013672 }, - { url = "https://files.pythonhosted.org/packages/b9/93/bde740d5a58cf04cbd38e3dd93ad1e36c2f95553bbf7d57807bc6815d926/lxml-5.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a7095eeec6f89111d03dabfe5883a1fd54da319c94e0fb104ee8f23616b572d", size = 4878644 }, - { url = "https://files.pythonhosted.org/packages/56/b5/645c8c02721d49927c93181de4017164ec0e141413577687c3df8ff0800f/lxml-5.3.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6f651ebd0b21ec65dfca93aa629610a0dbc13dbc13554f19b0113da2e61a4763", size = 5511531 }, - { url = "https://files.pythonhosted.org/packages/85/3f/6a99a12d9438316f4fc86ef88c5d4c8fb674247b17f3173ecadd8346b671/lxml-5.3.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f422a209d2455c56849442ae42f25dbaaba1c6c3f501d58761c619c7836642ec", size = 5402065 }, - { url = "https://files.pythonhosted.org/packages/80/8a/df47bff6ad5ac57335bf552babfb2408f9eb680c074ec1ba412a1a6af2c5/lxml-5.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:62f7fdb0d1ed2065451f086519865b4c90aa19aed51081979ecd05a21eb4d1be", size = 5069775 }, - { url = "https://files.pythonhosted.org/packages/08/ae/e7ad0f0fbe4b6368c5ee1e3ef0c3365098d806d42379c46c1ba2802a52f7/lxml-5.3.0-cp311-cp311-win32.whl", hash = "sha256:c6379f35350b655fd817cd0d6cbeef7f265f3ae5fedb1caae2eb442bbeae9ab9", size = 3474226 }, - { url = "https://files.pythonhosted.org/packages/c3/b5/91c2249bfac02ee514ab135e9304b89d55967be7e53e94a879b74eec7a5c/lxml-5.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c52100e2c2dbb0649b90467935c4b0de5528833c76a35ea1a2691ec9f1ee7a1", size = 3814971 }, - { url = "https://files.pythonhosted.org/packages/eb/6d/d1f1c5e40c64bf62afd7a3f9b34ce18a586a1cccbf71e783cd0a6d8e8971/lxml-5.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e99f5507401436fdcc85036a2e7dc2e28d962550afe1cbfc07c40e454256a859", size = 8171753 }, - { url = "https://files.pythonhosted.org/packages/bd/83/26b1864921869784355459f374896dcf8b44d4af3b15d7697e9156cb2de9/lxml-5.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:384aacddf2e5813a36495233b64cb96b1949da72bef933918ba5c84e06af8f0e", size = 4441955 }, - { url = "https://files.pythonhosted.org/packages/e0/d2/e9bff9fb359226c25cda3538f664f54f2804f4b37b0d7c944639e1a51f69/lxml-5.3.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:874a216bf6afaf97c263b56371434e47e2c652d215788396f60477540298218f", size = 5050778 }, - { url = "https://files.pythonhosted.org/packages/88/69/6972bfafa8cd3ddc8562b126dd607011e218e17be313a8b1b9cc5a0ee876/lxml-5.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65ab5685d56914b9a2a34d67dd5488b83213d680b0c5d10b47f81da5a16b0b0e", size = 4748628 }, - { url = "https://files.pythonhosted.org/packages/5d/ea/a6523c7c7f6dc755a6eed3d2f6d6646617cad4d3d6d8ce4ed71bfd2362c8/lxml-5.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aac0bbd3e8dd2d9c45ceb82249e8bdd3ac99131a32b4d35c8af3cc9db1657179", size = 5322215 }, - { url = "https://files.pythonhosted.org/packages/99/37/396fbd24a70f62b31d988e4500f2068c7f3fd399d2fd45257d13eab51a6f/lxml-5.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b369d3db3c22ed14c75ccd5af429086f166a19627e84a8fdade3f8f31426e52a", size = 4813963 }, - { url = "https://files.pythonhosted.org/packages/09/91/e6136f17459a11ce1757df864b213efbeab7adcb2efa63efb1b846ab6723/lxml-5.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c24037349665434f375645fa9d1f5304800cec574d0310f618490c871fd902b3", size = 4923353 }, - { url = "https://files.pythonhosted.org/packages/1d/7c/2eeecf87c9a1fca4f84f991067c693e67340f2b7127fc3eca8fa29d75ee3/lxml-5.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:62d172f358f33a26d6b41b28c170c63886742f5b6772a42b59b4f0fa10526cb1", size = 4740541 }, - { url = "https://files.pythonhosted.org/packages/3b/ed/4c38ba58defca84f5f0d0ac2480fdcd99fc7ae4b28fc417c93640a6949ae/lxml-5.3.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:c1f794c02903c2824fccce5b20c339a1a14b114e83b306ff11b597c5f71a1c8d", size = 5346504 }, - { url = "https://files.pythonhosted.org/packages/a5/22/bbd3995437e5745cb4c2b5d89088d70ab19d4feabf8a27a24cecb9745464/lxml-5.3.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:5d6a6972b93c426ace71e0be9a6f4b2cfae9b1baed2eed2006076a746692288c", size = 4898077 }, - { url = "https://files.pythonhosted.org/packages/0a/6e/94537acfb5b8f18235d13186d247bca478fea5e87d224644e0fe907df976/lxml-5.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:3879cc6ce938ff4eb4900d901ed63555c778731a96365e53fadb36437a131a99", size = 4946543 }, - { url = "https://files.pythonhosted.org/packages/8d/e8/4b15df533fe8e8d53363b23a41df9be907330e1fa28c7ca36893fad338ee/lxml-5.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:74068c601baff6ff021c70f0935b0c7bc528baa8ea210c202e03757c68c5a4ff", size = 4816841 }, - { url = "https://files.pythonhosted.org/packages/1a/e7/03f390ea37d1acda50bc538feb5b2bda6745b25731e4e76ab48fae7106bf/lxml-5.3.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ecd4ad8453ac17bc7ba3868371bffb46f628161ad0eefbd0a855d2c8c32dd81a", size = 5417341 }, - { url = "https://files.pythonhosted.org/packages/ea/99/d1133ab4c250da85a883c3b60249d3d3e7c64f24faff494cf0fd23f91e80/lxml-5.3.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7e2f58095acc211eb9d8b5771bf04df9ff37d6b87618d1cbf85f92399c98dae8", size = 5327539 }, - { url = "https://files.pythonhosted.org/packages/7d/ed/e6276c8d9668028213df01f598f385b05b55a4e1b4662ee12ef05dab35aa/lxml-5.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e63601ad5cd8f860aa99d109889b5ac34de571c7ee902d6812d5d9ddcc77fa7d", size = 5012542 }, - { url = "https://files.pythonhosted.org/packages/36/88/684d4e800f5aa28df2a991a6a622783fb73cf0e46235cfa690f9776f032e/lxml-5.3.0-cp312-cp312-win32.whl", hash = "sha256:17e8d968d04a37c50ad9c456a286b525d78c4a1c15dd53aa46c1d8e06bf6fa30", size = 3486454 }, - { url = "https://files.pythonhosted.org/packages/fc/82/ace5a5676051e60355bd8fb945df7b1ba4f4fb8447f2010fb816bfd57724/lxml-5.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:c1a69e58a6bb2de65902051d57fde951febad631a20a64572677a1052690482f", size = 3816857 }, - { url = "https://files.pythonhosted.org/packages/94/6a/42141e4d373903bfea6f8e94b2f554d05506dfda522ada5343c651410dc8/lxml-5.3.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c72e9563347c7395910de6a3100a4840a75a6f60e05af5e58566868d5eb2d6a", size = 8156284 }, - { url = "https://files.pythonhosted.org/packages/91/5e/fa097f0f7d8b3d113fb7312c6308af702f2667f22644441715be961f2c7e/lxml-5.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e92ce66cd919d18d14b3856906a61d3f6b6a8500e0794142338da644260595cd", size = 4432407 }, - { url = "https://files.pythonhosted.org/packages/2d/a1/b901988aa6d4ff937f2e5cfc114e4ec561901ff00660c3e56713642728da/lxml-5.3.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d04f064bebdfef9240478f7a779e8c5dc32b8b7b0b2fc6a62e39b928d428e51", size = 5048331 }, - { url = "https://files.pythonhosted.org/packages/30/0f/b2a54f48e52de578b71bbe2a2f8160672a8a5e103df3a78da53907e8c7ed/lxml-5.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c2fb570d7823c2bbaf8b419ba6e5662137f8166e364a8b2b91051a1fb40ab8b", size = 4744835 }, - { url = "https://files.pythonhosted.org/packages/82/9d/b000c15538b60934589e83826ecbc437a1586488d7c13f8ee5ff1f79a9b8/lxml-5.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c120f43553ec759f8de1fee2f4794452b0946773299d44c36bfe18e83caf002", size = 5316649 }, - { url = "https://files.pythonhosted.org/packages/e3/ee/ffbb9eaff5e541922611d2c56b175c45893d1c0b8b11e5a497708a6a3b3b/lxml-5.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:562e7494778a69086f0312ec9689f6b6ac1c6b65670ed7d0267e49f57ffa08c4", size = 4812046 }, - { url = "https://files.pythonhosted.org/packages/15/ff/7ff89d567485c7b943cdac316087f16b2399a8b997007ed352a1248397e5/lxml-5.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:423b121f7e6fa514ba0c7918e56955a1d4470ed35faa03e3d9f0e3baa4c7e492", size = 4918597 }, - { url = "https://files.pythonhosted.org/packages/c6/a3/535b6ed8c048412ff51268bdf4bf1cf052a37aa7e31d2e6518038a883b29/lxml-5.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c00f323cc00576df6165cc9d21a4c21285fa6b9989c5c39830c3903dc4303ef3", size = 4738071 }, - { url = "https://files.pythonhosted.org/packages/7a/8f/cbbfa59cb4d4fd677fe183725a76d8c956495d7a3c7f111ab8f5e13d2e83/lxml-5.3.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:1fdc9fae8dd4c763e8a31e7630afef517eab9f5d5d31a278df087f307bf601f4", size = 5342213 }, - { url = "https://files.pythonhosted.org/packages/5c/fb/db4c10dd9958d4b52e34d1d1f7c1f434422aeaf6ae2bbaaff2264351d944/lxml-5.3.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:658f2aa69d31e09699705949b5fc4719cbecbd4a97f9656a232e7d6c7be1a367", size = 4893749 }, - { url = "https://files.pythonhosted.org/packages/f2/38/bb4581c143957c47740de18a3281a0cab7722390a77cc6e610e8ebf2d736/lxml-5.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1473427aff3d66a3fa2199004c3e601e6c4500ab86696edffdbc84954c72d832", size = 4945901 }, - { url = "https://files.pythonhosted.org/packages/fc/d5/18b7de4960c731e98037bd48fa9f8e6e8f2558e6fbca4303d9b14d21ef3b/lxml-5.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a87de7dd873bf9a792bf1e58b1c3887b9264036629a5bf2d2e6579fe8e73edff", size = 4815447 }, - { url = "https://files.pythonhosted.org/packages/97/a8/cd51ceaad6eb849246559a8ef60ae55065a3df550fc5fcd27014361c1bab/lxml-5.3.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0d7b36afa46c97875303a94e8f3ad932bf78bace9e18e603f2085b652422edcd", size = 5411186 }, - { url = "https://files.pythonhosted.org/packages/89/c3/1e3dabab519481ed7b1fdcba21dcfb8832f57000733ef0e71cf6d09a5e03/lxml-5.3.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:cf120cce539453ae086eacc0130a324e7026113510efa83ab42ef3fcfccac7fb", size = 5324481 }, - { url = "https://files.pythonhosted.org/packages/b6/17/71e9984cf0570cd202ac0a1c9ed5c1b8889b0fc8dc736f5ef0ffb181c284/lxml-5.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:df5c7333167b9674aa8ae1d4008fa4bc17a313cc490b2cca27838bbdcc6bb15b", size = 5011053 }, - { url = "https://files.pythonhosted.org/packages/69/68/9f7e6d3312a91e30829368c2b3217e750adef12a6f8eb10498249f4e8d72/lxml-5.3.0-cp313-cp313-win32.whl", hash = "sha256:c802e1c2ed9f0c06a65bc4ed0189d000ada8049312cfeab6ca635e39c9608957", size = 3485634 }, - { url = "https://files.pythonhosted.org/packages/7d/db/214290d58ad68c587bd5d6af3d34e56830438733d0d0856c0275fde43652/lxml-5.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:406246b96d552e0503e17a1006fd27edac678b3fcc9f1be71a2f94b4ff61528d", size = 3814417 }, - { url = "https://files.pythonhosted.org/packages/99/f7/b73a431c8500565aa500e99e60b448d305eaf7c0b4c893c7c5a8a69cc595/lxml-5.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7b1cd427cb0d5f7393c31b7496419da594fe600e6fdc4b105a54f82405e6626c", size = 3925431 }, - { url = "https://files.pythonhosted.org/packages/db/48/4a206623c0d093d0e3b15f415ffb4345b0bdf661a3d0b15a112948c033c7/lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51806cfe0279e06ed8500ce19479d757db42a30fd509940b1701be9c86a5ff9a", size = 4216683 }, - { url = "https://files.pythonhosted.org/packages/54/47/577820c45dd954523ae8453b632d91e76da94ca6d9ee40d8c98dd86f916b/lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee70d08fd60c9565ba8190f41a46a54096afa0eeb8f76bd66f2c25d3b1b83005", size = 4326732 }, - { url = "https://files.pythonhosted.org/packages/68/de/96cb6d3269bc994b4f5ede8ca7bf0840f5de0a278bc6e50cb317ff71cafa/lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:8dc2c0395bea8254d8daebc76dcf8eb3a95ec2a46fa6fae5eaccee366bfe02ce", size = 4218377 }, - { url = "https://files.pythonhosted.org/packages/a5/43/19b1ef6cbffa4244a217f95cc5f41a6cb4720fed33510a49670b03c5f1a0/lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6ba0d3dcac281aad8a0e5b14c7ed6f9fa89c8612b47939fc94f80b16e2e9bc83", size = 4351237 }, - { url = "https://files.pythonhosted.org/packages/ba/b2/6a22fb5c0885da3b00e116aee81f0b829ec9ac8f736cd414b4a09413fc7d/lxml-5.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:6e91cf736959057f7aac7adfc83481e03615a8e8dd5758aa1d95ea69e8931dba", size = 3487557 }, -] - [[package]] name = "markupsafe" version = "3.0.2" @@ -1176,15 +1055,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f0/74/c95adcdf032956d9ef6c89a9b8a5152bf73915f8c633f3e3d88d06bd699c/mistune-3.0.2-py3-none-any.whl", hash = "sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205", size = 47958 }, ] -[[package]] -name = "more-itertools" -version = "10.5.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/51/78/65922308c4248e0eb08ebcbe67c95d48615cc6f27854b6f2e57143e9178f/more-itertools-10.5.0.tar.gz", hash = "sha256:5482bfef7849c25dc3c6dd53a6173ae4795da2a41a80faea6700d9f5846c5da6", size = 121020 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl", hash = "sha256:037b0d3203ce90cca8ab1defbbdac29d5f993fc20131f3664dc8d6acfa872aef", size = 60952 }, -] - [[package]] name = "mpmath" version = "1.3.0" @@ -1196,7 +1066,7 @@ wheels = [ [[package]] name = "mqt-bench" -version = "1.1.10.dev0+g9ac1ecf.d20241202" +version = "1.1.10.dev61+gb924ed8.d20241202" source = { editable = "." } dependencies = [ { name = "joblib" }, @@ -1205,9 +1075,8 @@ dependencies = [ { name = "pytket" }, { name = "pytket-qiskit" }, { name = "qiskit" }, - { name = "qiskit-finance" }, - { name = "qiskit-nature", extra = ["pyscf"] }, - { name = "qiskit-optimization" }, + { name = "qiskit-qasm3-import" }, + { name = "scikit-learn" }, ] [package.optional-dependencies] @@ -1220,6 +1089,7 @@ dev = [ { name = "furo" }, { name = "ipykernel" }, { name = "ipython" }, + { name = "jupyter-sphinx" }, { name = "nbsphinx" }, { name = "pytest" }, { name = "pytest-console-scripts" }, @@ -1238,6 +1108,7 @@ docs = [ { name = "furo" }, { name = "ipykernel" }, { name = "ipython" }, + { name = "jupyter-sphinx" }, { name = "nbsphinx" }, { name = "qiskit", extra = ["visualization"] }, { name = "setuptools-scm" }, @@ -1260,6 +1131,7 @@ requires-dist = [ { name = "ipykernel", marker = "extra == 'docs'" }, { name = "ipython", marker = "extra == 'docs'" }, { name = "joblib", specifier = ">=1.3.0" }, + { name = "jupyter-sphinx", marker = "extra == 'docs'" }, { name = "mqt-bench", extras = ["coverage", "docs"], marker = "extra == 'dev'" }, { name = "mqt-bench", extras = ["test"], marker = "extra == 'coverage'" }, { name = "nbsphinx", marker = "extra == 'docs'" }, @@ -1274,9 +1146,8 @@ requires-dist = [ { name = "pytket-qiskit", specifier = ">=0.53.0" }, { name = "qiskit", specifier = "!=1.2.0" }, { name = "qiskit", extras = ["visualization"], marker = "extra == 'docs'" }, - { name = "qiskit-finance", specifier = ">=0.4.1" }, - { name = "qiskit-nature", extras = ["pyscf"], specifier = ">=0.7" }, - { name = "qiskit-optimization", specifier = ">=0.6" }, + { name = "qiskit-qasm3-import", specifier = ">=0.5.0" }, + { name = "scikit-learn", specifier = ">=1.5.2" }, { name = "setuptools-scm", marker = "extra == 'docs'", specifier = ">=8.1" }, { name = "sphinx-autoapi", marker = "extra == 'docs'", specifier = ">=3" }, { name = "sphinx-autodoc-typehints", marker = "extra == 'docs'" }, @@ -1287,32 +1158,6 @@ requires-dist = [ { name = "sphinxext-opengraph", marker = "extra == 'docs'", specifier = ">=0.9" }, ] -[[package]] -name = "multitasking" -version = "0.0.11" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6f/75/345e196762fc51fb5b4e9504631972b1271a0cb2ba1ce2afe5b185c95b64/multitasking-0.0.11.tar.gz", hash = "sha256:4d6bc3cc65f9b2dca72fb5a787850a88dae8f620c2b36ae9b55248e51bcd6026", size = 8150 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3e/8a/bb3160e76e844db9e69a413f055818969c8acade64e1a9ac5ce9dfdcf6c1/multitasking-0.0.11-py3-none-any.whl", hash = "sha256:1e5b37a5f8fc1e6cfaafd1a82b6b1cc6d2ed20037d3b89c25a84f499bd7b3dd4", size = 8533 }, -] - -[[package]] -name = "nasdaq-data-link" -version = "1.0.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "inflection" }, - { name = "more-itertools" }, - { name = "numpy" }, - { name = "pandas" }, - { name = "python-dateutil" }, - { name = "requests" }, - { name = "six" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/2a/f3c908206b530b93beaa90f0c645868a864bf7516fc0f0f5ed38f8f59fa1/Nasdaq_Data_Link-1.0.4-py2.py3-none-any.whl", hash = "sha256:214a620551da1c7521476839fb96f932234d4d78e7ba44310722709ca37b0691", size = 28127 }, -] - [[package]] name = "nbclient" version = "0.10.1" @@ -1466,6 +1311,20 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/03/c2/d1fee6ba999aa7cd41ca6856937f2baaf604c3eec1565eae63451ec31e5e/numpy-2.1.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e14e26956e6f1696070788252dcdff11b4aca4c3e8bd166e0df1bb8f315a67cb", size = 12771397 }, ] +[[package]] +name = "openqasm3" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +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/40/5a/e33f705f0ea2a83fd6c797eddf5b5a5cd2256a4f31dcb9624f055f6e14bf/openqasm3-1.0.0-py3-none-any.whl", hash = "sha256:d4371737b4a49b0d56248ed3d30766a94000bccfb43303ec9c7ead351a1b6cc3", size = 539775 }, +] + +[package.optional-dependencies] +parser = [ + { name = "antlr4-python3-runtime" }, +] + [[package]] name = "packaging" version = "24.2" @@ -1550,12 +1409,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1d/44/6a65ecd630393d47ad3e7d5354768cb7f9a10b3a0eb2cd8c6f52b28211ee/pbr-6.1.0-py2.py3-none-any.whl", hash = "sha256:a776ae228892d8013649c0aeccbb3d5f99ee15e005a4cbb7e61d55a067b28a2a", size = 108529 }, ] -[[package]] -name = "peewee" -version = "3.17.8" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b4/dc/832bcf4ea5ee2ebc4ea42ef36e44a451de5d80f8b9858bf2066e30738c67/peewee-3.17.8.tar.gz", hash = "sha256:ce1d05db3438830b989a1b9d0d0aa4e7f6134d5f6fd57686eeaa26a3e6485a8c", size = 948249 } - [[package]] name = "pexpect" version = "4.9.0" @@ -1868,24 +1721,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/be/ec/2eb3cd785efd67806c46c13a17339708ddc346cbb684eade7a6e6f79536a/pyparsing-3.2.0-py3-none-any.whl", hash = "sha256:93d9577b88da0bbea8cc8334ee8b918ed014968fd2ec383e868fb8afb1ccef84", size = 106921 }, ] -[[package]] -name = "pyscf" -version = "2.7.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "h5py" }, - { name = "numpy" }, - { name = "scipy" }, - { name = "setuptools" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/84/44/b9fc70bd3ca53fd45ca3e397d0ed1b7911b235b75af1b33940909162df9d/pyscf-2.7.0.tar.gz", hash = "sha256:ca8efc2f28d72c3130f26a967e7fa8d0bbc4a6b47d16a7c4c732ec85a31b7eec", size = 8865796 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/23/5dc3ca0fa7ce768ec5c28be496f7c4ea2c70ffca1c9629ac4545a0b2ac37/pyscf-2.7.0-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:ec4b4356a2e1d801b92757235925efdde1ff6ecf99f0ec1d6d9c1307b5468d6f", size = 37928749 }, - { url = "https://files.pythonhosted.org/packages/43/38/3bf96ff39535a3d8f853a8345fbae9747cf9b4fe9f8b8ce36dd42f83645d/pyscf-2.7.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e76aee018da70ccd393a8a5f851a1738098c7289f4394ea840b441aaa692b470", size = 32896099 }, - { url = "https://files.pythonhosted.org/packages/d3/4c/0ec69b9ae4e0b74fc083a5cd9cc4f87f78403224d763ce32274230c1c177/pyscf-2.7.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:486638182902963f67224de5e35dae28223b7e1df852c6613ce581259489364f", size = 41951153 }, - { url = "https://files.pythonhosted.org/packages/a0/86/36a975aca3c3ce4db2e0fadac152528b16e01115b76521280822ba28c69b/pyscf-2.7.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b83a6685dceac36173a75fcd3366cf528527c5c9236bfa86845b9ebcc490d5a9", size = 48650157 }, -] - [[package]] name = "pyspnego" version = "0.11.2" @@ -2226,44 +2061,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a7/eb/284cedc9cdeecd139939db70cf875806ca5df977d5af21e6fa09f1d82a8e/qiskit_aer-0.15.1-cp312-cp312-win_amd64.whl", hash = "sha256:af6501808b584b764e959af7a1edb2ef890c9a78f1ce418921dbdf6fd09ce0fc", size = 9519513 }, ] -[[package]] -name = "qiskit-algorithms" -version = "0.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, - { name = "qiskit" }, - { name = "scipy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b6/b0/277f075f4758c474f026f2ffc9b6246b2cbe5658fbc95497764834685e15/qiskit_algorithms-0.3.1.tar.gz", hash = "sha256:cba9c573d47c0f9508745a5a2794298084ec4f8833781b426fa9b2cea0fca794", size = 243033 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f9/20/0db766da89de14111c4a1217dbb67d19036eb3e4ffba0fdc25f00e4d1615/qiskit_algorithms-0.3.1-py3-none-any.whl", hash = "sha256:d6c31d88a1ed65a9c6382c233ef10ecb9562e726f7b1b7823a0d178d63d29a0a", size = 310548 }, -] - -[[package]] -name = "qiskit-finance" -version = "0.4.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "fastdtw" }, - { name = "nasdaq-data-link" }, - { name = "numpy" }, - { name = "pandas" }, - { name = "psutil" }, - { name = "qiskit" }, - { name = "qiskit-algorithms" }, - { name = "qiskit-optimization" }, - { name = "scipy" }, - { name = "setuptools" }, - { name = "urllib3" }, - { name = "yfinance" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/06/59/d67fd31c54068606e22f28ccdfae8e9354039184b71ded4bd2e89a7c0207/qiskit-finance-0.4.1.tar.gz", hash = "sha256:dd9559775918f79f4c5f31577a73cf5f135d1911e6601ebcc1ade3901949908d", size = 40246 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/69/4f/d4a8f06b2d20b6054822f4ebf63be21ac2f39aee84266bdd2318950048d9/qiskit_finance-0.4.1-py3-none-any.whl", hash = "sha256:1aa46d1bfc1813144d504b1da3dbb7a45c14686b430be160952179d4f4dbdf60", size = 51155 }, -] - [[package]] name = "qiskit-ibm-runtime" version = "0.33.2" @@ -2285,46 +2082,16 @@ wheels = [ ] [[package]] -name = "qiskit-nature" -version = "0.7.2" +name = "qiskit-qasm3-import" +version = "0.5.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "h5py" }, - { name = "numpy" }, - { name = "psutil" }, + { name = "openqasm3", extra = ["parser"] }, { name = "qiskit" }, - { name = "qiskit-algorithms" }, - { name = "rustworkx" }, - { name = "scipy" }, - { name = "setuptools" }, - { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/89/36/d8dfb1b241a5c3ec5a8868bc4d7311af23dc741c81d0d8b93a6fb63c0366/qiskit-nature-0.7.2.tar.gz", hash = "sha256:621b9bb88c0fa4c705948af86e3ef7d36bb8e7aa11b95801264527de58fcd694", size = 2185596 } +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/66/16/2bf5c270457dbda2123604108f007f4b7087fa5a3913e60f5a4f75b76d92/qiskit_nature-0.7.2-py3-none-any.whl", hash = "sha256:9bc8900626b9a6f9c5dbe44589c53932408a661d61ad9003b8feadb30979cc05", size = 2156071 }, -] - -[package.optional-dependencies] -pyscf = [ - { name = "pyscf", marker = "sys_platform != 'win32'" }, -] - -[[package]] -name = "qiskit-optimization" -version = "0.6.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "docplex" }, - { name = "networkx" }, - { name = "numpy" }, - { name = "qiskit" }, - { name = "qiskit-algorithms" }, - { name = "scipy" }, - { name = "setuptools" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/80/63/30ae1aa61c407ccd7f2a1499884653cf6be87fd4a216013c226273796a8f/qiskit-optimization-0.6.1.tar.gz", hash = "sha256:0ad8c2bc83fe80657c788b5f282ce4055d0ec005c4876789e5069499ee3c00c0", size = 156898 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/67/7669e6ad0b41b1e4ab79b592a4f1de748cac946169f5409e7a9f4bafef10/qiskit_optimization-0.6.1-py3-none-any.whl", hash = "sha256:3f09f31289dfef66bbbb03b782a94d88a4ba5681c728b4b8e96884de5fc83879", size = 167560 }, + { 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]] @@ -2475,6 +2242,40 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9c/c6/50f5736f5dac1709c6c8b6ac3470f466fd793dd25c081923942caf13051f/rustworkx-0.15.1-cp38-abi3-win_amd64.whl", hash = "sha256:89077382633e918d2392772f53b9d6d30eee51eb536f8d38ee195c212b2f0427", size = 1840525 }, ] +[[package]] +name = "scikit-learn" +version = "1.5.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "joblib" }, + { name = "numpy" }, + { name = "scipy" }, + { name = "threadpoolctl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/37/59/44985a2bdc95c74e34fef3d10cb5d93ce13b0e2a7baefffe1b53853b502d/scikit_learn-1.5.2.tar.gz", hash = "sha256:b4237ed7b3fdd0a4882792e68ef2545d5baa50aca3bb45aa7df468138ad8f94d", size = 7001680 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/98/89/be41419b4bec629a4691183a5eb1796f91252a13a5ffa243fd958cad7e91/scikit_learn-1.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:299406827fb9a4f862626d0fe6c122f5f87f8910b86fe5daa4c32dcd742139b6", size = 12106070 }, + { url = "https://files.pythonhosted.org/packages/bf/e0/3b6d777d375f3b685f433c93384cdb724fb078e1dc8f8ff0950467e56c30/scikit_learn-1.5.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:2d4cad1119c77930b235579ad0dc25e65c917e756fe80cab96aa3b9428bd3fb0", size = 10971758 }, + { url = "https://files.pythonhosted.org/packages/7b/31/eb7dd56c371640753953277de11356c46a3149bfeebb3d7dcd90b993715a/scikit_learn-1.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c412ccc2ad9bf3755915e3908e677b367ebc8d010acbb3f182814524f2e5540", size = 12500080 }, + { url = "https://files.pythonhosted.org/packages/4c/1e/a7c7357e704459c7d56a18df4a0bf08669442d1f8878cc0864beccd6306a/scikit_learn-1.5.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a686885a4b3818d9e62904d91b57fa757fc2bed3e465c8b177be652f4dd37c8", size = 13347241 }, + { url = "https://files.pythonhosted.org/packages/48/76/154ebda6794faf0b0f3ccb1b5cd9a19f0a63cb9e1f3d2c61b6114002677b/scikit_learn-1.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:c15b1ca23d7c5f33cc2cb0a0d6aaacf893792271cddff0edbd6a40e8319bc113", size = 11000477 }, + { url = "https://files.pythonhosted.org/packages/ff/91/609961972f694cb9520c4c3d201e377a26583e1eb83bc5a334c893729214/scikit_learn-1.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:03b6158efa3faaf1feea3faa884c840ebd61b6484167c711548fce208ea09445", size = 12088580 }, + { url = "https://files.pythonhosted.org/packages/cd/7a/19fe32c810c5ceddafcfda16276d98df299c8649e24e84d4f00df4a91e01/scikit_learn-1.5.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:1ff45e26928d3b4eb767a8f14a9a6efbf1cbff7c05d1fb0f95f211a89fd4f5de", size = 10975994 }, + { url = "https://files.pythonhosted.org/packages/4c/75/62e49f8a62bf3c60b0e64d0fce540578ee4f0e752765beb2e1dc7c6d6098/scikit_learn-1.5.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f763897fe92d0e903aa4847b0aec0e68cadfff77e8a0687cabd946c89d17e675", size = 12465782 }, + { url = "https://files.pythonhosted.org/packages/49/21/3723de321531c9745e40f1badafd821e029d346155b6c79704e0b7197552/scikit_learn-1.5.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8b0ccd4a902836493e026c03256e8b206656f91fbcc4fde28c57a5b752561f1", size = 13322034 }, + { url = "https://files.pythonhosted.org/packages/17/1c/ccdd103cfcc9435a18819856fbbe0c20b8fa60bfc3343580de4be13f0668/scikit_learn-1.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:6c16d84a0d45e4894832b3c4d0bf73050939e21b99b01b6fd59cbb0cf39163b6", size = 11015224 }, + { url = "https://files.pythonhosted.org/packages/a4/db/b485c1ac54ff3bd9e7e6b39d3cc6609c4c76a65f52ab0a7b22b6c3ab0e9d/scikit_learn-1.5.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f932a02c3f4956dfb981391ab24bda1dbd90fe3d628e4b42caef3e041c67707a", size = 12110344 }, + { url = "https://files.pythonhosted.org/packages/54/1a/7deb52fa23aebb855431ad659b3c6a2e1709ece582cb3a63d66905e735fe/scikit_learn-1.5.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:3b923d119d65b7bd555c73be5423bf06c0105678ce7e1f558cb4b40b0a5502b1", size = 11033502 }, + { url = "https://files.pythonhosted.org/packages/a1/32/4a7a205b14c11225609b75b28402c196e4396ac754dab6a81971b811781c/scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f60021ec1574e56632be2a36b946f8143bf4e5e6af4a06d85281adc22938e0dd", size = 12085794 }, + { url = "https://files.pythonhosted.org/packages/c6/29/044048c5e911373827c0e1d3051321b9183b2a4f8d4e2f11c08fcff83f13/scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:394397841449853c2290a32050382edaec3da89e35b3e03d6cc966aebc6a8ae6", size = 12945797 }, + { url = "https://files.pythonhosted.org/packages/aa/ce/c0b912f2f31aeb1b756a6ba56bcd84dd1f8a148470526a48515a3f4d48cd/scikit_learn-1.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:57cc1786cfd6bd118220a92ede80270132aa353647684efa385a74244a41e3b1", size = 10985467 }, + { url = "https://files.pythonhosted.org/packages/a4/50/8891028437858cc510e13578fe7046574a60c2aaaa92b02d64aac5b1b412/scikit_learn-1.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9a702e2de732bbb20d3bad29ebd77fc05a6b427dc49964300340e4c9328b3f5", size = 12025584 }, + { url = "https://files.pythonhosted.org/packages/d2/79/17feef8a1c14149436083bec0e61d7befb4812e272d5b20f9d79ea3e9ab1/scikit_learn-1.5.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:b0768ad641981f5d3a198430a1d31c3e044ed2e8a6f22166b4d546a5116d7908", size = 10959795 }, + { url = "https://files.pythonhosted.org/packages/b1/c8/f08313f9e2e656bd0905930ae8bf99a573ea21c34666a813b749c338202f/scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:178ddd0a5cb0044464fc1bfc4cca5b1833bfc7bb022d70b05db8530da4bb3dd3", size = 12077302 }, + { url = "https://files.pythonhosted.org/packages/a7/48/fbfb4dc72bed0fe31fe045fb30e924909ad03f717c36694351612973b1a9/scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7284ade780084d94505632241bf78c44ab3b6f1e8ccab3d2af58e0e950f9c12", size = 13002811 }, + { url = "https://files.pythonhosted.org/packages/a5/e7/0c869f9e60d225a77af90d2aefa7a4a4c0e745b149325d1450f0f0ce5399/scikit_learn-1.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:b7b0f9a0b1040830d38c39b91b3a44e1b643f4b36e36567b80b7c6bd2202a27f", size = 10951354 }, +] + [[package]] name = "scipy" version = "1.14.1" @@ -2862,6 +2663,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/99/ff/c87e0622b1dadea79d2fb0b25ade9ed98954c9033722eb707053d310d4f3/sympy-1.13.3-py3-none-any.whl", hash = "sha256:54612cf55a62755ee71824ce692986f23c88ffa77207b30c1368eda4a7060f73", size = 6189483 }, ] +[[package]] +name = "threadpoolctl" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/55/b5148dcbf72f5cde221f8bfe3b6a540da7aa1842f6b491ad979a6c8b84af/threadpoolctl-3.5.0.tar.gz", hash = "sha256:082433502dd922bf738de0d8bcc4fdcbf0979ff44c42bd40f5af8a282f6fa107", size = 41936 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4b/2c/ffbf7a134b9ab11a67b0cf0726453cedd9c5043a4fe7a35d1cefa9a1bcfb/threadpoolctl-3.5.0-py3-none-any.whl", hash = "sha256:56c1e26c150397e58c4926da8eeee87533b1e32bef131bd4bf6a2f45f3185467", size = 18414 }, +] + [[package]] name = "tinycss2" version = "1.4.0" @@ -2995,23 +2805,10 @@ wheels = [ ] [[package]] -name = "yfinance" -version = "0.2.50" +name = "widgetsnbextension" +version = "4.0.13" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "beautifulsoup4" }, - { name = "frozendict" }, - { name = "html5lib" }, - { name = "lxml" }, - { name = "multitasking" }, - { name = "numpy" }, - { name = "pandas" }, - { name = "peewee" }, - { name = "platformdirs" }, - { name = "pytz" }, - { name = "requests" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d5/58/05bad58cd134b2c3b6a8ca46eca4cf74a740b47914439bdd0deeaaae3ac0/yfinance-0.2.50.tar.gz", hash = "sha256:33b379cad4261313dc93bfe3148d2f6e6083210e6341f0c93dd3af853019b1a0", size = 111862 } +sdist = { url = "https://files.pythonhosted.org/packages/56/fc/238c424fd7f4ebb25f8b1da9a934a3ad7c848286732ae04263661eb0fc03/widgetsnbextension-4.0.13.tar.gz", hash = "sha256:ffcb67bc9febd10234a362795f643927f4e0c05d9342c727b65d2384f8feacb6", size = 1164730 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c5/98/6fd94db428a9670d638d4469cedfea51671de0126b8f50de1b06e2245c97/yfinance-0.2.50-py2.py3-none-any.whl", hash = "sha256:0db13b19313043328fe88ded2ddc306ede7d901d0f5181462a1cce76acdbcd2a", size = 102247 }, + { url = "https://files.pythonhosted.org/packages/21/02/88b65cc394961a60c43c70517066b6b679738caf78506a5da7b88ffcb643/widgetsnbextension-4.0.13-py3-none-any.whl", hash = "sha256:74b2692e8500525cc38c2b877236ba51d34541e6385eeed5aec15a70f88a6c71", size = 2335872 }, ]