diff --git a/poetry.lock b/poetry.lock index e860023..1acac5e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -176,13 +176,13 @@ tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "p [[package]] name = "babel" -version = "2.14.0" +version = "2.15.0" description = "Internationalization utilities" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"}, - {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"}, + {file = "Babel-2.15.0-py3-none-any.whl", hash = "sha256:08706bdad8d0a3413266ab61bd6c34d0c28d6e1e7badf40a2cebe67644e2e1fb"}, + {file = "babel-2.15.0.tar.gz", hash = "sha256:8daf0e265d05768bc6c7a314cf1321e9a123afc328cc635c18622a2f30a04413"}, ] [package.extras] @@ -211,33 +211,33 @@ lxml = ["lxml"] [[package]] name = "black" -version = "24.4.0" +version = "24.4.2" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-24.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6ad001a9ddd9b8dfd1b434d566be39b1cd502802c8d38bbb1ba612afda2ef436"}, - {file = "black-24.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e3a3a092b8b756c643fe45f4624dbd5a389f770a4ac294cf4d0fce6af86addaf"}, - {file = "black-24.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dae79397f367ac8d7adb6c779813328f6d690943f64b32983e896bcccd18cbad"}, - {file = "black-24.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:71d998b73c957444fb7c52096c3843875f4b6b47a54972598741fe9a7f737fcb"}, - {file = "black-24.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8e5537f456a22cf5cfcb2707803431d2feeb82ab3748ade280d6ccd0b40ed2e8"}, - {file = "black-24.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:64e60a7edd71fd542a10a9643bf369bfd2644de95ec71e86790b063aa02ff745"}, - {file = "black-24.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cd5b4f76056cecce3e69b0d4c228326d2595f506797f40b9233424e2524c070"}, - {file = "black-24.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:64578cf99b6b46a6301bc28bdb89f9d6f9b592b1c5837818a177c98525dbe397"}, - {file = "black-24.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f95cece33329dc4aa3b0e1a771c41075812e46cf3d6e3f1dfe3d91ff09826ed2"}, - {file = "black-24.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4396ca365a4310beef84d446ca5016f671b10f07abdba3e4e4304218d2c71d33"}, - {file = "black-24.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44d99dfdf37a2a00a6f7a8dcbd19edf361d056ee51093b2445de7ca09adac965"}, - {file = "black-24.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:21f9407063ec71c5580b8ad975653c66508d6a9f57bd008bb8691d273705adcd"}, - {file = "black-24.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:652e55bb722ca026299eb74e53880ee2315b181dfdd44dca98e43448620ddec1"}, - {file = "black-24.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7f2966b9b2b3b7104fca9d75b2ee856fe3fdd7ed9e47c753a4bb1a675f2caab8"}, - {file = "black-24.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bb9ca06e556a09f7f7177bc7cb604e5ed2d2df1e9119e4f7d2f1f7071c32e5d"}, - {file = "black-24.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:d4e71cdebdc8efeb6deaf5f2deb28325f8614d48426bed118ecc2dcaefb9ebf3"}, - {file = "black-24.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6644f97a7ef6f401a150cca551a1ff97e03c25d8519ee0bbc9b0058772882665"}, - {file = "black-24.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:75a2d0b4f5eb81f7eebc31f788f9830a6ce10a68c91fbe0fade34fff7a2836e6"}, - {file = "black-24.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb949f56a63c5e134dfdca12091e98ffb5fd446293ebae123d10fc1abad00b9e"}, - {file = "black-24.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:7852b05d02b5b9a8c893ab95863ef8986e4dda29af80bbbda94d7aee1abf8702"}, - {file = "black-24.4.0-py3-none-any.whl", hash = "sha256:74eb9b5420e26b42c00a3ff470dc0cd144b80a766128b1771d07643165e08d0e"}, - {file = "black-24.4.0.tar.gz", hash = "sha256:f07b69fda20578367eaebbd670ff8fc653ab181e1ff95d84497f9fa20e7d0641"}, + {file = "black-24.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dd1b5a14e417189db4c7b64a6540f31730713d173f0b63e55fabd52d61d8fdce"}, + {file = "black-24.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e537d281831ad0e71007dcdcbe50a71470b978c453fa41ce77186bbe0ed6021"}, + {file = "black-24.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaea3008c281f1038edb473c1aa8ed8143a5535ff18f978a318f10302b254063"}, + {file = "black-24.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:7768a0dbf16a39aa5e9a3ded568bb545c8c2727396d063bbaf847df05b08cd96"}, + {file = "black-24.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:257d724c2c9b1660f353b36c802ccece186a30accc7742c176d29c146df6e474"}, + {file = "black-24.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bdde6f877a18f24844e381d45e9947a49e97933573ac9d4345399be37621e26c"}, + {file = "black-24.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e151054aa00bad1f4e1f04919542885f89f5f7d086b8a59e5000e6c616896ffb"}, + {file = "black-24.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:7e122b1c4fb252fd85df3ca93578732b4749d9be076593076ef4d07a0233c3e1"}, + {file = "black-24.4.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:accf49e151c8ed2c0cdc528691838afd217c50412534e876a19270fea1e28e2d"}, + {file = "black-24.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:88c57dc656038f1ab9f92b3eb5335ee9b021412feaa46330d5eba4e51fe49b04"}, + {file = "black-24.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be8bef99eb46d5021bf053114442914baeb3649a89dc5f3a555c88737e5e98fc"}, + {file = "black-24.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:415e686e87dbbe6f4cd5ef0fbf764af7b89f9057b97c908742b6008cc554b9c0"}, + {file = "black-24.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bf10f7310db693bb62692609b397e8d67257c55f949abde4c67f9cc574492cc7"}, + {file = "black-24.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:98e123f1d5cfd42f886624d84464f7756f60ff6eab89ae845210631714f6db94"}, + {file = "black-24.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48a85f2cb5e6799a9ef05347b476cce6c182d6c71ee36925a6c194d074336ef8"}, + {file = "black-24.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:b1530ae42e9d6d5b670a34db49a94115a64596bc77710b1d05e9801e62ca0a7c"}, + {file = "black-24.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:37aae07b029fa0174d39daf02748b379399b909652a806e5708199bd93899da1"}, + {file = "black-24.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da33a1a5e49c4122ccdfd56cd021ff1ebc4a1ec4e2d01594fef9b6f267a9e741"}, + {file = "black-24.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef703f83fc32e131e9bcc0a5094cfe85599e7109f896fe8bc96cc402f3eb4b6e"}, + {file = "black-24.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:b9176b9832e84308818a99a561e90aa479e73c523b3f77afd07913380ae2eab7"}, + {file = "black-24.4.2-py3-none-any.whl", hash = "sha256:d36ed1124bb81b32f8614555b34cc4259c3fbc7eec17870e8ff8ded335b58d8c"}, + {file = "black-24.4.2.tar.gz", hash = "sha256:c872b53057f000085da66a19c55d68f6f8ddcac2642392ad3a355878406fbd4d"}, ] [package.dependencies] @@ -979,13 +979,13 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] name = "jinja2" -version = "3.1.3" +version = "3.1.4" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, - {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, + {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, + {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, ] [package.dependencies] @@ -1018,13 +1018,13 @@ files = [ [[package]] name = "jsonschema" -version = "4.21.1" +version = "4.22.0" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema-4.21.1-py3-none-any.whl", hash = "sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f"}, - {file = "jsonschema-4.21.1.tar.gz", hash = "sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5"}, + {file = "jsonschema-4.22.0-py3-none-any.whl", hash = "sha256:ff4cfd6b1367a40e7bc6411caec72effadd3db0bbe5017de188f2d6108335802"}, + {file = "jsonschema-4.22.0.tar.gz", hash = "sha256:5b22d434a45935119af990552c862e5d6d564e8f6601206b305a61fdf661a2b7"}, ] [package.dependencies] @@ -1243,13 +1243,13 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (> [[package]] name = "jupyterlab" -version = "4.1.6" +version = "4.1.8" description = "JupyterLab computational environment" optional = false python-versions = ">=3.8" files = [ - {file = "jupyterlab-4.1.6-py3-none-any.whl", hash = "sha256:cf3e862bc10dbf4331e4eb37438634f813c238cfc62c71c640b3b3b2caa089a8"}, - {file = "jupyterlab-4.1.6.tar.gz", hash = "sha256:7935f36ba26eb615183a4f5c2bbca5791b5108ce2a00b5505f8cfd100d53648e"}, + {file = "jupyterlab-4.1.8-py3-none-any.whl", hash = "sha256:c3baf3a2f91f89d110ed5786cd18672b9a357129d4e389d2a0dead15e11a4d2c"}, + {file = "jupyterlab-4.1.8.tar.gz", hash = "sha256:3384aded8680e7ce504fd63b8bb89a39df21c9c7694d9e7dc4a68742cdb30f9b"}, ] [package.dependencies] @@ -1261,7 +1261,7 @@ jinja2 = ">=3.0.3" jupyter-core = "*" jupyter-lsp = ">=2.0.0" jupyter-server = ">=2.4.0,<3" -jupyterlab-server = ">=2.19.0,<3" +jupyterlab-server = ">=2.27.1,<3" notebook-shim = ">=0.2" packaging = "*" tomli = {version = ">=1.2.2", markers = "python_version < \"3.11\""} @@ -1288,13 +1288,13 @@ files = [ [[package]] name = "jupyterlab-server" -version = "2.26.0" +version = "2.27.1" description = "A set of server components for JupyterLab and JupyterLab like applications." optional = false python-versions = ">=3.8" files = [ - {file = "jupyterlab_server-2.26.0-py3-none-any.whl", hash = "sha256:54622cbd330526a385ee0c1fdccdff3a1e7219bf3e864a335284a1270a1973df"}, - {file = "jupyterlab_server-2.26.0.tar.gz", hash = "sha256:9b3ba91cf2837f7f124fca36d63f3ca80ace2bed4898a63dd47e6598c1ab006f"}, + {file = "jupyterlab_server-2.27.1-py3-none-any.whl", hash = "sha256:f5e26156e5258b24d532c84e7c74cc212e203bff93eb856f81c24c16daeecc75"}, + {file = "jupyterlab_server-2.27.1.tar.gz", hash = "sha256:097b5ac709b676c7284ac9c5e373f11930a561f52cd5a86e4fc7e5a9c8a8631d"}, ] [package.dependencies] @@ -1467,38 +1467,38 @@ dev = ["absl-py", "pyink", "pylint (>=2.6.0)", "pytest", "pytest-xdist"] [[package]] name = "mypy" -version = "1.9.0" +version = "1.10.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {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"}, + {file = "mypy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da1cbf08fb3b851ab3b9523a884c232774008267b1f83371ace57f412fe308c2"}, + {file = "mypy-1.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:12b6bfc1b1a66095ab413160a6e520e1dc076a28f3e22f7fb25ba3b000b4ef99"}, + {file = "mypy-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e36fb078cce9904c7989b9693e41cb9711e0600139ce3970c6ef814b6ebc2b2"}, + {file = "mypy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2b0695d605ddcd3eb2f736cd8b4e388288c21e7de85001e9f85df9187f2b50f9"}, + {file = "mypy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:cd777b780312ddb135bceb9bc8722a73ec95e042f911cc279e2ec3c667076051"}, + {file = "mypy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3be66771aa5c97602f382230165b856c231d1277c511c9a8dd058be4784472e1"}, + {file = "mypy-1.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8b2cbaca148d0754a54d44121b5825ae71868c7592a53b7292eeb0f3fdae95ee"}, + {file = "mypy-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ec404a7cbe9fc0e92cb0e67f55ce0c025014e26d33e54d9e506a0f2d07fe5de"}, + {file = "mypy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e22e1527dc3d4aa94311d246b59e47f6455b8729f4968765ac1eacf9a4760bc7"}, + {file = "mypy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:a87dbfa85971e8d59c9cc1fcf534efe664d8949e4c0b6b44e8ca548e746a8d53"}, + {file = "mypy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a781f6ad4bab20eef8b65174a57e5203f4be627b46291f4589879bf4e257b97b"}, + {file = "mypy-1.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b808e12113505b97d9023b0b5e0c0705a90571c6feefc6f215c1df9381256e30"}, + {file = "mypy-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f55583b12156c399dce2df7d16f8a5095291354f1e839c252ec6c0611e86e2e"}, + {file = "mypy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cf18f9d0efa1b16478c4c129eabec36148032575391095f73cae2e722fcf9d5"}, + {file = "mypy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:bc6ac273b23c6b82da3bb25f4136c4fd42665f17f2cd850771cb600bdd2ebeda"}, + {file = "mypy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9fd50226364cd2737351c79807775136b0abe084433b55b2e29181a4c3c878c0"}, + {file = "mypy-1.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f90cff89eea89273727d8783fef5d4a934be2fdca11b47def50cf5d311aff727"}, + {file = "mypy-1.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fcfc70599efde5c67862a07a1aaf50e55bce629ace26bb19dc17cece5dd31ca4"}, + {file = "mypy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:075cbf81f3e134eadaf247de187bd604748171d6b79736fa9b6c9685b4083061"}, + {file = "mypy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:3f298531bca95ff615b6e9f2fc0333aae27fa48052903a0ac90215021cdcfa4f"}, + {file = "mypy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa7ef5244615a2523b56c034becde4e9e3f9b034854c93639adb667ec9ec2976"}, + {file = "mypy-1.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3236a4c8f535a0631f85f5fcdffba71c7feeef76a6002fcba7c1a8e57c8be1ec"}, + {file = "mypy-1.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a2b5cdbb5dd35aa08ea9114436e0d79aceb2f38e32c21684dcf8e24e1e92821"}, + {file = "mypy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92f93b21c0fe73dc00abf91022234c79d793318b8a96faac147cd579c1671746"}, + {file = "mypy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:28d0e038361b45f099cc086d9dd99c15ff14d0188f44ac883010e172ce86c38a"}, + {file = "mypy-1.10.0-py3-none-any.whl", hash = "sha256:f8c083976eb530019175aabadb60921e73b4f45736760826aa1689dda8208aee"}, + {file = "mypy-1.10.0.tar.gz", hash = "sha256:3d087fcbec056c4ee34974da493a826ce316947485cef3901f511848e687c131"}, ] [package.dependencies] @@ -1547,13 +1547,13 @@ test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>= [[package]] name = "nbconvert" -version = "7.16.3" +version = "7.16.4" 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.3-py3-none-any.whl", hash = "sha256:ddeff14beeeedf3dd0bc506623e41e4507e551736de59df69a91f86700292b3b"}, - {file = "nbconvert-7.16.3.tar.gz", hash = "sha256:a6733b78ce3d47c3f85e504998495b07e6ea9cf9bf6ec1c98dda63ec6ad19142"}, + {file = "nbconvert-7.16.4-py3-none-any.whl", hash = "sha256:05873c620fe520b6322bf8a5ad562692343fe3452abda5765c7a34b7d1aa3eb3"}, + {file = "nbconvert-7.16.4.tar.gz", hash = "sha256:86ca91ba266b0a448dc96fa6c5b9d98affabde2867b363258703536807f9f7f4"}, ] [package.dependencies] @@ -1575,9 +1575,9 @@ tinycss2 = "*" traitlets = ">=5.1" [package.extras] -all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"] +all = ["flaky", "ipykernel", "ipython", "ipywidgets (>=7.5)", "myst-parser", "nbsphinx (>=0.2.12)", "playwright", "pydata-sphinx-theme", "pyqtwebengine (>=5.15)", "pytest (>=7)", "sphinx (==5.0.2)", "sphinxcontrib-spelling", "tornado (>=6.1)"] docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] -qtpdf = ["nbconvert[qtpng]"] +qtpdf = ["pyqtwebengine (>=5.15)"] qtpng = ["pyqtwebengine (>=5.15)"] serve = ["tornado (>=6.1)"] test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest (>=7)"] @@ -1804,28 +1804,29 @@ ptyprocess = ">=0.5" [[package]] name = "platformdirs" -version = "4.2.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +version = "4.2.1" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, - {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, + {file = "platformdirs-4.2.1-py3-none-any.whl", hash = "sha256:17d5a1161b3fd67b390023cb2d3b026bbd40abde6fdb052dfbd3a29c3ba22ee1"}, + {file = "platformdirs-4.2.1.tar.gz", hash = "sha256:031cd18d4ec63ec53e82dceaac0417d218a6863f7745dfcc9efe7793b7039bdf"}, ] [package.extras] docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] +type = ["mypy (>=1.8)"] [[package]] name = "poethepoet" -version = "0.25.1" +version = "0.26.1" description = "A task runner that works well with poetry." optional = false python-versions = ">=3.8" files = [ - {file = "poethepoet-0.25.1-py3-none-any.whl", hash = "sha256:fee433f68424593bca6b357f0bf997d64edf42c7305c0d5d335bd570b8d2352b"}, - {file = "poethepoet-0.25.1.tar.gz", hash = "sha256:98f4446533a4b2bdb08843e211f918b1f2e7f8baf6d1803ef78f64661ed62463"}, + {file = "poethepoet-0.26.1-py3-none-any.whl", hash = "sha256:aa43b443fec5d17d7e76771cccd484e5285805301721a74f059c483ad3276edd"}, + {file = "poethepoet-0.26.1.tar.gz", hash = "sha256:aaad8541f6072617a60bcff2562d00779b58b353bd0f1847b06d8d0f2b6dc192"}, ] [package.dependencies] @@ -1951,17 +1952,16 @@ files = [ [[package]] name = "pygments" -version = "2.17.2" +version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, - {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, + {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, + {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, ] [package.extras] -plugins = ["importlib-metadata"] windows-terminal = ["colorama (>=0.4.6)"] [[package]] @@ -2119,99 +2119,99 @@ files = [ [[package]] name = "pyzmq" -version = "26.0.2" +version = "26.0.3" description = "Python bindings for 0MQ" optional = false python-versions = ">=3.7" files = [ - {file = "pyzmq-26.0.2-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1a60a03b01e8c9c58932ec0cca15b1712d911c2800eb82d4281bc1ae5b6dad50"}, - {file = "pyzmq-26.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:949067079e14ea1973bd740255e0840118c163d4bce8837f539d749f145cf5c3"}, - {file = "pyzmq-26.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37e7edfa6cf96d036a403775c96afa25058d1bb940a79786a9a2fc94a783abe3"}, - {file = "pyzmq-26.0.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:903cc7a84a7d4326b43755c368780800e035aa3d711deae84a533fdffa8755b0"}, - {file = "pyzmq-26.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cb2e41af165e5f327d06fbdd79a42a4e930267fade4e9f92d17f3ccce03f3a7"}, - {file = "pyzmq-26.0.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:55353b8189adcfc4c125fc4ce59d477744118e9c0ec379dd0999c5fa120ac4f5"}, - {file = "pyzmq-26.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f961423ff6236a752ced80057a20e623044df95924ed1009f844cde8b3a595f9"}, - {file = "pyzmq-26.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ba77fe84fe4f5f3dc0ef681a6d366685c8ffe1c8439c1d7530997b05ac06a04b"}, - {file = "pyzmq-26.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:52589f0a745ef61b9c75c872cf91f8c1f7c0668eb3dd99d7abd639d8c0fb9ca7"}, - {file = "pyzmq-26.0.2-cp310-cp310-win32.whl", hash = "sha256:b7b6d2a46c7afe2ad03ec8faf9967090c8ceae85c4d8934d17d7cae6f9062b64"}, - {file = "pyzmq-26.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:86531e20de249d9204cc6d8b13d5a30537748c78820215161d8a3b9ea58ca111"}, - {file = "pyzmq-26.0.2-cp310-cp310-win_arm64.whl", hash = "sha256:f26a05029ecd2bd306b941ff8cb80f7620b7901421052bc429d238305b1cbf2f"}, - {file = "pyzmq-26.0.2-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:70770e296a9cb03d955540c99360aab861cbb3cba29516abbd106a15dbd91268"}, - {file = "pyzmq-26.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2740fd7161b39e178554ebf21aa5667a1c9ef0cd2cb74298fd4ef017dae7aec4"}, - {file = "pyzmq-26.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5e3706c32dea077faa42b1c92d825b7f86c866f72532d342e0be5e64d14d858"}, - {file = "pyzmq-26.0.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0fa1416876194927f7723d6b7171b95e1115602967fc6bfccbc0d2d51d8ebae1"}, - {file = "pyzmq-26.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ef9a79a48794099c57dc2df00340b5d47c5caa1792f9ddb8c7a26b1280bd575"}, - {file = "pyzmq-26.0.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1c60fcdfa3229aeee4291c5d60faed3a813b18bdadb86299c4bf49e8e51e8605"}, - {file = "pyzmq-26.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e943c39c206b04df2eb5d71305761d7c3ca75fd49452115ea92db1b5b98dbdef"}, - {file = "pyzmq-26.0.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8da0ed8a598693731c76659880a668f4748b59158f26ed283a93f7f04d47447e"}, - {file = "pyzmq-26.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7bf51970b11d67096bede97cdbad0f4333f7664f4708b9b2acb352bf4faa3140"}, - {file = "pyzmq-26.0.2-cp311-cp311-win32.whl", hash = "sha256:6f8e6bd5d066be605faa9fe5ec10aa1a46ad9f18fc8646f2b9aaefc8fb575742"}, - {file = "pyzmq-26.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:6d03da3a0ae691b361edcb39530075461202f699ce05adbb15055a0e1c9bcaa4"}, - {file = "pyzmq-26.0.2-cp311-cp311-win_arm64.whl", hash = "sha256:f84e33321b68ff00b60e9dbd1a483e31ab6022c577c8de525b8e771bd274ce68"}, - {file = "pyzmq-26.0.2-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:44c33ebd1c62a01db7fbc24e18bdda569d6639217d13d5929e986a2b0f69070d"}, - {file = "pyzmq-26.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ac04f904b4fce4afea9cdccbb78e24d468cb610a839d5a698853e14e2a3f9ecf"}, - {file = "pyzmq-26.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2133de5ba9adc5f481884ccb699eac9ce789708292945c05746880f95b241c0"}, - {file = "pyzmq-26.0.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7753c67c570d7fc80c2dc59b90ca1196f1224e0e2e29a548980c95fe0fe27fc1"}, - {file = "pyzmq-26.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d4e51632e6b12e65e8d9d7612446ecda2eda637a868afa7bce16270194650dd"}, - {file = "pyzmq-26.0.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d6c38806f6ecd0acf3104b8d7e76a206bcf56dadd6ce03720d2fa9d9157d5718"}, - {file = "pyzmq-26.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:48f496bbe14686b51cec15406323ae6942851e14022efd7fc0e2ecd092c5982c"}, - {file = "pyzmq-26.0.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e84a3161149c75bb7a7dc8646384186c34033e286a67fec1ad1bdedea165e7f4"}, - {file = "pyzmq-26.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:dabf796c67aa9f5a4fcc956d47f0d48b5c1ed288d628cf53aa1cf08e88654343"}, - {file = "pyzmq-26.0.2-cp312-cp312-win32.whl", hash = "sha256:3eee4c676af1b109f708d80ef0cf57ecb8aaa5900d1edaf90406aea7e0e20e37"}, - {file = "pyzmq-26.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:26721fec65846b3e4450dad050d67d31b017f97e67f7e0647b5f98aa47f828cf"}, - {file = "pyzmq-26.0.2-cp312-cp312-win_arm64.whl", hash = "sha256:653955c6c233e90de128a1b8e882abc7216f41f44218056bd519969c8c413a15"}, - {file = "pyzmq-26.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:becd8d8fb068fbb5a52096efd83a2d8e54354383f691781f53a4c26aee944542"}, - {file = "pyzmq-26.0.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7a15e5465e7083c12517209c9dd24722b25e9b63c49a563922922fc03554eb35"}, - {file = "pyzmq-26.0.2-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e8158ac8616941f874841f9fa0f6d2f1466178c2ff91ea08353fdc19de0d40c2"}, - {file = "pyzmq-26.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea2c6a53e28c7066ea7db86fcc0b71d78d01b818bb11d4a4341ec35059885295"}, - {file = "pyzmq-26.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:bdbc7dab0b0e9c62c97b732899c4242e3282ba803bad668e03650b59b165466e"}, - {file = "pyzmq-26.0.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e74b6d5ef57bb65bf1b4a37453d8d86d88550dde3fb0f23b1f1a24e60c70af5b"}, - {file = "pyzmq-26.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ed4c6ee624ecbc77b18aeeb07bf0700d26571ab95b8f723f0d02e056b5bce438"}, - {file = "pyzmq-26.0.2-cp37-cp37m-win32.whl", hash = "sha256:8a98b3cb0484b83c19d8fb5524c8a469cd9f10e743f5904ac285d92678ee761f"}, - {file = "pyzmq-26.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:aa5f95d71b6eca9cec28aa0a2f8310ea53dea313b63db74932879ff860c1fb8d"}, - {file = "pyzmq-26.0.2-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:5ff56c76ce77b9805378a7a73032c17cbdb1a5b84faa1df03c5d3e306e5616df"}, - {file = "pyzmq-26.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bab697fc1574fee4b81da955678708567c43c813c84c91074e452bda5346c921"}, - {file = "pyzmq-26.0.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c0fed8aa9ba0488ee1cbdaa304deea92d52fab43d373297002cfcc69c0a20c5"}, - {file = "pyzmq-26.0.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:606b922699fcec472ed814dda4dc3ff7c748254e0b26762a0ba21a726eb1c107"}, - {file = "pyzmq-26.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45f0fd82bad4d199fa993fbf0ac586a7ac5879addbe436a35a389df7e0eb4c91"}, - {file = "pyzmq-26.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:166c5e41045939a52c01e6f374e493d9a6a45dfe677360d3e7026e38c42e8906"}, - {file = "pyzmq-26.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d566e859e8b8d5bca08467c093061774924b3d78a5ba290e82735b2569edc84b"}, - {file = "pyzmq-26.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:264ee0e72b72ca59279dc320deab5ae0fac0d97881aed1875ce4bde2e56ffde0"}, - {file = "pyzmq-26.0.2-cp38-cp38-win32.whl", hash = "sha256:3152bbd3a4744cbdd83dfb210ed701838b8b0c9065cef14671d6d91df12197d0"}, - {file = "pyzmq-26.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:bf77601d75ca692c179154b7e5943c286a4aaffec02c491afe05e60493ce95f2"}, - {file = "pyzmq-26.0.2-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:c770a7545b3deca2db185b59175e710a820dd4ed43619f4c02e90b0e227c6252"}, - {file = "pyzmq-26.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d47175f0a380bfd051726bc5c0054036ae4a5d8caf922c62c8a172ccd95c1a2a"}, - {file = "pyzmq-26.0.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9bce298c1ce077837e110367c321285dc4246b531cde1abfc27e4a5bbe2bed4d"}, - {file = "pyzmq-26.0.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c40b09b7e184d6e3e1be1c8af2cc320c0f9f610d8a5df3dd866e6e6e4e32b235"}, - {file = "pyzmq-26.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d420d856bf728713874cefb911398efe69e1577835851dd297a308a78c14c249"}, - {file = "pyzmq-26.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d792d3cab987058451e55c70c5926e93e2ceb68ca5a2334863bb903eb860c9cb"}, - {file = "pyzmq-26.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:83ec17729cf6d3464dab98a11e98294fcd50e6b17eaabd3d841515c23f6dbd3a"}, - {file = "pyzmq-26.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47c17d5ebfa88ae90f08960c97b49917098665b8cd8be31f2c24e177bcf37a0f"}, - {file = "pyzmq-26.0.2-cp39-cp39-win32.whl", hash = "sha256:d509685d1cd1d018705a811c5f9d5bc237790936ead6d06f6558b77e16cc7235"}, - {file = "pyzmq-26.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:c7cc8cc009e8f6989a6d86c96f87dae5f5fb07d6c96916cdc7719d546152c7db"}, - {file = "pyzmq-26.0.2-cp39-cp39-win_arm64.whl", hash = "sha256:3ada31cb879cd7532f4a85b501f4255c747d4813ab76b35c49ed510ce4865b45"}, - {file = "pyzmq-26.0.2-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0a6ceaddc830dd3ca86cb8451cf373d1f05215368e11834538c2902ed5205139"}, - {file = "pyzmq-26.0.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a967681463aa7a99eb9a62bb18229b653b45c10ff0947b31cc0837a83dfb86f"}, - {file = "pyzmq-26.0.2-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6472a73bc115bc40a2076609a90894775abe6faf19a78375675a2f889a613071"}, - {file = "pyzmq-26.0.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d6aea92bcccfe5e5524d3c70a6f16ffdae548390ddad26f4207d55c55a40593"}, - {file = "pyzmq-26.0.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e025f6351e49d48a5aa2f5a09293aa769b0ee7369c25bed551647234b7fa0c75"}, - {file = "pyzmq-26.0.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:40bd7ebe4dbb37d27f0c56e2a844f360239343a99be422085e13e97da13f73f9"}, - {file = "pyzmq-26.0.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1dd40d586ad6f53764104df6e01810fe1b4e88fd353774629a5e6fe253813f79"}, - {file = "pyzmq-26.0.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f2aca15e9ad8c8657b5b3d7ae3d1724dc8c1c1059c06b4b674c3aa36305f4930"}, - {file = "pyzmq-26.0.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:450ec234736732eb0ebeffdb95a352450d4592f12c3e087e2a9183386d22c8bf"}, - {file = "pyzmq-26.0.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:f43be2bebbd09360a2f23af83b243dc25ffe7b583ea8c722e6df03e03a55f02f"}, - {file = "pyzmq-26.0.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:867f55e54aff254940bcec5eec068e7c0ac1e6bf360ab91479394a8bf356b0e6"}, - {file = "pyzmq-26.0.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b4dbc033c5ad46f8c429bf238c25a889b8c1d86bfe23a74e1031a991cb3f0000"}, - {file = "pyzmq-26.0.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6e8dd2961462e337e21092ec2da0c69d814dcb1b6e892955a37444a425e9cfb8"}, - {file = "pyzmq-26.0.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35391e72df6c14a09b697c7b94384947c1dd326aca883ff98ff137acdf586c33"}, - {file = "pyzmq-26.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:1c3d3c92fa54eda94ab369ca5b8d35059987c326ba5e55326eb068862f64b1fc"}, - {file = "pyzmq-26.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e7aa61a9cc4f0523373e31fc9255bf4567185a099f85ca3598e64de484da3ab2"}, - {file = "pyzmq-26.0.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee53a8191271f144cc20b12c19daa9f1546adc84a2f33839e3338039b55c373c"}, - {file = "pyzmq-26.0.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ac60a980f07fa988983f7bfe6404ef3f1e4303f5288a01713bc1266df6d18783"}, - {file = "pyzmq-26.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88896b1b4817d7b2fe1ec7205c4bbe07bf5d92fb249bf2d226ddea8761996068"}, - {file = "pyzmq-26.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:18dfffe23751edee917764ffa133d5d3fef28dfd1cf3adebef8c90bc854c74c4"}, - {file = "pyzmq-26.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:6926dd14cfe6967d3322640b6d5c3c3039db71716a5e43cca6e3b474e73e0b36"}, - {file = "pyzmq-26.0.2.tar.gz", hash = "sha256:f0f9bb370449158359bb72a3e12c658327670c0ffe6fbcd1af083152b64f9df0"}, + {file = "pyzmq-26.0.3-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:44dd6fc3034f1eaa72ece33588867df9e006a7303725a12d64c3dff92330f625"}, + {file = "pyzmq-26.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:acb704195a71ac5ea5ecf2811c9ee19ecdc62b91878528302dd0be1b9451cc90"}, + {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dbb9c997932473a27afa93954bb77a9f9b786b4ccf718d903f35da3232317de"}, + {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6bcb34f869d431799c3ee7d516554797f7760cb2198ecaa89c3f176f72d062be"}, + {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ece17ec5f20d7d9b442e5174ae9f020365d01ba7c112205a4d59cf19dc38ee"}, + {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:ba6e5e6588e49139a0979d03a7deb9c734bde647b9a8808f26acf9c547cab1bf"}, + {file = "pyzmq-26.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3bf8b000a4e2967e6dfdd8656cd0757d18c7e5ce3d16339e550bd462f4857e59"}, + {file = "pyzmq-26.0.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2136f64fbb86451dbbf70223635a468272dd20075f988a102bf8a3f194a411dc"}, + {file = "pyzmq-26.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e8918973fbd34e7814f59143c5f600ecd38b8038161239fd1a3d33d5817a38b8"}, + {file = "pyzmq-26.0.3-cp310-cp310-win32.whl", hash = "sha256:0aaf982e68a7ac284377d051c742610220fd06d330dcd4c4dbb4cdd77c22a537"}, + {file = "pyzmq-26.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:f1a9b7d00fdf60b4039f4455afd031fe85ee8305b019334b72dcf73c567edc47"}, + {file = "pyzmq-26.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:80b12f25d805a919d53efc0a5ad7c0c0326f13b4eae981a5d7b7cc343318ebb7"}, + {file = "pyzmq-26.0.3-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:a72a84570f84c374b4c287183debc776dc319d3e8ce6b6a0041ce2e400de3f32"}, + {file = "pyzmq-26.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ca684ee649b55fd8f378127ac8462fb6c85f251c2fb027eb3c887e8ee347bcd"}, + {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e222562dc0f38571c8b1ffdae9d7adb866363134299264a1958d077800b193b7"}, + {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f17cde1db0754c35a91ac00b22b25c11da6eec5746431d6e5092f0cd31a3fea9"}, + {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b7c0c0b3244bb2275abe255d4a30c050d541c6cb18b870975553f1fb6f37527"}, + {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:ac97a21de3712afe6a6c071abfad40a6224fd14fa6ff0ff8d0c6e6cd4e2f807a"}, + {file = "pyzmq-26.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:88b88282e55fa39dd556d7fc04160bcf39dea015f78e0cecec8ff4f06c1fc2b5"}, + {file = "pyzmq-26.0.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:72b67f966b57dbd18dcc7efbc1c7fc9f5f983e572db1877081f075004614fcdd"}, + {file = "pyzmq-26.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f4b6cecbbf3b7380f3b61de3a7b93cb721125dc125c854c14ddc91225ba52f83"}, + {file = "pyzmq-26.0.3-cp311-cp311-win32.whl", hash = "sha256:eed56b6a39216d31ff8cd2f1d048b5bf1700e4b32a01b14379c3b6dde9ce3aa3"}, + {file = "pyzmq-26.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:3191d312c73e3cfd0f0afdf51df8405aafeb0bad71e7ed8f68b24b63c4f36500"}, + {file = "pyzmq-26.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:b6907da3017ef55139cf0e417c5123a84c7332520e73a6902ff1f79046cd3b94"}, + {file = "pyzmq-26.0.3-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:068ca17214038ae986d68f4a7021f97e187ed278ab6dccb79f837d765a54d753"}, + {file = "pyzmq-26.0.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7821d44fe07335bea256b9f1f41474a642ca55fa671dfd9f00af8d68a920c2d4"}, + {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eeb438a26d87c123bb318e5f2b3d86a36060b01f22fbdffd8cf247d52f7c9a2b"}, + {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:69ea9d6d9baa25a4dc9cef5e2b77b8537827b122214f210dd925132e34ae9b12"}, + {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7daa3e1369355766dea11f1d8ef829905c3b9da886ea3152788dc25ee6079e02"}, + {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:6ca7a9a06b52d0e38ccf6bca1aeff7be178917893f3883f37b75589d42c4ac20"}, + {file = "pyzmq-26.0.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1b7d0e124948daa4d9686d421ef5087c0516bc6179fdcf8828b8444f8e461a77"}, + {file = "pyzmq-26.0.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e746524418b70f38550f2190eeee834db8850088c834d4c8406fbb9bc1ae10b2"}, + {file = "pyzmq-26.0.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:6b3146f9ae6af82c47a5282ac8803523d381b3b21caeae0327ed2f7ecb718798"}, + {file = "pyzmq-26.0.3-cp312-cp312-win32.whl", hash = "sha256:2b291d1230845871c00c8462c50565a9cd6026fe1228e77ca934470bb7d70ea0"}, + {file = "pyzmq-26.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:926838a535c2c1ea21c903f909a9a54e675c2126728c21381a94ddf37c3cbddf"}, + {file = "pyzmq-26.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:5bf6c237f8c681dfb91b17f8435b2735951f0d1fad10cc5dfd96db110243370b"}, + {file = "pyzmq-26.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c0991f5a96a8e620f7691e61178cd8f457b49e17b7d9cfa2067e2a0a89fc1d5"}, + {file = "pyzmq-26.0.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dbf012d8fcb9f2cf0643b65df3b355fdd74fc0035d70bb5c845e9e30a3a4654b"}, + {file = "pyzmq-26.0.3-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:01fbfbeb8249a68d257f601deb50c70c929dc2dfe683b754659569e502fbd3aa"}, + {file = "pyzmq-26.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c8eb19abe87029c18f226d42b8a2c9efdd139d08f8bf6e085dd9075446db450"}, + {file = "pyzmq-26.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:5344b896e79800af86ad643408ca9aa303a017f6ebff8cee5a3163c1e9aec987"}, + {file = "pyzmq-26.0.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:204e0f176fd1d067671157d049466869b3ae1fc51e354708b0dc41cf94e23a3a"}, + {file = "pyzmq-26.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a42db008d58530efa3b881eeee4991146de0b790e095f7ae43ba5cc612decbc5"}, + {file = "pyzmq-26.0.3-cp37-cp37m-win32.whl", hash = "sha256:8d7a498671ca87e32b54cb47c82a92b40130a26c5197d392720a1bce1b3c77cf"}, + {file = "pyzmq-26.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:3b4032a96410bdc760061b14ed6a33613ffb7f702181ba999df5d16fb96ba16a"}, + {file = "pyzmq-26.0.3-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:2cc4e280098c1b192c42a849de8de2c8e0f3a84086a76ec5b07bfee29bda7d18"}, + {file = "pyzmq-26.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5bde86a2ed3ce587fa2b207424ce15b9a83a9fa14422dcc1c5356a13aed3df9d"}, + {file = "pyzmq-26.0.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:34106f68e20e6ff253c9f596ea50397dbd8699828d55e8fa18bd4323d8d966e6"}, + {file = "pyzmq-26.0.3-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ebbbd0e728af5db9b04e56389e2299a57ea8b9dd15c9759153ee2455b32be6ad"}, + {file = "pyzmq-26.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6b1d1c631e5940cac5a0b22c5379c86e8df6a4ec277c7a856b714021ab6cfad"}, + {file = "pyzmq-26.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e891ce81edd463b3b4c3b885c5603c00141151dd9c6936d98a680c8c72fe5c67"}, + {file = "pyzmq-26.0.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9b273ecfbc590a1b98f014ae41e5cf723932f3b53ba9367cfb676f838038b32c"}, + {file = "pyzmq-26.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b32bff85fb02a75ea0b68f21e2412255b5731f3f389ed9aecc13a6752f58ac97"}, + {file = "pyzmq-26.0.3-cp38-cp38-win32.whl", hash = "sha256:f6c21c00478a7bea93caaaef9e7629145d4153b15a8653e8bb4609d4bc70dbfc"}, + {file = "pyzmq-26.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:3401613148d93ef0fd9aabdbddb212de3db7a4475367f49f590c837355343972"}, + {file = "pyzmq-26.0.3-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:2ed8357f4c6e0daa4f3baf31832df8a33334e0fe5b020a61bc8b345a3db7a606"}, + {file = "pyzmq-26.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c1c8f2a2ca45292084c75bb6d3a25545cff0ed931ed228d3a1810ae3758f975f"}, + {file = "pyzmq-26.0.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b63731993cdddcc8e087c64e9cf003f909262b359110070183d7f3025d1c56b5"}, + {file = "pyzmq-26.0.3-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b3cd31f859b662ac5d7f4226ec7d8bd60384fa037fc02aee6ff0b53ba29a3ba8"}, + {file = "pyzmq-26.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:115f8359402fa527cf47708d6f8a0f8234f0e9ca0cab7c18c9c189c194dbf620"}, + {file = "pyzmq-26.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:715bdf952b9533ba13dfcf1f431a8f49e63cecc31d91d007bc1deb914f47d0e4"}, + {file = "pyzmq-26.0.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e1258c639e00bf5e8a522fec6c3eaa3e30cf1c23a2f21a586be7e04d50c9acab"}, + {file = "pyzmq-26.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:15c59e780be8f30a60816a9adab900c12a58d79c1ac742b4a8df044ab2a6d920"}, + {file = "pyzmq-26.0.3-cp39-cp39-win32.whl", hash = "sha256:d0cdde3c78d8ab5b46595054e5def32a755fc028685add5ddc7403e9f6de9879"}, + {file = "pyzmq-26.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:ce828058d482ef860746bf532822842e0ff484e27f540ef5c813d516dd8896d2"}, + {file = "pyzmq-26.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:788f15721c64109cf720791714dc14afd0f449d63f3a5487724f024345067381"}, + {file = "pyzmq-26.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2c18645ef6294d99b256806e34653e86236eb266278c8ec8112622b61db255de"}, + {file = "pyzmq-26.0.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e6bc96ebe49604df3ec2c6389cc3876cabe475e6bfc84ced1bf4e630662cb35"}, + {file = "pyzmq-26.0.3-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:971e8990c5cc4ddcff26e149398fc7b0f6a042306e82500f5e8db3b10ce69f84"}, + {file = "pyzmq-26.0.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8416c23161abd94cc7da80c734ad7c9f5dbebdadfdaa77dad78244457448223"}, + {file = "pyzmq-26.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:082a2988364b60bb5de809373098361cf1dbb239623e39e46cb18bc035ed9c0c"}, + {file = "pyzmq-26.0.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d57dfbf9737763b3a60d26e6800e02e04284926329aee8fb01049635e957fe81"}, + {file = "pyzmq-26.0.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:77a85dca4c2430ac04dc2a2185c2deb3858a34fe7f403d0a946fa56970cf60a1"}, + {file = "pyzmq-26.0.3-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c82a6d952a1d555bf4be42b6532927d2a5686dd3c3e280e5f63225ab47ac1f5"}, + {file = "pyzmq-26.0.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4496b1282c70c442809fc1b151977c3d967bfb33e4e17cedbf226d97de18f709"}, + {file = "pyzmq-26.0.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:e4946d6bdb7ba972dfda282f9127e5756d4f299028b1566d1245fa0d438847e6"}, + {file = "pyzmq-26.0.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:03c0ae165e700364b266876d712acb1ac02693acd920afa67da2ebb91a0b3c09"}, + {file = "pyzmq-26.0.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:3e3070e680f79887d60feeda051a58d0ac36622e1759f305a41059eff62c6da7"}, + {file = "pyzmq-26.0.3-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6ca08b840fe95d1c2bd9ab92dac5685f949fc6f9ae820ec16193e5ddf603c3b2"}, + {file = "pyzmq-26.0.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e76654e9dbfb835b3518f9938e565c7806976c07b37c33526b574cc1a1050480"}, + {file = "pyzmq-26.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:871587bdadd1075b112e697173e946a07d722459d20716ceb3d1bd6c64bd08ce"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d0a2d1bd63a4ad79483049b26514e70fa618ce6115220da9efdff63688808b17"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0270b49b6847f0d106d64b5086e9ad5dc8a902413b5dbbb15d12b60f9c1747a4"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:703c60b9910488d3d0954ca585c34f541e506a091a41930e663a098d3b794c67"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74423631b6be371edfbf7eabb02ab995c2563fee60a80a30829176842e71722a"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4adfbb5451196842a88fda3612e2c0414134874bffb1c2ce83ab4242ec9e027d"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3516119f4f9b8671083a70b6afaa0a070f5683e431ab3dc26e9215620d7ca1ad"}, + {file = "pyzmq-26.0.3.tar.gz", hash = "sha256:dba7d9f2e047dfa2bca3b01f4f84aa5246725203d6284e3790f2ca15fba6b40a"}, ] [package.dependencies] @@ -2219,13 +2219,13 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "qtconsole" -version = "5.5.1" +version = "5.5.2" description = "Jupyter Qt console" optional = false -python-versions = ">= 3.8" +python-versions = ">=3.8" files = [ - {file = "qtconsole-5.5.1-py3-none-any.whl", hash = "sha256:8c75fa3e9b4ed884880ff7cea90a1b67451219279ec33deaee1d59e3df1a5d2b"}, - {file = "qtconsole-5.5.1.tar.gz", hash = "sha256:a0e806c6951db9490628e4df80caec9669b65149c7ba40f9bf033c025a5b56bc"}, + {file = "qtconsole-5.5.2-py3-none-any.whl", hash = "sha256:42d745f3d05d36240244a04e1e1ec2a86d5d9b6edb16dbdef582ccb629e87e0b"}, + {file = "qtconsole-5.5.2.tar.gz", hash = "sha256:6b5fb11274b297463706af84dcbbd5c92273b1f619e6d25d08874b0a88516989"}, ] [package.dependencies] @@ -2261,13 +2261,13 @@ test = ["pytest (>=6,!=7.0.0,!=7.0.1)", "pytest-cov (>=3.0.0)", "pytest-qt"] [[package]] name = "referencing" -version = "0.34.0" +version = "0.35.1" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" files = [ - {file = "referencing-0.34.0-py3-none-any.whl", hash = "sha256:d53ae300ceddd3169f1ffa9caf2cb7b769e92657e4fafb23d34b93679116dfd4"}, - {file = "referencing-0.34.0.tar.gz", hash = "sha256:5773bd84ef41799a5a8ca72dc34590c041eb01bf9aa02632b4a973fb0181a844"}, + {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, + {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, ] [package.dependencies] @@ -2322,110 +2322,110 @@ files = [ [[package]] name = "rpds-py" -version = "0.18.0" +version = "0.18.1" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" files = [ - {file = "rpds_py-0.18.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:5b4e7d8d6c9b2e8ee2d55c90b59c707ca59bc30058269b3db7b1f8df5763557e"}, - {file = "rpds_py-0.18.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c463ed05f9dfb9baebef68048aed8dcdc94411e4bf3d33a39ba97e271624f8f7"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01e36a39af54a30f28b73096dd39b6802eddd04c90dbe161c1b8dbe22353189f"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d62dec4976954a23d7f91f2f4530852b0c7608116c257833922a896101336c51"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd18772815d5f008fa03d2b9a681ae38d5ae9f0e599f7dda233c439fcaa00d40"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:923d39efa3cfb7279a0327e337a7958bff00cc447fd07a25cddb0a1cc9a6d2da"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39514da80f971362f9267c600b6d459bfbbc549cffc2cef8e47474fddc9b45b1"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a34d557a42aa28bd5c48a023c570219ba2593bcbbb8dc1b98d8cf5d529ab1434"}, - {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:93df1de2f7f7239dc9cc5a4a12408ee1598725036bd2dedadc14d94525192fc3"}, - {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:34b18ba135c687f4dac449aa5157d36e2cbb7c03cbea4ddbd88604e076aa836e"}, - {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c0b5dcf9193625afd8ecc92312d6ed78781c46ecbf39af9ad4681fc9f464af88"}, - {file = "rpds_py-0.18.0-cp310-none-win32.whl", hash = "sha256:c4325ff0442a12113a6379af66978c3fe562f846763287ef66bdc1d57925d337"}, - {file = "rpds_py-0.18.0-cp310-none-win_amd64.whl", hash = "sha256:7223a2a5fe0d217e60a60cdae28d6949140dde9c3bcc714063c5b463065e3d66"}, - {file = "rpds_py-0.18.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3a96e0c6a41dcdba3a0a581bbf6c44bb863f27c541547fb4b9711fd8cf0ffad4"}, - {file = "rpds_py-0.18.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30f43887bbae0d49113cbaab729a112251a940e9b274536613097ab8b4899cf6"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcb25daa9219b4cf3a0ab24b0eb9a5cc8949ed4dc72acb8fa16b7e1681aa3c58"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d68c93e381010662ab873fea609bf6c0f428b6d0bb00f2c6939782e0818d37bf"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b34b7aa8b261c1dbf7720b5d6f01f38243e9b9daf7e6b8bc1fd4657000062f2c"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e6d75ab12b0bbab7215e5d40f1e5b738aa539598db27ef83b2ec46747df90e1"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b8612cd233543a3781bc659c731b9d607de65890085098986dfd573fc2befe5"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aec493917dd45e3c69d00a8874e7cbed844efd935595ef78a0f25f14312e33c6"}, - {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:661d25cbffaf8cc42e971dd570d87cb29a665f49f4abe1f9e76be9a5182c4688"}, - {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1df3659d26f539ac74fb3b0c481cdf9d725386e3552c6fa2974f4d33d78e544b"}, - {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a1ce3ba137ed54f83e56fb983a5859a27d43a40188ba798993812fed73c70836"}, - {file = "rpds_py-0.18.0-cp311-none-win32.whl", hash = "sha256:69e64831e22a6b377772e7fb337533c365085b31619005802a79242fee620bc1"}, - {file = "rpds_py-0.18.0-cp311-none-win_amd64.whl", hash = "sha256:998e33ad22dc7ec7e030b3df701c43630b5bc0d8fbc2267653577e3fec279afa"}, - {file = "rpds_py-0.18.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:7f2facbd386dd60cbbf1a794181e6aa0bd429bd78bfdf775436020172e2a23f0"}, - {file = "rpds_py-0.18.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1d9a5be316c15ffb2b3c405c4ff14448c36b4435be062a7f578ccd8b01f0c4d8"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd5bf1af8efe569654bbef5a3e0a56eca45f87cfcffab31dd8dde70da5982475"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5417558f6887e9b6b65b4527232553c139b57ec42c64570569b155262ac0754f"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:56a737287efecafc16f6d067c2ea0117abadcd078d58721f967952db329a3e5c"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8f03bccbd8586e9dd37219bce4d4e0d3ab492e6b3b533e973fa08a112cb2ffc9"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4457a94da0d5c53dc4b3e4de1158bdab077db23c53232f37a3cb7afdb053a4e3"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0ab39c1ba9023914297dd88ec3b3b3c3f33671baeb6acf82ad7ce883f6e8e157"}, - {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9d54553c1136b50fd12cc17e5b11ad07374c316df307e4cfd6441bea5fb68496"}, - {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0af039631b6de0397ab2ba16eaf2872e9f8fca391b44d3d8cac317860a700a3f"}, - {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:84ffab12db93b5f6bad84c712c92060a2d321b35c3c9960b43d08d0f639d60d7"}, - {file = "rpds_py-0.18.0-cp312-none-win32.whl", hash = "sha256:685537e07897f173abcf67258bee3c05c374fa6fff89d4c7e42fb391b0605e98"}, - {file = "rpds_py-0.18.0-cp312-none-win_amd64.whl", hash = "sha256:e003b002ec72c8d5a3e3da2989c7d6065b47d9eaa70cd8808b5384fbb970f4ec"}, - {file = "rpds_py-0.18.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:08f9ad53c3f31dfb4baa00da22f1e862900f45908383c062c27628754af2e88e"}, - {file = "rpds_py-0.18.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0013fe6b46aa496a6749c77e00a3eb07952832ad6166bd481c74bda0dcb6d58"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e32a92116d4f2a80b629778280103d2a510a5b3f6314ceccd6e38006b5e92dcb"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e541ec6f2ec456934fd279a3120f856cd0aedd209fc3852eca563f81738f6861"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bed88b9a458e354014d662d47e7a5baafd7ff81c780fd91584a10d6ec842cb73"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2644e47de560eb7bd55c20fc59f6daa04682655c58d08185a9b95c1970fa1e07"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e8916ae4c720529e18afa0b879473049e95949bf97042e938530e072fde061d"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:465a3eb5659338cf2a9243e50ad9b2296fa15061736d6e26240e713522b6235c"}, - {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ea7d4a99f3b38c37eac212dbd6ec42b7a5ec51e2c74b5d3223e43c811609e65f"}, - {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:67071a6171e92b6da534b8ae326505f7c18022c6f19072a81dcf40db2638767c"}, - {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:41ef53e7c58aa4ef281da975f62c258950f54b76ec8e45941e93a3d1d8580594"}, - {file = "rpds_py-0.18.0-cp38-none-win32.whl", hash = "sha256:fdea4952db2793c4ad0bdccd27c1d8fdd1423a92f04598bc39425bcc2b8ee46e"}, - {file = "rpds_py-0.18.0-cp38-none-win_amd64.whl", hash = "sha256:7cd863afe7336c62ec78d7d1349a2f34c007a3cc6c2369d667c65aeec412a5b1"}, - {file = "rpds_py-0.18.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:5307def11a35f5ae4581a0b658b0af8178c65c530e94893345bebf41cc139d33"}, - {file = "rpds_py-0.18.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:77f195baa60a54ef9d2de16fbbfd3ff8b04edc0c0140a761b56c267ac11aa467"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39f5441553f1c2aed4de4377178ad8ff8f9d733723d6c66d983d75341de265ab"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a00312dea9310d4cb7dbd7787e722d2e86a95c2db92fbd7d0155f97127bcb40"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f2fc11e8fe034ee3c34d316d0ad8808f45bc3b9ce5857ff29d513f3ff2923a1"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:586f8204935b9ec884500498ccc91aa869fc652c40c093bd9e1471fbcc25c022"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddc2f4dfd396c7bfa18e6ce371cba60e4cf9d2e5cdb71376aa2da264605b60b9"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ddcba87675b6d509139d1b521e0c8250e967e63b5909a7e8f8944d0f90ff36f"}, - {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7bd339195d84439cbe5771546fe8a4e8a7a045417d8f9de9a368c434e42a721e"}, - {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:d7c36232a90d4755b720fbd76739d8891732b18cf240a9c645d75f00639a9024"}, - {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6b0817e34942b2ca527b0e9298373e7cc75f429e8da2055607f4931fded23e20"}, - {file = "rpds_py-0.18.0-cp39-none-win32.whl", hash = "sha256:99f70b740dc04d09e6b2699b675874367885217a2e9f782bdf5395632ac663b7"}, - {file = "rpds_py-0.18.0-cp39-none-win_amd64.whl", hash = "sha256:6ef687afab047554a2d366e112dd187b62d261d49eb79b77e386f94644363294"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ad36cfb355e24f1bd37cac88c112cd7730873f20fb0bdaf8ba59eedf8216079f"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:36b3ee798c58ace201289024b52788161e1ea133e4ac93fba7d49da5fec0ef9e"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8a2f084546cc59ea99fda8e070be2fd140c3092dc11524a71aa8f0f3d5a55ca"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e4461d0f003a0aa9be2bdd1b798a041f177189c1a0f7619fe8c95ad08d9a45d7"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8db715ebe3bb7d86d77ac1826f7d67ec11a70dbd2376b7cc214199360517b641"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:793968759cd0d96cac1e367afd70c235867831983f876a53389ad869b043c948"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66e6a3af5a75363d2c9a48b07cb27c4ea542938b1a2e93b15a503cdfa8490795"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6ef0befbb5d79cf32d0266f5cff01545602344eda89480e1dd88aca964260b18"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1d4acf42190d449d5e89654d5c1ed3a4f17925eec71f05e2a41414689cda02d1"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:a5f446dd5055667aabaee78487f2b5ab72e244f9bc0b2ffebfeec79051679984"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9dbbeb27f4e70bfd9eec1be5477517365afe05a9b2c441a0b21929ee61048124"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:22806714311a69fd0af9b35b7be97c18a0fc2826e6827dbb3a8c94eac6cf7eeb"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:b34ae4636dfc4e76a438ab826a0d1eed2589ca7d9a1b2d5bb546978ac6485461"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c8370641f1a7f0e0669ddccca22f1da893cef7628396431eb445d46d893e5cd"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c8362467a0fdeccd47935f22c256bec5e6abe543bf0d66e3d3d57a8fb5731863"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11a8c85ef4a07a7638180bf04fe189d12757c696eb41f310d2426895356dcf05"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b316144e85316da2723f9d8dc75bada12fa58489a527091fa1d5a612643d1a0e"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf1ea2e34868f6fbf070e1af291c8180480310173de0b0c43fc38a02929fc0e3"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e546e768d08ad55b20b11dbb78a745151acbd938f8f00d0cfbabe8b0199b9880"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4901165d170a5fde6f589acb90a6b33629ad1ec976d4529e769c6f3d885e3e80"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:618a3d6cae6ef8ec88bb76dd80b83cfe415ad4f1d942ca2a903bf6b6ff97a2da"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ed4eb745efbff0a8e9587d22a84be94a5eb7d2d99c02dacf7bd0911713ed14dd"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6c81e5f372cd0dc5dc4809553d34f832f60a46034a5f187756d9b90586c2c307"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:43fbac5f22e25bee1d482c97474f930a353542855f05c1161fd804c9dc74a09d"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d7faa6f14017c0b1e69f5e2c357b998731ea75a442ab3841c0dbbbfe902d2c4"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:08231ac30a842bd04daabc4d71fddd7e6d26189406d5a69535638e4dcb88fe76"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:044a3e61a7c2dafacae99d1e722cc2d4c05280790ec5a05031b3876809d89a5c"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3f26b5bd1079acdb0c7a5645e350fe54d16b17bfc5e71f371c449383d3342e17"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:482103aed1dfe2f3b71a58eff35ba105289b8d862551ea576bd15479aba01f66"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1374f4129f9bcca53a1bba0bb86bf78325a0374577cf7e9e4cd046b1e6f20e24"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:635dc434ff724b178cb192c70016cc0ad25a275228f749ee0daf0eddbc8183b1"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:bc362ee4e314870a70f4ae88772d72d877246537d9f8cb8f7eacf10884862432"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:4832d7d380477521a8c1644bbab6588dfedea5e30a7d967b5fb75977c45fd77f"}, - {file = "rpds_py-0.18.0.tar.gz", hash = "sha256:42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d"}, + {file = "rpds_py-0.18.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:d31dea506d718693b6b2cffc0648a8929bdc51c70a311b2770f09611caa10d53"}, + {file = "rpds_py-0.18.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:732672fbc449bab754e0b15356c077cc31566df874964d4801ab14f71951ea80"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a98a1f0552b5f227a3d6422dbd61bc6f30db170939bd87ed14f3c339aa6c7c9"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f1944ce16401aad1e3f7d312247b3d5de7981f634dc9dfe90da72b87d37887d"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38e14fb4e370885c4ecd734f093a2225ee52dc384b86fa55fe3f74638b2cfb09"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08d74b184f9ab6289b87b19fe6a6d1a97fbfea84b8a3e745e87a5de3029bf944"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d70129cef4a8d979caa37e7fe957202e7eee8ea02c5e16455bc9808a59c6b2f0"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce0bb20e3a11bd04461324a6a798af34d503f8d6f1aa3d2aa8901ceaf039176d"}, + {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:81c5196a790032e0fc2464c0b4ab95f8610f96f1f2fa3d4deacce6a79852da60"}, + {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f3027be483868c99b4985fda802a57a67fdf30c5d9a50338d9db646d590198da"}, + {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d44607f98caa2961bab4fa3c4309724b185b464cdc3ba6f3d7340bac3ec97cc1"}, + {file = "rpds_py-0.18.1-cp310-none-win32.whl", hash = "sha256:c273e795e7a0f1fddd46e1e3cb8be15634c29ae8ff31c196debb620e1edb9333"}, + {file = "rpds_py-0.18.1-cp310-none-win_amd64.whl", hash = "sha256:8352f48d511de5f973e4f2f9412736d7dea76c69faa6d36bcf885b50c758ab9a"}, + {file = "rpds_py-0.18.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6b5ff7e1d63a8281654b5e2896d7f08799378e594f09cf3674e832ecaf396ce8"}, + {file = "rpds_py-0.18.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8927638a4d4137a289e41d0fd631551e89fa346d6dbcfc31ad627557d03ceb6d"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:154bf5c93d79558b44e5b50cc354aa0459e518e83677791e6adb0b039b7aa6a7"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07f2139741e5deb2c5154a7b9629bc5aa48c766b643c1a6750d16f865a82c5fc"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c7672e9fba7425f79019db9945b16e308ed8bc89348c23d955c8c0540da0a07"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:489bdfe1abd0406eba6b3bb4fdc87c7fa40f1031de073d0cfb744634cc8fa261"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c20f05e8e3d4fc76875fc9cb8cf24b90a63f5a1b4c5b9273f0e8225e169b100"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:967342e045564cef76dfcf1edb700b1e20838d83b1aa02ab313e6a497cf923b8"}, + {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2cc7c1a47f3a63282ab0f422d90ddac4aa3034e39fc66a559ab93041e6505da7"}, + {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f7afbfee1157e0f9376c00bb232e80a60e59ed716e3211a80cb8506550671e6e"}, + {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e6934d70dc50f9f8ea47081ceafdec09245fd9f6032669c3b45705dea096b88"}, + {file = "rpds_py-0.18.1-cp311-none-win32.whl", hash = "sha256:c69882964516dc143083d3795cb508e806b09fc3800fd0d4cddc1df6c36e76bb"}, + {file = "rpds_py-0.18.1-cp311-none-win_amd64.whl", hash = "sha256:70a838f7754483bcdc830444952fd89645569e7452e3226de4a613a4c1793fb2"}, + {file = "rpds_py-0.18.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3dd3cd86e1db5aadd334e011eba4e29d37a104b403e8ca24dcd6703c68ca55b3"}, + {file = "rpds_py-0.18.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:05f3d615099bd9b13ecf2fc9cf2d839ad3f20239c678f461c753e93755d629ee"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35b2b771b13eee8729a5049c976197ff58a27a3829c018a04341bcf1ae409b2b"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ee17cd26b97d537af8f33635ef38be873073d516fd425e80559f4585a7b90c43"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b646bf655b135ccf4522ed43d6902af37d3f5dbcf0da66c769a2b3938b9d8184"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19ba472b9606c36716062c023afa2484d1e4220548751bda14f725a7de17b4f6"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e30ac5e329098903262dc5bdd7e2086e0256aa762cc8b744f9e7bf2a427d3f8"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d58ad6317d188c43750cb76e9deacf6051d0f884d87dc6518e0280438648a9ac"}, + {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e1735502458621921cee039c47318cb90b51d532c2766593be6207eec53e5c4c"}, + {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f5bab211605d91db0e2995a17b5c6ee5edec1270e46223e513eaa20da20076ac"}, + {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2fc24a329a717f9e2448f8cd1f960f9dac4e45b6224d60734edeb67499bab03a"}, + {file = "rpds_py-0.18.1-cp312-none-win32.whl", hash = "sha256:1805d5901779662d599d0e2e4159d8a82c0b05faa86ef9222bf974572286b2b6"}, + {file = "rpds_py-0.18.1-cp312-none-win_amd64.whl", hash = "sha256:720edcb916df872d80f80a1cc5ea9058300b97721efda8651efcd938a9c70a72"}, + {file = "rpds_py-0.18.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:c827576e2fa017a081346dce87d532a5310241648eb3700af9a571a6e9fc7e74"}, + {file = "rpds_py-0.18.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:aa3679e751408d75a0b4d8d26d6647b6d9326f5e35c00a7ccd82b78ef64f65f8"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0abeee75434e2ee2d142d650d1e54ac1f8b01e6e6abdde8ffd6eeac6e9c38e20"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed402d6153c5d519a0faf1bb69898e97fb31613b49da27a84a13935ea9164dfc"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:338dee44b0cef8b70fd2ef54b4e09bb1b97fc6c3a58fea5db6cc083fd9fc2724"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7750569d9526199c5b97e5a9f8d96a13300950d910cf04a861d96f4273d5b104"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:607345bd5912aacc0c5a63d45a1f73fef29e697884f7e861094e443187c02be5"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:207c82978115baa1fd8d706d720b4a4d2b0913df1c78c85ba73fe6c5804505f0"}, + {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:6d1e42d2735d437e7e80bab4d78eb2e459af48c0a46e686ea35f690b93db792d"}, + {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:5463c47c08630007dc0fe99fb480ea4f34a89712410592380425a9b4e1611d8e"}, + {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:06d218939e1bf2ca50e6b0ec700ffe755e5216a8230ab3e87c059ebb4ea06afc"}, + {file = "rpds_py-0.18.1-cp38-none-win32.whl", hash = "sha256:312fe69b4fe1ffbe76520a7676b1e5ac06ddf7826d764cc10265c3b53f96dbe9"}, + {file = "rpds_py-0.18.1-cp38-none-win_amd64.whl", hash = "sha256:9437ca26784120a279f3137ee080b0e717012c42921eb07861b412340f85bae2"}, + {file = "rpds_py-0.18.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:19e515b78c3fc1039dd7da0a33c28c3154458f947f4dc198d3c72db2b6b5dc93"}, + {file = "rpds_py-0.18.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a7b28c5b066bca9a4eb4e2f2663012debe680f097979d880657f00e1c30875a0"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:673fdbbf668dd958eff750e500495ef3f611e2ecc209464f661bc82e9838991e"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d960de62227635d2e61068f42a6cb6aae91a7fe00fca0e3aeed17667c8a34611"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:352a88dc7892f1da66b6027af06a2e7e5d53fe05924cc2cfc56495b586a10b72"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e0ee01ad8260184db21468a6e1c37afa0529acc12c3a697ee498d3c2c4dcaf3"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4c39ad2f512b4041343ea3c7894339e4ca7839ac38ca83d68a832fc8b3748ab"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aaa71ee43a703c321906813bb252f69524f02aa05bf4eec85f0c41d5d62d0f4c"}, + {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6cd8098517c64a85e790657e7b1e509b9fe07487fd358e19431cb120f7d96338"}, + {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:4adec039b8e2928983f885c53b7cc4cda8965b62b6596501a0308d2703f8af1b"}, + {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:32b7daaa3e9389db3695964ce8e566e3413b0c43e3394c05e4b243a4cd7bef26"}, + {file = "rpds_py-0.18.1-cp39-none-win32.whl", hash = "sha256:2625f03b105328729f9450c8badda34d5243231eef6535f80064d57035738360"}, + {file = "rpds_py-0.18.1-cp39-none-win_amd64.whl", hash = "sha256:bf18932d0003c8c4d51a39f244231986ab23ee057d235a12b2684ea26a353590"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cbfbea39ba64f5e53ae2915de36f130588bba71245b418060ec3330ebf85678e"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:a3d456ff2a6a4d2adcdf3c1c960a36f4fd2fec6e3b4902a42a384d17cf4e7a65"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7700936ef9d006b7ef605dc53aa364da2de5a3aa65516a1f3ce73bf82ecfc7ae"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:51584acc5916212e1bf45edd17f3a6b05fe0cbb40482d25e619f824dccb679de"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:942695a206a58d2575033ff1e42b12b2aece98d6003c6bc739fbf33d1773b12f"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b906b5f58892813e5ba5c6056d6a5ad08f358ba49f046d910ad992196ea61397"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6f8e3fecca256fefc91bb6765a693d96692459d7d4c644660a9fff32e517843"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7732770412bab81c5a9f6d20aeb60ae943a9b36dcd990d876a773526468e7163"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:bd1105b50ede37461c1d51b9698c4f4be6e13e69a908ab7751e3807985fc0346"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:618916f5535784960f3ecf8111581f4ad31d347c3de66d02e728de460a46303c"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:17c6d2155e2423f7e79e3bb18151c686d40db42d8645e7977442170c360194d4"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6c4c4c3f878df21faf5fac86eda32671c27889e13570645a9eea0a1abdd50922"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:fab6ce90574645a0d6c58890e9bcaac8d94dff54fb51c69e5522a7358b80ab64"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:531796fb842b53f2695e94dc338929e9f9dbf473b64710c28af5a160b2a8927d"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:740884bc62a5e2bbb31e584f5d23b32320fd75d79f916f15a788d527a5e83644"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:998125738de0158f088aef3cb264a34251908dd2e5d9966774fdab7402edfab7"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e2be6e9dd4111d5b31ba3b74d17da54a8319d8168890fbaea4b9e5c3de630ae5"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0cee71bc618cd93716f3c1bf56653740d2d13ddbd47673efa8bf41435a60daa"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2c3caec4ec5cd1d18e5dd6ae5194d24ed12785212a90b37f5f7f06b8bedd7139"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:27bba383e8c5231cd559affe169ca0b96ec78d39909ffd817f28b166d7ddd4d8"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:a888e8bdb45916234b99da2d859566f1e8a1d2275a801bb8e4a9644e3c7e7909"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6031b25fb1b06327b43d841f33842b383beba399884f8228a6bb3df3088485ff"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48c2faaa8adfacefcbfdb5f2e2e7bdad081e5ace8d182e5f4ade971f128e6bb3"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:d85164315bd68c0806768dc6bb0429c6f95c354f87485ee3593c4f6b14def2bd"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6afd80f6c79893cfc0574956f78a0add8c76e3696f2d6a15bca2c66c415cf2d4"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa242ac1ff583e4ec7771141606aafc92b361cd90a05c30d93e343a0c2d82a89"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d21be4770ff4e08698e1e8e0bce06edb6ea0626e7c8f560bc08222880aca6a6f"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c45a639e93a0c5d4b788b2613bd637468edd62f8f95ebc6fcc303d58ab3f0a8"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910e71711d1055b2768181efa0a17537b2622afeb0424116619817007f8a2b10"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9bb1f182a97880f6078283b3505a707057c42bf55d8fca604f70dedfdc0772a"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1d54f74f40b1f7aaa595a02ff42ef38ca654b1469bef7d52867da474243cc633"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:8d2e182c9ee01135e11e9676e9a62dfad791a7a467738f06726872374a83db49"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:636a15acc588f70fda1661234761f9ed9ad79ebed3f2125d44be0862708b666e"}, + {file = "rpds_py-0.18.1.tar.gz", hash = "sha256:dc48b479d540770c811fbd1eb9ba2bb66951863e448efec2e2c102625328e92f"}, ] [[package]] @@ -2579,13 +2579,13 @@ typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] [[package]] name = "tinycss2" -version = "1.2.1" +version = "1.3.0" description = "A tiny CSS parser" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tinycss2-1.2.1-py3-none-any.whl", hash = "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847"}, - {file = "tinycss2-1.2.1.tar.gz", hash = "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"}, + {file = "tinycss2-1.3.0-py3-none-any.whl", hash = "sha256:54a8dbdffb334d536851be0226030e9505965bb2f30f21a4a82c55fb2a80fae7"}, + {file = "tinycss2-1.3.0.tar.gz", hash = "sha256:152f9acabd296a8375fbca5b84c961ff95971fcfc32e79550c8df8e29118c54d"}, ] [package.dependencies] @@ -2593,7 +2593,7 @@ webencodings = ">=0.4" [package.extras] doc = ["sphinx", "sphinx_rtd_theme"] -test = ["flake8", "isort", "pytest"] +test = ["pytest", "ruff"] [[package]] name = "tomli" @@ -2639,13 +2639,13 @@ files = [ [[package]] name = "tqdm" -version = "4.66.2" +version = "4.66.4" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.66.2-py3-none-any.whl", hash = "sha256:1ee4f8a893eb9bef51c6e35730cebf234d5d0b6bd112b0271e10ed7c24a02bd9"}, - {file = "tqdm-4.66.2.tar.gz", hash = "sha256:6cd52cdf0fef0e0f543299cfc96fec90d7b8a7e88745f411ec33eb44d5ed3531"}, + {file = "tqdm-4.66.4-py3-none-any.whl", hash = "sha256:b75ca56b413b030bc3f00af51fd2c1a1a5eac6a0c1cca83cbb37a5c52abce644"}, + {file = "tqdm-4.66.4.tar.gz", hash = "sha256:e4d936c9de8727928f3be6079590e97d9abfe8d39a590be678eb5919ffc186bb"}, ] [package.dependencies] @@ -2779,17 +2779,17 @@ files = [ [[package]] name = "websocket-client" -version = "1.7.0" +version = "1.8.0" description = "WebSocket client for Python with low level API options" optional = false python-versions = ">=3.8" files = [ - {file = "websocket-client-1.7.0.tar.gz", hash = "sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6"}, - {file = "websocket_client-1.7.0-py3-none-any.whl", hash = "sha256:f4c3d22fec12a2461427a29957ff07d35098ee2d976d3ba244e688b8b4057588"}, + {file = "websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"}, + {file = "websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da"}, ] [package.extras] -docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] +docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx-rtd-theme (>=1.1.0)"] optional = ["python-socks", "wsaccel"] test = ["websockets"] diff --git a/pyproject.toml b/pyproject.toml index 0320053..7ceb644 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "variPEPS" -version = "0.5.5" +version = "0.6.0" description = "Versatile tensor network library for variational ground state simulations in two spatial dimensions" authors = ["Jan Naumann ", "Philipp Schmoll ", "Frederik Wilde", "Finn Krein"] license = "GPL-3.0-or-later" diff --git a/varipeps/contractions/definitions.py b/varipeps/contractions/definitions.py index 0e2ba41..7ccd5a0 100644 --- a/varipeps/contractions/definitions.py +++ b/varipeps/contractions/definitions.py @@ -195,6 +195,254 @@ def _prepare_defs(cls): ], } + density_matrix_one_site_C1_phase: Definition = { + "tensors": [ + [ + "tensor", + "tensor_conj", + "C1_phase", + "T1", + "C2", + "T2", + "C3", + "T3", + "C4", + "T4", + ] + ], + "network": [ + [ + (6, 7, -1, 10, 9), # tensor + (13, 14, -2, 15, 16), # tensor_conj + (2, 12), # C1_phase + (12, 9, 16, 3), # T1 + (3, 8), # C2 + (10, 15, 4, 8), # T2 + (11, 4), # C3 + (1, 11, 14, 7), # T3 + (1, 5), # C4 + (5, 13, 6, 2), # T4 + ] + ], + } + + density_matrix_one_site_C2_phase: Definition = { + "tensors": [ + [ + "tensor", + "tensor_conj", + "C1", + "T1", + "C2_phase", + "T2", + "C3", + "T3", + "C4", + "T4", + ] + ], + "network": [ + [ + (6, 7, -1, 10, 9), # tensor + (13, 14, -2, 15, 16), # tensor_conj + (2, 12), # C1 + (12, 9, 16, 3), # T1 + (3, 8), # C2_phase + (10, 15, 4, 8), # T2 + (11, 4), # C3 + (1, 11, 14, 7), # T3 + (1, 5), # C4 + (5, 13, 6, 2), # T4 + ] + ], + } + + density_matrix_one_site_C3_phase: Definition = { + "tensors": [ + [ + "tensor", + "tensor_conj", + "C1", + "T1", + "C2", + "T2", + "C3_phase", + "T3", + "C4", + "T4", + ] + ], + "network": [ + [ + (6, 7, -1, 10, 9), # tensor + (13, 14, -2, 15, 16), # tensor_conj + (2, 12), # C1 + (12, 9, 16, 3), # T1 + (3, 8), # C2 + (10, 15, 4, 8), # T2 + (11, 4), # C3_phase + (1, 11, 14, 7), # T3 + (1, 5), # C4 + (5, 13, 6, 2), # T4 + ] + ], + } + + density_matrix_one_site_C4_phase: Definition = { + "tensors": [ + [ + "tensor", + "tensor_conj", + "C1", + "T1", + "C2", + "T2", + "C3", + "T3", + "C4_phase", + "T4", + ] + ], + "network": [ + [ + (6, 7, -1, 10, 9), # tensor + (13, 14, -2, 15, 16), # tensor_conj + (2, 12), # C1 + (12, 9, 16, 3), # T1 + (3, 8), # C2 + (10, 15, 4, 8), # T2 + (11, 4), # C3 + (1, 11, 14, 7), # T3 + (1, 5), # C4_phase + (5, 13, 6, 2), # T4 + ] + ], + } + + density_matrix_one_site_T1_phase: Definition = { + "tensors": [ + [ + "tensor", + "tensor_conj", + "C1", + "T1_phase", + "C2", + "T2", + "C3", + "T3", + "C4", + "T4", + ] + ], + "network": [ + [ + (6, 7, -1, 10, 9), # tensor + (13, 14, -2, 15, 16), # tensor_conj + (2, 12), # C1 + (12, 9, 16, 3), # T1_phase + (3, 8), # C2 + (10, 15, 4, 8), # T2 + (11, 4), # C3 + (1, 11, 14, 7), # T3 + (1, 5), # C4 + (5, 13, 6, 2), # T4 + ] + ], + } + + density_matrix_one_site_T2_phase: Definition = { + "tensors": [ + [ + "tensor", + "tensor_conj", + "C1", + "T1", + "C2", + "T2_phase", + "C3", + "T3", + "C4", + "T4", + ] + ], + "network": [ + [ + (6, 7, -1, 10, 9), # tensor + (13, 14, -2, 15, 16), # tensor_conj + (2, 12), # C1 + (12, 9, 16, 3), # T1 + (3, 8), # C2 + (10, 15, 4, 8), # T2_phase + (11, 4), # C3 + (1, 11, 14, 7), # T3 + (1, 5), # C4 + (5, 13, 6, 2), # T4 + ] + ], + } + + density_matrix_one_site_T3_phase: Definition = { + "tensors": [ + [ + "tensor", + "tensor_conj", + "C1", + "T1", + "C2", + "T2", + "C3", + "T3_phase", + "C4", + "T4", + ] + ], + "network": [ + [ + (6, 7, -1, 10, 9), # tensor + (13, 14, -2, 15, 16), # tensor_conj + (2, 12), # C1 + (12, 9, 16, 3), # T1 + (3, 8), # C2 + (10, 15, 4, 8), # T2 + (11, 4), # C3 + (1, 11, 14, 7), # T3_phase + (1, 5), # C4 + (5, 13, 6, 2), # T4 + ] + ], + } + + density_matrix_one_site_T4_phase: Definition = { + "tensors": [ + [ + "tensor", + "tensor_conj", + "C1", + "T1", + "C2", + "T2", + "C3", + "T3", + "C4", + "T4_phase", + ] + ], + "network": [ + [ + (6, 7, -1, 10, 9), # tensor + (13, 14, -2, 15, 16), # tensor_conj + (2, 12), # C1 + (12, 9, 16, 3), # T1 + (3, 8), # C2 + (10, 15, 4, 8), # T2 + (11, 4), # C3 + (1, 11, 14, 7), # T3 + (1, 5), # C4 + (5, 13, 6, 2), # T4_phase + ] + ], + } + density_matrix_two_sites_left: Definition = { "tensors": [["tensor", "tensor_conj", "C1", "T1", "T3", "C4", "T4"]], "network": [ @@ -522,6 +770,51 @@ def _prepare_defs(cls): \\ """ + ctmrg_absorption_left_C1_phase_1: Definition = { + "tensors": [["C1_phase", "T1"], "projector_left_bottom"], + "network": [ + [ + (2, 1), # C1_phase + (1, 3, 4, -2), # T1 + ], + (-1, 2, 3, 4), # projector_left_bottom + ], + } + """ + .. figure:: /images/CTMRG_Absorption_L_C1.* + :align: center + :width: 60% + :alt: Contraction for C1 during left absorption with contraction order shown. + + Contraction for C1 during left absorption. Here C1 is the tensor with + structure factor phase included which is grown by a normal T1 tensor. + + \\ + """ + + ctmrg_absorption_left_C1_phase_2: Definition = { + "tensors": [["C1", "T1_phase"], "projector_left_bottom"], + "network": [ + [ + (2, 1), # C1 + (1, 3, 4, -2), # T1_phase + ], + (-1, 2, 3, 4), # projector_left_bottom + ], + } + """ + .. figure:: /images/CTMRG_Absorption_L_C1.* + :align: center + :width: 60% + :alt: Contraction for C1 during left absorption with contraction order shown. + + Contraction for C1 during left absorption. Here C1 is the tensor with + structure factor phase not included yet which is grown by a T1 tensor + which includes a phase already. + + \\ + """ + ctmrg_absorption_left_T4: Definition = { "tensors": [ ["tensor", "tensor_conj", "T4"], @@ -566,6 +859,42 @@ def _prepare_defs(cls): ], } + ctmrg_absorption_left_T4_large_d_phase_1: Definition = { + "tensors": [ + ["tensor", "tensor_conj", "T4_phase"], + "projector_left_top", + "projector_left_bottom", + ], + "network": [ + [ + (4, 8, 2, -3, 3), # tensor + (5, 9, 2, -2, 6), # tensor_conj + (7, 5, 4, 1), # T4 + ], + (1, 3, 6, -4), # projector_left_top + (-1, 7, 8, 9), # projector_left_bottom + ], + } + + ctmrg_absorption_left_T4_large_d_phase_2: Definition = { + "tensors": [ + ["tensor", "tensor_conj", "T4"], + "projector_left_top", + "projector_left_bottom", + "structure_factor_gate", + ], + "network": [ + [ + (5, 9, 2, -3, 4), # tensor + (6, 10, 3, -2, 7), # tensor_conj + (8, 6, 5, 1), # T4 + ], + (1, 4, 7, -4), # projector_left_top + (-1, 8, 9, 10), # projector_left_bottom + (2, 3), # structure_factor_gate + ], + } + ctmrg_absorption_left_C4: Definition = { "tensors": [["T3", "C4"], "projector_left_top"], "network": [ @@ -587,70 +916,196 @@ def _prepare_defs(cls): \\ """ - ctmrg_absorption_right_C2: Definition = { - "tensors": [["T1", "C2"], "projector_right_bottom"], + ctmrg_absorption_left_C4_phase_1: Definition = { + "tensors": [["T3", "C4_phase"], "projector_left_top"], "network": [ [ - (-1, 3, 4, 1), # T1 - (1, 2), # C2 + (1, -1, 4, 3), # T3 + (1, 2), # C4_phase ], - (2, 4, 3, -2), # projector_right_bottom + (2, 3, 4, -2), # projector_left_top ], } """ - .. figure:: /images/CTMRG_Absorption_R_C2.* + .. figure:: /images/CTMRG_Absorption_L_C4.* :align: center :width: 60% - :alt: Contraction for C2 during right absorption with contraction order shown. + :alt: Contraction for C4 during left absorption with contraction order shown. - Contraction for C2 during right absorption. + Contraction for C4 during left absorption. Here C4 is the tensor with + structure factor phase included which is grown by a normal T3 tensor. \\ """ - ctmrg_absorption_right_T2: Definition = { - "tensors": [ - ["tensor", "tensor_conj", "T2"], - "projector_right_top", - "projector_right_bottom", - ], + ctmrg_absorption_left_C4_phase_2: Definition = { + "tensors": [["T3_phase", "C4"], "projector_left_top"], "network": [ [ - (-1, 8, 6, 3, 2), # tensor - (-2, 9, 6, 5, 4), # tensor_conj - (3, 5, 7, 1), # T2 + (1, -1, 4, 3), # T3_phase + (1, 2), # C4 ], - (-4, 1, 4, 2), # projector_right_top - (7, 9, 8, -3), # projector_right_bottom + (2, 3, 4, -2), # projector_left_top ], } """ - .. figure:: /images/CTMRG_Absorption_R_T2.* + .. figure:: /images/CTMRG_Absorption_L_C4.* :align: center :width: 60% - :alt: Contraction for T2 during right absorption with contraction order shown. + :alt: Contraction for C4 during left absorption with contraction order shown. - Contraction for T2 during right absorption. + Contraction for C4 during left absorption. Here C3 is the tensor with + structure factor phase not included yet which is grown by a T3 tensor + which includes a phase already. \\ """ - ctmrg_absorption_right_T2_large_d: Definition = { - "tensors": [ - ["tensor", "tensor_conj", "T2"], - "projector_right_top", - "projector_right_bottom", - ], + ctmrg_absorption_right_C2: Definition = { + "tensors": [["T1", "C2"], "projector_right_bottom"], "network": [ [ - (-1, 8, 2, 4, 3), # tensor - (-2, 9, 2, 6, 5), # tensor_conj - (4, 6, 7, 1), # T2 + (-1, 3, 4, 1), # T1 + (1, 2), # C2 ], - (-4, 1, 5, 3), # projector_right_top + (2, 4, 3, -2), # projector_right_bottom + ], + } + """ + .. figure:: /images/CTMRG_Absorption_R_C2.* + :align: center + :width: 60% + :alt: Contraction for C2 during right absorption with contraction order shown. + + Contraction for C2 during right absorption. + + \\ + """ + + ctmrg_absorption_right_C2_phase_1: Definition = { + "tensors": [["T1", "C2_phase"], "projector_right_bottom"], + "network": [ + [ + (-1, 3, 4, 1), # T1 + (1, 2), # C2_phase + ], + (2, 4, 3, -2), # projector_right_bottom + ], + } + """ + .. figure:: /images/CTMRG_Absorption_R_C2.* + :align: center + :width: 60% + :alt: Contraction for C2 during right absorption with contraction order shown. + + Contraction for C2 during right absorption. Here C2 is the tensor with + structure factor phase included which is grown by a normal T1 tensor. + + \\ + """ + + ctmrg_absorption_right_C2_phase_2: Definition = { + "tensors": [["T1_phase", "C2"], "projector_right_bottom"], + "network": [ + [ + (-1, 3, 4, 1), # T1_phase + (1, 2), # C2 + ], + (2, 4, 3, -2), # projector_right_bottom + ], + } + """ + .. figure:: /images/CTMRG_Absorption_R_C2.* + :align: center + :width: 60% + :alt: Contraction for C2 during right absorption with contraction order shown. + + Contraction for C2 during right absorption. Here C2 is the tensor with + structure factor phase not included yet which is grown by a T1 tensor + which includes a phase already. + + \\ + """ + + ctmrg_absorption_right_T2: Definition = { + "tensors": [ + ["tensor", "tensor_conj", "T2"], + "projector_right_top", + "projector_right_bottom", + ], + "network": [ + [ + (-1, 8, 6, 3, 2), # tensor + (-2, 9, 6, 5, 4), # tensor_conj + (3, 5, 7, 1), # T2 + ], + (-4, 1, 4, 2), # projector_right_top (7, 9, 8, -3), # projector_right_bottom ], } + """ + .. figure:: /images/CTMRG_Absorption_R_T2.* + :align: center + :width: 60% + :alt: Contraction for T2 during right absorption with contraction order shown. + + Contraction for T2 during right absorption. + + \\ + """ + + ctmrg_absorption_right_T2_large_d: Definition = { + "tensors": [ + ["tensor", "tensor_conj", "T2"], + "projector_right_top", + "projector_right_bottom", + ], + "network": [ + [ + (-1, 8, 2, 4, 3), # tensor + (-2, 9, 2, 6, 5), # tensor_conj + (4, 6, 7, 1), # T2 + ], + (-4, 1, 5, 3), # projector_right_top + (7, 9, 8, -3), # projector_right_bottom + ], + } + + ctmrg_absorption_right_T2_large_d_phase_1: Definition = { + "tensors": [ + ["tensor", "tensor_conj", "T2_phase"], + "projector_right_top", + "projector_right_bottom", + ], + "network": [ + [ + (-1, 8, 2, 4, 3), # tensor + (-2, 9, 2, 6, 5), # tensor_conj + (4, 6, 7, 1), # T2_phase + ], + (-4, 1, 5, 3), # projector_right_top + (7, 9, 8, -3), # projector_right_bottom + ], + } + + ctmrg_absorption_right_T2_large_d_phase_2: Definition = { + "tensors": [ + ["tensor", "tensor_conj", "T2"], + "projector_right_top", + "projector_right_bottom", + "structure_factor_gate", + ], + "network": [ + [ + (-1, 9, 2, 5, 4), # tensor + (-2, 10, 3, 7, 6), # tensor_conj + (5, 7, 8, 1), # T2_phase + ], + (-4, 1, 6, 4), # projector_right_top + (8, 10, 9, -3), # projector_right_bottom + (2, 3), # structure_factor_gate + ], + } ctmrg_absorption_right_C3: Definition = { "tensors": [["C3", "T3"], "projector_right_top"], @@ -673,6 +1128,51 @@ def _prepare_defs(cls): \\ """ + ctmrg_absorption_right_C3_phase_1: Definition = { + "tensors": [["C3_phase", "T3"], "projector_right_top"], + "network": [ + [ + (1, 2), # C3_phase + (-1, 1, 4, 3), # T3 + ], + (-2, 2, 4, 3), # projector_right_top + ], + } + """ + .. figure:: /images/CTMRG_Absorption_R_C3.* + :align: center + :width: 60% + :alt: Contraction for C3 during right absorption with contraction order shown. + + Contraction for C3 during right absorption. Here C3 is the tensor with + structure factor phase included which is grown by a normal T3 tensor. + + \\ + """ + + ctmrg_absorption_right_C3_phase_2: Definition = { + "tensors": [["C3", "T3_phase"], "projector_right_top"], + "network": [ + [ + (1, 2), # C3 + (-1, 1, 4, 3), # T3_phase + ], + (-2, 2, 4, 3), # projector_right_top + ], + } + """ + .. figure:: /images/CTMRG_Absorption_R_C3.* + :align: center + :width: 60% + :alt: Contraction for C3 during right absorption with contraction order shown. + + Contraction for C3 during right absorption. Here C3 is the tensor with + structure factor phase not included yet which is grown by a T3 tensor + which includes a phase already. + + \\ + """ + ctmrg_absorption_top_C1: Definition = { "tensors": [["T4", "C1"], "projector_top_right"], "network": [ @@ -694,6 +1194,51 @@ def _prepare_defs(cls): \\ """ + ctmrg_absorption_top_C1_phase_1: Definition = { + "tensors": [["T4", "C1_phase"], "projector_top_right"], + "network": [ + [ + (-1, 4, 3, 1), # T4 + (1, 2), # C1_phase + ], + (2, 3, 4, -2), # projector_top_right + ], + } + """ + .. figure:: /images/CTMRG_Absorption_U_C1.* + :align: center + :width: 60% + :alt: Contraction for C1 during top absorption with contraction order shown. + + Contraction for C1 during top absorption. Here C1 is the tensor with + structure factor phase included which is grown by a normal T4 tensor. + + \\ + """ + + ctmrg_absorption_top_C1_phase_2: Definition = { + "tensors": [["T4_phase", "C1"], "projector_top_right"], + "network": [ + [ + (-1, 4, 3, 1), # T4_phase + (1, 2), # C1 + ], + (2, 3, 4, -2), # projector_top_right + ], + } + """ + .. figure:: /images/CTMRG_Absorption_U_C1.* + :align: center + :width: 60% + :alt: Contraction for C1 during top absorption with contraction order shown. + + Contraction for C1 during top absorption. Here C1 is the tensor with + structure factor phase not included yet which is grown by a T4 tensor + which includes a phase already. + + \\ + """ + ctmrg_absorption_top_T1: Definition = { "tensors": [ ["tensor", "tensor_conj", "T1"], @@ -738,6 +1283,42 @@ def _prepare_defs(cls): ], } + ctmrg_absorption_top_T1_large_d_phase_1: Definition = { + "tensors": [ + ["tensor", "tensor_conj", "T1_phase"], + "projector_top_left", + "projector_top_right", + ], + "network": [ + [ + (4, -2, 2, 8, 3), # tensor + (6, -3, 2, 9, 5), # tensor_conj + (1, 3, 5, 7), # T1_phase + ], + (-1, 1, 4, 6), # projector_top_left + (7, 8, 9, -4), # projector_top_right + ], + } + + ctmrg_absorption_top_T1_large_d_phase_2: Definition = { + "tensors": [ + ["tensor", "tensor_conj", "T1"], + "projector_top_left", + "projector_top_right", + "structure_factor_gate", + ], + "network": [ + [ + (5, -2, 2, 9, 4), # tensor + (7, -3, 3, 10, 6), # tensor_conj + (1, 4, 6, 8), # T1 + ], + (-1, 1, 5, 7), # projector_top_left + (8, 9, 10, -4), # projector_top_right + (2, 3), # structure_factor_gate + ], + } + ctmrg_absorption_top_C2: Definition = { "tensors": [["C2", "T2"], "projector_top_left"], "network": [ @@ -759,6 +1340,51 @@ def _prepare_defs(cls): \\ """ + ctmrg_absorption_top_C2_phase_1: Definition = { + "tensors": [["C2_phase", "T2"], "projector_top_left"], + "network": [ + [ + (2, 1), # C2_phase + (3, 4, -2, 1), # T2 + ], + (-1, 2, 3, 4), # projector_top_left + ], + } + """ + .. figure:: /images/CTMRG_Absorption_U_C2.* + :align: center + :width: 60% + :alt: Contraction for C2 during top absorption with contraction order shown. + + Contraction for C2 during top absorption. Here C2 is the tensor with + structure factor phase included which is grown by a normal T2 tensor. + + \\ + """ + + ctmrg_absorption_top_C2_phase_2: Definition = { + "tensors": [["C2", "T2_phase"], "projector_top_left"], + "network": [ + [ + (2, 1), # C2 + (3, 4, -2, 1), # T2_phase + ], + (-1, 2, 3, 4), # projector_top_left + ], + } + """ + .. figure:: /images/CTMRG_Absorption_U_C2.* + :align: center + :width: 60% + :alt: Contraction for C2 during top absorption with contraction order shown. + + Contraction for C2 during top absorption. Here C2 is the tensor with + structure factor phase not included yet which is grown by a T2 tensor + which includes a phase already. + + \\ + """ + ctmrg_absorption_bottom_C4: Definition = { "tensors": [["C4", "T4"], "projector_bottom_right"], "network": [ @@ -780,6 +1406,51 @@ def _prepare_defs(cls): \\ """ + ctmrg_absorption_bottom_C4_phase_1: Definition = { + "tensors": [["C4_phase", "T4"], "projector_bottom_right"], + "network": [ + [ + (2, 1), # C4_phase + (1, 4, 3, -2), # T4 + ], + (-1, 2, 4, 3), # projector_bottom_right + ], + } + """ + .. figure:: /images/CTMRG_Absorption_D_C4.* + :align: center + :width: 60% + :alt: Contraction for C4 during bottom absorption with contraction order shown. + + Contraction for C4 during bottom absorption. Here C4 is the tensor with + structure factor phase included which is grown by a normal T4 tensor. + + \\ + """ + + ctmrg_absorption_bottom_C4_phase_2: Definition = { + "tensors": [["C4", "T4_phase"], "projector_bottom_right"], + "network": [ + [ + (2, 1), # C4 + (1, 4, 3, -2), # T4_phase + ], + (-1, 2, 4, 3), # projector_bottom_right + ], + } + """ + .. figure:: /images/CTMRG_Absorption_D_C4.* + :align: center + :width: 60% + :alt: Contraction for C4 during bottom absorption with contraction order shown. + + Contraction for C4 during bottom absorption. Here C4 is the tensor with + structure factor phase not included yet which is grown by a T4 tensor + which includes a phase already. + + \\ + """ + ctmrg_absorption_bottom_T3: Definition = { "tensors": [ ["tensor", "tensor_conj", "T3"], @@ -824,6 +1495,42 @@ def _prepare_defs(cls): ], } + ctmrg_absorption_bottom_T3_large_d_phase_1: Definition = { + "tensors": [ + ["tensor", "tensor_conj", "T3_phase"], + "projector_bottom_left", + "projector_bottom_right", + ], + "network": [ + [ + (4, 3, 2, 8, -4), # tensor + (6, 5, 2, 9, -3), # tensor_conj + (1, 7, 5, 3), # T3_phase + ], + (1, 6, 4, -1), # projector_bottom_left + (-2, 7, 9, 8), # projector_bottom_right + ], + } + + ctmrg_absorption_bottom_T3_large_d_phase_2: Definition = { + "tensors": [ + ["tensor", "tensor_conj", "T3"], + "projector_bottom_left", + "projector_bottom_right", + "structure_factor_gate", + ], + "network": [ + [ + (5, 4, 2, 9, -4), # tensor + (7, 6, 3, 10, -3), # tensor_conj + (1, 8, 6, 4), # T3 + ], + (1, 7, 5, -1), # projector_bottom_left + (-2, 8, 10, 9), # projector_bottom_right + (2, 3), # structure_factor_gate + ], + } + ctmrg_absorption_bottom_C3: Definition = { "tensors": [["T2", "C3"], "projector_bottom_left"], "network": [ @@ -845,6 +1552,51 @@ def _prepare_defs(cls): \\ """ + ctmrg_absorption_bottom_C3_phase_1: Definition = { + "tensors": [["T2", "C3_phase"], "projector_bottom_left"], + "network": [ + [ + (3, 4, 1, -2), # T2 + (2, 1), # C3_phase + ], + (2, 4, 3, -1), # projector_bottom_left + ], + } + """ + .. figure:: /images/CTMRG_Absorption_D_C3.* + :align: center + :width: 60% + :alt: Contraction for C3 during bottom absorption with contraction order shown. + + Contraction for C3 during bottom absorption. Here C3 is the tensor with + structure factor phase included which is grown by a normal T2 tensor. + + \\ + """ + + ctmrg_absorption_bottom_C3_phase_2: Definition = { + "tensors": [["T2_phase", "C3"], "projector_bottom_left"], + "network": [ + [ + (3, 4, 1, -2), # T2_phase + (2, 1), # C3 + ], + (2, 4, 3, -1), # projector_bottom_left + ], + } + """ + .. figure:: /images/CTMRG_Absorption_D_C3.* + :align: center + :width: 60% + :alt: Contraction for C3 during bottom absorption with contraction order shown. + + Contraction for C3 during bottom absorption. Here C3 is the tensor with + structure factor phase not included yet which is grown by a T2 tensor + which includes a phase already. + + \\ + """ + ctmrg_gauge_fix_T1: Definition = { "tensors": [["T1"], "left_unitary", "right_unitary"], "network": [ diff --git a/varipeps/ctmrg/__init__.py b/varipeps/ctmrg/__init__.py index a4eb14c..93f562f 100644 --- a/varipeps/ctmrg/__init__.py +++ b/varipeps/ctmrg/__init__.py @@ -1,6 +1,8 @@ from . import absorption from . import projectors from . import routine +from . import structure_factor_absorption +from . import structure_factor_routine from .routine import ( calc_ctmrg_env, @@ -8,3 +10,5 @@ CTMRGNotConvergedError, CTMRGGradientNotConvergedError, ) + +from .structure_factor_routine import calc_ctmrg_env_structure_factor diff --git a/varipeps/ctmrg/structure_factor_absorption.py b/varipeps/ctmrg/structure_factor_absorption.py new file mode 100644 index 0000000..5a9a526 --- /dev/null +++ b/varipeps/ctmrg/structure_factor_absorption.py @@ -0,0 +1,909 @@ +import collections.abc +from dataclasses import dataclass, field +from operator import itemgetter + +import jax.numpy as jnp +from jax import jit +from jax.lax import scan, cond + +from varipeps.peps import PEPS_Tensor, PEPS_Unit_Cell +from varipeps.contractions import apply_contraction, apply_contraction_jitted +from varipeps.utils.svd import gauge_fixed_svd +from varipeps.utils.periodic_indices import calculate_periodic_indices +from varipeps.utils.projector_dict import Projector_Dict +from .projectors import ( + calc_left_projectors, + calc_right_projectors, + calc_top_projectors, + calc_bottom_projectors, +) +from varipeps.expectation.one_site import calc_one_site_single_gate_obj +from varipeps.config import VariPEPS_Config +from varipeps.global_state import VariPEPS_Global_State + + +from typing import Sequence, Tuple, List, Dict, Literal + +CTMRG_Orientation = Literal["top-left", "top-right", "bottom-left", "bottom-right"] + + +def _tensor_list_from_indices( + peps_tensors: Sequence[jnp.ndarray], indices: Sequence[Sequence[int]] +) -> List[List[jnp.ndarray]]: + return [[peps_tensors[ty] for ty in tx] for tx in indices] + + +def _get_ctmrg_2x2_structure( + peps_tensors: Sequence[jnp.ndarray], + view: PEPS_Unit_Cell, + orientation: CTMRG_Orientation, +) -> Tuple[List[List[jnp.ndarray]], List[List[PEPS_Tensor]]]: + if orientation == "top-left": + x_slice = slice(0, 2, None) + y_slice = slice(0, 2, None) + elif orientation == "top-right": + x_slice = slice(0, 2, None) + y_slice = slice(-1, 1, None) + elif orientation == "bottom-left": + x_slice = slice(-1, 1, None) + y_slice = slice(0, 2, None) + elif orientation == "bottom-right": + x_slice = slice(-1, 1, None) + y_slice = slice(-1, 1, None) + else: + raise ValueError("Invalid orientation.") + + indices = view.get_indices((x_slice, y_slice)) + view_tensors = _tensor_list_from_indices(peps_tensors, indices) + + view_tensor_objs = view[x_slice, y_slice] + + return view_tensors, view_tensor_objs + + +def do_left_absorption_structure_factor( + peps_tensors: Sequence[jnp.ndarray], + unitcell: PEPS_Unit_Cell, + structure_factor_gates: Sequence[jnp.ndarray], + structure_factor_outer_factor: float, + structure_factor_inner_factors: Sequence[float], + config: VariPEPS_Config, + state: VariPEPS_Global_State, +) -> PEPS_Unit_Cell: + """ + Calculate the left CTMRG tensors after one absorption step and returns + the updated unitcell. This routine also calculates the tensors including + the phase factor for a structure factor calculation. + + Args: + peps_tensors (:term:`sequence` of :obj:`jax.numpy.ndarray`): + The sequence of unique PEPS tensors the unitcell consists of. + unitcell (:obj:`~varipeps.peps.PEPS_Unit_Cell`): + The unitcell to work on. + structure_factor_gates (:term:`sequence` of :obj:`jax.numpy.ndarray`): + The sequence with the observables which is absorbed into the CTM tensors + containing the phase for the structure factor calculation. Expected to + be a sequence where the gate is already multiplied with identities to + match the physical dimension of the coarse-grained tensor + structure_factor_outer_factor (:obj:`float`): + The factor used to calculate the new tensors by shifting one site in + the square lattice to the left. Likely something like + ``jnp.exp(- 1j * q_vector @ r_vector)``. + structure_factor_inner_factors (:term:`sequence` of :obj:`float`): + For coarse-grained systems the sequence with the factors used to + calculate the phase by shifting one site inside one coarse-grained + square site. Set it to None, [] or [1] if system has + no coarsed-grained structure. If used likely something like + ``jnp.exp(- 1j * q_vector @ r_vector)``. + config (:obj:`~varipeps.config.VariPEPS_Config`): + Global configuration object of the variPEPS library. Please see its + class definition for details. + state (:obj:`~varipeps.global_state.VariPEPS_Global_State`): + Global state object of the variPEPS library. It is used to transport + a common state across different parts of the framework. Please see its + class definition for details. + Returns: + :obj:`~varipeps.peps.PEPS_Unit_Cell`: + New instance of the unitcell with the updated left CTMRG tensors of + all elements of the unitcell. + """ + max_x, max_y = unitcell.get_size() + left_projectors = Projector_Dict(max_x=max_x, max_y=max_y) + + working_unitcell = unitcell.copy() + + smallest_S_list = [] + + if ( + structure_factor_inner_factors is None + or len(structure_factor_inner_factors) == 0 + ): + structure_factor_inner_factors = (1,) + + for y, iter_columns in working_unitcell.iter_all_columns(only_unique=True): + column_views = [view for view in iter_columns] + + for x, view in column_views: + left_proj, smallest_S = calc_left_projectors( + *_get_ctmrg_2x2_structure(peps_tensors, view, "top-left"), config, state + ) + left_projectors[(x, y)] = left_proj + smallest_S_list.append(smallest_S) + + new_C1 = [] + new_T4 = [] + new_C4 = [] + new_C1_phase = [] + new_T4_phase = [] + new_C4_phase = [] + + for x, view in column_views: + working_tensor = peps_tensors[view.get_indices((0, 0))[0][0]] + working_tensor_obj = view[0, 0][0][0] + + C1_projector = left_projectors.get_projector(x, y, -1, 0).bottom + new_C1_tmp = apply_contraction_jitted( + "ctmrg_absorption_left_C1", + [working_tensor], + [working_tensor_obj], + [C1_projector], + ) + new_C1_phase_tmp_1 = apply_contraction_jitted( + "ctmrg_absorption_left_C1_phase_1", + [working_tensor], + [working_tensor_obj], + [C1_projector], + ) + new_C1_phase_tmp_2 = apply_contraction_jitted( + "ctmrg_absorption_left_C1_phase_2", + [working_tensor], + [working_tensor_obj], + [C1_projector], + ) + new_C1_phase_tmp = ( + new_C1_phase_tmp_1 + new_C1_phase_tmp_2 + ) * structure_factor_outer_factor + new_C1_tmp_norm = jnp.linalg.norm(new_C1_tmp) + new_C1.append(new_C1_tmp / new_C1_tmp_norm) + new_C1_phase.append(new_C1_phase_tmp / new_C1_tmp_norm / 2) + + T4_projector_top = left_projectors.get_projector(x, y, -1, 0).top + T4_projector_bottom = left_projectors.get_projector(x, y, 0, 0).bottom + new_T4_tmp = apply_contraction_jitted( + "ctmrg_absorption_left_T4_large_d", + [working_tensor], + [working_tensor_obj], + [T4_projector_top, T4_projector_bottom], + ) + new_T4_phase_tmp = apply_contraction_jitted( + "ctmrg_absorption_left_T4_large_d_phase_1", + [working_tensor], + [working_tensor_obj], + [T4_projector_top, T4_projector_bottom], + ) + + for i, factor in enumerate(structure_factor_inner_factors): + new_T4_phase_tmp += ( + apply_contraction_jitted( + "ctmrg_absorption_left_T4_large_d_phase_2", + [working_tensor], + [working_tensor_obj], + [ + T4_projector_top, + T4_projector_bottom, + structure_factor_gates[i], + ], + ) + * factor + ) + + new_T4_phase_tmp = new_T4_phase_tmp * structure_factor_outer_factor + new_T4_tmp_norm = jnp.linalg.norm(new_T4_tmp) + new_T4.append(new_T4_tmp / new_T4_tmp_norm) + new_T4_phase.append( + new_T4_phase_tmp + / new_T4_tmp_norm + / (1 + len(structure_factor_inner_factors)) + ) + + C4_projector = left_projectors.get_projector(x, y, 0, 0).top + new_C4_tmp = apply_contraction_jitted( + "ctmrg_absorption_left_C4", + [working_tensor], + [working_tensor_obj], + [C4_projector], + ) + new_C4_phase_tmp_1 = apply_contraction_jitted( + "ctmrg_absorption_left_C4_phase_1", + [working_tensor], + [working_tensor_obj], + [C4_projector], + ) + new_C4_phase_tmp_2 = apply_contraction_jitted( + "ctmrg_absorption_left_C4_phase_2", + [working_tensor], + [working_tensor_obj], + [C4_projector], + ) + new_C4_phase_tmp = ( + new_C4_phase_tmp_1 + new_C4_phase_tmp_2 + ) * structure_factor_outer_factor + new_C4_tmp_norm = jnp.linalg.norm(new_C4_tmp) + new_C4.append(new_C4_tmp / new_C4_tmp_norm) + new_C4_phase.append(new_C4_phase_tmp / new_C4_tmp_norm / 2) + + for x, view in column_views: + view[0, 1] = view[0, 1][0][0].replace_left_env_tensors( + new_C1[x], + new_T4[x], + new_C4[x], + new_C1_phase[x], + new_T4_phase[x], + new_C4_phase[x], + ) + + return working_unitcell, smallest_S_list + + +def do_right_absorption_structure_factor( + peps_tensors: Sequence[jnp.ndarray], + unitcell: PEPS_Unit_Cell, + structure_factor_gates: Sequence[jnp.ndarray], + structure_factor_outer_factor: float, + structure_factor_inner_factors: Sequence[float], + config: VariPEPS_Config, + state: VariPEPS_Global_State, +) -> PEPS_Unit_Cell: + """ + Calculate the right CTMRG tensors after one absorption step and returns + the updated unitcell. This routine also calculates the tensors including + the phase factor for a structure factor calculation. + + Args: + peps_tensors (:term:`sequence` of :obj:`jax.numpy.ndarray`): + The sequence of unique PEPS tensors the unitcell consists of. + unitcell (:obj:`~varipeps.peps.PEPS_Unit_Cell`): + The unitcell to work on. + structure_factor_gates (:term:`sequence` of :obj:`jax.numpy.ndarray`): + The sequence with the observables which is absorbed into the CTM tensors + containing the phase for the structure factor calculation. Expected to + be a sequence where the gate is already multiplied with identities to + match the physical dimension of the coarse-grained tensor + structure_factor_outer_factor (:obj:`float`): + The factor used to calculate the new tensors by shifting one site in + the square lattice to the right. Likely something like + ``jnp.exp(- 1j * q_vector @ r_vector)``. + structure_factor_inner_factors (:term:`sequence` of :obj:`float`): + For coarse-grained systems the sequence with the factors used to + calculate the phase by shifting one site inside one coarse-grained + square site. Set it to None, [] or [1] if system has + no coarsed-grained structure. If used likely something like + ``jnp.exp(- 1j * q_vector @ r_vector)``. + config (:obj:`~varipeps.config.VariPEPS_Config`): + Global configuration object of the variPEPS library. Please see its + class definition for details. + state (:obj:`~varipeps.global_state.VariPEPS_Global_State`): + Global state object of the variPEPS library. It is used to transport + a common state across different parts of the framework. Please see its + class definition for details. + Returns: + :obj:`~varipeps.peps.PEPS_Unit_Cell`: + New instance of the unitcell with the updated right CTMRG tensors of + all elements of the unitcell. + """ + max_x, max_y = unitcell.get_size() + right_projectors = Projector_Dict(max_x=max_x, max_y=max_y) + + working_unitcell = unitcell.copy() + + smallest_S_list = [] + + if ( + structure_factor_inner_factors is None + or len(structure_factor_inner_factors) == 0 + ): + structure_factor_inner_factors = (1,) + + for y, iter_columns in working_unitcell.iter_all_columns( + reverse=True, only_unique=True + ): + column_views = [view for view in iter_columns] + + for x, view in column_views: + right_proj, smallest_S = calc_right_projectors( + *_get_ctmrg_2x2_structure(peps_tensors, view, "top-right"), + config, + state + ) + right_projectors[(x, y)] = right_proj + smallest_S_list.append(smallest_S) + + new_C2 = [] + new_T2 = [] + new_C3 = [] + new_C2_phase = [] + new_T2_phase = [] + new_C3_phase = [] + + for x, view in column_views: + working_tensor = peps_tensors[view.get_indices((0, 0))[0][0]] + working_tensor_obj = view[0, 0][0][0] + + C2_projector = right_projectors.get_projector(x, y, -1, 0).bottom + new_C2_tmp = apply_contraction_jitted( + "ctmrg_absorption_right_C2", + [working_tensor], + [working_tensor_obj], + [C2_projector], + ) + new_C2_phase_tmp_1 = apply_contraction_jitted( + "ctmrg_absorption_right_C2_phase_1", + [working_tensor], + [working_tensor_obj], + [C2_projector], + ) + new_C2_phase_tmp_2 = apply_contraction_jitted( + "ctmrg_absorption_right_C2_phase_2", + [working_tensor], + [working_tensor_obj], + [C2_projector], + ) + new_C2_phase_tmp = ( + new_C2_phase_tmp_1 + new_C2_phase_tmp_2 + ) * structure_factor_outer_factor + new_C2_tmp_norm = jnp.linalg.norm(new_C2_tmp) + new_C2.append(new_C2_tmp / new_C2_tmp_norm) + new_C2_phase.append(new_C2_phase_tmp / new_C2_tmp_norm / 2) + + T2_projector_top = right_projectors.get_projector(x, y, -1, 0).top + T2_projector_bottom = right_projectors.get_projector(x, y, 0, 0).bottom + new_T2_tmp = apply_contraction_jitted( + "ctmrg_absorption_right_T2_large_d", + [working_tensor], + [working_tensor_obj], + [T2_projector_top, T2_projector_bottom], + ) + new_T2_phase_tmp = apply_contraction_jitted( + "ctmrg_absorption_right_T2_large_d_phase_1", + [working_tensor], + [working_tensor_obj], + [T2_projector_top, T2_projector_bottom], + ) + + for i, factor in enumerate(structure_factor_inner_factors): + new_T2_phase_tmp += ( + apply_contraction_jitted( + "ctmrg_absorption_right_T2_large_d_phase_2", + [working_tensor], + [working_tensor_obj], + [ + T2_projector_top, + T2_projector_bottom, + structure_factor_gates[i], + ], + ) + * factor + ) + + new_T2_phase_tmp = new_T2_phase_tmp * structure_factor_outer_factor + new_T2_tmp_norm = jnp.linalg.norm(new_T2_tmp) + new_T2.append(new_T2_tmp / new_T2_tmp_norm) + new_T2_phase.append( + new_T2_phase_tmp + / new_T2_tmp_norm + / (1 + len(structure_factor_inner_factors)) + ) + + C3_projector = right_projectors.get_projector(x, y, 0, 0).top + new_C3_tmp = apply_contraction_jitted( + "ctmrg_absorption_right_C3", + [working_tensor], + [working_tensor_obj], + [C3_projector], + ) + new_C3_phase_tmp_1 = apply_contraction_jitted( + "ctmrg_absorption_right_C3_phase_1", + [working_tensor], + [working_tensor_obj], + [C3_projector], + ) + new_C3_phase_tmp_2 = apply_contraction_jitted( + "ctmrg_absorption_right_C3_phase_2", + [working_tensor], + [working_tensor_obj], + [C3_projector], + ) + new_C3_phase_tmp = ( + new_C3_phase_tmp_1 + new_C3_phase_tmp_2 + ) * structure_factor_outer_factor + new_C3_tmp_norm = jnp.linalg.norm(new_C3_tmp) + new_C3.append(new_C3_tmp / new_C3_tmp_norm) + new_C3_phase.append(new_C3_phase_tmp / new_C3_tmp_norm / 2) + + for x, view in column_views: + view[0, -1] = view[0, -1][0][0].replace_right_env_tensors( + new_C2[x], + new_T2[x], + new_C3[x], + new_C2_phase[x], + new_T2_phase[x], + new_C3_phase[x], + ) + + return working_unitcell, smallest_S_list + + +def do_top_absorption_structure_factor( + peps_tensors: Sequence[jnp.ndarray], + unitcell: PEPS_Unit_Cell, + structure_factor_gates: Sequence[jnp.ndarray], + structure_factor_outer_factor: float, + structure_factor_inner_factors: Sequence[float], + config: VariPEPS_Config, + state: VariPEPS_Global_State, +) -> PEPS_Unit_Cell: + """ + Calculate the top CTMRG tensors after one absorption step and returns + the updated unitcell. This routine also calculates the tensors including + the phase factor for a structure factor calculation. + + Args: + peps_tensors (:term:`sequence` of :obj:`jax.numpy.ndarray`): + The sequence of unique PEPS tensors the unitcell consists of. + unitcell (:obj:`~varipeps.peps.PEPS_Unit_Cell`): + The unitcell to work on. + structure_factor_gates (:term:`sequence` of :obj:`jax.numpy.ndarray`): + The sequence with the observables which is absorbed into the CTM tensors + containing the phase for the structure factor calculation. Expected to + be a sequence where the gate is already multiplied with identities to + match the physical dimension of the coarse-grained tensor + structure_factor_outer_factor (:obj:`float`): + The factor used to calculate the new tensors by shifting one site in + the square lattice to the top. Likely something like + ``jnp.exp(- 1j * q_vector @ r_vector)``. + structure_factor_inner_factors (:term:`sequence` of :obj:`float`): + For coarse-grained systems the sequence with the factors used to + calculate the phase by shifting one site inside one coarse-grained + square site. Set it to None, [] or [1] if system has + no coarsed-grained structure. If used likely something like + ``jnp.exp(- 1j * q_vector @ r_vector)``. + config (:obj:`~varipeps.config.VariPEPS_Config`): + Global configuration object of the variPEPS library. Please see its + class definition for details. + state (:obj:`~varipeps.global_state.VariPEPS_Global_State`): + Global state object of the variPEPS library. It is used to transport + a common state across different parts of the framework. Please see its + class definition for details. + Returns: + :obj:`~varipeps.peps.PEPS_Unit_Cell`: + New instance of the unitcell with the updated top CTMRG tensors of + all elements of the unitcell. + """ + max_x, max_y = unitcell.get_size() + top_projectors = Projector_Dict(max_x=max_x, max_y=max_y) + + working_unitcell = unitcell.copy() + + smallest_S_list = [] + + if ( + structure_factor_inner_factors is None + or len(structure_factor_inner_factors) == 0 + ): + structure_factor_inner_factors = (1,) + + for x, iter_rows in working_unitcell.iter_all_rows(only_unique=True): + row_views = [view for view in iter_rows] + + for y, view in row_views: + top_proj, smallest_S = calc_top_projectors( + *_get_ctmrg_2x2_structure(peps_tensors, view, "top-left"), config, state + ) + top_projectors[(x, y)] = top_proj + smallest_S_list.append(smallest_S) + + new_C1 = [] + new_T1 = [] + new_C2 = [] + new_C1_phase = [] + new_T1_phase = [] + new_C2_phase = [] + + for y, view in row_views: + working_tensor = peps_tensors[view.get_indices((0, 0))[0][0]] + working_tensor_obj = view[0, 0][0][0] + + C1_projector = top_projectors.get_projector(x, y, 0, -1).right # type: ignore + new_C1_tmp = apply_contraction_jitted( + "ctmrg_absorption_top_C1", + [working_tensor], + [working_tensor_obj], + [C1_projector], + ) + new_C1_phase_tmp_1 = apply_contraction_jitted( + "ctmrg_absorption_top_C1_phase_1", + [working_tensor], + [working_tensor_obj], + [C1_projector], + ) + new_C1_phase_tmp_2 = apply_contraction_jitted( + "ctmrg_absorption_top_C1_phase_2", + [working_tensor], + [working_tensor_obj], + [C1_projector], + ) + new_C1_phase_tmp = ( + new_C1_phase_tmp_1 + new_C1_phase_tmp_2 + ) * structure_factor_outer_factor + new_C1_tmp_norm = jnp.linalg.norm(new_C1_tmp) + new_C1.append(new_C1_tmp / new_C1_tmp_norm) + new_C1_phase.append(new_C1_phase_tmp / new_C1_tmp_norm / 2) + + T1_projector_left = top_projectors.get_projector(x, y, 0, -1).left # type: ignore + T1_projector_right = top_projectors.get_projector(x, y, 0, 0).right # type: ignore + new_T1_tmp = apply_contraction_jitted( + "ctmrg_absorption_top_T1_large_d", + [working_tensor], + [working_tensor_obj], + [T1_projector_left, T1_projector_right], + ) + new_T1_phase_tmp = apply_contraction_jitted( + "ctmrg_absorption_top_T1_large_d_phase_1", + [working_tensor], + [working_tensor_obj], + [T1_projector_left, T1_projector_right], + ) + + for i, factor in enumerate(structure_factor_inner_factors): + new_T1_phase_tmp += ( + apply_contraction_jitted( + "ctmrg_absorption_top_T1_large_d_phase_2", + [working_tensor], + [working_tensor_obj], + [ + T1_projector_left, + T1_projector_right, + structure_factor_gates[i], + ], + ) + * factor + ) + + new_T1_phase_tmp = new_T1_phase_tmp * structure_factor_outer_factor + new_T1_tmp_norm = jnp.linalg.norm(new_T1_tmp) + new_T1.append(new_T1_tmp / new_T1_tmp_norm) + new_T1_phase.append( + new_T1_phase_tmp + / new_T1_tmp_norm + / (1 + len(structure_factor_inner_factors)) + ) + + C2_projector = top_projectors.get_projector(x, y, 0, 0).left # type: ignore + new_C2_tmp = apply_contraction_jitted( + "ctmrg_absorption_top_C2", + [working_tensor], + [working_tensor_obj], + [C2_projector], + ) + new_C2_phase_tmp_1 = apply_contraction_jitted( + "ctmrg_absorption_top_C2_phase_1", + [working_tensor], + [working_tensor_obj], + [C2_projector], + ) + new_C2_phase_tmp_2 = apply_contraction_jitted( + "ctmrg_absorption_top_C2_phase_2", + [working_tensor], + [working_tensor_obj], + [C2_projector], + ) + new_C2_phase_tmp = ( + new_C2_phase_tmp_1 + new_C2_phase_tmp_2 + ) * structure_factor_outer_factor + new_C2_tmp_norm = jnp.linalg.norm(new_C2_tmp) + new_C2.append(new_C2_tmp / new_C2_tmp_norm) + new_C2_phase.append(new_C2_phase_tmp / new_C2_tmp_norm / 2) + + for y, view in row_views: + view[1, 0] = view[1, 0][0][0].replace_top_env_tensors( + new_C1[y], + new_T1[y], + new_C2[y], + new_C1_phase[y], + new_T1_phase[y], + new_C2_phase[y], + ) + + return working_unitcell, smallest_S_list + + +def do_bottom_absorption_structure_factor( + peps_tensors: Sequence[jnp.ndarray], + unitcell: PEPS_Unit_Cell, + structure_factor_gates: Sequence[jnp.ndarray], + structure_factor_outer_factor: float, + structure_factor_inner_factors: Sequence[float], + config: VariPEPS_Config, + state: VariPEPS_Global_State, +) -> PEPS_Unit_Cell: + """ + Calculate the bottom CTMRG tensors after one absorption step and returns + the updated unitcell. This routine also calculates the tensors including + the phase factor for a structure factor calculation. + + Args: + peps_tensors (:term:`sequence` of :obj:`jax.numpy.ndarray`): + The sequence of unique PEPS tensors the unitcell consists of. + unitcell (:obj:`~varipeps.peps.PEPS_Unit_Cell`): + The unitcell to work on. + structure_factor_gates (:term:`sequence` of :obj:`jax.numpy.ndarray`): + The sequence with the observables which is absorbed into the CTM tensors + containing the phase for the structure factor calculation. Expected to + be a sequence where the gate is already multiplied with identities to + match the physical dimension of the coarse-grained tensor + structure_factor_outer_factor (:obj:`float`): + The factor used to calculate the new tensors by shifting one site in + the square lattice to the bottom. Likely something like + ``jnp.exp(- 1j * q_vector @ r_vector)``. + structure_factor_inner_factors (:term:`sequence` of :obj:`float`): + For coarse-grained systems the sequence with the factors used to + calculate the phase by shifting one site inside one coarse-grained + square site. Set it to None, [] or [1] if system has + no coarsed-grained structure. If used likely something like + ``jnp.exp(- 1j * q_vector @ r_vector)``. + config (:obj:`~varipeps.config.VariPEPS_Config`): + Global configuration object of the variPEPS library. Please see its + class definition for details. + state (:obj:`~varipeps.global_state.VariPEPS_Global_State`): + Global state object of the variPEPS library. It is used to transport + a common state across different parts of the framework. Please see its + class definition for details. + Returns: + :obj:`~varipeps.peps.PEPS_Unit_Cell`: + New instance of the unitcell with the updated bottom CTMRG tensors of + all elements of the unitcell. + """ + max_x, max_y = unitcell.get_size() + bottom_projectors = Projector_Dict(max_x=max_x, max_y=max_y) + + working_unitcell = unitcell.copy() + + smallest_S_list = [] + + if ( + structure_factor_inner_factors is None + or len(structure_factor_inner_factors) == 0 + ): + structure_factor_inner_factors = (1,) + + for x, iter_rows in working_unitcell.iter_all_rows(reverse=True, only_unique=True): + row_views = [view for view in iter_rows] + + for y, view in row_views: + bottom_proj, smallest_S = calc_bottom_projectors( + *_get_ctmrg_2x2_structure(peps_tensors, view, "bottom-left"), + config, + state + ) + bottom_projectors[(x, y)] = bottom_proj + smallest_S_list.append(smallest_S) + + new_C4 = [] + new_T3 = [] + new_C3 = [] + new_C4_phase = [] + new_T3_phase = [] + new_C3_phase = [] + + for y, view in row_views: + working_tensor = peps_tensors[view.get_indices((0, 0))[0][0]] + working_tensor_obj = view[0, 0][0][0] + + C4_projector = bottom_projectors.get_projector(x, y, 0, -1).right # type: ignore + new_C4_tmp = apply_contraction_jitted( + "ctmrg_absorption_bottom_C4", + [working_tensor], + [working_tensor_obj], + [C4_projector], + ) + new_C4_phase_tmp_1 = apply_contraction_jitted( + "ctmrg_absorption_bottom_C4_phase_1", + [working_tensor], + [working_tensor_obj], + [C4_projector], + ) + new_C4_phase_tmp_2 = apply_contraction_jitted( + "ctmrg_absorption_bottom_C4_phase_2", + [working_tensor], + [working_tensor_obj], + [C4_projector], + ) + new_C4_phase_tmp = ( + new_C4_phase_tmp_1 + new_C4_phase_tmp_2 + ) * structure_factor_outer_factor + new_C4_tmp_norm = jnp.linalg.norm(new_C4_tmp) + new_C4.append(new_C4_tmp / new_C4_tmp_norm) + new_C4_phase.append(new_C4_phase_tmp / new_C4_tmp_norm / 2) + + T3_projector_left = bottom_projectors.get_projector(x, y, 0, -1).left # type: ignore + T3_projector_right = bottom_projectors.get_projector(x, y, 0, 0).right # type: ignore + new_T3_tmp = apply_contraction_jitted( + "ctmrg_absorption_bottom_T3_large_d", + [working_tensor], + [working_tensor_obj], + [T3_projector_left, T3_projector_right], + ) + new_T3_phase_tmp = apply_contraction_jitted( + "ctmrg_absorption_bottom_T3_large_d_phase_1", + [working_tensor], + [working_tensor_obj], + [T3_projector_left, T3_projector_right], + ) + + for i, factor in enumerate(structure_factor_inner_factors): + new_T3_phase_tmp += ( + apply_contraction_jitted( + "ctmrg_absorption_bottom_T3_large_d_phase_2", + [working_tensor], + [working_tensor_obj], + [ + T3_projector_left, + T3_projector_right, + structure_factor_gates[i], + ], + ) + * factor + ) + + new_T3_phase_tmp = new_T3_phase_tmp * structure_factor_outer_factor + new_T3_tmp_norm = jnp.linalg.norm(new_T3_tmp) + new_T3.append(new_T3_tmp / new_T3_tmp_norm) + new_T3_phase.append( + new_T3_phase_tmp + / new_T3_tmp_norm + / (1 + len(structure_factor_inner_factors)) + ) + + C3_projector = bottom_projectors.get_projector(x, y, 0, 0).left # type: ignore + new_C3_tmp = apply_contraction_jitted( + "ctmrg_absorption_bottom_C3", + [working_tensor], + [working_tensor_obj], + [C3_projector], + ) + new_C3_phase_tmp_1 = apply_contraction_jitted( + "ctmrg_absorption_bottom_C3_phase_1", + [working_tensor], + [working_tensor_obj], + [C3_projector], + ) + new_C3_phase_tmp_2 = apply_contraction_jitted( + "ctmrg_absorption_bottom_C3_phase_2", + [working_tensor], + [working_tensor_obj], + [C3_projector], + ) + new_C3_phase_tmp = ( + new_C3_phase_tmp_1 + new_C3_phase_tmp_2 + ) * structure_factor_outer_factor + new_C3_tmp_norm = jnp.linalg.norm(new_C3_tmp) + new_C3.append(new_C3_tmp / new_C3_tmp_norm) + new_C3_phase.append(new_C3_phase_tmp / new_C3_tmp_norm / 2) + + for y, view in row_views: + view[-1, 0] = view[-1, 0][0][0].replace_bottom_env_tensors( + new_C4[y], + new_T3[y], + new_C3[y], + new_C4_phase[y], + new_T3_phase[y], + new_C3_phase[y], + ) + + return working_unitcell, smallest_S_list + + +def do_absorption_step_structure_factor( + peps_tensors: Sequence[jnp.ndarray], + unitcell: PEPS_Unit_Cell, + structure_factor_gates: Sequence[jnp.ndarray], + structure_factor_outer_factors: Sequence[float], + structure_factor_inner_factors: Sequence[float], + config: VariPEPS_Config, + state: VariPEPS_Global_State, +) -> PEPS_Unit_Cell: + """ + Calculate the all CTMRG tensors after one absorption step and returns + the updated unitcell. This routine also calculates the tensors including + the phase factor for a structure factor calculation. + + Args: + peps_tensors (:term:`sequence` of :obj:`jax.numpy.ndarray`): + The sequence of unique PEPS tensors the unitcell consists of. + unitcell (:obj:`~varipeps.peps.PEPS_Unit_Cell`): + The unitcell to work on. + structure_factor_gates (:term:`sequence` of :obj:`jax.numpy.ndarray`): + The sequence with the observables which is absorbed into the CTM tensors + containing the phase for the structure factor calculation. Expected to + be a sequence where the gate is already multiplied with identities to + match the physical dimension of the coarse-grained tensor + structure_factor_outer_factors (:obj:`float`): + The sequence with factors used to calculate the new tensors by shifting + one site in the square lattice. Likely something like + ``jnp.exp(- 1j * q_vector @ r_vector)``. If length two, the first + argument will be used for bottom absorption and its complex conjugate for + top and the second one for right and its complex conjugate for left + absorption. If length four, it will be used in the order + (top, bottom, left, right). + structure_factor_inner_factors (:term:`sequence` of :obj:`float`): + For coarse-grained systems the sequence with the factors used to + calculate the phase by shifting one site inside one coarse-grained + square site. Set it to None, [] or [1] if system has + no coarsed-grained structure. If used likely something like + ``jnp.exp(- 1j * q_vector @ r_vector)``. + config (:obj:`~varipeps.config.VariPEPS_Config`): + Global configuration object of the variPEPS library. Please see its + class definition for details. + state (:obj:`~varipeps.global_state.VariPEPS_Global_State`): + Global state object of the variPEPS library. It is used to transport + a common state across different parts of the framework. Please see its + class definition for details. + Returns: + :obj:`~varipeps.peps.PEPS_Unit_Cell`: + New instance of the unitcell with the all updated CTMRG tensors of + all elements of the unitcell. + """ + + if len(structure_factor_outer_factors) == 2: + structure_factor_outer_factors = ( + structure_factor_outer_factors[0].conj(), + structure_factor_outer_factors[0], + structure_factor_outer_factors[1].conj(), + structure_factor_outer_factors[1], + ) + if len(structure_factor_outer_factors) != 4: + raise ValueError("Length mismatch for outer factor list.") + + result, left_smallest_S = do_left_absorption_structure_factor( + peps_tensors, + unitcell, + structure_factor_gates, + structure_factor_outer_factors[2], + structure_factor_inner_factors, + config, + state, + ) + result, top_smallest_S = do_top_absorption_structure_factor( + peps_tensors, + result, + structure_factor_gates, + structure_factor_outer_factors[0], + structure_factor_inner_factors, + config, + state, + ) + result, right_smallest_S = do_right_absorption_structure_factor( + peps_tensors, + result, + structure_factor_gates, + structure_factor_outer_factors[3], + structure_factor_inner_factors, + config, + state, + ) + result, bottom_smallest_S = do_bottom_absorption_structure_factor( + peps_tensors, + result, + structure_factor_gates, + structure_factor_outer_factors[1], + structure_factor_inner_factors, + config, + state, + ) + norm_smallest_S = jnp.linalg.norm( + jnp.asarray( + left_smallest_S + top_smallest_S + right_smallest_S + bottom_smallest_S + ), + ord=jnp.inf, + ) + return result, norm_smallest_S diff --git a/varipeps/ctmrg/structure_factor_routine.py b/varipeps/ctmrg/structure_factor_routine.py new file mode 100644 index 0000000..ddb5d96 --- /dev/null +++ b/varipeps/ctmrg/structure_factor_routine.py @@ -0,0 +1,407 @@ +from functools import partial +import enum + +import jax.numpy as jnp +from jax import jit, custom_vjp, vjp, tree_util +import jax.util +from jax.lax import cond, while_loop +import jax.debug as jdebug + +from varipeps import varipeps_config, varipeps_global_state +from varipeps.peps import PEPS_Tensor, PEPS_Unit_Cell +from varipeps.utils.debug_print import debug_print +from .structure_factor_absorption import do_absorption_step_structure_factor +from .routine import CTMRGNotConvergedError + +from typing import Sequence, Tuple, List, Optional + + +@enum.unique +class CTM_Enum_Structure_Factor(enum.IntEnum): + C1 = enum.auto() + C2 = enum.auto() + C3 = enum.auto() + C4 = enum.auto() + C1_Phase = enum.auto() + C2_Phase = enum.auto() + C3_Phase = enum.auto() + C4_Phase = enum.auto() + T1 = enum.auto() + T2 = enum.auto() + T3 = enum.auto() + T4 = enum.auto() + + +@partial(jit, static_argnums=(2,), inline=True) +def _calc_corner_svds_structure_factor( + peps_tensors: List[PEPS_Tensor], + old_corner_svd: jnp.ndarray, + tensor_shape: Optional[Tuple[int, int, int]], +) -> jnp.ndarray: + if tensor_shape is None: + step_corner_svd = jnp.zeros_like(old_corner_svd) + else: + step_corner_svd = jnp.zeros(tensor_shape, dtype=jnp.float64) + + for ti, t in enumerate(peps_tensors): + C1_svd = jnp.linalg.svd(t.C1, full_matrices=False, compute_uv=False) + step_corner_svd = step_corner_svd.at[ti, 0, : C1_svd.shape[0]].set( + C1_svd, indices_are_sorted=True, unique_indices=True + ) + + C2_svd = jnp.linalg.svd(t.C2, full_matrices=False, compute_uv=False) + step_corner_svd = step_corner_svd.at[ti, 1, : C2_svd.shape[0]].set( + C2_svd, indices_are_sorted=True, unique_indices=True + ) + + C3_svd = jnp.linalg.svd(t.C3, full_matrices=False, compute_uv=False) + step_corner_svd = step_corner_svd.at[ti, 2, : C3_svd.shape[0]].set( + C3_svd, indices_are_sorted=True, unique_indices=True + ) + + C4_svd = jnp.linalg.svd(t.C4, full_matrices=False, compute_uv=False) + step_corner_svd = step_corner_svd.at[ti, 3, : C4_svd.shape[0]].set( + C4_svd, indices_are_sorted=True, unique_indices=True + ) + + C1_phase_svd = jnp.linalg.svd(t.C1_phase, full_matrices=False, compute_uv=False) + step_corner_svd = step_corner_svd.at[ti, 4, : C1_phase_svd.shape[0]].set( + C1_phase_svd, indices_are_sorted=True, unique_indices=True + ) + + C2_phase_svd = jnp.linalg.svd(t.C2_phase, full_matrices=False, compute_uv=False) + step_corner_svd = step_corner_svd.at[ti, 5, : C2_phase_svd.shape[0]].set( + C2_phase_svd, indices_are_sorted=True, unique_indices=True + ) + + C3_phase_svd = jnp.linalg.svd(t.C3_phase, full_matrices=False, compute_uv=False) + step_corner_svd = step_corner_svd.at[ti, 6, : C3_phase_svd.shape[0]].set( + C3_phase_svd, indices_are_sorted=True, unique_indices=True + ) + + C4_phase_svd = jnp.linalg.svd(t.C4_phase, full_matrices=False, compute_uv=False) + step_corner_svd = step_corner_svd.at[ti, 7, : C4_phase_svd.shape[0]].set( + C4_phase_svd, indices_are_sorted=True, unique_indices=True + ) + + return step_corner_svd + + +@jit +def _ctmrg_body_func_structure_factor(carry): + ( + w_tensors, + w_unitcell_last_step, + converged, + last_corner_svd, + eps, + count, + norm_smallest_S, + structure_factor_gates, + structure_factor_outer_factors, + structure_factor_inner_factors, + state, + config, + ) = carry + + w_unitcell, norm_smallest_S = do_absorption_step_structure_factor( + w_tensors, + w_unitcell_last_step, + structure_factor_gates, + structure_factor_outer_factors, + structure_factor_inner_factors, + config, + state, + ) + + verbose_data = [] if config.ctmrg_verbose_output else None + if last_corner_svd is None: + corner_svd = None + converged = False + measure = jnp.nan + else: + corner_svd = _calc_corner_svds_structure_factor( + w_unitcell.get_unique_tensors(), last_corner_svd, None + ) + measure = jnp.linalg.norm(corner_svd - last_corner_svd) + converged = measure < eps + + if config.ctmrg_print_steps: + debug_print("CTMRG: {}: {}", count, measure) + if config.ctmrg_verbose_output: + for ti, ctm_enum_i, diff in verbose_data: + debug_print( + "CTMRG: Verbose: ti {}, CTM tensor {}, Diff {}", + ti, + CTM_Enum(ctm_enum_i).name, + diff, + ) + + count += 1 + + return ( + w_tensors, + w_unitcell, + converged, + corner_svd, + eps, + count, + norm_smallest_S, + structure_factor_gates, + structure_factor_outer_factors, + structure_factor_inner_factors, + state, + config, + ) + + +@jit +def _ctmrg_while_wrapper_structure_factor(start_carry): + def cond_func(carry): + _, _, converged, _, _, count, _, _, _, _, _, config = carry + return jnp.logical_not(converged) & (count < config.ctmrg_max_steps) + + ( + _, + working_unitcell, + converged, + _, + _, + end_count, + norm_smallest_S, + _, + _, + _, + _, + _, + ) = while_loop(cond_func, _ctmrg_body_func_structure_factor, start_carry) + + return working_unitcell, converged, end_count, norm_smallest_S + + +def calc_ctmrg_env_structure_factor( + peps_tensors: Sequence[jnp.ndarray], + unitcell: PEPS_Unit_Cell, + structure_factor_gates: Sequence[jnp.ndarray], + structure_factor_outer_factors: Sequence[float], + structure_factor_inner_factors: Sequence[float], + *, + eps: Optional[float] = None, + _return_truncation_eps: bool = False, +) -> PEPS_Unit_Cell: + """ + Calculate the new converged CTMRG tensors for the unit cell. The function + updates the environment all iPEPS tensors in the unit cell according to the + periodic structure. This routine also calculates the tensors including + the phase factor for a structure factor calculation. + + Args: + peps_tensors (:term:`sequence` of :obj:`jax.numpy.ndarray`): + The sequence of unique PEPS tensors the unitcell consists of. + unitcell (:obj:`~varipeps.peps.PEPS_Unit_Cell`): + The unitcell to work on. + structure_factor_gates (:term:`sequence` of :obj:`jax.numpy.ndarray`): + The sequence with the observables which is absorbed into the CTM tensors + containing the phase for the structure factor calculation. Expected to + be a sequence where the gate is already multiplied with identities to + match the physical dimension of the coarse-grained tensor + structure_factor_outer_factors (:obj:`float`): + The sequence with factors used to calculate the new tensors by shifting + one site in the square lattice. Likely something like + ``jnp.exp(- 1j * q_vector @ r_vector)``. If length two, the first + argument will be used for bottom absorption and its complex conjugate for + top and the second one for right and its complex conjugate for left + absorption. If length four, it will be used in the order + (top, bottom, left, right). + structure_factor_inner_factors (:term:`sequence` of :obj:`float`): + For coarse-grained systems the sequence with the factors used to + calculate the phase by shifting one site inside one coarse-grained + square site. Set it to None, [] or [1] if system has + no coarsed-grained structure. If used likely something like + ``jnp.exp(- 1j * q_vector @ r_vector)``. + Keyword args: + eps (:obj:`float`): + The convergence criterion. + Returns: + :obj:`~varipeps.peps.PEPS_Unit_Cell`: + New instance of the unitcell with all updated converged CTMRG tensors of + all elements of the unitcell. + """ + eps = eps if eps is not None else varipeps_config.ctmrg_convergence_eps + + shape_corner_svd = ( + unitcell.get_len_unique_tensors(), + 8, + unitcell[0, 0][0][0].chi, + ) + init_corner_singular_vals = _calc_corner_svds_structure_factor( + unitcell.get_unique_tensors(), None, shape_corner_svd + ) + + initial_unitcell = unitcell + working_unitcell = unitcell + varipeps_global_state.ctmrg_effective_truncation_eps = None + + norm_smallest_S = jnp.nan + already_tried_chi = {working_unitcell[0, 0][0][0].chi} + + while True: + tmp_count = 0 + corner_singular_vals = None + + while any( + i.C1.shape[0] != i.chi for i in working_unitcell.get_unique_tensors() + ): + ( + _, + working_unitcell, + _, + corner_singular_vals, + _, + tmp_count, + _, + _, + _, + _, + _, + _, + ) = _ctmrg_body_func_structure_factor( + ( + peps_tensors, + working_unitcell, + False, + init_corner_singular_vals, + eps, + tmp_count, + jnp.inf, + structure_factor_gates, + structure_factor_outer_factors, + structure_factor_inner_factors, + varipeps_global_state, + varipeps_config, + ) + ) + + working_unitcell, converged, end_count, norm_smallest_S = ( + _ctmrg_while_wrapper_structure_factor( + ( + peps_tensors, + working_unitcell, + False, + ( + corner_singular_vals + if corner_singular_vals is not None + else init_corner_singular_vals + ), + eps, + tmp_count, + jnp.inf, + structure_factor_gates, + structure_factor_outer_factors, + structure_factor_inner_factors, + varipeps_global_state, + varipeps_config, + ) + ) + ) + + current_truncation_eps = ( + varipeps_config.ctmrg_truncation_eps + if varipeps_global_state.ctmrg_effective_truncation_eps is None + else varipeps_global_state.ctmrg_effective_truncation_eps + ) + + if ( + varipeps_config.ctmrg_heuristic_increase_chi + and norm_smallest_S > varipeps_config.ctmrg_heuristic_increase_chi_threshold + and working_unitcell[0, 0][0][0].chi < working_unitcell[0, 0][0][0].max_chi + ): + new_chi = ( + working_unitcell[0, 0][0][0].chi + + varipeps_config.ctmrg_heuristic_increase_chi_step_size + ) + if new_chi > working_unitcell[0, 0][0][0].max_chi: + new_chi = working_unitcell[0, 0][0][0].max_chi + + if not new_chi in already_tried_chi: + working_unitcell = working_unitcell.change_chi(new_chi) + initial_unitcell = initial_unitcell.change_chi(new_chi) + + if varipeps_config.ctmrg_print_steps: + debug_print( + "CTMRG: Increasing chi to {} since smallest SVD Norm was {}.", + new_chi, + norm_smallest_S, + ) + + already_tried_chi.add(new_chi) + + continue + elif ( + varipeps_config.ctmrg_heuristic_decrease_chi + and norm_smallest_S < current_truncation_eps + and working_unitcell[0, 0][0][0].chi > 2 + ): + new_chi = ( + working_unitcell[0, 0][0][0].chi + - varipeps_config.ctmrg_heuristic_decrease_chi_step_size + ) + if new_chi < 2: + new_chi = 2 + + if not new_chi in already_tried_chi: + working_unitcell = working_unitcell.change_chi(new_chi) + + if varipeps_config.ctmrg_print_steps: + debug_print( + "CTMRG: Decreasing chi to {} since smallest SVD Norm was {}.", + new_chi, + norm_smallest_S, + ) + + already_tried_chi.add(new_chi) + + continue + + if ( + varipeps_config.ctmrg_increase_truncation_eps + and end_count == varipeps_config.ctmrg_max_steps + and not converged + ): + new_truncation_eps = ( + current_truncation_eps + * varipeps_config.ctmrg_increase_truncation_eps_factor + ) + if ( + new_truncation_eps + <= varipeps_config.ctmrg_increase_truncation_eps_max_value + ): + if varipeps_config.ctmrg_print_steps: + debug_print( + "CTMRG: Increasing SVD truncation eps to {}.", + new_truncation_eps, + ) + varipeps_global_state.ctmrg_effective_truncation_eps = ( + new_truncation_eps + ) + working_unitcell = initial_unitcell + already_tried_chi = {working_unitcell[0, 0][0][0].chi} + continue + + break + + if _return_truncation_eps: + last_truncation_eps = varipeps_global_state.ctmrg_effective_truncation_eps + varipeps_global_state.ctmrg_effective_truncation_eps = None + + if ( + varipeps_config.ctmrg_fail_if_not_converged + and end_count == varipeps_config.ctmrg_max_steps + and not converged + ): + raise CTMRGNotConvergedError + + if _return_truncation_eps: + return working_unitcell, last_truncation_eps, norm_smallest_S + + return working_unitcell, norm_smallest_S diff --git a/varipeps/expectation/__init__.py b/varipeps/expectation/__init__.py index 2fb20c9..8c3a142 100644 --- a/varipeps/expectation/__init__.py +++ b/varipeps/expectation/__init__.py @@ -1,4 +1,5 @@ from . import spiral_helpers +from . import structure_factor from . import model from . import one_site from . import two_sites diff --git a/varipeps/expectation/structure_factor.py b/varipeps/expectation/structure_factor.py new file mode 100644 index 0000000..4ab3c52 --- /dev/null +++ b/varipeps/expectation/structure_factor.py @@ -0,0 +1,177 @@ +from functools import partial + +import jax.numpy as jnp +from jax import jit + +from varipeps.peps import PEPS_Tensor, PEPS_Unit_Cell +from varipeps.contractions import apply_contraction_jitted + +from typing import Sequence + + +@partial(jit, static_argnums=(4, 5)) +def calc_structure_factor_expectation( + peps_tensor_obj: PEPS_Tensor, + alpha_gate: jnp.ndarray, + beta_gate: jnp.array, + structure_factor_inner_factors: Sequence[float], + real_d: int, + num_sites: int, +): + if num_sites > 1: + Id = jnp.eye(real_d ** (num_sites - 1)) + + full_alpha_gate = [jnp.kron(alpha_gate, Id)] + + alpha_gate_tmp = full_alpha_gate[0].reshape((real_d,) * 2 * num_sites) + for i in range(1, num_sites): + trans_order = list(range(1, num_sites)) + list( + range(num_sites + 1, 2 * num_sites) + ) + trans_order.insert(i, 0) + trans_order.insert(num_sites + i, num_sites) + + tmp_gate = alpha_gate_tmp.transpose(trans_order).reshape( + real_d**num_sites, real_d**num_sites + ) + + full_alpha_gate.append(tmp_gate * structure_factor_inner_factors[i].conj()) + + alpha_beta_gate = 0 + # alpha_beta_gate_tmp_1 = alpha_beta_gate.reshape((real_d,) * 2 * num_sites) + alpha_beta_gate_tmp_2 = jnp.kron( + jnp.kron(alpha_gate, beta_gate), jnp.eye(real_d ** (num_sites - 2)) + ).reshape((real_d,) * 2 * num_sites) + + for i in range(num_sites): + for j in range(num_sites): + if i == j: + continue + + # if i == j: + # trans_order = list(range(1, num_sites)) + list( + # range(num_sites + 1, 2 * num_sites) + # ) + # trans_order.insert(i, 0) + # trans_order.insert(num_sites + i, num_sites) + # + # tmp_gate = alpha_beta_gate_tmp_1.transpose(trans_order) + # tmp_gate = tmp_gate.reshape(real_d**num_sites, real_d**num_sites) + # + # alpha_beta_gate += tmp_gate + # else: + trans_order = list(range(2, num_sites)) + list( + range(num_sites + 2, 2 * num_sites) + ) + if i <= j: + trans_order.insert(i, 0) + trans_order.insert(j, 1) + trans_order.insert(num_sites + i, num_sites) + trans_order.insert(num_sites + j, num_sites + 1) + else: + trans_order.insert(j, 1) + trans_order.insert(i, 0) + trans_order.insert(num_sites + j, num_sites + 1) + trans_order.insert(num_sites + i, num_sites) + + tmp_gate = alpha_beta_gate_tmp_2.transpose(trans_order) + tmp_gate = tmp_gate.reshape(real_d**num_sites, real_d**num_sites) + + alpha_beta_gate += ( + tmp_gate + * structure_factor_inner_factors[i].conj() + * structure_factor_inner_factors[j] + ) + else: + full_alpha_gate = [alpha_gate] + alpha_beta_gate = alpha_gate @ beta_gate + + density_matrix = apply_contraction_jitted( + "density_matrix_one_site", [peps_tensor_obj.tensor], [peps_tensor_obj], [] + ) + + norm = jnp.trace(density_matrix) + + result = jnp.tensordot(density_matrix, alpha_beta_gate, ((0, 1), (0, 1))) / norm + + density_matrix = apply_contraction_jitted( + "density_matrix_one_site_C1_phase", + [peps_tensor_obj.tensor], + [peps_tensor_obj], + [], + ) + + for g in full_alpha_gate: + result += jnp.tensordot(density_matrix, g, ((0, 1), (0, 1))) / norm + + density_matrix = apply_contraction_jitted( + "density_matrix_one_site_C2_phase", + [peps_tensor_obj.tensor], + [peps_tensor_obj], + [], + ) + + for g in full_alpha_gate: + result += jnp.tensordot(density_matrix, g, ((0, 1), (0, 1))) / norm + + density_matrix = apply_contraction_jitted( + "density_matrix_one_site_C3_phase", + [peps_tensor_obj.tensor], + [peps_tensor_obj], + [], + ) + + for g in full_alpha_gate: + result += jnp.tensordot(density_matrix, g, ((0, 1), (0, 1))) / norm + + density_matrix = apply_contraction_jitted( + "density_matrix_one_site_C4_phase", + [peps_tensor_obj.tensor], + [peps_tensor_obj], + [], + ) + + for g in full_alpha_gate: + result += jnp.tensordot(density_matrix, g, ((0, 1), (0, 1))) / norm + + density_matrix = apply_contraction_jitted( + "density_matrix_one_site_T1_phase", + [peps_tensor_obj.tensor], + [peps_tensor_obj], + [], + ) + + for g in full_alpha_gate: + result += jnp.tensordot(density_matrix, g, ((0, 1), (0, 1))) / norm + + density_matrix = apply_contraction_jitted( + "density_matrix_one_site_T2_phase", + [peps_tensor_obj.tensor], + [peps_tensor_obj], + [], + ) + + for g in full_alpha_gate: + result += jnp.tensordot(density_matrix, g, ((0, 1), (0, 1))) / norm + + density_matrix = apply_contraction_jitted( + "density_matrix_one_site_T3_phase", + [peps_tensor_obj.tensor], + [peps_tensor_obj], + [], + ) + + for g in full_alpha_gate: + result += jnp.tensordot(density_matrix, g, ((0, 1), (0, 1))) / norm + + density_matrix = apply_contraction_jitted( + "density_matrix_one_site_T4_phase", + [peps_tensor_obj.tensor], + [peps_tensor_obj], + [], + ) + + for g in full_alpha_gate: + result += jnp.tensordot(density_matrix, g, ((0, 1), (0, 1))) / norm + + return result diff --git a/varipeps/optimization/optimizer.py b/varipeps/optimization/optimizer.py index 16937d4..7926617 100644 --- a/varipeps/optimization/optimizer.py +++ b/varipeps/optimization/optimizer.py @@ -186,7 +186,7 @@ def autosave_function( filename: PathLike, tensors: jnp.ndarray, unitcell: PEPS_Unit_Cell, - counter: Optional[int] = None, + counter: Optional[Union[int, str]] = None, auxiliary_data: Optional[Dict[str, Any]] = None, ) -> None: if counter is not None: @@ -197,6 +197,52 @@ def autosave_function( unitcell.save_to_file(filename, auxiliary_data=auxiliary_data) +def _autosave_wrapper( + autosave_func, + autosave_filename, + working_tensors, + working_unitcell, + working_value, + counter, + best_run, + max_trunc_error_list, + step_energies, + step_chi, + step_conv, + spiral_indices, + additional_input, +): + auxiliary_data = { + "best_run": best_run if best_run is not None else 0, + "current_energy": working_value, + } + + for k in sorted(max_trunc_error_list.keys()): + auxiliary_data[f"max_trunc_error_list_{k:d}"] = max_trunc_error_list[k] + auxiliary_data[f"step_energies_{k:d}"] = step_energies[k] + auxiliary_data[f"step_chi_{k:d}"] = step_chi[k] + auxiliary_data[f"step_conv_{k:d}"] = step_conv[k] + + if spiral_indices is not None: + for spiral_i in spiral_indices: + auxiliary_data[f"spiral_vector_{spiral_i:d}"] = working_tensors[spiral_i] + elif additional_input.get("spiral_vectors") is not None: + add_input_spiral = additional_input.get("spiral_vectors") + if isinstance(add_input_spiral, jnp.ndarray): + add_input_spiral = (add_input_spiral,) + for spiral_i, elem in enumerate(add_input_spiral): + spiral_i += 1 + auxiliary_data[f"spiral_vector_{spiral_i:d}"] = elem + + autosave_func( + autosave_filename, + working_tensors, + working_unitcell, + counter=counter, + auxiliary_data=auxiliary_data, + ) + + def optimize_peps_network( input_tensors: Union[PEPS_Unit_Cell, Sequence[jnp.ndarray]], expectation_func: Expectation_Model, @@ -256,6 +302,10 @@ def random_noise(a): if isinstance(input_tensors, collections.abc.Sequence) and isinstance( input_tensors[0], PEPS_Unit_Cell ): + if len(input_tensors[0].get_unique_tensors()) != 1: + raise ValueError( + "You want to use spiral PEPS but you use a unit cell with more than one site. Seems wrong to me!" + ) working_tensors = cast( List[jnp.ndarray], [i.tensor for i in input_tensors[0].get_unique_tensors()], @@ -467,6 +517,22 @@ def random_noise(a): best_unitcell = working_unitcell best_run = random_noise_retries + _autosave_wrapper( + autosave_func, + autosave_filename, + working_tensors, + working_unitcell, + working_value, + "best", + best_run, + max_trunc_error_list, + step_energies, + step_chi, + step_conv, + spiral_indices, + additional_input, + ) + if isinstance(input_tensors, PEPS_Unit_Cell) or ( isinstance(input_tensors, collections.abc.Sequence) and isinstance(input_tensors[0], PEPS_Unit_Cell) @@ -577,37 +643,20 @@ def random_noise(a): pbar.refresh() if count % varipeps_config.optimizer_autosave_step_count == 0: - auxiliary_data = { - "best_run": best_run if best_run is not None else 0, - } - - for k in sorted(max_trunc_error_list.keys()): - auxiliary_data[f"max_trunc_error_list_{k:d}"] = ( - max_trunc_error_list[k] - ) - auxiliary_data[f"step_energies_{k:d}"] = step_energies[k] - auxiliary_data[f"step_chi_{k:d}"] = step_chi[k] - auxiliary_data[f"step_conv_{k:d}"] = step_conv[k] - - if spiral_indices is not None: - for spiral_i in spiral_indices: - auxiliary_data[f"spiral_vector_{spiral_i:d}"] = working_tensors[ - spiral_i - ] - elif additional_input.get("spiral_vectors") is not None: - add_input_spiral = additional_input.get("spiral_vectors") - if isinstance(add_input_spiral, jnp.ndarray): - add_input_spiral = (add_input_spiral,) - for spiral_i, elem in enumerate(add_input_spiral): - spiral_i += 1 - auxiliary_data[f"spiral_vector_{spiral_i:d}"] = elem - - autosave_func( + _autosave_wrapper( + autosave_func, autosave_filename, working_tensors, working_unitcell, - counter=random_noise_retries, - auxiliary_data=auxiliary_data, + working_value, + random_noise_retries, + best_run, + max_trunc_error_list, + step_energies, + step_chi, + step_conv, + spiral_indices, + additional_input, ) if working_value < best_value: @@ -616,6 +665,22 @@ def random_noise(a): best_unitcell = working_unitcell best_run = random_noise_retries + _autosave_wrapper( + autosave_func, + autosave_filename, + working_tensors, + working_unitcell, + working_value, + "best", + best_run, + max_trunc_error_list, + step_energies, + step_chi, + step_conv, + spiral_indices, + additional_input, + ) + print(f"Best energy result found: {best_value}") return OptimizeResult( diff --git a/varipeps/peps/__init__.py b/varipeps/peps/__init__.py index c6f08d9..4ab0d7c 100644 --- a/varipeps/peps/__init__.py +++ b/varipeps/peps/__init__.py @@ -1,4 +1,4 @@ from . import tensor from . import unitcell -from .tensor import PEPS_Tensor +from .tensor import PEPS_Tensor, PEPS_Tensor_Structure_Factor from .unitcell import PEPS_Unit_Cell diff --git a/varipeps/peps/tensor.py b/varipeps/peps/tensor.py index b595ffe..2d570db 100644 --- a/varipeps/peps/tensor.py +++ b/varipeps/peps/tensor.py @@ -1103,3 +1103,738 @@ def tree_unflatten( max_chi=max_chi, sanity_checks=False, ) + + +@dataclass(frozen=True) +@register_pytree_node_class +class PEPS_Tensor_Structure_Factor(PEPS_Tensor): + """ + Class to model a single a PEPS tensor with the corresponding CTM tensors. + + Args: + tensor (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + PEPS tensor + C1 (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + C1 tensor + C2 (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + C2 tensor + C3 (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + C3 tensor + C4 (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + C4 tensor + T1 (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + T1 tensor + T2 (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + T2 tensor + T3 (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + T3 tensor + T4 (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + T4 tensor + C1_phase (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + C1 tensor including structure factor phase + C2_phase (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + C2 tensor including structure factor phase + C3_phase (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + C3 tensor including structure factor phase + C4_phase (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + C4 tensor including structure factor phase + T1_phase (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + T1 tensor including structure factor phase + T2_phase (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + T2 tensor including structure factor phase + T3_phase (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + T3 tensor including structure factor phase + T4_phase (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + T4 tensor including structure factor phase + d (:obj:`int`): + Physical dimension of the PEPS tensor + D (:term:`sequence` of :obj:`int`): + Sequence of the bond dimensions of the PEPS tensor + chi (:obj:`int`): + Bond dimension for the CTM tensors + max_chi (:obj:`int`): + Maximal allowed bond dimension of environment tensors. + """ + + C1_phase: Tensor = None + C2_phase: Tensor = None + C3_phase: Tensor = None + C4_phase: Tensor = None + + T1_phase: Tensor = None + T2_phase: Tensor = None + T3_phase: Tensor = None + T4_phase: Tensor = None + + def __post_init__(self) -> None: + super().__post_init__() + + if not ( + self.T1_phase.shape[1] == self.T1_phase.shape[2] == self.D[3] + and self.T2_phase.shape[0] == self.T2_phase.shape[1] == self.D[2] + and self.T3_phase.shape[2] == self.T3_phase.shape[3] == self.D[1] + and self.T4_phase.shape[1] == self.T4_phase.shape[2] == self.D[0] + ): + raise ValueError( + "At least one transfer tensors mismatch bond dimensions of PEPS tensor." + ) + + @classmethod + def from_tensor( + cls: Type[T_PEPS_Tensor], + tensor: Tensor, + d: int, + D: Union[int, Sequence[int]], + chi: int, + max_chi: Optional[int] = None, + *, + ctm_tensors_are_identities: bool = True, + normalize: bool = True, + seed: Optional[int] = None, + backend: str = "jax", + ) -> T_PEPS_Tensor: + """ + Initialize a PEPS tensor object with a given tensor and new CTM tensors. + + Args: + tensor (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + PEPS tensor to initialize the object with + d (:obj:`int`): + Physical dimension + D (:obj:`int` or :term:`sequence` of :obj:`int`): + Bond dimensions for the PEPS tensor + chi (:obj:`int`): + Bond dimension for the environment tensors + max_chi (:obj:`int`): + Maximal allowed bond dimension for the environment tensors + Keyword args: + ctm_tensors_are_identities (:obj:`bool`, optional): + Flag if the CTM tensors are initialized as identities. Otherwise, + they are initialized randomly. Defaults to True. + normalize (:obj:`bool`, optional): + Flag if the generated tensors are normalized. Defaults to True. + seed (:obj:`int`, optional): + Seed for the random number generator. + backend (:obj:`str`, optional): + Backend for the generated tensors (may be ``jax`` or ``numpy``). + Defaults to ``jax``. + Returns: + PEPS_Tensor: + Instance of PEPS_Tensor with the randomly initialized tensors. + """ + if not is_tensor(tensor): + raise ValueError("Invalid argument for tensor.") + + if isinstance(D, int): + D = (D,) * 4 + elif isinstance(D, collections.abc.Sequence) and not isinstance(D, tuple): + D = tuple(D) + + if not all(isinstance(i, int) for i in D) or not len(D) == 4: + raise ValueError("Invalid argument for D.") + + if ( + tensor.shape[0] != D[0] + or tensor.shape[1] != D[1] + or tensor.shape[3] != D[2] + or tensor.shape[4] != D[3] + or tensor.shape[2] != d + ): + raise ValueError("Tensor dimensions mismatch the dimension arguments.") + + if max_chi is None: + max_chi = chi + + dtype = tensor.dtype + + if ctm_tensors_are_identities: + C1 = jnp.ones((1, 1), dtype=dtype) + C2 = jnp.ones((1, 1), dtype=dtype) + C3 = jnp.ones((1, 1), dtype=dtype) + C4 = jnp.ones((1, 1), dtype=dtype) + + T1 = jnp.eye(D[3], dtype=dtype).reshape(1, D[3], D[3], 1) + T2 = jnp.eye(D[2], dtype=dtype).reshape(D[2], D[2], 1, 1) + T3 = jnp.eye(D[1], dtype=dtype).reshape(1, 1, D[1], D[1]) + T4 = jnp.eye(D[0], dtype=dtype).reshape(1, D[0], D[0], 1) + + C1_phase = jnp.ones((1, 1), dtype=dtype) + C2_phase = jnp.ones((1, 1), dtype=dtype) + C3_phase = jnp.ones((1, 1), dtype=dtype) + C4_phase = jnp.ones((1, 1), dtype=dtype) + + T1_phase = jnp.eye(D[3], dtype=dtype).reshape(1, D[3], D[3], 1) + T2_phase = jnp.eye(D[2], dtype=dtype).reshape(D[2], D[2], 1, 1) + T3_phase = jnp.eye(D[1], dtype=dtype).reshape(1, 1, D[1], D[1]) + T4_phase = jnp.eye(D[0], dtype=dtype).reshape(1, D[0], D[0], 1) + else: + rng = PEPS_Random_Number_Generator.get_generator(seed, backend=backend) + + C1 = rng.block((chi, chi), dtype, normalize=normalize) + C2 = rng.block((chi, chi), dtype, normalize=normalize) + C3 = rng.block((chi, chi), dtype, normalize=normalize) + C4 = rng.block((chi, chi), dtype, normalize=normalize) + + T1 = rng.block((chi, D[3], D[3], chi), dtype, normalize=normalize) + T2 = rng.block((D[2], D[2], chi, chi), dtype, normalize=normalize) + T3 = rng.block((chi, chi, D[1], D[1]), dtype, normalize=normalize) + T4 = rng.block((chi, D[0], D[0], chi), dtype, normalize=normalize) + + C1_phase = rng.block((chi, chi), dtype, normalize=normalize) + C2_phase = rng.block((chi, chi), dtype, normalize=normalize) + C3_phase = rng.block((chi, chi), dtype, normalize=normalize) + C4_phase = rng.block((chi, chi), dtype, normalize=normalize) + + T1_phase = rng.block((chi, D[3], D[3], chi), dtype, normalize=normalize) + T2_phase = rng.block((D[2], D[2], chi, chi), dtype, normalize=normalize) + T3_phase = rng.block((chi, chi, D[1], D[1]), dtype, normalize=normalize) + T4_phase = rng.block((chi, D[0], D[0], chi), dtype, normalize=normalize) + + return cls( + tensor=tensor, + C1=C1, + C2=C2, + C3=C3, + C4=C4, + T1=T1, + T2=T2, + T3=T3, + T4=T4, + C1_phase=C1_phase, + C2_phase=C2_phase, + C3_phase=C3_phase, + C4_phase=C4_phase, + T1_phase=T1_phase, + T2_phase=T2_phase, + T3_phase=T3_phase, + T4_phase=T4_phase, + d=d, + D=D, # type: ignore + chi=chi, + max_chi=max_chi, + ) + + def change_chi( + self: T_PEPS_Tensor, + new_chi: int, + *, + reinitialize_env_as_identities: bool = True, + ) -> T_PEPS_Tensor: + """ + Change the environment bond dimension and returns new object of the class. + + Args: + new_chi (:obj:`int`): + New value for environment bond dimension. + Keyword args: + reinitialize_env_as_identities (:obj:`bool`): + Reinitialize the CTM tensors as identities if decreasing the dimension. + Returns: + :obj:`~varipeps.peps.PEPS_Tensor`: + New instance of the class with the increased value. + """ + if new_chi > self.max_chi: + raise ValueError( + "Increase above the max value for environment bond dimension." + ) + + if new_chi < self.chi and reinitialize_env_as_identities: + return type(self)( + tensor=self.tensor, + C1=jnp.ones((1, 1), dtype=self.C1.dtype), + C2=jnp.ones((1, 1), dtype=self.C2.dtype), + C3=jnp.ones((1, 1), dtype=self.C3.dtype), + C4=jnp.ones((1, 1), dtype=self.C4.dtype), + T1=jnp.eye(self.D[3], dtype=self.T1.dtype).reshape( + 1, self.D[3], self.D[3], 1 + ), + T2=jnp.eye(self.D[2], dtype=self.T2.dtype).reshape( + self.D[2], self.D[2], 1, 1 + ), + T3=jnp.eye(self.D[1], dtype=self.T3.dtype).reshape( + 1, 1, self.D[1], self.D[1] + ), + T4=jnp.eye(self.D[0], dtype=self.T4.dtype).reshape( + 1, self.D[0], self.D[0], 1 + ), + C1_phase=jnp.ones((1, 1), dtype=self.C1_phase.dtype), + C2_phase=jnp.ones((1, 1), dtype=self.C2_phase.dtype), + C3_phase=jnp.ones((1, 1), dtype=self.C3_phase.dtype), + C4_phase=jnp.ones((1, 1), dtype=self.C4_phase.dtype), + T1_phase=jnp.eye(self.D[3], dtype=self.T1_phase.dtype).reshape( + 1, self.D[3], self.D[3], 1 + ), + T2_phase=jnp.eye(self.D[2], dtype=self.T2_phase.dtype).reshape( + self.D[2], self.D[2], 1, 1 + ), + T3_phase=jnp.eye(self.D[1], dtype=self.T3_phase.dtype).reshape( + 1, 1, self.D[1], self.D[1] + ), + T4_phase=jnp.eye(self.D[0], dtype=self.T4_phase.dtype).reshape( + 1, self.D[0], self.D[0], 1 + ), + d=self.d, + D=self.D, + chi=new_chi, + max_chi=self.max_chi, + ) + else: + return type(self)( + tensor=self.tensor, + C1=self.C1, + C2=self.C2, + C3=self.C3, + C4=self.C4, + T1=self.T1, + T2=self.T2, + T3=self.T3, + T4=self.T4, + C1_phase=self.C1_phase, + C2_phase=self.C2_phase, + C3_phase=self.C3_phase, + C4_phase=self.C4_phase, + T1_phase=self.T1_phase, + T2_phase=self.T2_phase, + T3_phase=self.T3_phase, + T4_phase=self.T4_phase, + d=self.d, + D=self.D, + chi=new_chi, + max_chi=self.max_chi, + ) + + def increase_max_chi( + self: T_PEPS_Tensor, + new_max_chi: int, + ) -> T_PEPS_Tensor: + """ + Change the maximal environment bond dimension and returns new object of the class. + + Args: + new_max_chi (:obj:`int`): + New value for maximal environment bond dimension. + Returns: + :obj:`~varipeps.peps.PEPS_Tensor`: + New instance of the class with the increased value. + """ + if new_max_chi < self.max_chi: + raise ValueError( + "Decrease below the old max value for environment bond dimension." + ) + + return type(self)( + tensor=self.tensor, + C1=self.C1, + C2=self.C2, + C3=self.C3, + C4=self.C4, + T1=self.T1, + T2=self.T2, + T3=self.T3, + T4=self.T4, + C1_phase=self.C1_phase, + C2_phase=self.C2_phase, + C3_phase=self.C3_phase, + C4_phase=self.C4_phase, + T1_phase=self.T1_phase, + T2_phase=self.T2_phase, + T3_phase=self.T3_phase, + T4_phase=self.T4_phase, + d=self.d, + D=self.D, + chi=self.chi, + max_chi=new_max_chi, + ) + + def replace_left_env_tensors( + self: T_PEPS_Tensor, + new_C1: Tensor, + new_T4: Tensor, + new_C4: Tensor, + new_C1_phase: Tensor, + new_T4_phase: Tensor, + new_C4_phase: Tensor, + ) -> T_PEPS_Tensor: + """ + Replace the left CTMRG tensors and returns new object of the class. + + Args: + new_C1 (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + New C1 tensor. + new_T4 (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + New T4 tensor. + new_C4 (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + New C4 tensor. + new_C1_phase (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + New C1 tensor including structure factor phase. + new_T4_phase (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + New T4 tensor including structure factor phase. + new_C4_phase (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + New C4 tensor including structure factor phase. + Returns: + :obj:`~varipeps.peps.PEPS_Tensor`: + New instance of the class with the tensors replaced. + """ + return type(self)( + tensor=self.tensor, + C1=new_C1, + C2=self.C2, + C3=self.C3, + C4=new_C4, + T1=self.T1, + T2=self.T2, + T3=self.T3, + T4=new_T4, + C1_phase=new_C1_phase, + C2_phase=self.C2_phase, + C3_phase=self.C3_phase, + C4_phase=new_C4_phase, + T1_phase=self.T1_phase, + T2_phase=self.T2_phase, + T3_phase=self.T3_phase, + T4_phase=new_T4_phase, + d=self.d, + D=self.D, + chi=self.chi, + max_chi=self.max_chi, + ) + + def replace_right_env_tensors( + self: T_PEPS_Tensor, + new_C2: Tensor, + new_T2: Tensor, + new_C3: Tensor, + new_C2_phase: Tensor, + new_T2_phase: Tensor, + new_C3_phase: Tensor, + ) -> T_PEPS_Tensor: + """ + Replace the right CTMRG tensors and returns new object of the class. + + Args: + new_C2 (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + New C2 tensor. + new_T2 (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + New T2 tensor. + new_C3 (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + New C3 tensor. + new_C2_phase (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + New C2 tensor including structure factor phase. + new_T2_phase (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + New T2 tensor including structure factor phase. + new_C3_phase (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + New C3 tensor including structure factor phase. + Returns: + :obj:`~varipeps.peps.PEPS_Tensor`: + New instance of the class with the tensors replaced. + """ + return type(self)( + tensor=self.tensor, + C1=self.C1, + C2=new_C2, + C3=new_C3, + C4=self.C4, + T1=self.T1, + T2=new_T2, + T3=self.T3, + T4=self.T4, + C1_phase=self.C1_phase, + C2_phase=new_C2_phase, + C3_phase=new_C3_phase, + C4_phase=self.C4_phase, + T1_phase=self.T1_phase, + T2_phase=new_T2_phase, + T3_phase=self.T3_phase, + T4_phase=self.T4_phase, + d=self.d, + D=self.D, + chi=self.chi, + max_chi=self.max_chi, + ) + + def replace_top_env_tensors( + self: T_PEPS_Tensor, + new_C1: Tensor, + new_T1: Tensor, + new_C2: Tensor, + new_C1_phase: Tensor, + new_T1_phase: Tensor, + new_C2_phase: Tensor, + ) -> T_PEPS_Tensor: + """ + Replace the top CTMRG tensors and returns new object of the class. + + Args: + new_C1 (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + New C1 tensor. + new_T1 (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + New T1 tensor. + new_C2 (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + New C2 tensor. + new_C1_phase (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + New C1 tensor including structure factor phase. + new_T1_phase (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + New T1 tensor including structure factor phase. + new_C2_phase (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + New C2 tensor including structure factor phase. + Returns: + :obj:`~varipeps.peps.PEPS_Tensor`: + New instance of the class with the tensors replaced. + """ + return type(self)( + tensor=self.tensor, + C1=new_C1, + C2=new_C2, + C3=self.C3, + C4=self.C4, + T1=new_T1, + T2=self.T2, + T3=self.T3, + T4=self.T4, + C1_phase=new_C1_phase, + C2_phase=new_C2_phase, + C3_phase=self.C3_phase, + C4_phase=self.C4_phase, + T1_phase=new_T1_phase, + T2_phase=self.T2_phase, + T3_phase=self.T3_phase, + T4_phase=self.T4_phase, + d=self.d, + D=self.D, + chi=self.chi, + max_chi=self.max_chi, + ) + + def replace_bottom_env_tensors( + self: T_PEPS_Tensor, + new_C4: Tensor, + new_T3: Tensor, + new_C3: Tensor, + new_C4_phase: Tensor, + new_T3_phase: Tensor, + new_C3_phase: Tensor, + ) -> T_PEPS_Tensor: + """ + Replace the bottom CTMRG tensors and returns new object of the class. + + Args: + new_C4 (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + New C4 tensor. + new_T3 (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + New T3 tensor. + new_C3 (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + New C3 tensor. + new_C4_phase (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + New C4 tensor including structure factor phase. + new_T3_phase (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + New T3 tensor including structure factor phase. + new_C3_phase (:obj:`numpy.ndarray` or :obj:`jax.numpy.ndarray`): + New C3 tensor including structure factor phase. + Returns: + :obj:`~varipeps.peps.PEPS_Tensor`: + New instance of the class with the tensors replaced. + """ + return type(self)( + tensor=self.tensor, + C1=self.C1, + C2=self.C2, + C3=new_C3, + C4=new_C4, + T1=self.T1, + T2=self.T2, + T3=new_T3, + T4=self.T4, + C1_phase=self.C1_phase, + C2_phase=self.C2_phase, + C3_phase=new_C3_phase, + C4_phase=new_C4_phase, + T1_phase=self.T1_phase, + T2_phase=self.T2_phase, + T3_phase=new_T3_phase, + T4_phase=self.T4_phase, + d=self.d, + D=self.D, + chi=self.chi, + max_chi=self.max_chi, + ) + + def save_to_group(self, grp: h5py.Group) -> None: + """ + Store the PEPS tensor into a HDF5 group. + + Args: + grp (:obj:`h5py.Group`): + HDF5 group object to save the data into. + """ + grp.attrs["d"] = self.d + grp.attrs["D"] = self.D + grp.attrs["chi"] = self.chi + grp.attrs["max_chi"] = self.max_chi + grp.create_dataset( + "tensor", data=self.tensor, compression="gzip", compression_opts=6 + ) + grp.create_dataset("C1", data=self.C1, compression="gzip", compression_opts=6) + grp.create_dataset("C2", data=self.C2, compression="gzip", compression_opts=6) + grp.create_dataset("C3", data=self.C3, compression="gzip", compression_opts=6) + grp.create_dataset("C4", data=self.C4, compression="gzip", compression_opts=6) + grp.create_dataset("T1", data=self.T1, compression="gzip", compression_opts=6) + grp.create_dataset("T2", data=self.T2, compression="gzip", compression_opts=6) + grp.create_dataset("T3", data=self.T3, compression="gzip", compression_opts=6) + grp.create_dataset("T4", data=self.T4, compression="gzip", compression_opts=6) + grp.create_dataset( + "C1_phase", data=self.C1_phase, compression="gzip", compression_opts=6 + ) + grp.create_dataset( + "C2_phase", data=self.C2_phase, compression="gzip", compression_opts=6 + ) + grp.create_dataset( + "C3_phase", data=self.C3_phase, compression="gzip", compression_opts=6 + ) + grp.create_dataset( + "C4_phase", data=self.C4_phase, compression="gzip", compression_opts=6 + ) + grp.create_dataset( + "T1_phase", data=self.T1_phase, compression="gzip", compression_opts=6 + ) + grp.create_dataset( + "T2_phase", data=self.T2_phase, compression="gzip", compression_opts=6 + ) + grp.create_dataset( + "T3_phase", data=self.T3_phase, compression="gzip", compression_opts=6 + ) + grp.create_dataset( + "T4_phase", data=self.T4_phase, compression="gzip", compression_opts=6 + ) + + @classmethod + def load_from_group(cls: Type[T_PEPS_Tensor], grp: h5py.Group) -> T_PEPS_Tensor: + """ + Load the PEPS tensor from a HDF5 group. + + Args: + grp (:obj:`h5py.Group`): + HDF5 group object to load the data from. + """ + d = int(grp.attrs["d"]) + D = tuple(int(i) for i in grp.attrs["D"]) + chi = int(grp.attrs["chi"]) + try: + max_chi = int(grp.attrs["max_chi"]) + except KeyError: + max_chi = chi + + tensor = jnp.asarray(grp["tensor"]) + C1 = jnp.asarray(grp["C1"]) + C2 = jnp.asarray(grp["C2"]) + C3 = jnp.asarray(grp["C3"]) + C4 = jnp.asarray(grp["C4"]) + T1 = jnp.asarray(grp["T1"]) + T2 = jnp.asarray(grp["T2"]) + T3 = jnp.asarray(grp["T3"]) + T4 = jnp.asarray(grp["T4"]) + C1_phase = jnp.asarray(grp["C1_phase"]) + C2_phase = jnp.asarray(grp["C2_phase"]) + C3_phase = jnp.asarray(grp["C3_phase"]) + C4_phase = jnp.asarray(grp["C4_phase"]) + T1_phase = jnp.asarray(grp["T1_phase"]) + T2_phase = jnp.asarray(grp["T2_phase"]) + T3_phase = jnp.asarray(grp["T3_phase"]) + T4_phase = jnp.asarray(grp["T4_phase"]) + + return cls( + tensor=tensor, + C1=C1, + C2=C2, + C3=C3, + C4=C4, + T1=T1, + T2=T2, + T3=T3, + T4=T4, + C1_phase=C1_phase, + C2_phase=C2_phase, + C3_phase=C3_phase, + C4_phase=C4_phase, + T1_phase=T1_phase, + T2_phase=T2_phase, + T3_phase=T3_phase, + T4_phase=T4_phase, + d=d, + D=D, + chi=chi, + max_chi=max_chi, + ) + + def tree_flatten(self) -> Tuple[Tuple[Any, ...], Tuple[Any, ...]]: + data = ( + self.tensor, + self.C1, + self.C2, + self.C3, + self.C4, + self.T1, + self.T2, + self.T3, + self.T4, + self.C1_phase, + self.C2_phase, + self.C3_phase, + self.C4_phase, + self.T1_phase, + self.T2_phase, + self.T3_phase, + self.T4_phase, + ) + aux_data = (self.d, self.D, self.chi, self.max_chi) + + return (data, aux_data) + + @classmethod + def tree_unflatten( + cls: Type[T_PEPS_Tensor], aux_data: Tuple[Any, ...], children: Tuple[Any, ...] + ) -> T_PEPS_Tensor: + ( + tensor, + C1, + C2, + C3, + C4, + T1, + T2, + T3, + T4, + C1_phase, + C2_phase, + C3_phase, + C4_phase, + T1_phase, + T2_phase, + T3_phase, + T4_phase, + ) = children + d, D, chi, max_chi = aux_data + + return cls( + tensor=tensor, + C1=C1, + C2=C2, + C3=C3, + C4=C4, + T1=T1, + T2=T2, + T3=T3, + T4=T4, + C1_phase=C1_phase, + C2_phase=C2_phase, + C3_phase=C3_phase, + C4_phase=C4_phase, + T1_phase=T1_phase, + T2_phase=T2_phase, + T3_phase=T3_phase, + T4_phase=T4_phase, + d=d, + D=D, + chi=chi, + max_chi=max_chi, + sanity_checks=False, + )