diff --git a/.github/workflows/run_tests.yaml b/.github/workflows/run_tests.yaml index d2222fb2..d79e6940 100644 --- a/.github/workflows/run_tests.yaml +++ b/.github/workflows/run_tests.yaml @@ -10,47 +10,14 @@ on: jobs: - Run-Tests-Ubuntu: - runs-on: ubuntu-latest - strategy: - matrix: - python-version: ["3.10", "3.11"] - - steps: - - - name: Checkout pytket-mbqc - uses: actions/checkout@v4 - - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python-version }} - cache: 'pip' - - - name: Install pytket-mbqc - run: pip install pytket-mbqc-py/ + Run-Tests: - - name: Run Tests - run: pytest --cov-report term-missing:skip-covered --cov=pytket-mbqc-py/pytket_mbqc_py/ pytket-mbqc-py/tests/ --durations=10 - - - name: Type Check - run: mypy pytket-mbqc-py/pytket_mbqc_py/ --warn-unused-ignores - - - name: Lint Check - uses: chartboost/ruff-action@v1 - with: - args: check - - - name: Format Check - uses: chartboost/ruff-action@v1 - with: - args: format --check - - Run-Tests-Mac: - runs-on: macos strategy: matrix: python-version: ["3.10", "3.11"] + os: [ubuntu-latest, macos-latest] + + runs-on: ${{ matrix.os }} steps: @@ -58,7 +25,7 @@ jobs: uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} cache: 'pip' @@ -73,11 +40,7 @@ jobs: run: mypy pytket-mbqc-py/pytket_mbqc_py/ --warn-unused-ignores - name: Lint Check - uses: chartboost/ruff-action@v1 - with: - args: check + run: ruff check - name: Format Check - uses: chartboost/ruff-action@v1 - with: - args: format --check + run: ruff format --check diff --git a/pytket-mbqc-py/poetry.lock b/pytket-mbqc-py/poetry.lock index cae17172..0c467bd9 100644 --- a/pytket-mbqc-py/poetry.lock +++ b/pytket-mbqc-py/poetry.lock @@ -383,13 +383,13 @@ files = [ [[package]] name = "comm" -version = "0.2.1" +version = "0.2.2" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." optional = false python-versions = ">=3.8" files = [ - {file = "comm-0.2.1-py3-none-any.whl", hash = "sha256:87928485c0dfc0e7976fd89fc1e187023cf587e7c353e4a9b417555b44adf021"}, - {file = "comm-0.2.1.tar.gz", hash = "sha256:0bc91edae1344d39d3661dcbc36937181fdaddb304790458f8b044dbc064b89a"}, + {file = "comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"}, + {file = "comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e"}, ] [package.dependencies] @@ -463,63 +463,63 @@ test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] [[package]] name = "coverage" -version = "7.4.3" +version = "7.4.4" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8580b827d4746d47294c0e0b92854c85a92c2227927433998f0d3320ae8a71b6"}, - {file = "coverage-7.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:718187eeb9849fc6cc23e0d9b092bc2348821c5e1a901c9f8975df0bc785bfd4"}, - {file = "coverage-7.4.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:767b35c3a246bcb55b8044fd3a43b8cd553dd1f9f2c1eeb87a302b1f8daa0524"}, - {file = "coverage-7.4.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae7f19afe0cce50039e2c782bff379c7e347cba335429678450b8fe81c4ef96d"}, - {file = "coverage-7.4.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba3a8aaed13770e970b3df46980cb068d1c24af1a1968b7818b69af8c4347efb"}, - {file = "coverage-7.4.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ee866acc0861caebb4f2ab79f0b94dbfbdbfadc19f82e6e9c93930f74e11d7a0"}, - {file = "coverage-7.4.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:506edb1dd49e13a2d4cac6a5173317b82a23c9d6e8df63efb4f0380de0fbccbc"}, - {file = "coverage-7.4.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd6545d97c98a192c5ac995d21c894b581f1fd14cf389be90724d21808b657e2"}, - {file = "coverage-7.4.3-cp310-cp310-win32.whl", hash = "sha256:f6a09b360d67e589236a44f0c39218a8efba2593b6abdccc300a8862cffc2f94"}, - {file = "coverage-7.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:18d90523ce7553dd0b7e23cbb28865db23cddfd683a38fb224115f7826de78d0"}, - {file = "coverage-7.4.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cbbe5e739d45a52f3200a771c6d2c7acf89eb2524890a4a3aa1a7fa0695d2a47"}, - {file = "coverage-7.4.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:489763b2d037b164846ebac0cbd368b8a4ca56385c4090807ff9fad817de4113"}, - {file = "coverage-7.4.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:451f433ad901b3bb00184d83fd83d135fb682d780b38af7944c9faeecb1e0bfe"}, - {file = "coverage-7.4.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fcc66e222cf4c719fe7722a403888b1f5e1682d1679bd780e2b26c18bb648cdc"}, - {file = "coverage-7.4.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3ec74cfef2d985e145baae90d9b1b32f85e1741b04cd967aaf9cfa84c1334f3"}, - {file = "coverage-7.4.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:abbbd8093c5229c72d4c2926afaee0e6e3140de69d5dcd918b2921f2f0c8baba"}, - {file = "coverage-7.4.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:35eb581efdacf7b7422af677b92170da4ef34500467381e805944a3201df2079"}, - {file = "coverage-7.4.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8249b1c7334be8f8c3abcaaa996e1e4927b0e5a23b65f5bf6cfe3180d8ca7840"}, - {file = "coverage-7.4.3-cp311-cp311-win32.whl", hash = "sha256:cf30900aa1ba595312ae41978b95e256e419d8a823af79ce670835409fc02ad3"}, - {file = "coverage-7.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:18c7320695c949de11a351742ee001849912fd57e62a706d83dfc1581897fa2e"}, - {file = "coverage-7.4.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b51bfc348925e92a9bd9b2e48dad13431b57011fd1038f08316e6bf1df107d10"}, - {file = "coverage-7.4.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d6cdecaedea1ea9e033d8adf6a0ab11107b49571bbb9737175444cea6eb72328"}, - {file = "coverage-7.4.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b2eccb883368f9e972e216c7b4c7c06cabda925b5f06dde0650281cb7666a30"}, - {file = "coverage-7.4.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c00cdc8fa4e50e1cc1f941a7f2e3e0f26cb2a1233c9696f26963ff58445bac7"}, - {file = "coverage-7.4.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9a4a8dd3dcf4cbd3165737358e4d7dfbd9d59902ad11e3b15eebb6393b0446e"}, - {file = "coverage-7.4.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:062b0a75d9261e2f9c6d071753f7eef0fc9caf3a2c82d36d76667ba7b6470003"}, - {file = "coverage-7.4.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:ebe7c9e67a2d15fa97b77ea6571ce5e1e1f6b0db71d1d5e96f8d2bf134303c1d"}, - {file = "coverage-7.4.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c0a120238dd71c68484f02562f6d446d736adcc6ca0993712289b102705a9a3a"}, - {file = "coverage-7.4.3-cp312-cp312-win32.whl", hash = "sha256:37389611ba54fd6d278fde86eb2c013c8e50232e38f5c68235d09d0a3f8aa352"}, - {file = "coverage-7.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:d25b937a5d9ffa857d41be042b4238dd61db888533b53bc76dc082cb5a15e914"}, - {file = "coverage-7.4.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:28ca2098939eabab044ad68850aac8f8db6bf0b29bc7f2887d05889b17346454"}, - {file = "coverage-7.4.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:280459f0a03cecbe8800786cdc23067a8fc64c0bd51dc614008d9c36e1659d7e"}, - {file = "coverage-7.4.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c0cdedd3500e0511eac1517bf560149764b7d8e65cb800d8bf1c63ebf39edd2"}, - {file = "coverage-7.4.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a9babb9466fe1da12417a4aed923e90124a534736de6201794a3aea9d98484e"}, - {file = "coverage-7.4.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dec9de46a33cf2dd87a5254af095a409ea3bf952d85ad339751e7de6d962cde6"}, - {file = "coverage-7.4.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:16bae383a9cc5abab9bb05c10a3e5a52e0a788325dc9ba8499e821885928968c"}, - {file = "coverage-7.4.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2c854ce44e1ee31bda4e318af1dbcfc929026d12c5ed030095ad98197eeeaed0"}, - {file = "coverage-7.4.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ce8c50520f57ec57aa21a63ea4f325c7b657386b3f02ccaedeccf9ebe27686e1"}, - {file = "coverage-7.4.3-cp38-cp38-win32.whl", hash = "sha256:708a3369dcf055c00ddeeaa2b20f0dd1ce664eeabde6623e516c5228b753654f"}, - {file = "coverage-7.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:1bf25fbca0c8d121a3e92a2a0555c7e5bc981aee5c3fdaf4bb7809f410f696b9"}, - {file = "coverage-7.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3b253094dbe1b431d3a4ac2f053b6d7ede2664ac559705a704f621742e034f1f"}, - {file = "coverage-7.4.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:77fbfc5720cceac9c200054b9fab50cb2a7d79660609200ab83f5db96162d20c"}, - {file = "coverage-7.4.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6679060424faa9c11808598504c3ab472de4531c571ab2befa32f4971835788e"}, - {file = "coverage-7.4.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4af154d617c875b52651dd8dd17a31270c495082f3d55f6128e7629658d63765"}, - {file = "coverage-7.4.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8640f1fde5e1b8e3439fe482cdc2b0bb6c329f4bb161927c28d2e8879c6029ee"}, - {file = "coverage-7.4.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:69b9f6f66c0af29642e73a520b6fed25ff9fd69a25975ebe6acb297234eda501"}, - {file = "coverage-7.4.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0842571634f39016a6c03e9d4aba502be652a6e4455fadb73cd3a3a49173e38f"}, - {file = "coverage-7.4.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a78ed23b08e8ab524551f52953a8a05d61c3a760781762aac49f8de6eede8c45"}, - {file = "coverage-7.4.3-cp39-cp39-win32.whl", hash = "sha256:c0524de3ff096e15fcbfe8f056fdb4ea0bf497d584454f344d59fce069d3e6e9"}, - {file = "coverage-7.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:0209a6369ccce576b43bb227dc8322d8ef9e323d089c6f3f26a597b09cb4d2aa"}, - {file = "coverage-7.4.3-pp38.pp39.pp310-none-any.whl", hash = "sha256:7cbde573904625509a3f37b6fecea974e363460b556a627c60dc2f47e2fffa51"}, - {file = "coverage-7.4.3.tar.gz", hash = "sha256:276f6077a5c61447a48d133ed13e759c09e62aff0dc84274a68dc18660104d52"}, + {file = "coverage-7.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0be5efd5127542ef31f165de269f77560d6cdef525fffa446de6f7e9186cfb2"}, + {file = "coverage-7.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ccd341521be3d1b3daeb41960ae94a5e87abe2f46f17224ba5d6f2b8398016cf"}, + {file = "coverage-7.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09fa497a8ab37784fbb20ab699c246053ac294d13fc7eb40ec007a5043ec91f8"}, + {file = "coverage-7.4.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b1a93009cb80730c9bca5d6d4665494b725b6e8e157c1cb7f2db5b4b122ea562"}, + {file = "coverage-7.4.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:690db6517f09336559dc0b5f55342df62370a48f5469fabf502db2c6d1cffcd2"}, + {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:09c3255458533cb76ef55da8cc49ffab9e33f083739c8bd4f58e79fecfe288f7"}, + {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8ce1415194b4a6bd0cdcc3a1dfbf58b63f910dcb7330fe15bdff542c56949f87"}, + {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b91cbc4b195444e7e258ba27ac33769c41b94967919f10037e6355e998af255c"}, + {file = "coverage-7.4.4-cp310-cp310-win32.whl", hash = "sha256:598825b51b81c808cb6f078dcb972f96af96b078faa47af7dfcdf282835baa8d"}, + {file = "coverage-7.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:09ef9199ed6653989ebbcaacc9b62b514bb63ea2f90256e71fea3ed74bd8ff6f"}, + {file = "coverage-7.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0f9f50e7ef2a71e2fae92774c99170eb8304e3fdf9c8c3c7ae9bab3e7229c5cf"}, + {file = "coverage-7.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:623512f8ba53c422fcfb2ce68362c97945095b864cda94a92edbaf5994201083"}, + {file = "coverage-7.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0513b9508b93da4e1716744ef6ebc507aff016ba115ffe8ecff744d1322a7b63"}, + {file = "coverage-7.4.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40209e141059b9370a2657c9b15607815359ab3ef9918f0196b6fccce8d3230f"}, + {file = "coverage-7.4.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a2b2b78c78293782fd3767d53e6474582f62443d0504b1554370bde86cc8227"}, + {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:73bfb9c09951125d06ee473bed216e2c3742f530fc5acc1383883125de76d9cd"}, + {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1f384c3cc76aeedce208643697fb3e8437604b512255de6d18dae3f27655a384"}, + {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:54eb8d1bf7cacfbf2a3186019bcf01d11c666bd495ed18717162f7eb1e9dd00b"}, + {file = "coverage-7.4.4-cp311-cp311-win32.whl", hash = "sha256:cac99918c7bba15302a2d81f0312c08054a3359eaa1929c7e4b26ebe41e9b286"}, + {file = "coverage-7.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:b14706df8b2de49869ae03a5ccbc211f4041750cd4a66f698df89d44f4bd30ec"}, + {file = "coverage-7.4.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:201bef2eea65e0e9c56343115ba3814e896afe6d36ffd37bab783261db430f76"}, + {file = "coverage-7.4.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:41c9c5f3de16b903b610d09650e5e27adbfa7f500302718c9ffd1c12cf9d6818"}, + {file = "coverage-7.4.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d898fe162d26929b5960e4e138651f7427048e72c853607f2b200909794ed978"}, + {file = "coverage-7.4.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ea79bb50e805cd6ac058dfa3b5c8f6c040cb87fe83de10845857f5535d1db70"}, + {file = "coverage-7.4.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce4b94265ca988c3f8e479e741693d143026632672e3ff924f25fab50518dd51"}, + {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:00838a35b882694afda09f85e469c96367daa3f3f2b097d846a7216993d37f4c"}, + {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:fdfafb32984684eb03c2d83e1e51f64f0906b11e64482df3c5db936ce3839d48"}, + {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:69eb372f7e2ece89f14751fbcbe470295d73ed41ecd37ca36ed2eb47512a6ab9"}, + {file = "coverage-7.4.4-cp312-cp312-win32.whl", hash = "sha256:137eb07173141545e07403cca94ab625cc1cc6bc4c1e97b6e3846270e7e1fea0"}, + {file = "coverage-7.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:d71eec7d83298f1af3326ce0ff1d0ea83c7cb98f72b577097f9083b20bdaf05e"}, + {file = "coverage-7.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d5ae728ff3b5401cc320d792866987e7e7e880e6ebd24433b70a33b643bb0384"}, + {file = "coverage-7.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cc4f1358cb0c78edef3ed237ef2c86056206bb8d9140e73b6b89fbcfcbdd40e1"}, + {file = "coverage-7.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8130a2aa2acb8788e0b56938786c33c7c98562697bf9f4c7d6e8e5e3a0501e4a"}, + {file = "coverage-7.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf271892d13e43bc2b51e6908ec9a6a5094a4df1d8af0bfc360088ee6c684409"}, + {file = "coverage-7.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a4cdc86d54b5da0df6d3d3a2f0b710949286094c3a6700c21e9015932b81447e"}, + {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ae71e7ddb7a413dd60052e90528f2f65270aad4b509563af6d03d53e979feafd"}, + {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:38dd60d7bf242c4ed5b38e094baf6401faa114fc09e9e6632374388a404f98e7"}, + {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aa5b1c1bfc28384f1f53b69a023d789f72b2e0ab1b3787aae16992a7ca21056c"}, + {file = "coverage-7.4.4-cp38-cp38-win32.whl", hash = "sha256:dfa8fe35a0bb90382837b238fff375de15f0dcdb9ae68ff85f7a63649c98527e"}, + {file = "coverage-7.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:b2991665420a803495e0b90a79233c1433d6ed77ef282e8e152a324bbbc5e0c8"}, + {file = "coverage-7.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3b799445b9f7ee8bf299cfaed6f5b226c0037b74886a4e11515e569b36fe310d"}, + {file = "coverage-7.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b4d33f418f46362995f1e9d4f3a35a1b6322cb959c31d88ae56b0298e1c22357"}, + {file = "coverage-7.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aadacf9a2f407a4688d700e4ebab33a7e2e408f2ca04dbf4aef17585389eff3e"}, + {file = "coverage-7.4.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c95949560050d04d46b919301826525597f07b33beba6187d04fa64d47ac82e"}, + {file = "coverage-7.4.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff7687ca3d7028d8a5f0ebae95a6e4827c5616b31a4ee1192bdfde697db110d4"}, + {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5fc1de20b2d4a061b3df27ab9b7c7111e9a710f10dc2b84d33a4ab25065994ec"}, + {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c74880fc64d4958159fbd537a091d2a585448a8f8508bf248d72112723974cbd"}, + {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:742a76a12aa45b44d236815d282b03cfb1de3b4323f3e4ec933acfae08e54ade"}, + {file = "coverage-7.4.4-cp39-cp39-win32.whl", hash = "sha256:d89d7b2974cae412400e88f35d86af72208e1ede1a541954af5d944a8ba46c57"}, + {file = "coverage-7.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:9ca28a302acb19b6af89e90f33ee3e1906961f94b54ea37de6737b7ca9d8827c"}, + {file = "coverage-7.4.4-pp38.pp39.pp310-none-any.whl", hash = "sha256:b2c5edc4ac10a7ef6605a966c58929ec6c1bd0917fb8c15cb3363f65aa40e677"}, + {file = "coverage-7.4.4.tar.gz", hash = "sha256:c901df83d097649e257e803be22592aedfd5182f07b3cc87d640bbb9afd50f49"}, ] [package.dependencies] @@ -597,6 +597,73 @@ files = [ docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] tests = ["pytest", "pytest-cov", "pytest-xdist"] +[[package]] +name = "cython" +version = "3.0.10" +description = "The Cython compiler for writing C extensions in the Python language." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +files = [ + {file = "Cython-3.0.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e876272548d73583e90babda94c1299537006cad7a34e515a06c51b41f8657aa"}, + {file = "Cython-3.0.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:adc377aa33c3309191e617bf675fdbb51ca727acb9dc1aa23fc698d8121f7e23"}, + {file = "Cython-3.0.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:401aba1869a57aba2922ccb656a6320447e55ace42709b504c2f8e8b166f46e1"}, + {file = "Cython-3.0.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:541fbe725d6534a90b93f8c577eb70924d664b227a4631b90a6e0506d1469591"}, + {file = "Cython-3.0.10-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:86998b01f6a6d48398df8467292c7637e57f7e3a2ca68655367f13f66fed7734"}, + {file = "Cython-3.0.10-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d092c0ddba7e9e530a5c5be4ac06db8360258acc27675d1fc86294a5dc8994c5"}, + {file = "Cython-3.0.10-cp310-cp310-win32.whl", hash = "sha256:3cffb666e649dba23810732497442fb339ee67ba4e0be1f0579991e83fcc2436"}, + {file = "Cython-3.0.10-cp310-cp310-win_amd64.whl", hash = "sha256:9ea31184c7b3a728ef1f81fccb161d8948c05aa86c79f63b74fb6f3ddec860ec"}, + {file = "Cython-3.0.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:051069638abfb076900b0c2bcb6facf545655b3f429e80dd14365192074af5a4"}, + {file = "Cython-3.0.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:712760879600907189c7d0d346851525545484e13cd8b787e94bfd293da8ccf0"}, + {file = "Cython-3.0.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38d40fa1324ac47c04483d151f5e092406a147eac88a18aec789cf01c089c3f2"}, + {file = "Cython-3.0.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5bd49a3a9fdff65446a3e1c2bfc0ec85c6ce4c3cad27cd4ad7ba150a62b7fb59"}, + {file = "Cython-3.0.10-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e8df79b596633b8295eaa48b1157d796775c2bb078f32267d32f3001b687f2fd"}, + {file = "Cython-3.0.10-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bcc9795990e525c192bc5c0775e441d7d56d7a7d02210451e9e13c0448dba51b"}, + {file = "Cython-3.0.10-cp311-cp311-win32.whl", hash = "sha256:09f2000041db482cad3bfce94e1fa3a4c82b0e57390a164c02566cbbda8c4f12"}, + {file = "Cython-3.0.10-cp311-cp311-win_amd64.whl", hash = "sha256:3919a55ec9b6c7db6f68a004c21c05ed540c40dbe459ced5d801d5a1f326a053"}, + {file = "Cython-3.0.10-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8f2864ab5fcd27a346f0b50f901ebeb8f60b25a60a575ccfd982e7f3e9674914"}, + {file = "Cython-3.0.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:407840c56385b9c085826fe300213e0e76ba15d1d47daf4b58569078ecb94446"}, + {file = "Cython-3.0.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a036d00caa73550a3a976432ef21c1e3fa12637e1616aab32caded35331ae96"}, + {file = "Cython-3.0.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9cc6a0e7e23a96dec3f3c9d39690d4281beabd5297855140d0d30855f950275e"}, + {file = "Cython-3.0.10-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a5e14a8c6a8157d2b0cdc2e8e3444905d20a0e78e19d2a097e89fb8b04b51f6b"}, + {file = "Cython-3.0.10-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f8a2b8fa0fd8358bccb5f3304be563c4750aae175100463d212d5ea0ec74cbe0"}, + {file = "Cython-3.0.10-cp312-cp312-win32.whl", hash = "sha256:2d29e617fd23cf4b83afe8f93f2966566c9f565918ad1e86a4502fe825cc0a79"}, + {file = "Cython-3.0.10-cp312-cp312-win_amd64.whl", hash = "sha256:6c5af936940a38c300977b81598d9c0901158f220a58c177820e17e1774f1cf1"}, + {file = "Cython-3.0.10-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:5f465443917d5c0f69825fca3b52b64c74ac3de0143b1fff6db8ba5b48c9fb4a"}, + {file = "Cython-3.0.10-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fadb84193c25641973666e583df8df4e27c52cdc05ddce7c6f6510d690ba34a"}, + {file = "Cython-3.0.10-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fa9e7786083b6aa61594c16979d621b62e61fcd9c2edd4761641b95c7fb34b2"}, + {file = "Cython-3.0.10-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4780d0f98ce28191c4d841c4358b5d5e79d96520650910cd59904123821c52d"}, + {file = "Cython-3.0.10-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:32fbad02d1189be75eb96456d9c73f5548078e5338d8fa153ecb0115b6ee279f"}, + {file = "Cython-3.0.10-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:90e2f514fc753b55245351305a399463103ec18666150bb1c36779b9862388e9"}, + {file = "Cython-3.0.10-cp36-cp36m-win32.whl", hash = "sha256:a9c976e9ec429539a4367cb4b24d15a1e46b925976f4341143f49f5f161171f5"}, + {file = "Cython-3.0.10-cp36-cp36m-win_amd64.whl", hash = "sha256:a9bb402674788a7f4061aeef8057632ec440123e74ed0fb425308a59afdfa10e"}, + {file = "Cython-3.0.10-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:206e803598010ecc3813db8748ed685f7beeca6c413f982df9f8a505fce56563"}, + {file = "Cython-3.0.10-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15b6d397f4ee5ad54e373589522af37935a32863f1b23fa8c6922adf833e28e2"}, + {file = "Cython-3.0.10-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a181144c2f893ed8e6a994d43d0b96300bc99873f21e3b7334ca26c61c37b680"}, + {file = "Cython-3.0.10-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b74b700d6a793113d03fb54b63bdbadba6365379424bac7c0470605672769260"}, + {file = "Cython-3.0.10-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:076e9fd4e0ca33c5fa00a7479180dbfb62f17fe928e2909f82da814536e96d2b"}, + {file = "Cython-3.0.10-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:269f06e6961e8591d56e30b46e1a51b6ccb42cab04c29fa3b30d3e8723485fb4"}, + {file = "Cython-3.0.10-cp37-cp37m-win32.whl", hash = "sha256:d4e83a8ceff7af60064da4ccfce0ac82372544dd5392f1b350c34f1b04d0fae6"}, + {file = "Cython-3.0.10-cp37-cp37m-win_amd64.whl", hash = "sha256:40fac59c3a7fbcd9c25aea64c342c890a5e2270ce64a1525e840807800167799"}, + {file = "Cython-3.0.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f43a58bf2434870d2fc42ac2e9ff8138c9e00c6251468de279d93fa279e9ba3b"}, + {file = "Cython-3.0.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e9a885ec63d3955a08cefc4eec39fefa9fe14989c6e5e2382bd4aeb6bdb9bc3"}, + {file = "Cython-3.0.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acfbe0fff364d54906058fc61f2393f38cd7fa07d344d80923937b87e339adcf"}, + {file = "Cython-3.0.10-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8adcde00a8a88fab27509b558cd8c2959ab0c70c65d3814cfea8c68b83fa6dcd"}, + {file = "Cython-3.0.10-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2c9c1e3e78909488f3b16fabae02308423fa6369ed96ab1e250807d344cfffd7"}, + {file = "Cython-3.0.10-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fc6e0faf5b57523b073f0cdefadcaef3a51235d519a0594865925cadb3aeadf0"}, + {file = "Cython-3.0.10-cp38-cp38-win32.whl", hash = "sha256:35f6ede7c74024ed1982832ae61c9fad7cf60cc3f5b8c6a63bb34e38bc291936"}, + {file = "Cython-3.0.10-cp38-cp38-win_amd64.whl", hash = "sha256:950c0c7b770d2a7cec74fb6f5ccc321d0b51d151f48c075c0d0db635a60ba1b5"}, + {file = "Cython-3.0.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:077b61ee789e48700e25d4a16daa4258b8e65167136e457174df400cf9b4feab"}, + {file = "Cython-3.0.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64f1f8bba9d8f37c0cffc934792b4ac7c42d0891077127c11deebe9fa0a0f7e4"}, + {file = "Cython-3.0.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:651a15a8534ebfb9b58cb0b87c269c70984b6f9c88bfe65e4f635f0e3f07dfcd"}, + {file = "Cython-3.0.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d10fc9aa82e5e53a0b7fd118f9771199cddac8feb4a6d8350b7d4109085aa775"}, + {file = "Cython-3.0.10-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4f610964ab252a83e573a427e28b103e2f1dd3c23bee54f32319f9e73c3c5499"}, + {file = "Cython-3.0.10-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8c9c4c4f3ab8f8c02817b0e16e8fa7b8cc880f76e9b63fe9c010e60c1a6c2b13"}, + {file = "Cython-3.0.10-cp39-cp39-win32.whl", hash = "sha256:0bac3ccdd4e03924028220c62ae3529e17efa8ca7e9df9330de95de02f582b26"}, + {file = "Cython-3.0.10-cp39-cp39-win_amd64.whl", hash = "sha256:81f356c1c8c0885b8435bfc468025f545c5d764aa9c75ab662616dd1193c331e"}, + {file = "Cython-3.0.10-py2.py3-none-any.whl", hash = "sha256:fcbb679c0b43514d591577fd0d20021c55c240ca9ccafbdb82d3fb95e5edfee2"}, + {file = "Cython-3.0.10.tar.gz", hash = "sha256:dcc96739331fb854dcf503f94607576cfe8488066c61ca50dfd55836f132de99"}, +] + [[package]] name = "debugpy" version = "1.8.1" @@ -705,53 +772,53 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "fonttools" -version = "4.49.0" +version = "4.50.0" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.49.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d970ecca0aac90d399e458f0b7a8a597e08f95de021f17785fb68e2dc0b99717"}, - {file = "fonttools-4.49.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac9a745b7609f489faa65e1dc842168c18530874a5f5b742ac3dd79e26bca8bc"}, - {file = "fonttools-4.49.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ba0e00620ca28d4ca11fc700806fd69144b463aa3275e1b36e56c7c09915559"}, - {file = "fonttools-4.49.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdee3ab220283057e7840d5fb768ad4c2ebe65bdba6f75d5d7bf47f4e0ed7d29"}, - {file = "fonttools-4.49.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ce7033cb61f2bb65d8849658d3786188afd80f53dad8366a7232654804529532"}, - {file = "fonttools-4.49.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:07bc5ea02bb7bc3aa40a1eb0481ce20e8d9b9642a9536cde0218290dd6085828"}, - {file = "fonttools-4.49.0-cp310-cp310-win32.whl", hash = "sha256:86eef6aab7fd7c6c8545f3ebd00fd1d6729ca1f63b0cb4d621bccb7d1d1c852b"}, - {file = "fonttools-4.49.0-cp310-cp310-win_amd64.whl", hash = "sha256:1fac1b7eebfce75ea663e860e7c5b4a8831b858c17acd68263bc156125201abf"}, - {file = "fonttools-4.49.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:edc0cce355984bb3c1d1e89d6a661934d39586bb32191ebff98c600f8957c63e"}, - {file = "fonttools-4.49.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:83a0d9336de2cba86d886507dd6e0153df333ac787377325a39a2797ec529814"}, - {file = "fonttools-4.49.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36c8865bdb5cfeec88f5028e7e592370a0657b676c6f1d84a2108e0564f90e22"}, - {file = "fonttools-4.49.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33037d9e56e2562c710c8954d0f20d25b8386b397250d65581e544edc9d6b942"}, - {file = "fonttools-4.49.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8fb022d799b96df3eaa27263e9eea306bd3d437cc9aa981820850281a02b6c9a"}, - {file = "fonttools-4.49.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33c584c0ef7dc54f5dd4f84082eabd8d09d1871a3d8ca2986b0c0c98165f8e86"}, - {file = "fonttools-4.49.0-cp311-cp311-win32.whl", hash = "sha256:cbe61b158deb09cffdd8540dc4a948d6e8f4d5b4f3bf5cd7db09bd6a61fee64e"}, - {file = "fonttools-4.49.0-cp311-cp311-win_amd64.whl", hash = "sha256:fc11e5114f3f978d0cea7e9853627935b30d451742eeb4239a81a677bdee6bf6"}, - {file = "fonttools-4.49.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d647a0e697e5daa98c87993726da8281c7233d9d4ffe410812a4896c7c57c075"}, - {file = "fonttools-4.49.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f3bbe672df03563d1f3a691ae531f2e31f84061724c319652039e5a70927167e"}, - {file = "fonttools-4.49.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bebd91041dda0d511b0d303180ed36e31f4f54b106b1259b69fade68413aa7ff"}, - {file = "fonttools-4.49.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4145f91531fd43c50f9eb893faa08399816bb0b13c425667c48475c9f3a2b9b5"}, - {file = "fonttools-4.49.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ea329dafb9670ffbdf4dbc3b0e5c264104abcd8441d56de77f06967f032943cb"}, - {file = "fonttools-4.49.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c076a9e548521ecc13d944b1d261ff3d7825048c338722a4bd126d22316087b7"}, - {file = "fonttools-4.49.0-cp312-cp312-win32.whl", hash = "sha256:b607ea1e96768d13be26d2b400d10d3ebd1456343eb5eaddd2f47d1c4bd00880"}, - {file = "fonttools-4.49.0-cp312-cp312-win_amd64.whl", hash = "sha256:a974c49a981e187381b9cc2c07c6b902d0079b88ff01aed34695ec5360767034"}, - {file = "fonttools-4.49.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b85ec0bdd7bdaa5c1946398cbb541e90a6dfc51df76dfa88e0aaa41b335940cb"}, - {file = "fonttools-4.49.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:af20acbe198a8a790618ee42db192eb128afcdcc4e96d99993aca0b60d1faeb4"}, - {file = "fonttools-4.49.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d418b1fee41a1d14931f7ab4b92dc0bc323b490e41d7a333eec82c9f1780c75"}, - {file = "fonttools-4.49.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b44a52b8e6244b6548851b03b2b377a9702b88ddc21dcaf56a15a0393d425cb9"}, - {file = "fonttools-4.49.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7c7125068e04a70739dad11857a4d47626f2b0bd54de39e8622e89701836eabd"}, - {file = "fonttools-4.49.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:29e89d0e1a7f18bc30f197cfadcbef5a13d99806447c7e245f5667579a808036"}, - {file = "fonttools-4.49.0-cp38-cp38-win32.whl", hash = "sha256:9d95fa0d22bf4f12d2fb7b07a46070cdfc19ef5a7b1c98bc172bfab5bf0d6844"}, - {file = "fonttools-4.49.0-cp38-cp38-win_amd64.whl", hash = "sha256:768947008b4dc552d02772e5ebd49e71430a466e2373008ce905f953afea755a"}, - {file = "fonttools-4.49.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:08877e355d3dde1c11973bb58d4acad1981e6d1140711230a4bfb40b2b937ccc"}, - {file = "fonttools-4.49.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fdb54b076f25d6b0f0298dc706acee5052de20c83530fa165b60d1f2e9cbe3cb"}, - {file = "fonttools-4.49.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0af65c720520710cc01c293f9c70bd69684365c6015cc3671db2b7d807fe51f2"}, - {file = "fonttools-4.49.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f255ce8ed7556658f6d23f6afd22a6d9bbc3edb9b96c96682124dc487e1bf42"}, - {file = "fonttools-4.49.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d00af0884c0e65f60dfaf9340e26658836b935052fdd0439952ae42e44fdd2be"}, - {file = "fonttools-4.49.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:263832fae27481d48dfafcc43174644b6706639661e242902ceb30553557e16c"}, - {file = "fonttools-4.49.0-cp39-cp39-win32.whl", hash = "sha256:0404faea044577a01bb82d47a8fa4bc7a54067fa7e324785dd65d200d6dd1133"}, - {file = "fonttools-4.49.0-cp39-cp39-win_amd64.whl", hash = "sha256:b050d362df50fc6e38ae3954d8c29bf2da52be384649ee8245fdb5186b620836"}, - {file = "fonttools-4.49.0-py3-none-any.whl", hash = "sha256:af281525e5dd7fa0b39fb1667b8d5ca0e2a9079967e14c4bfe90fd1cd13e0f18"}, - {file = "fonttools-4.49.0.tar.gz", hash = "sha256:ebf46e7f01b7af7861310417d7c49591a85d99146fc23a5ba82fdb28af156321"}, + {file = "fonttools-4.50.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:effd303fb422f8ce06543a36ca69148471144c534cc25f30e5be752bc4f46736"}, + {file = "fonttools-4.50.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7913992ab836f621d06aabac118fc258b9947a775a607e1a737eb3a91c360335"}, + {file = "fonttools-4.50.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e0a1c5bd2f63da4043b63888534b52c5a1fd7ae187c8ffc64cbb7ae475b9dab"}, + {file = "fonttools-4.50.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d40fc98540fa5360e7ecf2c56ddf3c6e7dd04929543618fd7b5cc76e66390562"}, + {file = "fonttools-4.50.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9fff65fbb7afe137bac3113827855e0204482727bddd00a806034ab0d3951d0d"}, + {file = "fonttools-4.50.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1aeae3dd2ee719074a9372c89ad94f7c581903306d76befdaca2a559f802472"}, + {file = "fonttools-4.50.0-cp310-cp310-win32.whl", hash = "sha256:e9623afa319405da33b43c85cceb0585a6f5d3a1d7c604daf4f7e1dd55c03d1f"}, + {file = "fonttools-4.50.0-cp310-cp310-win_amd64.whl", hash = "sha256:778c5f43e7e654ef7fe0605e80894930bc3a7772e2f496238e57218610140f54"}, + {file = "fonttools-4.50.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3dfb102e7f63b78c832e4539969167ffcc0375b013080e6472350965a5fe8048"}, + {file = "fonttools-4.50.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9e58fe34cb379ba3d01d5d319d67dd3ce7ca9a47ad044ea2b22635cd2d1247fc"}, + {file = "fonttools-4.50.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c673ab40d15a442a4e6eb09bf007c1dda47c84ac1e2eecbdf359adacb799c24"}, + {file = "fonttools-4.50.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b3ac35cdcd1a4c90c23a5200212c1bb74fa05833cc7c14291d7043a52ca2aaa"}, + {file = "fonttools-4.50.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8844e7a2c5f7ecf977e82eb6b3014f025c8b454e046d941ece05b768be5847ae"}, + {file = "fonttools-4.50.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f849bd3c5c2249b49c98eca5aaebb920d2bfd92b3c69e84ca9bddf133e9f83f0"}, + {file = "fonttools-4.50.0-cp311-cp311-win32.whl", hash = "sha256:39293ff231b36b035575e81c14626dfc14407a20de5262f9596c2cbb199c3625"}, + {file = "fonttools-4.50.0-cp311-cp311-win_amd64.whl", hash = "sha256:c33d5023523b44d3481624f840c8646656a1def7630ca562f222eb3ead16c438"}, + {file = "fonttools-4.50.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b4a886a6dbe60100ba1cd24de962f8cd18139bd32808da80de1fa9f9f27bf1dc"}, + {file = "fonttools-4.50.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b2ca1837bfbe5eafa11313dbc7edada79052709a1fffa10cea691210af4aa1fa"}, + {file = "fonttools-4.50.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0493dd97ac8977e48ffc1476b932b37c847cbb87fd68673dee5182004906828"}, + {file = "fonttools-4.50.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77844e2f1b0889120b6c222fc49b2b75c3d88b930615e98893b899b9352a27ea"}, + {file = "fonttools-4.50.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3566bfb8c55ed9100afe1ba6f0f12265cd63a1387b9661eb6031a1578a28bad1"}, + {file = "fonttools-4.50.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:35e10ddbc129cf61775d58a14f2d44121178d89874d32cae1eac722e687d9019"}, + {file = "fonttools-4.50.0-cp312-cp312-win32.whl", hash = "sha256:cc8140baf9fa8f9b903f2b393a6c413a220fa990264b215bf48484f3d0bf8710"}, + {file = "fonttools-4.50.0-cp312-cp312-win_amd64.whl", hash = "sha256:0ccc85fd96373ab73c59833b824d7a73846670a0cb1f3afbaee2b2c426a8f931"}, + {file = "fonttools-4.50.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e270a406219af37581d96c810172001ec536e29e5593aa40d4c01cca3e145aa6"}, + {file = "fonttools-4.50.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac2463de667233372e9e1c7e9de3d914b708437ef52a3199fdbf5a60184f190c"}, + {file = "fonttools-4.50.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47abd6669195abe87c22750dbcd366dc3a0648f1b7c93c2baa97429c4dc1506e"}, + {file = "fonttools-4.50.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:074841375e2e3d559aecc86e1224caf78e8b8417bb391e7d2506412538f21adc"}, + {file = "fonttools-4.50.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0743fd2191ad7ab43d78cd747215b12033ddee24fa1e088605a3efe80d6984de"}, + {file = "fonttools-4.50.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3d7080cce7be5ed65bee3496f09f79a82865a514863197ff4d4d177389e981b0"}, + {file = "fonttools-4.50.0-cp38-cp38-win32.whl", hash = "sha256:a467ba4e2eadc1d5cc1a11d355abb945f680473fbe30d15617e104c81f483045"}, + {file = "fonttools-4.50.0-cp38-cp38-win_amd64.whl", hash = "sha256:f77e048f805e00870659d6318fd89ef28ca4ee16a22b4c5e1905b735495fc422"}, + {file = "fonttools-4.50.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b6245eafd553c4e9a0708e93be51392bd2288c773523892fbd616d33fd2fda59"}, + {file = "fonttools-4.50.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a4062cc7e8de26f1603323ef3ae2171c9d29c8a9f5e067d555a2813cd5c7a7e0"}, + {file = "fonttools-4.50.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34692850dfd64ba06af61e5791a441f664cb7d21e7b544e8f385718430e8f8e4"}, + {file = "fonttools-4.50.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:678dd95f26a67e02c50dcb5bf250f95231d455642afbc65a3b0bcdacd4e4dd38"}, + {file = "fonttools-4.50.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4f2ce7b0b295fe64ac0a85aef46a0f2614995774bd7bc643b85679c0283287f9"}, + {file = "fonttools-4.50.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d346f4dc2221bfb7ab652d1e37d327578434ce559baf7113b0f55768437fe6a0"}, + {file = "fonttools-4.50.0-cp39-cp39-win32.whl", hash = "sha256:a51eeaf52ba3afd70bf489be20e52fdfafe6c03d652b02477c6ce23c995222f4"}, + {file = "fonttools-4.50.0-cp39-cp39-win_amd64.whl", hash = "sha256:8639be40d583e5d9da67795aa3eeeda0488fb577a1d42ae11a5036f18fb16d93"}, + {file = "fonttools-4.50.0-py3-none-any.whl", hash = "sha256:48fa36da06247aa8282766cfd63efff1bb24e55f020f29a335939ed3844d20d3"}, + {file = "fonttools-4.50.0.tar.gz", hash = "sha256:fa5cf61058c7dbb104c2ac4e782bf1b2016a8cf2f69de6e4dd6a865d2c969bb5"}, ] [package.extras] @@ -781,19 +848,19 @@ files = [ [[package]] name = "graphviz" -version = "0.20.1" +version = "0.20.3" description = "Simple Python interface for Graphviz" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "graphviz-0.20.1-py3-none-any.whl", hash = "sha256:587c58a223b51611c0cf461132da386edd896a029524ca61a1462b880bf97977"}, - {file = "graphviz-0.20.1.zip", hash = "sha256:8c58f14adaa3b947daf26c19bc1e98c4e0702cdc31cf99153e6f06904d492bf8"}, + {file = "graphviz-0.20.3-py3-none-any.whl", hash = "sha256:81f848f2904515d8cd359cc611faba817598d2feaac4027b266aa3eda7b3dde5"}, + {file = "graphviz-0.20.3.zip", hash = "sha256:09d6bc81e6a9fa392e7ba52135a9d49f1ed62526f96499325930e87ca1b5925d"}, ] [package.extras] dev = ["flake8", "pep8-naming", "tox (>=3)", "twine", "wheel"] -docs = ["sphinx (>=5)", "sphinx-autodoc-typehints", "sphinx-rtd-theme"] -test = ["coverage", "mock (>=4)", "pytest (>=7)", "pytest-cov", "pytest-mock (>=3)"] +docs = ["sphinx (>=5,<7)", "sphinx-autodoc-typehints", "sphinx-rtd-theme"] +test = ["coverage", "pytest (>=7,<8.1)", "pytest-cov", "pytest-mock (>=3)"] [[package]] name = "idna" @@ -808,18 +875,18 @@ files = [ [[package]] name = "importlib-resources" -version = "6.1.2" +version = "6.4.0" description = "Read resources from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.1.2-py3-none-any.whl", hash = "sha256:9a0a862501dc38b68adebc82970140c9e4209fc99601782925178f8386339938"}, - {file = "importlib_resources-6.1.2.tar.gz", hash = "sha256:308abf8474e2dba5f867d279237cd4076482c3de7104a40b41426370e891549b"}, + {file = "importlib_resources-6.4.0-py3-none-any.whl", hash = "sha256:50d10f043df931902d4194ea07ec57960f66a80449ff867bfe782b4c486ba78c"}, + {file = "importlib_resources-6.4.0.tar.gz", hash = "sha256:cdb2b453b8046ca4e3798eb1d84f3cce1446a0e8e7b5ef4efb600f19fc398145"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "zipp (>=3.17)"] +testing = ["jaraco.test (>=5.4)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "zipp (>=3.17)"] [[package]] name = "iniconfig" @@ -834,13 +901,13 @@ files = [ [[package]] name = "ipykernel" -version = "6.29.3" +version = "6.29.4" description = "IPython Kernel for Jupyter" optional = false python-versions = ">=3.8" files = [ - {file = "ipykernel-6.29.3-py3-none-any.whl", hash = "sha256:5aa086a4175b0229d4eca211e181fb473ea78ffd9869af36ba7694c947302a21"}, - {file = "ipykernel-6.29.3.tar.gz", hash = "sha256:e14c250d1f9ea3989490225cc1a542781b095a18a19447fcf2b5eaf7d0ac5bd2"}, + {file = "ipykernel-6.29.4-py3-none-any.whl", hash = "sha256:1181e653d95c6808039c509ef8e67c4126b3b3af7781496c7cbfb5ed938a27da"}, + {file = "ipykernel-6.29.4.tar.gz", hash = "sha256:3d44070060f9475ac2092b760123fadf105d2e2493c24848b6691a7c4f42af5c"}, ] [package.dependencies] @@ -867,13 +934,13 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio [[package]] name = "ipython" -version = "8.22.2" +version = "8.23.0" description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.10" files = [ - {file = "ipython-8.22.2-py3-none-any.whl", hash = "sha256:3c86f284c8f3d8f2b6c662f885c4889a91df7cd52056fd02b7d8d6195d7f56e9"}, - {file = "ipython-8.22.2.tar.gz", hash = "sha256:2dcaad9049f9056f1fef63514f176c7d41f930daa78d05b82a176202818f2c14"}, + {file = "ipython-8.23.0-py3-none-any.whl", hash = "sha256:07232af52a5ba146dc3372c7bf52a0f890a23edf38d77caef8d53f9cdc2584c1"}, + {file = "ipython-8.23.0.tar.gz", hash = "sha256:7468edaf4f6de3e1b912e57f66c241e6fd3c7099f2ec2136e239e142e800274d"}, ] [package.dependencies] @@ -887,12 +954,14 @@ prompt-toolkit = ">=3.0.41,<3.1.0" pygments = ">=2.4.0" stack-data = "*" traitlets = ">=5.13.0" +typing-extensions = {version = "*", markers = "python_version < \"3.12\""} [package.extras] -all = ["ipython[black,doc,kernel,nbconvert,nbformat,notebook,parallel,qtconsole,terminal]", "ipython[test,test-extra]"] +all = ["ipython[black,doc,kernel,matplotlib,nbconvert,nbformat,notebook,parallel,qtconsole]", "ipython[test,test-extra]"] black = ["black"] doc = ["docrepr", "exceptiongroup", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinxcontrib-jquery", "stack-data", "typing-extensions"] kernel = ["ipykernel"] +matplotlib = ["matplotlib"] nbconvert = ["nbconvert"] nbformat = ["nbformat"] notebook = ["ipywidgets", "notebook"] @@ -1042,13 +1111,13 @@ test = ["codecov", "coverage", "ipykernel (>=6.12)", "ipython", "mypy", "pre-com [[package]] name = "jupyter-core" -version = "5.7.1" +version = "5.7.2" description = "Jupyter core package. A base package on which Jupyter projects rely." optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_core-5.7.1-py3-none-any.whl", hash = "sha256:c65c82126453a723a2804aa52409930434598fd9d35091d63dfb919d2b765bb7"}, - {file = "jupyter_core-5.7.1.tar.gz", hash = "sha256:de61a9d7fc71240f688b2fb5ab659fbb56979458dc66a71decd098e03c79e218"}, + {file = "jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"}, + {file = "jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9"}, ] [package.dependencies] @@ -1058,17 +1127,17 @@ traitlets = ">=5.3" [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] -test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] +test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout"] [[package]] name = "jupyter-events" -version = "0.9.0" +version = "0.10.0" description = "Jupyter Event System library" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_events-0.9.0-py3-none-any.whl", hash = "sha256:d853b3c10273ff9bc8bb8b30076d65e2c9685579db736873de6c2232dde148bf"}, - {file = "jupyter_events-0.9.0.tar.gz", hash = "sha256:81ad2e4bc710881ec274d31c6c50669d71bbaa5dd9d01e600b56faa85700d399"}, + {file = "jupyter_events-0.10.0-py3-none-any.whl", hash = "sha256:4b72130875e59d57716d327ea70d3ebc3af1944d3717e5a498b8a06c6c159960"}, + {file = "jupyter_events-0.10.0.tar.gz", hash = "sha256:670b8229d3cc882ec782144ed22e0d29e1c2d639263f92ca8383e66682845e22"}, ] [package.dependencies] @@ -1123,13 +1192,13 @@ test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-sc [[package]] name = "jupyter-server-terminals" -version = "0.5.2" +version = "0.5.3" description = "A Jupyter Server Extension Providing Terminals." optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_server_terminals-0.5.2-py3-none-any.whl", hash = "sha256:1b80c12765da979513c42c90215481bbc39bd8ae7c0350b4f85bc3eb58d0fa80"}, - {file = "jupyter_server_terminals-0.5.2.tar.gz", hash = "sha256:396b5ccc0881e550bf0ee7012c6ef1b53edbde69e67cab1d56e89711b46052e8"}, + {file = "jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa"}, + {file = "jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269"}, ] [package.dependencies] @@ -1476,13 +1545,13 @@ tests = ["pytest (>=4.6)"] [[package]] name = "msal" -version = "1.27.0" +version = "1.28.0" description = "The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of users with Microsoft Azure Active Directory accounts (AAD) and Microsoft Accounts (MSA) using industry standard OAuth2 and OpenID Connect." optional = false -python-versions = ">=2.7" +python-versions = ">=3.7" files = [ - {file = "msal-1.27.0-py2.py3-none-any.whl", hash = "sha256:572d07149b83e7343a85a3bcef8e581167b4ac76befcbbb6eef0c0e19643cdc0"}, - {file = "msal-1.27.0.tar.gz", hash = "sha256:3109503c038ba6b307152b0e8d34f98113f2e7a78986e28d0baf5b5303afda52"}, + {file = "msal-1.28.0-py3-none-any.whl", hash = "sha256:3064f80221a21cd535ad8c3fafbb3a3582cd9c7e9af0bb789ae14f726a0ca99b"}, + {file = "msal-1.28.0.tar.gz", hash = "sha256:80bbabe34567cb734efd2ec1869b2d98195c927455369d8077b3c542088c5c9d"}, ] [package.dependencies] @@ -1495,38 +1564,38 @@ broker = ["pymsalruntime (>=0.13.2,<0.15)"] [[package]] name = "mypy" -version = "1.8.0" +version = "1.9.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:485a8942f671120f76afffff70f259e1cd0f0cfe08f81c05d8816d958d4577d3"}, - {file = "mypy-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:df9824ac11deaf007443e7ed2a4a26bebff98d2bc43c6da21b2b64185da011c4"}, - {file = "mypy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2afecd6354bbfb6e0160f4e4ad9ba6e4e003b767dd80d85516e71f2e955ab50d"}, - {file = "mypy-1.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8963b83d53ee733a6e4196954502b33567ad07dfd74851f32be18eb932fb1cb9"}, - {file = "mypy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:e46f44b54ebddbeedbd3d5b289a893219065ef805d95094d16a0af6630f5d410"}, - {file = "mypy-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:855fe27b80375e5c5878492f0729540db47b186509c98dae341254c8f45f42ae"}, - {file = "mypy-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4c886c6cce2d070bd7df4ec4a05a13ee20c0aa60cb587e8d1265b6c03cf91da3"}, - {file = "mypy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d19c413b3c07cbecf1f991e2221746b0d2a9410b59cb3f4fb9557f0365a1a817"}, - {file = "mypy-1.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9261ed810972061388918c83c3f5cd46079d875026ba97380f3e3978a72f503d"}, - {file = "mypy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:51720c776d148bad2372ca21ca29256ed483aa9a4cdefefcef49006dff2a6835"}, - {file = "mypy-1.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:52825b01f5c4c1c4eb0db253ec09c7aa17e1a7304d247c48b6f3599ef40db8bd"}, - {file = "mypy-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f5ac9a4eeb1ec0f1ccdc6f326bcdb464de5f80eb07fb38b5ddd7b0de6bc61e55"}, - {file = "mypy-1.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afe3fe972c645b4632c563d3f3eff1cdca2fa058f730df2b93a35e3b0c538218"}, - {file = "mypy-1.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:42c6680d256ab35637ef88891c6bd02514ccb7e1122133ac96055ff458f93fc3"}, - {file = "mypy-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:720a5ca70e136b675af3af63db533c1c8c9181314d207568bbe79051f122669e"}, - {file = "mypy-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:028cf9f2cae89e202d7b6593cd98db6759379f17a319b5faf4f9978d7084cdc6"}, - {file = "mypy-1.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4e6d97288757e1ddba10dd9549ac27982e3e74a49d8d0179fc14d4365c7add66"}, - {file = "mypy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f1478736fcebb90f97e40aff11a5f253af890c845ee0c850fe80aa060a267c6"}, - {file = "mypy-1.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42419861b43e6962a649068a61f4a4839205a3ef525b858377a960b9e2de6e0d"}, - {file = "mypy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:2b5b6c721bd4aabaadead3a5e6fa85c11c6c795e0c81a7215776ef8afc66de02"}, - {file = "mypy-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5c1538c38584029352878a0466f03a8ee7547d7bd9f641f57a0f3017a7c905b8"}, - {file = "mypy-1.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ef4be7baf08a203170f29e89d79064463b7fc7a0908b9d0d5114e8009c3a259"}, - {file = "mypy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178def594014aa6c35a8ff411cf37d682f428b3b5617ca79029d8ae72f5402b"}, - {file = "mypy-1.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ab3c84fa13c04aeeeabb2a7f67a25ef5d77ac9d6486ff33ded762ef353aa5592"}, - {file = "mypy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:99b00bc72855812a60d253420d8a2eae839b0afa4938f09f4d2aa9bb4654263a"}, - {file = "mypy-1.8.0-py3-none-any.whl", hash = "sha256:538fd81bb5e430cc1381a443971c0475582ff9f434c16cd46d2c66763ce85d9d"}, - {file = "mypy-1.8.0.tar.gz", hash = "sha256:6ff8b244d7085a0b425b56d327b480c3b29cafbd2eff27316a004f9a7391ae07"}, + {file = "mypy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f8a67616990062232ee4c3952f41c779afac41405806042a8126fe96e098419f"}, + {file = "mypy-1.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d357423fa57a489e8c47b7c85dfb96698caba13d66e086b412298a1a0ea3b0ed"}, + {file = "mypy-1.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49c87c15aed320de9b438ae7b00c1ac91cd393c1b854c2ce538e2a72d55df150"}, + {file = "mypy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:48533cdd345c3c2e5ef48ba3b0d3880b257b423e7995dada04248725c6f77374"}, + {file = "mypy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:4d3dbd346cfec7cb98e6cbb6e0f3c23618af826316188d587d1c1bc34f0ede03"}, + {file = "mypy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:653265f9a2784db65bfca694d1edd23093ce49740b2244cde583aeb134c008f3"}, + {file = "mypy-1.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a3c007ff3ee90f69cf0a15cbcdf0995749569b86b6d2f327af01fd1b8aee9dc"}, + {file = "mypy-1.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2418488264eb41f69cc64a69a745fad4a8f86649af4b1041a4c64ee61fc61129"}, + {file = "mypy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:68edad3dc7d70f2f17ae4c6c1b9471a56138ca22722487eebacfd1eb5321d612"}, + {file = "mypy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:85ca5fcc24f0b4aeedc1d02f93707bccc04733f21d41c88334c5482219b1ccb3"}, + {file = "mypy-1.9.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aceb1db093b04db5cd390821464504111b8ec3e351eb85afd1433490163d60cd"}, + {file = "mypy-1.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0235391f1c6f6ce487b23b9dbd1327b4ec33bb93934aa986efe8a9563d9349e6"}, + {file = "mypy-1.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4d5ddc13421ba3e2e082a6c2d74c2ddb3979c39b582dacd53dd5d9431237185"}, + {file = "mypy-1.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:190da1ee69b427d7efa8aa0d5e5ccd67a4fb04038c380237a0d96829cb157913"}, + {file = "mypy-1.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:fe28657de3bfec596bbeef01cb219833ad9d38dd5393fc649f4b366840baefe6"}, + {file = "mypy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e54396d70be04b34f31d2edf3362c1edd023246c82f1730bbf8768c28db5361b"}, + {file = "mypy-1.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5e6061f44f2313b94f920e91b204ec600982961e07a17e0f6cd83371cb23f5c2"}, + {file = "mypy-1.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a10926e5473c5fc3da8abb04119a1f5811a236dc3a38d92015cb1e6ba4cb9e"}, + {file = "mypy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b685154e22e4e9199fc95f298661deea28aaede5ae16ccc8cbb1045e716b3e04"}, + {file = "mypy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:5d741d3fc7c4da608764073089e5f58ef6352bedc223ff58f2f038c2c4698a89"}, + {file = "mypy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:587ce887f75dd9700252a3abbc9c97bbe165a4a630597845c61279cf32dfbf02"}, + {file = "mypy-1.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f88566144752999351725ac623471661c9d1cd8caa0134ff98cceeea181789f4"}, + {file = "mypy-1.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61758fabd58ce4b0720ae1e2fea5cfd4431591d6d590b197775329264f86311d"}, + {file = "mypy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e49499be624dead83927e70c756970a0bc8240e9f769389cdf5714b0784ca6bf"}, + {file = "mypy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:571741dc4194b4f82d344b15e8837e8c5fcc462d66d076748142327626a1b6e9"}, + {file = "mypy-1.9.0-py3-none-any.whl", hash = "sha256:a260627a570559181a9ea5de61ac6297aa5af202f06fd7ab093ce74e7181e43e"}, + {file = "mypy-1.9.0.tar.gz", hash = "sha256:3cc5da0127e6a478cddd906068496a97a7618a21ce9b54bde5bf7e539c7af974"}, ] [package.dependencies] @@ -1588,13 +1657,13 @@ test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-jupyter", "pytest-p [[package]] name = "nbclient" -version = "0.9.0" +version = "0.10.0" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." optional = false python-versions = ">=3.8.0" files = [ - {file = "nbclient-0.9.0-py3-none-any.whl", hash = "sha256:a3a1ddfb34d4a9d17fc744d655962714a866639acd30130e9be84191cd97cd15"}, - {file = "nbclient-0.9.0.tar.gz", hash = "sha256:4b28c207877cf33ef3a9838cdc7a54c5ceff981194a82eac59d558f05487295e"}, + {file = "nbclient-0.10.0-py3-none-any.whl", hash = "sha256:f13e3529332a1f1f81d82a53210322476a168bb7090a0289c795fe9cc11c9d3f"}, + {file = "nbclient-0.10.0.tar.gz", hash = "sha256:4b3f1b7dba531e498449c4db4f53da339c91d449dc11e9af3a43b4eb5c5abb09"}, ] [package.dependencies] @@ -1606,17 +1675,17 @@ traitlets = ">=5.4" [package.extras] dev = ["pre-commit"] docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] -test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] +test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] [[package]] name = "nbconvert" -version = "7.16.1" +version = "7.16.3" description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." optional = false python-versions = ">=3.8" files = [ - {file = "nbconvert-7.16.1-py3-none-any.whl", hash = "sha256:3188727dffadfdc9c6a1c7250729063d7bc78b355ad7aa023138afa030d1cd07"}, - {file = "nbconvert-7.16.1.tar.gz", hash = "sha256:e79e6a074f49ba3ed29428ed86487bf51509d9aab613bd8522ac08f6d28fd7fd"}, + {file = "nbconvert-7.16.3-py3-none-any.whl", hash = "sha256:ddeff14beeeedf3dd0bc506623e41e4507e551736de59df69a91f86700292b3b"}, + {file = "nbconvert-7.16.3.tar.gz", hash = "sha256:a6733b78ce3d47c3f85e504998495b07e6ea9cf9bf6ec1c98dda63ec6ad19142"}, ] [package.dependencies] @@ -1642,18 +1711,18 @@ docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sp qtpdf = ["nbconvert[qtpng]"] qtpng = ["pyqtwebengine (>=5.15)"] serve = ["tornado (>=6.1)"] -test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest"] +test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest (>=7)"] webpdf = ["playwright"] [[package]] name = "nbformat" -version = "5.9.2" +version = "5.10.3" description = "The Jupyter Notebook format" optional = false python-versions = ">=3.8" files = [ - {file = "nbformat-5.9.2-py3-none-any.whl", hash = "sha256:1c5172d786a41b82bcfd0c23f9e6b6f072e8fb49c39250219e4acfff1efe89e9"}, - {file = "nbformat-5.9.2.tar.gz", hash = "sha256:5f98b5ba1997dff175e77e0c17d5c10a96eaed2cbd1de3533d1fc35d5e111192"}, + {file = "nbformat-5.10.3-py3-none-any.whl", hash = "sha256:d9476ca28676799af85385f409b49d95e199951477a159a576ef2a675151e5e8"}, + {file = "nbformat-5.10.3.tar.gz", hash = "sha256:60ed5e910ef7c6264b87d644f276b1b49e24011930deef54605188ddeb211685"}, ] [package.dependencies] @@ -1804,13 +1873,13 @@ files = [ [[package]] name = "packaging" -version = "23.2" +version = "24.0" description = "Core utilities for Python packages" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, - {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, + {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, + {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, ] [[package]] @@ -1855,13 +1924,13 @@ ptyprocess = ">=0.5" [[package]] name = "phir" -version = "0.3.0" +version = "0.3.2" description = "A data model and validation tool for PHIR (PECOS High-level Intermediate Representation)." optional = false python-versions = ">=3.10" files = [ - {file = "phir-0.3.0-py3-none-any.whl", hash = "sha256:f672afb878b02afbc688d904a04a653ed098c206a913fcd9926dd545bb7e62fb"}, - {file = "phir-0.3.0.tar.gz", hash = "sha256:ad4eabad32f615d056e35ca89f3ce0298700b3e2ab7a9bb66ac56fc25dc14726"}, + {file = "phir-0.3.2-py3-none-any.whl", hash = "sha256:f5990619ceb6d7349a1d7ad485bb051668b79c8f66d4f5a1885f590ef1babddd"}, + {file = "phir-0.3.2.tar.gz", hash = "sha256:9b14a45d72b27f9471a9df35dd9e74bbc435884f473f6d327106fc253ad8d035"}, ] [package.dependencies] @@ -2103,26 +2172,40 @@ files = [ {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, ] +[[package]] +name = "pybind11" +version = "2.12.0" +description = "Seamless operability between C++11 and Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pybind11-2.12.0-py3-none-any.whl", hash = "sha256:df8d60b94f9e714d81013db233393d430ebf9f3551642b82291cf1b14d1afdbd"}, + {file = "pybind11-2.12.0.tar.gz", hash = "sha256:5e3c557a84b06b969247630407fc4d985bed157b4253b13153b8e8e165e0c3dc"}, +] + +[package.extras] +global = ["pybind11-global (==2.12.0)"] + [[package]] name = "pycparser" -version = "2.21" +version = "2.22" description = "C parser in Python" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.8" files = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, + {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, + {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, ] [[package]] name = "pydantic" -version = "2.6.3" +version = "2.6.4" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.6.3-py3-none-any.whl", hash = "sha256:72c6034df47f46ccdf81869fddb81aade68056003900a8724a4f160700016a2a"}, - {file = "pydantic-2.6.3.tar.gz", hash = "sha256:e07805c4c7f5c6826e33a1d4c9d47950d7eaf34868e2690f8594d2e30241f11f"}, + {file = "pydantic-2.6.4-py3-none-any.whl", hash = "sha256:cc46fce86607580867bdc3361ad462bab9c222ef042d3da86f2fb333e1d916c5"}, + {file = "pydantic-2.6.4.tar.gz", hash = "sha256:b1704e0847db01817624a6b86766967f552dd9dbf3afba4004409f908dcc84e6"}, ] [package.dependencies] @@ -2261,27 +2344,43 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] name = "pyparsing" -version = "3.1.1" +version = "3.1.2" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false python-versions = ">=3.6.8" files = [ - {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, - {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, + {file = "pyparsing-3.1.2-py3-none-any.whl", hash = "sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742"}, + {file = "pyparsing-3.1.2.tar.gz", hash = "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad"}, ] [package.extras] diagrams = ["jinja2", "railroad-diagrams"] +[[package]] +name = "pyqir" +version = "0.10.0" +description = "PyQIR parses, generates and evaluates the Quantum Intermediate Representation." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyqir-0.10.0-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b2fd7bb4bd45fa601ac92099c4e82d8f02e092a44d413d1dad7fa555fafa40b8"}, + {file = "pyqir-0.10.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:cd4ea16986dd4f776906b9364095d9480f411ba16fec9c558e388ca0be8bfcbc"}, + {file = "pyqir-0.10.0-cp38-abi3-manylinux_2_31_x86_64.whl", hash = "sha256:a862778ff8b40ec4267627605766bbff53d5ccf1b87619dd5bacc8beec0d1cc3"}, + {file = "pyqir-0.10.0-cp38-abi3-win_amd64.whl", hash = "sha256:c43bcb1a6c874312e89402405458dc544215ce9ea161a8e63944a2c03462b97e"}, +] + +[package.extras] +test = ["pytest (>=7.2.0,<7.3.0)"] + [[package]] name = "pytest" -version = "8.0.2" +version = "8.1.1" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.0.2-py3-none-any.whl", hash = "sha256:edfaaef32ce5172d5466b5127b42e0d6d35ebbe4453f0e3505d96afd93f6b096"}, - {file = "pytest-8.0.2.tar.gz", hash = "sha256:d4051d623a2e0b7e51960ba963193b09ce6daeb9759a451844a21e4ddedfc1bd"}, + {file = "pytest-8.1.1-py3-none-any.whl", hash = "sha256:2a8386cfc11fa9d2c50ee7b2a57e7d898ef90470a7a34c4b949ff59662bb78b7"}, + {file = "pytest-8.1.1.tar.gz", hash = "sha256:ac978141a75948948817d360297b7aae0fcb9d6ff6bc9ec6d514b85d5a65c044"}, ] [package.dependencies] @@ -2289,11 +2388,11 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" -pluggy = ">=1.3.0,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} +pluggy = ">=1.4,<2.0" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] +testing = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-cov" @@ -2313,6 +2412,21 @@ pytest = ">=4.6" [package.extras] testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] +[[package]] +name = "pytest-parallel" +version = "0.1.1" +description = "a pytest plugin for parallel and concurrent testing" +optional = false +python-versions = "*" +files = [ + {file = "pytest-parallel-0.1.1.tar.gz", hash = "sha256:9aac3fc199a168c0a8559b60249d9eb254de7af58c12cee0310b54d4affdbfab"}, + {file = "pytest_parallel-0.1.1-py3-none-any.whl", hash = "sha256:9e3703015b0eda52be9e07d2ba3498f09340a56d5c79a39b50f22fc5c38212fe"}, +] + +[package.dependencies] +pytest = ">=3.0.0" +tblib = "*" + [[package]] name = "python-dateutil" version = "2.9.0.post0" @@ -2340,26 +2454,26 @@ files = [ [[package]] name = "pytket" -version = "1.25.0" +version = "1.26.0" description = "Python module for interfacing with the CQC tket library of quantum software" optional = false python-versions = ">=3.10" files = [ - {file = "pytket-1.25.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:3004271220655b6b29bbbfc2077288762da62355765402697f991e87edd8cf2e"}, - {file = "pytket-1.25.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:c9705cf3cbfd6b5fc6b0ead9c34e7dfa0826b2a98a94ab7c83d383057fc748c2"}, - {file = "pytket-1.25.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48add5959e2bf1027de40515233d7ec001f745b703adb1aedd22ee0a3a6d29ac"}, - {file = "pytket-1.25.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:313565b91a079c05d25fb708caeb20aa6f077bf3988798f66edf19914802016e"}, - {file = "pytket-1.25.0-cp310-cp310-win_amd64.whl", hash = "sha256:340101ffafcabac43e7b2da2c9a0e389e6daf876c53552e3601a6d1e69758eed"}, - {file = "pytket-1.25.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:55ccc9597c34bb03ab723de90ad5cd224a57214c9123bfb584ed8860d9c16ff1"}, - {file = "pytket-1.25.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:f1d265d05803d7ff51d03fc7bd3a42de66de22e9c9456ce0bdc622b5516122c3"}, - {file = "pytket-1.25.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ea008380d28895dbb42efabff9533f1f4840becc812311c03f935a5da71f30ba"}, - {file = "pytket-1.25.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18c51955b11f262e015a7a27c05e7021fd9ea1dd55ad0853ecc8c353f48732ba"}, - {file = "pytket-1.25.0-cp311-cp311-win_amd64.whl", hash = "sha256:f20020bcb4f05e2c63cfddb3431cea7b431bebb8dd795caffd3dd6521c5a3a48"}, - {file = "pytket-1.25.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:8e8ab9f2bc25da5c9cf1ed5eac5e6303b9389a364ec8a0527e41110fb6b0d21e"}, - {file = "pytket-1.25.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:685475b7a2809c555167c7a20b7169f1fced26d8fb0a2658a407bd6bad6181ba"}, - {file = "pytket-1.25.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:02f86826a41551d8471b01c5df2eb39ebec61f2296dffe2e4c9e6418aa2d1d9a"}, - {file = "pytket-1.25.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:83241ece02065600d68207bae2818fca680bc87eb26a1647cdad97cf29f82cca"}, - {file = "pytket-1.25.0-cp312-cp312-win_amd64.whl", hash = "sha256:c73381645c1b27bb2946707d7b58cf780a04330fc557d089a9bca8c8f466f1ca"}, + {file = "pytket-1.26.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:3ae0763e7de87c40318901cf261ab227ce914755d285ea271328ca0767540347"}, + {file = "pytket-1.26.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:7b617593acba4861fbbc4dbbae35630706e11c2e5c76061bb5beca746aebf710"}, + {file = "pytket-1.26.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:37ce4f703d706b317abebb777ee6acba34389d0aa6d167db2dfe9912d015c8f4"}, + {file = "pytket-1.26.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cee9e279bc68ab67a46d34ceaed562ad4378b1ae917a3c6d16a7dbdec2d1e264"}, + {file = "pytket-1.26.0-cp310-cp310-win_amd64.whl", hash = "sha256:003585360ef17ad21b8e4a41baa221e618561d20eb5d26140895054c2f4ec839"}, + {file = "pytket-1.26.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:f68a6f6217429a3653ce5e29021c983742f2256af446d82b3092966c9ea9d153"}, + {file = "pytket-1.26.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:235f30ef0ece889f66edebe3c9a7daf146f6ebdb6e704f41d32908b9eb3c53f9"}, + {file = "pytket-1.26.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d5fc8d2b292a9384bb1cfe9f285d4a15d2cbf593437e235bce01d02647f51db4"}, + {file = "pytket-1.26.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b6e5190e067a8179d4f88612f273b0969a83c997eb09dbaeab59d118de43def6"}, + {file = "pytket-1.26.0-cp311-cp311-win_amd64.whl", hash = "sha256:60048f32a3dc2123346b97227b931c87e4ad2e2d75d13362f83f97de65d62ef8"}, + {file = "pytket-1.26.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:62ee4d4dc642857c24daefc67712ebde86a7bfb1a848411130b390837e626b82"}, + {file = "pytket-1.26.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:2999dc92e2fa8a7587e4d29e1150227c83b36ea528cdf5187de59ea3b68f53af"}, + {file = "pytket-1.26.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:293f4e2799d68eb4e858ec6a4441bb5909eb76e6d131032140a6151df6ae5544"}, + {file = "pytket-1.26.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:873bd961e89dd641ba023cf4f3f2dc0bcc956f417b01b16f8c29ced8953c588a"}, + {file = "pytket-1.26.0-cp312-cp312-win_amd64.whl", hash = "sha256:fa306cfafe294e829f7be57fe2bee91b94c995a295b8c1c267ed23964b5bab10"}, ] [package.dependencies] @@ -2379,63 +2493,77 @@ zx = ["autoray (>=0.6.1)", "quimb (>=1.5,<2.0)"] [[package]] name = "pytket-pecos" -version = "0.1.17" +version = "0.1.22" description = "This package enables emulation of pytket circuits using the PECOS emulator." optional = false python-versions = "*" files = [ - {file = "pytket_pecos-0.1.17-py2.py3-none-any.whl", hash = "sha256:f1a5b7f30851495ca2fe5244d8e80dca0eee442fbc18a22c333a3d8062579d76"}, - {file = "pytket_pecos-0.1.17.tar.gz", hash = "sha256:c3dc87ce4bfb4c03bc5629370e8fb6d394b5f4eb3322e26c6dd5ab30f4018418"}, + {file = "pytket_pecos-0.1.22-py2.py3-none-any.whl", hash = "sha256:50521eebd8a7947403a5b1f4961e5f33d494bddede3388406e18db10a978559a"}, + {file = "pytket_pecos-0.1.22.tar.gz", hash = "sha256:c43e8a7956cd10527b0a332d1a44e53a1054b475a5289cfe4105d627dc178951"}, ] [package.dependencies] -projectq = ">=0.8.0" -pytket = ">=1.25.0" -pytket-phir = ">=0.4.4" -quantum-pecos = ">=0.5.0dev9" +pytket = ">=1.26.0" +pytket-phir = ">=0.6.2" +quantum-pecos = {version = ">=0.5.0dev10", extras = ["simulators", "wasmtime"]} [[package]] name = "pytket-phir" -version = "0.4.4" +version = "0.6.2" description = "A circuit analyzer and translator from pytket to PHIR" optional = false python-versions = "<3.13,>=3.10" files = [ - {file = "pytket-phir-0.4.4.tar.gz", hash = "sha256:1e7ba6bf769e1d0a4f91f189daf01ef8d9904afe12208dd89a5b11f83b1d0632"}, - {file = "pytket_phir-0.4.4-py3-none-any.whl", hash = "sha256:557059c9015079e8d4d0d2fe0f0dbcf778e31f721189b5fb0fb46ca01ebbb60f"}, + {file = "pytket-phir-0.6.2.tar.gz", hash = "sha256:879f45d1c827fc4a11c396db35c6f111831250699abe9badc4f5fc455a3dd646"}, + {file = "pytket_phir-0.6.2-py3-none-any.whl", hash = "sha256:98821acb9e91cf3e3750f6797e9aa58c549fcf0356ff3e9bffaaf4e4ef4bece3"}, ] [package.dependencies] -phir = ">=0.3.0" +phir = ">=0.3.2" pytket = ">=1.21.0" wasmtime = ">=15.0.0" [package.extras] docs = ["pydata-sphinx-theme", "sphinx"] -phirc = ["projectq", "quantum-pecos (>=0.5.0.dev8)"] +phirc = ["projectq", "quantum-pecos (>=0.5.0.dev10)"] tests = ["pytest"] +[[package]] +name = "pytket-qir" +version = "0.9.0" +description = "Extension for pytket, providing functions for conversion into to qir" +optional = false +python-versions = ">=3.10" +files = [ + {file = "pytket_qir-0.9.0-py3-none-any.whl", hash = "sha256:2ecd74db10eb6aaccd9fe7c80635b1d368d1a1f70cdcc5e4a30abf661cff8424"}, +] + +[package.dependencies] +pyqir = "0.10.0" +pytket = ">=1.26,<2.0" + [[package]] name = "pytket-quantinuum" -version = "0.29.0" +version = "0.32.0" description = "Extension for pytket, providing access to Quantinuum backends" optional = false python-versions = ">=3.10" files = [ - {file = "pytket_quantinuum-0.29.0-py3-none-any.whl", hash = "sha256:a47724ed7f3d162f9e1121cd1a4e7a7b830204ac8ace6638f10d211177f12c9e"}, + {file = "pytket_quantinuum-0.32.0-py3-none-any.whl", hash = "sha256:31f6c6482fb24a854a41b2ca8e653a43c02c2a7090c86c17d38ccacfb1409ebb"}, ] [package.dependencies] msal = ">=1.18,<2.0" nest-asyncio = ">=1.2" pyjwt = ">=2.4,<3.0" -pytket = ">=1.24,<2.0" +pytket = ">=1.26,<2.0" +pytket-qir = ">=0.9.0,<0.10.0" requests = ">=2.2" types-requests = "*" websockets = ">=7.0" [package.extras] -pecos = ["pytket-pecos (>=0.1.13,<0.2.0)"] +pecos = ["pytket-pecos (>=0.1.21,<0.2.0)"] [[package]] name = "pywin32" @@ -2624,24 +2752,29 @@ py = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "quantum-pecos" -version = "0.5.0.dev9" +version = "0.5.0.dev10" description = "PECOS is a library/framework for the evaluation, study, and design of QEC protocols. It also provides the ability to study and evaluate the performance advanced hybrid quantum/classical compute execution models for NISQ algorithms and beyond." optional = false python-versions = ">=3.10" files = [ - {file = "quantum-pecos-0.5.0.dev9.tar.gz", hash = "sha256:0942102ed0329470706563d676d7dd4ff5c3716fa91010d98763bffe0f32467b"}, - {file = "quantum_pecos-0.5.0.dev9-py2.py3-none-any.whl", hash = "sha256:baaa729889eefca6402806f49c0a7cd3ab2a4353984474656d6670456c0bdb1d"}, + {file = "quantum-pecos-0.5.0.dev10.tar.gz", hash = "sha256:96e792833fe929df4703abc0fc0d58e9e43dff1451463dfebf3d23586e875ad1"}, + {file = "quantum_pecos-0.5.0.dev10-py2.py3-none-any.whl", hash = "sha256:c01a97704430e9759ccf0bfa31764537b7a57ae948aea214e543ef251c7cb0b6"}, ] [package.dependencies] +cython = {version = "*", optional = true, markers = "extra == \"simulators\""} matplotlib = ">=2.2.0,<4.0" networkx = ">=2.1.0,<3.0" numpy = ">=1.15.0,<2.0" phir = ">=0.3.0,<0.4.0" +projectq = {version = ">=0.5.0,<0.9.0", optional = true, markers = "extra == \"simulators\""} +pybind11 = {version = ">=2.2.3,<3.0", optional = true, markers = "extra == \"simulators\""} scipy = ">=1.1.0,<2.0" +wasmtime = {version = ">=13.0", optional = true, markers = "extra == \"wasmtime\""} [package.extras] all = ["quantum-pecos[simulators]", "quantum-pecos[tests]", "quantum-pecos[visualization]", "quantum-pecos[wasmer]", "quantum-pecos[wasmtime]"] +cuda = ["cupy (>=10.4.0)", "cuquantum-python (>=23.6.0)"] simulators = ["cython", "projectq (>=0.5.0,<0.9.0)", "pybind11 (>=2.2.3,<3.0)"] tests = ["pytest (>=5.0.0)"] visualization = ["plotly (>=5.9.0,<5.10.0)"] @@ -2664,13 +2797,13 @@ setuptools = "*" [[package]] name = "referencing" -version = "0.33.0" +version = "0.34.0" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" files = [ - {file = "referencing-0.33.0-py3-none-any.whl", hash = "sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5"}, - {file = "referencing-0.33.0.tar.gz", hash = "sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7"}, + {file = "referencing-0.34.0-py3-none-any.whl", hash = "sha256:d53ae300ceddd3169f1ffa9caf2cb7b769e92657e4fafb23d34b93679116dfd4"}, + {file = "referencing-0.34.0.tar.gz", hash = "sha256:5773bd84ef41799a5a8ca72dc34590c041eb01bf9aa02632b4a973fb0181a844"}, ] [package.dependencies] @@ -2935,18 +3068,18 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "69.1.1" +version = "69.2.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-69.1.1-py3-none-any.whl", hash = "sha256:02fa291a0471b3a18b2b2481ed902af520c69e8ae0919c13da936542754b4c56"}, - {file = "setuptools-69.1.1.tar.gz", hash = "sha256:5c0806c7d9af348e6dd3777b4f4dbb42c7ad85b190104837488eab9a7c945cf8"}, + {file = "setuptools-69.2.0-py3-none-any.whl", hash = "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c"}, + {file = "setuptools-69.2.0.tar.gz", hash = "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] @@ -3015,15 +3148,26 @@ files = [ [package.dependencies] mpmath = ">=0.19" +[[package]] +name = "tblib" +version = "3.0.0" +description = "Traceback serialization library." +optional = false +python-versions = ">=3.8" +files = [ + {file = "tblib-3.0.0-py3-none-any.whl", hash = "sha256:80a6c77e59b55e83911e1e607c649836a69c103963c5f28a46cbeef44acf8129"}, + {file = "tblib-3.0.0.tar.gz", hash = "sha256:93622790a0a29e04f0346458face1e144dc4d32f493714c6c3dff82a4adb77e6"}, +] + [[package]] name = "terminado" -version = "0.18.0" +version = "0.18.1" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." optional = false python-versions = ">=3.8" files = [ - {file = "terminado-0.18.0-py3-none-any.whl", hash = "sha256:87b0d96642d0fe5f5abd7783857b9cab167f221a39ff98e3b9619a788a3c0f2e"}, - {file = "terminado-0.18.0.tar.gz", hash = "sha256:1ea08a89b835dd1b8c0c900d92848147cef2537243361b2e3f4dc15df9b6fded"}, + {file = "terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"}, + {file = "terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e"}, ] [package.dependencies] @@ -3087,18 +3231,18 @@ files = [ [[package]] name = "traitlets" -version = "5.14.1" +version = "5.14.2" description = "Traitlets Python configuration system" optional = false python-versions = ">=3.8" files = [ - {file = "traitlets-5.14.1-py3-none-any.whl", hash = "sha256:2e5a030e6eff91737c643231bfcf04a65b0132078dad75e4936700b213652e74"}, - {file = "traitlets-5.14.1.tar.gz", hash = "sha256:8585105b371a04b8316a43d5ce29c098575c2e477850b62b848b964f1444527e"}, + {file = "traitlets-5.14.2-py3-none-any.whl", hash = "sha256:fcdf85684a772ddeba87db2f398ce00b40ff550d1528c03c14dbf6a02003cd80"}, + {file = "traitlets-5.14.2.tar.gz", hash = "sha256:8cdd83c040dab7d1dee822678e5f5d100b514f7b72b01615b26fc5718916fdf9"}, ] [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.1)", "pytest-mock", "pytest-mypy-testing"] [[package]] name = "types-pkg-resources" @@ -3113,24 +3257,24 @@ files = [ [[package]] name = "types-python-dateutil" -version = "2.8.19.20240106" +version = "2.9.0.20240316" description = "Typing stubs for python-dateutil" optional = false python-versions = ">=3.8" files = [ - {file = "types-python-dateutil-2.8.19.20240106.tar.gz", hash = "sha256:1f8db221c3b98e6ca02ea83a58371b22c374f42ae5bbdf186db9c9a76581459f"}, - {file = "types_python_dateutil-2.8.19.20240106-py3-none-any.whl", hash = "sha256:efbbdc54590d0f16152fa103c9879c7d4a00e82078f6e2cf01769042165acaa2"}, + {file = "types-python-dateutil-2.9.0.20240316.tar.gz", hash = "sha256:5d2f2e240b86905e40944dd787db6da9263f0deabef1076ddaed797351ec0202"}, + {file = "types_python_dateutil-2.9.0.20240316-py3-none-any.whl", hash = "sha256:6b8cb66d960771ce5ff974e9dd45e38facb81718cc1e208b10b1baccbfdbee3b"}, ] [[package]] name = "types-requests" -version = "2.31.0.20240218" +version = "2.31.0.20240311" description = "Typing stubs for requests" optional = false python-versions = ">=3.8" files = [ - {file = "types-requests-2.31.0.20240218.tar.gz", hash = "sha256:f1721dba8385958f504a5386240b92de4734e047a08a40751c1654d1ac3349c5"}, - {file = "types_requests-2.31.0.20240218-py3-none-any.whl", hash = "sha256:a82807ec6ddce8f00fe0e949da6d6bc1fbf1715420218a9640d695f70a9e5a9b"}, + {file = "types-requests-2.31.0.20240311.tar.gz", hash = "sha256:b1c1b66abfb7fa79aae09097a811c4aa97130eb8831c60e47aee4ca344731ca5"}, + {file = "types_requests-2.31.0.20240311-py3-none-any.whl", hash = "sha256:47872893d65a38e282ee9f277a4ee50d1b28bd592040df7d1fdaffdf3779937d"}, ] [package.dependencies] @@ -3180,17 +3324,17 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "wasmtime" -version = "18.0.2" +version = "19.0.0" description = "A WebAssembly runtime powered by Wasmtime" optional = false python-versions = ">=3.8" files = [ - {file = "wasmtime-18.0.2-py3-none-any.whl", hash = "sha256:49625d389ddd766f5416a1723a76a25473df1dbe6ad706902b7bdbfa549ec3df"}, - {file = "wasmtime-18.0.2-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:190f182e51f7f0e5340a7ffeb01519eb759748872a2bb227c6b1c055cbee61ce"}, - {file = "wasmtime-18.0.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:817c780eb506deaabe31cf23c5e9fe9ab9a1815bc0b805d292ec7502c495e10a"}, - {file = "wasmtime-18.0.2-py3-none-manylinux1_x86_64.whl", hash = "sha256:30adbf2fb380aae2d7cfd18c6f14d7633d62a8204caf185b7557b2364533268d"}, - {file = "wasmtime-18.0.2-py3-none-manylinux2014_aarch64.whl", hash = "sha256:c43d281df87af4139735aa62950d855499f58f72778b0e7a79488b3b8807d108"}, - {file = "wasmtime-18.0.2-py3-none-win_amd64.whl", hash = "sha256:7ccc88a9ee2bb601dbd1dc065a22af7b2f1a85c39b1aa8ebfb8ea57f78157d35"}, + {file = "wasmtime-19.0.0-py3-none-any.whl", hash = "sha256:229075695c97d3220336ab08a0cf6350c6f29b29663b3530d25a9d8aa59db801"}, + {file = "wasmtime-19.0.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:43fb95b952b4387a852834477d8d094f3891cdccd4c0f6c8833cfafb5ec8d35b"}, + {file = "wasmtime-19.0.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:6e0625e3d9b5fa850f6098fad3d081f496095f4705c76bf88144d3dec20e6557"}, + {file = "wasmtime-19.0.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:d844128add3ba40d3a667115812ed8064089a76e775c49dc4d43dcf034c15436"}, + {file = "wasmtime-19.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:85890d926adad42dbfe5a772796f452fc42f87a4fda3b982cea842c52dbf734f"}, + {file = "wasmtime-19.0.0-py3-none-win_amd64.whl", hash = "sha256:7b8eb96d270e042442389a3d13c1d51b44c55e5d53c27e33a934d22ef6e2a95f"}, ] [package.extras] @@ -3333,4 +3477,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = "<3.12,>=3.10" -content-hash = "7df4e9bf8a956112dd52f4e85c3a0a169c96b6078ff5520fae2e5a6e1d894381" +content-hash = "d52f7ef0b09e961814b4fad8a8b86cd3a55606f9c7d715332e0c00a70b53a0d6" diff --git a/pytket-mbqc-py/pyproject.toml b/pytket-mbqc-py/pyproject.toml index 6b2969b8..829cb9e9 100644 --- a/pytket-mbqc-py/pyproject.toml +++ b/pytket-mbqc-py/pyproject.toml @@ -8,13 +8,15 @@ readme = "README.md" [tool.poetry.dependencies] python = "<3.12,>=3.10" notebook = "^6.5.0" -pytket-quantinuum = "^0.29.0" +pytket-quantinuum = "^0.32.0" pytket_pecos = "^0.1.15" pytest = "^8.0.1" pytest-cov = "^4.1.0" ruff = "^0.2.2" mypy = "^1.8.0" importlib-resources = "^6.1.2" +pytest-parallel = "^0.1.1" +py = "^1.11.0" [build-system] requires = ["poetry-core"] diff --git a/pytket-mbqc-py/pytket_mbqc_py/__init__.py b/pytket-mbqc-py/pytket_mbqc_py/__init__.py index 06355afc..528307b8 100644 --- a/pytket-mbqc-py/pytket_mbqc_py/__init__.py +++ b/pytket-mbqc-py/pytket_mbqc_py/__init__.py @@ -1,3 +1,3 @@ from .qubit_manager import QubitManager from .graph_circuit import GraphCircuit -from .wasm_file_handler import get_wasm_file_handler +from .cnot_block import CNOTBlocksGraphCircuit diff --git a/pytket-mbqc-py/pytket_mbqc_py/cnot_block.py b/pytket-mbqc-py/pytket_mbqc_py/cnot_block.py new file mode 100644 index 00000000..478c5d0e --- /dev/null +++ b/pytket-mbqc-py/pytket_mbqc_py/cnot_block.py @@ -0,0 +1,209 @@ +"""Class for generating graph states implementing layers of +CNOT gates. +""" +from .graph_circuit import GraphCircuit +from typing import Tuple, List + + +class CNOTBlocksGraphCircuit(GraphCircuit): + """Class for generating graph state implementing + layers of CNOT gates. Consider an n qubit input state + initialised in a computational bases state. A 'layer' of CNOT gates + consists of a CNOT gate acting between qubit 1 and 2, then + another between 2 and 3, etc until a CNOT acts between qubit n-1 and n. + Note that as the inputs are initialised in computational basis states + the CNOT gates can be considered to be classical CNOT gates, + and the ideal outcome is deterministic. + """ + + def __init__( + self, + n_physical_qubits: int, + input_state: Tuple[int], + n_layers: int, + ) -> None: + """Initialisation method. + + :param n_physical_qubits: The maximum number of physical qubits + available. These qubits will be reused and so the total + number of 'logical' qubits may be larger. + :type n_physical_qubits: int + :param input_state: Integer tuple describing the input + to the circuit. This will be a classical binary + string and so the outcome is deterministic. + :type input_state: Tuple[int] + :param n_layers: The number of layers of CNOT gates. + :type n_layers: int + """ + + self.input_state = input_state + self.n_layers = n_layers + + # The number of rows of CNOT blocks + # note that this is one less than the number of entries in the + # input state as each CNOT has two inputs. + n_rows = len(input_state) - 1 + + # This structure contains information about which + # vertices in the graph state corresponds to which + # vertices in each of the CNOT blocks. + # Note that each CNOT block contains 6 vertices implementing + # a CNOT gate. However as some of these may be outputs from + # other CNOT blocks and so there may be repeats. + cnot_block_vertex_list: List[List[List[int]]] = [ + [[] for _ in range(n_rows)] for _ in range(n_layers) + ] + + super().__init__(n_physical_qubits=n_physical_qubits) + + for layer in range(n_layers): + # If this is the first layer then the control qubit of the first row needs + # to be initialised. If not then the control vertex is taken from + # the layer before. + if layer == 0: + control_qubit, control_vertex = self.add_input_vertex() + if input_state[0]: + self.X(control_qubit) + else: + control_vertex = cnot_block_vertex_list[layer - 1][0][4] + + for row in range(n_rows): + # for each block the 0th qubit is the control. + cnot_block_vertex_list[layer][row].append(control_vertex) + + # If this is the 0th layer then the target qubit needs to be + # initialised. + if layer == 0: + target_qubit, target_vertex = self.add_input_vertex() + if input_state[row + 1]: + self.X(target_qubit) + # If this is the last row then the target vertex is the output + # target vertex of the cnot on the same row but previous + # layer. + elif row == n_rows - 1: + target_vertex = cnot_block_vertex_list[layer - 1][row][5] + # Otherwise the target vertex is the output control vertex + # of the CNOT block in the previous layer and the next row. + else: + target_vertex = cnot_block_vertex_list[layer - 1][row + 1][4] + cnot_block_vertex_list[layer][row].append(target_vertex) + + # Now the rest of the CNOT block can be constructed. + cnot_block_vertex_list[layer][row].append(self.add_graph_vertex()) + self.add_edge( + vertex_one=cnot_block_vertex_list[layer][row][0], + vertex_two=cnot_block_vertex_list[layer][row][2], + ) + + cnot_block_vertex_list[layer][row].append(self.add_graph_vertex()) + self.add_edge( + vertex_one=cnot_block_vertex_list[layer][row][1], + vertex_two=cnot_block_vertex_list[layer][row][3], + ) + + cnot_block_vertex_list[layer][row].append(self.add_graph_vertex()) + self.add_edge( + vertex_one=cnot_block_vertex_list[layer][row][2], + vertex_two=cnot_block_vertex_list[layer][row][4], + ) + + cnot_block_vertex_list[layer][row].append(self.add_graph_vertex()) + self.add_edge( + vertex_one=cnot_block_vertex_list[layer][row][3], + vertex_two=cnot_block_vertex_list[layer][row][5], + ) + self.add_edge( + vertex_one=cnot_block_vertex_list[layer][row][3], + vertex_two=cnot_block_vertex_list[layer][row][4], + ) + + # The control vertex of the next row will be the + # output target vertex of this row. + control_vertex = cnot_block_vertex_list[layer][row][5] + + # If this is not the 0th layer then the previous layer + # can be measured. + if layer > 0: + # If this is the 1th later then the inputs of the previous + # layer (the 0th layer) will not have been measured and should now be. + # Note that or other layers they will have been measured by this point + # as they are the 4th and 5th vertices of previous layers. + if layer == 1: + # If this is the 0th row then we need to measure the input + # control. It is not necessary in general as it would be the + # output target of previous blocks. + if row == 0: + self.corrected_measure( + vertex=cnot_block_vertex_list[layer - 1][row][0], + t_multiple=0, + ) + + self.corrected_measure( + vertex=cnot_block_vertex_list[layer - 1][row][1], + t_multiple=0, + ) + + # The rest of the block is measured. + self.corrected_measure( + vertex=cnot_block_vertex_list[layer - 1][row][2], + t_multiple=0, + ) + self.corrected_measure( + vertex=cnot_block_vertex_list[layer - 1][row][3], + t_multiple=0, + ) + self.corrected_measure( + vertex=cnot_block_vertex_list[layer - 1][row][4], + t_multiple=0, + ) + self.corrected_measure( + vertex=cnot_block_vertex_list[layer - 1][row][5], + t_multiple=0, + ) + + # When we reach the end we can measure everything that is not the output. + for row in range(n_rows): + # If there is only 1 layer then the inputs will need to be + # measured. If there are more layers then they will already + # have been measured as inputs to previous later layers. + if n_layers == 1: + self.corrected_measure( + vertex=cnot_block_vertex_list[0][row][0], + t_multiple=0, + ) + self.corrected_measure( + vertex=cnot_block_vertex_list[0][row][1], + t_multiple=0, + ) + + # If there is more than one layer then the output + # qubit in blocks on rows greater then 1 are yet to be measured. + # they are measured on the 0th row as these are output controls + # of previous rows. + elif row > 0: + self.corrected_measure( + vertex=cnot_block_vertex_list[n_layers - 1][row][0], + t_multiple=0, + ) + + self.corrected_measure( + vertex=cnot_block_vertex_list[n_layers - 1][row][2], + t_multiple=0, + ) + self.corrected_measure( + vertex=cnot_block_vertex_list[n_layers - 1][row][3], + t_multiple=0, + ) + + @property + def output_state(self) -> Tuple[int, ...]: + """The ideal output bit string. + + :return: The ideal output bit string. + :rtype: Tuple[int] + """ + output_state = list(self.input_state) + for _ in range(self.n_layers): + for i in range(len(self.input_state) - 1): + output_state[i + 1] = output_state[i] ^ output_state[i + 1] + return tuple(output_state) diff --git a/pytket-mbqc-py/pytket_mbqc_py/graph_circuit.py b/pytket-mbqc-py/pytket_mbqc_py/graph_circuit.py index e86a72e0..c9c7077f 100644 --- a/pytket-mbqc-py/pytket_mbqc_py/graph_circuit.py +++ b/pytket-mbqc-py/pytket_mbqc_py/graph_circuit.py @@ -1,203 +1,184 @@ from pytket_mbqc_py.qubit_manager import QubitManager from typing import List, Tuple, Dict from pytket import Qubit -from pytket_mbqc_py.wasm_file_handler import get_wasm_file_handler import networkx as nx # type:ignore class GraphCircuit(QubitManager): def __init__( self, - n_qubits_total: int, + n_physical_qubits: int, ) -> None: - super().__init__(n_qubits=n_qubits_total) + super().__init__(n_physical_qubits=n_physical_qubits) - self.wfh = get_wasm_file_handler() - self.add_wasm_to_reg("init_corrections", self.wfh, [], []) - - self.graph = nx.Graph() - - self.vertex_flow: Dict[int, int] = dict() - self.vertex_flow_inverse: Dict[int, List[int]] = dict() - - self.output_vertices: List[int] = [] + self.entanglement_graph = nx.Graph() + self.flow_graph = nx.DiGraph() self.vertex_qubit: List[Qubit] = [] - self.vertex_measured: List[bool] = [] - self.mbqc_begun = False - - @property - def output_qubits(self) -> Dict[int, Qubit]: - output_vertices = [ + def get_outputs(self) -> Dict[int, Qubit]: + unmeasured_flow_vertices = [ vertex - for vertex, measured in enumerate(self.vertex_measured) - if not measured - ] - return {vertex: self.vertex_qubit[vertex] for vertex in output_vertices} - - def correct_outputs(self) -> None: - unmeasured_graph_verices = [ - vertex - for vertex in self.vertex_flow.keys() + for vertex in self._vertices_with_flow() if not self.vertex_measured[vertex] ] - if len(unmeasured_graph_verices) > 0: + if len(unmeasured_flow_vertices) > 0: raise Exception( "Only output vertices can be unmeasured. " - + f"In particular {unmeasured_graph_verices} must be measured." + + f"In particular {unmeasured_flow_vertices} have flow but are not measured." ) - for vertex in self.output_qubits.keys(): + output_qubits = { + vertex: qubit + for vertex, qubit in enumerate(self.vertex_qubit) + if not self.vertex_measured[vertex] + } + + for vertex in output_qubits.keys(): self._apply_correction(vertex=vertex) - def _vertex_neighbour(self, vertex: int) -> List[int]: - return self.graph.neighbors(n=vertex) + return output_qubits def _add_vertex(self, qubit: Qubit) -> int: self.vertex_qubit.append(qubit) self.vertex_measured.append(False) index = len(self.vertex_qubit) - 1 - self.graph.add_node(node_for_adding=index) - self.vertex_flow_inverse[index] = [] + self.entanglement_graph.add_node(node_for_adding=index) + self.flow_graph.add_node(node_for_adding=index) return index def add_input_vertex(self) -> Tuple[Qubit, int]: - if len(self.vertex_qubit) == 100: - raise Exception("The current maximum number of vertices is 100.") - qubit = super().get_qubit() index = self._add_vertex(qubit=qubit) return (qubit, index) - def add_output_vertex(self) -> int: - index = self.add_graph_vertex() - self.output_vertices.append(index) - return index - def add_graph_vertex(self) -> int: - if len(self.vertex_qubit) == 100: - raise Exception("The current maximum number of vertices is 100.") - - qubit = super().get_plus_state() + qubit = self.get_qubit() + self.H(qubit) index = self._add_vertex(qubit=qubit) return index + def _vertices_with_flow(self) -> List[int]: + return list( + set( + predecessor + for vertex in self.flow_graph.nodes + for predecessor in self.flow_graph.predecessors(vertex) + ) + ) + def add_edge(self, vertex_one: int, vertex_two: int) -> None: if vertex_one > vertex_two: - raise Exception("Cannot add edge into the past.") + raise Exception( + f"{vertex_one} is greater than {vertex_two}. " + + "Cannot add edge into the past." + ) - if vertex_one >= len(self.vertex_qubit): - raise Exception(f"There is no vertex with the index {vertex_one}.") + if vertex_one not in self.entanglement_graph.nodes: + raise Exception( + f"There is no vertex with the index {vertex_one}. " + + "Use the entanglement_graph attribute to see existing vertices." + ) - if vertex_two >= len(self.vertex_qubit): - raise Exception(f"There is no vertex with the index {vertex_two}.") + if vertex_two not in self.entanglement_graph.nodes: + raise Exception( + f"There is no vertex with the index {vertex_two}. " + + "Use the entanglement_graph attribute to see existing vertices." + ) if self.vertex_measured[vertex_one] or self.vertex_measured[vertex_two]: raise Exception("Cannot add edge after measure.") # vertex_two is a new neighbour of vertex_one. As such none of the vertices of which - # vertex_one is the flow can have been measued. + # vertex_one is the flow can have been measured. measured_inverse_flow = [ flow_inverse - for flow_inverse in self.vertex_flow_inverse[vertex_one] + for flow_inverse in self.flow_graph.predecessors(vertex_one) if self.vertex_measured[flow_inverse] ] if len(measured_inverse_flow) > 0: raise Exception( - "This does not define a valid flow. " + f"Adding the edge ({vertex_one}, {vertex_two}) does not define a valid flow. " + f"In particular {measured_inverse_flow} are the the inverse flow of {vertex_one} " - + "but have already been measured." + + "and have already been measured. " + + "The inverse flow of qubits to which you wish to attach edges must not be measured. " ) # If this is the first future of vertex_one then it will be taken to be its flow. # This is only not the case if vertex_one is an output vertex, in which case it has no flow. # If vertex_two is to be the flow of vertex_one than we must check that neighbours of # vertex_two are measured after vertex_one. - if (vertex_one not in self.vertex_flow.keys()) and ( - vertex_one not in self.output_vertices - ): - vertex_neighbours = self._vertex_neighbour(vertex=vertex_two) - if any(vertex < vertex_one for vertex in vertex_neighbours): + if vertex_one not in self._vertices_with_flow(): + past_neighbours = [ + vertex + for vertex in self.entanglement_graph.neighbors(n=vertex_two) + if vertex < vertex_one + ] + if len(past_neighbours) > 0: raise Exception( - "This circuit does not have a valid flow. " - + f"In particular {[vertex for vertex in vertex_neighbours if vertex < vertex_one]} " - + f"are neighbours of {vertex_two} but are in the past of {vertex_one}." + f"Adding the edge ({vertex_one}, {vertex_two}) does not define a valid flow. " + + f"In particular {past_neighbours} " + + f"are neighbours of {vertex_two} but are in the past of {vertex_one}. " + + f"As {vertex_two} would become the flow of {vertex_one} all of the " + + f"neighbours of {vertex_two} must be in the past of {vertex_one}." ) # vertex_one is a neighbour of vertex_two. As such vertex_one must be measured after # any vertices of which vertex_two is its flow. if any( flow_inverse > vertex_one - for flow_inverse in self.vertex_flow_inverse[vertex_two] + for flow_inverse in self.flow_graph.predecessors(vertex_two) ): raise Exception( "This does not define a valid flow. " - f"In partcular {vertex_two} is the flow of {self.vertex_flow_inverse[vertex_two]}, " + f"In particular {vertex_two} is the flow of {self.flow_graph.predecessors(vertex_two)}, " f"some of which are measured before {vertex_one}." ) - self.mbqc_begun = True - # If this is the first future of vertex_one then it is taken to be its flow. - if vertex_one not in self.vertex_flow.keys() and ( - vertex_one not in self.output_vertices - ): - self.vertex_flow[vertex_one] = vertex_two - self.vertex_flow_inverse[vertex_two].append(vertex_one) + if vertex_one not in self._vertices_with_flow(): + self.flow_graph.add_edge( + u_of_edge=vertex_one, + v_of_edge=vertex_two, + ) self.CZ(self.vertex_qubit[vertex_one], self.vertex_qubit[vertex_two]) - assert vertex_one in self.graph.nodes - assert vertex_two in self.graph.nodes - self.graph.add_edge( + assert vertex_one in self.entanglement_graph.nodes + assert vertex_two in self.entanglement_graph.nodes + self.entanglement_graph.add_edge( u_of_edge=vertex_one, v_of_edge=vertex_two, ) def _apply_correction(self, vertex: int) -> None: - self.add_c_setreg(vertex, self.index_reg) - - self.add_wasm_to_reg( - "get_x_correction", - self.wfh, - [self.index_reg], - [self.qubit_x_corr_reg[self.vertex_qubit[vertex]]], - ) self.X( self.vertex_qubit[vertex], condition=self.qubit_x_corr_reg[self.vertex_qubit[vertex]][0], ) - self.add_wasm_to_reg( - "get_z_correction", - self.wfh, - [self.index_reg], - [self.qubit_z_corr_reg[self.vertex_qubit[vertex]]], - ) self.Z( self.vertex_qubit[vertex], condition=self.qubit_z_corr_reg[self.vertex_qubit[vertex]][0], ) def corrected_measure(self, vertex: int, t_multiple: int = 0) -> None: - if vertex in self.output_vertices: - raise Exception("This is an output qubit and cannot be measured.") - - if not all(self.vertex_measured[:vertex]): - print(self.vertex_measured[:vertex]) + if self.vertex_measured[vertex]: raise Exception( - "Measuremnt order has not been respected. " - + f"Vertices {[i for i, measured in enumerate(self.vertex_measured[:vertex]) if not measured]} " - + f"are in the past of {vertex} but have not been measured." + f"Vertex {vertex} has already been measured and cannot be measured again." ) - self.mbqc_begun = True + if any(self.vertex_measured[vertex:]): + raise Exception( + f"Measuring {vertex} does not respect the measurement order. " + + f"Vertices {[vertex + i for i, measured in enumerate(self.vertex_measured[vertex:]) if measured]} " + + f"are in the future of {vertex} and have already been measured." + ) self._apply_correction(vertex=vertex) @@ -214,29 +195,34 @@ def corrected_measure(self, vertex: int, t_multiple: int = 0) -> None: self.managed_measure(qubit=self.vertex_qubit[vertex]) self.vertex_measured[vertex] = True - # Check that the flow of the vertex being measued has + # Check that the flow of the vertex being measured has # not been measured. - assert not self.vertex_measured[self.vertex_flow[vertex]] - - self.add_c_setreg(value=self.vertex_flow[vertex], arg=self.index_reg) - self.add_wasm_to_reg( - "update_x_correction", - self.wfh, - [self.qubit_meas_reg[self.vertex_qubit[vertex]], self.index_reg], - [], + assert len(list(self.flow_graph.successors(vertex))) <= 1 + + if len(list(self.flow_graph.successors(vertex))) == 0: + raise Exception( + f"Vertex {vertex} has no flow. " + "It is not possible to perform a corrected measure of a qubit without flow. " + "Please give this vertex a flow, or use the get_output to perform the necessary corrections." + ) + vertex_flow = list(self.flow_graph.successors(vertex))[0] + assert not self.vertex_measured[vertex_flow] + + self.add_classicalexpbox_bit( + self.qubit_meas_reg[self.vertex_qubit[vertex]][0] + ^ self.qubit_x_corr_reg[self.vertex_qubit[vertex_flow]][0], + [self.qubit_x_corr_reg[self.vertex_qubit[vertex_flow]][0]], ) - for neigibour in self._vertex_neighbour(self.vertex_flow[vertex]): - if neigibour == vertex: + for neighbour in self.entanglement_graph.neighbors(n=vertex_flow): + if neighbour == vertex: continue - # Check that the vertex being updated has not been measued - assert not self.vertex_measured[neigibour] + # Check that the vertex being updated has not been measured + assert not self.vertex_measured[neighbour] - self.add_c_setreg(value=neigibour, arg=self.index_reg) - self.add_wasm_to_reg( - "update_z_correction", - self.wfh, - [self.qubit_meas_reg[self.vertex_qubit[vertex]], self.index_reg], - [], + self.add_classicalexpbox_bit( + self.qubit_meas_reg[self.vertex_qubit[vertex]][0] + ^ self.qubit_z_corr_reg[self.vertex_qubit[neighbour]][0], + [self.qubit_z_corr_reg[self.vertex_qubit[neighbour]][0]], ) diff --git a/pytket-mbqc-py/pytket_mbqc_py/pytket_mbqc_rus.wasm b/pytket-mbqc-py/pytket_mbqc_py/pytket_mbqc_rus.wasm deleted file mode 100755 index 981d9bb2..00000000 Binary files a/pytket-mbqc-py/pytket_mbqc_py/pytket_mbqc_rus.wasm and /dev/null differ diff --git a/pytket-mbqc-py/pytket_mbqc_py/qubit_manager.py b/pytket-mbqc-py/pytket_mbqc_py/qubit_manager.py index 4c9bf10f..15b4e775 100644 --- a/pytket-mbqc-py/pytket_mbqc_py/qubit_manager.py +++ b/pytket-mbqc-py/pytket_mbqc_py/qubit_manager.py @@ -1,15 +1,10 @@ from pytket import Circuit from pytket.unit_id import Qubit, BitRegister -import math class QubitManager(Circuit): - def __init__(self, n_qubits: int) -> None: - index_bits_required = max(1, math.ceil(math.log2(n_qubits))) - if index_bits_required >= 32: - raise Exception("You cannot index that many qubits.") - - self.qubit_list = [Qubit(index=i) for i in range(n_qubits)] + def __init__(self, n_physical_qubits: int) -> None: + self.qubit_list = [Qubit(index=i) for i in range(n_physical_qubits)] self.qubit_initialised = {qubit: False for qubit in self.qubit_list} self.qubit_meas_reg = { qubit: BitRegister(name=f"meas_{i}", size=1) @@ -35,9 +30,6 @@ def __init__(self, n_qubits: int) -> None: self.add_c_register(register=x_corr_reg) self.add_c_register(register=z_corr_reg) - self.index_reg = BitRegister(name="index", size=index_bits_required) - self.add_c_register(register=self.index_reg) - def get_qubit(self) -> Qubit: if len(self.qubit_list) == 0: raise Exception("You have run out of qubits.") @@ -50,20 +42,18 @@ def get_qubit(self) -> Qubit: self.add_c_setreg(0, self.qubit_x_corr_reg[qubit]) self.add_c_setreg(0, self.qubit_z_corr_reg[qubit]) self.add_c_setreg(0, self.qubit_meas_reg[qubit]) - - return qubit - - def get_plus_state(self) -> Qubit: - qubit = self.get_qubit() - self.Reset(qubit=qubit) - self.H(qubit=qubit) return qubit - def return_qubit(self, qubit: Qubit) -> None: - self.qubit_list.insert(0, qubit) + @property + def physical_qubits_used(self): + return [ + qubit + for qubit, initialised in self.qubit_initialised.items() + if initialised + ] def managed_measure(self, qubit: Qubit) -> None: - super().Measure(qubit=qubit, bit=self.qubit_meas_reg[qubit][0]) - self.return_qubit(qubit) + self.qubit_list.insert(0, qubit) + self.Measure(qubit=qubit, bit=self.qubit_meas_reg[qubit][0]) diff --git a/pytket-mbqc-py/pytket_mbqc_py/wasm_file_handler.py b/pytket-mbqc-py/pytket_mbqc_py/wasm_file_handler.py deleted file mode 100644 index 70336dec..00000000 --- a/pytket-mbqc-py/pytket_mbqc_py/wasm_file_handler.py +++ /dev/null @@ -1,8 +0,0 @@ -from pytket import wasm -import importlib_resources - - -def get_wasm_file_handler(): - return wasm.WasmFileHandler( - importlib_resources.files("pytket_mbqc_py").joinpath("pytket_mbqc_rus.wasm") - ) diff --git a/pytket-mbqc-py/tests/test_graph_circuit.py b/pytket-mbqc-py/tests/test_graph_circuit.py index 9d71d427..0e8e3130 100644 --- a/pytket-mbqc-py/tests/test_graph_circuit.py +++ b/pytket-mbqc-py/tests/test_graph_circuit.py @@ -1,26 +1,25 @@ -from pytket_mbqc_py import get_wasm_file_handler from pytket.extensions.quantinuum import QuantinuumBackend, QuantinuumAPIOffline -from pytket_mbqc_py import GraphCircuit +from pytket_mbqc_py import GraphCircuit, CNOTBlocksGraphCircuit from pytket.unit_id import BitRegister import pytest def test_plus_state(): - circuit = GraphCircuit(n_qubits_total=2) + circuit = GraphCircuit(n_physical_qubits=2) - input_qubit, index_one = circuit.add_input_vertex() + input_qubit, vertex_one = circuit.add_input_vertex() circuit.H(input_qubit) - circuit.add_output_vertex() + vertex_two = circuit.add_graph_vertex() - circuit.add_edge(vertex_one=0, vertex_two=1) - circuit.corrected_measure(vertex=0) + circuit.add_edge(vertex_one=vertex_one, vertex_two=vertex_two) + circuit.corrected_measure(vertex=vertex_one) - circuit._apply_correction(vertex=1) + output_qubits = circuit.get_outputs() output_reg = BitRegister(name="output", size=1) circuit.add_c_register(register=output_reg) - circuit.Measure(qubit=circuit.output_qubits[1], bit=output_reg[0]) + circuit.Measure(qubit=output_qubits[vertex_two], bit=output_reg[0]) backend = QuantinuumBackend( device_name="H1-1LE", api_handler=QuantinuumAPIOffline() @@ -30,28 +29,30 @@ def test_plus_state(): result = backend.run_circuit( circuit=compiled_circuit, n_shots=n_shots, - wasm_file_handler=get_wasm_file_handler(), ) assert result.get_counts(output_reg)[(0,)] == 100 def test_x_gate(): - circuit = GraphCircuit(n_qubits_total=3) + circuit = GraphCircuit(n_physical_qubits=3) - input_qubit, index_one = circuit.add_input_vertex() + _, vertex_one = circuit.add_input_vertex() - circuit.add_graph_vertex() - circuit.add_edge(vertex_one=0, vertex_two=1) - circuit.add_output_vertex() - circuit.add_edge(vertex_one=1, vertex_two=2) - circuit.corrected_measure(vertex=0, t_multiple=0) - circuit.corrected_measure(vertex=1, t_multiple=4) + vertex_two = circuit.add_graph_vertex() + circuit.add_edge(vertex_one=vertex_one, vertex_two=vertex_two) + vertex_three = circuit.add_graph_vertex() + circuit.add_edge(vertex_one=vertex_two, vertex_two=vertex_three) + circuit.corrected_measure(vertex=vertex_one, t_multiple=0) + circuit.corrected_measure(vertex=vertex_two, t_multiple=4) - circuit._apply_correction(vertex=2) + output_qubits = circuit.get_outputs() output_reg = BitRegister(name="output", size=1) circuit.add_c_register(register=output_reg) - circuit.Measure(qubit=circuit.output_qubits[2], bit=output_reg[0]) + circuit.Measure( + qubit=output_qubits[vertex_three], + bit=output_reg[0], + ) backend = QuantinuumBackend( device_name="H1-1LE", @@ -62,7 +63,6 @@ def test_x_gate(): result = backend.run_circuit( circuit=compiled_circuit, n_shots=100, - wasm_file_handler=get_wasm_file_handler(), ) assert result.get_counts(output_reg)[(1,)] == 100 @@ -73,48 +73,48 @@ def test_x_gate(): [((0, 0), (0, 0)), ((0, 1), (0, 1)), ((1, 0), (1, 1)), ((1, 1), (1, 0))], ) def test_cnot(input_state, output_state): - circuit = GraphCircuit(n_qubits_total=5) + circuit = GraphCircuit(n_physical_qubits=5) - target_qubit, _ = circuit.add_input_vertex() + target_qubit, vertex_one = circuit.add_input_vertex() if input_state[1]: circuit.X(target_qubit) - circuit.add_graph_vertex() - circuit.add_edge(vertex_one=0, vertex_two=1) + vertex_two = circuit.add_graph_vertex() + circuit.add_edge(vertex_one=vertex_one, vertex_two=vertex_two) - control_qubit, _ = circuit.add_input_vertex() + control_qubit, vertex_three = circuit.add_input_vertex() if input_state[0]: circuit.X(control_qubit) - circuit.add_graph_vertex() - circuit.add_edge(vertex_one=1, vertex_two=3) - circuit.corrected_measure(vertex=0, t_multiple=0) + vertex_four = circuit.add_graph_vertex() + circuit.add_edge(vertex_one=vertex_two, vertex_two=vertex_four) + circuit.corrected_measure(vertex=vertex_one, t_multiple=0) - circuit.add_graph_vertex() - circuit.add_edge(vertex_one=2, vertex_two=4) + vertex_five = circuit.add_graph_vertex() + circuit.add_edge(vertex_one=vertex_three, vertex_two=vertex_five) - circuit.add_graph_vertex() - circuit.add_edge(vertex_one=3, vertex_two=5) - circuit.corrected_measure(vertex=1, t_multiple=0) + vertex_six = circuit.add_graph_vertex() + circuit.add_edge(vertex_one=vertex_four, vertex_two=vertex_six) + circuit.corrected_measure(vertex=vertex_two, t_multiple=0) - circuit.add_output_vertex() - circuit.add_edge(vertex_one=4, vertex_two=6) - circuit.corrected_measure(vertex=2, t_multiple=0) + vertex_seven = circuit.add_graph_vertex() + circuit.add_edge(vertex_one=vertex_five, vertex_two=vertex_seven) + circuit.corrected_measure(vertex=vertex_three, t_multiple=0) - circuit.add_output_vertex() - circuit.add_edge(vertex_one=5, vertex_two=7) + vertex_eight = circuit.add_graph_vertex() + circuit.add_edge(vertex_one=vertex_six, vertex_two=vertex_eight) - circuit.add_edge(vertex_one=5, vertex_two=6) + circuit.add_edge(vertex_one=vertex_six, vertex_two=vertex_seven) - circuit.corrected_measure(vertex=3, t_multiple=0) - circuit.corrected_measure(vertex=4, t_multiple=0) - circuit.corrected_measure(vertex=5, t_multiple=0) + circuit.corrected_measure(vertex=vertex_four, t_multiple=0) + circuit.corrected_measure(vertex=vertex_five, t_multiple=0) + circuit.corrected_measure(vertex=vertex_six, t_multiple=0) - circuit.correct_outputs() + output_qubits = circuit.get_outputs() output_reg = BitRegister(name="output", size=2) circuit.add_c_register(register=output_reg) - circuit.Measure(qubit=circuit.output_qubits[6], bit=output_reg[0]) - circuit.Measure(qubit=circuit.output_qubits[7], bit=output_reg[1]) + circuit.Measure(qubit=output_qubits[vertex_seven], bit=output_reg[0]) + circuit.Measure(qubit=output_qubits[vertex_eight], bit=output_reg[1]) api_offline = QuantinuumAPIOffline() backend = QuantinuumBackend(device_name="H1-1LE", api_handler=api_offline) @@ -124,7 +124,78 @@ def test_cnot(input_state, output_state): result = backend.run_circuit( circuit=compiled_circuit, n_shots=n_shots, - wasm_file_handler=get_wasm_file_handler(), ) assert result.get_counts(output_reg)[output_state] == n_shots + + +@pytest.mark.parametrize( + "input_state, output_state, n_layers", + [ + ((1, 0), (1, 1), 1), + ((1, 1), (1, 1), 2), + ((1, 1, 0), (1, 1, 1), 2), + ((0, 1, 0), (0, 1, 1), 3), + ((1, 1, 1), (1, 1, 1), 4), + ((0, 0, 1), (0, 0, 1), 1), + ((0, 1, 1), (0, 1, 0), 1), + ], +) +def test_cnot_block(input_state, output_state, n_layers): + n_physical_qubits = 20 + + circuit = CNOTBlocksGraphCircuit( + n_physical_qubits=n_physical_qubits, + input_state=input_state, + n_layers=n_layers, + ) + + output_vertex_quibts = circuit.get_outputs() + output_reg = BitRegister(name="output", size=len(output_vertex_quibts)) + circuit.add_c_register(register=output_reg) + for i, qubit in enumerate(output_vertex_quibts.values()): + circuit.Measure(qubit=qubit, bit=output_reg[i]) + assert circuit.output_state == output_state + + api_offline = QuantinuumAPIOffline() + backend = QuantinuumBackend(device_name="H1-1LE", api_handler=api_offline) + compiled_circuit = backend.get_compiled_circuit(circuit) + + n_shots = 100 + result = backend.run_circuit( + circuit=compiled_circuit, + n_shots=n_shots, + ) + assert result.get_counts(output_reg)[output_state] == n_shots + + +@pytest.mark.high_compute +def test_large_cnot_block(): + input_state = (0, 1, 1, 0) + output_state = (0, 1, 0, 1) + n_layers = 3 + n_physical_qubits = 20 + + circuit = CNOTBlocksGraphCircuit( + n_physical_qubits=n_physical_qubits, + input_state=input_state, + n_layers=n_layers, + ) + + output_vertex_quibts = circuit.get_outputs() + output_reg = BitRegister(name="output", size=len(output_vertex_quibts)) + circuit.add_c_register(register=output_reg) + for i, qubit in enumerate(output_vertex_quibts.values()): + circuit.Measure(qubit=qubit, bit=output_reg[i]) + assert circuit.output_state == output_state + + api_offline = QuantinuumAPIOffline() + backend = QuantinuumBackend(device_name="H1-1LE", api_handler=api_offline) + compiled_circuit = backend.get_compiled_circuit(circuit) + + n_shots = 100 + result = backend.run_circuit( + circuit=compiled_circuit, + n_shots=n_shots, + ) + assert result.get_counts(output_reg)[output_state] == n_shots