diff --git a/doc/source/api-reference/qibo.rst b/doc/source/api-reference/qibo.rst index 9d58736f81..3a16ca11ae 100644 --- a/doc/source/api-reference/qibo.rst +++ b/doc/source/api-reference/qibo.rst @@ -2420,3 +2420,9 @@ Alternatively, a Clifford circuit can also be executed starting from the :class: .. autoclass:: qibo.backends.clifford.CliffordBackend :members: :member-order: bysource + + +Cloud Backends +^^^^^^^^^^^^^^ + +Additional backends, that support the remote execution of quantum circuits through cloud service providers, such as IBM and QRC-TII, are provided by the optional qibo plugin `qibo-cloud-backends `_. For more information please refer to the `official documentation `_. diff --git a/poetry.lock b/poetry.lock index b128bd7aa7..f523d451c9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -199,7 +199,7 @@ files = [ name = "cffi" version = "1.16.0" description = "Foreign Function Interface for Python calling C code." -category = "dev" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -750,6 +750,61 @@ tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.1 [package.extras] toml = ["tomli"] +[[package]] +name = "cryptography" +version = "42.0.5" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +category = "main" +optional = true +python-versions = ">=3.7" +files = [ + {file = "cryptography-42.0.5-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:a30596bae9403a342c978fb47d9b0ee277699fa53bbafad14706af51fe543d16"}, + {file = "cryptography-42.0.5-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:b7ffe927ee6531c78f81aa17e684e2ff617daeba7f189f911065b2ea2d526dec"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2424ff4c4ac7f6b8177b53c17ed5d8fa74ae5955656867f5a8affaca36a27abb"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:329906dcc7b20ff3cad13c069a78124ed8247adcac44b10bea1130e36caae0b4"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:b03c2ae5d2f0fc05f9a2c0c997e1bc18c8229f392234e8a0194f202169ccd278"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f8837fe1d6ac4a8052a9a8ddab256bc006242696f03368a4009be7ee3075cdb7"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:0270572b8bd2c833c3981724b8ee9747b3ec96f699a9665470018594301439ee"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:b8cac287fafc4ad485b8a9b67d0ee80c66bf3574f655d3b97ef2e1082360faf1"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:16a48c23a62a2f4a285699dba2e4ff2d1cff3115b9df052cdd976a18856d8e3d"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2bce03af1ce5a5567ab89bd90d11e7bbdff56b8af3acbbec1faded8f44cb06da"}, + {file = "cryptography-42.0.5-cp37-abi3-win32.whl", hash = "sha256:b6cd2203306b63e41acdf39aa93b86fb566049aeb6dc489b70e34bcd07adca74"}, + {file = "cryptography-42.0.5-cp37-abi3-win_amd64.whl", hash = "sha256:98d8dc6d012b82287f2c3d26ce1d2dd130ec200c8679b6213b3c73c08b2b7940"}, + {file = "cryptography-42.0.5-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:5e6275c09d2badf57aea3afa80d975444f4be8d3bc58f7f80d2a484c6f9485c8"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4985a790f921508f36f81831817cbc03b102d643b5fcb81cd33df3fa291a1a1"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cde5f38e614f55e28d831754e8a3bacf9ace5d1566235e39d91b35502d6936e"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:7367d7b2eca6513681127ebad53b2582911d1736dc2ffc19f2c3ae49997496bc"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cd2030f6650c089aeb304cf093f3244d34745ce0cfcc39f20c6fbfe030102e2a"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a2913c5375154b6ef2e91c10b5720ea6e21007412f6437504ffea2109b5a33d7"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:c41fb5e6a5fe9ebcd58ca3abfeb51dffb5d83d6775405305bfa8715b76521922"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3eaafe47ec0d0ffcc9349e1708be2aaea4c6dd4978d76bf6eb0cb2c13636c6fc"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1b95b98b0d2af784078fa69f637135e3c317091b615cd0905f8b8a087e86fa30"}, + {file = "cryptography-42.0.5-cp39-abi3-win32.whl", hash = "sha256:1f71c10d1e88467126f0efd484bd44bca5e14c664ec2ede64c32f20875c0d413"}, + {file = "cryptography-42.0.5-cp39-abi3-win_amd64.whl", hash = "sha256:a011a644f6d7d03736214d38832e030d8268bcff4a41f728e6030325fea3e400"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9481ffe3cf013b71b2428b905c4f7a9a4f76ec03065b05ff499bb5682a8d9ad8"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:ba334e6e4b1d92442b75ddacc615c5476d4ad55cc29b15d590cc6b86efa487e2"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ba3e4a42397c25b7ff88cdec6e2a16c2be18720f317506ee25210f6d31925f9c"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:111a0d8553afcf8eb02a4fea6ca4f59d48ddb34497aa8706a6cf536f1a5ec576"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cd65d75953847815962c84a4654a84850b2bb4aed3f26fadcc1c13892e1e29f6"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e807b3188f9eb0eaa7bbb579b462c5ace579f1cedb28107ce8b48a9f7ad3679e"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f12764b8fffc7a123f641d7d049d382b73f96a34117e0b637b80643169cec8ac"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:37dd623507659e08be98eec89323469e8c7b4c1407c85112634ae3dbdb926fdd"}, + {file = "cryptography-42.0.5.tar.gz", hash = "sha256:6fe07eec95dfd477eb9530aef5bead34fec819b3aaf6c5bd6d20565da607bfe1"}, +] + +[package.dependencies] +cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} + +[package.extras] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] +docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"] +nox = ["nox"] +pep8test = ["check-sdist", "click", "mypy", "ruff"] +sdist = ["build"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["certifi", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test-randomorder = ["pytest-randomly"] + [[package]] name = "cupy-cuda11x" version = "12.3.0" @@ -1062,7 +1117,7 @@ dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] name = "dill" version = "0.3.8" description = "serialize all of Python" -category = "dev" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1716,6 +1771,37 @@ dev = ["black", "nose", "pre-commit", "pytest"] mongotrials = ["pymongo"] sparktrials = ["pyspark"] +[[package]] +name = "ibm-cloud-sdk-core" +version = "3.19.2" +description = "Core library used by SDKs for IBM Cloud Services" +category = "main" +optional = true +python-versions = "*" +files = [ + {file = "ibm-cloud-sdk-core-3.19.2.tar.gz", hash = "sha256:aa874df402f201fcecac20223d3dedd3624944206a1423555a5b103fee1dddda"}, +] + +[package.dependencies] +PyJWT = ">=2.8.0,<3.0.0" +python_dateutil = ">=2.8.2,<3.0.0" +requests = ">=2.31.0,<3.0.0" +urllib3 = ">=2.1.0,<3.0.0" + +[[package]] +name = "ibm-platform-services" +version = "0.51.1" +description = "Python client library for IBM Cloud Platform Services" +category = "main" +optional = true +python-versions = "*" +files = [ + {file = "ibm-platform-services-0.51.1.tar.gz", hash = "sha256:59bd8e03eacbaf459601009302fdde4ca08851374abe0af95e1b86730585c7f5"}, +] + +[package.dependencies] +ibm_cloud_sdk_core = ">=3.19.1,<4.0.0" + [[package]] name = "idna" version = "3.6" @@ -2922,6 +3008,18 @@ files = [ qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] testing = ["docopt", "pytest (<6.0.0)"] +[[package]] +name = "pbr" +version = "6.0.0" +description = "Python Build Reasonableness" +category = "main" +optional = true +python-versions = ">=2.6" +files = [ + {file = "pbr-6.0.0-py2.py3-none-any.whl", hash = "sha256:4a7317d5e3b17a3dccb6a8cfe67dab65b20551404c52c8ed41279fa4f0cb4cda"}, + {file = "pbr-6.0.0.tar.gz", hash = "sha256:d1377122a5a00e2f940ee482999518efe16d745d423a670c27773dfbc3c9a7d9"}, +] + [[package]] name = "pdbpp" version = "0.10.3" @@ -3292,7 +3390,7 @@ pybtex = ">=0.16" name = "pycparser" version = "2.21" description = "C parser in Python" -category = "dev" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -3373,7 +3471,7 @@ windows-terminal = ["colorama (>=0.4.6)"] name = "pyjwt" version = "2.8.0" description = "JSON Web Token implementation in Python" -category = "dev" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3525,6 +3623,26 @@ files = [ {file = "pyrsistent-0.20.0.tar.gz", hash = "sha256:4c48f78f62ab596c679086084d0dd13254ae4f3d6c72a83ffdf5ebdef8f265a4"}, ] +[[package]] +name = "pyspnego" +version = "0.10.2" +description = "Windows Negotiate Authentication Client and Server" +category = "main" +optional = true +python-versions = ">=3.8" +files = [ + {file = "pyspnego-0.10.2-py3-none-any.whl", hash = "sha256:3d5c5c28dbd0cd6a679acf45219630254db3c0e5ad4a16de521caa0585b088c0"}, + {file = "pyspnego-0.10.2.tar.gz", hash = "sha256:9a22c23aeae7b4424fdb2482450d3f8302ac012e2644e1cfe735cf468fcd12ed"}, +] + +[package.dependencies] +cryptography = "*" +sspilib = {version = ">=0.1.0", markers = "sys_platform == \"win32\""} + +[package.extras] +kerberos = ["gssapi (>=1.6.0)", "krb5 (>=0.3.0)"] +yaml = ["ruamel.yaml"] + [[package]] name = "pytest" version = "7.4.4" @@ -3569,14 +3687,14 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale [[package]] name = "python-dateutil" -version = "2.8.2" +version = "2.9.0" description = "Extensions to the standard Python datetime module" -category = "dev" +category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, + {file = "python-dateutil-2.9.0.tar.gz", hash = "sha256:78e73e19c63f5b20ffa567001531680d939dc042bf7850431877645523c66709"}, + {file = "python_dateutil-2.9.0-py2.py3-none-any.whl", hash = "sha256:cbf2f1da5e6083ac2fbfd4da39a25f34312230110440f424a14c7558bb85d82e"}, ] [package.dependencies] @@ -3911,6 +4029,44 @@ files = [ numpy = ">=1.7" scipy = ">=0.13.2" +[[package]] +name = "qibo-client" +version = "0.0.3" +description = "Qibo client interface." +category = "main" +optional = true +python-versions = ">=3.9,<3.12" +files = [ + {file = "qibo_client-0.0.3-py3-none-any.whl", hash = "sha256:a0e5cdeae14237aefecb181fe77c6f5548c2bdcfd52e8095e628deae02bfa0cc"}, + {file = "qibo_client-0.0.3.tar.gz", hash = "sha256:de9d75bb1d06d713be66e67ee122f3f803ae9b6b476254c4213453068e06efea"}, +] + +[package.dependencies] +qibo = ">=0.2.4" +requests = ">=2.31.0,<3.0.0" + +[[package]] +name = "qibo-cloud-backends" +version = "0.0.1" +description = "Qibo backends for client interface." +category = "main" +optional = true +python-versions = ">=3.9,<3.12" +files = [] +develop = false + +[package.dependencies] +qibo = ">=0.2.5" +qibo_client = ">=0.0.2" +qiskit_ibm_provider = ">=0.8.0" +qiskit_ibm_runtime = ">=0.17" + +[package.source] +type = "git" +url = "https://github.com/qiboteam/qibo-cloud-backends.git" +reference = "HEAD" +resolved_reference = "da105d12a0fb321f6a2b7a7ed5b1b3af36bcd712" + [[package]] name = "qibojit" version = "0.1.3" @@ -3933,6 +4089,93 @@ url = "https://github.com/qiboteam/qibojit.git" reference = "HEAD" resolved_reference = "524aea0aa06f5dccf8d5ee9d8db84899b7f3ac45" +[[package]] +name = "qiskit" +version = "1.0.1" +description = "An open-source SDK for working with quantum computers at the level of extended quantum circuits, operators, and primitives." +category = "main" +optional = true +python-versions = ">=3.8" +files = [ + {file = "qiskit-1.0.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:1cfdec75cbef97d064b619d74c2d1b3c39645f3d5956d7f6889e27e621a9ea95"}, + {file = "qiskit-1.0.1-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:04b58f3aa9b76b572efc6416aca4de6d737907738cb7bd02f90aa0ca7c992f1d"}, + {file = "qiskit-1.0.1-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d09def183c8a25cec00cf11c41889818d084a6df94d183c1d5268ba9e966aa83"}, + {file = "qiskit-1.0.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:317f34e2a33192d299a16aea06c81c7b8f6070efe49b36f0c143285ff98fd069"}, + {file = "qiskit-1.0.1-cp38-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a6bd328b504691d32220c177484a17e0f49b285d893e36a028456073d2b4b10a"}, + {file = "qiskit-1.0.1-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d989899c5bd3a74c984d5e8b2c43b8b31f945906c02274edc94f2eb33a115e40"}, + {file = "qiskit-1.0.1-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:93973df6a9e89ee2aabbea0d9cc6962752245dae0f2a04a8a60c92427ae2dd5d"}, + {file = "qiskit-1.0.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:490e8e46e37a452a6a3ffca942191676d78329a44c9cf8a18308e16c51c5d7ad"}, + {file = "qiskit-1.0.1-cp38-abi3-win32.whl", hash = "sha256:dd812ddd32374b1de80530156ce72a78556e72d7b1772c6e1037497b31e06487"}, + {file = "qiskit-1.0.1-cp38-abi3-win_amd64.whl", hash = "sha256:c78c6dc45f5dfd9596ff44f2f106db7e2bdd3c220cbcd4117e2c6edee99346b5"}, + {file = "qiskit-1.0.1.tar.gz", hash = "sha256:c549383fc057c11eb1dcf89949fe751800797d149ef0115c40e406d9718d9d31"}, +] + +[package.dependencies] +dill = ">=0.3" +numpy = ">=1.17,<2" +python-dateutil = ">=2.8.0" +rustworkx = ">=0.14.0" +scipy = ">=1.5" +stevedore = ">=3.0.0" +symengine = ">=0.11" +sympy = ">=1.3" +typing-extensions = "*" + +[package.extras] +all = ["qiskit[crosstalk-pass,csp-layout-pass,qasm3-import,visualization]"] +crosstalk-pass = ["z3-solver (>=4.7)"] +csp-layout-pass = ["python-constraint (>=1.4)"] +qasm3-import = ["qiskit-qasm3-import (>=0.1.0)"] +visualization = ["Pillow (>=4.2.1)", "matplotlib (>=3.3)", "pydot", "pylatexenc (>=1.4)", "seaborn (>=0.9.0)"] + +[[package]] +name = "qiskit-ibm-provider" +version = "0.10.0" +description = "Qiskit IBM Quantum Provider for accessing the quantum devices and simulators at IBM" +category = "main" +optional = true +python-versions = ">=3.8" +files = [ + {file = "qiskit-ibm-provider-0.10.0.tar.gz", hash = "sha256:99dc9fd48bee2e7ed633bc739e0935c91859f1c4b77080a31089ae92e6f110f1"}, + {file = "qiskit_ibm_provider-0.10.0-py3-none-any.whl", hash = "sha256:2e5c6fedeba1308b009d4733a4e8433a5b4d190aed5981dd7f4512ec04433298"}, +] + +[package.dependencies] +numpy = ">=1.13" +python-dateutil = ">=2.8.0" +qiskit = ">=0.45.0" +requests = ">=2.19" +requests-ntlm = ">=1.1.0" +typing-extensions = ">=4.3" +urllib3 = ">=1.21.1" +websocket-client = ">=1.5.1" +websockets = ">=10.0" + +[package.extras] +visualization = ["ipython (>=5.0.0)", "ipyvue (>=1.8.5)", "ipyvuetify (>=1.1)", "ipywidgets (<8.0.0)", "matplotlib (>=2.1)", "plotly (>=4.4)", "pyperclip (>=1.7)", "seaborn (>=0.9.0)", "traitlets (!=5.0.5)"] + +[[package]] +name = "qiskit-ibm-runtime" +version = "0.20.0" +description = "IBM Quantum client for Qiskit Runtime." +category = "main" +optional = true +python-versions = ">=3.8" +files = [ + {file = "qiskit-ibm-runtime-0.20.0.tar.gz", hash = "sha256:8aa6e3b9838a2e3967b79392fbcf6dc0d8bfad37bb18507e2461079500ce0189"}, + {file = "qiskit_ibm_runtime-0.20.0-py3-none-any.whl", hash = "sha256:2dfca03a25e2d508e860b39f9df907c034be8f9a297717d4c2f61613b5c41172"}, +] + +[package.dependencies] +ibm-platform-services = ">=0.22.6" +numpy = ">=1.13" +python-dateutil = ">=2.8.0" +qiskit = ">=0.45.0" +requests = ">=2.19" +requests-ntlm = ">=1.1.0" +urllib3 = ">=1.21.1" +websocket-client = ">=1.5.1" + [[package]] name = "recommonmark" version = "0.7.1" @@ -3972,6 +4215,23 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "requests-ntlm" +version = "1.2.0" +description = "This package allows for HTTP NTLM authentication using the requests library." +category = "main" +optional = true +python-versions = ">=3.7" +files = [ + {file = "requests_ntlm-1.2.0-py3-none-any.whl", hash = "sha256:b7781090c647308a88b55fb530c7b3705cef45349e70a83b8d6731e7889272a6"}, + {file = "requests_ntlm-1.2.0.tar.gz", hash = "sha256:33c285f5074e317cbdd338d199afa46a7c01132e5c111d36bd415534e9b916a8"}, +] + +[package.dependencies] +cryptography = ">=1.3" +pyspnego = ">=0.1.6" +requests = ">=2.0.0" + [[package]] name = "requests-oauthlib" version = "1.3.1" @@ -4147,6 +4407,85 @@ files = [ {file = "ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512"}, ] +[[package]] +name = "rustworkx" +version = "0.14.1" +description = "A python graph library implemented in Rust" +category = "main" +optional = true +python-versions = ">=3.8" +files = [ + {file = "rustworkx-0.14.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c612b9723f8d5236f6b88eba3f5cfeea45accc1f57436ed065a8251c25e4169b"}, + {file = "rustworkx-0.14.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:13c88ad0ecb7f697642125a10d9296430bddf45827e0b81e964d8417a8e1d568"}, + {file = "rustworkx-0.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3b2f7cb51358a3fcba93a44e5a4416902875cbadc710fb644c27367b452f883a"}, + {file = "rustworkx-0.14.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c46d3033055c6f61444341513832b639e5d371eb98f4ea4364e877f349f68698"}, + {file = "rustworkx-0.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:525552c4ca807b6bdeea10c4dd95791081bb8df859f48c2798925f270f565d8e"}, + {file = "rustworkx-0.14.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:841c351f8cc40d9fb15120292132f034d4aaadfdb5be1c9e856876a2731099b8"}, + {file = "rustworkx-0.14.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f071abf97ac01f5fddf6a63eff7b2ba1ed0b3f645798e8fc9ddb0544212f3b45"}, + {file = "rustworkx-0.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:461a02f7e72a344ab8f8bddf7f8b25262380cd333bb9fa6bbc237cbc1fa7f6eb"}, + {file = "rustworkx-0.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7c4a6980a6134662982b54d1e97556487f1d56f8a3c6afd3c51efb17e4547182"}, + {file = "rustworkx-0.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1a693567af0eeb6b8e43d15b0d069e29651cfb57fb5acca6e89bbf92b5fd20b8"}, + {file = "rustworkx-0.14.1-cp310-cp310-win32.whl", hash = "sha256:2327f3ca16bdab015675b805e22ef20b8db164269052f928038cd15b5e013001"}, + {file = "rustworkx-0.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:72bd0421fbfb7fe58794f5753cc99906c7dddda9d44682ad25854ee831ecb55e"}, + {file = "rustworkx-0.14.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d675bf6ce684fab98415768f19a20f62bfa8ba84ec8e84eca53976e910413cde"}, + {file = "rustworkx-0.14.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7abcd7756c25f9e4090534ac5ce29737c827d4fba5f86e854458aed730616d97"}, + {file = "rustworkx-0.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3c68458d0604efef18dbde527da76f4628db8d5dfb2986aa8f96913f7ab366e4"}, + {file = "rustworkx-0.14.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7429a1887aba1a51975a9729c4bbdef217501a4418666ab5128249140c0ac33b"}, + {file = "rustworkx-0.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fb3b55cd6a811359714aaba34a0850aaf5c51ac9343becb3d160b6ec6e9b714"}, + {file = "rustworkx-0.14.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc131a5d4c73e72d477b66536e549e1bb4ffb9420a3afbf439179e18b61a7629"}, + {file = "rustworkx-0.14.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99a714500d20c8712656b05f34b536d9a63670688a56c0ae2536a11d105cc892"}, + {file = "rustworkx-0.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca330be994f131cb5f1a36ca01b4a57e9e65cbd393b9bccfb1aabe2949fe1524"}, + {file = "rustworkx-0.14.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e9e6150ab9eacae34aa61eafdb5cc5428d74026cdb2a1748c96ab9a4f66dc436"}, + {file = "rustworkx-0.14.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f6f2eadc381d56c9e18f4fdb4ac743d63314d806355bc51b19785ca82470f285"}, + {file = "rustworkx-0.14.1-cp311-cp311-win32.whl", hash = "sha256:016097662f3ead6bf97be2cbabf0a9a61f92fd84192cbb37ca730728ad35bb9f"}, + {file = "rustworkx-0.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:463220b6faf9c57f1bf8e39ad60c3163d10c3266392b5540d6a0199dad9e998a"}, + {file = "rustworkx-0.14.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:eede1ef7cb9d317dc6cdabeeee8d7f9c3ff332729849ee7fb47a58983c8918f6"}, + {file = "rustworkx-0.14.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3063815f41de85a1579b1e26fd75ad37d42c922bdf37d77bfae2959ad1b3cb79"}, + {file = "rustworkx-0.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7dd896472795c1a434fe2a474e0e2c5c2b7eca4c59b743c87302c125e6b26e8a"}, + {file = "rustworkx-0.14.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0001476d9c8ee82aceecb4f6e827ed9c91e3f0e3c3abf42bf1adb97ecd79f9bb"}, + {file = "rustworkx-0.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9b04bae32cfb73c2c047c662b0b074de8c59657be9c1fa2c512384d912cd3bd"}, + {file = "rustworkx-0.14.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0ec2cf5ac6878e0594df765e51e5e756abc0192870aac23bebf43b71eca3b1c1"}, + {file = "rustworkx-0.14.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:21b7feccf87c3662c253fa26ad0159a8d1c33eb8f569297bf47f446b07644c7c"}, + {file = "rustworkx-0.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4921898e256e34a2a00e99d8d35dcadf08f10146a41e9c3e28977f45bd7a7131"}, + {file = "rustworkx-0.14.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:90b996e5372316f77377949763718e6343c7dd772144d31903fec06ebd4f038f"}, + {file = "rustworkx-0.14.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f5383da6a216374bffcfbab4321074d5db7cf6821d39bec33a5404a132b6e56"}, + {file = "rustworkx-0.14.1-cp312-cp312-win32.whl", hash = "sha256:faddf084e8dab5bb7c8c500b09d9d2c8fd411508a24af7a49dc9a79257c59619"}, + {file = "rustworkx-0.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:97b18bbeb64664ffb92cd28121f6fb5e790f0ef0569d50cd6599f215d4e03cb0"}, + {file = "rustworkx-0.14.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:5c3d1ebc60f63f786e3b800453dbcd0e6b3f49fe9a26e9396e3e3328ee420025"}, + {file = "rustworkx-0.14.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b87dce71da23fe6df27932d73f12498c6c090de9f658a494cefb921dfea61f75"}, + {file = "rustworkx-0.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3a421c769ca90478f337869f9709d98c098f5183a62cc32ac66ec868f4e1d107"}, + {file = "rustworkx-0.14.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d2d93e5bd3a610ae66f8b822b5f05d2958aeb0b0b24005a96d5864448bce9ab9"}, + {file = "rustworkx-0.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46678bf5a3550bfa592ff7c43cac367842448c62b71c3beaa7f294ba290a42ad"}, + {file = "rustworkx-0.14.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c0666dcc22aba46d0738f781d53cb7fd7373dab4d2d1bee610c95e5b13a23a3"}, + {file = "rustworkx-0.14.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63415718c6691656bb0f2adefffaa5637d9dfcd1745989eb151601cf2587ec25"}, + {file = "rustworkx-0.14.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43b6df7fa92df2b9803f003c409dde3b71ae4063dadb862eee40e021643ec6b1"}, + {file = "rustworkx-0.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c445013855a7f3da20a44a5af5fc7b49444168327d2bc2355a25addfe70b46ed"}, + {file = "rustworkx-0.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f4cca1c345e1b15debffe13ad0ee266a9303b0f59b133e1836a4baea4da1457c"}, + {file = "rustworkx-0.14.1-cp38-cp38-win32.whl", hash = "sha256:6b8cab7e63ee476299c3f63a866e11a5f92a7b2883f9887ac4ef782f0f2ead54"}, + {file = "rustworkx-0.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:218d53f9b457d7735591242c3a625c32fd95584f20dc994bf080068f4ebe5e57"}, + {file = "rustworkx-0.14.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:51e4cfc2ee4294a425acab4b1eea64b167ccd17134198180e2caa3c935fa6ede"}, + {file = "rustworkx-0.14.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:efcfd529f86cdb7258c589febb054be0cfc6f68f1f8a5111254d5f3f1ae6109a"}, + {file = "rustworkx-0.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8d97de574cb34a06c6b418b0433712b8cf35e0561edae629fdcaca38896dd937"}, + {file = "rustworkx-0.14.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f90399650364d56f66545aa56fce1870150b7967c530355512a849422a4fbd6b"}, + {file = "rustworkx-0.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1d2489e0d323732fec7e5437ea6fb35e9b022e043e1180529f91991d52a494f"}, + {file = "rustworkx-0.14.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:75c4b2acc629d953c2720ca8e44bed2103228150cca3313d4563174bb8f90c49"}, + {file = "rustworkx-0.14.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c1f10df1c820d41b5e893c749362099986919f484d00efc17af60369312de62"}, + {file = "rustworkx-0.14.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1f43182cf1340149dc96397fd72e0061ca2cd6d9181f9b9926f58b685343438"}, + {file = "rustworkx-0.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d6c414bd3b8231e6b56a51c15df36513e0b26d11ebb25fd043280bd3cc9393cf"}, + {file = "rustworkx-0.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:09c1797222e7941b0a5eed293b344fd4d0d83baf0ab0f4482fb551f58724a439"}, + {file = "rustworkx-0.14.1-cp39-cp39-win32.whl", hash = "sha256:1dd5d0744ba5004b59d7184b2a60feb85c4060a513158523728beede76f2f37c"}, + {file = "rustworkx-0.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:480b967d6eba90ecb53a84e21154b948b884c5dde742ca7391d2192b60f5ff96"}, + {file = "rustworkx-0.14.1.tar.gz", hash = "sha256:62104ecb0b3d4c2cfdb8b45dc38646bd45760c43fabc70ded9112712d01ea1c9"}, +] + +[package.dependencies] +numpy = ">=1.16.0,<2" + +[package.extras] +all = ["matplotlib (>=3.0)", "pillow (>=5.4)"] +graphviz = ["pillow (>=5.4)"] +mpl = ["matplotlib (>=3.0)"] + [[package]] name = "scikit-learn" version = "1.4.1.post1" @@ -4551,6 +4890,46 @@ lint = ["docutils-stubs", "flake8", "mypy"] standalone = ["Sphinx (>=5)"] test = ["pytest"] +[[package]] +name = "sspilib" +version = "0.1.0" +description = "SSPI API bindings for Python" +category = "main" +optional = true +python-versions = ">=3.8" +files = [ + {file = "sspilib-0.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5e43f3e684e9d29c80324bd54f52dac65ac4b18d81a2dcd529dce3994369a14d"}, + {file = "sspilib-0.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1eb34eda5d362b6603707a55751f1eff81775709b821e51cb64d1d2fa2bb8b6e"}, + {file = "sspilib-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ffe123f056f78cbe18aaed6b15f06e252020061c3387a72615abd46699a0b24"}, + {file = "sspilib-0.1.0-cp310-cp310-win32.whl", hash = "sha256:a4151072e28ec3b7d785beac9548a3d6a4549c431eb5487a5b8a1de028e9fef0"}, + {file = "sspilib-0.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:2a19696c7b96b6bbef2b2ddf35df5a92f09b268476a348390a2f0da18cf29510"}, + {file = "sspilib-0.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:d2778e5e2881405b4d359a604e2802f5b7a7ed433ff62d6073d04c203af10eb1"}, + {file = "sspilib-0.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:09d7f72ad5e4bbf9a8f1acf0d5f0c3f9fbe500f44c4a45ac24a99ece84f5654f"}, + {file = "sspilib-0.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e5705e11aaa030a61d2b0a2ce09d2b8a1962dd950e55adc7a3c87dd463c6878"}, + {file = "sspilib-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dced8213d311c56f5f38044716ebff5412cc156f19678659e8ffa9bb6a642bd7"}, + {file = "sspilib-0.1.0-cp311-cp311-win32.whl", hash = "sha256:d30d38d52dbd857732224e86ae3627d003cc510451083c69fa481fc7de88a7b6"}, + {file = "sspilib-0.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:61c9067168cce962f7fead42c28804c3a39a164b9a7b660200b8cfe31e3af071"}, + {file = "sspilib-0.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:b526b8e5a236553f5137b951b89a2f108f56138ad05f31fd0a51b10f80b6c3cc"}, + {file = "sspilib-0.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3ff356d40cd34c900f94f1591eaabd458284042af611ebc1dbf609002066dba5"}, + {file = "sspilib-0.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2b0fee3a52d0acef090f6c9b49953a8400fdc1c10aca7334319414a3038aa493"}, + {file = "sspilib-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab52d190dad1d578ec40d1fb417a8571954f4e32f35442a14cb709f57d3acbc9"}, + {file = "sspilib-0.1.0-cp312-cp312-win32.whl", hash = "sha256:b3cf819094383ec883e9a63c11b81d622618c815c18a6c9d761d9a14d9f028d1"}, + {file = "sspilib-0.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:b83825a2c43ff84ddff72d09b098057efaabf3841d3c42888078e154cf8e9595"}, + {file = "sspilib-0.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:9aa6ab4c3fc1057251cf1f3f199daf90b99599cdfafc9eade8fdf0c01526dec8"}, + {file = "sspilib-0.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:82bff5df178386027d0112458b6971bbd18c76eb9e7be53fd61dab33d7bf8417"}, + {file = "sspilib-0.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:18393a9e6e0447cb7f319d361b65e9a0eaa5484705f16787133ffc49ad364c28"}, + {file = "sspilib-0.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88a423fbca206ba0ca811dc995d8c3af045402b7d330f033e938b24f3a1d93fc"}, + {file = "sspilib-0.1.0-cp38-cp38-win32.whl", hash = "sha256:86bd936b1ef0aa63c6d9623ad08473e74ceb15f342f6e92cbade15ed9574cd33"}, + {file = "sspilib-0.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:d4f688b94f0a64128444063e1d3d59152614175999222f6e2920681faea833f4"}, + {file = "sspilib-0.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2acef24e13e40d9dd8697eaae84ead9f417528ff741d087ec4eb4260518f4dc7"}, + {file = "sspilib-0.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4b625802d80144d856d5eb6e8f4412f186565758da4493c7ad1b88e3d6d353de"}, + {file = "sspilib-0.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c06ca1e34702bca1c750dcb5133b716f316b38dccb28d55a1a44d9842bc3f391"}, + {file = "sspilib-0.1.0-cp39-cp39-win32.whl", hash = "sha256:68496c9bd52b57a1b6d2e5529b43c30060249b8db901127b8343c4ad8cd93670"}, + {file = "sspilib-0.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:369727097f07a440099882580e284e137d9c27b7de354d63b65e327a454e7bee"}, + {file = "sspilib-0.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:87d8268c0517149c51a53b3888961ebf66826bb3dbb82c4e5cf10108f5456104"}, + {file = "sspilib-0.1.0.tar.gz", hash = "sha256:58b5291553cf6220549c0f855e0e6973f4977375d8236ce47bb581efb3e9b1cf"}, +] + [[package]] name = "stack-data" version = "0.6.3" @@ -4571,6 +4950,66 @@ pure-eval = "*" [package.extras] tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] +[[package]] +name = "stevedore" +version = "5.2.0" +description = "Manage dynamic plugins for Python applications" +category = "main" +optional = true +python-versions = ">=3.8" +files = [ + {file = "stevedore-5.2.0-py3-none-any.whl", hash = "sha256:1c15d95766ca0569cad14cb6272d4d31dae66b011a929d7c18219c176ea1b5c9"}, + {file = "stevedore-5.2.0.tar.gz", hash = "sha256:46b93ca40e1114cea93d738a6c1e365396981bb6bb78c27045b7587c9473544d"}, +] + +[package.dependencies] +pbr = ">=2.0.0,<2.1.0 || >2.1.0" + +[[package]] +name = "symengine" +version = "0.11.0" +description = "Python library providing wrappers to SymEngine" +category = "main" +optional = true +python-versions = ">=3.8,<4" +files = [ + {file = "symengine-0.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a5ab2281fe5b3cbe8fbe4411c4e2e4ce6788e4d653b5d31b002d05f4af13b7c7"}, + {file = "symengine-0.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1f0c83e91c90a0344fdb9f1d71970f09d4fad5715110c9651d6ebc9ac995f97e"}, + {file = "symengine-0.11.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:94c3e143bad732f858f5a8740bda640e24b491aa8cea30b2a68517a552060c84"}, + {file = "symengine-0.11.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8994e8e9b7273ce48e045d2a97e88b034bb99566bb3d0dd2a2ff79f2dccd4765"}, + {file = "symengine-0.11.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36c96584b5f852990e09904bb890623666cdc0bb83c5758f00939b540fcb2dc9"}, + {file = "symengine-0.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:fcfaf43781ae6e3e0b6b2f1da700e8ee6a0389426d3300925f4611323eb9b616"}, + {file = "symengine-0.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:292efdba67ce3465c99ff1e35338857d982583bbf505ae79f111f8f4fa670367"}, + {file = "symengine-0.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e935e0f5274d1ab456f3ba75a03dea1ee8a422dbd4d5d4f316653310a177962"}, + {file = "symengine-0.11.0-cp311-cp311-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6f588199cb79b1c365005d52a3a8bc0967487dce5db77b864ee73735a5f4d2ec"}, + {file = "symengine-0.11.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb419847f24944fd29e834a342c6d05577dd66b34942f65131d417d70c2e7926"}, + {file = "symengine-0.11.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10fe4f99d95dc222fd7c37217f80f06f15b9e9b78b951de3c5dc0648cbd1572e"}, + {file = "symengine-0.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:468b42d2626495808b21cc3b73a162d43c757cc97e4549b1911ec40331d3d491"}, + {file = "symengine-0.11.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:07acd4ab7b147b913fdb62444ced626a9b66b9eefef5d3abfc4f65dccc411403"}, + {file = "symengine-0.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5fb1d62479c18cc00f025b53ba5f72a7bce92eabee9fec44256bb08d3c28d851"}, + {file = "symengine-0.11.0-cp312-cp312-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ccd28886f3eea78a1b9150b636ae40acf7d27ac79b4cc9161ec46f592e366a47"}, + {file = "symengine-0.11.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:517fec27be3741f89e1eea92b9e2f0cdca70fcd77d3fd5c4f8e4f13e6f04e8e4"}, + {file = "symengine-0.11.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:54c5bcca900ec3bc6a20c749957310d52132a815bb3fca614fd66a7881626814"}, + {file = "symengine-0.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:6123f7e287cebeac9168e60eb6a9e9641f457617dbeee7b117fa7606fde84151"}, + {file = "symengine-0.11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:116e1f644b3505608b55e745d71b80521b2e72042f421cb70c91dbe7c6710655"}, + {file = "symengine-0.11.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1c7913e264c95f44a52f181e4fff98afd9640651de149d0aee42d73b8b89860b"}, + {file = "symengine-0.11.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ce5e0c14e925fb3600d6955b07314e9981ed389240e437f5dd42f08f70a18af8"}, + {file = "symengine-0.11.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc6323c43a703fefb0a50d42430e63a590c18b2955cfa8022cf7c0f6d0f32b86"}, + {file = "symengine-0.11.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86d20163ad6c266e67fb9ad27970c7939bc3d5627487c8f0dc24cd26b9028e3f"}, + {file = "symengine-0.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:1f79feeeb1af286c29fb791537f243798229020a1ae6340b3d21eece3992783d"}, + {file = "symengine-0.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a78f905944ea9b9ef97e1afb355de4972fe84ed4cceadfc84b01366ce1f50d5b"}, + {file = "symengine-0.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:33d2dfea163b77b41fa4c56ade5c6ac4a91693502bc282ba2c645591ef94775d"}, + {file = "symengine-0.11.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2a4412da691328a8e6b0622067807ec61ea97b87dee8d94b1eea2fab2eab8d91"}, + {file = "symengine-0.11.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c42229ba2fbf70975ebebb0ca5114f4633ba4158246bd7ce14ba9cf4a19828f8"}, + {file = "symengine-0.11.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66def111281fed93da17afd0c787abca48f651078bd3f7987ee4bfb997e26a15"}, + {file = "symengine-0.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:76b3fceb99d6967d207fbaa93a9cd477949093a63bdb4652cb3c601de85d5229"}, + {file = "symengine-0.11.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7cde52f8c3e8eaa1bf7347a20e50445206cfe058815c61a2a7b86701b1690133"}, + {file = "symengine-0.11.0-pp39-pypy39_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:83da94f8487b54e391367d66cfdd268636811c4c660daa7b7e90ef9d7b659467"}, + {file = "symengine-0.11.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11ae18741ee870ad897f4b1e45ad37587ab78c90a195083d87eb3db2ba66b12c"}, + {file = "symengine-0.11.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cb8cc1314312af70b8a148611680f4cd91f8ef971c4fd4befa968cf7d6a2bd19"}, + {file = "symengine-0.11.0.tar.gz", hash = "sha256:0dd30d29b804ebb7251bddec29c38c3b1fc15ea6953a2c57ee758d5f6fcba458"}, +] + [[package]] name = "sympy" version = "1.12" @@ -4989,6 +5428,105 @@ files = [ {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, ] +[[package]] +name = "websocket-client" +version = "1.7.0" +description = "WebSocket client for Python with low level API options" +category = "main" +optional = true +python-versions = ">=3.8" +files = [ + {file = "websocket-client-1.7.0.tar.gz", hash = "sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6"}, + {file = "websocket_client-1.7.0-py3-none-any.whl", hash = "sha256:f4c3d22fec12a2461427a29957ff07d35098ee2d976d3ba244e688b8b4057588"}, +] + +[package.extras] +docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] +optional = ["python-socks", "wsaccel"] +test = ["websockets"] + +[[package]] +name = "websockets" +version = "12.0" +description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" +category = "main" +optional = true +python-versions = ">=3.8" +files = [ + {file = "websockets-12.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d554236b2a2006e0ce16315c16eaa0d628dab009c33b63ea03f41c6107958374"}, + {file = "websockets-12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2d225bb6886591b1746b17c0573e29804619c8f755b5598d875bb4235ea639be"}, + {file = "websockets-12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb809e816916a3b210bed3c82fb88eaf16e8afcf9c115ebb2bacede1797d2547"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c588f6abc13f78a67044c6b1273a99e1cf31038ad51815b3b016ce699f0d75c2"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5aa9348186d79a5f232115ed3fa9020eab66d6c3437d72f9d2c8ac0c6858c558"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6350b14a40c95ddd53e775dbdbbbc59b124a5c8ecd6fbb09c2e52029f7a9f480"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:70ec754cc2a769bcd218ed8d7209055667b30860ffecb8633a834dde27d6307c"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6e96f5ed1b83a8ddb07909b45bd94833b0710f738115751cdaa9da1fb0cb66e8"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4d87be612cbef86f994178d5186add3d94e9f31cc3cb499a0482b866ec477603"}, + {file = "websockets-12.0-cp310-cp310-win32.whl", hash = "sha256:befe90632d66caaf72e8b2ed4d7f02b348913813c8b0a32fae1cc5fe3730902f"}, + {file = "websockets-12.0-cp310-cp310-win_amd64.whl", hash = "sha256:363f57ca8bc8576195d0540c648aa58ac18cf85b76ad5202b9f976918f4219cf"}, + {file = "websockets-12.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5d873c7de42dea355d73f170be0f23788cf3fa9f7bed718fd2830eefedce01b4"}, + {file = "websockets-12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3f61726cae9f65b872502ff3c1496abc93ffbe31b278455c418492016e2afc8f"}, + {file = "websockets-12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed2fcf7a07334c77fc8a230755c2209223a7cc44fc27597729b8ef5425aa61a3"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e332c210b14b57904869ca9f9bf4ca32f5427a03eeb625da9b616c85a3a506c"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5693ef74233122f8ebab026817b1b37fe25c411ecfca084b29bc7d6efc548f45"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e9e7db18b4539a29cc5ad8c8b252738a30e2b13f033c2d6e9d0549b45841c04"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6e2df67b8014767d0f785baa98393725739287684b9f8d8a1001eb2839031447"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bea88d71630c5900690fcb03161ab18f8f244805c59e2e0dc4ffadae0a7ee0ca"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dff6cdf35e31d1315790149fee351f9e52978130cef6c87c4b6c9b3baf78bc53"}, + {file = "websockets-12.0-cp311-cp311-win32.whl", hash = "sha256:3e3aa8c468af01d70332a382350ee95f6986db479ce7af14d5e81ec52aa2b402"}, + {file = "websockets-12.0-cp311-cp311-win_amd64.whl", hash = "sha256:25eb766c8ad27da0f79420b2af4b85d29914ba0edf69f547cc4f06ca6f1d403b"}, + {file = "websockets-12.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0e6e2711d5a8e6e482cacb927a49a3d432345dfe7dea8ace7b5790df5932e4df"}, + {file = "websockets-12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dbcf72a37f0b3316e993e13ecf32f10c0e1259c28ffd0a85cee26e8549595fbc"}, + {file = "websockets-12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12743ab88ab2af1d17dd4acb4645677cb7063ef4db93abffbf164218a5d54c6b"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b645f491f3c48d3f8a00d1fce07445fab7347fec54a3e65f0725d730d5b99cb"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9893d1aa45a7f8b3bc4510f6ccf8db8c3b62120917af15e3de247f0780294b92"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f38a7b376117ef7aff996e737583172bdf535932c9ca021746573bce40165ed"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f764ba54e33daf20e167915edc443b6f88956f37fb606449b4a5b10ba42235a5"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:1e4b3f8ea6a9cfa8be8484c9221ec0257508e3a1ec43c36acdefb2a9c3b00aa2"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9fdf06fd06c32205a07e47328ab49c40fc1407cdec801d698a7c41167ea45113"}, + {file = "websockets-12.0-cp312-cp312-win32.whl", hash = "sha256:baa386875b70cbd81798fa9f71be689c1bf484f65fd6fb08d051a0ee4e79924d"}, + {file = "websockets-12.0-cp312-cp312-win_amd64.whl", hash = "sha256:ae0a5da8f35a5be197f328d4727dbcfafa53d1824fac3d96cdd3a642fe09394f"}, + {file = "websockets-12.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5f6ffe2c6598f7f7207eef9a1228b6f5c818f9f4d53ee920aacd35cec8110438"}, + {file = "websockets-12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9edf3fc590cc2ec20dc9d7a45108b5bbaf21c0d89f9fd3fd1685e223771dc0b2"}, + {file = "websockets-12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8572132c7be52632201a35f5e08348137f658e5ffd21f51f94572ca6c05ea81d"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:604428d1b87edbf02b233e2c207d7d528460fa978f9e391bd8aaf9c8311de137"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a9d160fd080c6285e202327aba140fc9a0d910b09e423afff4ae5cbbf1c7205"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87b4aafed34653e465eb77b7c93ef058516cb5acf3eb21e42f33928616172def"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b2ee7288b85959797970114deae81ab41b731f19ebcd3bd499ae9ca0e3f1d2c8"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7fa3d25e81bfe6a89718e9791128398a50dec6d57faf23770787ff441d851967"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a571f035a47212288e3b3519944f6bf4ac7bc7553243e41eac50dd48552b6df7"}, + {file = "websockets-12.0-cp38-cp38-win32.whl", hash = "sha256:3c6cc1360c10c17463aadd29dd3af332d4a1adaa8796f6b0e9f9df1fdb0bad62"}, + {file = "websockets-12.0-cp38-cp38-win_amd64.whl", hash = "sha256:1bf386089178ea69d720f8db6199a0504a406209a0fc23e603b27b300fdd6892"}, + {file = "websockets-12.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ab3d732ad50a4fbd04a4490ef08acd0517b6ae6b77eb967251f4c263011a990d"}, + {file = "websockets-12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1d9697f3337a89691e3bd8dc56dea45a6f6d975f92e7d5f773bc715c15dde28"}, + {file = "websockets-12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1df2fbd2c8a98d38a66f5238484405b8d1d16f929bb7a33ed73e4801222a6f53"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23509452b3bc38e3a057382c2e941d5ac2e01e251acce7adc74011d7d8de434c"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e5fc14ec6ea568200ea4ef46545073da81900a2b67b3e666f04adf53ad452ec"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46e71dbbd12850224243f5d2aeec90f0aaa0f2dde5aeeb8fc8df21e04d99eff9"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b81f90dcc6c85a9b7f29873beb56c94c85d6f0dac2ea8b60d995bd18bf3e2aae"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a02413bc474feda2849c59ed2dfb2cddb4cd3d2f03a2fedec51d6e959d9b608b"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bbe6013f9f791944ed31ca08b077e26249309639313fff132bfbf3ba105673b9"}, + {file = "websockets-12.0-cp39-cp39-win32.whl", hash = "sha256:cbe83a6bbdf207ff0541de01e11904827540aa069293696dd528a6640bd6a5f6"}, + {file = "websockets-12.0-cp39-cp39-win_amd64.whl", hash = "sha256:fc4e7fa5414512b481a2483775a8e8be7803a35b30ca805afa4998a84f9fd9e8"}, + {file = "websockets-12.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:248d8e2446e13c1d4326e0a6a4e9629cb13a11195051a73acf414812700badbd"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f44069528d45a933997a6fef143030d8ca8042f0dfaad753e2906398290e2870"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c4e37d36f0d19f0a4413d3e18c0d03d0c268ada2061868c1e6f5ab1a6d575077"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d829f975fc2e527a3ef2f9c8f25e553eb7bc779c6665e8e1d52aa22800bb38b"}, + {file = "websockets-12.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2c71bd45a777433dd9113847af751aae36e448bc6b8c361a566cb043eda6ec30"}, + {file = "websockets-12.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0bee75f400895aef54157b36ed6d3b308fcab62e5260703add87f44cee9c82a6"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:423fc1ed29f7512fceb727e2d2aecb952c46aa34895e9ed96071821309951123"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27a5e9964ef509016759f2ef3f2c1e13f403725a5e6a1775555994966a66e931"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3181df4583c4d3994d31fb235dc681d2aaad744fbdbf94c4802485ececdecf2"}, + {file = "websockets-12.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b067cb952ce8bf40115f6c19f478dc71c5e719b7fbaa511359795dfd9d1a6468"}, + {file = "websockets-12.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:00700340c6c7ab788f176d118775202aadea7602c5cc6be6ae127761c16d6b0b"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e469d01137942849cff40517c97a30a93ae79917752b34029f0ec72df6b46399"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffefa1374cd508d633646d51a8e9277763a9b78ae71324183693959cf94635a7"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba0cab91b3956dfa9f512147860783a1829a8d905ee218a9837c18f683239611"}, + {file = "websockets-12.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2cb388a5bfb56df4d9a406783b7f9dbefb888c09b71629351cc6b036e9259370"}, + {file = "websockets-12.0-py3-none-any.whl", hash = "sha256:dc284bbc8d7c78a6c69e0c7325ab46ee5e40bb4d50e494d8131a07ef47500e9e"}, + {file = "websockets-12.0.tar.gz", hash = "sha256:81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b"}, +] + [[package]] name = "werkzeug" version = "3.0.1" @@ -5152,7 +5690,10 @@ files = [ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] +[extras] +cloud = ["qibo-cloud-backends"] + [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "c838fd7c31b971333870ae28c8168675d61500b0fbf4f869395f18bbf14ddfca" +content-hash = "fd58321f59a0824f6dbe6fc8de9db65ff1c9629c45503465aea27c62265cc00d" diff --git a/pyproject.toml b/pyproject.toml index 53d2843032..d618afc7cb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,6 +32,7 @@ numpy = "^1.26.4" networkx = "^3.2.1" cvxpy = { version = "^1.4.2", optional = true } tensorflow = { version = "^2.14.1,<2.16", markers = "sys_platform == 'linux' or sys_platform == 'darwin'", optional = true } +qibo-cloud-backends = { git = "https://github.com/qiboteam/qibo-cloud-backends.git", optional = true } [tool.poetry.group.dev] optional = true @@ -106,3 +107,6 @@ addopts = [ '--cov-report=html', '--durations=60', ] + +[tool.poetry.extras] +cloud = ["qibo-cloud-backends"] diff --git a/src/qibo/backends/__init__.py b/src/qibo/backends/__init__.py index 014bf0f8c3..85af683bfd 100644 --- a/src/qibo/backends/__init__.py +++ b/src/qibo/backends/__init__.py @@ -8,10 +8,11 @@ from qibo.config import log, raise_error -def construct_backend(backend, platform=None): +def construct_backend(backend, **kwargs): if backend == "qibojit": from qibojit.backends import CupyBackend, CuQuantumBackend, NumbaBackend + platform = kwargs.get("platform") if platform == "cupy": # pragma: no cover return CupyBackend() elif platform == "cuquantum": # pragma: no cover @@ -33,10 +34,21 @@ def construct_backend(backend, platform=None): elif backend == "qibolab": # pragma: no cover from qibolab.backends import QibolabBackend # pylint: disable=E0401 - return QibolabBackend(platform) + return QibolabBackend(**kwargs) elif backend == "clifford": - return CliffordBackend(platform) + return CliffordBackend(kwargs["platform"]) + elif backend == "qibo-cloud": # pragma: no cover + from qibo_cloud_backends.qibo_client import ( # pylint: disable=E0401 + QiboClientBackend, + ) + + return QiboClientBackend(**kwargs) + elif backend == "qiskit": # pragma: no cover + from qibo_cloud_backends.qiskit_client import ( # pylint: disable=E0401 + QiskitClientBackend, + ) + return QiskitClientBackend(**kwargs) else: # pragma: no cover raise_error(ValueError, f"Backend {backend} is not available.") @@ -61,7 +73,7 @@ def __new__(cls): if backend: # pragma: no cover # Create backend specified by user platform = os.environ.get("QIBO_PLATFORM") - cls._instance = construct_backend(backend, platform) + cls._instance = construct_backend(backend, platform=platform) else: # Create backend according to default order for kwargs in cls._default_order: @@ -78,13 +90,13 @@ def __new__(cls): return cls._instance @classmethod - def set_backend(cls, backend, platform=None): # pragma: no cover + def set_backend(cls, backend, **kwargs): # pragma: no cover if ( cls._instance is None or cls._instance.name != backend - or cls._instance.platform != platform + or cls._instance.platform != kwargs.get("platform") ): - cls._instance = construct_backend(backend, platform) + cls._instance = construct_backend(backend, **kwargs) log.info(f"Using {cls._instance} backend on {cls._instance.device}") @@ -124,8 +136,8 @@ def get_backend(): return str(GlobalBackend()) -def set_backend(backend, platform=None): - GlobalBackend.set_backend(backend, platform) +def set_backend(backend, **kwargs): + GlobalBackend.set_backend(backend, **kwargs) def get_precision(): diff --git a/src/qibo/models/circuit.py b/src/qibo/models/circuit.py index e15223f9ef..1da9fd0dd8 100644 --- a/src/qibo/models/circuit.py +++ b/src/qibo/models/circuit.py @@ -1248,13 +1248,13 @@ def read_args(args): yield name, int(index) # Remove comment lines - lines = "".join( - line for line in qasm_code.split("\n") if line and line[:2] != "//" - ) - lines = (line for line in lines.split(";") if line) + lines = [line for line in qasm_code.splitlines() if line and line[:2] != "//"] - if next(lines) != "OPENQASM 2.0": - raise_error(ValueError, "QASM code should start with 'OPENQASM 2.0'.") + if not re.search(r"^OPENQASM [0-9]+\.[0-9]+", lines[0]): + raise_error( + ValueError, + "QASM code should start with 'OPENQASM X.X' with X.X indicating the version.", + ) qubits = {} # Dict[Tuple[str, int], int]: map from qubit tuple to qubit id cregs_size = {} # Dict[str, int]: map from `creg` name to its size @@ -1264,11 +1264,14 @@ def read_args(args): gate_list = ( [] ) # List[Tuple[str, List[int]]]: List of (gate name, list of target qubit ids) - for line in lines: - command, args = line.split(None, 1) - # remove spaces - command = command.replace(" ", "") - args = args.replace(" ", "") + composite_gates = {} # composite gates created with the "gate" command + + def parse_line(line): + line = line.replace(r"/\s{2,}/g", " ").replace(r"^[\s]+", "") + command, *args = line.split(" ") + args = " ".join(args) + if args[-1] == ";": + args = args[:-1] if command == "include": pass @@ -1283,7 +1286,7 @@ def read_args(args): cregs_size[name] = nqubits elif command == "measure": - args = args.split("->") + args = args.replace(" ", "").split("->") if len(args) != 2: raise_error(ValueError, "Invalid QASM measurement:", line) qubit = next(read_args(args[0])) @@ -1316,6 +1319,39 @@ def read_args(args): registers[register] = {idx: qubits[qubit]} gate_list.append((gates.M, register, None)) + elif command == "gate": + _name, _qubits, *_ = args.split(" ") + _separate_gates = ( + re.search(r"\{(.*?)\}", args).group(0)[2:-2].split(";") + ) + _params = re.search(r"\((.*?)\)", _name) + _qubits = _qubits.split(",") + if _params: + _name = _name[: _params.start()] + _params = _params.group()[1:-1].split(",") + composite_gates[_name] = [] + for g in _separate_gates: + _g_name, _g_qubits = g.split(" ") + _g_params = re.search(r"\((.*?)\)", _g_name) + if _g_params and _params: + _g_name = _g_name[: _g_params.start()] + _g_params = [ + f"{{{_params.index(p)}}}" + for p in _g_params.group()[1:-1].split(",") + ] + else: + _g_params = None + _g_qubits = [ + f"{{{_qubits.index(q)}}}" for q in _g_qubits.split(",") + ] + pars = "" if not _g_params else f"({','.join(_g_params)})" + composite_gates[_name].append( + { + "gatename": _g_name, + "qubits": ",".join(_g_qubits), + "parameters": pars, + } + ) else: pieces = [x for x in re.split("[()]", command) if x] @@ -1331,10 +1367,25 @@ def read_args(args): }[gatename] ) except: - raise_error( - ValueError, - f"QASM command {command} is not recognized.", - ) + if gatename in composite_gates: + _q = line.split(" ")[-1].replace(";", "").split(",") + _p = ( + re.search(r"\((.*?)\)", line.split(" ")[0]) + .group(0) + .split(",") + if len(pieces) == 2 + else [] + ) + for g in composite_gates[gatename]: + parse_line( + f"{g['gatename']}{g['parameters'].format(*_p)} {g['qubits'].format(*_q)}" + ) + return + else: + raise_error( + ValueError, + f"QASM command {command} is not recognized.", + ) if len(pieces) == 1: params = None @@ -1384,6 +1435,22 @@ def read_args(args): qubit_list.append(qubits[qubit]) gate_list.append((gatetype, list(qubit_list), params)) + for line in lines: + line = ( + re.sub(r"^OPENQASM [0-9]+\.[0-9]+;*\s*", "", line) + .replace(r"/\s\s+/g", " ") + .replace(r"^[\s]+", "") + .replace("[\\s]+\n", "") + .replace("; ", ";") + .replace(", ", ",") + ) + _lines = [line] + if len(re.findall(";", line)) > 1 and not line.split(" ")[0] == "gate": + _lines = line.split(";")[:-1] + for l in _lines: + if l != "": + parse_line(l) + # Create measurement gate qubit lists from registers for i, (gatetype, register, _) in enumerate(gate_list): if gatetype == gates.M: diff --git a/tests/test_models_circuit_qasm.py b/tests/test_models_circuit_qasm.py index 83f6c6fe47..cdff01d307 100644 --- a/tests/test_models_circuit_qasm.py +++ b/tests/test_models_circuit_qasm.py @@ -529,7 +529,7 @@ def test_from_qasm_invalid_parametrized_gates(): def test_from_qasm_empty_spaces(): target = """OPENQASM 2.0; qreg q[2]; creg a[2]; h q[0];x q[1]; cx q[0], q[1]; -measure q[0] -> a[0];measure q[1]->a[1]""" +measure q[0] -> a[0];measure q[1]->a[1];""" c = Circuit.from_qasm(target) assert c.nqubits == 2 assert c.depth == 3 @@ -537,3 +537,26 @@ def test_from_qasm_empty_spaces(): assert isinstance(c.queue[1], gates.X) assert isinstance(c.queue[2], gates.CNOT) assert c.measurement_tuples == {"a": (0, 1)} + + +def test_from_qasm_gate_command(): + target = """OPENQASM 2.0; +include "qelib1.inc"; +gate bob(theta,alpha) q0,q1 { h q1; cx q0,q1; rz(theta) q1; rx(alpha) q0; h q1; } +gate alice q0,q1 { bob(pi/4,pi) q0,q1; x q0; bob(-pi/4,pi/2) q0,q1; } +qreg q[3]; +bob(-pi/2,pi) q[0],q[2]; +alice q[1],q[0];""" + c = Circuit.from_qasm(target) + for i in range(2): + assert isinstance(c.queue[0 + 5 * i], gates.H) + assert isinstance(c.queue[1 + 5 * i], gates.CNOT) + assert isinstance(c.queue[2 + 5 * i], gates.RZ) + assert isinstance(c.queue[3 + 5 * i], gates.RX) + assert isinstance(c.queue[4 + 5 * i], gates.H) + assert isinstance(c.queue[10], gates.X) + assert isinstance(c.queue[11], gates.H) + assert isinstance(c.queue[12], gates.CNOT) + assert isinstance(c.queue[13], gates.RZ) + assert isinstance(c.queue[14], gates.RX) + assert isinstance(c.queue[15], gates.H)