diff --git a/docs/tutorials/image_processing.ipynb b/docs/tutorials/image_processing.ipynb index 61ae77e0f..d306ca154 100644 --- a/docs/tutorials/image_processing.ipynb +++ b/docs/tutorials/image_processing.ipynb @@ -31,7 +31,7 @@ "source": [ "from safeds.data.image.containers import Image\n", "\n", - "plane = Image.from_png_file(\"data/plane.png\")\n", + "plane = Image.from_file(\"data/plane.png\")\n", "plane" ] }, @@ -175,7 +175,7 @@ "execution_count": null, "outputs": [], "source": [ - "plane.adjust_color_balance(0.5)" + "# plane.adjust_color_balance(0.5)" ], "metadata": { "collapsed": false @@ -280,7 +280,7 @@ "execution_count": null, "outputs": [], "source": [ - "plane.find_edges()\n" + "# plane.find_edges()\n" ], "metadata": { "collapsed": false @@ -289,7 +289,7 @@ { "cell_type": "markdown", "source": [ - "13. Add gaussian noise to the `Image`. A higher `standard_deviation` will result in a noisier `Image`:\n" + "13. Add noise to the `Image`. A higher `standard_deviation` will result in a noisier `Image`:\n" ], "metadata": { "collapsed": false @@ -300,7 +300,7 @@ "execution_count": null, "outputs": [], "source": [ - "plane.add_gaussian_noise(standard_deviation=0.1)\n" + "plane.add_noise(standard_deviation=0.1)\n" ], "metadata": { "collapsed": false diff --git a/poetry.lock b/poetry.lock index 6c0d01e29..a3390dccb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,14 +1,14 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. [[package]] name = "anyio" -version = "4.0.0" +version = "4.2.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.8" files = [ - {file = "anyio-4.0.0-py3-none-any.whl", hash = "sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f"}, - {file = "anyio-4.0.0.tar.gz", hash = "sha256:f7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a"}, + {file = "anyio-4.2.0-py3-none-any.whl", hash = "sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee"}, + {file = "anyio-4.2.0.tar.gz", hash = "sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f"}, ] [package.dependencies] @@ -16,9 +16,9 @@ idna = ">=2.8" sniffio = ">=1.1" [package.extras] -doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (>=0.22)"] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] [[package]] name = "appnope" @@ -138,31 +138,32 @@ files = [ [[package]] name = "attrs" -version = "23.1.0" +version = "23.2.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.7" files = [ - {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, - {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, + {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, + {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, ] [package.extras] cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]", "pre-commit"] +dev = ["attrs[tests]", "pre-commit"] docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] +tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] [[package]] name = "babel" -version = "2.13.1" +version = "2.14.0" description = "Internationalization utilities" optional = false python-versions = ">=3.7" files = [ - {file = "Babel-2.13.1-py3-none-any.whl", hash = "sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed"}, - {file = "Babel-2.13.1.tar.gz", hash = "sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900"}, + {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"}, + {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"}, ] [package.extras] @@ -206,13 +207,13 @@ css = ["tinycss2 (>=1.1.0,<1.3)"] [[package]] name = "certifi" -version = "2023.7.22" +version = "2023.11.17" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, - {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, + {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, + {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, ] [[package]] @@ -392,6 +393,35 @@ files = [ [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} +[[package]] +name = "cmake" +version = "3.28.1" +description = "CMake is an open-source, cross-platform family of tools designed to build, test and package software" +optional = false +python-versions = "*" +files = [ + {file = "cmake-3.28.1-py2.py3-none-macosx_10_10_universal2.macosx_10_10_x86_64.macosx_11_0_arm64.macosx_11_0_universal2.whl", hash = "sha256:9c77c47afef821c0044ba73d182c386ab02e92e6bda5296e553c12455a083f29"}, + {file = "cmake-3.28.1-py2.py3-none-manylinux2010_i686.manylinux_2_12_i686.whl", hash = "sha256:6a9549755d1178426502753d48949edae9bb0c66f15a07f09904783125beb0e3"}, + {file = "cmake-3.28.1-py2.py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:d0978cdd08c0ebc76f4f8543aba1381a41580dcb9c3bcffb536c41337b75aea1"}, + {file = "cmake-3.28.1-py2.py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:96d506c417d63bbcff19b3e9eaa69fe546456a0ddeffe914bcbb23cceee6818e"}, + {file = "cmake-3.28.1-py2.py3-none-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:74c9878c504ccc6ddd5b0914cbe3b86417a36a2c2dfc486040bfdfe63fbbb1ac"}, + {file = "cmake-3.28.1-py2.py3-none-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:64d4642c48486bb4320540781a2266c2060929d1e236d6eb2b2c96273e75e958"}, + {file = "cmake-3.28.1-py2.py3-none-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:363bd0124d71d7e3d9b1ac9bd1dce1d80ba90f48b264c3bf9dbfcfda875cafc9"}, + {file = "cmake-3.28.1-py2.py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1be8f351271f8bcbe32288066e5add642d7c32f2f8fec3f135949c2cb13dfac2"}, + {file = "cmake-3.28.1-py2.py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:3ed193134a4937bad8de2b4f62faebc8c1a4049cd37dad9767db7e7d91a08b52"}, + {file = "cmake-3.28.1-py2.py3-none-musllinux_1_1_i686.whl", hash = "sha256:6ffb1fdb0b0f7f11271d82b5892c2edc109d561e186f882def095970403e2110"}, + {file = "cmake-3.28.1-py2.py3-none-musllinux_1_1_ppc64le.whl", hash = "sha256:9ea12ebe4b8266f04d6619ed64860bd6e687522f02caf3131515dd39d614ef00"}, + {file = "cmake-3.28.1-py2.py3-none-musllinux_1_1_s390x.whl", hash = "sha256:2ad22d897d2ed38544e5ef26ee21c4dccc38e938660cd07497fd6bdba0993ea6"}, + {file = "cmake-3.28.1-py2.py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:379a730b274f39e5858ef2107861b2727918493347b0ccdd5f62bcbb6a8450d9"}, + {file = "cmake-3.28.1-py2.py3-none-win32.whl", hash = "sha256:c82bc0eb1495cf518cb4f355b8a73e584e67d53453406c0498bacc454cf6c404"}, + {file = "cmake-3.28.1-py2.py3-none-win_amd64.whl", hash = "sha256:bb03ed4753185d0c70c0bc3212e5533e20eb2c17fa0ca1e7603b702c6d0db8cf"}, + {file = "cmake-3.28.1-py2.py3-none-win_arm64.whl", hash = "sha256:40f0671c05ef7eec27c4f53c63630b0b621e40f80ab38607d3a0e3a1f2c9242a"}, + {file = "cmake-3.28.1.tar.gz", hash = "sha256:0d4051d101d151d8387156c463aa45c8cd0e164f870e0ac0c8c91d3ff08528e1"}, +] + +[package.extras] +test = ["coverage (>=4.2)", "importlib-metadata (>=2.0)", "pytest (>=3.0.3)", "pytest-cov (>=2.4.0)"] + [[package]] name = "colorama" version = "0.4.6" @@ -485,63 +515,63 @@ test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] [[package]] name = "coverage" -version = "7.3.2" +version = "7.4.0" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf"}, - {file = "coverage-7.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda"}, - {file = "coverage-7.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a"}, - {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c"}, - {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f"}, - {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6"}, - {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148"}, - {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9"}, - {file = "coverage-7.3.2-cp310-cp310-win32.whl", hash = "sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f"}, - {file = "coverage-7.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611"}, - {file = "coverage-7.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c"}, - {file = "coverage-7.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074"}, - {file = "coverage-7.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a"}, - {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3"}, - {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a"}, - {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1"}, - {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c"}, - {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312"}, - {file = "coverage-7.3.2-cp311-cp311-win32.whl", hash = "sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640"}, - {file = "coverage-7.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2"}, - {file = "coverage-7.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836"}, - {file = "coverage-7.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63"}, - {file = "coverage-7.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216"}, - {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4"}, - {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf"}, - {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf"}, - {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84"}, - {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a"}, - {file = "coverage-7.3.2-cp312-cp312-win32.whl", hash = "sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb"}, - {file = "coverage-7.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed"}, - {file = "coverage-7.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738"}, - {file = "coverage-7.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2"}, - {file = "coverage-7.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2"}, - {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c"}, - {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9"}, - {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82"}, - {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901"}, - {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76"}, - {file = "coverage-7.3.2-cp38-cp38-win32.whl", hash = "sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92"}, - {file = "coverage-7.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a"}, - {file = "coverage-7.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce"}, - {file = "coverage-7.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9"}, - {file = "coverage-7.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f"}, - {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25"}, - {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9"}, - {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6"}, - {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc"}, - {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083"}, - {file = "coverage-7.3.2-cp39-cp39-win32.whl", hash = "sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce"}, - {file = "coverage-7.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f"}, - {file = "coverage-7.3.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637"}, - {file = "coverage-7.3.2.tar.gz", hash = "sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef"}, + {file = "coverage-7.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36b0ea8ab20d6a7564e89cb6135920bc9188fb5f1f7152e94e8300b7b189441a"}, + {file = "coverage-7.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0676cd0ba581e514b7f726495ea75aba3eb20899d824636c6f59b0ed2f88c471"}, + {file = "coverage-7.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0ca5c71a5a1765a0f8f88022c52b6b8be740e512980362f7fdbb03725a0d6b9"}, + {file = "coverage-7.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7c97726520f784239f6c62506bc70e48d01ae71e9da128259d61ca5e9788516"}, + {file = "coverage-7.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:815ac2d0f3398a14286dc2cea223a6f338109f9ecf39a71160cd1628786bc6f5"}, + {file = "coverage-7.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:80b5ee39b7f0131ebec7968baa9b2309eddb35b8403d1869e08f024efd883566"}, + {file = "coverage-7.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5b2ccb7548a0b65974860a78c9ffe1173cfb5877460e5a229238d985565574ae"}, + {file = "coverage-7.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:995ea5c48c4ebfd898eacb098164b3cc826ba273b3049e4a889658548e321b43"}, + {file = "coverage-7.4.0-cp310-cp310-win32.whl", hash = "sha256:79287fd95585ed36e83182794a57a46aeae0b64ca53929d1176db56aacc83451"}, + {file = "coverage-7.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:5b14b4f8760006bfdb6e08667af7bc2d8d9bfdb648351915315ea17645347137"}, + {file = "coverage-7.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:04387a4a6ecb330c1878907ce0dc04078ea72a869263e53c72a1ba5bbdf380ca"}, + {file = "coverage-7.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ea81d8f9691bb53f4fb4db603203029643caffc82bf998ab5b59ca05560f4c06"}, + {file = "coverage-7.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74775198b702868ec2d058cb92720a3c5a9177296f75bd97317c787daf711505"}, + {file = "coverage-7.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76f03940f9973bfaee8cfba70ac991825611b9aac047e5c80d499a44079ec0bc"}, + {file = "coverage-7.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:485e9f897cf4856a65a57c7f6ea3dc0d4e6c076c87311d4bc003f82cfe199d25"}, + {file = "coverage-7.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6ae8c9d301207e6856865867d762a4b6fd379c714fcc0607a84b92ee63feff70"}, + {file = "coverage-7.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bf477c355274a72435ceb140dc42de0dc1e1e0bf6e97195be30487d8eaaf1a09"}, + {file = "coverage-7.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:83c2dda2666fe32332f8e87481eed056c8b4d163fe18ecc690b02802d36a4d26"}, + {file = "coverage-7.4.0-cp311-cp311-win32.whl", hash = "sha256:697d1317e5290a313ef0d369650cfee1a114abb6021fa239ca12b4849ebbd614"}, + {file = "coverage-7.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:26776ff6c711d9d835557ee453082025d871e30b3fd6c27fcef14733f67f0590"}, + {file = "coverage-7.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:13eaf476ec3e883fe3e5fe3707caeb88268a06284484a3daf8250259ef1ba143"}, + {file = "coverage-7.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846f52f46e212affb5bcf131c952fb4075b55aae6b61adc9856222df89cbe3e2"}, + {file = "coverage-7.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26f66da8695719ccf90e794ed567a1549bb2644a706b41e9f6eae6816b398c4a"}, + {file = "coverage-7.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:164fdcc3246c69a6526a59b744b62e303039a81e42cfbbdc171c91a8cc2f9446"}, + {file = "coverage-7.4.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:316543f71025a6565677d84bc4df2114e9b6a615aa39fb165d697dba06a54af9"}, + {file = "coverage-7.4.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bb1de682da0b824411e00a0d4da5a784ec6496b6850fdf8c865c1d68c0e318dd"}, + {file = "coverage-7.4.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:0e8d06778e8fbffccfe96331a3946237f87b1e1d359d7fbe8b06b96c95a5407a"}, + {file = "coverage-7.4.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a56de34db7b7ff77056a37aedded01b2b98b508227d2d0979d373a9b5d353daa"}, + {file = "coverage-7.4.0-cp312-cp312-win32.whl", hash = "sha256:51456e6fa099a8d9d91497202d9563a320513fcf59f33991b0661a4a6f2ad450"}, + {file = "coverage-7.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:cd3c1e4cb2ff0083758f09be0f77402e1bdf704adb7f89108007300a6da587d0"}, + {file = "coverage-7.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e9d1bf53c4c8de58d22e0e956a79a5b37f754ed1ffdbf1a260d9dcfa2d8a325e"}, + {file = "coverage-7.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:109f5985182b6b81fe33323ab4707011875198c41964f014579cf82cebf2bb85"}, + {file = "coverage-7.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cc9d4bc55de8003663ec94c2f215d12d42ceea128da8f0f4036235a119c88ac"}, + {file = "coverage-7.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc6d65b21c219ec2072c1293c505cf36e4e913a3f936d80028993dd73c7906b1"}, + {file = "coverage-7.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a10a4920def78bbfff4eff8a05c51be03e42f1c3735be42d851f199144897ba"}, + {file = "coverage-7.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b8e99f06160602bc64da35158bb76c73522a4010f0649be44a4e167ff8555952"}, + {file = "coverage-7.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7d360587e64d006402b7116623cebf9d48893329ef035278969fa3bbf75b697e"}, + {file = "coverage-7.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:29f3abe810930311c0b5d1a7140f6395369c3db1be68345638c33eec07535105"}, + {file = "coverage-7.4.0-cp38-cp38-win32.whl", hash = "sha256:5040148f4ec43644702e7b16ca864c5314ccb8ee0751ef617d49aa0e2d6bf4f2"}, + {file = "coverage-7.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:9864463c1c2f9cb3b5db2cf1ff475eed2f0b4285c2aaf4d357b69959941aa555"}, + {file = "coverage-7.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:936d38794044b26c99d3dd004d8af0035ac535b92090f7f2bb5aa9c8e2f5cd42"}, + {file = "coverage-7.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:799c8f873794a08cdf216aa5d0531c6a3747793b70c53f70e98259720a6fe2d7"}, + {file = "coverage-7.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7defbb9737274023e2d7af02cac77043c86ce88a907c58f42b580a97d5bcca9"}, + {file = "coverage-7.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a1526d265743fb49363974b7aa8d5899ff64ee07df47dd8d3e37dcc0818f09ed"}, + {file = "coverage-7.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf635a52fc1ea401baf88843ae8708591aa4adff875e5c23220de43b1ccf575c"}, + {file = "coverage-7.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:756ded44f47f330666843b5781be126ab57bb57c22adbb07d83f6b519783b870"}, + {file = "coverage-7.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0eb3c2f32dabe3a4aaf6441dde94f35687224dfd7eb2a7f47f3fd9428e421058"}, + {file = "coverage-7.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bfd5db349d15c08311702611f3dccbef4b4e2ec148fcc636cf8739519b4a5c0f"}, + {file = "coverage-7.4.0-cp39-cp39-win32.whl", hash = "sha256:53d7d9158ee03956e0eadac38dfa1ec8068431ef8058fe6447043db1fb40d932"}, + {file = "coverage-7.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:cfd2a8b6b0d8e66e944d47cdec2f47c48fef2ba2f2dff5a9a75757f64172857e"}, + {file = "coverage-7.4.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:c530833afc4707fe48524a44844493f36d8727f04dcce91fb978c414a8556cc6"}, + {file = "coverage-7.4.0.tar.gz", hash = "sha256:707c0f58cb1712b8809ece32b68996ee1e609f71bd14615bd8f87a1293cb610e"}, ] [package.extras] @@ -638,73 +668,89 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth [[package]] name = "fastjsonschema" -version = "2.19.0" +version = "2.19.1" description = "Fastest Python implementation of JSON schema" optional = false python-versions = "*" files = [ - {file = "fastjsonschema-2.19.0-py3-none-any.whl", hash = "sha256:b9fd1a2dd6971dbc7fee280a95bd199ae0dd9ce22beb91cc75e9c1c528a5170e"}, - {file = "fastjsonschema-2.19.0.tar.gz", hash = "sha256:e25df6647e1bc4a26070b700897b07b542ec898dd4f1f6ea013e7f6a88417225"}, + {file = "fastjsonschema-2.19.1-py3-none-any.whl", hash = "sha256:3672b47bc94178c9f23dbb654bf47440155d4db9df5f7bc47643315f9c405cd0"}, + {file = "fastjsonschema-2.19.1.tar.gz", hash = "sha256:e3126a94bdc4623d3de4485f8d468a12f02a67921315ddc87836d6e456dc789d"}, ] [package.extras] devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] +[[package]] +name = "filelock" +version = "3.13.1" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.8" +files = [ + {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, + {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.24)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +typing = ["typing-extensions (>=4.8)"] + [[package]] name = "fonttools" -version = "4.44.3" +version = "4.47.0" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.44.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:192ebdb3bb1882b7ed3ad4b949a106ddd8b428d046ddce64df2d459f7a2db31b"}, - {file = "fonttools-4.44.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20898476cf9c61795107b91409f4b1cf86de6e92b41095bbe900c05b5b117c96"}, - {file = "fonttools-4.44.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:437204780611f9f80f74cd4402fa451e920d1c4b6cb474a0818a734b4affc477"}, - {file = "fonttools-4.44.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50152205ed3e16c5878a006ee53ecc402acac9af68357343be1e5c36f66ccb24"}, - {file = "fonttools-4.44.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ba9c407d8bd63b21910b98399aeec87e24ca9c3e62ea60c246e505c4a4df6c27"}, - {file = "fonttools-4.44.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:79a6babb87d7f70f8aed88f157bbdc5d2f01ad8b01e9535ff07e43e96ad25548"}, - {file = "fonttools-4.44.3-cp310-cp310-win32.whl", hash = "sha256:32e8a5cebfe8f797461b02084104053b2690ebf0cc38eda5beb9ba24ce43c349"}, - {file = "fonttools-4.44.3-cp310-cp310-win_amd64.whl", hash = "sha256:c26649a6ce6f1ce4dd6748f64b18f70e39c618c6188286ab9534a949da28164c"}, - {file = "fonttools-4.44.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5cd114cb20b491f6812aa397040b06a469563c1a01ec94c8c5d96b76d84916db"}, - {file = "fonttools-4.44.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e84084cc325f888c3495df7ec25f6133be0f606efb80a9c9e072ea6064ede9ac"}, - {file = "fonttools-4.44.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:877e36afce69cfdbd0453a4f44b16e865ac29f06df29f10f0b822a68ab858e86"}, - {file = "fonttools-4.44.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1c2cb1e2a7cfeaeb40b8823f238d7e02929b3a0b53e133e757dec5e99c327c9"}, - {file = "fonttools-4.44.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:dd752b778b37863cf5146d0112aafcd5693235831f09303809ab9c1e564c236b"}, - {file = "fonttools-4.44.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8f4e22c5128cb604d3b0b869eb8d3092a1c10cbe6def402ff46bb920f7169374"}, - {file = "fonttools-4.44.3-cp311-cp311-win32.whl", hash = "sha256:4831d948bc3cea9cd8bf0c92a087f4392068bcac3b584a61a4c837c48a012337"}, - {file = "fonttools-4.44.3-cp311-cp311-win_amd64.whl", hash = "sha256:948b35e54b0c1b6acf9d63c70515051b7d400d69b61c91377cf0e8742d71c44d"}, - {file = "fonttools-4.44.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:fad1c74aa10b77764d3cdf3481bd181d4949e0b46f2da6f9e57543d4adbda177"}, - {file = "fonttools-4.44.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b6a77e3b994649f72fb46b0b8cfe64481b5640e5aecc2d77961300a34fe1dc4f"}, - {file = "fonttools-4.44.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bff4f9d5edc10b29d2a2daeefd78a47289ba2f751c9bf247925b9d43c6efd79"}, - {file = "fonttools-4.44.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3302998e02a854a41c930f9f1366eb8092dbc5fe7ff636d86aeb28d232f4610a"}, - {file = "fonttools-4.44.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8c7985017e7fb2c2613fa5c440457cd45a6ea808f8d08ed70c27e02e6862cbbe"}, - {file = "fonttools-4.44.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:35d88af2b63060ed2b50aa00d38f60edf4c0b9275a77ae1a98e8d2c03540c617"}, - {file = "fonttools-4.44.3-cp312-cp312-win32.whl", hash = "sha256:5478a77a15d01a21c569fc4ab6f2faba852a21d0932eef02ac4c4a4b50af8070"}, - {file = "fonttools-4.44.3-cp312-cp312-win_amd64.whl", hash = "sha256:979fc845703e0d9b35bc65379fcf34d050e04c3e0b3381a0f66b0be33183da1c"}, - {file = "fonttools-4.44.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:7a8b9f22d3c147ecdc7be46f9f1e1df0523541df0535fac5bdd653726218d068"}, - {file = "fonttools-4.44.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bcb0fde94374ba00c118d632b0b5f1f4447401313166bcb14d737322928e358f"}, - {file = "fonttools-4.44.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3eb365cd8ae4765973fa036aed0077ac26f37b2f8240a72c4a29cd9d8a31027f"}, - {file = "fonttools-4.44.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c329e21502c894fe4c800e32bc3ce37c6b5ca95778d32dff17d7ebf5cac94efa"}, - {file = "fonttools-4.44.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:345a30db8adfbb868221234fb434dd2fc5bfe27baafbaf418528f6c5a5a95584"}, - {file = "fonttools-4.44.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2fe4eed749de2e6bf3aa05d18df04231a712a16c08974af5e67bb9f75a25d10f"}, - {file = "fonttools-4.44.3-cp38-cp38-win32.whl", hash = "sha256:3b179a284b73802edd6d910e6384f28098cb03bd263fd87db6abb31679f68863"}, - {file = "fonttools-4.44.3-cp38-cp38-win_amd64.whl", hash = "sha256:4c805a0b0545fd9becf6dfe8d57e45a7c1af7fdbfd0a7d776c5e999e4edec9f5"}, - {file = "fonttools-4.44.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f647d270ee90f70acbf5b31a53d486ba0897624236f9056d624c4e436386a14e"}, - {file = "fonttools-4.44.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ba82ee938bd7ea16762124a650bf2529f67dfe9999f64e0ebe1ef0a04baceafd"}, - {file = "fonttools-4.44.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3bbca4f873d96c20757c24c70a903251a8998e1931bd888b49956f21d94b441"}, - {file = "fonttools-4.44.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50b43fd55089ae850a050f0c382f13fc9586279a540b646b28b9e93fbc05b8a3"}, - {file = "fonttools-4.44.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:cde83f83919ae7569a0316e093e04022dbb8ae5217f41cf591f125dd35d4dc0d"}, - {file = "fonttools-4.44.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:72ec91b85391dd4b06991c0919215ecf910554df2842df32e928155ea5b74aef"}, - {file = "fonttools-4.44.3-cp39-cp39-win32.whl", hash = "sha256:367aa3e81a096e9a95dfc0d5afcbd0a299d857bac6d0fe5f1614c6f3e53f447f"}, - {file = "fonttools-4.44.3-cp39-cp39-win_amd64.whl", hash = "sha256:718599de63b337518bfa5ce67e4ae462da3dd582a74fbe805f56b3704eb334a1"}, - {file = "fonttools-4.44.3-py3-none-any.whl", hash = "sha256:42eefbb1babf81de40ab4a6ace6018c8c5a0d79ece0f986f73a9904b26ee511b"}, - {file = "fonttools-4.44.3.tar.gz", hash = "sha256:f77b6c0add23a3f1ec8eda40015bcb8e92796f7d06a074de102a31c7d007c05b"}, -] - -[package.extras] -all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] + {file = "fonttools-4.47.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2d2404107626f97a221dc1a65b05396d2bb2ce38e435f64f26ed2369f68675d9"}, + {file = "fonttools-4.47.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c01f409be619a9a0f5590389e37ccb58b47264939f0e8d58bfa1f3ba07d22671"}, + {file = "fonttools-4.47.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d986b66ff722ef675b7ee22fbe5947a41f60a61a4da15579d5e276d897fbc7fa"}, + {file = "fonttools-4.47.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8acf6dd0434b211b3bd30d572d9e019831aae17a54016629fa8224783b22df8"}, + {file = "fonttools-4.47.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:495369c660e0c27233e3c572269cbe520f7f4978be675f990f4005937337d391"}, + {file = "fonttools-4.47.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c59227d7ba5b232281c26ae04fac2c73a79ad0e236bca5c44aae904a18f14faf"}, + {file = "fonttools-4.47.0-cp310-cp310-win32.whl", hash = "sha256:59a6c8b71a245800e923cb684a2dc0eac19c56493e2f896218fcf2571ed28984"}, + {file = "fonttools-4.47.0-cp310-cp310-win_amd64.whl", hash = "sha256:52c82df66201f3a90db438d9d7b337c7c98139de598d0728fb99dab9fd0495ca"}, + {file = "fonttools-4.47.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:854421e328d47d70aa5abceacbe8eef231961b162c71cbe7ff3f47e235e2e5c5"}, + {file = "fonttools-4.47.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:511482df31cfea9f697930f61520f6541185fa5eeba2fa760fe72e8eee5af88b"}, + {file = "fonttools-4.47.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce0e2c88c8c985b7b9a7efcd06511fb0a1fe3ddd9a6cd2895ef1dbf9059719d7"}, + {file = "fonttools-4.47.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7a0a8848726956e9d9fb18c977a279013daadf0cbb6725d2015a6dd57527992"}, + {file = "fonttools-4.47.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e869da810ae35afb3019baa0d0306cdbab4760a54909c89ad8904fa629991812"}, + {file = "fonttools-4.47.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dd23848f877c3754f53a4903fb7a593ed100924f9b4bff7d5a4e2e8a7001ae11"}, + {file = "fonttools-4.47.0-cp311-cp311-win32.whl", hash = "sha256:bf1810635c00f7c45d93085611c995fc130009cec5abdc35b327156aa191f982"}, + {file = "fonttools-4.47.0-cp311-cp311-win_amd64.whl", hash = "sha256:61df4dee5d38ab65b26da8efd62d859a1eef7a34dcbc331299a28e24d04c59a7"}, + {file = "fonttools-4.47.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e3f4d61f3a8195eac784f1d0c16c0a3105382c1b9a74d99ac4ba421da39a8826"}, + {file = "fonttools-4.47.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:174995f7b057e799355b393e97f4f93ef1f2197cbfa945e988d49b2a09ecbce8"}, + {file = "fonttools-4.47.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea592e6a09b71cb7a7661dd93ac0b877a6228e2d677ebacbad0a4d118494c86d"}, + {file = "fonttools-4.47.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40bdbe90b33897d9cc4a39f8e415b0fcdeae4c40a99374b8a4982f127ff5c767"}, + {file = "fonttools-4.47.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:843509ae9b93db5aaf1a6302085e30bddc1111d31e11d724584818f5b698f500"}, + {file = "fonttools-4.47.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9acfa1cdc479e0dde528b61423855913d949a7f7fe09e276228298fef4589540"}, + {file = "fonttools-4.47.0-cp312-cp312-win32.whl", hash = "sha256:66c92ec7f95fd9732550ebedefcd190a8d81beaa97e89d523a0d17198a8bda4d"}, + {file = "fonttools-4.47.0-cp312-cp312-win_amd64.whl", hash = "sha256:e8fa20748de55d0021f83754b371432dca0439e02847962fc4c42a0e444c2d78"}, + {file = "fonttools-4.47.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c75e19971209fbbce891ebfd1b10c37320a5a28e8d438861c21d35305aedb81c"}, + {file = "fonttools-4.47.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e79f1a3970d25f692bbb8c8c2637e621a66c0d60c109ab48d4a160f50856deff"}, + {file = "fonttools-4.47.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:562681188c62c024fe2c611b32e08b8de2afa00c0c4e72bed47c47c318e16d5c"}, + {file = "fonttools-4.47.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a77a60315c33393b2bd29d538d1ef026060a63d3a49a9233b779261bad9c3f71"}, + {file = "fonttools-4.47.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b4fabb8cc9422efae1a925160083fdcbab8fdc96a8483441eb7457235df625bd"}, + {file = "fonttools-4.47.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2a78dba8c2a1e9d53a0fb5382979f024200dc86adc46a56cbb668a2249862fda"}, + {file = "fonttools-4.47.0-cp38-cp38-win32.whl", hash = "sha256:e6b968543fde4119231c12c2a953dcf83349590ca631ba8216a8edf9cd4d36a9"}, + {file = "fonttools-4.47.0-cp38-cp38-win_amd64.whl", hash = "sha256:4a9a51745c0439516d947480d4d884fa18bd1458e05b829e482b9269afa655bc"}, + {file = "fonttools-4.47.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:62d8ddb058b8e87018e5dc26f3258e2c30daad4c87262dfeb0e2617dd84750e6"}, + {file = "fonttools-4.47.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5dde0eab40faaa5476133123f6a622a1cc3ac9b7af45d65690870620323308b4"}, + {file = "fonttools-4.47.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4da089f6dfdb822293bde576916492cd708c37c2501c3651adde39804630538"}, + {file = "fonttools-4.47.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:253bb46bab970e8aae254cebf2ae3db98a4ef6bd034707aa68a239027d2b198d"}, + {file = "fonttools-4.47.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1193fb090061efa2f9e2d8d743ae9850c77b66746a3b32792324cdce65784154"}, + {file = "fonttools-4.47.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:084511482dd265bce6dca24c509894062f0117e4e6869384d853f46c0e6d43be"}, + {file = "fonttools-4.47.0-cp39-cp39-win32.whl", hash = "sha256:97620c4af36e4c849e52661492e31dc36916df12571cb900d16960ab8e92a980"}, + {file = "fonttools-4.47.0-cp39-cp39-win_amd64.whl", hash = "sha256:e77bdf52185bdaf63d39f3e1ac3212e6cfa3ab07d509b94557a8902ce9c13c82"}, + {file = "fonttools-4.47.0-py3-none-any.whl", hash = "sha256:d6477ba902dd2d7adda7f0fd3bfaeb92885d45993c9e1928c9f28fc3961415f7"}, + {file = "fonttools-4.47.0.tar.gz", hash = "sha256:ec13a10715eef0e031858c1c23bfaee6cba02b97558e4a7bfa089dba4a8c2ebf"}, +] + +[package.extras] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] graphite = ["lz4 (>=1.7.4.2)"] -interpolatable = ["munkres", "scipy"] +interpolatable = ["munkres", "pycairo", "scipy"] lxml = ["lxml (>=4.0,<5)"] pathops = ["skia-pathops (>=0.5.0)"] plot = ["matplotlib"] @@ -745,13 +791,13 @@ dev = ["flake8", "markdown", "twine", "wheel"] [[package]] name = "griffe" -version = "0.38.0" +version = "0.38.1" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." optional = false python-versions = ">=3.8" files = [ - {file = "griffe-0.38.0-py3-none-any.whl", hash = "sha256:6a5bc457320e8e199006aa5fbb03e162f5e21abe31aa6221f7a5c37ea0724c71"}, - {file = "griffe-0.38.0.tar.gz", hash = "sha256:9b97487b583042b543d1e28196caee638ecd766c8c4c98135071806cb5333ac2"}, + {file = "griffe-0.38.1-py3-none-any.whl", hash = "sha256:334c79d3b5964ade65c05dfcaf53518c576dedd387aaba5c9fd71212f34f1483"}, + {file = "griffe-0.38.1.tar.gz", hash = "sha256:bd68d7da7f3d87bc57eb9962b250db123efd9bbcc06c11c1a91b6e583b2a9361"}, ] [package.dependencies] @@ -759,24 +805,24 @@ colorama = ">=0.4" [[package]] name = "idna" -version = "3.4" +version = "3.6" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, ] [[package]] name = "imageio" -version = "2.31.5" +version = "2.33.1" description = "Library for reading and writing a wide range of image, video, scientific, and volumetric data formats." optional = false python-versions = ">=3.8" files = [ - {file = "imageio-2.31.5-py3-none-any.whl", hash = "sha256:97f68e12ba676f2f4b541684ed81f7f3370dc347e8321bc68ee34d37b2dbac9f"}, - {file = "imageio-2.31.5.tar.gz", hash = "sha256:d8e53f9cd4054880276a3dac0a28c85ba7874084856a55a0294a8ae6ed7f3a8e"}, + {file = "imageio-2.33.1-py3-none-any.whl", hash = "sha256:c5094c48ccf6b2e6da8b4061cd95e1209380afafcbeae4a4e280938cce227e1d"}, + {file = "imageio-2.33.1.tar.gz", hash = "sha256:78722d40b137bd98f5ec7312119f8aea9ad2049f76f434748eb306b6937cc1ce"}, ] [package.dependencies] @@ -784,17 +830,18 @@ numpy = "*" pillow = ">=8.3.2" [package.extras] -all-plugins = ["astropy", "av", "imageio-ffmpeg", "psutil", "tifffile"] -all-plugins-pypy = ["av", "imageio-ffmpeg", "psutil", "tifffile"] +all-plugins = ["astropy", "av", "imageio-ffmpeg", "pillow-heif", "psutil", "tifffile"] +all-plugins-pypy = ["av", "imageio-ffmpeg", "pillow-heif", "psutil", "tifffile"] build = ["wheel"] dev = ["black", "flake8", "fsspec[github]", "pytest", "pytest-cov"] docs = ["numpydoc", "pydata-sphinx-theme", "sphinx (<6)"] ffmpeg = ["imageio-ffmpeg", "psutil"] fits = ["astropy"] -full = ["astropy", "av", "black", "flake8", "fsspec[github]", "gdal", "imageio-ffmpeg", "itk", "numpydoc", "psutil", "pydata-sphinx-theme", "pytest", "pytest-cov", "sphinx (<6)", "tifffile", "wheel"] +full = ["astropy", "av", "black", "flake8", "fsspec[github]", "gdal", "imageio-ffmpeg", "itk", "numpydoc", "pillow-heif", "psutil", "pydata-sphinx-theme", "pytest", "pytest-cov", "sphinx (<6)", "tifffile", "wheel"] gdal = ["gdal"] itk = ["itk"] linting = ["black", "flake8"] +pillow-heif = ["pillow-heif"] pyav = ["av"] test = ["fsspec[github]", "pytest", "pytest-cov"] tifffile = ["tifffile"] @@ -812,13 +859,13 @@ files = [ [[package]] name = "ipykernel" -version = "6.26.0" +version = "6.28.0" description = "IPython Kernel for Jupyter" optional = false python-versions = ">=3.8" files = [ - {file = "ipykernel-6.26.0-py3-none-any.whl", hash = "sha256:3ba3dc97424b87b31bb46586b5167b3161b32d7820b9201a9e698c71e271602c"}, - {file = "ipykernel-6.26.0.tar.gz", hash = "sha256:553856658eb8430bbe9653ea041a41bff63e9606fc4628873fc92a6cf3abd404"}, + {file = "ipykernel-6.28.0-py3-none-any.whl", hash = "sha256:c6e9a9c63a7f4095c0a22a79f765f079f9ec7be4f2430a898ddea889e8665661"}, + {file = "ipykernel-6.28.0.tar.gz", hash = "sha256:69c11403d26de69df02225916f916b37ea4b9af417da0a8c827f84328d88e5f3"}, ] [package.dependencies] @@ -832,7 +879,7 @@ matplotlib-inline = ">=0.1" nest-asyncio = "*" packaging = "*" psutil = "*" -pyzmq = ">=20" +pyzmq = ">=24" tornado = ">=6.1" traitlets = ">=5.4.0" @@ -987,13 +1034,13 @@ files = [ [[package]] name = "jsonschema" -version = "4.19.2" +version = "4.20.0" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema-4.19.2-py3-none-any.whl", hash = "sha256:eee9e502c788e89cb166d4d37f43084e3b64ab405c795c03d343a4dbc2c810fc"}, - {file = "jsonschema-4.19.2.tar.gz", hash = "sha256:c9ff4d7447eed9592c23a12ccee508baf0dd0d59650615e847feb6cdca74f392"}, + {file = "jsonschema-4.20.0-py3-none-any.whl", hash = "sha256:ed6231f0429ecf966f5bc8dfef245998220549cbbcf140f913b7464c52c3b6b3"}, + {file = "jsonschema-4.20.0.tar.gz", hash = "sha256:4f614fd46d8d61258610998997743ec5492a648b33cf478c1ddc23ed4598a5fa"}, ] [package.dependencies] @@ -1016,13 +1063,13 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "jsonschema-specifications" -version = "2023.11.1" +version = "2023.12.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema_specifications-2023.11.1-py3-none-any.whl", hash = "sha256:f596778ab612b3fd29f72ea0d990393d0540a5aab18bf0407a46632eab540779"}, - {file = "jsonschema_specifications-2023.11.1.tar.gz", hash = "sha256:c9b234904ffe02f079bf91b14d79987faa685fd4b39c377a0996954c0090b9ca"}, + {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"}, + {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"}, ] [package.dependencies] @@ -1096,13 +1143,13 @@ test = ["flaky", "pexpect", "pytest"] [[package]] name = "jupyter-core" -version = "5.5.0" +version = "5.5.1" description = "Jupyter core package. A base package on which Jupyter projects rely." optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_core-5.5.0-py3-none-any.whl", hash = "sha256:e11e02cd8ae0a9de5c6c44abf5727df9f2581055afe00b22183f621ba3585805"}, - {file = "jupyter_core-5.5.0.tar.gz", hash = "sha256:880b86053bf298a8724994f95e99b99130659022a4f7f45f563084b6223861d3"}, + {file = "jupyter_core-5.5.1-py3-none-any.whl", hash = "sha256:220dfb00c45f0d780ce132bb7976b58263f81a3ada6e90a9b6823785a424f739"}, + {file = "jupyter_core-5.5.1.tar.gz", hash = "sha256:1553311a97ccd12936037f36b9ab4d6ae8ceea6ad2d5c90d94a909e752178e40"}, ] [package.dependencies] @@ -1141,13 +1188,13 @@ test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "p [[package]] name = "jupyter-lsp" -version = "2.2.0" +version = "2.2.1" description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter-lsp-2.2.0.tar.gz", hash = "sha256:8ebbcb533adb41e5d635eb8fe82956b0aafbf0fd443b6c4bfa906edeeb8635a1"}, - {file = "jupyter_lsp-2.2.0-py3-none-any.whl", hash = "sha256:9e06b8b4f7dd50300b70dd1a78c0c3b0c3d8fa68e0f2d8a5d1fbab62072aca3f"}, + {file = "jupyter-lsp-2.2.1.tar.gz", hash = "sha256:b17fab6d70fe83c8896b0cff59237640038247c196056b43684a0902b6a9e0fb"}, + {file = "jupyter_lsp-2.2.1-py3-none-any.whl", hash = "sha256:17a689910c5e4ae5e7d334b02f31d08ffbe98108f6f658fb05e4304b4345368b"}, ] [package.dependencies] @@ -1155,13 +1202,13 @@ jupyter-server = ">=1.1.2" [[package]] name = "jupyter-server" -version = "2.11.2" +version = "2.12.1" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_server-2.11.2-py3-none-any.whl", hash = "sha256:0c548151b54bcb516ca466ec628f7f021545be137d01b5467877e87f6fff4374"}, - {file = "jupyter_server-2.11.2.tar.gz", hash = "sha256:0c99f9367b0f24141e527544522430176613f9249849be80504c6d2b955004bb"}, + {file = "jupyter_server-2.12.1-py3-none-any.whl", hash = "sha256:fd030dd7be1ca572e4598203f718df6630c12bd28a599d7f1791c4d7938e1010"}, + {file = "jupyter_server-2.12.1.tar.gz", hash = "sha256:dc77b7dcc5fc0547acba2b2844f01798008667201eea27c6319ff9257d700a6d"}, ] [package.dependencies] @@ -1191,13 +1238,13 @@ test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-sc [[package]] name = "jupyter-server-terminals" -version = "0.4.4" +version = "0.5.1" description = "A Jupyter Server Extension Providing Terminals." optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_server_terminals-0.4.4-py3-none-any.whl", hash = "sha256:75779164661cec02a8758a5311e18bb8eb70c4e86c6b699403100f1585a12a36"}, - {file = "jupyter_server_terminals-0.4.4.tar.gz", hash = "sha256:57ab779797c25a7ba68e97bcfb5d7740f2b5e8a83b5e8102b10438041a7eac5d"}, + {file = "jupyter_server_terminals-0.5.1-py3-none-any.whl", hash = "sha256:5e63e947ddd97bb2832db5ef837a258d9ccd4192cd608c1270850ad947ae5dd7"}, + {file = "jupyter_server_terminals-0.5.1.tar.gz", hash = "sha256:16d3be9cf48be6a1f943f3a6c93c033be259cf4779184c66421709cf63dccfea"}, ] [package.dependencies] @@ -1205,18 +1252,18 @@ pywinpty = {version = ">=2.0.3", markers = "os_name == \"nt\""} terminado = ">=0.8.3" [package.extras] -docs = ["jinja2", "jupyter-server", "mistune (<3.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"] -test = ["coverage", "jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-cov", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"] +docs = ["jinja2", "jupyter-server", "mistune (<4.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"] +test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"] [[package]] name = "jupyterlab" -version = "4.0.8" +version = "4.0.10" description = "JupyterLab computational environment" optional = false python-versions = ">=3.8" files = [ - {file = "jupyterlab-4.0.8-py3-none-any.whl", hash = "sha256:2ff5aa2a51eb21df241d6011c236e88bd1ff9a5dbb75bebc54472f9c18bfffa4"}, - {file = "jupyterlab-4.0.8.tar.gz", hash = "sha256:c4fe93f977bcc987bd395d7fae5ab02e0c042bf4e0f7c95196f3e2e578c2fb3a"}, + {file = "jupyterlab-4.0.10-py3-none-any.whl", hash = "sha256:fe010ad9e37017488b468632ef2ead255fc7c671c5b64d9ca13e1f7b7e665c37"}, + {file = "jupyterlab-4.0.10.tar.gz", hash = "sha256:46177eb8ede70dc73be922ac99f8ef943bdc2dfbc6a31b353c4bde848a35dee1"}, ] [package.dependencies] @@ -1233,31 +1280,31 @@ tornado = ">=6.2.0" traitlets = "*" [package.extras] -dev = ["black[jupyter] (==23.10.1)", "build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.0.292)"] +dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.1.6)"] docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-tornasync", "sphinx (>=1.8,<7.2.0)", "sphinx-copybutton"] docs-screenshots = ["altair (==5.0.1)", "ipython (==8.14.0)", "ipywidgets (==8.0.6)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.0.post0)", "matplotlib (==3.7.1)", "nbconvert (>=7.0.0)", "pandas (==2.0.2)", "scipy (==1.10.1)", "vega-datasets (==0.9.0)"] test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] [[package]] name = "jupyterlab-pygments" -version = "0.2.2" +version = "0.3.0" description = "Pygments theme using JupyterLab CSS variables" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "jupyterlab_pygments-0.2.2-py2.py3-none-any.whl", hash = "sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f"}, - {file = "jupyterlab_pygments-0.2.2.tar.gz", hash = "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"}, + {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"}, + {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"}, ] [[package]] name = "jupyterlab-server" -version = "2.25.1" +version = "2.25.2" description = "A set of server components for JupyterLab and JupyterLab like applications." optional = false python-versions = ">=3.8" files = [ - {file = "jupyterlab_server-2.25.1-py3-none-any.whl", hash = "sha256:dce9714d91fb3e53d2b37d0e0619fa26ed223c8e7b8c81cca112926de19b53a4"}, - {file = "jupyterlab_server-2.25.1.tar.gz", hash = "sha256:6491283b0000698eae1a38c48507930560dfcf7461aea0015368698aab34dd9c"}, + {file = "jupyterlab_server-2.25.2-py3-none-any.whl", hash = "sha256:5b1798c9cc6a44f65c757de9f97fc06fc3d42535afbf47d2ace5e964ab447aaf"}, + {file = "jupyterlab_server-2.25.2.tar.gz", hash = "sha256:bd0ec7a99ebcedc8bcff939ef86e52c378e44c2707e053fcd81d046ce979ee63"}, ] [package.dependencies] @@ -1287,25 +1334,32 @@ files = [ [[package]] name = "jupytext" -version = "1.15.2" +version = "1.16.0" description = "Jupyter notebooks as Markdown documents, Julia, Python or R scripts" optional = false -python-versions = "~=3.6" +python-versions = ">=3.8" files = [ - {file = "jupytext-1.15.2-py3-none-any.whl", hash = "sha256:ef2a1a3eb8f63d84a3b3772014bdfbe238e4e12a30c4309b8c89e0a54adeb7d1"}, - {file = "jupytext-1.15.2.tar.gz", hash = "sha256:c9976e24d834e991906c1de55af4b6d512d764f6372aabae45fc1ea72b589173"}, + {file = "jupytext-1.16.0-py3-none-any.whl", hash = "sha256:c2b951ac72871f39cd6cd242b56bc43219b7ed8169598bae5359811fb1f54d28"}, + {file = "jupytext-1.16.0.tar.gz", hash = "sha256:94c7e67775e90e1792c39ab7fca4e0459bf7c35656123e8dc2e9e1b3e953baf8"}, ] [package.dependencies] markdown-it-py = ">=1.0.0" mdit-py-plugins = "*" nbformat = "*" +packaging = "*" pyyaml = "*" toml = "*" [package.extras] -rst2md = ["sphinx-gallery (>=0.7.0,<0.8.0)"] -toml = ["toml"] +dev = ["jupytext[test-cov,test-external]"] +docs = ["myst-parser", "sphinx", "sphinx-copybutton", "sphinx-rtd-theme"] +test = ["pytest", "pytest-randomly", "pytest-xdist"] +test-cov = ["jupytext[test-integration]", "pytest-cov (>=2.6.1)"] +test-external = ["autopep8", "black", "flake8", "gitpython", "isort", "jupyter-fs (<0.4.0)", "jupytext[test-integration]", "pre-commit", "sphinx-gallery (<0.8)"] +test-functional = ["jupytext[test]"] +test-integration = ["ipykernel", "jupyter-server (!=2.11)", "jupytext[test-functional]", "nbconvert"] +test-ui = ["calysto-bash"] [[package]] name = "kiwisolver" @@ -1555,6 +1609,16 @@ files = [ [package.dependencies] rapidfuzz = ">=3.1.0,<4.0.0" +[[package]] +name = "lit" +version = "17.0.6" +description = "A Software Testing Tool" +optional = false +python-versions = "*" +files = [ + {file = "lit-17.0.6.tar.gz", hash = "sha256:dfa9af9b55fc4509a56be7bf2346f079d7f4a242d583b9f2e0b078fd0abae31b"}, +] + [[package]] name = "markdown" version = "3.5.1" @@ -1924,13 +1988,13 @@ recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2. [[package]] name = "mkdocs-material-extensions" -version = "1.3" +version = "1.3.1" description = "Extension pack for Python Markdown and MkDocs Material." optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material_extensions-1.3-py3-none-any.whl", hash = "sha256:0297cc48ba68a9fdd1ef3780a3b41b534b0d0df1d1181a44676fda5f464eeadc"}, - {file = "mkdocs_material_extensions-1.3.tar.gz", hash = "sha256:f0446091503acb110a7cab9349cbc90eeac51b58d1caa92a704a81ca1e24ddbd"}, + {file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"}, + {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, ] [[package]] @@ -1988,6 +2052,23 @@ files = [ griffe = ">=0.37" mkdocstrings = ">=0.20" +[[package]] +name = "mpmath" +version = "1.3.0" +description = "Python library for arbitrary-precision floating-point arithmetic" +optional = false +python-versions = "*" +files = [ + {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, + {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, +] + +[package.extras] +develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"] +docs = ["sphinx"] +gmpy = ["gmpy2 (>=2.1.0a4)"] +tests = ["pytest (>=4.6)"] + [[package]] name = "nbclient" version = "0.9.0" @@ -2012,13 +2093,13 @@ test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>= [[package]] name = "nbconvert" -version = "7.11.0" +version = "7.13.1" description = "Converting Jupyter Notebooks" optional = false python-versions = ">=3.8" files = [ - {file = "nbconvert-7.11.0-py3-none-any.whl", hash = "sha256:d1d417b7f34a4e38887f8da5bdfd12372adf3b80f995d57556cb0972c68909fe"}, - {file = "nbconvert-7.11.0.tar.gz", hash = "sha256:abedc01cf543177ffde0bfc2a69726d5a478f6af10a332fc1bf29fcb4f0cf000"}, + {file = "nbconvert-7.13.1-py3-none-any.whl", hash = "sha256:3c50eb2d326478cc90b8759cf2ab9dde3d892c6537cd6a5bc0991db8ef734bcc"}, + {file = "nbconvert-7.13.1.tar.gz", hash = "sha256:2dc8267dbdfeedce2dcd34c9e3f1b51af18f43cb105549d1c5a18189ec23ba85"}, ] [package.dependencies] @@ -2044,7 +2125,7 @@ docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sp qtpdf = ["nbconvert[qtpng]"] qtpng = ["pyqtwebengine (>=5.15)"] serve = ["tornado (>=6.1)"] -test = ["flaky", "ipykernel", "ipywidgets (>=7)", "pytest"] +test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest"] webpdf = ["playwright"] [[package]] @@ -2230,36 +2311,36 @@ files = [ [[package]] name = "pandas" -version = "2.1.3" +version = "2.1.4" description = "Powerful data structures for data analysis, time series, and statistics" optional = false python-versions = ">=3.9" files = [ - {file = "pandas-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:acf08a73b5022b479c1be155d4988b72f3020f308f7a87c527702c5f8966d34f"}, - {file = "pandas-2.1.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3cc4469ff0cf9aa3a005870cb49ab8969942b7156e0a46cc3f5abd6b11051dfb"}, - {file = "pandas-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35172bff95f598cc5866c047f43c7f4df2c893acd8e10e6653a4b792ed7f19bb"}, - {file = "pandas-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59dfe0e65a2f3988e940224e2a70932edc964df79f3356e5f2997c7d63e758b4"}, - {file = "pandas-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0296a66200dee556850d99b24c54c7dfa53a3264b1ca6f440e42bad424caea03"}, - {file = "pandas-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:465571472267a2d6e00657900afadbe6097c8e1dc43746917db4dfc862e8863e"}, - {file = "pandas-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:04d4c58e1f112a74689da707be31cf689db086949c71828ef5da86727cfe3f82"}, - {file = "pandas-2.1.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7fa2ad4ff196768ae63a33f8062e6838efed3a319cf938fdf8b95e956c813042"}, - {file = "pandas-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4441ac94a2a2613e3982e502ccec3bdedefe871e8cea54b8775992485c5660ef"}, - {file = "pandas-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5ded6ff28abbf0ea7689f251754d3789e1edb0c4d0d91028f0b980598418a58"}, - {file = "pandas-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fca5680368a5139d4920ae3dc993eb5106d49f814ff24018b64d8850a52c6ed2"}, - {file = "pandas-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:de21e12bf1511190fc1e9ebc067f14ca09fccfb189a813b38d63211d54832f5f"}, - {file = "pandas-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a5d53c725832e5f1645e7674989f4c106e4b7249c1d57549023ed5462d73b140"}, - {file = "pandas-2.1.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7cf4cf26042476e39394f1f86868d25b265ff787c9b2f0d367280f11afbdee6d"}, - {file = "pandas-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72c84ec1b1d8e5efcbff5312abe92bfb9d5b558f11e0cf077f5496c4f4a3c99e"}, - {file = "pandas-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f539e113739a3e0cc15176bf1231a553db0239bfa47a2c870283fd93ba4f683"}, - {file = "pandas-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fc77309da3b55732059e484a1efc0897f6149183c522390772d3561f9bf96c00"}, - {file = "pandas-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:08637041279b8981a062899da0ef47828df52a1838204d2b3761fbd3e9fcb549"}, - {file = "pandas-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b99c4e51ef2ed98f69099c72c75ec904dd610eb41a32847c4fcbc1a975f2d2b8"}, - {file = "pandas-2.1.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f7ea8ae8004de0381a2376662c0505bb0a4f679f4c61fbfd122aa3d1b0e5f09d"}, - {file = "pandas-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcd76d67ca2d48f56e2db45833cf9d58f548f97f61eecd3fdc74268417632b8a"}, - {file = "pandas-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1329dbe93a880a3d7893149979caa82d6ba64a25e471682637f846d9dbc10dd2"}, - {file = "pandas-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:321ecdb117bf0f16c339cc6d5c9a06063854f12d4d9bc422a84bb2ed3207380a"}, - {file = "pandas-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:11a771450f36cebf2a4c9dbd3a19dfa8c46c4b905a3ea09dc8e556626060fe71"}, - {file = "pandas-2.1.3.tar.gz", hash = "sha256:22929f84bca106921917eb73c1521317ddd0a4c71b395bcf767a106e3494209f"}, + {file = "pandas-2.1.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bdec823dc6ec53f7a6339a0e34c68b144a7a1fd28d80c260534c39c62c5bf8c9"}, + {file = "pandas-2.1.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:294d96cfaf28d688f30c918a765ea2ae2e0e71d3536754f4b6de0ea4a496d034"}, + {file = "pandas-2.1.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b728fb8deba8905b319f96447a27033969f3ea1fea09d07d296c9030ab2ed1d"}, + {file = "pandas-2.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00028e6737c594feac3c2df15636d73ace46b8314d236100b57ed7e4b9ebe8d9"}, + {file = "pandas-2.1.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:426dc0f1b187523c4db06f96fb5c8d1a845e259c99bda74f7de97bd8a3bb3139"}, + {file = "pandas-2.1.4-cp310-cp310-win_amd64.whl", hash = "sha256:f237e6ca6421265643608813ce9793610ad09b40154a3344a088159590469e46"}, + {file = "pandas-2.1.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b7d852d16c270e4331f6f59b3e9aa23f935f5c4b0ed2d0bc77637a8890a5d092"}, + {file = "pandas-2.1.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd7d5f2f54f78164b3d7a40f33bf79a74cdee72c31affec86bfcabe7e0789821"}, + {file = "pandas-2.1.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0aa6e92e639da0d6e2017d9ccff563222f4eb31e4b2c3cf32a2a392fc3103c0d"}, + {file = "pandas-2.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d797591b6846b9db79e65dc2d0d48e61f7db8d10b2a9480b4e3faaddc421a171"}, + {file = "pandas-2.1.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d2d3e7b00f703aea3945995ee63375c61b2e6aa5aa7871c5d622870e5e137623"}, + {file = "pandas-2.1.4-cp311-cp311-win_amd64.whl", hash = "sha256:dc9bf7ade01143cddc0074aa6995edd05323974e6e40d9dbde081021ded8510e"}, + {file = "pandas-2.1.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:482d5076e1791777e1571f2e2d789e940dedd927325cc3cb6d0800c6304082f6"}, + {file = "pandas-2.1.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8a706cfe7955c4ca59af8c7a0517370eafbd98593155b48f10f9811da440248b"}, + {file = "pandas-2.1.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0513a132a15977b4a5b89aabd304647919bc2169eac4c8536afb29c07c23540"}, + {file = "pandas-2.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9f17f2b6fc076b2a0078862547595d66244db0f41bf79fc5f64a5c4d635bead"}, + {file = "pandas-2.1.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:45d63d2a9b1b37fa6c84a68ba2422dc9ed018bdaa668c7f47566a01188ceeec1"}, + {file = "pandas-2.1.4-cp312-cp312-win_amd64.whl", hash = "sha256:f69b0c9bb174a2342818d3e2778584e18c740d56857fc5cdb944ec8bbe4082cf"}, + {file = "pandas-2.1.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3f06bda01a143020bad20f7a85dd5f4a1600112145f126bc9e3e42077c24ef34"}, + {file = "pandas-2.1.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ab5796839eb1fd62a39eec2916d3e979ec3130509930fea17fe6f81e18108f6a"}, + {file = "pandas-2.1.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edbaf9e8d3a63a9276d707b4d25930a262341bca9874fcb22eff5e3da5394732"}, + {file = "pandas-2.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ebfd771110b50055712b3b711b51bee5d50135429364d0498e1213a7adc2be8"}, + {file = "pandas-2.1.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8ea107e0be2aba1da619cc6ba3f999b2bfc9669a83554b1904ce3dd9507f0860"}, + {file = "pandas-2.1.4-cp39-cp39-win_amd64.whl", hash = "sha256:d65148b14788b3758daf57bf42725caa536575da2b64df9964c563b015230984"}, + {file = "pandas-2.1.4.tar.gz", hash = "sha256:fcb68203c833cc735321512e13861358079a96c174a61f5116a1de89c58c0ef7"}, ] [package.dependencies] @@ -2320,24 +2401,24 @@ testing = ["docopt", "pytest (<6.0.0)"] [[package]] name = "pathspec" -version = "0.11.2" +version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, - {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, ] [[package]] name = "pexpect" -version = "4.8.0" +version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." optional = false python-versions = "*" files = [ - {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, - {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, + {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, + {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, ] [package.dependencies] @@ -2412,13 +2493,13 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa [[package]] name = "platformdirs" -version = "4.0.0" +version = "4.1.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "platformdirs-4.0.0-py3-none-any.whl", hash = "sha256:118c954d7e949b35437270383a3f2531e99dd93cf7ce4dc8340d3356d30f173b"}, - {file = "platformdirs-4.0.0.tar.gz", hash = "sha256:cb633b2bcf10c51af60beb0ab06d2f1d69064b43abf4c185ca6b28865f3f9731"}, + {file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"}, + {file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"}, ] [package.extras] @@ -2442,13 +2523,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "prometheus-client" -version = "0.18.0" +version = "0.19.0" description = "Python client for the Prometheus monitoring system." optional = false python-versions = ">=3.8" files = [ - {file = "prometheus_client-0.18.0-py3-none-any.whl", hash = "sha256:8de3ae2755f890826f4b6479e5571d4f74ac17a81345fe69a6778fdb92579184"}, - {file = "prometheus_client-0.18.0.tar.gz", hash = "sha256:35f7a8c22139e2bb7ca5a698e92d38145bc8dc74c1c0bf56f25cca886a764e17"}, + {file = "prometheus_client-0.19.0-py3-none-any.whl", hash = "sha256:c88b1e6ecf6b41cd8fb5731c7ae919bf66df6ec6fafa555cd6c0e16ca169ae92"}, + {file = "prometheus_client-0.19.0.tar.gz", hash = "sha256:4585b0d1223148c27a225b10dbec5ae9bc4c81a99a3fa80774fa6209935324e1"}, ] [package.extras] @@ -2456,13 +2537,13 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.41" +version = "3.0.43" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.41-py3-none-any.whl", hash = "sha256:f36fe301fafb7470e86aaf90f036eef600a3210be4decf461a5b1ca8403d3cb2"}, - {file = "prompt_toolkit-3.0.41.tar.gz", hash = "sha256:941367d97fc815548822aa26c2a269fdc4eb21e9ec05fc5d447cf09bad5d75f0"}, + {file = "prompt_toolkit-3.0.43-py3-none-any.whl", hash = "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6"}, + {file = "prompt_toolkit-3.0.43.tar.gz", hash = "sha256:3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d"}, ] [package.dependencies] @@ -2470,27 +2551,27 @@ wcwidth = "*" [[package]] name = "psutil" -version = "5.9.6" +version = "5.9.7" description = "Cross-platform lib for process and system monitoring in Python." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ - {file = "psutil-5.9.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:fb8a697f11b0f5994550555fcfe3e69799e5b060c8ecf9e2f75c69302cc35c0d"}, - {file = "psutil-5.9.6-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:91ecd2d9c00db9817a4b4192107cf6954addb5d9d67a969a4f436dbc9200f88c"}, - {file = "psutil-5.9.6-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:10e8c17b4f898d64b121149afb136c53ea8b68c7531155147867b7b1ac9e7e28"}, - {file = "psutil-5.9.6-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:18cd22c5db486f33998f37e2bb054cc62fd06646995285e02a51b1e08da97017"}, - {file = "psutil-5.9.6-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:ca2780f5e038379e520281e4c032dddd086906ddff9ef0d1b9dcf00710e5071c"}, - {file = "psutil-5.9.6-cp27-none-win32.whl", hash = "sha256:70cb3beb98bc3fd5ac9ac617a327af7e7f826373ee64c80efd4eb2856e5051e9"}, - {file = "psutil-5.9.6-cp27-none-win_amd64.whl", hash = "sha256:51dc3d54607c73148f63732c727856f5febec1c7c336f8f41fcbd6315cce76ac"}, - {file = "psutil-5.9.6-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c69596f9fc2f8acd574a12d5f8b7b1ba3765a641ea5d60fb4736bf3c08a8214a"}, - {file = "psutil-5.9.6-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92e0cc43c524834af53e9d3369245e6cc3b130e78e26100d1f63cdb0abeb3d3c"}, - {file = "psutil-5.9.6-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:748c9dd2583ed86347ed65d0035f45fa8c851e8d90354c122ab72319b5f366f4"}, - {file = "psutil-5.9.6-cp36-cp36m-win32.whl", hash = "sha256:3ebf2158c16cc69db777e3c7decb3c0f43a7af94a60d72e87b2823aebac3d602"}, - {file = "psutil-5.9.6-cp36-cp36m-win_amd64.whl", hash = "sha256:ff18b8d1a784b810df0b0fff3bcb50ab941c3b8e2c8de5726f9c71c601c611aa"}, - {file = "psutil-5.9.6-cp37-abi3-win32.whl", hash = "sha256:a6f01f03bf1843280f4ad16f4bde26b817847b4c1a0db59bf6419807bc5ce05c"}, - {file = "psutil-5.9.6-cp37-abi3-win_amd64.whl", hash = "sha256:6e5fb8dc711a514da83098bc5234264e551ad980cec5f85dabf4d38ed6f15e9a"}, - {file = "psutil-5.9.6-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:daecbcbd29b289aac14ece28eca6a3e60aa361754cf6da3dfb20d4d32b6c7f57"}, - {file = "psutil-5.9.6.tar.gz", hash = "sha256:e4b92ddcd7dd4cdd3f900180ea1e104932c7bce234fb88976e2a3b296441225a"}, + {file = "psutil-5.9.7-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:0bd41bf2d1463dfa535942b2a8f0e958acf6607ac0be52265ab31f7923bcd5e6"}, + {file = "psutil-5.9.7-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:5794944462509e49d4d458f4dbfb92c47539e7d8d15c796f141f474010084056"}, + {file = "psutil-5.9.7-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:fe361f743cb3389b8efda21980d93eb55c1f1e3898269bc9a2a1d0bb7b1f6508"}, + {file = "psutil-5.9.7-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:e469990e28f1ad738f65a42dcfc17adaed9d0f325d55047593cb9033a0ab63df"}, + {file = "psutil-5.9.7-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:3c4747a3e2ead1589e647e64aad601981f01b68f9398ddf94d01e3dc0d1e57c7"}, + {file = "psutil-5.9.7-cp27-none-win32.whl", hash = "sha256:1d4bc4a0148fdd7fd8f38e0498639ae128e64538faa507df25a20f8f7fb2341c"}, + {file = "psutil-5.9.7-cp27-none-win_amd64.whl", hash = "sha256:4c03362e280d06bbbfcd52f29acd79c733e0af33d707c54255d21029b8b32ba6"}, + {file = "psutil-5.9.7-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ea36cc62e69a13ec52b2f625c27527f6e4479bca2b340b7a452af55b34fcbe2e"}, + {file = "psutil-5.9.7-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1132704b876e58d277168cd729d64750633d5ff0183acf5b3c986b8466cd0284"}, + {file = "psutil-5.9.7-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe8b7f07948f1304497ce4f4684881250cd859b16d06a1dc4d7941eeb6233bfe"}, + {file = "psutil-5.9.7-cp36-cp36m-win32.whl", hash = "sha256:b27f8fdb190c8c03914f908a4555159327d7481dac2f01008d483137ef3311a9"}, + {file = "psutil-5.9.7-cp36-cp36m-win_amd64.whl", hash = "sha256:44969859757f4d8f2a9bd5b76eba8c3099a2c8cf3992ff62144061e39ba8568e"}, + {file = "psutil-5.9.7-cp37-abi3-win32.whl", hash = "sha256:c727ca5a9b2dd5193b8644b9f0c883d54f1248310023b5ad3e92036c5e2ada68"}, + {file = "psutil-5.9.7-cp37-abi3-win_amd64.whl", hash = "sha256:f37f87e4d73b79e6c5e749440c3113b81d1ee7d26f21c19c47371ddea834f414"}, + {file = "psutil-5.9.7-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:032f4f2c909818c86cea4fe2cc407f1c0f0cde8e6c6d702b28b8ce0c0d143340"}, + {file = "psutil-5.9.7.tar.gz", hash = "sha256:3f02134e82cfb5d089fddf20bb2e03fd5cd52395321d1c8458a9e58500ff417c"}, ] [package.extras] @@ -2534,31 +2615,32 @@ files = [ [[package]] name = "pygments" -version = "2.16.1" +version = "2.17.2" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.7" files = [ - {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, - {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, + {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, + {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, ] [package.extras] plugins = ["importlib-metadata"] +windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pymdown-extensions" -version = "10.4" +version = "10.7" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" files = [ - {file = "pymdown_extensions-10.4-py3-none-any.whl", hash = "sha256:cfc28d6a09d19448bcbf8eee3ce098c7d17ff99f7bd3069db4819af181212037"}, - {file = "pymdown_extensions-10.4.tar.gz", hash = "sha256:bc46f11749ecd4d6b71cf62396104b4a200bad3498cb0f5dad1b8502fe461a35"}, + {file = "pymdown_extensions-10.7-py3-none-any.whl", hash = "sha256:6ca215bc57bc12bf32b414887a68b810637d039124ed9b2e5bd3325cbb2c050c"}, + {file = "pymdown_extensions-10.7.tar.gz", hash = "sha256:c0d64d5cf62566f59e6b2b690a4095c931107c250a8c8e1351c1de5f6b036deb"}, ] [package.dependencies] -markdown = ">=3.2" +markdown = ">=3.5" pyyaml = "*" [package.extras] @@ -2765,104 +2847,104 @@ pyyaml = "*" [[package]] name = "pyzmq" -version = "25.1.1" +version = "25.1.2" description = "Python bindings for 0MQ" optional = false python-versions = ">=3.6" files = [ - {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:381469297409c5adf9a0e884c5eb5186ed33137badcbbb0560b86e910a2f1e76"}, - {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:955215ed0604dac5b01907424dfa28b40f2b2292d6493445dd34d0dfa72586a8"}, - {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:985bbb1316192b98f32e25e7b9958088431d853ac63aca1d2c236f40afb17c83"}, - {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:afea96f64efa98df4da6958bae37f1cbea7932c35878b185e5982821bc883369"}, - {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76705c9325d72a81155bb6ab48d4312e0032bf045fb0754889133200f7a0d849"}, - {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:77a41c26205d2353a4c94d02be51d6cbdf63c06fbc1295ea57dad7e2d3381b71"}, - {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:12720a53e61c3b99d87262294e2b375c915fea93c31fc2336898c26d7aed34cd"}, - {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:57459b68e5cd85b0be8184382cefd91959cafe79ae019e6b1ae6e2ba8a12cda7"}, - {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:292fe3fc5ad4a75bc8df0dfaee7d0babe8b1f4ceb596437213821f761b4589f9"}, - {file = "pyzmq-25.1.1-cp310-cp310-win32.whl", hash = "sha256:35b5ab8c28978fbbb86ea54958cd89f5176ce747c1fb3d87356cf698048a7790"}, - {file = "pyzmq-25.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:11baebdd5fc5b475d484195e49bae2dc64b94a5208f7c89954e9e354fc609d8f"}, - {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:d20a0ddb3e989e8807d83225a27e5c2eb2260eaa851532086e9e0fa0d5287d83"}, - {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e1c1be77bc5fb77d923850f82e55a928f8638f64a61f00ff18a67c7404faf008"}, - {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d89528b4943d27029a2818f847c10c2cecc79fa9590f3cb1860459a5be7933eb"}, - {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90f26dc6d5f241ba358bef79be9ce06de58d477ca8485e3291675436d3827cf8"}, - {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2b92812bd214018e50b6380ea3ac0c8bb01ac07fcc14c5f86a5bb25e74026e9"}, - {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:2f957ce63d13c28730f7fd6b72333814221c84ca2421298f66e5143f81c9f91f"}, - {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:047a640f5c9c6ade7b1cc6680a0e28c9dd5a0825135acbd3569cc96ea00b2505"}, - {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7f7e58effd14b641c5e4dec8c7dab02fb67a13df90329e61c869b9cc607ef752"}, - {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c2910967e6ab16bf6fbeb1f771c89a7050947221ae12a5b0b60f3bca2ee19bca"}, - {file = "pyzmq-25.1.1-cp311-cp311-win32.whl", hash = "sha256:76c1c8efb3ca3a1818b837aea423ff8a07bbf7aafe9f2f6582b61a0458b1a329"}, - {file = "pyzmq-25.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:44e58a0554b21fc662f2712814a746635ed668d0fbc98b7cb9d74cb798d202e6"}, - {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:e1ffa1c924e8c72778b9ccd386a7067cddf626884fd8277f503c48bb5f51c762"}, - {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1af379b33ef33757224da93e9da62e6471cf4a66d10078cf32bae8127d3d0d4a"}, - {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cff084c6933680d1f8b2f3b4ff5bbb88538a4aac00d199ac13f49d0698727ecb"}, - {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2400a94f7dd9cb20cd012951a0cbf8249e3d554c63a9c0cdfd5cbb6c01d2dec"}, - {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d81f1ddae3858b8299d1da72dd7d19dd36aab654c19671aa8a7e7fb02f6638a"}, - {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:255ca2b219f9e5a3a9ef3081512e1358bd4760ce77828e1028b818ff5610b87b"}, - {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a882ac0a351288dd18ecae3326b8a49d10c61a68b01419f3a0b9a306190baf69"}, - {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:724c292bb26365659fc434e9567b3f1adbdb5e8d640c936ed901f49e03e5d32e"}, - {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ca1ed0bb2d850aa8471387882247c68f1e62a4af0ce9c8a1dbe0d2bf69e41fb"}, - {file = "pyzmq-25.1.1-cp312-cp312-win32.whl", hash = "sha256:b3451108ab861040754fa5208bca4a5496c65875710f76789a9ad27c801a0075"}, - {file = "pyzmq-25.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:eadbefd5e92ef8a345f0525b5cfd01cf4e4cc651a2cffb8f23c0dd184975d787"}, - {file = "pyzmq-25.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:db0b2af416ba735c6304c47f75d348f498b92952f5e3e8bff449336d2728795d"}, - {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c133e93b405eb0d36fa430c94185bdd13c36204a8635470cccc200723c13bb"}, - {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:273bc3959bcbff3f48606b28229b4721716598d76b5aaea2b4a9d0ab454ec062"}, - {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cbc8df5c6a88ba5ae385d8930da02201165408dde8d8322072e3e5ddd4f68e22"}, - {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:18d43df3f2302d836f2a56f17e5663e398416e9dd74b205b179065e61f1a6edf"}, - {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:73461eed88a88c866656e08f89299720a38cb4e9d34ae6bf5df6f71102570f2e"}, - {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:34c850ce7976d19ebe7b9d4b9bb8c9dfc7aac336c0958e2651b88cbd46682123"}, - {file = "pyzmq-25.1.1-cp36-cp36m-win32.whl", hash = "sha256:d2045d6d9439a0078f2a34b57c7b18c4a6aef0bee37f22e4ec9f32456c852c71"}, - {file = "pyzmq-25.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:458dea649f2f02a0b244ae6aef8dc29325a2810aa26b07af8374dc2a9faf57e3"}, - {file = "pyzmq-25.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7cff25c5b315e63b07a36f0c2bab32c58eafbe57d0dce61b614ef4c76058c115"}, - {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1579413ae492b05de5a6174574f8c44c2b9b122a42015c5292afa4be2507f28"}, - {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3d0a409d3b28607cc427aa5c30a6f1e4452cc44e311f843e05edb28ab5e36da0"}, - {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21eb4e609a154a57c520e3d5bfa0d97e49b6872ea057b7c85257b11e78068222"}, - {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:034239843541ef7a1aee0c7b2cb7f6aafffb005ede965ae9cbd49d5ff4ff73cf"}, - {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f8115e303280ba09f3898194791a153862cbf9eef722ad8f7f741987ee2a97c7"}, - {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1a5d26fe8f32f137e784f768143728438877d69a586ddeaad898558dc971a5ae"}, - {file = "pyzmq-25.1.1-cp37-cp37m-win32.whl", hash = "sha256:f32260e556a983bc5c7ed588d04c942c9a8f9c2e99213fec11a031e316874c7e"}, - {file = "pyzmq-25.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:abf34e43c531bbb510ae7e8f5b2b1f2a8ab93219510e2b287a944432fad135f3"}, - {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:87e34f31ca8f168c56d6fbf99692cc8d3b445abb5bfd08c229ae992d7547a92a"}, - {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c9c6c9b2c2f80747a98f34ef491c4d7b1a8d4853937bb1492774992a120f475d"}, - {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5619f3f5a4db5dbb572b095ea3cb5cc035335159d9da950830c9c4db2fbb6995"}, - {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5a34d2395073ef862b4032343cf0c32a712f3ab49d7ec4f42c9661e0294d106f"}, - {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25f0e6b78220aba09815cd1f3a32b9c7cb3e02cb846d1cfc526b6595f6046618"}, - {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3669cf8ee3520c2f13b2e0351c41fea919852b220988d2049249db10046a7afb"}, - {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2d163a18819277e49911f7461567bda923461c50b19d169a062536fffe7cd9d2"}, - {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:df27ffddff4190667d40de7beba4a950b5ce78fe28a7dcc41d6f8a700a80a3c0"}, - {file = "pyzmq-25.1.1-cp38-cp38-win32.whl", hash = "sha256:a382372898a07479bd34bda781008e4a954ed8750f17891e794521c3e21c2e1c"}, - {file = "pyzmq-25.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:52533489f28d62eb1258a965f2aba28a82aa747202c8fa5a1c7a43b5db0e85c1"}, - {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:03b3f49b57264909aacd0741892f2aecf2f51fb053e7d8ac6767f6c700832f45"}, - {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:330f9e188d0d89080cde66dc7470f57d1926ff2fb5576227f14d5be7ab30b9fa"}, - {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2ca57a5be0389f2a65e6d3bb2962a971688cbdd30b4c0bd188c99e39c234f414"}, - {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d457aed310f2670f59cc5b57dcfced452aeeed77f9da2b9763616bd57e4dbaae"}, - {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c56d748ea50215abef7030c72b60dd723ed5b5c7e65e7bc2504e77843631c1a6"}, - {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8f03d3f0d01cb5a018debeb412441996a517b11c5c17ab2001aa0597c6d6882c"}, - {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:820c4a08195a681252f46926de10e29b6bbf3e17b30037bd4250d72dd3ddaab8"}, - {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:17ef5f01d25b67ca8f98120d5fa1d21efe9611604e8eb03a5147360f517dd1e2"}, - {file = "pyzmq-25.1.1-cp39-cp39-win32.whl", hash = "sha256:04ccbed567171579ec2cebb9c8a3e30801723c575601f9a990ab25bcac6b51e2"}, - {file = "pyzmq-25.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:e61f091c3ba0c3578411ef505992d356a812fb200643eab27f4f70eed34a29ef"}, - {file = "pyzmq-25.1.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ade6d25bb29c4555d718ac6d1443a7386595528c33d6b133b258f65f963bb0f6"}, - {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0c95ddd4f6e9fca4e9e3afaa4f9df8552f0ba5d1004e89ef0a68e1f1f9807c7"}, - {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48e466162a24daf86f6b5ca72444d2bf39a5e58da5f96370078be67c67adc978"}, - {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abc719161780932c4e11aaebb203be3d6acc6b38d2f26c0f523b5b59d2fc1996"}, - {file = "pyzmq-25.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ccf825981640b8c34ae54231b7ed00271822ea1c6d8ba1090ebd4943759abf5"}, - {file = "pyzmq-25.1.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c2f20ce161ebdb0091a10c9ca0372e023ce24980d0e1f810f519da6f79c60800"}, - {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:deee9ca4727f53464daf089536e68b13e6104e84a37820a88b0a057b97bba2d2"}, - {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aa8d6cdc8b8aa19ceb319aaa2b660cdaccc533ec477eeb1309e2a291eaacc43a"}, - {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:019e59ef5c5256a2c7378f2fb8560fc2a9ff1d315755204295b2eab96b254d0a"}, - {file = "pyzmq-25.1.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:b9af3757495c1ee3b5c4e945c1df7be95562277c6e5bccc20a39aec50f826cd0"}, - {file = "pyzmq-25.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:548d6482dc8aadbe7e79d1b5806585c8120bafa1ef841167bc9090522b610fa6"}, - {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:057e824b2aae50accc0f9a0570998adc021b372478a921506fddd6c02e60308e"}, - {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2243700cc5548cff20963f0ca92d3e5e436394375ab8a354bbea2b12911b20b0"}, - {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79986f3b4af059777111409ee517da24a529bdbd46da578b33f25580adcff728"}, - {file = "pyzmq-25.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:11d58723d44d6ed4dd677c5615b2ffb19d5c426636345567d6af82be4dff8a55"}, - {file = "pyzmq-25.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:49d238cf4b69652257db66d0c623cd3e09b5d2e9576b56bc067a396133a00d4a"}, - {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fedbdc753827cf014c01dbbee9c3be17e5a208dcd1bf8641ce2cd29580d1f0d4"}, - {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc16ac425cc927d0a57d242589f87ee093884ea4804c05a13834d07c20db203c"}, - {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11c1d2aed9079c6b0c9550a7257a836b4a637feb334904610f06d70eb44c56d2"}, - {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e8a701123029cc240cea61dd2d16ad57cab4691804143ce80ecd9286b464d180"}, - {file = "pyzmq-25.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:61706a6b6c24bdece85ff177fec393545a3191eeda35b07aaa1458a027ad1304"}, - {file = "pyzmq-25.1.1.tar.gz", hash = "sha256:259c22485b71abacdfa8bf79720cd7bcf4b9d128b30ea554f01ae71fdbfdaa23"}, + {file = "pyzmq-25.1.2-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:e624c789359f1a16f83f35e2c705d07663ff2b4d4479bad35621178d8f0f6ea4"}, + {file = "pyzmq-25.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:49151b0efece79f6a79d41a461d78535356136ee70084a1c22532fc6383f4ad0"}, + {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9a5f194cf730f2b24d6af1f833c14c10f41023da46a7f736f48b6d35061e76e"}, + {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:faf79a302f834d9e8304fafdc11d0d042266667ac45209afa57e5efc998e3872"}, + {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f51a7b4ead28d3fca8dda53216314a553b0f7a91ee8fc46a72b402a78c3e43d"}, + {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:0ddd6d71d4ef17ba5a87becf7ddf01b371eaba553c603477679ae817a8d84d75"}, + {file = "pyzmq-25.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:246747b88917e4867e2367b005fc8eefbb4a54b7db363d6c92f89d69abfff4b6"}, + {file = "pyzmq-25.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:00c48ae2fd81e2a50c3485de1b9d5c7c57cd85dc8ec55683eac16846e57ac979"}, + {file = "pyzmq-25.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5a68d491fc20762b630e5db2191dd07ff89834086740f70e978bb2ef2668be08"}, + {file = "pyzmq-25.1.2-cp310-cp310-win32.whl", hash = "sha256:09dfe949e83087da88c4a76767df04b22304a682d6154de2c572625c62ad6886"}, + {file = "pyzmq-25.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:fa99973d2ed20417744fca0073390ad65ce225b546febb0580358e36aa90dba6"}, + {file = "pyzmq-25.1.2-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:82544e0e2d0c1811482d37eef297020a040c32e0687c1f6fc23a75b75db8062c"}, + {file = "pyzmq-25.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:01171fc48542348cd1a360a4b6c3e7d8f46cdcf53a8d40f84db6707a6768acc1"}, + {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc69c96735ab501419c432110016329bf0dea8898ce16fab97c6d9106dc0b348"}, + {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3e124e6b1dd3dfbeb695435dff0e383256655bb18082e094a8dd1f6293114642"}, + {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7598d2ba821caa37a0f9d54c25164a4fa351ce019d64d0b44b45540950458840"}, + {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d1299d7e964c13607efd148ca1f07dcbf27c3ab9e125d1d0ae1d580a1682399d"}, + {file = "pyzmq-25.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4e6f689880d5ad87918430957297c975203a082d9a036cc426648fcbedae769b"}, + {file = "pyzmq-25.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cc69949484171cc961e6ecd4a8911b9ce7a0d1f738fcae717177c231bf77437b"}, + {file = "pyzmq-25.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9880078f683466b7f567b8624bfc16cad65077be046b6e8abb53bed4eeb82dd3"}, + {file = "pyzmq-25.1.2-cp311-cp311-win32.whl", hash = "sha256:4e5837af3e5aaa99a091302df5ee001149baff06ad22b722d34e30df5f0d9097"}, + {file = "pyzmq-25.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:25c2dbb97d38b5ac9fd15586e048ec5eb1e38f3d47fe7d92167b0c77bb3584e9"}, + {file = "pyzmq-25.1.2-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:11e70516688190e9c2db14fcf93c04192b02d457b582a1f6190b154691b4c93a"}, + {file = "pyzmq-25.1.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:313c3794d650d1fccaaab2df942af9f2c01d6217c846177cfcbc693c7410839e"}, + {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b3cbba2f47062b85fe0ef9de5b987612140a9ba3a9c6d2543c6dec9f7c2ab27"}, + {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc31baa0c32a2ca660784d5af3b9487e13b61b3032cb01a115fce6588e1bed30"}, + {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02c9087b109070c5ab0b383079fa1b5f797f8d43e9a66c07a4b8b8bdecfd88ee"}, + {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f8429b17cbb746c3e043cb986328da023657e79d5ed258b711c06a70c2ea7537"}, + {file = "pyzmq-25.1.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5074adeacede5f810b7ef39607ee59d94e948b4fd954495bdb072f8c54558181"}, + {file = "pyzmq-25.1.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7ae8f354b895cbd85212da245f1a5ad8159e7840e37d78b476bb4f4c3f32a9fe"}, + {file = "pyzmq-25.1.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b264bf2cc96b5bc43ce0e852be995e400376bd87ceb363822e2cb1964fcdc737"}, + {file = "pyzmq-25.1.2-cp312-cp312-win32.whl", hash = "sha256:02bbc1a87b76e04fd780b45e7f695471ae6de747769e540da909173d50ff8e2d"}, + {file = "pyzmq-25.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:ced111c2e81506abd1dc142e6cd7b68dd53747b3b7ae5edbea4578c5eeff96b7"}, + {file = "pyzmq-25.1.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:7b6d09a8962a91151f0976008eb7b29b433a560fde056ec7a3db9ec8f1075438"}, + {file = "pyzmq-25.1.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:967668420f36878a3c9ecb5ab33c9d0ff8d054f9c0233d995a6d25b0e95e1b6b"}, + {file = "pyzmq-25.1.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5edac3f57c7ddaacdb4d40f6ef2f9e299471fc38d112f4bc6d60ab9365445fb0"}, + {file = "pyzmq-25.1.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0dabfb10ef897f3b7e101cacba1437bd3a5032ee667b7ead32bbcdd1a8422fe7"}, + {file = "pyzmq-25.1.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:2c6441e0398c2baacfe5ba30c937d274cfc2dc5b55e82e3749e333aabffde561"}, + {file = "pyzmq-25.1.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:16b726c1f6c2e7625706549f9dbe9b06004dfbec30dbed4bf50cbdfc73e5b32a"}, + {file = "pyzmq-25.1.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:a86c2dd76ef71a773e70551a07318b8e52379f58dafa7ae1e0a4be78efd1ff16"}, + {file = "pyzmq-25.1.2-cp36-cp36m-win32.whl", hash = "sha256:359f7f74b5d3c65dae137f33eb2bcfa7ad9ebefd1cab85c935f063f1dbb245cc"}, + {file = "pyzmq-25.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:55875492f820d0eb3417b51d96fea549cde77893ae3790fd25491c5754ea2f68"}, + {file = "pyzmq-25.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b8c8a419dfb02e91b453615c69568442e897aaf77561ee0064d789705ff37a92"}, + {file = "pyzmq-25.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8807c87fa893527ae8a524c15fc505d9950d5e856f03dae5921b5e9aa3b8783b"}, + {file = "pyzmq-25.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5e319ed7d6b8f5fad9b76daa0a68497bc6f129858ad956331a5835785761e003"}, + {file = "pyzmq-25.1.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3c53687dde4d9d473c587ae80cc328e5b102b517447456184b485587ebd18b62"}, + {file = "pyzmq-25.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9add2e5b33d2cd765ad96d5eb734a5e795a0755f7fc49aa04f76d7ddda73fd70"}, + {file = "pyzmq-25.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e690145a8c0c273c28d3b89d6fb32c45e0d9605b2293c10e650265bf5c11cfec"}, + {file = "pyzmq-25.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:00a06faa7165634f0cac1abb27e54d7a0b3b44eb9994530b8ec73cf52e15353b"}, + {file = "pyzmq-25.1.2-cp37-cp37m-win32.whl", hash = "sha256:0f97bc2f1f13cb16905a5f3e1fbdf100e712d841482b2237484360f8bc4cb3d7"}, + {file = "pyzmq-25.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6cc0020b74b2e410287e5942e1e10886ff81ac77789eb20bec13f7ae681f0fdd"}, + {file = "pyzmq-25.1.2-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:bef02cfcbded83473bdd86dd8d3729cd82b2e569b75844fb4ea08fee3c26ae41"}, + {file = "pyzmq-25.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e10a4b5a4b1192d74853cc71a5e9fd022594573926c2a3a4802020360aa719d8"}, + {file = "pyzmq-25.1.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8c5f80e578427d4695adac6fdf4370c14a2feafdc8cb35549c219b90652536ae"}, + {file = "pyzmq-25.1.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5dde6751e857910c1339890f3524de74007958557593b9e7e8c5f01cd919f8a7"}, + {file = "pyzmq-25.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea1608dd169da230a0ad602d5b1ebd39807ac96cae1845c3ceed39af08a5c6df"}, + {file = "pyzmq-25.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0f513130c4c361201da9bc69df25a086487250e16b5571ead521b31ff6b02220"}, + {file = "pyzmq-25.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:019744b99da30330798bb37df33549d59d380c78e516e3bab9c9b84f87a9592f"}, + {file = "pyzmq-25.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2e2713ef44be5d52dd8b8e2023d706bf66cb22072e97fc71b168e01d25192755"}, + {file = "pyzmq-25.1.2-cp38-cp38-win32.whl", hash = "sha256:07cd61a20a535524906595e09344505a9bd46f1da7a07e504b315d41cd42eb07"}, + {file = "pyzmq-25.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb7e49a17fb8c77d3119d41a4523e432eb0c6932187c37deb6fbb00cc3028088"}, + {file = "pyzmq-25.1.2-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:94504ff66f278ab4b7e03e4cba7e7e400cb73bfa9d3d71f58d8972a8dc67e7a6"}, + {file = "pyzmq-25.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6dd0d50bbf9dca1d0bdea219ae6b40f713a3fb477c06ca3714f208fd69e16fd8"}, + {file = "pyzmq-25.1.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:004ff469d21e86f0ef0369717351073e0e577428e514c47c8480770d5e24a565"}, + {file = "pyzmq-25.1.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c0b5ca88a8928147b7b1e2dfa09f3b6c256bc1135a1338536cbc9ea13d3b7add"}, + {file = "pyzmq-25.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c9a79f1d2495b167119d02be7448bfba57fad2a4207c4f68abc0bab4b92925b"}, + {file = "pyzmq-25.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:518efd91c3d8ac9f9b4f7dd0e2b7b8bf1a4fe82a308009016b07eaa48681af82"}, + {file = "pyzmq-25.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1ec23bd7b3a893ae676d0e54ad47d18064e6c5ae1fadc2f195143fb27373f7f6"}, + {file = "pyzmq-25.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db36c27baed588a5a8346b971477b718fdc66cf5b80cbfbd914b4d6d355e44e2"}, + {file = "pyzmq-25.1.2-cp39-cp39-win32.whl", hash = "sha256:39b1067f13aba39d794a24761e385e2eddc26295826530a8c7b6c6c341584289"}, + {file = "pyzmq-25.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:8e9f3fabc445d0ce320ea2c59a75fe3ea591fdbdeebec5db6de530dd4b09412e"}, + {file = "pyzmq-25.1.2-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a8c1d566344aee826b74e472e16edae0a02e2a044f14f7c24e123002dcff1c05"}, + {file = "pyzmq-25.1.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:759cfd391a0996345ba94b6a5110fca9c557ad4166d86a6e81ea526c376a01e8"}, + {file = "pyzmq-25.1.2-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c61e346ac34b74028ede1c6b4bcecf649d69b707b3ff9dc0fab453821b04d1e"}, + {file = "pyzmq-25.1.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cb8fc1f8d69b411b8ec0b5f1ffbcaf14c1db95b6bccea21d83610987435f1a4"}, + {file = "pyzmq-25.1.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3c00c9b7d1ca8165c610437ca0c92e7b5607b2f9076f4eb4b095c85d6e680a1d"}, + {file = "pyzmq-25.1.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:df0c7a16ebb94452d2909b9a7b3337940e9a87a824c4fc1c7c36bb4404cb0cde"}, + {file = "pyzmq-25.1.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:45999e7f7ed5c390f2e87ece7f6c56bf979fb213550229e711e45ecc7d42ccb8"}, + {file = "pyzmq-25.1.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ac170e9e048b40c605358667aca3d94e98f604a18c44bdb4c102e67070f3ac9b"}, + {file = "pyzmq-25.1.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1b604734bec94f05f81b360a272fc824334267426ae9905ff32dc2be433ab96"}, + {file = "pyzmq-25.1.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:a793ac733e3d895d96f865f1806f160696422554e46d30105807fdc9841b9f7d"}, + {file = "pyzmq-25.1.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0806175f2ae5ad4b835ecd87f5f85583316b69f17e97786f7443baaf54b9bb98"}, + {file = "pyzmq-25.1.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ef12e259e7bc317c7597d4f6ef59b97b913e162d83b421dd0db3d6410f17a244"}, + {file = "pyzmq-25.1.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea253b368eb41116011add00f8d5726762320b1bda892f744c91997b65754d73"}, + {file = "pyzmq-25.1.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b9b1f2ad6498445a941d9a4fee096d387fee436e45cc660e72e768d3d8ee611"}, + {file = "pyzmq-25.1.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:8b14c75979ce932c53b79976a395cb2a8cd3aaf14aef75e8c2cb55a330b9b49d"}, + {file = "pyzmq-25.1.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:889370d5174a741a62566c003ee8ddba4b04c3f09a97b8000092b7ca83ec9c49"}, + {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a18fff090441a40ffda8a7f4f18f03dc56ae73f148f1832e109f9bffa85df15"}, + {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99a6b36f95c98839ad98f8c553d8507644c880cf1e0a57fe5e3a3f3969040882"}, + {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4345c9a27f4310afbb9c01750e9461ff33d6fb74cd2456b107525bbeebcb5be3"}, + {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3516e0b6224cf6e43e341d56da15fd33bdc37fa0c06af4f029f7d7dfceceabbc"}, + {file = "pyzmq-25.1.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:146b9b1f29ead41255387fb07be56dc29639262c0f7344f570eecdcd8d683314"}, + {file = "pyzmq-25.1.2.tar.gz", hash = "sha256:93f1aa311e8bb912e34f004cf186407a4e90eec4f0ecc0efd26056bf7eda0226"}, ] [package.dependencies] @@ -2912,101 +2994,101 @@ test = ["pytest (>=6,!=7.0.0,!=7.0.1)", "pytest-cov (>=3.0.0)", "pytest-qt"] [[package]] name = "rapidfuzz" -version = "3.5.2" +version = "3.6.1" description = "rapid fuzzy string matching" optional = false python-versions = ">=3.8" files = [ - {file = "rapidfuzz-3.5.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1a047d6e58833919d742bbc0dfa66d1de4f79e8562ee195007d3eae96635df39"}, - {file = "rapidfuzz-3.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:22877c027c492b7dc7e3387a576a33ed5aad891104aa90da2e0844c83c5493ef"}, - {file = "rapidfuzz-3.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e0f448b0eacbcc416feb634e1232a48d1cbde5e60f269c84e4fb0912f7bbb001"}, - {file = "rapidfuzz-3.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d05146497672f869baf41147d5ec1222788c70e5b8b0cfcd6e95597c75b5b96b"}, - {file = "rapidfuzz-3.5.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f2df3968738a38d2a0058b5e721753f5d3d602346a1027b0dde31b0476418f3"}, - {file = "rapidfuzz-3.5.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5afc1fcf1830f9bb87d3b490ba03691081b9948a794ea851befd2643069a30c1"}, - {file = "rapidfuzz-3.5.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84be69ea65f64fa01e5c4976be9826a5aa949f037508887add42da07420d65d6"}, - {file = "rapidfuzz-3.5.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8658c1045766e87e0038323aa38b4a9f49b7f366563271f973c8890a98aa24b5"}, - {file = "rapidfuzz-3.5.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:852b3f93c15fce58b8dc668bd54123713bfdbbb0796ba905ea5df99cfd083132"}, - {file = "rapidfuzz-3.5.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:12424a06ad9bd0cbf5f7cea1015e78d924a0034a0e75a5a7b39c0703dcd94095"}, - {file = "rapidfuzz-3.5.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b4e9ded8e80530bd7205a7a2b01802f934a4695ca9e9fbe1ce9644f5e0697864"}, - {file = "rapidfuzz-3.5.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:affb8fe36157c2dc8a7bc45b6a1875eb03e2c49167a1d52789144bdcb7ab3b8c"}, - {file = "rapidfuzz-3.5.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1d33a622572d384f4c90b5f7a139328246ab5600141e90032b521c2127bd605"}, - {file = "rapidfuzz-3.5.2-cp310-cp310-win32.whl", hash = "sha256:2cf9f2ed4a97b388cffd48d534452a564c2491f68f4fd5bc140306f774ceb63a"}, - {file = "rapidfuzz-3.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:6541ffb70097885f7302cd73e2efd77be99841103023c2f9408551f27f45f7a5"}, - {file = "rapidfuzz-3.5.2-cp310-cp310-win_arm64.whl", hash = "sha256:1dd2542e5103fb8ca46500a979ae14d1609dcba11d2f9fe01e99eec03420e193"}, - {file = "rapidfuzz-3.5.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bff7d3127ebc5cd908f3a72f6517f31f5247b84666137556a8fcc5177c560939"}, - {file = "rapidfuzz-3.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fdfdb3685b631d8efbb6d6d3d86eb631be2b408d9adafcadc11e63e3f9c96dec"}, - {file = "rapidfuzz-3.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:97b043fe8185ec53bb3ff0e59deb89425c0fc6ece6e118939963aab473505801"}, - {file = "rapidfuzz-3.5.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a4a7832737f87583f3863dc62e6f56dd4a9fefc5f04a7bdcb4c433a0f36bb1b"}, - {file = "rapidfuzz-3.5.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d876dba9a11fcf60dcf1562c5a84ef559db14c2ceb41e1ad2d93cd1dc085889"}, - {file = "rapidfuzz-3.5.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa4c0612893716bbb6595066ca9ecb517c982355abe39ba9d1f4ab834ace91ad"}, - {file = "rapidfuzz-3.5.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:120316824333e376b88b284724cfd394c6ccfcb9818519eab5d58a502e5533f0"}, - {file = "rapidfuzz-3.5.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9cdbe8e80cc186d55f748a34393533a052d855357d5398a1ccb71a5021b58e8d"}, - {file = "rapidfuzz-3.5.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1062425c8358a547ae5ebad148f2e0f02417716a571b803b0c68e4d552e99d32"}, - {file = "rapidfuzz-3.5.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:66be181965aff13301dd5f9b94b646ce39d99c7fe2fd5de1656f4ca7fafcb38c"}, - {file = "rapidfuzz-3.5.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:53df7aea3cf301633cfa2b4b2c2d2441a87dfc878ef810e5b4eddcd3e68723ad"}, - {file = "rapidfuzz-3.5.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:76639dca5eb0afc6424ac5f42d43d3bd342ac710e06f38a8c877d5b96de09589"}, - {file = "rapidfuzz-3.5.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:27689361c747b5f7b8a26056bc60979875323f1c3dcaaa9e2fec88f03b20a365"}, - {file = "rapidfuzz-3.5.2-cp311-cp311-win32.whl", hash = "sha256:99c9fc5265566fb94731dc6826f43c5109e797078264e6389a36d47814473692"}, - {file = "rapidfuzz-3.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:666928ee735562a909d81bd2f63207b3214afd4ca41f790ab3025d066975c814"}, - {file = "rapidfuzz-3.5.2-cp311-cp311-win_arm64.whl", hash = "sha256:d55de67c48f06b7772541e8d4c062a2679205799ce904236e2836cb04c106442"}, - {file = "rapidfuzz-3.5.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:04e1e02b182283c43c866e215317735e91d22f5d34e65400121c04d5ed7ed859"}, - {file = "rapidfuzz-3.5.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:365e544aba3ac13acf1a62cb2e5909ad2ba078d0bfc7d69b1f801dfd673b9782"}, - {file = "rapidfuzz-3.5.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b61f77d834f94b0099fa9ed35c189b7829759d4e9c2743697a130dd7ba62259f"}, - {file = "rapidfuzz-3.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:43fb368998b9703fa8c63db292a8ab9e988bf6da0c8a635754be8e69da1e7c1d"}, - {file = "rapidfuzz-3.5.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25510b5d142c47786dbd27cfd9da7cae5bdea28d458379377a3644d8460a3404"}, - {file = "rapidfuzz-3.5.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bf3093443751e5a419834162af358d1e31dec75f84747a91dbbc47b2c04fc085"}, - {file = "rapidfuzz-3.5.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2fbaf546f15a924613f89d609ff66b85b4f4c2307ac14d93b80fe1025b713138"}, - {file = "rapidfuzz-3.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32d580df0e130ed85400ff77e1c32d965e9bc7be29ac4072ab637f57e26d29fb"}, - {file = "rapidfuzz-3.5.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:358a0fbc49343de20fee8ebdb33c7fa8f55a9ff93ff42d1ffe097d2caa248f1b"}, - {file = "rapidfuzz-3.5.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:fb379ac0ddfc86c5542a225d194f76ed468b071b6f79ff57c4b72e635605ad7d"}, - {file = "rapidfuzz-3.5.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7fb21e182dc6d83617e88dea002963d5cf99cf5eabbdbf04094f503d8fe8d723"}, - {file = "rapidfuzz-3.5.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:c04f9f1310ce414ab00bdcbf26d0906755094bfc59402cb66a7722c6f06d70b2"}, - {file = "rapidfuzz-3.5.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f6da61cc38c1a95efc5edcedf258759e6dbab73191651a28c5719587f32a56ad"}, - {file = "rapidfuzz-3.5.2-cp312-cp312-win32.whl", hash = "sha256:f823fd1977071486739f484e27092765d693da6beedaceece54edce1dfeec9b2"}, - {file = "rapidfuzz-3.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:a8162d81486de85ab1606e48e076431b66d44cf431b2b678e9cae458832e7147"}, - {file = "rapidfuzz-3.5.2-cp312-cp312-win_arm64.whl", hash = "sha256:dfc63fabb7d8da8483ca836bae7e55766fe39c63253571e103c034ba8ea80950"}, - {file = "rapidfuzz-3.5.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:df8fae2515a1e4936affccac3e7d506dd904de5ff82bc0b1433b4574a51b9bfb"}, - {file = "rapidfuzz-3.5.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dd6384780c2a16097d47588844cd677316a90e0f41ef96ff485b62d58de79dcf"}, - {file = "rapidfuzz-3.5.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:467a4d730ae3bade87dba6bd769e837ab97e176968ce20591fe8f7bf819115b1"}, - {file = "rapidfuzz-3.5.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54576669c1502b751b534bd76a4aeaaf838ed88b30af5d5c1b7d0a3ca5d4f7b5"}, - {file = "rapidfuzz-3.5.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abafeb82f85a651a9d6d642a33dc021606bc459c33e250925b25d6b9e7105a2e"}, - {file = "rapidfuzz-3.5.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73e14617a520c0f1bc15eb78c215383477e5ca70922ecaff1d29c63c060e04ca"}, - {file = "rapidfuzz-3.5.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7cdf92116e9dfe40da17f921cdbfa0039dde9eb158914fa5f01b1e67a20b19cb"}, - {file = "rapidfuzz-3.5.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1962d5ccf8602589dbf8e85246a0ee2b4050d82fade1568fb76f8a4419257704"}, - {file = "rapidfuzz-3.5.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:db45028eae2fda7a24759c69ebeb2a7fbcc1a326606556448ed43ee480237a3c"}, - {file = "rapidfuzz-3.5.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b685abb8b6d97989f6c69556d7934e0e533aa8822f50b9517ff2da06a1d29f23"}, - {file = "rapidfuzz-3.5.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:40139552961018216b8cd88f6df4ecbbe984f907a62a5c823ccd907132c29a14"}, - {file = "rapidfuzz-3.5.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:0fef4705459842ef8f79746d6f6a0b5d2b6a61a145d7d8bbe10b2e756ea337c8"}, - {file = "rapidfuzz-3.5.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6b2ad5516f7068c7d9cbcda8ac5906c589e99bc427df2e1050282ee2d8bc2d58"}, - {file = "rapidfuzz-3.5.2-cp38-cp38-win32.whl", hash = "sha256:2da3a24c2f7dfca7f26ba04966b848e3bbeb93e54d899908ff88dfe3e1def9dc"}, - {file = "rapidfuzz-3.5.2-cp38-cp38-win_amd64.whl", hash = "sha256:e3f2be79d4114d01f383096dbee51b57df141cb8b209c19d0cf65f23a24e75ba"}, - {file = "rapidfuzz-3.5.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:089a7e96e5032821af5964d8457fcb38877cc321cdd06ad7c5d6e3d852264cb9"}, - {file = "rapidfuzz-3.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:75d8a52bf8d1aa2ac968ae4b21b83b94fc7e5ea3dfbab34811fc60f32df505b2"}, - {file = "rapidfuzz-3.5.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2bacce6bbc0362f0789253424269cc742b1f45e982430387db3abe1d0496e371"}, - {file = "rapidfuzz-3.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5fd627e604ddc02db2ddb9ddc4a91dd92b7a6d6378fcf30bb37b49229072b89"}, - {file = "rapidfuzz-3.5.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b2e8b369f23f00678f6e673572209a5d3b0832f4991888e3df97af7b8b9decf3"}, - {file = "rapidfuzz-3.5.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c29958265e4c2b937269e804b8a160c027ee1c2627d6152655008a8b8083630e"}, - {file = "rapidfuzz-3.5.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:00be97f9219355945c46f37ac9fa447046e6f7930f7c901e5d881120d1695458"}, - {file = "rapidfuzz-3.5.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ada0d8d57e0f556ef38c24fee71bfe8d0db29c678bff2acd1819fc1b74f331c2"}, - {file = "rapidfuzz-3.5.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:de89585268ed8ee44e80126814cae63ff6b00d08416481f31b784570ef07ec59"}, - {file = "rapidfuzz-3.5.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:908ff2de9c442b379143d1da3c886c63119d4eba22986806e2533cee603fe64b"}, - {file = "rapidfuzz-3.5.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:54f0061028723c026020f5bb20649c22bc8a0d9f5363c283bdc5901d4d3bff01"}, - {file = "rapidfuzz-3.5.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:b581107ec0c610cdea48b25f52030770be390db4a9a73ca58b8d70fa8a5ec32e"}, - {file = "rapidfuzz-3.5.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1d5a686ea258931aaa38019204bdc670bbe14b389a230b1363d84d6cf4b9dc38"}, - {file = "rapidfuzz-3.5.2-cp39-cp39-win32.whl", hash = "sha256:97f811ca7709c6ee8c0b55830f63b3d87086f4abbcbb189b4067e1cd7014db7b"}, - {file = "rapidfuzz-3.5.2-cp39-cp39-win_amd64.whl", hash = "sha256:58ee34350f8c292dd24a050186c0e18301d80da904ef572cf5fda7be6a954929"}, - {file = "rapidfuzz-3.5.2-cp39-cp39-win_arm64.whl", hash = "sha256:c5075ce7b9286624cafcf36720ef1cfb2946d75430b87cb4d1f006e82cd71244"}, - {file = "rapidfuzz-3.5.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:af5221e4f7800db3e84c46b79dba4112e3b3cc2678f808bdff4fcd2487073846"}, - {file = "rapidfuzz-3.5.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8501d7875b176930e6ed9dbc1bc35adb37ef312f6106bd6bb5c204adb90160ac"}, - {file = "rapidfuzz-3.5.2-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e414e1ca40386deda4291aa2d45062fea0fbaa14f95015738f8bb75c4d27f862"}, - {file = "rapidfuzz-3.5.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2059cd73b7ea779a9307d7a78ed743f0e3d33b88ccdcd84569abd2953cd859f"}, - {file = "rapidfuzz-3.5.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:58e3e21f6f13a7cca265cce492bc797425bd4cb2025fdd161a9e86a824ad65ce"}, - {file = "rapidfuzz-3.5.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b847a49377e64e92e11ef3d0a793de75451526c83af015bdafdd5d04de8a058a"}, - {file = "rapidfuzz-3.5.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a42c7a8c62b29c4810e39da22b42524295fcb793f41c395c2cb07c126b729e83"}, - {file = "rapidfuzz-3.5.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:51b5166be86e09e011e92d9862b1fe64c4c7b9385f443fb535024e646d890460"}, - {file = "rapidfuzz-3.5.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f808dcb0088a7a496cc9895e66a7b8de55ffea0eb9b547c75dfb216dd5f76ed"}, - {file = "rapidfuzz-3.5.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d4b05a8f4ab7e7344459394094587b033fe259eea3a8720035e8ba30e79ab39b"}, - {file = "rapidfuzz-3.5.2.tar.gz", hash = "sha256:9e9b395743e12c36a3167a3a9fd1b4e11d92fb0aa21ec98017ee6df639ed385e"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ac434fc71edda30d45db4a92ba5e7a42c7405e1a54cb4ec01d03cc668c6dcd40"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2a791168e119cfddf4b5a40470620c872812042f0621e6a293983a2d52372db0"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5a2f3e9df346145c2be94e4d9eeffb82fab0cbfee85bd4a06810e834fe7c03fa"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23de71e7f05518b0bbeef55d67b5dbce3bcd3e2c81e7e533051a2e9401354eb0"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d056e342989248d2bdd67f1955bb7c3b0ecfa239d8f67a8dfe6477b30872c607"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:01835d02acd5d95c1071e1da1bb27fe213c84a013b899aba96380ca9962364bc"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed0f712e0bb5fea327e92aec8a937afd07ba8de4c529735d82e4c4124c10d5a0"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96cd19934f76a1264e8ecfed9d9f5291fde04ecb667faef5f33bdbfd95fe2d1f"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e06c4242a1354cf9d48ee01f6f4e6e19c511d50bb1e8d7d20bcadbb83a2aea90"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:d73dcfe789d37c6c8b108bf1e203e027714a239e50ad55572ced3c004424ed3b"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:06e98ff000e2619e7cfe552d086815671ed09b6899408c2c1b5103658261f6f3"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:08b6fb47dd889c69fbc0b915d782aaed43e025df6979b6b7f92084ba55edd526"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a1788ebb5f5b655a15777e654ea433d198f593230277e74d51a2a1e29a986283"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-win32.whl", hash = "sha256:c65f92881753aa1098c77818e2b04a95048f30edbe9c3094dc3707d67df4598b"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:4243a9c35667a349788461aae6471efde8d8800175b7db5148a6ab929628047f"}, + {file = "rapidfuzz-3.6.1-cp310-cp310-win_arm64.whl", hash = "sha256:f59d19078cc332dbdf3b7b210852ba1f5db8c0a2cd8cc4c0ed84cc00c76e6802"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fbc07e2e4ac696497c5f66ec35c21ddab3fc7a406640bffed64c26ab2f7ce6d6"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:40cced1a8852652813f30fb5d4b8f9b237112a0bbaeebb0f4cc3611502556764"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:82300e5f8945d601c2daaaac139d5524d7c1fdf719aa799a9439927739917460"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edf97c321fd641fea2793abce0e48fa4f91f3c202092672f8b5b4e781960b891"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7420e801b00dee4a344ae2ee10e837d603461eb180e41d063699fb7efe08faf0"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:060bd7277dc794279fa95522af355034a29c90b42adcb7aa1da358fc839cdb11"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7e3375e4f2bfec77f907680328e4cd16cc64e137c84b1886d547ab340ba6928"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a490cd645ef9d8524090551016f05f052e416c8adb2d8b85d35c9baa9d0428ab"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2e03038bfa66d2d7cffa05d81c2f18fd6acbb25e7e3c068d52bb7469e07ff382"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b19795b26b979c845dba407fe79d66975d520947b74a8ab6cee1d22686f7967"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:064c1d66c40b3a0f488db1f319a6e75616b2e5fe5430a59f93a9a5e40a656d15"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3c772d04fb0ebeece3109d91f6122b1503023086a9591a0b63d6ee7326bd73d9"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:841eafba6913c4dfd53045835545ba01a41e9644e60920c65b89c8f7e60c00a9"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-win32.whl", hash = "sha256:266dd630f12696ea7119f31d8b8e4959ef45ee2cbedae54417d71ae6f47b9848"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:d79aec8aeee02ab55d0ddb33cea3ecd7b69813a48e423c966a26d7aab025cdfe"}, + {file = "rapidfuzz-3.6.1-cp311-cp311-win_arm64.whl", hash = "sha256:484759b5dbc5559e76fefaa9170147d1254468f555fd9649aea3bad46162a88b"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b2ef4c0fd3256e357b70591ffb9e8ed1d439fb1f481ba03016e751a55261d7c1"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:588c4b20fa2fae79d60a4e438cf7133d6773915df3cc0a7f1351da19eb90f720"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7142ee354e9c06e29a2636b9bbcb592bb00600a88f02aa5e70e4f230347b373e"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1dfc557c0454ad22382373ec1b7df530b4bbd974335efe97a04caec936f2956a"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:03f73b381bdeccb331a12c3c60f1e41943931461cdb52987f2ecf46bfc22f50d"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6b0ccc2ec1781c7e5370d96aef0573dd1f97335343e4982bdb3a44c133e27786"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da3e8c9f7e64bb17faefda085ff6862ecb3ad8b79b0f618a6cf4452028aa2222"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fde9b14302a31af7bdafbf5cfbb100201ba21519be2b9dedcf4f1048e4fbe65d"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c1a23eee225dfb21c07f25c9fcf23eb055d0056b48e740fe241cbb4b22284379"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e49b9575d16c56c696bc7b06a06bf0c3d4ef01e89137b3ddd4e2ce709af9fe06"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:0a9fc714b8c290261669f22808913aad49553b686115ad0ee999d1cb3df0cd66"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:a3ee4f8f076aa92184e80308fc1a079ac356b99c39408fa422bbd00145be9854"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f056ba42fd2f32e06b2c2ba2443594873cfccc0c90c8b6327904fc2ddf6d5799"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-win32.whl", hash = "sha256:5d82b9651e3d34b23e4e8e201ecd3477c2baa17b638979deeabbb585bcb8ba74"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:dad55a514868dae4543ca48c4e1fc0fac704ead038dafedf8f1fc0cc263746c1"}, + {file = "rapidfuzz-3.6.1-cp312-cp312-win_arm64.whl", hash = "sha256:3c84294f4470fcabd7830795d754d808133329e0a81d62fcc2e65886164be83b"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e19d519386e9db4a5335a4b29f25b8183a1c3f78cecb4c9c3112e7f86470e37f"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:01eb03cd880a294d1bf1a583fdd00b87169b9cc9c9f52587411506658c864d73"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:be368573255f8fbb0125a78330a1a40c65e9ba3c5ad129a426ff4289099bfb41"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3e5af946f419c30f5cb98b69d40997fe8580efe78fc83c2f0f25b60d0e56efb"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f382f7ffe384ce34345e1c0b2065451267d3453cadde78946fbd99a59f0cc23c"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be156f51f3a4f369e758505ed4ae64ea88900dcb2f89d5aabb5752676d3f3d7e"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1936d134b6c513fbe934aeb668b0fee1ffd4729a3c9d8d373f3e404fbb0ce8a0"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12ff8eaf4a9399eb2bebd838f16e2d1ded0955230283b07376d68947bbc2d33d"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ae598a172e3a95df3383634589660d6b170cc1336fe7578115c584a99e0ba64d"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cd4ba4c18b149da11e7f1b3584813159f189dc20833709de5f3df8b1342a9759"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:0402f1629e91a4b2e4aee68043a30191e5e1b7cd2aa8dacf50b1a1bcf6b7d3ab"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:1e12319c6b304cd4c32d5db00b7a1e36bdc66179c44c5707f6faa5a889a317c0"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0bbfae35ce4de4c574b386c43c78a0be176eeddfdae148cb2136f4605bebab89"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-win32.whl", hash = "sha256:7fec74c234d3097612ea80f2a80c60720eec34947066d33d34dc07a3092e8105"}, + {file = "rapidfuzz-3.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:a553cc1a80d97459d587529cc43a4c7c5ecf835f572b671107692fe9eddf3e24"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:757dfd7392ec6346bd004f8826afb3bf01d18a723c97cbe9958c733ab1a51791"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2963f4a3f763870a16ee076796be31a4a0958fbae133dbc43fc55c3968564cf5"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d2f0274595cc5b2b929c80d4e71b35041104b577e118cf789b3fe0a77b37a4c5"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f211e366e026de110a4246801d43a907cd1a10948082f47e8a4e6da76fef52"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a59472b43879012b90989603aa5a6937a869a72723b1bf2ff1a0d1edee2cc8e6"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a03863714fa6936f90caa7b4b50ea59ea32bb498cc91f74dc25485b3f8fccfe9"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5dd95b6b7bfb1584f806db89e1e0c8dbb9d25a30a4683880c195cc7f197eaf0c"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7183157edf0c982c0b8592686535c8b3e107f13904b36d85219c77be5cefd0d8"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ad9d74ef7c619b5b0577e909582a1928d93e07d271af18ba43e428dc3512c2a1"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b53137d81e770c82189e07a8f32722d9e4260f13a0aec9914029206ead38cac3"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:49b9ed2472394d306d5dc967a7de48b0aab599016aa4477127b20c2ed982dbf9"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:dec307b57ec2d5054d77d03ee4f654afcd2c18aee00c48014cb70bfed79597d6"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4381023fa1ff32fd5076f5d8321249a9aa62128eb3f21d7ee6a55373e672b261"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-win32.whl", hash = "sha256:8d7a072f10ee57c8413c8ab9593086d42aaff6ee65df4aa6663eecdb7c398dca"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:ebcfb5bfd0a733514352cfc94224faad8791e576a80ffe2fd40b2177bf0e7198"}, + {file = "rapidfuzz-3.6.1-cp39-cp39-win_arm64.whl", hash = "sha256:1c47d592e447738744905c18dda47ed155620204714e6df20eb1941bb1ba315e"}, + {file = "rapidfuzz-3.6.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:eef8b346ab331bec12bbc83ac75641249e6167fab3d84d8f5ca37fd8e6c7a08c"}, + {file = "rapidfuzz-3.6.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53251e256017e2b87f7000aee0353ba42392c442ae0bafd0f6b948593d3f68c6"}, + {file = "rapidfuzz-3.6.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6dede83a6b903e3ebcd7e8137e7ff46907ce9316e9d7e7f917d7e7cdc570ee05"}, + {file = "rapidfuzz-3.6.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e4da90e4c2b444d0a171d7444ea10152e07e95972bb40b834a13bdd6de1110c"}, + {file = "rapidfuzz-3.6.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:ca3dfcf74f2b6962f411c33dd95b0adf3901266e770da6281bc96bb5a8b20de9"}, + {file = "rapidfuzz-3.6.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bcc957c0a8bde8007f1a8a413a632a1a409890f31f73fe764ef4eac55f59ca87"}, + {file = "rapidfuzz-3.6.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:692c9a50bea7a8537442834f9bc6b7d29d8729a5b6379df17c31b6ab4df948c2"}, + {file = "rapidfuzz-3.6.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76c23ceaea27e790ddd35ef88b84cf9d721806ca366199a76fd47cfc0457a81b"}, + {file = "rapidfuzz-3.6.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b155e67fff215c09f130555002e42f7517d0ea72cbd58050abb83cb7c880cec"}, + {file = "rapidfuzz-3.6.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3028ee8ecc48250607fa8a0adce37b56275ec3b1acaccd84aee1f68487c8557b"}, + {file = "rapidfuzz-3.6.1.tar.gz", hash = "sha256:35660bee3ce1204872574fa041c7ad7ec5175b3053a4cb6e181463fc07013de7"}, ] [package.extras] @@ -3014,13 +3096,13 @@ full = ["numpy"] [[package]] name = "referencing" -version = "0.31.0" +version = "0.32.0" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" files = [ - {file = "referencing-0.31.0-py3-none-any.whl", hash = "sha256:381b11e53dd93babb55696c71cf42aef2d36b8a150c49bf0bc301e36d536c882"}, - {file = "referencing-0.31.0.tar.gz", hash = "sha256:cc28f2c88fbe7b961a7817a0abc034c09a1e36358f82fedb4ffdf29a25398863"}, + {file = "referencing-0.32.0-py3-none-any.whl", hash = "sha256:bdcd3efb936f82ff86f993093f6da7435c7de69a3b3a5a06678a6050184bee99"}, + {file = "referencing-0.32.0.tar.gz", hash = "sha256:689e64fe121843dcfd57b71933318ef1f91188ffb45367332700a86ac8fd6161"}, ] [package.dependencies] @@ -3029,99 +3111,104 @@ rpds-py = ">=0.7.0" [[package]] name = "regex" -version = "2023.10.3" +version = "2023.12.25" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.7" files = [ - {file = "regex-2023.10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4c34d4f73ea738223a094d8e0ffd6d2c1a1b4c175da34d6b0de3d8d69bee6bcc"}, - {file = "regex-2023.10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a8f4e49fc3ce020f65411432183e6775f24e02dff617281094ba6ab079ef0915"}, - {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cd1bccf99d3ef1ab6ba835308ad85be040e6a11b0977ef7ea8c8005f01a3c29"}, - {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:81dce2ddc9f6e8f543d94b05d56e70d03a0774d32f6cca53e978dc01e4fc75b8"}, - {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c6b4d23c04831e3ab61717a707a5d763b300213db49ca680edf8bf13ab5d91b"}, - {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c15ad0aee158a15e17e0495e1e18741573d04eb6da06d8b84af726cfc1ed02ee"}, - {file = "regex-2023.10.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6239d4e2e0b52c8bd38c51b760cd870069f0bdf99700a62cd509d7a031749a55"}, - {file = "regex-2023.10.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4a8bf76e3182797c6b1afa5b822d1d5802ff30284abe4599e1247be4fd6b03be"}, - {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9c727bbcf0065cbb20f39d2b4f932f8fa1631c3e01fcedc979bd4f51fe051c5"}, - {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3ccf2716add72f80714b9a63899b67fa711b654be3fcdd34fa391d2d274ce767"}, - {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:107ac60d1bfdc3edb53be75e2a52aff7481b92817cfdddd9b4519ccf0e54a6ff"}, - {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:00ba3c9818e33f1fa974693fb55d24cdc8ebafcb2e4207680669d8f8d7cca79a"}, - {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f0a47efb1dbef13af9c9a54a94a0b814902e547b7f21acb29434504d18f36e3a"}, - {file = "regex-2023.10.3-cp310-cp310-win32.whl", hash = "sha256:36362386b813fa6c9146da6149a001b7bd063dabc4d49522a1f7aa65b725c7ec"}, - {file = "regex-2023.10.3-cp310-cp310-win_amd64.whl", hash = "sha256:c65a3b5330b54103e7d21cac3f6bf3900d46f6d50138d73343d9e5b2900b2353"}, - {file = "regex-2023.10.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:90a79bce019c442604662d17bf69df99090e24cdc6ad95b18b6725c2988a490e"}, - {file = "regex-2023.10.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c7964c2183c3e6cce3f497e3a9f49d182e969f2dc3aeeadfa18945ff7bdd7051"}, - {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ef80829117a8061f974b2fda8ec799717242353bff55f8a29411794d635d964"}, - {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5addc9d0209a9afca5fc070f93b726bf7003bd63a427f65ef797a931782e7edc"}, - {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c148bec483cc4b421562b4bcedb8e28a3b84fcc8f0aa4418e10898f3c2c0eb9b"}, - {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d1f21af4c1539051049796a0f50aa342f9a27cde57318f2fc41ed50b0dbc4ac"}, - {file = "regex-2023.10.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b9ac09853b2a3e0d0082104036579809679e7715671cfbf89d83c1cb2a30f58"}, - {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ebedc192abbc7fd13c5ee800e83a6df252bec691eb2c4bedc9f8b2e2903f5e2a"}, - {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d8a993c0a0ffd5f2d3bda23d0cd75e7086736f8f8268de8a82fbc4bd0ac6791e"}, - {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:be6b7b8d42d3090b6c80793524fa66c57ad7ee3fe9722b258aec6d0672543fd0"}, - {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4023e2efc35a30e66e938de5aef42b520c20e7eda7bb5fb12c35e5d09a4c43f6"}, - {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0d47840dc05e0ba04fe2e26f15126de7c755496d5a8aae4a08bda4dd8d646c54"}, - {file = "regex-2023.10.3-cp311-cp311-win32.whl", hash = "sha256:9145f092b5d1977ec8c0ab46e7b3381b2fd069957b9862a43bd383e5c01d18c2"}, - {file = "regex-2023.10.3-cp311-cp311-win_amd64.whl", hash = "sha256:b6104f9a46bd8743e4f738afef69b153c4b8b592d35ae46db07fc28ae3d5fb7c"}, - {file = "regex-2023.10.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bff507ae210371d4b1fe316d03433ac099f184d570a1a611e541923f78f05037"}, - {file = "regex-2023.10.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be5e22bbb67924dea15039c3282fa4cc6cdfbe0cbbd1c0515f9223186fc2ec5f"}, - {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a992f702c9be9c72fa46f01ca6e18d131906a7180950958f766c2aa294d4b41"}, - {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7434a61b158be563c1362d9071358f8ab91b8d928728cd2882af060481244c9e"}, - {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2169b2dcabf4e608416f7f9468737583ce5f0a6e8677c4efbf795ce81109d7c"}, - {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9e908ef5889cda4de038892b9accc36d33d72fb3e12c747e2799a0e806ec841"}, - {file = "regex-2023.10.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12bd4bc2c632742c7ce20db48e0d99afdc05e03f0b4c1af90542e05b809a03d9"}, - {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bc72c231f5449d86d6c7d9cc7cd819b6eb30134bb770b8cfdc0765e48ef9c420"}, - {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bce8814b076f0ce5766dc87d5a056b0e9437b8e0cd351b9a6c4e1134a7dfbda9"}, - {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:ba7cd6dc4d585ea544c1412019921570ebd8a597fabf475acc4528210d7c4a6f"}, - {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b0c7d2f698e83f15228ba41c135501cfe7d5740181d5903e250e47f617eb4292"}, - {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5a8f91c64f390ecee09ff793319f30a0f32492e99f5dc1c72bc361f23ccd0a9a"}, - {file = "regex-2023.10.3-cp312-cp312-win32.whl", hash = "sha256:ad08a69728ff3c79866d729b095872afe1e0557251da4abb2c5faff15a91d19a"}, - {file = "regex-2023.10.3-cp312-cp312-win_amd64.whl", hash = "sha256:39cdf8d141d6d44e8d5a12a8569d5a227f645c87df4f92179bd06e2e2705e76b"}, - {file = "regex-2023.10.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4a3ee019a9befe84fa3e917a2dd378807e423d013377a884c1970a3c2792d293"}, - {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76066d7ff61ba6bf3cb5efe2428fc82aac91802844c022d849a1f0f53820502d"}, - {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfe50b61bab1b1ec260fa7cd91106fa9fece57e6beba05630afe27c71259c59b"}, - {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fd88f373cb71e6b59b7fa597e47e518282455c2734fd4306a05ca219a1991b0"}, - {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3ab05a182c7937fb374f7e946f04fb23a0c0699c0450e9fb02ef567412d2fa3"}, - {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dac37cf08fcf2094159922edc7a2784cfcc5c70f8354469f79ed085f0328ebdf"}, - {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e54ddd0bb8fb626aa1f9ba7b36629564544954fff9669b15da3610c22b9a0991"}, - {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3367007ad1951fde612bf65b0dffc8fd681a4ab98ac86957d16491400d661302"}, - {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:16f8740eb6dbacc7113e3097b0a36065a02e37b47c936b551805d40340fb9971"}, - {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:f4f2ca6df64cbdd27f27b34f35adb640b5d2d77264228554e68deda54456eb11"}, - {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:39807cbcbe406efca2a233884e169d056c35aa7e9f343d4e78665246a332f597"}, - {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7eece6fbd3eae4a92d7c748ae825cbc1ee41a89bb1c3db05b5578ed3cfcfd7cb"}, - {file = "regex-2023.10.3-cp37-cp37m-win32.whl", hash = "sha256:ce615c92d90df8373d9e13acddd154152645c0dc060871abf6bd43809673d20a"}, - {file = "regex-2023.10.3-cp37-cp37m-win_amd64.whl", hash = "sha256:0f649fa32fe734c4abdfd4edbb8381c74abf5f34bc0b3271ce687b23729299ed"}, - {file = "regex-2023.10.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9b98b7681a9437262947f41c7fac567c7e1f6eddd94b0483596d320092004533"}, - {file = "regex-2023.10.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:91dc1d531f80c862441d7b66c4505cd6ea9d312f01fb2f4654f40c6fdf5cc37a"}, - {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82fcc1f1cc3ff1ab8a57ba619b149b907072e750815c5ba63e7aa2e1163384a4"}, - {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7979b834ec7a33aafae34a90aad9f914c41fd6eaa8474e66953f3f6f7cbd4368"}, - {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef71561f82a89af6cfcbee47f0fabfdb6e63788a9258e913955d89fdd96902ab"}, - {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd829712de97753367153ed84f2de752b86cd1f7a88b55a3a775eb52eafe8a94"}, - {file = "regex-2023.10.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00e871d83a45eee2f8688d7e6849609c2ca2a04a6d48fba3dff4deef35d14f07"}, - {file = "regex-2023.10.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:706e7b739fdd17cb89e1fbf712d9dc21311fc2333f6d435eac2d4ee81985098c"}, - {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cc3f1c053b73f20c7ad88b0d1d23be7e7b3901229ce89f5000a8399746a6e039"}, - {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6f85739e80d13644b981a88f529d79c5bdf646b460ba190bffcaf6d57b2a9863"}, - {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:741ba2f511cc9626b7561a440f87d658aabb3d6b744a86a3c025f866b4d19e7f"}, - {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e77c90ab5997e85901da85131fd36acd0ed2221368199b65f0d11bca44549711"}, - {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:979c24cbefaf2420c4e377ecd1f165ea08cc3d1fbb44bdc51bccbbf7c66a2cb4"}, - {file = "regex-2023.10.3-cp38-cp38-win32.whl", hash = "sha256:58837f9d221744d4c92d2cf7201c6acd19623b50c643b56992cbd2b745485d3d"}, - {file = "regex-2023.10.3-cp38-cp38-win_amd64.whl", hash = "sha256:c55853684fe08d4897c37dfc5faeff70607a5f1806c8be148f1695be4a63414b"}, - {file = "regex-2023.10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2c54e23836650bdf2c18222c87f6f840d4943944146ca479858404fedeb9f9af"}, - {file = "regex-2023.10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:69c0771ca5653c7d4b65203cbfc5e66db9375f1078689459fe196fe08b7b4930"}, - {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ac965a998e1388e6ff2e9781f499ad1eaa41e962a40d11c7823c9952c77123e"}, - {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c0e8fae5b27caa34177bdfa5a960c46ff2f78ee2d45c6db15ae3f64ecadde14"}, - {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c56c3d47da04f921b73ff9415fbaa939f684d47293f071aa9cbb13c94afc17d"}, - {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ef1e014eed78ab650bef9a6a9cbe50b052c0aebe553fb2881e0453717573f52"}, - {file = "regex-2023.10.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d29338556a59423d9ff7b6eb0cb89ead2b0875e08fe522f3e068b955c3e7b59b"}, - {file = "regex-2023.10.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9c6d0ced3c06d0f183b73d3c5920727268d2201aa0fe6d55c60d68c792ff3588"}, - {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:994645a46c6a740ee8ce8df7911d4aee458d9b1bc5639bc968226763d07f00fa"}, - {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:66e2fe786ef28da2b28e222c89502b2af984858091675044d93cb50e6f46d7af"}, - {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:11175910f62b2b8c055f2b089e0fedd694fe2be3941b3e2633653bc51064c528"}, - {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:06e9abc0e4c9ab4779c74ad99c3fc10d3967d03114449acc2c2762ad4472b8ca"}, - {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fb02e4257376ae25c6dd95a5aec377f9b18c09be6ebdefa7ad209b9137b73d48"}, - {file = "regex-2023.10.3-cp39-cp39-win32.whl", hash = "sha256:3b2c3502603fab52d7619b882c25a6850b766ebd1b18de3df23b2f939360e1bd"}, - {file = "regex-2023.10.3-cp39-cp39-win_amd64.whl", hash = "sha256:adbccd17dcaff65704c856bd29951c58a1bd4b2b0f8ad6b826dbd543fe740988"}, - {file = "regex-2023.10.3.tar.gz", hash = "sha256:3fef4f844d2290ee0ba57addcec17eec9e3df73f10a2748485dfd6a3a188cc0f"}, + {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0694219a1d54336fd0445ea382d49d36882415c0134ee1e8332afd1529f0baa5"}, + {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b014333bd0217ad3d54c143de9d4b9a3ca1c5a29a6d0d554952ea071cff0f1f8"}, + {file = "regex-2023.12.25-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d865984b3f71f6d0af64d0d88f5733521698f6c16f445bb09ce746c92c97c586"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e0eabac536b4cc7f57a5f3d095bfa557860ab912f25965e08fe1545e2ed8b4c"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c25a8ad70e716f96e13a637802813f65d8a6760ef48672aa3502f4c24ea8b400"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9b6d73353f777630626f403b0652055ebfe8ff142a44ec2cf18ae470395766e"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9cc99d6946d750eb75827cb53c4371b8b0fe89c733a94b1573c9dd16ea6c9e4"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88d1f7bef20c721359d8675f7d9f8e414ec5003d8f642fdfd8087777ff7f94b5"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cb3fe77aec8f1995611f966d0c656fdce398317f850d0e6e7aebdfe61f40e1cd"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7aa47c2e9ea33a4a2a05f40fcd3ea36d73853a2aae7b4feab6fc85f8bf2c9704"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:df26481f0c7a3f8739fecb3e81bc9da3fcfae34d6c094563b9d4670b047312e1"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c40281f7d70baf6e0db0c2f7472b31609f5bc2748fe7275ea65a0b4601d9b392"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:d94a1db462d5690ebf6ae86d11c5e420042b9898af5dcf278bd97d6bda065423"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ba1b30765a55acf15dce3f364e4928b80858fa8f979ad41f862358939bdd1f2f"}, + {file = "regex-2023.12.25-cp310-cp310-win32.whl", hash = "sha256:150c39f5b964e4d7dba46a7962a088fbc91f06e606f023ce57bb347a3b2d4630"}, + {file = "regex-2023.12.25-cp310-cp310-win_amd64.whl", hash = "sha256:09da66917262d9481c719599116c7dc0c321ffcec4b1f510c4f8a066f8768105"}, + {file = "regex-2023.12.25-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1b9d811f72210fa9306aeb88385b8f8bcef0dfbf3873410413c00aa94c56c2b6"}, + {file = "regex-2023.12.25-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d902a43085a308cef32c0d3aea962524b725403fd9373dea18110904003bac97"}, + {file = "regex-2023.12.25-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d166eafc19f4718df38887b2bbe1467a4f74a9830e8605089ea7a30dd4da8887"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7ad32824b7f02bb3c9f80306d405a1d9b7bb89362d68b3c5a9be53836caebdb"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:636ba0a77de609d6510235b7f0e77ec494d2657108f777e8765efc060094c98c"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fda75704357805eb953a3ee15a2b240694a9a514548cd49b3c5124b4e2ad01b"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f72cbae7f6b01591f90814250e636065850c5926751af02bb48da94dfced7baa"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db2a0b1857f18b11e3b0e54ddfefc96af46b0896fb678c85f63fb8c37518b3e7"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7502534e55c7c36c0978c91ba6f61703faf7ce733715ca48f499d3dbbd7657e0"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e8c7e08bb566de4faaf11984af13f6bcf6a08f327b13631d41d62592681d24fe"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:283fc8eed679758de38fe493b7d7d84a198b558942b03f017b1f94dda8efae80"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:f44dd4d68697559d007462b0a3a1d9acd61d97072b71f6d1968daef26bc744bd"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:67d3ccfc590e5e7197750fcb3a2915b416a53e2de847a728cfa60141054123d4"}, + {file = "regex-2023.12.25-cp311-cp311-win32.whl", hash = "sha256:68191f80a9bad283432385961d9efe09d783bcd36ed35a60fb1ff3f1ec2efe87"}, + {file = "regex-2023.12.25-cp311-cp311-win_amd64.whl", hash = "sha256:7d2af3f6b8419661a0c421584cfe8aaec1c0e435ce7e47ee2a97e344b98f794f"}, + {file = "regex-2023.12.25-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8a0ccf52bb37d1a700375a6b395bff5dd15c50acb745f7db30415bae3c2b0715"}, + {file = "regex-2023.12.25-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c3c4a78615b7762740531c27cf46e2f388d8d727d0c0c739e72048beb26c8a9d"}, + {file = "regex-2023.12.25-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ad83e7545b4ab69216cef4cc47e344d19622e28aabec61574b20257c65466d6a"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7a635871143661feccce3979e1727c4e094f2bdfd3ec4b90dfd4f16f571a87a"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d498eea3f581fbe1b34b59c697512a8baef88212f92e4c7830fcc1499f5b45a5"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43f7cd5754d02a56ae4ebb91b33461dc67be8e3e0153f593c509e21d219c5060"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51f4b32f793812714fd5307222a7f77e739b9bc566dc94a18126aba3b92b98a3"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba99d8077424501b9616b43a2d208095746fb1284fc5ba490139651f971d39d9"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4bfc2b16e3ba8850e0e262467275dd4d62f0d045e0e9eda2bc65078c0110a11f"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8c2c19dae8a3eb0ea45a8448356ed561be843b13cbc34b840922ddf565498c1c"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:60080bb3d8617d96f0fb7e19796384cc2467447ef1c491694850ebd3670bc457"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b77e27b79448e34c2c51c09836033056a0547aa360c45eeeb67803da7b0eedaf"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:518440c991f514331f4850a63560321f833979d145d7d81186dbe2f19e27ae3d"}, + {file = "regex-2023.12.25-cp312-cp312-win32.whl", hash = "sha256:e2610e9406d3b0073636a3a2e80db05a02f0c3169b5632022b4e81c0364bcda5"}, + {file = "regex-2023.12.25-cp312-cp312-win_amd64.whl", hash = "sha256:cc37b9aeebab425f11f27e5e9e6cf580be7206c6582a64467a14dda211abc232"}, + {file = "regex-2023.12.25-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:da695d75ac97cb1cd725adac136d25ca687da4536154cdc2815f576e4da11c69"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d126361607b33c4eb7b36debc173bf25d7805847346dd4d99b5499e1fef52bc7"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4719bb05094d7d8563a450cf8738d2e1061420f79cfcc1fa7f0a44744c4d8f73"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5dd58946bce44b53b06d94aa95560d0b243eb2fe64227cba50017a8d8b3cd3e2"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22a86d9fff2009302c440b9d799ef2fe322416d2d58fc124b926aa89365ec482"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2aae8101919e8aa05ecfe6322b278f41ce2994c4a430303c4cd163fef746e04f"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e692296c4cc2873967771345a876bcfc1c547e8dd695c6b89342488b0ea55cd8"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:263ef5cc10979837f243950637fffb06e8daed7f1ac1e39d5910fd29929e489a"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:d6f7e255e5fa94642a0724e35406e6cb7001c09d476ab5fce002f652b36d0c39"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:88ad44e220e22b63b0f8f81f007e8abbb92874d8ced66f32571ef8beb0643b2b"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:3a17d3ede18f9cedcbe23d2daa8a2cd6f59fe2bf082c567e43083bba3fb00347"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d15b274f9e15b1a0b7a45d2ac86d1f634d983ca40d6b886721626c47a400bf39"}, + {file = "regex-2023.12.25-cp37-cp37m-win32.whl", hash = "sha256:ed19b3a05ae0c97dd8f75a5d8f21f7723a8c33bbc555da6bbe1f96c470139d3c"}, + {file = "regex-2023.12.25-cp37-cp37m-win_amd64.whl", hash = "sha256:a6d1047952c0b8104a1d371f88f4ab62e6275567d4458c1e26e9627ad489b445"}, + {file = "regex-2023.12.25-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b43523d7bc2abd757119dbfb38af91b5735eea45537ec6ec3a5ec3f9562a1c53"}, + {file = "regex-2023.12.25-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:efb2d82f33b2212898f1659fb1c2e9ac30493ac41e4d53123da374c3b5541e64"}, + {file = "regex-2023.12.25-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7fca9205b59c1a3d5031f7e64ed627a1074730a51c2a80e97653e3e9fa0d415"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086dd15e9435b393ae06f96ab69ab2d333f5d65cbe65ca5a3ef0ec9564dfe770"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e81469f7d01efed9b53740aedd26085f20d49da65f9c1f41e822a33992cb1590"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:34e4af5b27232f68042aa40a91c3b9bb4da0eeb31b7632e0091afc4310afe6cb"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9852b76ab558e45b20bf1893b59af64a28bd3820b0c2efc80e0a70a4a3ea51c1"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff100b203092af77d1a5a7abe085b3506b7eaaf9abf65b73b7d6905b6cb76988"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cc038b2d8b1470364b1888a98fd22d616fba2b6309c5b5f181ad4483e0017861"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:094ba386bb5c01e54e14434d4caabf6583334090865b23ef58e0424a6286d3dc"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5cd05d0f57846d8ba4b71d9c00f6f37d6b97d5e5ef8b3c3840426a475c8f70f4"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:9aa1a67bbf0f957bbe096375887b2505f5d8ae16bf04488e8b0f334c36e31360"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:98a2636994f943b871786c9e82bfe7883ecdaba2ef5df54e1450fa9869d1f756"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:37f8e93a81fc5e5bd8db7e10e62dc64261bcd88f8d7e6640aaebe9bc180d9ce2"}, + {file = "regex-2023.12.25-cp38-cp38-win32.whl", hash = "sha256:d78bd484930c1da2b9679290a41cdb25cc127d783768a0369d6b449e72f88beb"}, + {file = "regex-2023.12.25-cp38-cp38-win_amd64.whl", hash = "sha256:b521dcecebc5b978b447f0f69b5b7f3840eac454862270406a39837ffae4e697"}, + {file = "regex-2023.12.25-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f7bc09bc9c29ebead055bcba136a67378f03d66bf359e87d0f7c759d6d4ffa31"}, + {file = "regex-2023.12.25-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e14b73607d6231f3cc4622809c196b540a6a44e903bcfad940779c80dffa7be7"}, + {file = "regex-2023.12.25-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9eda5f7a50141291beda3edd00abc2d4a5b16c29c92daf8d5bd76934150f3edc"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc6bb9aa69aacf0f6032c307da718f61a40cf970849e471254e0e91c56ffca95"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:298dc6354d414bc921581be85695d18912bea163a8b23cac9a2562bbcd5088b1"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2f4e475a80ecbd15896a976aa0b386c5525d0ed34d5c600b6d3ebac0a67c7ddf"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:531ac6cf22b53e0696f8e1d56ce2396311254eb806111ddd3922c9d937151dae"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22f3470f7524b6da61e2020672df2f3063676aff444db1daa283c2ea4ed259d6"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:89723d2112697feaa320c9d351e5f5e7b841e83f8b143dba8e2d2b5f04e10923"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0ecf44ddf9171cd7566ef1768047f6e66975788258b1c6c6ca78098b95cf9a3d"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:905466ad1702ed4acfd67a902af50b8db1feeb9781436372261808df7a2a7bca"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:4558410b7a5607a645e9804a3e9dd509af12fb72b9825b13791a37cd417d73a5"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:7e316026cc1095f2a3e8cc012822c99f413b702eaa2ca5408a513609488cb62f"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3b1de218d5375cd6ac4b5493e0b9f3df2be331e86520f23382f216c137913d20"}, + {file = "regex-2023.12.25-cp39-cp39-win32.whl", hash = "sha256:11a963f8e25ab5c61348d090bf1b07f1953929c13bd2309a0662e9ff680763c9"}, + {file = "regex-2023.12.25-cp39-cp39-win_amd64.whl", hash = "sha256:e693e233ac92ba83a87024e1d32b5f9ab15ca55ddd916d878146f4e3406b5c91"}, + {file = "regex-2023.12.25.tar.gz", hash = "sha256:29171aa128da69afdf4bde412d5bedc335f2ca8fcfe4489038577d05f16181e5"}, ] [[package]] @@ -3172,110 +3259,110 @@ files = [ [[package]] name = "rpds-py" -version = "0.12.0" +version = "0.16.2" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" files = [ - {file = "rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:c694bee70ece3b232df4678448fdda245fd3b1bb4ba481fb6cd20e13bb784c46"}, - {file = "rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:30e5ce9f501fb1f970e4a59098028cf20676dee64fc496d55c33e04bbbee097d"}, - {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d72a4315514e5a0b9837a086cb433b004eea630afb0cc129de76d77654a9606f"}, - {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eebaf8c76c39604d52852366249ab807fe6f7a3ffb0dd5484b9944917244cdbe"}, - {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a239303acb0315091d54c7ff36712dba24554993b9a93941cf301391d8a997ee"}, - {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ced40cdbb6dd47a032725a038896cceae9ce267d340f59508b23537f05455431"}, - {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c8c0226c71bd0ce9892eaf6afa77ae8f43a3d9313124a03df0b389c01f832de"}, - {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b8e11715178f3608874508f08e990d3771e0b8c66c73eb4e183038d600a9b274"}, - {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5210a0018c7e09c75fa788648617ebba861ae242944111d3079034e14498223f"}, - {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:171d9a159f1b2f42a42a64a985e4ba46fc7268c78299272ceba970743a67ee50"}, - {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:57ec6baec231bb19bb5fd5fc7bae21231860a1605174b11585660236627e390e"}, - {file = "rpds_py-0.12.0-cp310-none-win32.whl", hash = "sha256:7188ddc1a8887194f984fa4110d5a3d5b9b5cd35f6bafdff1b649049cbc0ce29"}, - {file = "rpds_py-0.12.0-cp310-none-win_amd64.whl", hash = "sha256:1e04581c6117ad9479b6cfae313e212fe0dfa226ac727755f0d539cd54792963"}, - {file = "rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:0a38612d07a36138507d69646c470aedbfe2b75b43a4643f7bd8e51e52779624"}, - {file = "rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f12d69d568f5647ec503b64932874dade5a20255736c89936bf690951a5e79f5"}, - {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8a1d990dc198a6c68ec3d9a637ba1ce489b38cbfb65440a27901afbc5df575"}, - {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8c567c664fc2f44130a20edac73e0a867f8e012bf7370276f15c6adc3586c37c"}, - {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0e9e976e0dbed4f51c56db10831c9623d0fd67aac02853fe5476262e5a22acb7"}, - {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efddca2d02254a52078c35cadad34762adbae3ff01c6b0c7787b59d038b63e0d"}, - {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9e7f29c00577aff6b318681e730a519b235af292732a149337f6aaa4d1c5e31"}, - {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:389c0e38358fdc4e38e9995e7291269a3aead7acfcf8942010ee7bc5baee091c"}, - {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33ab498f9ac30598b6406e2be1b45fd231195b83d948ebd4bd77f337cb6a2bff"}, - {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d56b1cd606ba4cedd64bb43479d56580e147c6ef3f5d1c5e64203a1adab784a2"}, - {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1fa73ed22c40a1bec98d7c93b5659cd35abcfa5a0a95ce876b91adbda170537c"}, - {file = "rpds_py-0.12.0-cp311-none-win32.whl", hash = "sha256:dbc25baa6abb205766fb8606f8263b02c3503a55957fcb4576a6bb0a59d37d10"}, - {file = "rpds_py-0.12.0-cp311-none-win_amd64.whl", hash = "sha256:c6b52b7028b547866c2413f614ee306c2d4eafdd444b1ff656bf3295bf1484aa"}, - {file = "rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:9620650c364c01ed5b497dcae7c3d4b948daeae6e1883ae185fef1c927b6b534"}, - {file = "rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2124f9e645a94ab7c853bc0a3644e0ca8ffbe5bb2d72db49aef8f9ec1c285733"}, - {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281c8b219d4f4b3581b918b816764098d04964915b2f272d1476654143801aa2"}, - {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:27ccc93c7457ef890b0dd31564d2a05e1aca330623c942b7e818e9e7c2669ee4"}, - {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1c562a9bb72244fa767d1c1ab55ca1d92dd5f7c4d77878fee5483a22ffac808"}, - {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e57919c32ee295a2fca458bb73e4b20b05c115627f96f95a10f9f5acbd61172d"}, - {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa35ad36440aaf1ac8332b4a4a433d4acd28f1613f0d480995f5cfd3580e90b7"}, - {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e6aea5c0eb5b0faf52c7b5c4a47c8bb64437173be97227c819ffa31801fa4e34"}, - {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:81cf9d306c04df1b45971c13167dc3bad625808aa01281d55f3cf852dde0e206"}, - {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:08e6e7ff286254016b945e1ab632ee843e43d45e40683b66dd12b73791366dd1"}, - {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4d0a675a7acbbc16179188d8c6d0afb8628604fc1241faf41007255957335a0b"}, - {file = "rpds_py-0.12.0-cp312-none-win32.whl", hash = "sha256:b2287c09482949e0ca0c0eb68b2aca6cf57f8af8c6dfd29dcd3bc45f17b57978"}, - {file = "rpds_py-0.12.0-cp312-none-win_amd64.whl", hash = "sha256:8015835494b21aa7abd3b43fdea0614ee35ef6b03db7ecba9beb58eadf01c24f"}, - {file = "rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6174d6ad6b58a6bcf67afbbf1723420a53d06c4b89f4c50763d6fa0a6ac9afd2"}, - {file = "rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a689e1ded7137552bea36305a7a16ad2b40be511740b80748d3140614993db98"}, - {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f45321224144c25a62052035ce96cbcf264667bcb0d81823b1bbc22c4addd194"}, - {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa32205358a76bf578854bf31698a86dc8b2cb591fd1d79a833283f4a403f04b"}, - {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91bd2b7cf0f4d252eec8b7046fa6a43cee17e8acdfc00eaa8b3dbf2f9a59d061"}, - {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3acadbab8b59f63b87b518e09c4c64b142e7286b9ca7a208107d6f9f4c393c5c"}, - {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:429349a510da82c85431f0f3e66212d83efe9fd2850f50f339341b6532c62fe4"}, - {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:05942656cb2cb4989cd50ced52df16be94d344eae5097e8583966a1d27da73a5"}, - {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:0c5441b7626c29dbd54a3f6f3713ec8e956b009f419ffdaaa3c80eaf98ddb523"}, - {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:b6b0e17d39d21698185097652c611f9cf30f7c56ccec189789920e3e7f1cee56"}, - {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3b7a64d43e2a1fa2dd46b678e00cabd9a49ebb123b339ce799204c44a593ae1c"}, - {file = "rpds_py-0.12.0-cp38-none-win32.whl", hash = "sha256:e5bbe011a2cea9060fef1bb3d668a2fd8432b8888e6d92e74c9c794d3c101595"}, - {file = "rpds_py-0.12.0-cp38-none-win_amd64.whl", hash = "sha256:bec29b801b4adbf388314c0d050e851d53762ab424af22657021ce4b6eb41543"}, - {file = "rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:1096ca0bf2d3426cbe79d4ccc91dc5aaa73629b08ea2d8467375fad8447ce11a"}, - {file = "rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48aa98987d54a46e13e6954880056c204700c65616af4395d1f0639eba11764b"}, - {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7979d90ee2190d000129598c2b0c82f13053dba432b94e45e68253b09bb1f0f6"}, - {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:88857060b690a57d2ea8569bca58758143c8faa4639fb17d745ce60ff84c867e"}, - {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4eb74d44776b0fb0782560ea84d986dffec8ddd94947f383eba2284b0f32e35e"}, - {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f62581d7e884dd01ee1707b7c21148f61f2febb7de092ae2f108743fcbef5985"}, - {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f5dcb658d597410bb7c967c1d24eaf9377b0d621358cbe9d2ff804e5dd12e81"}, - {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bf9acce44e967a5103fcd820fc7580c7b0ab8583eec4e2051aec560f7b31a63"}, - {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:240687b5be0f91fbde4936a329c9b7589d9259742766f74de575e1b2046575e4"}, - {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:25740fb56e8bd37692ed380e15ec734be44d7c71974d8993f452b4527814601e"}, - {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a54917b7e9cd3a67e429a630e237a90b096e0ba18897bfb99ee8bd1068a5fea0"}, - {file = "rpds_py-0.12.0-cp39-none-win32.whl", hash = "sha256:b92aafcfab3d41580d54aca35a8057341f1cfc7c9af9e8bdfc652f83a20ced31"}, - {file = "rpds_py-0.12.0-cp39-none-win_amd64.whl", hash = "sha256:cd316dbcc74c76266ba94eb021b0cc090b97cca122f50bd7a845f587ff4bf03f"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0853da3d5e9bc6a07b2486054a410b7b03f34046c123c6561b535bb48cc509e1"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:cb41ad20064e18a900dd427d7cf41cfaec83bcd1184001f3d91a1f76b3fcea4e"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b710bf7e7ae61957d5c4026b486be593ed3ec3dca3e5be15e0f6d8cf5d0a4990"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a952ae3eb460c6712388ac2ec706d24b0e651b9396d90c9a9e0a69eb27737fdc"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0bedd91ae1dd142a4dc15970ed2c729ff6c73f33a40fa84ed0cdbf55de87c777"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:761531076df51309075133a6bc1db02d98ec7f66e22b064b1d513bc909f29743"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2baa6be130e8a00b6cbb9f18a33611ec150b4537f8563bddadb54c1b74b8193"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f05450fa1cd7c525c0b9d1a7916e595d3041ac0afbed2ff6926e5afb6a781b7f"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:81c4d1a3a564775c44732b94135d06e33417e829ff25226c164664f4a1046213"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e888be685fa42d8b8a3d3911d5604d14db87538aa7d0b29b1a7ea80d354c732d"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6f8d7fe73d1816eeb5378409adc658f9525ecbfaf9e1ede1e2d67a338b0c7348"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0831d3ecdea22e4559cc1793f22e77067c9d8c451d55ae6a75bf1d116a8e7f42"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:513ccbf7420c30e283c25c82d5a8f439d625a838d3ba69e79a110c260c46813f"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:301bd744a1adaa2f6a5e06c98f1ac2b6f8dc31a5c23b838f862d65e32fca0d4b"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f8832a4f83d4782a8f5a7b831c47e8ffe164e43c2c148c8160ed9a6d630bc02a"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b2416ed743ec5debcf61e1242e012652a4348de14ecc7df3512da072b074440"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35585a8cb5917161f42c2104567bb83a1d96194095fc54a543113ed5df9fa436"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d389ff1e95b6e46ebedccf7fd1fadd10559add595ac6a7c2ea730268325f832c"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9b007c2444705a2dc4a525964fd4dd28c3320b19b3410da6517cab28716f27d3"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:188912b22b6c8225f4c4ffa020a2baa6ad8fabb3c141a12dbe6edbb34e7f1425"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b4cf9ab9a0ae0cb122685209806d3f1dcb63b9fccdf1424fb42a129dc8c2faa"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:2d34a5450a402b00d20aeb7632489ffa2556ca7b26f4a63c35f6fccae1977427"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:466030a42724780794dea71eb32db83cc51214d66ab3fb3156edd88b9c8f0d78"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:68172622a5a57deb079a2c78511c40f91193548e8ab342c31e8cb0764d362459"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54cdfcda59251b9c2f87a05d038c2ae02121219a04d4a1e6fc345794295bdc07"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6b75b912a0baa033350367a8a07a8b2d44fd5b90c890bfbd063a8a5f945f644b"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47aeceb4363851d17f63069318ba5721ae695d9da55d599b4d6fb31508595278"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0525847f83f506aa1e28eb2057b696fe38217e12931c8b1b02198cfe6975e142"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efbe0b5e0fd078ed7b005faa0170da4f72666360f66f0bb2d7f73526ecfd99f9"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0fadfdda275c838cba5102c7f90a20f2abd7727bf8f4a2b654a5b617529c5c18"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:56dd500411d03c5e9927a1eb55621e906837a83b02350a9dc401247d0353717c"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:6915fc9fa6b3ec3569566832e1bb03bd801c12cea030200e68663b9a87974e76"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5f1519b080d8ce0a814f17ad9fb49fb3a1d4d7ce5891f5c85fc38631ca3a8dc4"}, - {file = "rpds_py-0.12.0.tar.gz", hash = "sha256:7036316cc26b93e401cedd781a579be606dad174829e6ad9e9c5a0da6e036f80"}, + {file = "rpds_py-0.16.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:509b617ac787cd1149600e731db9274ebbef094503ca25158e6f23edaba1ca8f"}, + {file = "rpds_py-0.16.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:413b9c17388bbd0d87a329d8e30c1a4c6e44e2bb25457f43725a8e6fe4161e9e"}, + {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2946b120718eba9af2b4dd103affc1164a87b9e9ebff8c3e4c05d7b7a7e274e2"}, + {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:35ae5ece284cf36464eb160880018cf6088a9ac5ddc72292a6092b6ef3f4da53"}, + {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc6a7620ba7639a3db6213da61312cb4aa9ac0ca6e00dc1cbbdc21c2aa6eb57"}, + {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8cb6fe8ecdfffa0e711a75c931fb39f4ba382b4b3ccedeca43f18693864fe850"}, + {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dace7b26a13353e24613417ce2239491b40a6ad44e5776a18eaff7733488b44"}, + {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1bdbc5fcb04a7309074de6b67fa9bc4b418ab3fc435fec1f2779a0eced688d04"}, + {file = "rpds_py-0.16.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f42e25c016927e2a6b1ce748112c3ab134261fc2ddc867e92d02006103e1b1b7"}, + {file = "rpds_py-0.16.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:eab36eae3f3e8e24b05748ec9acc66286662f5d25c52ad70cadab544e034536b"}, + {file = "rpds_py-0.16.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0474df4ade9a3b4af96c3d36eb81856cb9462e4c6657d4caecfd840d2a13f3c9"}, + {file = "rpds_py-0.16.2-cp310-none-win32.whl", hash = "sha256:84c5a4d1f9dd7e2d2c44097fb09fffe728629bad31eb56caf97719e55575aa82"}, + {file = "rpds_py-0.16.2-cp310-none-win_amd64.whl", hash = "sha256:2bd82db36cd70b3628c0c57d81d2438e8dd4b7b32a6a9f25f24ab0e657cb6c4e"}, + {file = "rpds_py-0.16.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:adc0c3d6fc6ae35fee3e4917628983f6ce630d513cbaad575b4517d47e81b4bb"}, + {file = "rpds_py-0.16.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ec23fcad480e77ede06cf4127a25fc440f7489922e17fc058f426b5256ee0edb"}, + {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07aab64e2808c3ebac2a44f67e9dc0543812b715126dfd6fe4264df527556cb6"}, + {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a4ebb8b20bd09c5ce7884c8f0388801100f5e75e7f733b1b6613c713371feefc"}, + {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3d7e2ea25d3517c6d7e5a1cc3702cffa6bd18d9ef8d08d9af6717fc1c700eed"}, + {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f28ac0e8e7242d140f99402a903a2c596ab71550272ae9247ad78f9a932b5698"}, + {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19f00f57fdd38db4bb5ad09f9ead1b535332dbf624200e9029a45f1f35527ebb"}, + {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3da5a4c56953bdbf6d04447c3410309616c54433146ccdb4a277b9cb499bc10e"}, + {file = "rpds_py-0.16.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ec2e1cf025b2c0f48ec17ff3e642661da7ee332d326f2e6619366ce8e221f018"}, + {file = "rpds_py-0.16.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e0441fb4fdd39a230477b2ca9be90868af64425bfe7b122b57e61e45737a653b"}, + {file = "rpds_py-0.16.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9f0350ef2fba5f34eb0c9000ea328e51b9572b403d2f7f3b19f24085f6f598e8"}, + {file = "rpds_py-0.16.2-cp311-none-win32.whl", hash = "sha256:5a80e2f83391ad0808b4646732af2a7b67550b98f0cae056cb3b40622a83dbb3"}, + {file = "rpds_py-0.16.2-cp311-none-win_amd64.whl", hash = "sha256:e04e56b4ca7a770593633556e8e9e46579d66ec2ada846b401252a2bdcf70a6d"}, + {file = "rpds_py-0.16.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:5e6caa3809e50690bd92fa490f5c38caa86082c8c3315aa438bce43786d5e90d"}, + {file = "rpds_py-0.16.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2e53b9b25cac9065328901713a7e9e3b12e4f57ef4280b370fbbf6fef2052eef"}, + {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af27423662f32d7501a00c5e7342f7dbd1e4a718aea7a239781357d15d437133"}, + {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:43d4dd5fb16eb3825742bad8339d454054261ab59fed2fbac84e1d84d5aae7ba"}, + {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e061de3b745fe611e23cd7318aec2c8b0e4153939c25c9202a5811ca911fd733"}, + {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b811d182ad17ea294f2ec63c0621e7be92a1141e1012383461872cead87468f"}, + {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5552f328eaef1a75ff129d4d0c437bf44e43f9436d3996e8eab623ea0f5fcf73"}, + {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dcbe1f8dd179e4d69b70b1f1d9bb6fd1e7e1bdc9c9aad345cdeb332e29d40748"}, + {file = "rpds_py-0.16.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8aad80645a011abae487d356e0ceb359f4938dfb6f7bcc410027ed7ae4f7bb8b"}, + {file = "rpds_py-0.16.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b6f5549d6ed1da9bfe3631ca9483ae906f21410be2445b73443fa9f017601c6f"}, + {file = "rpds_py-0.16.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d452817e0d9c749c431a1121d56a777bd7099b720b3d1c820f1725cb40928f58"}, + {file = "rpds_py-0.16.2-cp312-none-win32.whl", hash = "sha256:888a97002e986eca10d8546e3c8b97da1d47ad8b69726dcfeb3e56348ebb28a3"}, + {file = "rpds_py-0.16.2-cp312-none-win_amd64.whl", hash = "sha256:d8dda2a806dfa4a9b795950c4f5cc56d6d6159f7d68080aedaff3bdc9b5032f5"}, + {file = "rpds_py-0.16.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:071980663c273bf3d388fe5c794c547e6f35ba3335477072c713a3176bf14a60"}, + {file = "rpds_py-0.16.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:726ac36e8a3bb8daef2fd482534cabc5e17334052447008405daca7ca04a3108"}, + {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9e557db6a177470316c82f023e5d571811c9a4422b5ea084c85da9aa3c035fc"}, + {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:90123853fc8b1747f80b0d354be3d122b4365a93e50fc3aacc9fb4c2488845d6"}, + {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a61f659665a39a4d17d699ab3593d7116d66e1e2e3f03ef3fb8f484e91908808"}, + {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc97f0640e91d7776530f06e6836c546c1c752a52de158720c4224c9e8053cad"}, + {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44a54e99a2b9693a37ebf245937fd6e9228b4cbd64b9cc961e1f3391ec6c7391"}, + {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bd4b677d929cf1f6bac07ad76e0f2d5de367e6373351c01a9c0a39f6b21b4a8b"}, + {file = "rpds_py-0.16.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:5ef00873303d678aaf8b0627e111fd434925ca01c657dbb2641410f1cdaef261"}, + {file = "rpds_py-0.16.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:349cb40897fd529ca15317c22c0eab67f5ac5178b5bd2c6adc86172045210acc"}, + {file = "rpds_py-0.16.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2ddef620e70eaffebed5932ce754d539c0930f676aae6212f8e16cd9743dd365"}, + {file = "rpds_py-0.16.2-cp38-none-win32.whl", hash = "sha256:882ce6e25e585949c3d9f9abd29202367175e0aab3aba0c58c9abbb37d4982ff"}, + {file = "rpds_py-0.16.2-cp38-none-win_amd64.whl", hash = "sha256:f4bd4578e44f26997e9e56c96dedc5f1af43cc9d16c4daa29c771a00b2a26851"}, + {file = "rpds_py-0.16.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:69ac7ea9897ec201ce68b48582f3eb34a3f9924488a5432a93f177bf76a82a7e"}, + {file = "rpds_py-0.16.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a9880b4656efe36ccad41edc66789e191e5ee19a1ea8811e0aed6f69851a82f4"}, + {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee94cb58c0ba2c62ee108c2b7c9131b2c66a29e82746e8fa3aa1a1effbd3dcf1"}, + {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:24f7a2eb3866a9e91f4599851e0c8d39878a470044875c49bd528d2b9b88361c"}, + {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ca57468da2d9a660bcf8961637c85f2fbb2aa64d9bc3f9484e30c3f9f67b1dd7"}, + {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ccd4e400309e1f34a5095bf9249d371f0fd60f8a3a5c4a791cad7b99ce1fd38d"}, + {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80443fe2f7b3ea3934c5d75fb0e04a5dbb4a8e943e5ff2de0dec059202b70a8b"}, + {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4d6a9f052e72d493efd92a77f861e45bab2f6be63e37fa8ecf0c6fd1a58fedb0"}, + {file = "rpds_py-0.16.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:35953f4f2b3216421af86fd236b7c0c65935936a94ea83ddbd4904ba60757773"}, + {file = "rpds_py-0.16.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:981d135c7cdaf6cd8eadae1c950de43b976de8f09d8e800feed307140d3d6d00"}, + {file = "rpds_py-0.16.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d0dd7ed2f16df2e129496e7fbe59a34bc2d7fc8db443a606644d069eb69cbd45"}, + {file = "rpds_py-0.16.2-cp39-none-win32.whl", hash = "sha256:703d95c75a72e902544fda08e965885525e297578317989fd15a6ce58414b41d"}, + {file = "rpds_py-0.16.2-cp39-none-win_amd64.whl", hash = "sha256:e93ec1b300acf89730cf27975ef574396bc04edecc358e9bd116fb387a123239"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:44627b6ca7308680a70766454db5249105fa6344853af6762eaad4158a2feebe"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:3f91df8e6dbb7360e176d1affd5fb0246d2b88d16aa5ebc7db94fd66b68b61da"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d904c5693e08bad240f16d79305edba78276be87061c872a4a15e2c301fa2c0"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:290a81cfbe4673285cdf140ec5cd1658ffbf63ab359f2b352ebe172e7cfa5bf0"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b634c5ec0103c5cbebc24ebac4872b045cccb9456fc59efdcf6fe39775365bd2"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a297a4d08cc67c7466c873c78039d87840fb50d05473db0ec1b7b03d179bf322"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2e75e17bd0bb66ee34a707da677e47c14ee51ccef78ed6a263a4cc965a072a1"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f1b9d9260e06ea017feb7172976ab261e011c1dc2f8883c7c274f6b2aabfe01a"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:162d7cd9cd311c1b0ff1c55a024b8f38bd8aad1876b648821da08adc40e95734"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:9b32f742ce5b57201305f19c2ef7a184b52f6f9ba6871cc042c2a61f0d6b49b8"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac08472f41ea77cd6a5dae36ae7d4ed3951d6602833af87532b556c1b4601d63"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:495a14b72bbe217f2695dcd9b5ab14d4f8066a00f5d209ed94f0aca307f85f6e"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:8d6b6937ae9eac6d6c0ca3c42774d89fa311f55adff3970fb364b34abde6ed3d"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a61226465bda9283686db8f17d02569a98e4b13c637be5a26d44aa1f1e361c2"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5cf6af100ffb5c195beec11ffaa8cf8523057f123afa2944e6571d54da84cdc9"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6df15846ee3fb2e6397fe25d7ca6624af9f89587f3f259d177b556fed6bebe2c"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1be2f033df1b8be8c3167ba3c29d5dca425592ee31e35eac52050623afba5772"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96f957d6ab25a78b9e7fc9749d754b98eac825a112b4e666525ce89afcbd9ed5"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:088396c7c70e59872f67462fcac3ecbded5233385797021976a09ebd55961dfe"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4c46ad6356e1561f2a54f08367d1d2e70a0a1bb2db2282d2c1972c1d38eafc3b"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:47713dc4fce213f5c74ca8a1f6a59b622fc1b90868deb8e8e4d993e421b4b39d"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:f811771019f063bbd0aa7bb72c8a934bc13ebacb4672d712fc1639cfd314cccc"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f19afcfc0dd0dca35694df441e9b0f95bc231b512f51bded3c3d8ca32153ec19"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a4b682c5775d6a3d21e314c10124599976809455ee67020e8e72df1769b87bc3"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c647ca87fc0ebe808a41de912e9a1bfef9acb85257e5d63691364ac16b81c1f0"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:302bd4983bbd47063e452c38be66153760112f6d3635c7eeefc094299fa400a9"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bf721ede3eb7b829e4a9b8142bd55db0bdc82902720548a703f7e601ee13bdc3"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:358dafc89ce3894c7f486c615ba914609f38277ef67f566abc4c854d23b997fa"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cad0f59ee3dc35526039f4bc23642d52d5f6616b5f687d846bfc6d0d6d486db0"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cffa76b385dfe1e38527662a302b19ffb0e7f5cf7dd5e89186d2c94a22dd9d0c"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:83640a5d7cd3bff694747d50436b8b541b5b9b9782b0c8c1688931d6ee1a1f2d"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:ed99b4f7179d2111702020fd7d156e88acd533f5a7d3971353e568b6051d5c97"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:4022b9dc620e14f30201a8a73898a873c8e910cb642bcd2f3411123bc527f6ac"}, + {file = "rpds_py-0.16.2.tar.gz", hash = "sha256:781ef8bfc091b19960fc0142a23aedadafa826bc32b433fdfe6fd7f964d7ef44"}, ] [[package]] @@ -3375,36 +3462,36 @@ tests = ["black (>=23.3.0)", "matplotlib (>=3.1.3)", "mypy (>=1.3)", "numpydoc ( [[package]] name = "scipy" -version = "1.11.3" +version = "1.11.4" description = "Fundamental algorithms for scientific computing in Python" optional = false -python-versions = "<3.13,>=3.9" -files = [ - {file = "scipy-1.11.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:370f569c57e1d888304052c18e58f4a927338eafdaef78613c685ca2ea0d1fa0"}, - {file = "scipy-1.11.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:9885e3e4f13b2bd44aaf2a1a6390a11add9f48d5295f7a592393ceb8991577a3"}, - {file = "scipy-1.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e04aa19acc324a1a076abb4035dabe9b64badb19f76ad9c798bde39d41025cdc"}, - {file = "scipy-1.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e1a8a4657673bfae1e05e1e1d6e94b0cabe5ed0c7c144c8aa7b7dbb774ce5c1"}, - {file = "scipy-1.11.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7abda0e62ef00cde826d441485e2e32fe737bdddee3324e35c0e01dee65e2a88"}, - {file = "scipy-1.11.3-cp310-cp310-win_amd64.whl", hash = "sha256:033c3fd95d55012dd1148b201b72ae854d5086d25e7c316ec9850de4fe776929"}, - {file = "scipy-1.11.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:925c6f09d0053b1c0f90b2d92d03b261e889b20d1c9b08a3a51f61afc5f58165"}, - {file = "scipy-1.11.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5664e364f90be8219283eeb844323ff8cd79d7acbd64e15eb9c46b9bc7f6a42a"}, - {file = "scipy-1.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00f325434b6424952fbb636506f0567898dca7b0f7654d48f1c382ea338ce9a3"}, - {file = "scipy-1.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f290cf561a4b4edfe8d1001ee4be6da60c1c4ea712985b58bf6bc62badee221"}, - {file = "scipy-1.11.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:91770cb3b1e81ae19463b3c235bf1e0e330767dca9eb4cd73ba3ded6c4151e4d"}, - {file = "scipy-1.11.3-cp311-cp311-win_amd64.whl", hash = "sha256:e1f97cd89c0fe1a0685f8f89d85fa305deb3067d0668151571ba50913e445820"}, - {file = "scipy-1.11.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dfcc1552add7cb7c13fb70efcb2389d0624d571aaf2c80b04117e2755a0c5d15"}, - {file = "scipy-1.11.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:0d3a136ae1ff0883fffbb1b05b0b2fea251cb1046a5077d0b435a1839b3e52b7"}, - {file = "scipy-1.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bae66a2d7d5768eaa33008fa5a974389f167183c87bf39160d3fefe6664f8ddc"}, - {file = "scipy-1.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2f6dee6cbb0e263b8142ed587bc93e3ed5e777f1f75448d24fb923d9fd4dce6"}, - {file = "scipy-1.11.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:74e89dc5e00201e71dd94f5f382ab1c6a9f3ff806c7d24e4e90928bb1aafb280"}, - {file = "scipy-1.11.3-cp312-cp312-win_amd64.whl", hash = "sha256:90271dbde4be191522b3903fc97334e3956d7cfb9cce3f0718d0ab4fd7d8bfd6"}, - {file = "scipy-1.11.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a63d1ec9cadecce838467ce0631c17c15c7197ae61e49429434ba01d618caa83"}, - {file = "scipy-1.11.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:5305792c7110e32ff155aed0df46aa60a60fc6e52cd4ee02cdeb67eaccd5356e"}, - {file = "scipy-1.11.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ea7f579182d83d00fed0e5c11a4aa5ffe01460444219dedc448a36adf0c3917"}, - {file = "scipy-1.11.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c77da50c9a91e23beb63c2a711ef9e9ca9a2060442757dffee34ea41847d8156"}, - {file = "scipy-1.11.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:15f237e890c24aef6891c7d008f9ff7e758c6ef39a2b5df264650eb7900403c0"}, - {file = "scipy-1.11.3-cp39-cp39-win_amd64.whl", hash = "sha256:4b4bb134c7aa457e26cc6ea482b016fef45db71417d55cc6d8f43d799cdf9ef2"}, - {file = "scipy-1.11.3.tar.gz", hash = "sha256:bba4d955f54edd61899776bad459bf7326e14b9fa1c552181f0479cc60a568cd"}, +python-versions = ">=3.9" +files = [ + {file = "scipy-1.11.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc9a714581f561af0848e6b69947fda0614915f072dfd14142ed1bfe1b806710"}, + {file = "scipy-1.11.4-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:cf00bd2b1b0211888d4dc75656c0412213a8b25e80d73898083f402b50f47e41"}, + {file = "scipy-1.11.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9999c008ccf00e8fbcce1236f85ade5c569d13144f77a1946bef8863e8f6eb4"}, + {file = "scipy-1.11.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:933baf588daa8dc9a92c20a0be32f56d43faf3d1a60ab11b3f08c356430f6e56"}, + {file = "scipy-1.11.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8fce70f39076a5aa62e92e69a7f62349f9574d8405c0a5de6ed3ef72de07f446"}, + {file = "scipy-1.11.4-cp310-cp310-win_amd64.whl", hash = "sha256:6550466fbeec7453d7465e74d4f4b19f905642c89a7525571ee91dd7adabb5a3"}, + {file = "scipy-1.11.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f313b39a7e94f296025e3cffc2c567618174c0b1dde173960cf23808f9fae4be"}, + {file = "scipy-1.11.4-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:1b7c3dca977f30a739e0409fb001056484661cb2541a01aba0bb0029f7b68db8"}, + {file = "scipy-1.11.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00150c5eae7b610c32589dda259eacc7c4f1665aedf25d921907f4d08a951b1c"}, + {file = "scipy-1.11.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:530f9ad26440e85766509dbf78edcfe13ffd0ab7fec2560ee5c36ff74d6269ff"}, + {file = "scipy-1.11.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5e347b14fe01003d3b78e196e84bd3f48ffe4c8a7b8a1afbcb8f5505cb710993"}, + {file = "scipy-1.11.4-cp311-cp311-win_amd64.whl", hash = "sha256:acf8ed278cc03f5aff035e69cb511741e0418681d25fbbb86ca65429c4f4d9cd"}, + {file = "scipy-1.11.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:028eccd22e654b3ea01ee63705681ee79933652b2d8f873e7949898dda6d11b6"}, + {file = "scipy-1.11.4-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:2c6ff6ef9cc27f9b3db93a6f8b38f97387e6e0591600369a297a50a8e96e835d"}, + {file = "scipy-1.11.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b030c6674b9230d37c5c60ab456e2cf12f6784596d15ce8da9365e70896effc4"}, + {file = "scipy-1.11.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad669df80528aeca5f557712102538f4f37e503f0c5b9541655016dd0932ca79"}, + {file = "scipy-1.11.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ce7fff2e23ab2cc81ff452a9444c215c28e6305f396b2ba88343a567feec9660"}, + {file = "scipy-1.11.4-cp312-cp312-win_amd64.whl", hash = "sha256:36750b7733d960d7994888f0d148d31ea3017ac15eef664194b4ef68d36a4a97"}, + {file = "scipy-1.11.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e619aba2df228a9b34718efb023966da781e89dd3d21637b27f2e54db0410d7"}, + {file = "scipy-1.11.4-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:f3cd9e7b3c2c1ec26364856f9fbe78695fe631150f94cd1c22228456404cf1ec"}, + {file = "scipy-1.11.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d10e45a6c50211fe256da61a11c34927c68f277e03138777bdebedd933712fea"}, + {file = "scipy-1.11.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91af76a68eeae0064887a48e25c4e616fa519fa0d38602eda7e0f97d65d57937"}, + {file = "scipy-1.11.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6df1468153a31cf55ed5ed39647279beb9cfb5d3f84369453b49e4b8502394fd"}, + {file = "scipy-1.11.4-cp39-cp39-win_amd64.whl", hash = "sha256:ee410e6de8f88fd5cf6eadd73c135020bfbbbdfcd0f6162c36a7638a1ea8cc65"}, + {file = "scipy-1.11.4.tar.gz", hash = "sha256:90a2b78e7f5733b9de748f589f09225013685f9b218275257f8a8168ededaeaa"}, ] [package.dependencies] @@ -3504,6 +3591,20 @@ pure-eval = "*" [package.extras] tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] +[[package]] +name = "sympy" +version = "1.12" +description = "Computer algebra system (CAS) in Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "sympy-1.12-py3-none-any.whl", hash = "sha256:c3588cd4295d0c0f603d0f2ae780587e64e2efeedb3521e46b9bb1d08d184fa5"}, + {file = "sympy-1.12.tar.gz", hash = "sha256:ebf595c8dac3e0fdc4152c51878b498396ec7f30e7a914d6071e674d49420fb8"}, +] + +[package.dependencies] +mpmath = ">=0.19" + [[package]] name = "syrupy" version = "4.6.0" @@ -3552,13 +3653,13 @@ files = [ [[package]] name = "tifffile" -version = "2023.9.26" +version = "2023.12.9" description = "Read and write TIFF files" optional = false python-versions = ">=3.9" files = [ - {file = "tifffile-2023.9.26-py3-none-any.whl", hash = "sha256:1de47fa945fddaade256e25ad4f375ae65547f3c1354063aded881c32a64cf89"}, - {file = "tifffile-2023.9.26.tar.gz", hash = "sha256:67e355e4595aab397f8405d04afe1b4ae7c6f62a44e22d933fee1a571a48c7ae"}, + {file = "tifffile-2023.12.9-py3-none-any.whl", hash = "sha256:9b066e4b1a900891ea42ffd33dab8ba34c537935618b9893ddef42d7d422692f"}, + {file = "tifffile-2023.12.9.tar.gz", hash = "sha256:9dd1da91180a6453018a241ff219e1905f169384355cd89c9ef4034c1b46cdb8"}, ] [package.dependencies] @@ -3596,40 +3697,141 @@ files = [ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] +[[package]] +name = "torch" +version = "2.0.1+cu118" +description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "torch-2.0.1+cu118-cp310-cp310-linux_x86_64.whl", hash = "sha256:a7a49d459bf4862f64f7bc1a68beccf8881c2fa9f3e0569608e16ba6f85ebf7b"}, + {file = "torch-2.0.1+cu118-cp310-cp310-win_amd64.whl", hash = "sha256:f58d75619bc96e4322343c030b893613701caa2d6db8017155da226c14171335"}, + {file = "torch-2.0.1+cu118-cp311-cp311-linux_x86_64.whl", hash = "sha256:143b6c658c17d43376e2dfbaa2c106d35639d615e5e8dec4429cf1e510dd8d61"}, + {file = "torch-2.0.1+cu118-cp311-cp311-win_amd64.whl", hash = "sha256:b663a4ee744d574095dbd612644de345944247c0605692309fd9f6c7ccdea022"}, + {file = "torch-2.0.1+cu118-cp38-cp38-linux_x86_64.whl", hash = "sha256:2ce38a6e4ea7c4b7f5baa51e65243a5f687f6e19ab7915ba5b2a431105f50bbe"}, + {file = "torch-2.0.1+cu118-cp38-cp38-win_amd64.whl", hash = "sha256:e58d26a11bd57ac19761c018c3151c15bc71d068afc8ec409bfd9b4cfcc63a52"}, + {file = "torch-2.0.1+cu118-cp39-cp39-linux_x86_64.whl", hash = "sha256:eb55f29db5744eda8a96f5594e637daed0d52278273005de759970e67cfa6a5a"}, + {file = "torch-2.0.1+cu118-cp39-cp39-win_amd64.whl", hash = "sha256:fa225b6f941ee0e78978ac85ed7744d3c19fff462473821f8060c14faa60043e"}, +] + +[package.dependencies] +filelock = "*" +jinja2 = "*" +networkx = "*" +sympy = "*" +triton = {version = "2.0.0", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +typing-extensions = "*" + +[package.extras] +opt-einsum = ["opt-einsum (>=3.3)"] + +[package.source] +type = "legacy" +url = "https://download.pytorch.org/whl/cu118" +reference = "torch_cuda118" + +[[package]] +name = "torchvision" +version = "0.15.2+cu118" +description = "image and video datasets and models for torch deep learning" +optional = false +python-versions = ">=3.8" +files = [ + {file = "torchvision-0.15.2+cu118-cp310-cp310-linux_x86_64.whl", hash = "sha256:19ca4ab5d6179bbe53cff79df1a855ee6533c2861ddc7389f68349d8b9f8302a"}, + {file = "torchvision-0.15.2+cu118-cp310-cp310-win_amd64.whl", hash = "sha256:bfd2435d681418bea8dacde2b2cb6e5dd40a0e0243d3631e2b71c10bf9831f39"}, + {file = "torchvision-0.15.2+cu118-cp311-cp311-linux_x86_64.whl", hash = "sha256:def9af47ebc2cad55c5aa2dad1230dcf4261833ed6df8a73e839bc233764f09e"}, + {file = "torchvision-0.15.2+cu118-cp311-cp311-win_amd64.whl", hash = "sha256:ee36a68bb369d4173eb74ddf457751f6be1531d883f456eaf9b337a06f31c8fb"}, + {file = "torchvision-0.15.2+cu118-cp38-cp38-linux_x86_64.whl", hash = "sha256:af6807d5e599fe5381c916235a5581407e850eb77c3d43899f37a1511ff81cc0"}, + {file = "torchvision-0.15.2+cu118-cp38-cp38-win_amd64.whl", hash = "sha256:406ed3d8bc5b66a99b692d4c742de39a3a515a399e6bfd1c24fbb688fbb31968"}, + {file = "torchvision-0.15.2+cu118-cp39-cp39-linux_x86_64.whl", hash = "sha256:f2c6f5a100bcf9020b82f5d4c87cd7e26af0409cf33b90fb797b1127dcd42de6"}, + {file = "torchvision-0.15.2+cu118-cp39-cp39-win_amd64.whl", hash = "sha256:27be62ec887ab9a7b86612eac55ba80f8c23978c8afd5e4339669a1bbc4925ea"}, +] + +[package.dependencies] +numpy = "*" +pillow = ">=5.3.0,<8.3.dev0 || >=8.4.dev0" +requests = "*" +torch = "2.0.1" + +[package.extras] +scipy = ["scipy"] + +[package.source] +type = "legacy" +url = "https://download.pytorch.org/whl/cu118" +reference = "torch_cuda118" + [[package]] name = "tornado" -version = "6.3.3" +version = "6.4" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." optional = false python-versions = ">= 3.8" files = [ - {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:502fba735c84450974fec147340016ad928d29f1e91f49be168c0a4c18181e1d"}, - {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:805d507b1f588320c26f7f097108eb4023bbaa984d63176d1652e184ba24270a"}, - {file = "tornado-6.3.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd19ca6c16882e4d37368e0152f99c099bad93e0950ce55e71daed74045908f"}, - {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ac51f42808cca9b3613f51ffe2a965c8525cb1b00b7b2d56828b8045354f76a"}, - {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71a8db65160a3c55d61839b7302a9a400074c9c753040455494e2af74e2501f2"}, - {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ceb917a50cd35882b57600709dd5421a418c29ddc852da8bcdab1f0db33406b0"}, - {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:7d01abc57ea0dbb51ddfed477dfe22719d376119844e33c661d873bf9c0e4a16"}, - {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9dc4444c0defcd3929d5c1eb5706cbe1b116e762ff3e0deca8b715d14bf6ec17"}, - {file = "tornado-6.3.3-cp38-abi3-win32.whl", hash = "sha256:65ceca9500383fbdf33a98c0087cb975b2ef3bfb874cb35b8de8740cf7f41bd3"}, - {file = "tornado-6.3.3-cp38-abi3-win_amd64.whl", hash = "sha256:22d3c2fa10b5793da13c807e6fc38ff49a4f6e1e3868b0a6f4164768bb8e20f5"}, - {file = "tornado-6.3.3.tar.gz", hash = "sha256:e7d8db41c0181c80d76c982aacc442c0783a2c54d6400fe028954201a2e032fe"}, + {file = "tornado-6.4-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:02ccefc7d8211e5a7f9e8bc3f9e5b0ad6262ba2fbb683a6443ecc804e5224ce0"}, + {file = "tornado-6.4-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:27787de946a9cffd63ce5814c33f734c627a87072ec7eed71f7fc4417bb16263"}, + {file = "tornado-6.4-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7894c581ecdcf91666a0912f18ce5e757213999e183ebfc2c3fdbf4d5bd764e"}, + {file = "tornado-6.4-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e43bc2e5370a6a8e413e1e1cd0c91bedc5bd62a74a532371042a18ef19e10579"}, + {file = "tornado-6.4-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0251554cdd50b4b44362f73ad5ba7126fc5b2c2895cc62b14a1c2d7ea32f212"}, + {file = "tornado-6.4-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fd03192e287fbd0899dd8f81c6fb9cbbc69194d2074b38f384cb6fa72b80e9c2"}, + {file = "tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:88b84956273fbd73420e6d4b8d5ccbe913c65d31351b4c004ae362eba06e1f78"}, + {file = "tornado-6.4-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:71ddfc23a0e03ef2df1c1397d859868d158c8276a0603b96cf86892bff58149f"}, + {file = "tornado-6.4-cp38-abi3-win32.whl", hash = "sha256:6f8a6c77900f5ae93d8b4ae1196472d0ccc2775cc1dfdc9e7727889145c45052"}, + {file = "tornado-6.4-cp38-abi3-win_amd64.whl", hash = "sha256:10aeaa8006333433da48dec9fe417877f8bcc21f48dda8d661ae79da357b2a63"}, + {file = "tornado-6.4.tar.gz", hash = "sha256:72291fa6e6bc84e626589f1c29d90a5a6d593ef5ae68052ee2ef000dfd273dee"}, ] [[package]] name = "traitlets" -version = "5.13.0" +version = "5.14.0" description = "Traitlets Python configuration system" optional = false python-versions = ">=3.8" files = [ - {file = "traitlets-5.13.0-py3-none-any.whl", hash = "sha256:baf991e61542da48fe8aef8b779a9ea0aa38d8a54166ee250d5af5ecf4486619"}, - {file = "traitlets-5.13.0.tar.gz", hash = "sha256:9b232b9430c8f57288c1024b34a8f0251ddcc47268927367a0dd3eeaca40deb5"}, + {file = "traitlets-5.14.0-py3-none-any.whl", hash = "sha256:f14949d23829023013c47df20b4a76ccd1a85effb786dc060f34de7948361b33"}, + {file = "traitlets-5.14.0.tar.gz", hash = "sha256:fcdaa8ac49c04dfa0ed3ee3384ef6dfdb5d6f3741502be247279407679296772"}, ] [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=3.0.3)", "mypy (>=1.6.0)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] + +[[package]] +name = "triton" +version = "2.0.0" +description = "A language and compiler for custom Deep Learning operations" +optional = false +python-versions = "*" +files = [ + {file = "triton-2.0.0-1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:38806ee9663f4b0f7cd64790e96c579374089e58f49aac4a6608121aa55e2505"}, + {file = "triton-2.0.0-1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:226941c7b8595219ddef59a1fdb821e8c744289a132415ddd584facedeb475b1"}, + {file = "triton-2.0.0-1-cp36-cp36m-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4c9fc8c89874bc48eb7e7b2107a9b8d2c0bf139778637be5bfccb09191685cfd"}, + {file = "triton-2.0.0-1-cp37-cp37m-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d2684b6a60b9f174f447f36f933e9a45f31db96cb723723ecd2dcfd1c57b778b"}, + {file = "triton-2.0.0-1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9d4978298b74fcf59a75fe71e535c092b023088933b2f1df933ec32615e4beef"}, + {file = "triton-2.0.0-1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:74f118c12b437fb2ca25e1a04759173b517582fcf4c7be11913316c764213656"}, + {file = "triton-2.0.0-1-pp37-pypy37_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9618815a8da1d9157514f08f855d9e9ff92e329cd81c0305003eb9ec25cc5add"}, + {file = "triton-2.0.0-1-pp38-pypy38_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1aca3303629cd3136375b82cb9921727f804e47ebee27b2677fef23005c3851a"}, + {file = "triton-2.0.0-1-pp39-pypy39_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e3e13aa8b527c9b642e3a9defcc0fbd8ffbe1c80d8ac8c15a01692478dc64d8a"}, + {file = "triton-2.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f05a7e64e4ca0565535e3d5d3405d7e49f9d308505bb7773d21fb26a4c008c2"}, + {file = "triton-2.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb4b99ca3c6844066e516658541d876c28a5f6e3a852286bbc97ad57134827fd"}, + {file = "triton-2.0.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47b4d70dc92fb40af553b4460492c31dc7d3a114a979ffb7a5cdedb7eb546c08"}, + {file = "triton-2.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fedce6a381901b1547e0e7e1f2546e4f65dca6d91e2d8a7305a2d1f5551895be"}, + {file = "triton-2.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75834f27926eab6c7f00ce73aaf1ab5bfb9bec6eb57ab7c0bfc0a23fac803b4c"}, + {file = "triton-2.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0117722f8c2b579cd429e0bee80f7731ae05f63fe8e9414acd9a679885fcbf42"}, + {file = "triton-2.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcd9be5d0c2e45d2b7e6ddc6da20112b6862d69741576f9c3dbaf941d745ecae"}, + {file = "triton-2.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42a0d2c3fc2eab4ba71384f2e785fbfd47aa41ae05fa58bf12cb31dcbd0aeceb"}, + {file = "triton-2.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52c47b72c72693198163ece9d90a721299e4fb3b8e24fd13141e384ad952724f"}, +] + +[package.dependencies] +cmake = "*" +filelock = "*" +lit = "*" +torch = "*" + +[package.extras] +tests = ["autopep8", "flake8", "isort", "numpy", "pytest", "scipy (>=1.7.1)"] +tutorials = ["matplotlib", "pandas", "tabulate"] [[package]] name = "types-python-dateutil" @@ -3642,15 +3844,26 @@ files = [ {file = "types_python_dateutil-2.8.19.14-py3-none-any.whl", hash = "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9"}, ] +[[package]] +name = "typing-extensions" +version = "4.9.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, + {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, +] + [[package]] name = "tzdata" -version = "2023.3" +version = "2023.4" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" files = [ - {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, - {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, + {file = "tzdata-2023.4-py2.py3-none-any.whl", hash = "sha256:aa3ace4329eeacda5b7beb7ea08ece826c28d761cda36e747cfbf97996d39bf3"}, + {file = "tzdata-2023.4.tar.gz", hash = "sha256:dd54c94f294765522c77399649b4fefd95522479a664a0cec87f41bebc6148c9"}, ] [[package]] @@ -3724,13 +3937,13 @@ watchmedo = ["PyYAML (>=3.10)"] [[package]] name = "wcwidth" -version = "0.2.10" +version = "0.2.12" description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = "*" files = [ - {file = "wcwidth-0.2.10-py2.py3-none-any.whl", hash = "sha256:aec5179002dd0f0d40c456026e74a729661c9d468e1ed64405e3a6c2176ca36f"}, - {file = "wcwidth-0.2.10.tar.gz", hash = "sha256:390c7454101092a6a5e43baad8f83de615463af459201709556b6e4b1c861f97"}, + {file = "wcwidth-0.2.12-py2.py3-none-any.whl", hash = "sha256:f26ec43d96c8cbfed76a5075dac87680124fa84e0855195a6184da9c187f133c"}, + {file = "wcwidth-0.2.12.tar.gz", hash = "sha256:f01c104efdf57971bcb756f054dd58ddec5204dd15fa31d6503ea57947d97c02"}, ] [[package]] @@ -3761,13 +3974,13 @@ files = [ [[package]] name = "websocket-client" -version = "1.6.4" +version = "1.7.0" description = "WebSocket client for Python with low level API options" optional = false python-versions = ">=3.8" files = [ - {file = "websocket-client-1.6.4.tar.gz", hash = "sha256:b3324019b3c28572086c4a319f91d1dcd44e6e11cd340232978c684a7650d0df"}, - {file = "websocket_client-1.6.4-py3-none-any.whl", hash = "sha256:084072e0a7f5f347ef2ac3d8698a5e0b4ffbfcab607628cadabc650fc9a83a24"}, + {file = "websocket-client-1.7.0.tar.gz", hash = "sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6"}, + {file = "websocket_client-1.7.0-py3-none-any.whl", hash = "sha256:f4c3d22fec12a2461427a29957ff07d35098ee2d976d3ba244e688b8b4057588"}, ] [package.extras] @@ -3789,4 +4002,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = "^3.11,<3.12" -content-hash = "cc3fe4c6067ccdd3c0459e4649a6903c5449008e66d7d80dfe6d6f4b5c3c20c7" +content-hash = "c45369a5ab105d1aebcc63fb14f6709a7d36b0b989482d3634a68a5aad3fbabc" diff --git a/pyproject.toml b/pyproject.toml index 34c72e319..6cc583908 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,14 +15,16 @@ packages = [ [tool.poetry.dependencies] python = "^3.11,<3.12" ipython = "^8.8.0" -levenshtein = ">=0.21.1,<0.24.0" matplotlib = "^3.6.3" -openpyxl = "^3.1.2" pandas = "^2.0.0" pillow = ">=9.5,<11.0" -scikit-image = ">=0.21,<0.23" scikit-learn = "^1.2.0" seaborn = "^0.13.0" +openpyxl = "^3.1.2" +scikit-image = ">=0.21,<0.23" +levenshtein = ">=0.21.1,<0.24.0" +torch = {version = "~2.0.0", source = "torch_cuda118"} +torchvision = {version = "<0.16.0", source = "torch_cuda118"} [tool.poetry.group.dev.dependencies] pytest = "^7.2.1" @@ -35,19 +37,25 @@ mkdocs = "^1.4.2" mkdocstrings = ">=0.20,<0.25" mkdocstrings-python = ">=0.8.3,<1.8.0" mkdocs-autorefs = ">=0.4.1,<0.6.0" -mkdocs-exclude = "^1.0.2" mkdocs-gen-files = ">=0.4,<0.6" mkdocs-glightbox = "^0.3.1" -mkdocs-jupyter = ">=0.23,<0.25" mkdocs-literate-nav = "^0.6.0" mkdocs-material = "^9.1.2" mkdocs-section-index = "^0.3.5" +mkdocs-jupyter = ">=0.23,<0.25" +mkdocs-exclude = "^1.0.2" + +[[tool.poetry.source]] +name = "torch_cuda118" +url = "https://download.pytorch.org/whl/cu118" +priority = "explicit" [build-system] requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api" [tool.pytest.ini_options] +addopts = "--snapshot-warn-unused" filterwarnings = [ "ignore:Deprecated call to `pkg_resources.declare_namespace", "ignore:Jupyter is migrating its paths to use standard platformdirs" diff --git a/src/safeds/config/__init__.py b/src/safeds/config/__init__.py new file mode 100644 index 000000000..cfe590409 --- /dev/null +++ b/src/safeds/config/__init__.py @@ -0,0 +1,7 @@ +"""Configuration for Safe-DS.""" + +from ._device import _get_device + +__all__ = [ + "_get_device", +] diff --git a/src/safeds/config/_device.py b/src/safeds/config/_device.py new file mode 100644 index 000000000..c3fbb3f4b --- /dev/null +++ b/src/safeds/config/_device.py @@ -0,0 +1,6 @@ +import torch +from torch.types import Device + + +def _get_device() -> Device: + return torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu") diff --git a/src/safeds/data/image/containers/_image.py b/src/safeds/data/image/containers/_image.py index c4a2cfd33..98d8e5184 100644 --- a/src/safeds/data/image/containers/_image.py +++ b/src/safeds/data/image/containers/_image.py @@ -1,20 +1,29 @@ from __future__ import annotations -import copy import io import warnings from pathlib import Path -from typing import Any, BinaryIO +from typing import TYPE_CHECKING -import numpy as np -import PIL -from PIL import ImageEnhance, ImageFilter, ImageOps -from PIL.Image import Image as PillowImage -from PIL.Image import open as open_image -from skimage.util import random_noise +import torch +import torch.nn.functional as func +from PIL.Image import open as pil_image_open +from torch import Tensor -from safeds.data.image.typing import ImageFormat -from safeds.exceptions import ClosedBound, OutOfBoundsError +from safeds.config import _get_device + +if TYPE_CHECKING: + from torch.types import Device +import torchvision + +# Disables torchvision V2 beta warnings +# Disabled because of RUFF Linter E402 (Module level import not at top of file) +# torchvision.disable_beta_transforms_warning() +from torchvision.transforms.v2 import PILToTensor +from torchvision.transforms.v2 import functional as func2 +from torchvision.utils import save_image + +from safeds.exceptions import ClosedBound, IllegalFormatError, OutOfBoundsError class Image: @@ -23,71 +32,126 @@ class Image: Parameters ---------- - data : BinaryIO - The image data as bytes. + image_tensor : Tensor + The image data as tensor. """ + _pil_to_tensor = PILToTensor() + _default_device = _get_device() + @staticmethod - def from_jpeg_file(path: str | Path) -> Image: + def from_file(path: str | Path, device: Device = _default_device) -> Image: """ - Create an image from a JPEG file. + Create an image from a file. Parameters ---------- path : str | Path - The path to the JPEG file. + The path to the image file. + device: Device + The device where the tensor will be saved on. Defaults to the default device Returns ------- image : Image The image. """ - return Image( - data=Path(path).open("rb"), - format_=ImageFormat.JPEG, - ) + return Image(image_tensor=Image._pil_to_tensor(pil_image_open(path)), device=device) @staticmethod - def from_png_file(path: str | Path) -> Image: + def from_bytes(data: bytes, device: Device = _default_device) -> Image: """ - Create an image from a PNG file. + Create an image from bytes. Parameters ---------- - path : str | Path - The path to the PNG file. + data : bytes + The data of the image. + device: Device + The device where the tensor will be saved on. Defaults to the default device Returns ------- image : Image The image. """ - return Image( - data=Path(path).open("rb"), - format_=ImageFormat.PNG, + with warnings.catch_warnings(): + warnings.filterwarnings( + "ignore", + message="The given buffer is not writable, and PyTorch does not support non-writable tensors.", + ) + input_tensor = torch.frombuffer(data, dtype=torch.uint8) + return Image(image_tensor=torchvision.io.decode_image(input_tensor), device=device) + + def __init__(self, image_tensor: Tensor, device: Device = _default_device) -> None: + self._image_tensor: Tensor = image_tensor.to(device) + + def __eq__(self, other: object) -> bool: + """ + Compare two images. + + Parameters + ---------- + other: The image to compare to. + + Returns + ------- + equals : bool + Whether the two images contain equal pixel data. + """ + if not isinstance(other, Image): + return NotImplemented + return ( + self._image_tensor.size() == other._image_tensor.size() + and torch.all(torch.eq(self._image_tensor, other._set_device(self.device)._image_tensor)).item() ) - def __init__(self, data: BinaryIO, format_: ImageFormat): - data.seek(0) + def _repr_jpeg_(self) -> bytes | None: + """ + Return a JPEG image as bytes. - self._image: PillowImage = open_image(data, formats=[format_.value]) - self._format: ImageFormat = format_ + If the image has an alpha channel return None. - # ------------------------------------------------------------------------------------------------------------------ - # Properties - # ------------------------------------------------------------------------------------------------------------------ + Returns + ------- + jpeg : bytes + The image as JPEG. + """ + if self.channel == 4: + return None + buffer = io.BytesIO() + save_image(self._image_tensor.to(torch.float32) / 255, buffer, format="jpeg") + buffer.seek(0) + return buffer.read() - @property - def format(self) -> ImageFormat: + def _repr_png_(self) -> bytes: """ - Get the image format. + Return a PNG image as bytes. Returns ------- - format : ImageFormat - The image format. + png : bytes + The image as PNG. """ - return self._format + buffer = io.BytesIO() + save_image(self._image_tensor.to(torch.float32) / 255, buffer, format="png") + buffer.seek(0) + return buffer.read() + + def _set_device(self, device: Device) -> Image: + """ + Set the device where the image will be saved on. + + Returns + ------- + result : Image + The image on the given device + """ + return Image(self._image_tensor, device) + + # ------------------------------------------------------------------------------------------------------------------ + # Properties + # ------------------------------------------------------------------------------------------------------------------ @property def width(self) -> int: @@ -99,7 +163,7 @@ def width(self) -> int: width : int The width of the image. """ - return self._image.width + return self._image_tensor.size(dim=2) @property def height(self) -> int: @@ -111,7 +175,31 @@ def height(self) -> int: height : int The height of the image. """ - return self._image.height + return self._image_tensor.size(dim=1) + + @property + def channel(self) -> int: + """ + Get the number of channels of the image. + + Returns + ------- + channel : int + The number of channels of the image. + """ + return self._image_tensor.size(dim=0) + + @property + def device(self) -> Device: + """ + Get the device where the image is saved on. + + Returns + ------- + device : Device + The device of the image + """ + return self._image_tensor.device # ------------------------------------------------------------------------------------------------------------------ # Conversion @@ -126,8 +214,10 @@ def to_jpeg_file(self, path: str | Path) -> None: path : str | Path The path to the JPEG file. """ + if self.channel == 4: + raise IllegalFormatError("png") Path(path).parent.mkdir(parents=True, exist_ok=True) - self._image.save(path, format="jpeg") + save_image(self._image_tensor.to(torch.float32) / 255, path, format="jpeg") def to_png_file(self, path: str | Path) -> None: """ @@ -139,67 +229,7 @@ def to_png_file(self, path: str | Path) -> None: The path to the PNG file. """ Path(path).parent.mkdir(parents=True, exist_ok=True) - self._image.save(path, format="png") - - # ------------------------------------------------------------------------------------------------------------------ - # IPython integration - # ------------------------------------------------------------------------------------------------------------------ - - def __eq__(self, other: Any) -> bool: - """ - Compare two images. - - Parameters - ---------- - other: The image to compare to. - - Returns - ------- - equals : bool - Whether the two images contain equal pixel data. - - """ - if not isinstance(other, Image): - return NotImplemented - return self._image.tobytes() == other._image.tobytes() - - def _repr_jpeg_(self) -> bytes | None: - """ - Return a JPEG image as bytes. - - If the image is not a JPEG, return None. - - Returns - ------- - jpeg : bytes | None - The image as JPEG. - """ - if self._format != ImageFormat.JPEG: - return None - - buffer = io.BytesIO() - self._image.save(buffer, format="jpeg") - buffer.seek(0) - return buffer.read() - - def _repr_png_(self) -> bytes | None: - """ - Return a PNG image as bytes. - - If the image is not a PNG, return None. - - Returns - ------- - png : bytes | None - The image as PNG. - """ - if self._format != ImageFormat.PNG: - return None - - buffer = io.BytesIO() - self._image.save(buffer, format="png") - buffer.seek(0) - return buffer.read() + save_image(self._image_tensor.to(torch.float32) / 255, path, format="png") # ------------------------------------------------------------------------------------------------------------------ # Transformations @@ -216,9 +246,10 @@ def resize(self, new_width: int, new_height: int) -> Image: result : Image The image with the given width and height. """ - image_copy = copy.deepcopy(self) - image_copy._image = image_copy._image.resize((new_width, new_height)) - return image_copy + return Image( + func.interpolate(self._image_tensor.unsqueeze(dim=1), size=(new_height, new_width)).squeeze(dim=1), + device=self._image_tensor.device, + ) def convert_to_grayscale(self) -> Image: """ @@ -231,9 +262,16 @@ def convert_to_grayscale(self) -> Image: result : Image The grayscale image. """ - image_copy = copy.deepcopy(self) - image_copy._image = image_copy._image.convert("L") - return image_copy + if self.channel == 4: + return Image( + torch.cat([ + func2.rgb_to_grayscale(self._image_tensor[0:3], num_output_channels=3), + self._image_tensor[3].unsqueeze(dim=0), + ]), + device=self.device, + ) + else: + return Image(func2.rgb_to_grayscale(self._image_tensor[0:3], num_output_channels=3), device=self.device) def crop(self, x: int, y: int, width: int, height: int) -> Image: """ @@ -253,9 +291,7 @@ def crop(self, x: int, y: int, width: int, height: int) -> Image: result : Image The cropped image. """ - image_copy = copy.deepcopy(self) - image_copy._image = image_copy._image.crop((x, y, (x + width), (y + height))) - return image_copy + return Image(func2.crop(self._image_tensor, x, y, height, width), device=self.device) def flip_vertically(self) -> Image: """ @@ -268,9 +304,7 @@ def flip_vertically(self) -> Image: result : Image The flipped image. """ - image_copy = copy.deepcopy(self) - image_copy._image = self._image.transpose(PIL.Image.FLIP_TOP_BOTTOM) - return image_copy + return Image(func2.vertical_flip(self._image_tensor), device=self.device) def flip_horizontally(self) -> Image: """ @@ -283,9 +317,7 @@ def flip_horizontally(self) -> Image: result : Image The flipped image. """ - image_copy = copy.deepcopy(self) - image_copy._image = self._image.transpose(PIL.Image.FLIP_LEFT_RIGHT) - return image_copy + return Image(func2.horizontal_flip(self._image_tensor), device=self.device) def adjust_brightness(self, factor: float) -> Image: """ @@ -306,6 +338,11 @@ def adjust_brightness(self, factor: float) -> Image: ------- result: Image The Image with adjusted brightness. + + Raises + ------ + OutOfBoundsError + If factor is smaller than 0. """ if factor < 0: raise OutOfBoundsError(factor, name="factor", lower_bound=ClosedBound(0)) @@ -315,26 +352,32 @@ def adjust_brightness(self, factor: float) -> Image: UserWarning, stacklevel=2, ) + if self.channel == 4: + return Image( + torch.cat([ + func2.adjust_brightness(self._image_tensor[0:3], factor * 1.0), + self._image_tensor[3].unsqueeze(dim=0), + ]), + device=self.device, + ) + else: + return Image(func2.adjust_brightness(self._image_tensor, factor * 1.0), device=self.device) - image_copy = copy.deepcopy(self) - image_copy._image = ImageEnhance.Brightness(image_copy._image).enhance(factor) - return image_copy - - def add_gaussian_noise(self, standard_deviation: float) -> Image: + def add_noise(self, standard_deviation: float) -> Image: """ - Return a new `Image` with Gaussian noise added to the image. + Return a new `Image` with noise added to the image. The original image is not modified. Parameters ---------- standard_deviation : float - The standard deviation of the Gaussian distribution. Has to be bigger than or equal to 0. + The standard deviation of the normal distribution. Has to be bigger than or equal to 0. Returns ------- result : Image - The image with added Gaussian noise. + The image with added noise. Raises ------ @@ -343,21 +386,10 @@ def add_gaussian_noise(self, standard_deviation: float) -> Image: """ if standard_deviation < 0: raise OutOfBoundsError(standard_deviation, name="standard_deviation", lower_bound=ClosedBound(0)) - - # noinspection PyTypeChecker - image_as_array = np.asarray(self._image) - noisy_image_as_array = random_noise( - image_as_array, - mode="gaussian", - var=standard_deviation**2, - rng=42, - clip=True, + return Image( + self._image_tensor + torch.normal(0, standard_deviation, self._image_tensor.size()).to(self.device) * 255, + device=self.device, ) - noisy_image = PIL.Image.fromarray(np.uint8(255 * noisy_image_as_array)) - - image_copy = copy.deepcopy(self) - image_copy._image = noisy_image - return image_copy def adjust_contrast(self, factor: float) -> Image: """ @@ -377,6 +409,11 @@ def adjust_contrast(self, factor: float) -> Image: ------- image: Image New image with adjusted contrast. + + Raises + ------ + OutOfBoundsError + If factor is smaller than 0. """ if factor < 0: raise OutOfBoundsError(factor, name="factor", lower_bound=ClosedBound(0)) @@ -386,42 +423,19 @@ def adjust_contrast(self, factor: float) -> Image: UserWarning, stacklevel=2, ) - - image_copy = copy.deepcopy(self) - image_copy._image = ImageEnhance.Contrast(image_copy._image).enhance(factor) - return image_copy - - def adjust_color_balance(self, factor: float) -> Image: - """ - Return a new `Image` with adjusted color balance. - - The original image is not modified. - - Parameters - ---------- - factor: float - If factor > 1, increase color balance of image. - If factor = 1, no changes will be made. - If factor < 1, make image greyer. - Has to be bigger than or equal to 0. - - Returns - ------- - image: Image - The new, adjusted image. - """ - if factor < 0: - raise OutOfBoundsError(factor, name="factor", lower_bound=ClosedBound(0)) - elif factor == 1: - warnings.warn( - "Color adjustment factor is 1.0, this will not make changes to the image.", - UserWarning, - stacklevel=2, + if self.channel == 4: + return Image( + torch.cat([ + func2.adjust_contrast(self._image_tensor[0:3], factor * 1.0), + self._image_tensor[3].unsqueeze(dim=0), + ]), + device=self.device, ) + else: + return Image(func2.adjust_contrast(self._image_tensor, factor * 1.0), device=self.device) - image_copy = copy.deepcopy(self) - image_copy._image = ImageEnhance.Color(image_copy._image).enhance(factor) - return image_copy + # def adjust_color_balance(self, factor: float) -> Image: + # pass def blur(self, radius: int) -> Image: """ @@ -440,9 +454,7 @@ def blur(self, radius: int) -> Image: result : Image The blurred image. """ - image_copy = copy.deepcopy(self) - image_copy._image = image_copy._image.filter(ImageFilter.BoxBlur(radius)) - return image_copy + return Image(func2.gaussian_blur(self._image_tensor, [radius * 2 + 1, radius * 2 + 1]), device=self.device) def sharpen(self, factor: float) -> Image: """ @@ -453,17 +465,39 @@ def sharpen(self, factor: float) -> Image: Parameters ---------- factor : float - The amount of sharpness to be applied to the image. Factor 1.0 is considered to be neutral and does not make - any changes. + If factor > 1, increase the sharpness of the image. + If factor = 1, no changes will be made. + If factor < 1, blur the image. + Has to be bigger than or equal to 0 (blurred). Returns ------- result : Image The image sharpened by the given factor. + + Raises + ------ + OutOfBoundsError + If factor is smaller than 0. """ - image_copy = copy.deepcopy(self) - image_copy._image = ImageEnhance.Sharpness(image_copy._image).enhance(factor) - return image_copy + if factor < 0: + raise OutOfBoundsError(factor, name="factor", lower_bound=ClosedBound(0)) + elif factor == 1: + warnings.warn( + "Sharpen factor is 1.0, this will not make changes to the image.", + UserWarning, + stacklevel=2, + ) + if self.channel == 4: + return Image( + torch.cat([ + func2.adjust_sharpness(self._image_tensor[0:3], factor * 1.0), + self._image_tensor[3].unsqueeze(dim=0), + ]), + device=self.device, + ) + else: + return Image(func2.adjust_sharpness(self._image_tensor, factor * 1.0), device=self.device) def invert_colors(self) -> Image: """ @@ -476,9 +510,13 @@ def invert_colors(self) -> Image: result : Image The image with inverted colors. """ - image_copy = copy.deepcopy(self) - image_copy._image = ImageOps.invert(image_copy._image.convert("RGB")) - return image_copy + if self.channel == 4: + return Image( + torch.cat([func2.invert(self._image_tensor[0:3]), self._image_tensor[3].unsqueeze(dim=0)]), + device=self.device, + ) + else: + return Image(func2.invert(self._image_tensor), device=self.device) def rotate_right(self) -> Image: """ @@ -491,9 +529,7 @@ def rotate_right(self) -> Image: result : Image The image rotated 90 degrees clockwise. """ - image_copy = copy.deepcopy(self) - image_copy._image = image_copy._image.rotate(270, expand=True) - return image_copy + return Image(func2.rotate(self._image_tensor, -90, expand=True), device=self.device) def rotate_left(self) -> Image: """ @@ -506,22 +542,4 @@ def rotate_left(self) -> Image: result : Image The image rotated 90 degrees counter-clockwise. """ - image_copy = copy.deepcopy(self) - image_copy._image = image_copy._image.rotate(90, expand=True) - return image_copy - - def find_edges(self) -> Image: - """ - Return a grayscale version of the image with the edges highlighted. - - The original image is not modified. - - Returns - ------- - result : Image - The image with edges found. - """ - image_copy = copy.deepcopy(self) - image_copy = image_copy.convert_to_grayscale() - image_copy._image = image_copy._image.filter(ImageFilter.FIND_EDGES) - return image_copy + return Image(func2.rotate(self._image_tensor, 90, expand=True), device=self.device) diff --git a/src/safeds/data/image/typing/__init__.py b/src/safeds/data/image/typing/__init__.py deleted file mode 100644 index fbffdf0c8..000000000 --- a/src/safeds/data/image/typing/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -"""Types used to distinguish different image formats.""" - -from ._image_format import ImageFormat - -__all__ = [ - "ImageFormat", -] diff --git a/src/safeds/data/image/typing/_image_format.py b/src/safeds/data/image/typing/_image_format.py deleted file mode 100644 index 3b5ecd49f..000000000 --- a/src/safeds/data/image/typing/_image_format.py +++ /dev/null @@ -1,8 +0,0 @@ -from enum import Enum - - -class ImageFormat(Enum): - """Images formats supported by us.""" - - JPEG = "jpeg" - PNG = "png" diff --git a/src/safeds/data/tabular/containers/_column.py b/src/safeds/data/tabular/containers/_column.py index 5f4795b7f..07742c86e 100644 --- a/src/safeds/data/tabular/containers/_column.py +++ b/src/safeds/data/tabular/containers/_column.py @@ -11,7 +11,6 @@ import seaborn as sns from safeds.data.image.containers import Image -from safeds.data.image.typing import ImageFormat from safeds.data.tabular.typing import ColumnType from safeds.exceptions import ( ColumnLengthMismatchError, @@ -928,7 +927,7 @@ def plot_boxplot(self) -> Image: fig.savefig(buffer, format="png") plt.close() # Prevents the figure from being displayed directly buffer.seek(0) - return Image(buffer, ImageFormat.PNG) + return Image.from_bytes(buffer.read()) def plot_histogram(self) -> Image: """ @@ -960,7 +959,7 @@ def plot_histogram(self) -> Image: fig.savefig(buffer, format="png") plt.close() # Prevents the figure from being displayed directly buffer.seek(0) - return Image(buffer, ImageFormat.PNG) + return Image.from_bytes(buffer.read()) # ------------------------------------------------------------------------------------------------------------------ # Conversion diff --git a/src/safeds/data/tabular/containers/_table.py b/src/safeds/data/tabular/containers/_table.py index 693785063..9615ebb05 100644 --- a/src/safeds/data/tabular/containers/_table.py +++ b/src/safeds/data/tabular/containers/_table.py @@ -16,7 +16,6 @@ from scipy import stats from safeds.data.image.containers import Image -from safeds.data.image.typing import ImageFormat from safeds.data.tabular.typing import ColumnType, Schema from safeds.exceptions import ( ColumnLengthMismatchError, @@ -1890,7 +1889,7 @@ def plot_correlation_heatmap(self) -> Image: fig.savefig(buffer, format="png") plt.close() # Prevents the figure from being displayed directly buffer.seek(0) - return Image(buffer, format_=ImageFormat.PNG) + return Image.from_bytes(buffer.read()) def plot_lineplot(self, x_column_name: str, y_column_name: str) -> Image: """ @@ -1951,7 +1950,7 @@ def plot_lineplot(self, x_column_name: str, y_column_name: str) -> Image: fig.savefig(buffer, format="png") plt.close() # Prevents the figure from being displayed directly buffer.seek(0) - return Image(buffer, format_=ImageFormat.PNG) + return Image.from_bytes(buffer.read()) def plot_scatterplot(self, x_column_name: str, y_column_name: str) -> Image: """ @@ -2009,7 +2008,7 @@ def plot_scatterplot(self, x_column_name: str, y_column_name: str) -> Image: fig.savefig(buffer, format="png") plt.close() # Prevents the figure from being displayed directly buffer.seek(0) - return Image(buffer, format_=ImageFormat.PNG) + return Image.from_bytes(buffer.read()) def plot_boxplots(self) -> Image: """ @@ -2056,7 +2055,7 @@ def plot_boxplots(self) -> Image: fig.savefig(buffer, format="png") plt.close() # Prevents the figure from being displayed directly buffer.seek(0) - return Image(buffer, format_=ImageFormat.PNG) + return Image.from_bytes(buffer.read()) def plot_histograms(self) -> Image: """ @@ -2091,7 +2090,7 @@ def plot_histograms(self) -> Image: fig.savefig(buffer, format="png") plt.close() buffer.seek(0) - return Image(buffer, ImageFormat.PNG) + return Image.from_bytes(buffer.read()) # ------------------------------------------------------------------------------------------------------------------ # Conversion diff --git a/src/safeds/exceptions/__init__.py b/src/safeds/exceptions/__init__.py index 352334cf5..fa930f62f 100644 --- a/src/safeds/exceptions/__init__.py +++ b/src/safeds/exceptions/__init__.py @@ -5,6 +5,7 @@ ColumnLengthMismatchError, ColumnSizeError, DuplicateColumnNameError, + IllegalFormatError, IllegalSchemaModificationError, IndexOutOfBoundsError, MissingValuesColumnError, @@ -38,6 +39,7 @@ "ColumnLengthMismatchError", "ColumnSizeError", "DuplicateColumnNameError", + "IllegalFormatError", "IllegalSchemaModificationError", "IndexOutOfBoundsError", "MissingValuesColumnError", diff --git a/src/safeds/exceptions/_data.py b/src/safeds/exceptions/_data.py index 1465e4502..9b6904e51 100644 --- a/src/safeds/exceptions/_data.py +++ b/src/safeds/exceptions/_data.py @@ -37,10 +37,8 @@ class NonNumericColumnError(Exception): def __init__(self, column_info: str, help_msg: str | None = None) -> None: line_break = "\n" super().__init__( - ( - "Tried to do a numerical operation on one or multiple non-numerical columns:" - f" \n{column_info}{line_break + help_msg if help_msg is not None else ''}" - ), + "Tried to do a numerical operation on one or multiple non-numerical columns:" + f" \n{column_info}{line_break + help_msg if help_msg is not None else ''}", ) @@ -50,10 +48,8 @@ class MissingValuesColumnError(Exception): def __init__(self, column_info: str, help_msg: str | None = None) -> None: line_break = "\n" super().__init__( - ( - "Tried to do an operation on one or multiple columns containing missing values:" - f" \n{column_info}{line_break + help_msg if help_msg is not None else ''}" - ), + "Tried to do an operation on one or multiple columns containing missing values:" + f" \n{column_info}{line_break + help_msg if help_msg is not None else ''}", ) @@ -125,10 +121,8 @@ def __init__(self, values: list[tuple[str, str]]) -> None: values_info = [f"{value} in column {column}" for value, column in values] line_break = "\n" super().__init__( - ( - "Value(s) not present in the table the transformer was fitted on:" - f" {line_break}{line_break.join(values_info)}" - ), + "Value(s) not present in the table the transformer was fitted on:" + f" {line_break}{line_break.join(values_info)}", ) @@ -137,10 +131,8 @@ class WrongFileExtensionError(Exception): def __init__(self, file: str | Path, file_extension: str | list[str]) -> None: super().__init__( - ( - f"The file {file} has a wrong file extension. Please provide a file with the following extension(s):" - f" {file_extension}" - ), + f"The file {file} has a wrong file extension. Please provide a file with the following extension(s):" + f" {file_extension}", ) @@ -156,3 +148,10 @@ class ColumnIsTargetError(IllegalSchemaModificationError): def __init__(self, column_name: str) -> None: super().__init__(f'Column "{column_name}" is the target column and cannot be removed.') + + +class IllegalFormatError(Exception): + """Exception raised when a format is not legal.""" + + def __init__(self, formats: list[str] | str) -> None: + super().__init__(f"This format is illegal. Use one of the following formats: {formats}") diff --git a/tests/resources/image/rgba.png b/tests/resources/image/rgba.png new file mode 100644 index 000000000..dd31fd6fc Binary files /dev/null and b/tests/resources/image/rgba.png differ diff --git a/tests/safeds/data/image/typing/__init__.py b/tests/safeds/config/__init__.py similarity index 100% rename from tests/safeds/data/image/typing/__init__.py rename to tests/safeds/config/__init__.py diff --git a/tests/safeds/config/test_device.py b/tests/safeds/config/test_device.py new file mode 100644 index 000000000..a50102f4b --- /dev/null +++ b/tests/safeds/config/test_device.py @@ -0,0 +1,9 @@ +import torch +from safeds.config import _get_device + + +def test_device() -> None: + if torch.cuda.is_available(): + assert _get_device() == torch.device("cuda") + else: + assert _get_device() == torch.device("cpu") diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddGaussianNoise.test_should_add_noise[minimum noise].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddGaussianNoise.test_should_add_noise[minimum noise].png deleted file mode 100644 index 57dee3a25..000000000 Binary files a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddGaussianNoise.test_should_add_noise[minimum noise].png and /dev/null differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddGaussianNoise.test_should_add_noise[some noise].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddGaussianNoise.test_should_add_noise[some noise].png deleted file mode 100644 index d70b92972..000000000 Binary files a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddGaussianNoise.test_should_add_noise[some noise].png and /dev/null differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddGaussianNoise.test_should_add_noise[very noisy].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddGaussianNoise.test_should_add_noise[very noisy].png deleted file mode 100644 index a45bce5c4..000000000 Binary files a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddGaussianNoise.test_should_add_noise[very noisy].png and /dev/null differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-plane-minimum noise-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-plane-minimum noise-cpu].png new file mode 100644 index 000000000..58478257c Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-plane-minimum noise-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-plane-minimum noise-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-plane-minimum noise-cuda].png new file mode 100644 index 000000000..58478257c Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-plane-minimum noise-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-plane-some noise-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-plane-some noise-cpu].png new file mode 100644 index 000000000..30cb3df01 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-plane-some noise-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-plane-some noise-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-plane-some noise-cuda].png new file mode 100644 index 000000000..9ae749de6 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-plane-some noise-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-plane-very noisy-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-plane-very noisy-cpu].png new file mode 100644 index 000000000..e0f51f631 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-plane-very noisy-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-plane-very noisy-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-plane-very noisy-cuda].png new file mode 100644 index 000000000..e0f51f631 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-plane-very noisy-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-white_square-minimum noise-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-white_square-minimum noise-cpu].png new file mode 100644 index 000000000..94381b429 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-white_square-minimum noise-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-white_square-minimum noise-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-white_square-minimum noise-cuda].png new file mode 100644 index 000000000..94381b429 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-white_square-minimum noise-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-white_square-some noise-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-white_square-some noise-cpu].png new file mode 100644 index 000000000..ce7dc5542 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-white_square-some noise-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-white_square-some noise-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-white_square-some noise-cuda].png new file mode 100644 index 000000000..ce7dc5542 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-white_square-some noise-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-white_square-very noisy-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-white_square-very noisy-cpu].png new file mode 100644 index 000000000..abac9c634 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-white_square-very noisy-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-white_square-very noisy-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-white_square-very noisy-cuda].png new file mode 100644 index 000000000..abac9c634 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-jpg-white_square-very noisy-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-png-white_square-minimum noise-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-png-white_square-minimum noise-cpu].png new file mode 100644 index 000000000..94381b429 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-png-white_square-minimum noise-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-png-white_square-minimum noise-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-png-white_square-minimum noise-cuda].png new file mode 100644 index 000000000..94381b429 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-png-white_square-minimum noise-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-png-white_square-some noise-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-png-white_square-some noise-cpu].png new file mode 100644 index 000000000..ce7dc5542 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-png-white_square-some noise-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-png-white_square-some noise-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-png-white_square-some noise-cuda].png new file mode 100644 index 000000000..ce7dc5542 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-png-white_square-some noise-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-png-white_square-very noisy-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-png-white_square-very noisy-cpu].png new file mode 100644 index 000000000..abac9c634 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-png-white_square-very noisy-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-png-white_square-very noisy-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-png-white_square-very noisy-cuda].png new file mode 100644 index 000000000..abac9c634 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-3-channel-png-white_square-very noisy-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-4-channel-png-plane-minimum noise-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-4-channel-png-plane-minimum noise-cpu].png new file mode 100644 index 000000000..0f0a23a1f Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-4-channel-png-plane-minimum noise-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-4-channel-png-plane-minimum noise-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-4-channel-png-plane-minimum noise-cuda].png new file mode 100644 index 000000000..0f0a23a1f Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-4-channel-png-plane-minimum noise-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-4-channel-png-plane-some noise-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-4-channel-png-plane-some noise-cpu].png new file mode 100644 index 000000000..8f111fe17 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-4-channel-png-plane-some noise-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-4-channel-png-plane-some noise-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-4-channel-png-plane-some noise-cuda].png new file mode 100644 index 000000000..0ca88c029 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-4-channel-png-plane-some noise-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-4-channel-png-plane-very noisy-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-4-channel-png-plane-very noisy-cpu].png new file mode 100644 index 000000000..e5e42ce2c Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-4-channel-png-plane-very noisy-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-4-channel-png-plane-very noisy-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-4-channel-png-plane-very noisy-cuda].png new file mode 100644 index 000000000..e5e42ce2c Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[opaque-4-channel-png-plane-very noisy-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[transparent-4-channel-png-rgba-minimum noise-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[transparent-4-channel-png-rgba-minimum noise-cpu].png new file mode 100644 index 000000000..6da78e96e Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[transparent-4-channel-png-rgba-minimum noise-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[transparent-4-channel-png-rgba-minimum noise-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[transparent-4-channel-png-rgba-minimum noise-cuda].png new file mode 100644 index 000000000..6da78e96e Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[transparent-4-channel-png-rgba-minimum noise-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[transparent-4-channel-png-rgba-some noise-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[transparent-4-channel-png-rgba-some noise-cpu].png new file mode 100644 index 000000000..b86106b61 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[transparent-4-channel-png-rgba-some noise-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[transparent-4-channel-png-rgba-some noise-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[transparent-4-channel-png-rgba-some noise-cuda].png new file mode 100644 index 000000000..b86106b61 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[transparent-4-channel-png-rgba-some noise-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[transparent-4-channel-png-rgba-very noisy-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[transparent-4-channel-png-rgba-very noisy-cpu].png new file mode 100644 index 000000000..e94185872 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[transparent-4-channel-png-rgba-very noisy-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[transparent-4-channel-png-rgba-very noisy-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[transparent-4-channel-png-rgba-very noisy-cuda].png new file mode 100644 index 000000000..e94185872 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAddNoise.test_should_add_noise[transparent-4-channel-png-rgba-very noisy-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[opaque-3-channel-jpg-plane-large factor-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[opaque-3-channel-jpg-plane-large factor-cpu].png new file mode 100644 index 000000000..ffb454aee Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[opaque-3-channel-jpg-plane-large factor-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[opaque-3-channel-jpg-plane-large factor-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[opaque-3-channel-jpg-plane-large factor-cuda].png new file mode 100644 index 000000000..ffb454aee Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[opaque-3-channel-jpg-plane-large factor-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[opaque-3-channel-jpg-plane-small factor-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[opaque-3-channel-jpg-plane-small factor-cpu].png new file mode 100644 index 000000000..61a4cc708 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[opaque-3-channel-jpg-plane-small factor-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[opaque-3-channel-jpg-plane-small factor-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[opaque-3-channel-jpg-plane-small factor-cuda].png new file mode 100644 index 000000000..61a4cc708 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[opaque-3-channel-jpg-plane-small factor-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[large factor].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[opaque-4-channel-png-plane-large factor-cpu].png similarity index 100% rename from tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[large factor].png rename to tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[opaque-4-channel-png-plane-large factor-cpu].png diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[opaque-4-channel-png-plane-large factor-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[opaque-4-channel-png-plane-large factor-cuda].png new file mode 100644 index 000000000..d3576112b Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[opaque-4-channel-png-plane-large factor-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[opaque-4-channel-png-plane-small factor-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[opaque-4-channel-png-plane-small factor-cpu].png new file mode 100644 index 000000000..7919d06fc Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[opaque-4-channel-png-plane-small factor-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[opaque-4-channel-png-plane-small factor-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[opaque-4-channel-png-plane-small factor-cuda].png new file mode 100644 index 000000000..7919d06fc Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[opaque-4-channel-png-plane-small factor-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[small factor].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[small factor].png deleted file mode 100644 index 3326ddfd4..000000000 Binary files a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustContrast.test_should_adjust_contrast[small factor].png and /dev/null differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestBlur.test_should_return_blurred_image[blur].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBlur.test_should_return_blurred_image[blur].png deleted file mode 100644 index a68d770f4..000000000 Binary files a/tests/safeds/data/image/containers/__snapshots__/test_image/TestBlur.test_should_return_blurred_image[blur].png and /dev/null differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestBlur.test_should_return_blurred_image[opaque-3-channel-jpg-plane-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBlur.test_should_return_blurred_image[opaque-3-channel-jpg-plane-cpu].png new file mode 100644 index 000000000..42dae9ef3 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBlur.test_should_return_blurred_image[opaque-3-channel-jpg-plane-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestBlur.test_should_return_blurred_image[opaque-3-channel-jpg-plane-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBlur.test_should_return_blurred_image[opaque-3-channel-jpg-plane-cuda].png new file mode 100644 index 000000000..42dae9ef3 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBlur.test_should_return_blurred_image[opaque-3-channel-jpg-plane-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestBlur.test_should_return_blurred_image[opaque-4-channel-png-plane-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBlur.test_should_return_blurred_image[opaque-4-channel-png-plane-cpu].png new file mode 100644 index 000000000..d00afad1f Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBlur.test_should_return_blurred_image[opaque-4-channel-png-plane-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestBlur.test_should_return_blurred_image[opaque-4-channel-png-plane-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBlur.test_should_return_blurred_image[opaque-4-channel-png-plane-cuda].png new file mode 100644 index 000000000..d00afad1f Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBlur.test_should_return_blurred_image[opaque-4-channel-png-plane-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestBlur.test_should_return_blurred_image[transparent-4-channel-png-rgba-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBlur.test_should_return_blurred_image[transparent-4-channel-png-rgba-cpu].png new file mode 100644 index 000000000..6f196813d Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBlur.test_should_return_blurred_image[transparent-4-channel-png-rgba-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestBlur.test_should_return_blurred_image[transparent-4-channel-png-rgba-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBlur.test_should_return_blurred_image[transparent-4-channel-png-rgba-cuda].png new file mode 100644 index 000000000..6f196813d Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBlur.test_should_return_blurred_image[transparent-4-channel-png-rgba-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestBrightness.test_should_adjust_brightness[opaque-3-channel-jpg-plane-large factor-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBrightness.test_should_adjust_brightness[opaque-3-channel-jpg-plane-large factor-cpu].png new file mode 100644 index 000000000..e6ee1b383 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBrightness.test_should_adjust_brightness[opaque-3-channel-jpg-plane-large factor-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestBrightness.test_should_adjust_brightness[opaque-3-channel-jpg-plane-large factor-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBrightness.test_should_adjust_brightness[opaque-3-channel-jpg-plane-large factor-cuda].png new file mode 100644 index 000000000..e6ee1b383 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBrightness.test_should_adjust_brightness[opaque-3-channel-jpg-plane-large factor-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestBrightness.test_should_adjust_brightness[opaque-3-channel-jpg-plane-small factor-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBrightness.test_should_adjust_brightness[opaque-3-channel-jpg-plane-small factor-cpu].png new file mode 100644 index 000000000..1b0d147b8 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBrightness.test_should_adjust_brightness[opaque-3-channel-jpg-plane-small factor-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestBrightness.test_should_adjust_brightness[opaque-3-channel-jpg-plane-small factor-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBrightness.test_should_adjust_brightness[opaque-3-channel-jpg-plane-small factor-cuda].png new file mode 100644 index 000000000..1b0d147b8 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBrightness.test_should_adjust_brightness[opaque-3-channel-jpg-plane-small factor-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustBrightness.test_should_adjust_brightness[large factor].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBrightness.test_should_adjust_brightness[opaque-4-channel-png-plane-large factor-cpu].png similarity index 100% rename from tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustBrightness.test_should_adjust_brightness[large factor].png rename to tests/safeds/data/image/containers/__snapshots__/test_image/TestBrightness.test_should_adjust_brightness[opaque-4-channel-png-plane-large factor-cpu].png diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestBrightness.test_should_adjust_brightness[opaque-4-channel-png-plane-large factor-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBrightness.test_should_adjust_brightness[opaque-4-channel-png-plane-large factor-cuda].png new file mode 100644 index 000000000..8d575b450 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBrightness.test_should_adjust_brightness[opaque-4-channel-png-plane-large factor-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustBrightness.test_should_adjust_brightness[small factor].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBrightness.test_should_adjust_brightness[opaque-4-channel-png-plane-small factor-cpu].png similarity index 100% rename from tests/safeds/data/image/containers/__snapshots__/test_image/TestAdjustBrightness.test_should_adjust_brightness[small factor].png rename to tests/safeds/data/image/containers/__snapshots__/test_image/TestBrightness.test_should_adjust_brightness[opaque-4-channel-png-plane-small factor-cpu].png diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestBrightness.test_should_adjust_brightness[opaque-4-channel-png-plane-small factor-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBrightness.test_should_adjust_brightness[opaque-4-channel-png-plane-small factor-cuda].png new file mode 100644 index 000000000..c1c5da058 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestBrightness.test_should_adjust_brightness[opaque-4-channel-png-plane-small factor-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestColorAdjust.test_should_adjust_colors[add color].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestColorAdjust.test_should_adjust_colors[add color].png deleted file mode 100644 index 5bae77036..000000000 Binary files a/tests/safeds/data/image/containers/__snapshots__/test_image/TestColorAdjust.test_should_adjust_colors[add color].png and /dev/null differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestColorAdjust.test_should_adjust_colors[remove all color].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestColorAdjust.test_should_adjust_colors[remove all color].png deleted file mode 100644 index 1c0e55cbb..000000000 Binary files a/tests/safeds/data/image/containers/__snapshots__/test_image/TestColorAdjust.test_should_adjust_colors[remove all color].png and /dev/null differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestColorAdjust.test_should_adjust_colors[remove color].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestColorAdjust.test_should_adjust_colors[remove color].png deleted file mode 100644 index a5815ce25..000000000 Binary files a/tests/safeds/data/image/containers/__snapshots__/test_image/TestColorAdjust.test_should_adjust_colors[remove color].png and /dev/null differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[opaque-3-channel-jpg-plane-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[opaque-3-channel-jpg-plane-cpu].png new file mode 100644 index 000000000..60357e934 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[opaque-3-channel-jpg-plane-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[opaque-3-channel-jpg-plane-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[opaque-3-channel-jpg-plane-cuda].png new file mode 100644 index 000000000..60357e934 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[opaque-3-channel-jpg-plane-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[opaque-3-channel-jpg-white_square-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[opaque-3-channel-jpg-white_square-cpu].png new file mode 100644 index 000000000..b9028365b Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[opaque-3-channel-jpg-white_square-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[opaque-3-channel-jpg-white_square-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[opaque-3-channel-jpg-white_square-cuda].png new file mode 100644 index 000000000..b9028365b Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[opaque-3-channel-jpg-white_square-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[opaque-3-channel-png-white_square-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[opaque-3-channel-png-white_square-cpu].png new file mode 100644 index 000000000..b9028365b Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[opaque-3-channel-png-white_square-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[opaque-3-channel-png-white_square-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[opaque-3-channel-png-white_square-cuda].png new file mode 100644 index 000000000..b9028365b Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[opaque-3-channel-png-white_square-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[opaque-4-channel-png-plane-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[opaque-4-channel-png-plane-cpu].png new file mode 100644 index 000000000..e1135e9bd Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[opaque-4-channel-png-plane-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[opaque-4-channel-png-plane-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[opaque-4-channel-png-plane-cuda].png new file mode 100644 index 000000000..e1135e9bd Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[opaque-4-channel-png-plane-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[plane].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[plane].png deleted file mode 100644 index 06691ad71..000000000 Binary files a/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[plane].png and /dev/null differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[transparent-4-channel-png-rgba-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[transparent-4-channel-png-rgba-cpu].png new file mode 100644 index 000000000..e8c3bef99 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[transparent-4-channel-png-rgba-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[transparent-4-channel-png-rgba-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[transparent-4-channel-png-rgba-cuda].png new file mode 100644 index 000000000..e8c3bef99 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestConvertToGrayscale.test_convert_to_grayscale[transparent-4-channel-png-rgba-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[opaque-3-channel-jpg-plane-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[opaque-3-channel-jpg-plane-cpu].png new file mode 100644 index 000000000..9bce1197c Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[opaque-3-channel-jpg-plane-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[opaque-3-channel-jpg-plane-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[opaque-3-channel-jpg-plane-cuda].png new file mode 100644 index 000000000..9bce1197c Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[opaque-3-channel-jpg-plane-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[opaque-3-channel-jpg-white_square-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[opaque-3-channel-jpg-white_square-cpu].png new file mode 100644 index 000000000..a7ba53ec3 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[opaque-3-channel-jpg-white_square-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[opaque-3-channel-jpg-white_square-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[opaque-3-channel-jpg-white_square-cuda].png new file mode 100644 index 000000000..a7ba53ec3 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[opaque-3-channel-jpg-white_square-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[opaque-3-channel-png-white_square-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[opaque-3-channel-png-white_square-cpu].png new file mode 100644 index 000000000..a7ba53ec3 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[opaque-3-channel-png-white_square-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[opaque-3-channel-png-white_square-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[opaque-3-channel-png-white_square-cuda].png new file mode 100644 index 000000000..a7ba53ec3 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[opaque-3-channel-png-white_square-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[crop].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[opaque-4-channel-png-plane-cpu].png similarity index 100% rename from tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[crop].png rename to tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[opaque-4-channel-png-plane-cpu].png diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[opaque-4-channel-png-plane-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[opaque-4-channel-png-plane-cuda].png new file mode 100644 index 000000000..690f5196b Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[opaque-4-channel-png-plane-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[transparent-4-channel-png-rgba-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[transparent-4-channel-png-rgba-cpu].png new file mode 100644 index 000000000..a607f197b Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[transparent-4-channel-png-rgba-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[transparent-4-channel-png-rgba-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[transparent-4-channel-png-rgba-cuda].png new file mode 100644 index 000000000..a607f197b Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestCrop.test_should_return_cropped_image[transparent-4-channel-png-rgba-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestFindEdges.test_should_return_edges_of_image[find_edges].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestFindEdges.test_should_return_edges_of_image[find_edges].png deleted file mode 100644 index b625bcdff..000000000 Binary files a/tests/safeds/data/image/containers/__snapshots__/test_image/TestFindEdges.test_should_return_edges_of_image[find_edges].png and /dev/null differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipHorizontally.test_should_flip_horizontally[opaque-3-channel-jpg-plane-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipHorizontally.test_should_flip_horizontally[opaque-3-channel-jpg-plane-cpu].png new file mode 100644 index 000000000..53477dcb5 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipHorizontally.test_should_flip_horizontally[opaque-3-channel-jpg-plane-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipHorizontally.test_should_flip_horizontally[opaque-3-channel-jpg-plane-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipHorizontally.test_should_flip_horizontally[opaque-3-channel-jpg-plane-cuda].png new file mode 100644 index 000000000..53477dcb5 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipHorizontally.test_should_flip_horizontally[opaque-3-channel-jpg-plane-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipHorizontally.test_should_flip_horizontally[plane].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipHorizontally.test_should_flip_horizontally[opaque-4-channel-png-plane-cpu].png similarity index 100% rename from tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipHorizontally.test_should_flip_horizontally[plane].png rename to tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipHorizontally.test_should_flip_horizontally[opaque-4-channel-png-plane-cpu].png diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipHorizontally.test_should_flip_horizontally[opaque-4-channel-png-plane-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipHorizontally.test_should_flip_horizontally[opaque-4-channel-png-plane-cuda].png new file mode 100644 index 000000000..35164d25e Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipHorizontally.test_should_flip_horizontally[opaque-4-channel-png-plane-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipHorizontally.test_should_flip_horizontally[transparent-4-channel-png-rgba-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipHorizontally.test_should_flip_horizontally[transparent-4-channel-png-rgba-cpu].png new file mode 100644 index 000000000..2d5c349b6 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipHorizontally.test_should_flip_horizontally[transparent-4-channel-png-rgba-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipHorizontally.test_should_flip_horizontally[transparent-4-channel-png-rgba-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipHorizontally.test_should_flip_horizontally[transparent-4-channel-png-rgba-cuda].png new file mode 100644 index 000000000..2d5c349b6 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipHorizontally.test_should_flip_horizontally[transparent-4-channel-png-rgba-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipVertically.test_should_flip_vertically[opaque-3-channel-jpg-plane-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipVertically.test_should_flip_vertically[opaque-3-channel-jpg-plane-cpu].png new file mode 100644 index 000000000..d31490b1c Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipVertically.test_should_flip_vertically[opaque-3-channel-jpg-plane-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipVertically.test_should_flip_vertically[opaque-3-channel-jpg-plane-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipVertically.test_should_flip_vertically[opaque-3-channel-jpg-plane-cuda].png new file mode 100644 index 000000000..d31490b1c Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipVertically.test_should_flip_vertically[opaque-3-channel-jpg-plane-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipVertically.test_should_flip_vertically[plane].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipVertically.test_should_flip_vertically[opaque-4-channel-png-plane-cpu].png similarity index 100% rename from tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipVertically.test_should_flip_vertically[plane].png rename to tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipVertically.test_should_flip_vertically[opaque-4-channel-png-plane-cpu].png diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipVertically.test_should_flip_vertically[opaque-4-channel-png-plane-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipVertically.test_should_flip_vertically[opaque-4-channel-png-plane-cuda].png new file mode 100644 index 000000000..942b4cb7f Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipVertically.test_should_flip_vertically[opaque-4-channel-png-plane-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipVertically.test_should_flip_vertically[transparent-4-channel-png-rgba-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipVertically.test_should_flip_vertically[transparent-4-channel-png-rgba-cpu].png new file mode 100644 index 000000000..75f528530 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipVertically.test_should_flip_vertically[transparent-4-channel-png-rgba-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipVertically.test_should_flip_vertically[transparent-4-channel-png-rgba-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipVertically.test_should_flip_vertically[transparent-4-channel-png-rgba-cuda].png new file mode 100644 index 000000000..75f528530 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestFlipVertically.test_should_flip_vertically[transparent-4-channel-png-rgba-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[invert-colors].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[invert-colors].png deleted file mode 100644 index d1ca2753c..000000000 Binary files a/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[invert-colors].png and /dev/null differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[opaque-3-channel-jpg-plane-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[opaque-3-channel-jpg-plane-cpu].png new file mode 100644 index 000000000..b376ab3fe Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[opaque-3-channel-jpg-plane-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[opaque-3-channel-jpg-plane-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[opaque-3-channel-jpg-plane-cuda].png new file mode 100644 index 000000000..b376ab3fe Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[opaque-3-channel-jpg-plane-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[opaque-3-channel-jpg-white_square-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[opaque-3-channel-jpg-white_square-cpu].png new file mode 100644 index 000000000..19b3f6a1e Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[opaque-3-channel-jpg-white_square-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[opaque-3-channel-jpg-white_square-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[opaque-3-channel-jpg-white_square-cuda].png new file mode 100644 index 000000000..19b3f6a1e Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[opaque-3-channel-jpg-white_square-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[opaque-3-channel-png-white_square-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[opaque-3-channel-png-white_square-cpu].png new file mode 100644 index 000000000..19b3f6a1e Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[opaque-3-channel-png-white_square-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[opaque-3-channel-png-white_square-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[opaque-3-channel-png-white_square-cuda].png new file mode 100644 index 000000000..19b3f6a1e Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[opaque-3-channel-png-white_square-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[opaque-4-channel-png-plane-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[opaque-4-channel-png-plane-cpu].png new file mode 100644 index 000000000..d12ab2f2c Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[opaque-4-channel-png-plane-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[opaque-4-channel-png-plane-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[opaque-4-channel-png-plane-cuda].png new file mode 100644 index 000000000..d12ab2f2c Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[opaque-4-channel-png-plane-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[transparent-4-channel-png-rgba-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[transparent-4-channel-png-rgba-cpu].png new file mode 100644 index 000000000..0a2d491ce Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[transparent-4-channel-png-rgba-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[transparent-4-channel-png-rgba-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[transparent-4-channel-png-rgba-cuda].png new file mode 100644 index 000000000..0a2d491ce Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestInvertColors.test_should_invert_colors[transparent-4-channel-png-rgba-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-opaque-3-channel-jpg-plane-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-opaque-3-channel-jpg-plane-cpu].png new file mode 100644 index 000000000..6c3af6b64 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-opaque-3-channel-jpg-plane-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-opaque-3-channel-jpg-plane-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-opaque-3-channel-jpg-plane-cuda].png new file mode 100644 index 000000000..6c3af6b64 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-opaque-3-channel-jpg-plane-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-opaque-3-channel-jpg-white_square-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-opaque-3-channel-jpg-white_square-cpu].png new file mode 100644 index 000000000..3647675f7 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-opaque-3-channel-jpg-white_square-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-opaque-3-channel-jpg-white_square-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-opaque-3-channel-jpg-white_square-cuda].png new file mode 100644 index 000000000..3647675f7 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-opaque-3-channel-jpg-white_square-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-opaque-3-channel-png-white_square-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-opaque-3-channel-png-white_square-cpu].png new file mode 100644 index 000000000..3647675f7 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-opaque-3-channel-png-white_square-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-opaque-3-channel-png-white_square-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-opaque-3-channel-png-white_square-cuda].png new file mode 100644 index 000000000..3647675f7 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-opaque-3-channel-png-white_square-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-opaque-4-channel-png-plane-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-opaque-4-channel-png-plane-cpu].png new file mode 100644 index 000000000..67b44b190 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-opaque-4-channel-png-plane-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-opaque-4-channel-png-plane-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-opaque-4-channel-png-plane-cuda].png new file mode 100644 index 000000000..67b44b190 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-opaque-4-channel-png-plane-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-transparent-4-channel-png-rgba-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-transparent-4-channel-png-rgba-cpu].png new file mode 100644 index 000000000..7fedc0669 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-transparent-4-channel-png-rgba-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-transparent-4-channel-png-rgba-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-transparent-4-channel-png-rgba-cuda].png new file mode 100644 index 000000000..7fedc0669 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(2, 3)-transparent-4-channel-png-rgba-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-opaque-3-channel-jpg-plane-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-opaque-3-channel-jpg-plane-cpu].png new file mode 100644 index 000000000..821a3026f Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-opaque-3-channel-jpg-plane-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-opaque-3-channel-jpg-plane-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-opaque-3-channel-jpg-plane-cuda].png new file mode 100644 index 000000000..821a3026f Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-opaque-3-channel-jpg-plane-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-opaque-3-channel-jpg-white_square-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-opaque-3-channel-jpg-white_square-cpu].png new file mode 100644 index 000000000..1dede93a6 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-opaque-3-channel-jpg-white_square-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-opaque-3-channel-jpg-white_square-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-opaque-3-channel-jpg-white_square-cuda].png new file mode 100644 index 000000000..1dede93a6 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-opaque-3-channel-jpg-white_square-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-opaque-3-channel-png-white_square-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-opaque-3-channel-png-white_square-cpu].png new file mode 100644 index 000000000..1dede93a6 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-opaque-3-channel-png-white_square-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-opaque-3-channel-png-white_square-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-opaque-3-channel-png-white_square-cuda].png new file mode 100644 index 000000000..1dede93a6 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-opaque-3-channel-png-white_square-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-opaque-4-channel-png-plane-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-opaque-4-channel-png-plane-cpu].png new file mode 100644 index 000000000..8f2b1a90e Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-opaque-4-channel-png-plane-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-opaque-4-channel-png-plane-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-opaque-4-channel-png-plane-cuda].png new file mode 100644 index 000000000..8f2b1a90e Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-opaque-4-channel-png-plane-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-transparent-4-channel-png-rgba-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-transparent-4-channel-png-rgba-cpu].png new file mode 100644 index 000000000..618c70c2c Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-transparent-4-channel-png-rgba-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-transparent-4-channel-png-rgba-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-transparent-4-channel-png-rgba-cuda].png new file mode 100644 index 000000000..618c70c2c Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestResize.test_should_return_resized_image[(700, 400)-transparent-4-channel-png-rgba-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[opaque-3-channel-jpg-plane-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[opaque-3-channel-jpg-plane-cpu].png new file mode 100644 index 000000000..b9383af36 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[opaque-3-channel-jpg-plane-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[opaque-3-channel-jpg-plane-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[opaque-3-channel-jpg-plane-cuda].png new file mode 100644 index 000000000..b9383af36 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[opaque-3-channel-jpg-plane-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[opaque-3-channel-jpg-white_square-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[opaque-3-channel-jpg-white_square-cpu].png new file mode 100644 index 000000000..94381b429 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[opaque-3-channel-jpg-white_square-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[opaque-3-channel-jpg-white_square-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[opaque-3-channel-jpg-white_square-cuda].png new file mode 100644 index 000000000..94381b429 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[opaque-3-channel-jpg-white_square-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[opaque-3-channel-png-white_square-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[opaque-3-channel-png-white_square-cpu].png new file mode 100644 index 000000000..94381b429 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[opaque-3-channel-png-white_square-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[opaque-3-channel-png-white_square-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[opaque-3-channel-png-white_square-cuda].png new file mode 100644 index 000000000..94381b429 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[opaque-3-channel-png-white_square-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[rotate-clockwise].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[opaque-4-channel-png-plane-cpu].png similarity index 100% rename from tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[rotate-clockwise].png rename to tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[opaque-4-channel-png-plane-cpu].png diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[opaque-4-channel-png-plane-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[opaque-4-channel-png-plane-cuda].png new file mode 100644 index 000000000..ba19ff602 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[opaque-4-channel-png-plane-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[transparent-4-channel-png-rgba-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[transparent-4-channel-png-rgba-cpu].png new file mode 100644 index 000000000..7a690c1e8 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[transparent-4-channel-png-rgba-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[transparent-4-channel-png-rgba-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[transparent-4-channel-png-rgba-cuda].png new file mode 100644 index 000000000..7a690c1e8 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_clockwise_rotated_image[transparent-4-channel-png-rgba-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[opaque-3-channel-jpg-plane-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[opaque-3-channel-jpg-plane-cpu].png new file mode 100644 index 000000000..c34970a0b Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[opaque-3-channel-jpg-plane-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[opaque-3-channel-jpg-plane-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[opaque-3-channel-jpg-plane-cuda].png new file mode 100644 index 000000000..c34970a0b Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[opaque-3-channel-jpg-plane-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[opaque-3-channel-jpg-white_square-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[opaque-3-channel-jpg-white_square-cpu].png new file mode 100644 index 000000000..94381b429 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[opaque-3-channel-jpg-white_square-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[opaque-3-channel-jpg-white_square-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[opaque-3-channel-jpg-white_square-cuda].png new file mode 100644 index 000000000..94381b429 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[opaque-3-channel-jpg-white_square-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[opaque-3-channel-png-white_square-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[opaque-3-channel-png-white_square-cpu].png new file mode 100644 index 000000000..94381b429 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[opaque-3-channel-png-white_square-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[opaque-3-channel-png-white_square-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[opaque-3-channel-png-white_square-cuda].png new file mode 100644 index 000000000..94381b429 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[opaque-3-channel-png-white_square-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[rotate-counter-clockwise].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[opaque-4-channel-png-plane-cpu].png similarity index 100% rename from tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[rotate-counter-clockwise].png rename to tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[opaque-4-channel-png-plane-cpu].png diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[opaque-4-channel-png-plane-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[opaque-4-channel-png-plane-cuda].png new file mode 100644 index 000000000..603277fff Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[opaque-4-channel-png-plane-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[transparent-4-channel-png-rgba-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[transparent-4-channel-png-rgba-cpu].png new file mode 100644 index 000000000..dbeac8df8 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[transparent-4-channel-png-rgba-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[transparent-4-channel-png-rgba-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[transparent-4-channel-png-rgba-cuda].png new file mode 100644 index 000000000..dbeac8df8 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestRotate.test_should_return_counter_clockwise_rotated_image[transparent-4-channel-png-rgba-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[negative factor].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[negative factor].png deleted file mode 100644 index 1859ff818..000000000 Binary files a/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[negative factor].png and /dev/null differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-3-channel-jpg-plane-large factor-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-3-channel-jpg-plane-large factor-cpu].png new file mode 100644 index 000000000..e94664e68 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-3-channel-jpg-plane-large factor-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-3-channel-jpg-plane-large factor-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-3-channel-jpg-plane-large factor-cuda].png new file mode 100644 index 000000000..e94664e68 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-3-channel-jpg-plane-large factor-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-3-channel-jpg-plane-small factor-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-3-channel-jpg-plane-small factor-cpu].png new file mode 100644 index 000000000..7d8333a4a Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-3-channel-jpg-plane-small factor-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-3-channel-jpg-plane-small factor-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-3-channel-jpg-plane-small factor-cuda].png new file mode 100644 index 000000000..7d8333a4a Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-3-channel-jpg-plane-small factor-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-3-channel-jpg-plane-zero factor-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-3-channel-jpg-plane-zero factor-cpu].png new file mode 100644 index 000000000..3b7f2e22c Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-3-channel-jpg-plane-zero factor-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-3-channel-jpg-plane-zero factor-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-3-channel-jpg-plane-zero factor-cuda].png new file mode 100644 index 000000000..3b7f2e22c Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-3-channel-jpg-plane-zero factor-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[large factor].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-4-channel-png-plane-large factor-cpu].png similarity index 100% rename from tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[large factor].png rename to tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-4-channel-png-plane-large factor-cpu].png diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-4-channel-png-plane-large factor-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-4-channel-png-plane-large factor-cuda].png new file mode 100644 index 000000000..265d06558 Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-4-channel-png-plane-large factor-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[small factor].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-4-channel-png-plane-small factor-cpu].png similarity index 100% rename from tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[small factor].png rename to tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-4-channel-png-plane-small factor-cpu].png diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-4-channel-png-plane-small factor-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-4-channel-png-plane-small factor-cuda].png new file mode 100644 index 000000000..0ffa9db5b Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-4-channel-png-plane-small factor-cuda].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-4-channel-png-plane-zero factor-cpu].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-4-channel-png-plane-zero factor-cpu].png new file mode 100644 index 000000000..64e54965b Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-4-channel-png-plane-zero factor-cpu].png differ diff --git a/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-4-channel-png-plane-zero factor-cuda].png b/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-4-channel-png-plane-zero factor-cuda].png new file mode 100644 index 000000000..64e54965b Binary files /dev/null and b/tests/safeds/data/image/containers/__snapshots__/test_image/TestSharpen.test_should_sharpen[opaque-4-channel-png-plane-zero factor-cuda].png differ diff --git a/tests/safeds/data/image/containers/test_image.py b/tests/safeds/data/image/containers/test_image.py index f1f907e1d..3becd8228 100644 --- a/tests/safeds/data/image/containers/test_image.py +++ b/tests/safeds/data/image/containers/test_image.py @@ -1,512 +1,759 @@ +import typing from pathlib import Path from tempfile import NamedTemporaryFile import pytest +import torch from safeds.data.image.containers import Image -from safeds.data.image.typing import ImageFormat from safeds.data.tabular.containers import Table -from safeds.exceptions import OutOfBoundsError +from safeds.exceptions import IllegalFormatError, OutOfBoundsError from syrupy import SnapshotAssertion +from torch.types import Device from tests.helpers import resolve_resource_path +_device_cuda = torch.device("cuda") +_device_cpu = torch.device("cpu") -class TestFromJpegFile: +_plane_jpg_path = "image/plane.jpg" +_plane_png_path = "image/plane.png" +_rgba_png_path = "image/rgba.png" +_white_square_jpg_path = "image/white_square.jpg" +_white_square_png_path = "image/white_square.png" + +_plane_jpg_id = "opaque-3-channel-jpg-plane" +_plane_png_id = "opaque-4-channel-png-plane" +_rgba_png_id = "transparent-4-channel-png-rgba" +_white_square_jpg_id = "opaque-3-channel-jpg-white_square" +_white_square_png_id = "opaque-3-channel-png-white_square" + + +def _test_devices() -> list[torch.device]: + return [_device_cpu, _device_cuda] + + +def _test_devices_ids() -> list[str]: + return ["cpu", "cuda"] + + +def _test_images_all() -> list[str]: + return [ + _plane_jpg_path, + _plane_png_path, + _rgba_png_path, + _white_square_jpg_path, + _white_square_png_path, + ] + + +def _test_images_all_ids() -> list[str]: + return [ + _plane_jpg_id, + _plane_png_id, + _rgba_png_id, + _white_square_jpg_id, + _white_square_png_id, + ] + + +def _test_images_asymmetric() -> list[str]: + return [ + _plane_jpg_path, + _plane_png_path, + _rgba_png_path, + ] + + +def _test_images_asymmetric_ids() -> list[str]: + return [ + _plane_jpg_id, + _plane_png_id, + _rgba_png_id, + ] + + +def _skip_if_device_not_available(device: Device) -> None: + if device == _device_cuda and not torch.cuda.is_available(): + pytest.skip("This test requires cuda") + + +@pytest.mark.parametrize("device", _test_devices(), ids=_test_devices_ids()) +class TestFromFile: @pytest.mark.parametrize( "resource_path", - [ - "image/plane.jpg", - Path("image/plane.jpg"), + [*_test_images_all(), *[Path(image_path) for image_path in _test_images_all()]], + ids=[ + *["file-" + image_id for image_id in _test_images_all_ids()], + *["path-" + image_id for image_id in _test_images_all_ids()], ], - ids=["jpg", "jpg_Path"], ) - def test_should_load_jpeg_file(self, resource_path: str | Path) -> None: - Image.from_jpeg_file(resolve_resource_path(resource_path)) + def test_should_load_from_file(self, resource_path: str | Path, device: Device) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + assert image != Image(torch.empty(1, 1, 1)) @pytest.mark.parametrize( "resource_path", [ "image/missing_file.jpg", Path("image/missing_file.jpg"), + "image/missing_file.png", + Path("image/missing_file.png"), ], - ids=["missing_file_jpg", "missing_file_jpg_Path"], + ids=["missing_file_jpg", "missing_file_jpg_Path", "missing_file_png", "missing_file_png_Path"], ) - def test_should_raise_if_file_not_found(self, resource_path: str | Path) -> None: + def test_should_raise_if_file_not_found(self, resource_path: str | Path, device: Device) -> None: + _skip_if_device_not_available(device) with pytest.raises(FileNotFoundError): - Image.from_jpeg_file(resolve_resource_path(resource_path)) + Image.from_file(resolve_resource_path(resource_path), device) -class TestFromPngFile: +@pytest.mark.parametrize("device", _test_devices(), ids=_test_devices_ids()) +class TestFromBytes: @pytest.mark.parametrize( "resource_path", - [ - "image/plane.png", - Path("image/plane.png"), - ], - ids=["png", "png_Path"], + [_white_square_jpg_path, _white_square_png_path], + ids=[_white_square_jpg_id, _white_square_png_id], ) - def test_should_load_png_file(self, resource_path: str | Path) -> None: - Image.from_png_file(resolve_resource_path(resource_path)) + def test_should_write_and_load_bytes_jpeg(self, resource_path: str | Path, device: Device) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + image_copy = Image.from_bytes(typing.cast(bytes, image._repr_jpeg_()), device) + assert image == image_copy @pytest.mark.parametrize( "resource_path", - [ - "image/missing_file.png", - Path("image/missing_file.png"), - ], - ids=["missing_file_png", "missing_file_png_Path"], + _test_images_all(), + ids=_test_images_all_ids(), ) - def test_should_raise_if_file_not_found(self, resource_path: str | Path) -> None: - with pytest.raises(FileNotFoundError): - Image.from_png_file(resolve_resource_path(resource_path)) + def test_should_write_and_load_bytes_png(self, resource_path: str | Path, device: Device) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + image_copy = Image.from_bytes(image._repr_png_(), device) + assert image == image_copy -class TestFormat: +@pytest.mark.parametrize("device", _test_devices(), ids=_test_devices_ids()) +class TestReprJpeg: @pytest.mark.parametrize( - ("image", "format_"), - [ - (Image.from_jpeg_file(resolve_resource_path("image/white_square.jpg")), ImageFormat.JPEG), - (Image.from_png_file(resolve_resource_path("image/white_square.png")), ImageFormat.PNG), - ], - ids=["jpg", "png"], + "resource_path", + [_plane_jpg_path, _white_square_jpg_path, _white_square_png_path], + ids=[_plane_jpg_id, _white_square_jpg_id, _white_square_png_id], ) - def test_should_return_correct_format(self, image: Image, format_: ImageFormat) -> None: - assert image.format == format_ - + def test_should_return_bytes(self, resource_path: str | Path, device: Device) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + assert isinstance(image._repr_jpeg_(), bytes) -class TestProperties: @pytest.mark.parametrize( - ("image", "width", "height"), + "resource_path", [ - ( - Image.from_jpeg_file(resolve_resource_path("image/white_square.jpg")), - 1, - 1, - ), - ( - Image.from_png_file(resolve_resource_path("image/plane.png")), - 568, - 320, - ), + _plane_png_path, + _rgba_png_path, ], - ids=["[1,1]", "[568,320]"], + ids=[_plane_png_id, _rgba_png_id], ) - def test_should_return_image_properties(self, image: Image, width: int, height: int) -> None: - assert image.width == width - assert image.height == height + def test_should_return_none_if_image_has_alpha_channel(self, resource_path: str | Path, device: Device) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + assert image._repr_jpeg_() is None -class TestToJpegFile: +@pytest.mark.parametrize("device", _test_devices(), ids=_test_devices_ids()) +class TestReprPng: @pytest.mark.parametrize( "resource_path", - ["image/white_square.jpg"], - ids=["jpg"], + _test_images_all(), + ids=_test_images_all_ids(), ) - def test_should_save_jpeg_file_by_str(self, resource_path: str) -> None: - image = Image.from_jpeg_file(resolve_resource_path(resource_path)) - - with NamedTemporaryFile() as tmp_file: - tmp_file.close() - with Path(tmp_file.name).open("wb") as tmp_write_file: - image.to_jpeg_file(tmp_write_file.name) - with Path(tmp_file.name).open("rb") as tmp_read_file: - image_read_back = Image.from_jpeg_file(tmp_read_file.name) + def test_should_return_bytes(self, resource_path: str | Path, device: Device) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + assert isinstance(image._repr_png_(), bytes) - assert image._image.tobytes() == image_read_back._image.tobytes() +@pytest.mark.parametrize("device", _test_devices(), ids=_test_devices_ids()) +class TestToJpegFile: @pytest.mark.parametrize( "resource_path", - ["image/white_square.jpg"], - ids=["jpg"], + [_white_square_jpg_path, _white_square_png_path], + ids=[_white_square_jpg_id, _white_square_png_id], ) - def test_should_save_jpeg_file_by_path(self, resource_path: str) -> None: - image = Image.from_jpeg_file(resolve_resource_path(resource_path)) - - with NamedTemporaryFile() as tmp_file: - tmp_file.close() - with Path(tmp_file.name).open("wb") as tmp_write_file: - image.to_jpeg_file(Path(tmp_write_file.name)) - with Path(tmp_file.name).open("rb") as tmp_read_file: - image_read_back = Image.from_jpeg_file(tmp_read_file.name) + def test_should_save_file(self, resource_path: str | Path, device: Device) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + with NamedTemporaryFile(suffix=".jpg") as tmp_jpeg_file: + tmp_jpeg_file.close() + with Path(tmp_jpeg_file.name).open("w", encoding="utf-8") as tmp_file: + image.to_jpeg_file(tmp_file.name) + with Path(tmp_jpeg_file.name).open("r", encoding="utf-8") as tmp_file: + image_r = Image.from_file(tmp_file.name) + assert image == image_r - assert image._image.tobytes() == image_read_back._image.tobytes() - - -class TestToPngFile: @pytest.mark.parametrize( "resource_path", - ["image/white_square.png"], - ids=["png"], + [ + _plane_png_path, + _rgba_png_path, + ], + ids=[_plane_png_id, _rgba_png_id], ) - def test_should_save_png_file_by_str(self, resource_path: str) -> None: - image = Image.from_png_file(resolve_resource_path(resource_path)) - - with NamedTemporaryFile() as tmp_file: - tmp_file.close() - with Path(tmp_file.name).open("wb") as tmp_write_file: - image.to_png_file(tmp_write_file.name) - with Path(tmp_file.name).open("rb") as tmp_read_file: - image_read_back = Image.from_png_file(tmp_read_file.name) + def test_should_raise_if_image_has_alpha_channel(self, resource_path: str | Path, device: Device) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + with NamedTemporaryFile(suffix=".jpg") as tmp_jpeg_file: + tmp_jpeg_file.close() + with Path(tmp_jpeg_file.name).open("w", encoding="utf-8") as tmp_file, pytest.raises( + IllegalFormatError, + match=r"This format is illegal. Use one of the following formats: png", + ): + image.to_jpeg_file(tmp_file.name) - assert image._image.tobytes() == image_read_back._image.tobytes() +@pytest.mark.parametrize("device", _test_devices(), ids=_test_devices_ids()) +class TestToPngFile: @pytest.mark.parametrize( "resource_path", - ["image/white_square.png"], - ids=["png"], + _test_images_all(), + ids=_test_images_all_ids(), + ) + def test_should_save_file(self, resource_path: str | Path, device: Device) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + with NamedTemporaryFile(suffix=".png") as tmp_png_file: + tmp_png_file.close() + with Path(tmp_png_file.name).open("w", encoding="utf-8") as tmp_file: + image.to_png_file(tmp_file.name) + with Path(tmp_png_file.name).open("r", encoding="utf-8") as tmp_file: + image_r = Image.from_file(tmp_file.name) + assert image == image_r + + +@pytest.mark.parametrize("device", _test_devices(), ids=_test_devices_ids()) +class TestProperties: + @pytest.mark.parametrize( + ("resource_path", "width", "height", "channel"), + [ + ( + _white_square_jpg_path, + 1, + 1, + 3, + ), + ( + _plane_png_path, + 568, + 320, + 4, + ), + ( + _rgba_png_path, + 7, + 5, + 4, + ), + ], + ids=["[3,1,1]" + _white_square_jpg_id, "[4,568,320]" + _plane_png_id, "[4,568,320]" + _rgba_png_id], ) - def test_should_save_png_file_by_path(self, resource_path: str) -> None: - image = Image.from_png_file(resolve_resource_path(resource_path)) - - with NamedTemporaryFile() as tmp_file: - tmp_file.close() - with Path(tmp_file.name).open("wb") as tmp_write_file: - image.to_png_file(Path(tmp_write_file.name)) - with Path(tmp_file.name).open("rb") as tmp_read_file: - image_read_back = Image.from_png_file(tmp_read_file.name) - - assert image._image.tobytes() == image_read_back._image.tobytes() + def test_should_return_image_properties( + self, + resource_path: str, + width: int, + height: int, + channel: int, + device: Device, + ) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + assert image.width == width + assert image.height == height + assert image.channel == channel -class TestReprJpeg: +class TestEQ: + @pytest.mark.parametrize("device", _test_devices(), ids=_test_devices_ids()) @pytest.mark.parametrize( "resource_path", - ["image/white_square.jpg"], - ids=["jpg"], + _test_images_all(), + ids=_test_images_all_ids(), ) - def test_should_return_bytes_if_image_is_jpeg(self, resource_path: str) -> None: - image = Image.from_jpeg_file(resolve_resource_path(resource_path)) - assert isinstance(image._repr_jpeg_(), bytes) + def test_should_be_equal(self, resource_path: str, device: Device) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + image2 = Image.from_file(resolve_resource_path(resource_path), device) + assert image == image2 + + @pytest.mark.parametrize("device", _test_devices(), ids=_test_devices_ids()) + def test_should_not_be_equal(self, device: Device) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(_plane_png_path), device) + image2 = Image.from_file(resolve_resource_path(_white_square_png_path), device) + assert image != image2 @pytest.mark.parametrize( "resource_path", - ["image/white_square.png"], - ids=["png"], + _test_images_all(), + ids=_test_images_all_ids(), ) - def test_should_return_none_if_image_is_not_jpeg(self, resource_path: str) -> None: - image = Image.from_png_file(resolve_resource_path(resource_path)) - assert image._repr_jpeg_() is None + def test_should_be_equal_different_devices(self, resource_path: str) -> None: + _skip_if_device_not_available(_device_cuda) + image = Image.from_file(resolve_resource_path(resource_path), torch.device("cpu")) + image2 = Image.from_file(resolve_resource_path(resource_path), torch.device("cuda")) + assert image == image2 + assert image2 == image + def test_should_not_be_equal_different_devices(self) -> None: + _skip_if_device_not_available(_device_cuda) + image = Image.from_file(resolve_resource_path(_plane_png_path), torch.device("cpu")) + image2 = Image.from_file(resolve_resource_path(_white_square_png_path), torch.device("cuda")) + assert image != image2 + assert image2 != image -class TestReprPng: + @pytest.mark.parametrize("device", _test_devices(), ids=_test_devices_ids()) @pytest.mark.parametrize( "resource_path", - ["image/white_square.png"], - ids=["png"], + _test_images_all(), + ids=_test_images_all_ids(), ) - def test_should_return_bytes_if_image_is_png(self, resource_path: str) -> None: - image = Image.from_png_file(resolve_resource_path(resource_path)) - assert isinstance(image._repr_png_(), bytes) + def test_should_raise(self, resource_path: str, device: Device) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + other = Table() + assert (image.__eq__(other)) is NotImplemented + +@pytest.mark.parametrize("device", _test_devices(), ids=_test_devices_ids()) +class TestResize: @pytest.mark.parametrize( "resource_path", - ["image/white_square.jpg"], - ids=["jpg"], + _test_images_all(), + ids=_test_images_all_ids(), ) - def test_should_return_none_if_image_is_not_png(self, resource_path: str) -> None: - image = Image.from_jpeg_file(resolve_resource_path(resource_path)) - assert image._repr_png_() is None - - -class TestResize: @pytest.mark.parametrize( - ("image", "new_width", "new_height", "new_size"), + ("new_width", "new_height"), [ ( - Image.from_png_file(resolve_resource_path("image/white_square.png")), 2, 3, - (2, 3), + ), + ( + 700, + 400, ), ], - ids=["(2, 3)"], + ids=["(2, 3)", "(700, 400)"], ) def test_should_return_resized_image( self, - image: Image, + resource_path: str, new_width: int, new_height: int, - new_size: tuple[int, int], + snapshot_png: SnapshotAssertion, + device: Device, ) -> None: - assert image.resize(new_width, new_height)._image.size == new_size + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + new_image = image.resize(new_width, new_height) + assert new_image.width == new_width + assert new_image.height == new_height + assert image.width != new_width + assert image.height != new_height + assert image != new_image + assert new_image == snapshot_png -class TestConvertToGrayscale: +class TestDevices: @pytest.mark.parametrize( "resource_path", - ["image/plane.png"], - ids=["plane"], + _test_images_all(), + ids=_test_images_all_ids(), ) - def test_convert_to_grayscale(self, resource_path: str, snapshot_png: SnapshotAssertion) -> None: - image = Image.from_png_file(resolve_resource_path(resource_path)) - assert image.convert_to_grayscale() == snapshot_png + def test_should_change_device(self, resource_path: str) -> None: + _skip_if_device_not_available(_device_cuda) + image = Image.from_file(resolve_resource_path(resource_path), torch.device("cpu")) + new_device = torch.device("cuda", 0) + assert image._set_device(new_device).device == new_device -class TestEquals: - def test_should_be_equal(self) -> None: - image = Image.from_png_file(resolve_resource_path("image/white_square.png")) - image2 = Image.from_png_file(resolve_resource_path("image/white_square.png")) - assert image == image2 +@pytest.mark.parametrize("device", _test_devices(), ids=_test_devices_ids()) +class TestConvertToGrayscale: + @pytest.mark.parametrize( + "resource_path", + _test_images_all(), + ids=_test_images_all_ids(), + ) + def test_convert_to_grayscale(self, resource_path: str, snapshot_png: SnapshotAssertion, device: Device) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + grayscale_image = image.convert_to_grayscale() + assert grayscale_image == snapshot_png - def test_should_not_be_equal(self) -> None: - image = Image.from_png_file(resolve_resource_path("image/white_square.png")) - image2 = Image.from_png_file(resolve_resource_path("image/plane.png")) - assert image != image2 - def test_should_raise(self) -> None: - image = Image.from_png_file(resolve_resource_path("image/white_square.png")) - other = Table() - assert (image.__eq__(other)) is NotImplemented +@pytest.mark.parametrize("device", _test_devices(), ids=_test_devices_ids()) +class TestCrop: + @pytest.mark.parametrize( + "resource_path", + _test_images_all(), + ids=_test_images_all_ids(), + ) + def test_should_return_cropped_image( + self, + resource_path: str, + snapshot_png: SnapshotAssertion, + device: Device, + ) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + image = image.crop(0, 0, 100, 100) + assert image == snapshot_png +@pytest.mark.parametrize("device", _test_devices(), ids=_test_devices_ids()) class TestFlipVertically: @pytest.mark.parametrize( "resource_path", - ["image/plane.png"], - ids=["plane"], + _test_images_asymmetric(), + ids=_test_images_asymmetric_ids(), ) - def test_should_flip_vertically(self, resource_path: str, snapshot_png: SnapshotAssertion) -> None: - image = Image.from_png_file(resolve_resource_path(resource_path)) - assert image.flip_vertically() == snapshot_png + def test_should_flip_vertically(self, resource_path: str, snapshot_png: SnapshotAssertion, device: Device) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + image_flip_v = image.flip_vertically() + assert image != image_flip_v + assert image_flip_v == snapshot_png - def test_should_be_original_if_flipped_twice(self) -> None: - original = Image.from_png_file(resolve_resource_path("image/plane.png")) - flipped_twice = original.flip_vertically().flip_vertically() - assert original == flipped_twice + @pytest.mark.parametrize( + "resource_path", + _test_images_all(), + ids=_test_images_all_ids(), + ) + def test_should_be_original(self, resource_path: str, device: Device) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + image_flip_v_v = image.flip_vertically().flip_vertically() + assert image == image_flip_v_v +@pytest.mark.parametrize("device", _test_devices(), ids=_test_devices_ids()) class TestFlipHorizontally: @pytest.mark.parametrize( "resource_path", - ["image/plane.png"], - ids=["plane"], + _test_images_asymmetric(), + ids=_test_images_asymmetric_ids(), ) - def test_should_flip_horizontally(self, resource_path: str, snapshot_png: SnapshotAssertion) -> None: - image = Image.from_png_file(resolve_resource_path(resource_path)) - assert image.flip_horizontally() == snapshot_png - - def test_should_be_original_if_flipped_twice(self) -> None: - original = Image.from_png_file(resolve_resource_path("image/plane.png")) - flipped_twice = original.flip_horizontally().flip_horizontally() - assert original == flipped_twice - + def test_should_flip_horizontally( + self, + resource_path: str, + snapshot_png: SnapshotAssertion, + device: Device, + ) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + image_flip_h = image.flip_horizontally() + assert image != image_flip_h + assert image_flip_h == snapshot_png -class TestAdjustContrast: @pytest.mark.parametrize( - ("resource_path", "factor"), - [ - ("image/plane.png", 0.75), - ("image/plane.png", 5), - ], - ids=["small factor", "large factor"], + "resource_path", + _test_images_all(), + ids=_test_images_all_ids(), ) - def test_should_adjust_contrast(self, resource_path: str, factor: float, snapshot_png: SnapshotAssertion) -> None: - image = Image.from_png_file(resolve_resource_path(resource_path)) - assert image.adjust_contrast(factor) == snapshot_png + def test_should_be_original(self, resource_path: str, device: Device) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + image_flip_h_h = image.flip_horizontally().flip_horizontally() + assert image == image_flip_h_h - def test_should_not_adjust_contrast(self) -> None: - original = Image.from_png_file(resolve_resource_path("image/plane.png")) - with pytest.warns( - UserWarning, - match="Contrast adjustment factor is 1.0, this will not make changes to the image.", - ): - adjusted = original.adjust_contrast(1) - assert original == adjusted - def test_should_raise(self) -> None: - image = Image.from_png_file(resolve_resource_path("image/plane.png")) - with pytest.raises(OutOfBoundsError, match=r"factor \(=-1\) is not inside \[0, \u221e\)."): - image.adjust_contrast(-1) - - -class TestAdjustBrightness: +@pytest.mark.parametrize("device", _test_devices(), ids=_test_devices_ids()) +class TestBrightness: + @pytest.mark.parametrize("factor", [0.5, 10], ids=["small factor", "large factor"]) @pytest.mark.parametrize( - ("resource_path", "factor"), - [ - ("image/plane.png", 0.5), - ("image/plane.png", 10), - ], - ids=["small factor", "large factor"], + "resource_path", + [_plane_jpg_path, _plane_png_path], + ids=[_plane_jpg_id, _plane_png_id], ) - def test_should_adjust_brightness(self, resource_path: str, factor: float, snapshot_png: SnapshotAssertion) -> None: - image = Image.from_png_file(resolve_resource_path(resource_path)) - assert image.adjust_brightness(factor) == snapshot_png + def test_should_adjust_brightness( + self, + factor: float, + resource_path: str, + snapshot_png: SnapshotAssertion, + device: Device, + ) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + image_adjusted_brightness = image.adjust_brightness(factor) + assert image != image_adjusted_brightness + assert image_adjusted_brightness == snapshot_png - def test_should_not_brighten(self) -> None: - image = Image.from_png_file(resolve_resource_path("image/plane.png")) + @pytest.mark.parametrize( + "resource_path", + _test_images_all(), + ids=_test_images_all_ids(), + ) + def test_should_not_brighten(self, resource_path: str, device: Device) -> None: + _skip_if_device_not_available(device) with pytest.warns( UserWarning, match="Brightness adjustment factor is 1.0, this will not make changes to the image.", ): + image = Image.from_file(resolve_resource_path(resource_path), device) image2 = image.adjust_brightness(1) - assert image == image2 - - def test_should_raise(self) -> None: - image = Image.from_png_file(resolve_resource_path("image/plane.png")) - with pytest.raises(OutOfBoundsError, match=r"factor \(=-1\) is not inside \[0, \u221e\)."): - image.adjust_brightness(-1) + assert image == image2 - -class TestInvertColors: @pytest.mark.parametrize( "resource_path", - ["image/plane.png"], - ids=["invert-colors"], + _test_images_all(), + ids=_test_images_all_ids(), ) - def test_should_invert_colors(self, resource_path: str, snapshot_png: SnapshotAssertion) -> None: - image = Image.from_png_file(resolve_resource_path(resource_path)) - assert image.invert_colors() == snapshot_png + def test_should_raise(self, resource_path: str, device: Device) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + with pytest.raises(OutOfBoundsError, match=r"factor \(=-1\) is not inside \[0, \u221e\)."): + image.adjust_brightness(-1) -class TestColorAdjust: +@pytest.mark.parametrize("device", _test_devices(), ids=_test_devices_ids()) +class TestAddNoise: @pytest.mark.parametrize( - ("resource_path", "factor"), + "standard_deviation", [ - ("image/plane.png", 2), - ("image/plane.png", 0.5), - ("image/plane.png", 0), + 0.0, + 0.7, + 2.5, ], - ids=["add color", "remove color", "remove all color"], + ids=["minimum noise", "some noise", "very noisy"], ) - def test_should_adjust_colors(self, resource_path: str, factor: float, snapshot_png: SnapshotAssertion) -> None: - image = Image.from_png_file(resolve_resource_path(resource_path)) - assert image.adjust_color_balance(factor) == snapshot_png - @pytest.mark.parametrize( - ("resource_path", "factor"), - [ - ("image/plane.png", -1), - ], - ids=["negative"], + "resource_path", + _test_images_all(), + ids=_test_images_all_ids(), ) - def test_should_throw(self, resource_path: str, factor: float) -> None: - image = Image.from_png_file(resolve_resource_path(resource_path)) - with pytest.raises(OutOfBoundsError, match=rf"factor \(={factor}\) is not inside \[0, \u221e\)."): - image.adjust_color_balance(factor) + def test_should_add_noise( + self, + resource_path: str, + standard_deviation: float, + snapshot_png: SnapshotAssertion, + device: Device, + ) -> None: + _skip_if_device_not_available(device) + torch.manual_seed(0) + image = Image.from_file(resolve_resource_path(resource_path), device) + image_noise = image.add_noise(standard_deviation) + assert image_noise == snapshot_png @pytest.mark.parametrize( - ("resource_path", "factor"), - [ - ("image/plane.png", 1), - ], - ids=["no change"], + "standard_deviation", + [-1], + ids=["sigma below zero"], ) - def test_should_warn(self, resource_path: str, factor: float) -> None: - original = Image.from_png_file(resolve_resource_path(resource_path)) - with pytest.warns( - UserWarning, - match="Color adjustment factor is 1.0, this will not make changes to the image.", + @pytest.mark.parametrize( + "resource_path", + _test_images_all(), + ids=_test_images_all_ids(), + ) + def test_should_raise_standard_deviation( + self, + resource_path: str, + standard_deviation: float, + device: Device, + ) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + with pytest.raises( + OutOfBoundsError, + match=rf"standard_deviation \(={standard_deviation}\) is not inside \[0, \u221e\)\.", ): - adjusted = original.adjust_color_balance(factor) - assert adjusted == original + image.add_noise(standard_deviation) -class TestAddGaussianNoise: +@pytest.mark.parametrize("device", _test_devices(), ids=_test_devices_ids()) +class TestAdjustContrast: + @pytest.mark.parametrize("factor", [0.75, 5], ids=["small factor", "large factor"]) @pytest.mark.parametrize( - ("resource_path", "standard_deviation"), - [ - ("image/plane.png", 0.0), - ("image/plane.png", 0.7), - ("image/plane.png", 2.5), - ], - ids=["minimum noise", "some noise", "very noisy"], + "resource_path", + [_plane_jpg_path, _plane_png_path], + ids=[_plane_jpg_id, _plane_png_id], ) - def test_should_add_noise( + def test_should_adjust_contrast( self, + factor: float, resource_path: str, - standard_deviation: float, snapshot_png: SnapshotAssertion, + device: Device, ) -> None: - image = Image.from_png_file(resolve_resource_path(resource_path)) - assert image.add_gaussian_noise(standard_deviation) == snapshot_png + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + image_adjusted_contrast = image.adjust_contrast(factor) + assert image != image_adjusted_contrast + assert image_adjusted_contrast == snapshot_png @pytest.mark.parametrize( - ("resource_path", "standard_deviation"), - [("image/plane.png", -1)], - ids=["sigma below zero"], + "resource_path", + _test_images_all(), + ids=_test_images_all_ids(), ) - def test_should_raise_standard_deviation(self, resource_path: str, standard_deviation: float) -> None: - image = Image.from_png_file(resolve_resource_path(resource_path)) - - with pytest.raises( - OutOfBoundsError, - match=rf"standard_deviation \(={standard_deviation}\) is not inside \[0, \u221e\)\.", + def test_should_not_adjust_contrast(self, resource_path: str, device: Device) -> None: + _skip_if_device_not_available(device) + with pytest.warns( + UserWarning, + match="Contrast adjustment factor is 1.0, this will not make changes to the image.", ): - image.add_gaussian_noise(standard_deviation) + image = Image.from_file(resolve_resource_path(resource_path), device) + image_adjusted_contrast = image.adjust_contrast(1) + assert image == image_adjusted_contrast + @pytest.mark.parametrize( + "resource_path", + _test_images_all(), + ids=_test_images_all_ids(), + ) + def test_should_raise_negative_contrast(self, resource_path: str, device: Device) -> None: + _skip_if_device_not_available(device) + with pytest.raises(OutOfBoundsError, match=r"factor \(=-1.0\) is not inside \[0, \u221e\)."): + Image.from_file(resolve_resource_path(resource_path), device).adjust_contrast(-1.0) + +@pytest.mark.parametrize("device", _test_devices(), ids=_test_devices_ids()) class TestBlur: @pytest.mark.parametrize( "resource_path", - ["image/plane.png"], - ids=["blur"], + _test_images_asymmetric(), + ids=_test_images_asymmetric_ids(), ) - def test_should_return_blurred_image(self, resource_path: str, snapshot_png: SnapshotAssertion) -> None: - image = Image.from_png_file(resolve_resource_path(resource_path)) - assert image.blur(2) == snapshot_png + def test_should_return_blurred_image( + self, + resource_path: str, + snapshot_png: SnapshotAssertion, + device: Device, + ) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device=device) + image_blurred = image.blur(2) + assert image_blurred == snapshot_png -class TestCrop: +@pytest.mark.parametrize("device", _test_devices(), ids=_test_devices_ids()) +class TestSharpen: + @pytest.mark.parametrize("factor", [0, 0.5, 10], ids=["zero factor", "small factor", "large factor"]) @pytest.mark.parametrize( "resource_path", - ["image/plane.png"], - ids=["crop"], + [_plane_jpg_path, _plane_png_path], + ids=[_plane_jpg_id, _plane_png_id], ) - def test_should_return_cropped_image(self, resource_path: str, snapshot_png: SnapshotAssertion) -> None: - image = Image.from_png_file(resolve_resource_path(resource_path)) - assert image.crop(0, 0, 100, 100) == snapshot_png + def test_should_sharpen( + self, + factor: float, + resource_path: str, + snapshot_png: SnapshotAssertion, + device: Device, + ) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + image_sharpened = image.sharpen(factor) + assert image != image_sharpened + assert image_sharpened == snapshot_png + @pytest.mark.parametrize( + "resource_path", + _test_images_all(), + ids=_test_images_all_ids(), + ) + def test_should_raise_negative_sharpen(self, resource_path: str, device: Device) -> None: + _skip_if_device_not_available(device) + with pytest.raises(OutOfBoundsError, match=r"factor \(=-1.0\) is not inside \[0, \u221e\)."): + Image.from_file(resolve_resource_path(resource_path), device).sharpen(-1.0) -class TestSharpen: @pytest.mark.parametrize( - ("resource_path", "factor"), - [ - ("image/plane.png", -1), - ("image/plane.png", 0.5), - ("image/plane.png", 10), - ], - ids=["negative factor", "small factor", "large factor"], + "resource_path", + _test_images_all(), + ids=_test_images_all_ids(), ) - def test_should_sharpen(self, resource_path: str, factor: float, snapshot_png: SnapshotAssertion) -> None: - image = Image.from_png_file(resolve_resource_path(resource_path)) - assert image.sharpen(factor) == snapshot_png + def test_should_not_sharpen(self, resource_path: str, device: Device) -> None: + _skip_if_device_not_available(device) + with pytest.warns(UserWarning, match="Sharpen factor is 1.0, this will not make changes to the image."): + image = Image.from_file(resolve_resource_path(resource_path), device) + image_sharpened = image.sharpen(1) + assert image == image_sharpened - def test_should_not_sharpen_if_factor_is_1(self) -> None: - image = Image.from_png_file(resolve_resource_path("image/plane.png")) - image2 = image.sharpen(1) - assert image == image2 + +@pytest.mark.parametrize("device", _test_devices(), ids=_test_devices_ids()) +class TestInvertColors: + @pytest.mark.parametrize( + "resource_path", + _test_images_all(), + ids=_test_images_all_ids(), + ) + def test_should_invert_colors(self, resource_path: str, snapshot_png: SnapshotAssertion, device: Device) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + image_inverted_colors = image.invert_colors() + assert image_inverted_colors == snapshot_png +@pytest.mark.parametrize("device", _test_devices(), ids=_test_devices_ids()) class TestRotate: @pytest.mark.parametrize( "resource_path", - ["image/plane.png"], - ids=["rotate-clockwise"], + _test_images_all(), + ids=_test_images_all_ids(), ) - def test_should_return_clockwise_rotated_image(self, resource_path: str, snapshot_png: SnapshotAssertion) -> None: - image = Image.from_png_file(resolve_resource_path(resource_path)) - assert image.rotate_right() == snapshot_png + def test_should_return_clockwise_rotated_image( + self, + resource_path: str, + snapshot_png: SnapshotAssertion, + device: Device, + ) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + image_right_rotated = image.rotate_right() + assert image_right_rotated == snapshot_png @pytest.mark.parametrize( "resource_path", - ["image/plane.png"], - ids=["rotate-counter-clockwise"], + _test_images_all(), + ids=_test_images_all_ids(), ) def test_should_return_counter_clockwise_rotated_image( self, resource_path: str, snapshot_png: SnapshotAssertion, + device: Device, ) -> None: - image = Image.from_png_file(resolve_resource_path(resource_path)) - assert image.rotate_left() == snapshot_png - + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + image_left_rotated = image.rotate_left() + assert image_left_rotated == snapshot_png -class TestFindEdges: @pytest.mark.parametrize( "resource_path", - ["image/plane.png"], - ids=["find_edges"], + _test_images_all(), + ids=_test_images_all_ids(), ) - def test_should_return_edges_of_image(self, resource_path: str, snapshot_png: SnapshotAssertion) -> None: - image = Image.from_png_file(resolve_resource_path(resource_path)) - assert image.find_edges() == snapshot_png + def test_should_return_flipped_image(self, resource_path: str, device: Device) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + image_left_rotated = image.rotate_left().rotate_left() + image_right_rotated = image.rotate_right().rotate_right() + image_flipped_h_v = image.flip_horizontally().flip_vertically() + image_flipped_v_h = image.flip_horizontally().flip_vertically() + assert image_left_rotated == image_right_rotated + assert image_left_rotated == image_flipped_h_v + assert image_left_rotated == image_flipped_v_h + + @pytest.mark.parametrize( + "resource_path", + _test_images_all(), + ids=_test_images_all_ids(), + ) + def test_should_be_original(self, resource_path: str, device: Device) -> None: + _skip_if_device_not_available(device) + image = Image.from_file(resolve_resource_path(resource_path), device) + image_left_right_rotated = image.rotate_left().rotate_right() + image_right_left_rotated = image.rotate_right().rotate_left() + image_left_l_l_l_l = image.rotate_left().rotate_left().rotate_left().rotate_left() + image_left_r_r_r_r = image.rotate_right().rotate_right().rotate_right().rotate_right() + assert image == image_left_right_rotated + assert image == image_right_left_rotated + assert image == image_left_l_l_l_l + assert image == image_left_r_r_r_r diff --git a/tests/safeds/data/image/typing/test_image_format.py b/tests/safeds/data/image/typing/test_image_format.py deleted file mode 100644 index 50756746b..000000000 --- a/tests/safeds/data/image/typing/test_image_format.py +++ /dev/null @@ -1,14 +0,0 @@ -import pytest -from safeds.data.image.typing import ImageFormat - - -class TestValue: - @pytest.mark.parametrize( - ("image_format", "expected_value"), - [ - (ImageFormat.JPEG, "jpeg"), - (ImageFormat.PNG, "png"), - ], - ) - def test_should_return_correct_value(self, image_format: ImageFormat, expected_value: str) -> None: - assert image_format.value == expected_value