diff --git a/.github/workflows/pull_request.yaml b/.github/workflows/pull_request.yaml index dd4f84a..8039bab 100644 --- a/.github/workflows/pull_request.yaml +++ b/.github/workflows/pull_request.yaml @@ -11,9 +11,9 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, macos-latest] - python-version: ["3.8", "3.9"] -# # os: [ ubuntu-latest, macos-latest, windows-latest] TODO: add windows + #os: [ubuntu-latest, macos-latest] + python-version: ["3.8", "3.9", "3.10"] + os: [ ubuntu-latest, macos-latest, windows-latest] # # python: [ "3.7", "3.8", "3.9", "3.10", '3.11'] TODO: add more python versions steps: diff --git a/poetry.lock b/poetry.lock index 52db106..2dbe38a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. +# This file is automatically @generated by Poetry 1.4.0 and should not be changed by hand. [[package]] name = "anyio" @@ -797,7 +797,6 @@ files = [ {file = "debugpy-1.6.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b5d1b13d7c7bf5d7cf700e33c0b8ddb7baf030fcf502f76fc061ddd9405d16c"}, {file = "debugpy-1.6.6-cp38-cp38-win32.whl", hash = "sha256:70ab53918fd907a3ade01909b3ed783287ede362c80c75f41e79596d5ccacd32"}, {file = "debugpy-1.6.6-cp38-cp38-win_amd64.whl", hash = "sha256:c05349890804d846eca32ce0623ab66c06f8800db881af7a876dc073ac1c2225"}, - {file = "debugpy-1.6.6-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:11a0f3a106f69901e4a9a5683ce943a7a5605696024134b522aa1bfda25b5fec"}, {file = "debugpy-1.6.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a771739902b1ae22a120dbbb6bd91b2cae6696c0e318b5007c5348519a4211c6"}, {file = "debugpy-1.6.6-cp39-cp39-win32.whl", hash = "sha256:549ae0cb2d34fc09d1675f9b01942499751d174381b6082279cf19cdb3c47cbe"}, {file = "debugpy-1.6.6-cp39-cp39-win_amd64.whl", hash = "sha256:de4a045fbf388e120bb6ec66501458d3134f4729faed26ff95de52a754abddb1"}, @@ -876,14 +875,14 @@ dev-env = ["black (==22.3.0)", "isort (>=5.7.0,<5.8.0)", "mypy (>=0.931.0,<0.932 [[package]] name = "exceptiongroup" -version = "1.1.0" +version = "1.1.1" description = "Backport of PEP 654 (exception groups)" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.0-py3-none-any.whl", hash = "sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e"}, - {file = "exceptiongroup-1.1.0.tar.gz", hash = "sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23"}, + {file = "exceptiongroup-1.1.1-py3-none-any.whl", hash = "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e"}, + {file = "exceptiongroup-1.1.1.tar.gz", hash = "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785"}, ] [package.extras] @@ -1958,14 +1957,14 @@ test = ["ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>= [[package]] name = "nbconvert" -version = "7.2.9" +version = "7.2.10" description = "Converting Jupyter Notebooks" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "nbconvert-7.2.9-py3-none-any.whl", hash = "sha256:495638c5e06005f4a5ce828d8a81d28e34f95c20f4384d5d7a22254b443836e7"}, - {file = "nbconvert-7.2.9.tar.gz", hash = "sha256:a42c3ac137c64f70cbe4d763111bf358641ea53b37a01a5c202ed86374af5234"}, + {file = "nbconvert-7.2.10-py3-none-any.whl", hash = "sha256:e41118f81698d3d59b3c7c2887937446048f741aba6c367c1c1a77810b3e2d08"}, + {file = "nbconvert-7.2.10.tar.gz", hash = "sha256:8eed67bd8314f3ec87c4351c2f674af3a04e5890ab905d6bd927c05aec1cf27d"}, ] [package.dependencies] @@ -2294,7 +2293,10 @@ files = [ ] [package.dependencies] -numpy = {version = ">=1.20.3", markers = "python_version < \"3.10\""} +numpy = [ + {version = ">=1.20.3", markers = "python_version < \"3.10\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, +] python-dateutil = ">=2.8.1" pytz = ">=2020.1" @@ -2331,14 +2333,14 @@ testing = ["docopt", "pytest (<6.0.0)"] [[package]] name = "pathspec" -version = "0.11.0" +version = "0.11.1" description = "Utility library for gitignore style pattern matching of file paths." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "pathspec-0.11.0-py3-none-any.whl", hash = "sha256:3a66eb970cbac598f9e5ccb5b2cf58930cd8e3ed86d393d541eaf2d8b1705229"}, - {file = "pathspec-0.11.0.tar.gz", hash = "sha256:64d338d4e0914e91c1792321e6907b5a593f1ab1851de7fc269557a21b30ebbc"}, + {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, + {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, ] [[package]] @@ -2485,14 +2487,14 @@ files = [ [[package]] name = "platformdirs" -version = "3.1.0" +version = "3.1.1" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.1.0-py3-none-any.whl", hash = "sha256:13b08a53ed71021350c9e300d4ea8668438fb0046ab3937ac9a29913a1a1350a"}, - {file = "platformdirs-3.1.0.tar.gz", hash = "sha256:accc3665857288317f32c7bebb5a8e482ba717b474f3fc1d18ca7f9214be0cef"}, + {file = "platformdirs-3.1.1-py3-none-any.whl", hash = "sha256:e5986afb596e4bb5bde29a79ac9061aa955b94fca2399b7aaac4090860920dd8"}, + {file = "platformdirs-3.1.1.tar.gz", hash = "sha256:024996549ee88ec1a9aa99ff7f8fc819bb59e2c3477b410d90a16d32d6e707aa"}, ] [package.extras] @@ -3022,89 +3024,89 @@ files = [ [[package]] name = "pyzmq" -version = "25.0.0" +version = "25.0.1" description = "Python bindings for 0MQ" category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "pyzmq-25.0.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:2d05d904f03ddf1e0d83d97341354dfe52244a619b5a1440a5f47a5b3451e84e"}, - {file = "pyzmq-25.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a154ef810d44f9d28868be04641f837374a64e7449df98d9208e76c260c7ef1"}, - {file = "pyzmq-25.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:487305c2a011fdcf3db1f24e8814bb76d23bc4d2f46e145bc80316a59a9aa07d"}, - {file = "pyzmq-25.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e7b87638ee30ab13230e37ce5331b3e730b1e0dda30120b9eeec3540ed292c8"}, - {file = "pyzmq-25.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75243e422e85a62f0ab7953dc315452a56b2c6a7e7d1a3c3109ac3cc57ed6b47"}, - {file = "pyzmq-25.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:31e523d067ce44a04e876bed3ff9ea1ff8d1b6636d16e5fcace9d22f8c564369"}, - {file = "pyzmq-25.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8539216173135e9e89f6b1cc392e74e6b935b91e8c76106cf50e7a02ab02efe5"}, - {file = "pyzmq-25.0.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2754fa68da08a854f4816e05160137fa938a2347276471103d31e04bcee5365c"}, - {file = "pyzmq-25.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4a1bc30f0c18444d51e9b0d0dd39e3a4e7c53ee74190bebef238cd58de577ea9"}, - {file = "pyzmq-25.0.0-cp310-cp310-win32.whl", hash = "sha256:01d53958c787cfea34091fcb8ef36003dbb7913b8e9f8f62a0715234ebc98b70"}, - {file = "pyzmq-25.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:58fc3ad5e1cfd2e6d24741fbb1e216b388115d31b0ca6670f894187f280b6ba6"}, - {file = "pyzmq-25.0.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:e4bba04ea779a3d7ef25a821bb63fd0939142c88e7813e5bd9c6265a20c523a2"}, - {file = "pyzmq-25.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:af1fbfb7ad6ac0009ccee33c90a1d303431c7fb594335eb97760988727a37577"}, - {file = "pyzmq-25.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85456f0d8f3268eecd63dede3b99d5bd8d3b306310c37d4c15141111d22baeaf"}, - {file = "pyzmq-25.0.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0645b5a2d2a06fd8eb738018490c514907f7488bf9359c6ee9d92f62e844b76f"}, - {file = "pyzmq-25.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f72ea279b2941a5203e935a4588b9ba8a48aeb9a926d9dfa1986278bd362cb8"}, - {file = "pyzmq-25.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:4e295f7928a31ae0f657e848c5045ba6d693fe8921205f408ca3804b1b236968"}, - {file = "pyzmq-25.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ac97e7d647d5519bcef48dd8d3d331f72975afa5c4496c95f6e854686f45e2d9"}, - {file = "pyzmq-25.0.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:656281d496aaf9ca4fd4cea84e6d893e3361057c4707bd38618f7e811759103c"}, - {file = "pyzmq-25.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1f6116991568aac48b94d6d8aaed6157d407942ea385335a6ed313692777fb9d"}, - {file = "pyzmq-25.0.0-cp311-cp311-win32.whl", hash = "sha256:0282bba9aee6e0346aa27d6c69b5f7df72b5a964c91958fc9e0c62dcae5fdcdc"}, - {file = "pyzmq-25.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:526f884a27e8bba62fe1f4e07c62be2cfe492b6d432a8fdc4210397f8cf15331"}, - {file = "pyzmq-25.0.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ccb3e1a863222afdbda42b7ca8ac8569959593d7abd44f5a709177d6fa27d266"}, - {file = "pyzmq-25.0.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4046d03100aca266e70d54a35694cb35d6654cfbef633e848b3c4a8d64b9d187"}, - {file = "pyzmq-25.0.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3100dddcada66ec5940ed6391ebf9d003cc3ede3d320748b2737553019f58230"}, - {file = "pyzmq-25.0.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7877264aa851c19404b1bb9dbe6eed21ea0c13698be1eda3784aab3036d1c861"}, - {file = "pyzmq-25.0.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:5049e75cc99db65754a3da5f079230fb8889230cf09462ec972d884d1704a3ed"}, - {file = "pyzmq-25.0.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:81f99fb1224d36eb91557afec8cdc2264e856f3464500b55749020ce4c848ef2"}, - {file = "pyzmq-25.0.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:a1cd4a95f176cdc0ee0a82d49d5830f13ae6015d89decbf834c273bc33eeb3d3"}, - {file = "pyzmq-25.0.0-cp36-cp36m-win32.whl", hash = "sha256:926236ca003aec70574754f39703528947211a406f5c6c8b3e50eca04a9e87fc"}, - {file = "pyzmq-25.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:94f0a7289d0f5c80807c37ebb404205e7deb737e8763eb176f4770839ee2a287"}, - {file = "pyzmq-25.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f3f96d452e9580cb961ece2e5a788e64abaecb1232a80e61deffb28e105ff84a"}, - {file = "pyzmq-25.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:930e6ad4f2eaac31a3d0c2130619d25db754b267487ebc186c6ad18af2a74018"}, - {file = "pyzmq-25.0.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e1081d7030a1229c8ff90120346fb7599b54f552e98fcea5170544e7c6725aab"}, - {file = "pyzmq-25.0.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:531866c491aee5a1e967c286cfa470dffac1e2a203b1afda52d62b58782651e9"}, - {file = "pyzmq-25.0.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:fc7c1421c5b1c916acf3128bf3cc7ea7f5018b58c69a6866d70c14190e600ce9"}, - {file = "pyzmq-25.0.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9a2d5e419bd39a1edb6cdd326d831f0120ddb9b1ff397e7d73541bf393294973"}, - {file = "pyzmq-25.0.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:183e18742be3621acf8908903f689ec520aee3f08449bfd29f583010ca33022b"}, - {file = "pyzmq-25.0.0-cp37-cp37m-win32.whl", hash = "sha256:02f5cb60a7da1edd5591a15efa654ffe2303297a41e1b40c3c8942f8f11fc17c"}, - {file = "pyzmq-25.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:cac602e02341eaaf4edfd3e29bd3fdef672e61d4e6dfe5c1d065172aee00acee"}, - {file = "pyzmq-25.0.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:e14df47c1265356715d3d66e90282a645ebc077b70b3806cf47efcb7d1d630cb"}, - {file = "pyzmq-25.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:293a7c2128690f496057f1f1eb6074f8746058d13588389981089ec45d8fdc77"}, - {file = "pyzmq-25.0.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:731b208bc9412deeb553c9519dca47136b5a01ca66667cafd8733211941b17e4"}, - {file = "pyzmq-25.0.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b055a1cddf8035966ad13aa51edae5dc8f1bba0b5d5e06f7a843d8b83dc9b66b"}, - {file = "pyzmq-25.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17e1cb97d573ea84d7cd97188b42ca6f611ab3ee600f6a75041294ede58e3d20"}, - {file = "pyzmq-25.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:60ecbfe7669d3808ffa8a7dd1487d6eb8a4015b07235e3b723d4b2a2d4de7203"}, - {file = "pyzmq-25.0.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4c25c95416133942280faaf068d0fddfd642b927fb28aaf4ab201a738e597c1e"}, - {file = "pyzmq-25.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:be05504af0619d1cffa500af1e0ede69fb683f301003851f5993b5247cc2c576"}, - {file = "pyzmq-25.0.0-cp38-cp38-win32.whl", hash = "sha256:6bf3842af37af43fa953e96074ebbb5315f6a297198f805d019d788a1021dbc8"}, - {file = "pyzmq-25.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:b90bb8dfbbd138558f1f284fecfe328f7653616ff9a972433a00711d9475d1a9"}, - {file = "pyzmq-25.0.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:62b9e80890c0d2408eb42d5d7e1fc62a5ce71be3288684788f74cf3e59ffd6e2"}, - {file = "pyzmq-25.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:484c2c4ee02c1edc07039f42130bd16e804b1fe81c4f428e0042e03967f40c20"}, - {file = "pyzmq-25.0.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9ca6db34b26c4d3e9b0728841ec9aa39484eee272caa97972ec8c8e231b20c7e"}, - {file = "pyzmq-25.0.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:610d2d112acd4e5501fac31010064a6c6efd716ceb968e443cae0059eb7b86de"}, - {file = "pyzmq-25.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3594c0ff604e685d7e907860b61d0e10e46c74a9ffca168f6e9e50ea934ee440"}, - {file = "pyzmq-25.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c21a5f4e54a807df5afdef52b6d24ec1580153a6bcf0607f70a6e1d9fa74c5c3"}, - {file = "pyzmq-25.0.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4725412e27612f0d7d7c2f794d89807ad0227c2fc01dd6146b39ada49c748ef9"}, - {file = "pyzmq-25.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4d3d604fe0a67afd1aff906e54da557a5203368a99dcc50a70eef374f1d2abef"}, - {file = "pyzmq-25.0.0-cp39-cp39-win32.whl", hash = "sha256:3670e8c5644768f214a3b598fe46378a4a6f096d5fb82a67dfd3440028460565"}, - {file = "pyzmq-25.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:e99629a976809fe102ef73e856cf4b2660acd82a412a51e80ba2215e523dfd0a"}, - {file = "pyzmq-25.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:66509c48f7446b640eeae24b60c9c1461799a27b1b0754e438582e36b5af3315"}, - {file = "pyzmq-25.0.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a9c464cc508177c09a5a6122b67f978f20e2954a21362bf095a0da4647e3e908"}, - {file = "pyzmq-25.0.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:28bcb2e66224a7ac2843eb632e4109d6b161479e7a2baf24e37210461485b4f1"}, - {file = "pyzmq-25.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0e7ef9ac807db50b4eb6f534c5dcc22f998f5dae920cc28873d2c1d080a4fc9"}, - {file = "pyzmq-25.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:5050f5c50b58a6e38ccaf9263a356f74ef1040f5ca4030225d1cb1a858c5b7b6"}, - {file = "pyzmq-25.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2a73af6504e0d2805e926abf136ebf536735a13c22f709be7113c2ec65b4bec3"}, - {file = "pyzmq-25.0.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0e8d00228db627ddd1b418c7afd81820b38575f237128c9650365f2dd6ac3443"}, - {file = "pyzmq-25.0.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5605621f2181f20b71f13f698944deb26a0a71af4aaf435b34dd90146092d530"}, - {file = "pyzmq-25.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6136bfb0e5a9cf8c60c6ac763eb21f82940a77e6758ea53516c8c7074f4ff948"}, - {file = "pyzmq-25.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:0a90b2480a26aef7c13cff18703ba8d68e181facb40f78873df79e6d42c1facc"}, - {file = "pyzmq-25.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:00c94fd4c9dd3c95aace0c629a7fa713627a5c80c1819326b642adf6c4b8e2a2"}, - {file = "pyzmq-25.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20638121b0bdc80777ce0ec8c1f14f1ffec0697a1f88f0b564fa4a23078791c4"}, - {file = "pyzmq-25.0.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6f75b4b8574f3a8a0d6b4b52606fc75b82cb4391471be48ab0b8677c82f9ed4"}, - {file = "pyzmq-25.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cbb885f347eba7ab7681c450dee5b14aed9f153eec224ec0c3f299273d9241f"}, - {file = "pyzmq-25.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c48f257da280b3be6c94e05bd575eddb1373419dbb1a72c3ce64e88f29d1cd6d"}, - {file = "pyzmq-25.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:866eabf7c1315ef2e93e34230db7cbf672e0d7c626b37c11f7e870c8612c3dcc"}, - {file = "pyzmq-25.0.0.tar.gz", hash = "sha256:f330a1a2c7f89fd4b0aa4dcb7bf50243bf1c8da9a2f1efc31daf57a2046b31f2"}, + {file = "pyzmq-25.0.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:94f65e13e6df035b0ae90d49adfe7891aa4e7bdeaa65265729fecc04ab3eb0fe"}, + {file = "pyzmq-25.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f0399450d970990705ce47ed65f5efed3e4627dfc80628c3798100e7b72e023b"}, + {file = "pyzmq-25.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f29709b0431668a967d7ff0394b00a865e7b7dde827ee0a47938b705b7c4aec3"}, + {file = "pyzmq-25.0.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4fee9420b34c0ab426f105926a701a3d73f878fe77f07a1b92e0b78d1e2c795c"}, + {file = "pyzmq-25.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57be375c6bc66b0f685cd298e5c1c3d7ee34a254145b8087aed6e25db372b0f3"}, + {file = "pyzmq-25.0.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a3309b2c5a5be3d48c9ade77b340361764449aa22854ac65935b1e6c0cdabe2c"}, + {file = "pyzmq-25.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7574d24579e83ee8c5d3b14769e7ba895161c43a601e911dd89d449e545e00ad"}, + {file = "pyzmq-25.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:041d617091258133e602919b28fdce4d3e2f8aedcd1e8b34c599653bc288d59e"}, + {file = "pyzmq-25.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7897ba8c3fedc6b3023bad676ceb69dbf90c077ff18ae3133ba43db47417cc72"}, + {file = "pyzmq-25.0.1-cp310-cp310-win32.whl", hash = "sha256:c462f70dadbd4649e572ca7cd1e7cf3305a8c2afc53b84214c0a7c0c3af8a657"}, + {file = "pyzmq-25.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e3a721710992cf0e213bbb7be48fb0f32202e8d01f556c196c870373bb9ad4f4"}, + {file = "pyzmq-25.0.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:b0a0fcf56279b9f3acc9b36a83feb7640c51b0db444b6870e4406d002be1d514"}, + {file = "pyzmq-25.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:95aff52fc847ea5755d2370f86e379ba2ed6eb67a0a6f90f0e8e99c553693b81"}, + {file = "pyzmq-25.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b55366e6c11e1ef7403d072b9867b62cf63eebd31dd038ef65bc8d65572854f6"}, + {file = "pyzmq-25.0.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64a2bc72bcad705ee42a8fe877478ddadb7e260e806562833d3d814125e28a44"}, + {file = "pyzmq-25.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca66aa24422d7f324acd5cb7fc7df616eb6f0205e059393fb108702e33e90c7"}, + {file = "pyzmq-25.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:58d5dfec2e2befd09b04c4683b3c984d2203cf6e054d0f9786be3826737ad612"}, + {file = "pyzmq-25.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3549292d65987e422e2c9f105b1485448381f489d8a6b6b040fc8b8f497bd578"}, + {file = "pyzmq-25.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5b1ca8b0df50d1ac88857ffe9ebd1347e0a5bb5f6e1d99940fdd7df0ffdefb49"}, + {file = "pyzmq-25.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a1a107e89cdcf799060ba4fa85fd3c942e19df7b24eb2600618b2406cc73c18e"}, + {file = "pyzmq-25.0.1-cp311-cp311-win32.whl", hash = "sha256:0f22ba4e9041549a5a3f5a545169dda52fa0aa7b5ef46b336cbe6679c4c3c134"}, + {file = "pyzmq-25.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:0644c0d5c73e4bfeee8148f638ab16ad783df1c4d6c2f968552a26a43fb002a1"}, + {file = "pyzmq-25.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c5eb4b17d73b1fc208a4faa6b5918983ccc961770aa37741891f61db302dae4e"}, + {file = "pyzmq-25.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:649dd55948144a108041397f07c1299086ce1c85c2e166831db3a33dac1d0c7f"}, + {file = "pyzmq-25.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c99fd8d3efc138d6a7fb1e822133f62bb18ffec66dc6d398dcb2ac2ab8eb2cb0"}, + {file = "pyzmq-25.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d72d69d4bb37c05a446d10bc40b391cf8fb7572654fb73fa69e7d2a395197e65"}, + {file = "pyzmq-25.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:036dbf8373aed4ccf56d58c561b23601b8f33919ec1093d8c77b37ac1259702d"}, + {file = "pyzmq-25.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:861c37649c75a2ecfc2034a32b9d5ca744e1e0cddcbf65afbd8027cf7d9755be"}, + {file = "pyzmq-25.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:92f04d63aecbb71d41f7db5f988167ef429f96d8197fd46684688cdb513e8a2e"}, + {file = "pyzmq-25.0.1-cp36-cp36m-win32.whl", hash = "sha256:866a4e918f1f4b2f83e9982b817df257910e3e50e456ffa74f141a10adcd11d1"}, + {file = "pyzmq-25.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:ec29c880b82cd38a63810a93b77e13f167e05732049101947772eed9ae805097"}, + {file = "pyzmq-25.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0241a334e39aa74e4ba0ae5f9e29521f1b48b8d56bf707f25f322c04eb423e99"}, + {file = "pyzmq-25.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3b7032f55b1ed2cd8c349a89e467dca2338b7765fab82cb64c3504e49adaf51"}, + {file = "pyzmq-25.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:960f98f562ee6a50ecf283bc62479d00f5ee10e9068a21683b9e961cd87c9261"}, + {file = "pyzmq-25.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:835da498b71570d56e5526de4d5b36fa10dd9b8a82e2c405f963afeb51ff5bdc"}, + {file = "pyzmq-25.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:21de2ef6099fa8d6a3c2dc15aaca58e9f9ffdcc7b82a246590aa9564815699d9"}, + {file = "pyzmq-25.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e448a5a294958e915a7e1b664e6fbfcd3814989d381fb068673317f6f3ea3f8"}, + {file = "pyzmq-25.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:40d909bdc8a2d64ad260925154712602ee6a0425ae0b08bce78a19adfdc2f05b"}, + {file = "pyzmq-25.0.1-cp37-cp37m-win32.whl", hash = "sha256:6ff37f2b818df25c887fd40bb434569db7ff66b35f5dfff6f40cc476aee92e3f"}, + {file = "pyzmq-25.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:f66ee27a0221771bbaa2cce456e8ca890569c3d18b08b955eb6420c12516537c"}, + {file = "pyzmq-25.0.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:1003bbae89435eadec03b4fa3bb6516dd1529fb09ae5704284f7400cc77009ba"}, + {file = "pyzmq-25.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dde7a65a8bfa88aa1721add504320f8344272542291ce4e7c77993fa32901567"}, + {file = "pyzmq-25.0.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:20b6155429d3b57e9e7bd11f1680985ef8b5b0868f1a64073fb8c01326c7c80c"}, + {file = "pyzmq-25.0.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e37a764cbf91c1ed9a02e4fede79a414284aca2a0b7d92d82a3c7b82d678ec2d"}, + {file = "pyzmq-25.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa56a362066b3a853a64d35693a08046f640961efcc0e7643768916403e72e70"}, + {file = "pyzmq-25.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c4bdf1241886d39d816535d3ef9fc325bbf02470c9fd5f2cb62706eeb834f7f2"}, + {file = "pyzmq-25.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:446acbac24427ef42bff61a807ddcad8d03df78fb976184a4d7d6f4b1e7d8a67"}, + {file = "pyzmq-25.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b39847501d229e5fab155d88a565edfb182cdd3f7046f15a7f2df9c77cdc422d"}, + {file = "pyzmq-25.0.1-cp38-cp38-win32.whl", hash = "sha256:cba6b81b653d789d76e438c2e77b49f610b23e84b3bb43b99100f08a0a5d637b"}, + {file = "pyzmq-25.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:6eca6b90c4fb290efd27582780b5eaf048887a32b2c5fcd6330819192cb07b38"}, + {file = "pyzmq-25.0.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:58207a6709e53b723105bac6bb3c6795ee134f7e71351f39c09d52ac235c6b0d"}, + {file = "pyzmq-25.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c62084f37682e7ee4064e8310078be4f6f7687bf528ae5761e2ba7216c5b8949"}, + {file = "pyzmq-25.0.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9c44e9f04f8ed99c6f2e9e49f29d400d7557dd9e9e3f64e1e8a595aedc4258a2"}, + {file = "pyzmq-25.0.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c635d1c40d341835066931a018e378428dfbe0347ed4bb45a6b57f7d8c34196e"}, + {file = "pyzmq-25.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eef93b5574c9ff36b4be376555efd369bd55b99bcc7be72f23bd38102dd9392b"}, + {file = "pyzmq-25.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:44bc81099ab33388f6c061c1b194307d877428cb2b18282d0385584d5c73ed72"}, + {file = "pyzmq-25.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6d988844ed6caa21b0076b64671e83a136d93c57f1ae5a72b915661af55d313b"}, + {file = "pyzmq-25.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9d5eb6e88ae8a8734f239ffe1ed90559a426cf5b859b8ee66e0cd43fc5daf5c9"}, + {file = "pyzmq-25.0.1-cp39-cp39-win32.whl", hash = "sha256:f6b45db9de4c8adbf5fda58e827a32315d282cfb01e54dc74e7c7ccc0988c010"}, + {file = "pyzmq-25.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:47eeb94b78aa442568b85ad28f85bd37a9c3c34d052cbf8ebf8622c45f23a9cd"}, + {file = "pyzmq-25.0.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0ed7475f3adf0c7750d75740b3267947b501a33f4625ceae709fda2e75ec9ed7"}, + {file = "pyzmq-25.0.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6d09c22ed4d0afcc662d17c2429a03fc1fae7fe7e3bc1f413e744bccfeaabdc3"}, + {file = "pyzmq-25.0.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:703ec5f5a8369c09d8f3eb626358bdb590a2b1375bcce8b7da01b3a03f8b8668"}, + {file = "pyzmq-25.0.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20aea31cc0d1f6c3fb4685db08b4c771545cf3fed3c4b4c8942c0a4e97042ec8"}, + {file = "pyzmq-25.0.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:b1c03b942557bb366fd3dc377a15763d5d688de1328228136c75e50f968333cc"}, + {file = "pyzmq-25.0.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4e8a5ced9d92837f52ccdae6351c627b5012669727bc3eede2dc0f581eca1d0e"}, + {file = "pyzmq-25.0.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d78f840d88244272fb7252e47522b1179833aff7ec64583bda3d21259c9c2c20"}, + {file = "pyzmq-25.0.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c3f78fa80780e24d294f9421123cb3bd3b68677953c53da85273a22d1c983298"}, + {file = "pyzmq-25.0.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f6de4305e02560111a5d4555758faa85d44a5bff70cccff58dbf30c81a079f0"}, + {file = "pyzmq-25.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:34a1b1a8ce9b20e01aba71b9279d9b1d4e5980a6a4e42092180e16628a444ca1"}, + {file = "pyzmq-25.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:625759a0112af7c3fb560de5724d749729f00b901f7625d1a3f3fb38897544b1"}, + {file = "pyzmq-25.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8cff159b21438c24476a49865f3d5700c9cc5833600661bc0e672decec2ff357"}, + {file = "pyzmq-25.0.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4cc47652d990de9ef967c494c526d73920ef064fef0444355a7cebec6fc50542"}, + {file = "pyzmq-25.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44db5162a6881f7d740dec65917f38f9bfbc5ad9a10e06d7d5deebb27eb63939"}, + {file = "pyzmq-25.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f38bf2c60a3f7b87cf5177043eb7a331a4f53bc9305a2452decbd42ad0c98741"}, + {file = "pyzmq-25.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b1cf4becd15669bc62a41c1b1bb742e22ac25965134e4254cde82a4dc2554b1b"}, + {file = "pyzmq-25.0.1.tar.gz", hash = "sha256:44a24f7ce44e70d20e2a4c9ba5af70b4611df7a4b920eed2c8e0bdd5a5af225f"}, ] [package.dependencies] @@ -3684,6 +3686,12 @@ files = [ {file = "symengine-0.9.2-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:dfb3c764a52f2ade33c90c64baa14175103b6527773f2e23c961906159515725"}, {file = "symengine-0.9.2-cp310-cp310-manylinux2014_ppc64le.whl", hash = "sha256:2ca84ce89c27788e9675fad31c8fa05317acd7ec7e034b562f3d3a6e72bf8004"}, {file = "symengine-0.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:eaf3604c469af16c1aa9d8f4287295e616840d7d14eeaab13228dd11c5e5fe75"}, + {file = "symengine-0.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:78c116c6220baf3c0fa93858e965db44661455e5f8d34558fef649b7c7be5e57"}, + {file = "symengine-0.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:467621288f51f0315f5fc079e6919fad501faa99a5ed65c1f46197dc1be7fa47"}, + {file = "symengine-0.9.2-cp311-cp311-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1d6d92b02d2e72137d63520c4a2326ff4e1c1c24724160bd31e7f7370ad94185"}, + {file = "symengine-0.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:061e045b9fef170b1f11a6f1c9aa387ec44d60480988a0af91ed26c96fb9427b"}, + {file = "symengine-0.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:438b04f7089993caef00839a1e926f8b32cee77d7fb1f0e0d7cc69c351d16c08"}, + {file = "symengine-0.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:376f74c0885b2f041fc08c00b63aae1c6732804da7a591d658a82ba1b70f2167"}, {file = "symengine-0.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4bd4e32bd3208477e5da0fa1c0a23f1f54c32bfc9d4fa25c433af03dfbb92342"}, {file = "symengine-0.9.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:dd2b06fcb133bbbb41428a94c6c07f8f151a02c18deb26382b7e878a808971ba"}, {file = "symengine-0.9.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:aa6e193701d244e49a141782cd87248c00d78cff398cd395d46db632bec41cf4"}, @@ -3703,6 +3711,14 @@ files = [ {file = "symengine-0.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:add5dd16568a82fbf7c8ad8f68776040ece19a8f02380121a65c6610b5849ec1"}, {file = "symengine-0.9.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:516ce80e73de94e1952cdf8ecbb75c581c6512b61f05979b92d3ad09867663ed"}, {file = "symengine-0.9.2-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:0698bc5a95784f791feae5c6afbf49c4ccc2ce64531e4db505a2c0d1276fd015"}, + {file = "symengine-0.9.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1bd97d07fb5b82965c60713407cc7f8145d62406185df812beb31150a3c29fd0"}, + {file = "symengine-0.9.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5040bf8d1fc34d958a83299dcc8a529e5f66fda416fe8f405466e10b0cd8e553"}, + {file = "symengine-0.9.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7670f0c305a404c70a757c1aa0d7a81dbd5693bd6a04345e470a7584f166d684"}, + {file = "symengine-0.9.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0bdf6102e01e1f81eca818d1ff538b100fa9462f30aa050ca4bb3246cb4874aa"}, + {file = "symengine-0.9.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1c2157602dc8b2ff6bfe6e9fdba7d527e674ebbeb73de1eb4fe197b3ddf226bb"}, + {file = "symengine-0.9.2-pp39-pypy39_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6eeeb5adf713be620c80c9fc2c215fac51c971e2bd57982da60c6f791af63f96"}, + {file = "symengine-0.9.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89ccaeba9637c16e7a6b6443dfba36de99e6020ff5a4ca76c1a1710d43d04db7"}, + {file = "symengine-0.9.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db8117e21bf73e0db144e060354cdbfb6b893e9125cf8fd43565e1546c186840"}, {file = "symengine-0.9.2.tar.gz", hash = "sha256:0f7e45f5bba3fa844f7de7aa8d6640faaacb1075df76d8e4996e82b0ec6a4f62"}, ] @@ -3925,14 +3941,14 @@ dev = ["flake8 (<4.0.0)", "flake8-annotations", "flake8-bugbear", "flake8-commas [[package]] name = "urllib3" -version = "1.26.14" +version = "1.26.15" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ - {file = "urllib3-1.26.14-py2.py3-none-any.whl", hash = "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1"}, - {file = "urllib3-1.26.14.tar.gz", hash = "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72"}, + {file = "urllib3-1.26.15-py2.py3-none-any.whl", hash = "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42"}, + {file = "urllib3-1.26.15.tar.gz", hash = "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305"}, ] [package.extras] @@ -4105,5 +4121,5 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.0" -python-versions = ">=3.8 <3.10" -content-hash = "0c563db4adc5cf3fb34c226f718e90cfe737568dc8e24982448122eff6212282" +python-versions = ">=3.8 <3.11" +content-hash = "7cfae7960701e64d87b2cb29964bab43756a088b656f9c6c81667a137884f5a1" diff --git a/pyproject.toml b/pyproject.toml index 1afdbb0..4814100 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ authors = ["AlexisRalli ", "TimWeaving "MajoranaOp": - """ - Function wraps inbuilt functions in OpenFermion and returns symmer form. - - Convserion as: - a_{p} = 0.5*(γ_{2p} + iγ_{2p+1}) - a†_{p} = 0.5*(γ_{2p} - iγ_{2p+1}) - note goes from N sites to 2N sites! - - Args: - fermionic_op (FermionOperator): openfermion FermionOperator - Returns: - op_out (MajoranaOp): majorana form of input fermionic_op - - """ - if not isinstance(fermionic_op, FermionOperator): - raise ValueError('not an openfermion Fermionic operator') - - N_sites = count_qubits(fermionic_op) - maj_operator = get_majorana_operator(fermionic_op) - - N_terms = len(maj_operator.terms) - majorana = np.zeros((N_terms, 2 * N_sites)) - coeffs = np.zeros(N_terms, dtype=complex) - for ind, term_coeff in enumerate(maj_operator.terms.items()): - majorana[ind, term_coeff[0]] = 1 - coeffs[ind] = term_coeff[1] - - op_out = MajoranaOp(majorana, - coeffs, - phase_factors_included=phase_factors_included).cleanup() - - # if op_out.to_OF_op() != get_majorana_operator(fermionic_op): - # # check using openF == comparison - # raise ValueError('op not converted correctly') - - return op_out - - -def bubble_sort_maj(array): - """ - - Given an array/list of majorana modes use bubble sort alg to reorder by size and keep track of sign - - e.g. given - [12,10] then we get y_10 y_12 (but order change here must generate a negative sign!) - y_12 y_10 == -1*(y_10 y_12) - - Args: - array (list): list of ints - - Returns: - arr (list): sorted list of ints - sign (int): +1 or -1 sign generated by normal ordering - - """ - - arr = np.asarray(array) - n_sites = arr.shape[0] - sign_dict = {0: +1, 1:-1} - # Traverse through all array elements - swap_counter = 0 - for i in range(n_sites): - swapped = False - for j in range(0, n_sites - i - 1): - if arr[j] > arr[j + 1]: - arr[j], arr[j + 1] = arr[j + 1], arr[j] - swapped = True - swap_counter+=1 - - if swapped == False: - break - - return arr.tolist(), sign_dict[swap_counter%2] - -class MajoranaOp: - """ - A class thats represents an operator defined as Majorana fermionic operators (stored in a symplectic representation). - - Note Majorana operators follow the following definition: - - { γ_{j} , γ_{k} } = 2δ_{jk}I (aka same as the Pauli group!) - - """ - - def __init__(self, - symp_matrix: np.array, - coeff_list: np.array, - phase_factors_included:bool=True, - ) -> None: - """ - - """ - if symp_matrix.dtype == int: - # initialization is slow if not boolean array - assert(set(np.unique(symp_matrix)).issubset({0,1})), 'symplectic matrix not defined with 0 and 1 only' - symp_matrix = symp_matrix.astype(bool) - - if len(symp_matrix.shape)==1: - symp_matrix = symp_matrix.reshape([1, len(symp_matrix)]) - - assert symp_matrix.shape[1]%2==0, 'majoranas defined on even number of modes' - self.n_sites = symp_matrix.shape[1] - self.symp_matrix = symp_matrix - - self.coeff_vec = np.asarray(coeff_list, dtype=complex) - self.term_index_list = np.arange(0, self.n_sites, 1) - self.n_terms = self.symp_matrix.shape[0] - - self.phase_factors_included = phase_factors_included - if self.phase_factors_included is False: - # calculate phase factors and update coeff vector - self.coeff_vec*= (1j)**(np.einsum('ij->i', self.symp_matrix.astype(int))//2) - self.phase_factors_included = True - - # 2i positions - self.even_inds = np.arange(0,self.n_sites, 2) - # 2i+1 positions - self.odd_inds = np.arange(1,self.n_sites, 2) - - @classmethod - def from_list(cls, - maj_indices: Union[List[int], np.array], - coeff_vec: List[complex] = None, - phase_factors_included: bool = False - ) -> "MajoranaOp": - """ - generate majorana operator from list of maj indices. - - Each row in symplectic array is defined as: - 𝛾𝐴= 𝑖^{⌊|𝛾𝐴|2⌋} * ∏_{𝑘∈𝐴} 𝛾𝑘 - - where 𝑖^{⌊|𝛾𝐴|2⌋} gives phase factor which ensures these operators are Hermitian! - - See eq 10 of: https://arxiv.org/pdf/2102.00620.pdf - - Note sorts into correct ordering via a bubble sort. - - Args: - maj_indices: - coeff_vec: - phase_factors_included (bool): whether to calculate phase factors - - Returns: - MajoranaOp of input - """ - maj_indices = np.asarray(maj_indices) - if not isinstance(maj_indices, np.ndarray): - raise ValueError('need array or list input') - - flat_list = set(maj_indices.reshape([-1])) - if flat_list: - # python indexing... therefore add 1 - n_sites = max(flat_list) + 1 - if n_sites%2!=0: - # majorana must be even - n_sites+=1 - else: - # zero term! - n_sites = 2 - symp_matrix = np.array([[False, False]]) - return cls(symp_matrix, coeff_vec) - - n_terms = len(maj_indices) - symp_matrix = np.zeros((n_terms, n_sites), dtype=bool) - for ind, term in enumerate(maj_indices): - ordered_term, sign = bubble_sort_maj(term) - symp_matrix[ind, ordered_term] = True - coeff_vec[ind] *= sign - - assert (symp_matrix.shape[0] == len(coeff_vec)), 'incorrect number of coefficients' - - ## calc phase factors - if phase_factors_included is False: - # calculate phase factors and update coeff vector - coeff_vec*= (1j)**(np.einsum('ij->i', symp_matrix.astype(int))//2) - phase_factors_included= True - - return cls(symp_matrix, coeff_vec, phase_factors_included=phase_factors_included) - - - def __str__(self) -> str: - """ - Defines the print behaviour of MajoranaOp - - returns the operator in an easily readable format - - Returns: - out_string (str): human-readable MajoranaOp string - """ - out_string = '' - for majorana_vec, ceoff in zip(self.symp_matrix, self.coeff_vec): - maj_inds = self.term_index_list[majorana_vec.astype(bool)] - maj_string = ' '.join([f'γ{ind}' for ind in maj_inds]) - if maj_string == '': - maj_string = 'I' - - out_string += (f'{ceoff} {maj_string} +\n') - return out_string[:-3] - - def commutator(self, M_OP: "MajoranaOp") -> "MajoranaOp": - """ Computes the commutator [A, B] = AB - BA - """ - return (self * M_OP - M_OP * self).cleanup() - - def anticommutator(self, M_OP: "MajoranaOp") -> "MajoranaOp": - """ Computes the anticommutator {A, B} = AB + BA - """ - return (self * M_OP + M_OP * self).cleanup() - - def commutes(self, - M_OP: "MajoranaOp" - ) -> bool: - """ Checks if every term of self commutes with every term of Pword - """ - return self.commutator(M_OP).n_terms == 0 - - @property - def dagger(self) -> "MajoranaOp": - """ - Similar idea to hermitian conjugate operation on Pauli operators (reverse order then dagger) - - aka: [γ0 γ1 γ2 γ3 γ4 γ5]† == γ5† γ4† γ3† γ2† γ1† γ0† = γ5 γ4 γ3 γ2 γ1 γ0 - Then need to re-order so as in numerical order (note sign changes on re-ordering!) - - note to sort the flipped term when originally in sorted numerical order requires: N(N-1) /2 swaps for N sites - Therefore even changes give +1 sign and odd changes give -1 sign so can do fast modulo arithmetic - - Returns: - Maj_conj (MajoranaOp): The Hermitian conjugated operator - """ - # new_terms = [] - # for sym_vec in self.symp_matrix: - # current_term = self.term_index_list[sym_vec] - # new_terms.append(current_term[::-1]) # reverse order - # # note when reversed performs bubble sort to put back into correct order - # Maj_conj = MajoranaOp.from_list(new_terms, self.coeff_vec.conjugate(), phase_factors_included=True) - - N = np.einsum('ij->i', self.symp_matrix.astype(int)) - swaps = (N*(N-1)/2) % 2 - sign_changes = -1*swaps + (-1*swaps+1) - Maj_conj = MajoranaOp(self.symp_matrix, - sign_changes*self.coeff_vec.conjugate(), - phase_factors_included=True) - return Maj_conj - - def commutes_termwise(self, M_OP: "MajoranaOp") -> np.array: - """ Computes commutation relations between self and another MajoranaOp - - see https://arxiv.org/pdf/2101.09349.pdf (eq 9) - """ - if self.n_sites != M_OP.n_sites: - sites = min(self.n_sites, M_OP.n_sites) - else: - sites = self.n_sites - - suppA = np.einsum('ij->i', self.symp_matrix) - suppB = np.einsum('ij->i', M_OP.symp_matrix) - AtimeB = np.outer(suppA, suppB) # need all combinations of suppA times suppB - - # only look over common inds - AandB = np.dot(self.symp_matrix[:, :sites], M_OP.symp_matrix[:, :sites].T) - comm_flag = (AtimeB + AandB + 1) % 2 - - return comm_flag - - def adjacency_matrix(self): - """ Checks which terms of self commute within itself - """ - adj = self.commutes_termwise(self) - return adj - - def copy(self) -> "MajoranaOp": - """ - Create a carbon copy of the class instance - """ - return deepcopy(self) - - def __add__(self, - M_OP: "MajoranaOp" - ) -> "MajoranaOp": - """ Add to this PauliwordOp another PauliwordOp by stacking the - respective symplectic matrices and cleaning any resulting duplicates - """ - if self.n_sites != M_OP.n_sites: - if self.n_sites < M_OP.n_sites: - temp_mat = np.zeros((self.n_terms, M_OP.n_sites)) - temp_mat[:, :self.n_sites] += self.symp_matrix - P_symp_mat_new = np.vstack((temp_mat, M_OP.symp_matrix)) - else: - temp_mat = np.zeros((M_OP.n_terms, self.n_sites)) - temp_mat[:, :M_OP.n_sites] += M_OP.symp_matrix - P_symp_mat_new = np.vstack((self.symp_matrix, temp_mat)) - else: - P_symp_mat_new = np.vstack((self.symp_matrix, M_OP.symp_matrix)) - - P_new_coeffs = np.hstack((self.coeff_vec, M_OP.coeff_vec)) - - # cleanup run to remove duplicate rows (Pauliwords) - return MajoranaOp(P_symp_mat_new, P_new_coeffs, phase_factors_included=True).cleanup() - - def __eq__(self, M_OP: "MajoranaOp" - ) -> bool: - """ - - Args: - M_OP: - - Returns: - - """ - check_1 = self.cleanup() - check_2 = M_OP.cleanup() - if check_1.n_terms != check_2.n_terms: - return False - - if check_1.n_sites != check_2.n_sites: - if check_1.n_sites < check_2.n_sites: - temp_mat_self = np.zeros((check_1.n_terms, check_2.n_sites)) - temp_mat_self[:, :check_1.n_sites] += check_1.symp_matrix - temp_mat_M_OP = check_2.symp_matrix - else: - temp_mat_M_OP = np.zeros((check_2.n_terms, check_1.n_sites)) - temp_mat_M_OP[:, :check_2.n_sites] += check_2.symp_matrix - temp_mat_self = check_1.symp_matrix - else: - temp_mat_M_OP = check_2.symp_matrix - temp_mat_self = check_1.symp_matrix - - return (not np.einsum('ij->', np.logical_xor(temp_mat_self, temp_mat_M_OP)) and np.allclose(check_1.coeff_vec, check_2.coeff_vec)) - - def __sub__(self, - M_OP: "MajoranaOp" - ) -> "MajoranaOp": - """ Subtract from this MajoranaOp another MajoranaOp - by negating the coefficients and summing - """ - op_copy = M_OP.copy() - op_copy.coeff_vec *= -1 - - return self + op_copy - - def cleanup(self, zero_threshold=1e-15) -> "MajoranaOp": - """ Remove duplicated rows of symplectic matrix terms, whilst summing - the corresponding coefficients of the deleted rows in coeff - """ - # convert sym form to list of ints - int_list = self.symp_matrix @ (1 << np.arange(self.symp_matrix.shape[1])[::-1]) - re_order_indices = np.argsort(int_list) - sorted_int_list = int_list[re_order_indices] - - sorted_symp_matrix = self.symp_matrix[re_order_indices] - sorted_coeff_vec = self.coeff_vec[re_order_indices] - - # determine the first indices of each element in the sorted list (and ignore duplicates) - elements, indices = np.unique(sorted_int_list, return_counts=True) - row_summing = np.append([0], np.cumsum(indices))[:-1] # [0, index1, index2,...] - - # reduced_symplectic_matrix = np.add.reduceat(sorted_symp_matrix, row_summing, axis=0) - reduced_symplectic_matrix = sorted_symp_matrix[row_summing] - reduced_coeff_vec = np.add.reduceat(sorted_coeff_vec, row_summing, axis=0) - - # return nonzero coeff terms! - mask_nonzero = np.where(abs(reduced_coeff_vec) > zero_threshold) - return MajoranaOp(reduced_symplectic_matrix[mask_nonzero], - reduced_coeff_vec[mask_nonzero], phase_factors_included=True) - - def to_OF_op(self): - open_f_op = MajoranaOperator() - for majorana_vec, ceoff in zip(self.symp_matrix, self.coeff_vec): - maj_inds = self.term_index_list[majorana_vec.astype(bool)] - - open_f_op += MajoranaOperator(term=tuple(maj_inds.tolist()), - coefficient=ceoff) - return open_f_op - - - def __repr__(self): - return str(self) - - def __mul__(self, - M_OP: "MajoranaOp" - ) -> "MajoranaOp": - """ - Right-multiplication of this MajoranaOp by another MajoranaOp - """ - if self.n_sites != M_OP.n_sites: - if self.n_sites < M_OP.n_sites: - temp_mat_self = np.zeros((self.n_terms, M_OP.n_sites)) - temp_mat_self[:, :self.n_sites] += self.symp_matrix - temp_mat_M_OP = M_OP.symp_matrix - term_index_list = M_OP.term_index_list - else: - temp_mat_M_OP = np.zeros((M_OP.n_terms, self.n_sites)) - temp_mat_M_OP[:, :M_OP.n_sites] += M_OP.symp_matrix - temp_mat_self = self.symp_matrix - term_index_list = self.term_index_list - else: - temp_mat_M_OP = M_OP.symp_matrix - temp_mat_self = self.symp_matrix - term_index_list = self.term_index_list - - new_vec = np.zeros((self.n_terms * M_OP.n_terms, max(temp_mat_M_OP.shape[1], - temp_mat_self.shape[1]) - ), dtype=int) - new_coeff_vec = np.zeros((self.n_terms * M_OP.n_terms), dtype=complex) - # new_coeff_vec = np.outer(self.coeff_vec, M_OP.coeff_vec).flatten() - # sign_dict = {0: 1, 1: -1} - - ind = 0 - for ind1, vec1 in enumerate(temp_mat_self): - for ind2, vec2 in enumerate(temp_mat_M_OP): - new_vec[ind] = np.logical_xor(vec1, vec2).astype(int) - _, reordering_sign = bubble_sort_maj(np.array(( - *(term_index_list[vec1.astype(bool)]), - *(term_index_list[vec2.astype(bool)]) - ) - ) - ) - new_coeff_vec[ind] = self.coeff_vec[ind1] * M_OP.coeff_vec[ind2] * reordering_sign - ind += 1 - - return MajoranaOp(new_vec, new_coeff_vec, phase_factors_included=True).cleanup() - - -class majorana_rotations(): - def __init__(self, majorana_basis): - self.majorana_basis = majorana_basis - - self.used_indices = None - self.maj_rotations = None - self.rotated_basis = None - - def _delete_reduced_rows(self, maj_op): - z_term_check = np.logical_and(maj_op.symp_matrix[:, maj_op.even_inds], - maj_op.symp_matrix[:, maj_op.odd_inds]).astype(int) - - single_z_rows = np.intersect1d(np.where(np.einsum('ij->i', z_term_check) == 1)[0], - np.where(np.einsum('ij->i', maj_op.symp_matrix) == 2)[0]) - - maj_z_pair_indices = set(np.where(np.einsum('ij->j', maj_op.symp_matrix[single_z_rows]) == 1)[0]) - - singles_operator = None - if len(single_z_rows) > 0: - singles_operator = MajoranaOp(maj_op.symp_matrix[single_z_rows], - maj_op.coeff_vec[single_z_rows], - phase_factors_included=True) - - reduced_maj = MajoranaOp(np.delete(maj_op.symp_matrix, single_z_rows, axis=0), - np.delete(maj_op.coeff_vec, single_z_rows, axis=0) - , phase_factors_included=True) - - # if (len(maj_z_pair_indices)%2)!=0: - # print('OP:', maj_op) - # print('Z inds', maj_z_pair_indices) - # raise ValueError('not Z inds') - - return set(maj_z_pair_indices), singles_operator, reduced_maj - - def get_rotations(self): - self.used_indices = [] - self.maj_rotations = [] - self.rotated_basis = [] - - maj_basis = self.majorana_basis.cleanup().copy() - - ## find any alread single terms - maj_z_pair_indices, singles_operator, maj_basis = self._delete_reduced_rows(maj_basis) - if singles_operator: - self.rotated_basis.append(singles_operator) - - self.used_indices = set(maj_z_pair_indices) - - final_terms = self._recursively_rotate(maj_basis) - if final_terms.n_terms!=0: - raise ValueError('not fully reduced') - - return self.rotated_basis, self.maj_rotations - - def _recursively_rotate(self, maj_basis): - - maj_z_pair_indices, singles_operator, maj_basis = self._delete_reduced_rows(maj_basis) - self.used_indices.update(maj_z_pair_indices) - - if maj_basis.n_terms == 0: - # no more terms left - return maj_basis - - # sort by most dense majorana operator (as will have fewest terms) - sort_rows_by_weight = np.lexsort(maj_basis.symp_matrix.T)[::-1] - - # take first term (which is least dense) - pivot_row = maj_basis.symp_matrix[sort_rows_by_weight][0] - - # get non identity positions (also ignores positions that have been rotated onto!) - inds = np.where(np.logical_or(pivot_row[maj_basis.even_inds], pivot_row[maj_basis.odd_inds]))[0] - indice_full = np.hstack((2 * inds, 2 * inds + 1)) - non_I = np.setdiff1d(indice_full, np.array(self.used_indices)) - - # gives number of times modes in each position occur - col_sum = np.einsum('ij->j', maj_basis.symp_matrix) - - # pivot_row * col_sum : gives positions where pivot term and where other single mode terms occur - support = pivot_row * col_sum - # want to take lowest index support (as this will allow unique terms) - pivot_point = non_I[np.argmin(support[non_I])] - - if pivot_point % 2 == 0: - pivot_point_even = pivot_point - pivot_point_odd = pivot_point_even + 1 # 2i+1 index! - else: - pivot_point_odd = pivot_point - pivot_point_even = pivot_point_odd - 1 - - # take term we are rotating to single term - rot_op = pivot_row.copy() - pivot_maj = MajoranaOp(pivot_row, [1]) - - # check if pivot term is Pauli Z term... if so then rotate pivot position to something else! - if (pivot_row[pivot_point_even] + pivot_row[pivot_point_odd]) == 2: - Z_rot = True - # apply op like Pauli X on pivot position - rot_op_inds = list(range(0, pivot_point_odd)) - - # rotate Z onto different term - maj_rot_op = MajoranaOp([[], rot_op_inds], [np.cos(np.pi / 4), 1j * np.sin(np.pi / 4)]) - rot_basis_out = (maj_rot_op * maj_basis * maj_rot_op.dagger).cleanup() - rot_piv = (maj_rot_op * pivot_maj * maj_rot_op.dagger).cleanup() - self.maj_rotations.append(maj_rot_op) - - elif rot_op[pivot_point_even] == rot_op[pivot_point_odd] == 0: - raise ValueError('pivot error (identity term being used)') - else: - # no rotation needed! - rot_basis_out = maj_basis.copy() - rot_piv = pivot_maj.copy() - - rot_op2 = rot_piv.symp_matrix[0].copy() - # pivot position is X or Y - # if X use Y and if Y use X to make pauli Z on this position - rot_op2[pivot_point_even] = (rot_op2[pivot_point_even] + 1) % 2 - rot_op2[pivot_point_odd] = (rot_op2[pivot_point_odd] + 1) % 2 - - rot2_sym = np.zeros((2, len(pivot_row))) - rot2_sym[1] = rot_op2 - maj_rot_op2 = MajoranaOp(rot2_sym, [np.cos(np.pi / 4), 1j * np.sin(np.pi / 4)]) - - rot_basis_out2 = maj_rot_op2 * rot_basis_out * maj_rot_op2.dagger # .cleanup() - - self.maj_rotations.append(maj_rot_op2) - - rotated_term = (maj_rot_op2 * rot_piv * maj_rot_op2.dagger).cleanup() - - self.rotated_basis.append(rotated_term) - - return self._recursively_rotate(rot_basis_out2) -