diff --git a/conftest.py b/conftest.py index 38d1c181..786f970e 100644 --- a/conftest.py +++ b/conftest.py @@ -1 +1,17 @@ -# empty file so that pyetst adds top-level directory +from typing import Generator + +import numpy as np +import pytest + + +@pytest.fixture(scope="module") +def rng() -> Generator[np.random.Generator, None, None]: + """ + Create a new Random Number Generator for tests which require randomized data. + + Yields: + Generator[np.random.Generator, None, None]: The generator used for creating randomized + numbers. + """ + rng: np.random.Generator = np.random.default_rng(12345) + yield rng diff --git a/poetry.lock b/poetry.lock index 8c8d6807..8829ecc0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. [[package]] name = "aiofiles" version = "22.1.0" description = "File support for asyncio." -category = "dev" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -16,7 +15,6 @@ files = [ name = "aiosqlite" version = "0.19.0" description = "asyncio bridge to the standard sqlite3 module" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -30,53 +28,51 @@ docs = ["sphinx (==6.1.3)", "sphinx-mdinclude (==0.5.3)"] [[package]] name = "alpineer" -version = "0.1.7" +version = "0.1.9" description = "Toolbox for Multiplexed Imaging. Contains scripts and little tools which are used throughout ark-analysis, mibi-bin-tools, and toffy." -category = "main" optional = false python-versions = ">=3.9,<4.0" files = [ - {file = "alpineer-0.1.7-py3-none-any.whl", hash = "sha256:e266e28505501117a470442f5cd9ece0d68e1b05cdab1a4ff642e98664afc69b"}, - {file = "alpineer-0.1.7.tar.gz", hash = "sha256:8daec081c956d929f4e0d05874cf65b49e57d748070a214a063a0e901c079ed1"}, + {file = "alpineer-0.1.9-py3-none-any.whl", hash = "sha256:915447d097a332dfb30fa3c6a9eb08ebcaeb75094934e856750ca0f7869d1555"}, + {file = "alpineer-0.1.9.tar.gz", hash = "sha256:d1613f7ae2d993d13f8b46261c86e4904033ea2fadcb9a7051110a4157da7f8e"}, ] [package.dependencies] charset-normalizer = ">=2.1.1,<3.0.0" matplotlib = ">=3,<4" natsort = ">=8,<9" -numpy = ">=1.0.0,<2.0.0" +numpy = "==1.*" pillow = ">=9,<10" -scikit-image = "<1.0.0" +scikit-image = "==0.*" tifffile = "*" xarray = "*" xmltodict = ">=0.13.0,<0.14.0" [[package]] name = "anyio" -version = "3.6.2" +version = "3.7.1" description = "High level compatibility layer for multiple asynchronous event loop implementations" -category = "dev" optional = false -python-versions = ">=3.6.2" +python-versions = ">=3.7" files = [ - {file = "anyio-3.6.2-py3-none-any.whl", hash = "sha256:fbbe32bd270d2a2ef3ed1c5d45041250284e31fc0a4df4a5a6071842051a51e3"}, - {file = "anyio-3.6.2.tar.gz", hash = "sha256:25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421"}, + {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, + {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, ] [package.dependencies] +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} idna = ">=2.8" sniffio = ">=1.1" [package.extras] -doc = ["packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["contextlib2", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (<0.15)", "uvloop (>=0.15)"] -trio = ["trio (>=0.16,<0.22)"] +doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"] +test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (<0.22)"] [[package]] name = "appnope" version = "0.1.3" description = "Disable App Nap on macOS >= 10.9" -category = "main" optional = false python-versions = "*" files = [ @@ -88,7 +84,6 @@ files = [ name = "argon2-cffi" version = "21.3.0" description = "The secure Argon2 password hashing algorithm." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -108,7 +103,6 @@ tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] name = "argon2-cffi-bindings" version = "21.2.0" description = "Low-level CFFI bindings for Argon2" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -146,7 +140,6 @@ tests = ["pytest"] name = "arrow" version = "1.2.3" description = "Better dates & times for Python" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -161,7 +154,6 @@ python-dateutil = ">=2.7.0" name = "asttokens" version = "2.2.1" description = "Annotate AST trees with source code positions" -category = "main" optional = false python-versions = "*" files = [ @@ -179,7 +171,6 @@ test = ["astroid", "pytest"] name = "attrs" version = "23.1.0" description = "Classes Without Boilerplate" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -198,7 +189,6 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte name = "babel" version = "2.12.1" description = "Internationalization utilities" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -210,7 +200,6 @@ files = [ name = "backcall" version = "0.2.0" description = "Specifications for callback functions passed in to an API" -category = "main" optional = false python-versions = "*" files = [ @@ -222,7 +211,6 @@ files = [ name = "beautifulsoup4" version = "4.12.2" description = "Screen-scraping library" -category = "dev" optional = false python-versions = ">=3.6.0" files = [ @@ -241,7 +229,6 @@ lxml = ["lxml"] name = "black" version = "22.12.0" description = "The uncompromising code formatter." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -277,7 +264,6 @@ uvloop = ["uvloop (>=0.15.2)"] name = "bleach" version = "6.0.0" description = "An easy safelist-based HTML-sanitizing tool." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -296,7 +282,6 @@ css = ["tinycss2 (>=1.1.0,<1.2)"] name = "certifi" version = "2023.5.7" description = "Python package for providing Mozilla's CA Bundle." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -308,7 +293,6 @@ files = [ name = "cffi" version = "1.15.1" description = "Foreign Function Interface for Python calling C code." -category = "main" optional = false python-versions = "*" files = [ @@ -385,7 +369,6 @@ pycparser = "*" name = "charset-normalizer" version = "2.1.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = false python-versions = ">=3.6.0" files = [ @@ -400,7 +383,6 @@ unicode-backport = ["unicodedata2"] name = "click" version = "8.1.3" description = "Composable command line interface toolkit" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -415,7 +397,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -427,7 +408,6 @@ files = [ name = "comm" version = "0.1.3" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -445,84 +425,66 @@ typing = ["mypy (>=0.990)"] [[package]] name = "contourpy" -version = "1.0.7" +version = "1.1.0" description = "Python library for calculating contours of 2D quadrilateral grids" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "contourpy-1.0.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:95c3acddf921944f241b6773b767f1cbce71d03307270e2d769fd584d5d1092d"}, - {file = "contourpy-1.0.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc1464c97579da9f3ab16763c32e5c5d5bb5fa1ec7ce509a4ca6108b61b84fab"}, - {file = "contourpy-1.0.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8acf74b5d383414401926c1598ed77825cd530ac7b463ebc2e4f46638f56cce6"}, - {file = "contourpy-1.0.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c71fdd8f1c0f84ffd58fca37d00ca4ebaa9e502fb49825484da075ac0b0b803"}, - {file = "contourpy-1.0.7-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f99e9486bf1bb979d95d5cffed40689cb595abb2b841f2991fc894b3452290e8"}, - {file = "contourpy-1.0.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87f4d8941a9564cda3f7fa6a6cd9b32ec575830780677932abdec7bcb61717b0"}, - {file = "contourpy-1.0.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9e20e5a1908e18aaa60d9077a6d8753090e3f85ca25da6e25d30dc0a9e84c2c6"}, - {file = "contourpy-1.0.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a877ada905f7d69b2a31796c4b66e31a8068b37aa9b78832d41c82fc3e056ddd"}, - {file = "contourpy-1.0.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6381fa66866b0ea35e15d197fc06ac3840a9b2643a6475c8fff267db8b9f1e69"}, - {file = "contourpy-1.0.7-cp310-cp310-win32.whl", hash = "sha256:3c184ad2433635f216645fdf0493011a4667e8d46b34082f5a3de702b6ec42e3"}, - {file = "contourpy-1.0.7-cp310-cp310-win_amd64.whl", hash = "sha256:3caea6365b13119626ee996711ab63e0c9d7496f65641f4459c60a009a1f3e80"}, - {file = "contourpy-1.0.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ed33433fc3820263a6368e532f19ddb4c5990855e4886088ad84fd7c4e561c71"}, - {file = "contourpy-1.0.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:38e2e577f0f092b8e6774459317c05a69935a1755ecfb621c0a98f0e3c09c9a5"}, - {file = "contourpy-1.0.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ae90d5a8590e5310c32a7630b4b8618cef7563cebf649011da80874d0aa8f414"}, - {file = "contourpy-1.0.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:130230b7e49825c98edf0b428b7aa1125503d91732735ef897786fe5452b1ec2"}, - {file = "contourpy-1.0.7-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58569c491e7f7e874f11519ef46737cea1d6eda1b514e4eb5ac7dab6aa864d02"}, - {file = "contourpy-1.0.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54d43960d809c4c12508a60b66cb936e7ed57d51fb5e30b513934a4a23874fae"}, - {file = "contourpy-1.0.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:152fd8f730c31fd67fe0ffebe1df38ab6a669403da93df218801a893645c6ccc"}, - {file = "contourpy-1.0.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9056c5310eb1daa33fc234ef39ebfb8c8e2533f088bbf0bc7350f70a29bde1ac"}, - {file = "contourpy-1.0.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a9d7587d2fdc820cc9177139b56795c39fb8560f540bba9ceea215f1f66e1566"}, - {file = "contourpy-1.0.7-cp311-cp311-win32.whl", hash = "sha256:4ee3ee247f795a69e53cd91d927146fb16c4e803c7ac86c84104940c7d2cabf0"}, - {file = "contourpy-1.0.7-cp311-cp311-win_amd64.whl", hash = "sha256:5caeacc68642e5f19d707471890f037a13007feba8427eb7f2a60811a1fc1350"}, - {file = "contourpy-1.0.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd7dc0e6812b799a34f6d12fcb1000539098c249c8da54f3566c6a6461d0dbad"}, - {file = "contourpy-1.0.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0f9d350b639db6c2c233d92c7f213d94d2e444d8e8fc5ca44c9706cf72193772"}, - {file = "contourpy-1.0.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e96a08b62bb8de960d3a6afbc5ed8421bf1a2d9c85cc4ea73f4bc81b4910500f"}, - {file = "contourpy-1.0.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:031154ed61f7328ad7f97662e48660a150ef84ee1bc8876b6472af88bf5a9b98"}, - {file = "contourpy-1.0.7-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e9ebb4425fc1b658e13bace354c48a933b842d53c458f02c86f371cecbedecc"}, - {file = "contourpy-1.0.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efb8f6d08ca7998cf59eaf50c9d60717f29a1a0a09caa46460d33b2924839dbd"}, - {file = "contourpy-1.0.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6c180d89a28787e4b73b07e9b0e2dac7741261dbdca95f2b489c4f8f887dd810"}, - {file = "contourpy-1.0.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b8d587cc39057d0afd4166083d289bdeff221ac6d3ee5046aef2d480dc4b503c"}, - {file = "contourpy-1.0.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:769eef00437edf115e24d87f8926955f00f7704bede656ce605097584f9966dc"}, - {file = "contourpy-1.0.7-cp38-cp38-win32.whl", hash = "sha256:62398c80ef57589bdbe1eb8537127321c1abcfdf8c5f14f479dbbe27d0322e66"}, - {file = "contourpy-1.0.7-cp38-cp38-win_amd64.whl", hash = "sha256:57119b0116e3f408acbdccf9eb6ef19d7fe7baf0d1e9aaa5381489bc1aa56556"}, - {file = "contourpy-1.0.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:30676ca45084ee61e9c3da589042c24a57592e375d4b138bd84d8709893a1ba4"}, - {file = "contourpy-1.0.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3e927b3868bd1e12acee7cc8f3747d815b4ab3e445a28d2e5373a7f4a6e76ba1"}, - {file = "contourpy-1.0.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:366a0cf0fc079af5204801786ad7a1c007714ee3909e364dbac1729f5b0849e5"}, - {file = "contourpy-1.0.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89ba9bb365446a22411f0673abf6ee1fea3b2cf47b37533b970904880ceb72f3"}, - {file = "contourpy-1.0.7-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:71b0bf0c30d432278793d2141362ac853859e87de0a7dee24a1cea35231f0d50"}, - {file = "contourpy-1.0.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7281244c99fd7c6f27c1c6bfafba878517b0b62925a09b586d88ce750a016d2"}, - {file = "contourpy-1.0.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b6d0f9e1d39dbfb3977f9dd79f156c86eb03e57a7face96f199e02b18e58d32a"}, - {file = "contourpy-1.0.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7f6979d20ee5693a1057ab53e043adffa1e7418d734c1532e2d9e915b08d8ec2"}, - {file = "contourpy-1.0.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5dd34c1ae752515318224cba7fc62b53130c45ac6a1040c8b7c1a223c46e8967"}, - {file = "contourpy-1.0.7-cp39-cp39-win32.whl", hash = "sha256:c5210e5d5117e9aec8c47d9156d1d3835570dd909a899171b9535cb4a3f32693"}, - {file = "contourpy-1.0.7-cp39-cp39-win_amd64.whl", hash = "sha256:60835badb5ed5f4e194a6f21c09283dd6e007664a86101431bf870d9e86266c4"}, - {file = "contourpy-1.0.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ce41676b3d0dd16dbcfabcc1dc46090aaf4688fd6e819ef343dbda5a57ef0161"}, - {file = "contourpy-1.0.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a011cf354107b47c58ea932d13b04d93c6d1d69b8b6dce885e642531f847566"}, - {file = "contourpy-1.0.7-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:31a55dccc8426e71817e3fe09b37d6d48ae40aae4ecbc8c7ad59d6893569c436"}, - {file = "contourpy-1.0.7-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69f8ff4db108815addd900a74df665e135dbbd6547a8a69333a68e1f6e368ac2"}, - {file = "contourpy-1.0.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:efe99298ba37e37787f6a2ea868265465410822f7bea163edcc1bd3903354ea9"}, - {file = "contourpy-1.0.7-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a1e97b86f73715e8670ef45292d7cc033548266f07d54e2183ecb3c87598888f"}, - {file = "contourpy-1.0.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc331c13902d0f50845099434cd936d49d7a2ca76cb654b39691974cb1e4812d"}, - {file = "contourpy-1.0.7-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24847601071f740837aefb730e01bd169fbcaa610209779a78db7ebb6e6a7051"}, - {file = "contourpy-1.0.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abf298af1e7ad44eeb93501e40eb5a67abbf93b5d90e468d01fc0c4451971afa"}, - {file = "contourpy-1.0.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:64757f6460fc55d7e16ed4f1de193f362104285c667c112b50a804d482777edd"}, - {file = "contourpy-1.0.7.tar.gz", hash = "sha256:d8165a088d31798b59e91117d1f5fc3df8168d8b48c4acc10fc0df0d0bdbcc5e"}, + {file = "contourpy-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:89f06eff3ce2f4b3eb24c1055a26981bffe4e7264acd86f15b97e40530b794bc"}, + {file = "contourpy-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dffcc2ddec1782dd2f2ce1ef16f070861af4fb78c69862ce0aab801495dda6a3"}, + {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25ae46595e22f93592d39a7eac3d638cda552c3e1160255258b695f7b58e5655"}, + {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:17cfaf5ec9862bc93af1ec1f302457371c34e688fbd381f4035a06cd47324f48"}, + {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18a64814ae7bce73925131381603fff0116e2df25230dfc80d6d690aa6e20b37"}, + {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90c81f22b4f572f8a2110b0b741bb64e5a6427e0a198b2cdc1fbaf85f352a3aa"}, + {file = "contourpy-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:53cc3a40635abedbec7f1bde60f8c189c49e84ac180c665f2cd7c162cc454baa"}, + {file = "contourpy-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:1f795597073b09d631782e7245016a4323cf1cf0b4e06eef7ea6627e06a37ff2"}, + {file = "contourpy-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0b7b04ed0961647691cfe5d82115dd072af7ce8846d31a5fac6c142dcce8b882"}, + {file = "contourpy-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27bc79200c742f9746d7dd51a734ee326a292d77e7d94c8af6e08d1e6c15d545"}, + {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:052cc634bf903c604ef1a00a5aa093c54f81a2612faedaa43295809ffdde885e"}, + {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9382a1c0bc46230fb881c36229bfa23d8c303b889b788b939365578d762b5c18"}, + {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5cec36c5090e75a9ac9dbd0ff4a8cf7cecd60f1b6dc23a374c7d980a1cd710e"}, + {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f0cbd657e9bde94cd0e33aa7df94fb73c1ab7799378d3b3f902eb8eb2e04a3a"}, + {file = "contourpy-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:181cbace49874f4358e2929aaf7ba84006acb76694102e88dd15af861996c16e"}, + {file = "contourpy-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fb3b7d9e6243bfa1efb93ccfe64ec610d85cfe5aec2c25f97fbbd2e58b531256"}, + {file = "contourpy-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bcb41692aa09aeb19c7c213411854402f29f6613845ad2453d30bf421fe68fed"}, + {file = "contourpy-1.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5d123a5bc63cd34c27ff9c7ac1cd978909e9c71da12e05be0231c608048bb2ae"}, + {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62013a2cf68abc80dadfd2307299bfa8f5aa0dcaec5b2954caeb5fa094171103"}, + {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b6616375d7de55797d7a66ee7d087efe27f03d336c27cf1f32c02b8c1a5ac70"}, + {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:317267d915490d1e84577924bd61ba71bf8681a30e0d6c545f577363157e5e94"}, + {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d551f3a442655f3dcc1285723f9acd646ca5858834efeab4598d706206b09c9f"}, + {file = "contourpy-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e7a117ce7df5a938fe035cad481b0189049e8d92433b4b33aa7fc609344aafa1"}, + {file = "contourpy-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:d4f26b25b4f86087e7d75e63212756c38546e70f2a92d2be44f80114826e1cd4"}, + {file = "contourpy-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc00bb4225d57bff7ebb634646c0ee2a1298402ec10a5fe7af79df9a51c1bfd9"}, + {file = "contourpy-1.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:189ceb1525eb0655ab8487a9a9c41f42a73ba52d6789754788d1883fb06b2d8a"}, + {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f2931ed4741f98f74b410b16e5213f71dcccee67518970c42f64153ea9313b9"}, + {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30f511c05fab7f12e0b1b7730ebdc2ec8deedcfb505bc27eb570ff47c51a8f15"}, + {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:143dde50520a9f90e4a2703f367cf8ec96a73042b72e68fcd184e1279962eb6f"}, + {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e94bef2580e25b5fdb183bf98a2faa2adc5b638736b2c0a4da98691da641316a"}, + {file = "contourpy-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ed614aea8462735e7d70141374bd7650afd1c3f3cb0c2dbbcbe44e14331bf002"}, + {file = "contourpy-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:438ba416d02f82b692e371858143970ed2eb6337d9cdbbede0d8ad9f3d7dd17d"}, + {file = "contourpy-1.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a698c6a7a432789e587168573a864a7ea374c6be8d4f31f9d87c001d5a843493"}, + {file = "contourpy-1.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:397b0ac8a12880412da3551a8cb5a187d3298a72802b45a3bd1805e204ad8439"}, + {file = "contourpy-1.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:a67259c2b493b00e5a4d0f7bfae51fb4b3371395e47d079a4446e9b0f4d70e76"}, + {file = "contourpy-1.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2b836d22bd2c7bb2700348e4521b25e077255ebb6ab68e351ab5aa91ca27e027"}, + {file = "contourpy-1.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084eaa568400cfaf7179b847ac871582199b1b44d5699198e9602ecbbb5f6104"}, + {file = "contourpy-1.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:911ff4fd53e26b019f898f32db0d4956c9d227d51338fb3b03ec72ff0084ee5f"}, + {file = "contourpy-1.1.0.tar.gz", hash = "sha256:e53046c3863828d21d531cc3b53786e6580eb1ba02477e8681009b6aa0870b21"}, ] [package.dependencies] numpy = ">=1.16" [package.extras] -bokeh = ["bokeh", "chromedriver", "selenium"] +bokeh = ["bokeh", "selenium"] docs = ["furo", "sphinx-copybutton"] -mypy = ["contourpy[bokeh]", "docutils-stubs", "mypy (==0.991)", "types-Pillow"] -test = ["Pillow", "matplotlib", "pytest"] -test-no-images = ["pytest"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.2.0)", "types-Pillow"] +test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] +test-no-images = ["pytest", "pytest-cov", "wurlitzer"] [[package]] name = "coverage" version = "6.5.0" description = "Code coverage measurement for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -588,7 +550,6 @@ toml = ["tomli"] name = "coveralls" version = "3.3.1" description = "Show coverage stats online via coveralls.io" -category = "dev" optional = false python-versions = ">= 3.5" files = [ @@ -597,7 +558,7 @@ files = [ ] [package.dependencies] -coverage = ">=4.1,<6.0.0 || >6.1,<6.1.1 || >6.1.1,<7.0" +coverage = ">=4.1,<6.0.dev0 || >6.1,<6.1.1 || >6.1.1,<7.0" docopt = ">=0.6.1" requests = ">=1.0.0" @@ -608,7 +569,6 @@ yaml = ["PyYAML (>=3.10)"] name = "cycler" version = "0.11.0" description = "Composable style cycles" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -618,59 +578,19 @@ files = [ [[package]] name = "cython" -version = "0.29.34" +version = "0.29.36" description = "The Cython compiler for writing C extensions for the Python language." -category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ - {file = "Cython-0.29.34-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:742544024ddb74314e2d597accdb747ed76bd126e61fcf49940a5b5be0a8f381"}, - {file = "Cython-0.29.34-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:03daae07f8cbf797506446adae512c3dd86e7f27a62a541fa1ee254baf43e32c"}, - {file = "Cython-0.29.34-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5a8de3e793a576e40ca9b4f5518610cd416273c7dc5e254115656b6e4ec70663"}, - {file = "Cython-0.29.34-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:60969d38e6a456a67e7ef8ae20668eff54e32ba439d4068ccf2854a44275a30f"}, - {file = "Cython-0.29.34-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:21b88200620d80cfe193d199b259cdad2b9af56f916f0f7f474b5a3631ca0caa"}, - {file = "Cython-0.29.34-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:308c8f1e58bf5e6e8a1c4dcf8abbd2d13d0f9b1e582f4d9ae8b89857342d8bb5"}, - {file = "Cython-0.29.34-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:d8f822fb6ecd5d88c42136561f82960612421154fc5bf23c57103a367bb91356"}, - {file = "Cython-0.29.34-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56866323f1660cecb4d5ff3a1fba92a56b91b7cfae0a8253777aa4bdb3bdf9a8"}, - {file = "Cython-0.29.34-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:e971db8aeb12e7c0697cefafe65eefcc33ff1224ae3d8c7f83346cbc42c6c270"}, - {file = "Cython-0.29.34-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e4401270b0dc464c23671e2e9d52a60985f988318febaf51b047190e855bbe7d"}, - {file = "Cython-0.29.34-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:dce0a36d163c05ae8b21200059511217d79b47baf2b7b0f926e8367bd7a3cc24"}, - {file = "Cython-0.29.34-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dbd79221869ee9a6ccc4953b2c8838bb6ae08ab4d50ea4b60d7894f03739417b"}, - {file = "Cython-0.29.34-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a0f4229df10bc4545ebbeaaf96ebb706011d8b333e54ed202beb03f2bee0a50e"}, - {file = "Cython-0.29.34-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fd1ea21f1cebf33ae288caa0f3e9b5563a709f4df8925d53bad99be693fc0d9b"}, - {file = "Cython-0.29.34-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:d7ef5f68f4c5baa93349ea54a352f8716d18bee9a37f3e93eff38a5d4e9b7262"}, - {file = "Cython-0.29.34-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:459994d1de0f99bb18fad9f2325f760c4b392b1324aef37bcc1cd94922dfce41"}, - {file = "Cython-0.29.34-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:1d6c809e2f9ce5950bbc52a1d2352ef3d4fc56186b64cb0d50c8c5a3c1d17661"}, - {file = "Cython-0.29.34-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f674ceb5f722d364395f180fbac273072fc1a266aab924acc9cfd5afc645aae1"}, - {file = "Cython-0.29.34-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9489de5b2044dcdfd9d6ca8242a02d560137b3c41b1f5ae1c4f6707d66d6e44d"}, - {file = "Cython-0.29.34-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:5c121dc185040f4333bfded68963b4529698e1b6d994da56be32c97a90c896b6"}, - {file = "Cython-0.29.34-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:b6149f7cc5b31bccb158c5b968e5a8d374fdc629792e7b928a9b66e08b03fca5"}, - {file = "Cython-0.29.34-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0ab3cbf3d62b0354631a45dc93cfcdf79098663b1c65a6033af4a452b52217a7"}, - {file = "Cython-0.29.34-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:4a2723447d1334484681d5aede34184f2da66317891f94b80e693a2f96a8f1a7"}, - {file = "Cython-0.29.34-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e40cf86aadc29ecd1cb6de67b0d9488705865deea4fc185c7ad56d7a6fc78703"}, - {file = "Cython-0.29.34-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:8c3cd8bb8e880a3346f5685601004d96e0a2221e73edcaeea57ea848618b4ac6"}, - {file = "Cython-0.29.34-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0e9032cd650b0cb1d2c2ef2623f5714c14d14c28d7647d589c3eeed0baf7428e"}, - {file = "Cython-0.29.34-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:bdb3285660e3068438791ace7dd7b1efd6b442a10b5c8d7a4f0c9d184d08c8ed"}, - {file = "Cython-0.29.34-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a8ad755f9364e720f10a36734a1c7a5ced5c679446718b589259261438a517c9"}, - {file = "Cython-0.29.34-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:7595d29eaee95633dd8060f50f0e54b27472d01587659557ebcfe39da3ea946b"}, - {file = "Cython-0.29.34-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e6ef7879668214d80ea3914c17e7d4e1ebf4242e0dd4dabe95ca5ccbe75589a5"}, - {file = "Cython-0.29.34-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ccb223b5f0fd95d8d27561efc0c14502c0945f1a32274835831efa5d5baddfc1"}, - {file = "Cython-0.29.34-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:11b1b278b8edef215caaa5250ad65a10023bfa0b5a93c776552248fc6f60098d"}, - {file = "Cython-0.29.34-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:5718319a01489688fdd22ddebb8e2fcbbd60be5f30de4336ea7063c3ae29fbe5"}, - {file = "Cython-0.29.34-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:cfb2302ef617d647ee590a4c0a00ba3c2da05f301dcefe7721125565d2e51351"}, - {file = "Cython-0.29.34-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:67b850cf46b861bc27226d31e1d87c0e69869a02f8d3cc5d5bef549764029879"}, - {file = "Cython-0.29.34-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0963266dad685812c1dbb758fcd4de78290e3adc7db271c8664dcde27380b13e"}, - {file = "Cython-0.29.34-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7879992487d9060a61393eeefe00d299210256928dce44d887b6be313d342bac"}, - {file = "Cython-0.29.34-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:44733366f1604b0c327613b6918469284878d2f5084297d10d26072fc6948d51"}, - {file = "Cython-0.29.34-py2.py3-none-any.whl", hash = "sha256:be4f6b7be75a201c290c8611c0978549c60353890204573078e865423dbe3c83"}, - {file = "Cython-0.29.34.tar.gz", hash = "sha256:1909688f5d7b521a60c396d20bba9e47a1b2d2784bfb085401e1e1e7d29a29a8"}, + {file = "Cython-0.29.36-py2.py3-none-any.whl", hash = "sha256:95bb13d8be507425d03ebe051f90d4b2a9fdccc64e4f30b35645fdb7542742eb"}, + {file = "Cython-0.29.36.tar.gz", hash = "sha256:41c0cfd2d754e383c9eeb95effc9aa4ab847d0c9747077ddd7c0dcb68c3bc01f"}, ] [[package]] name = "debugpy" version = "1.6.7" description = "An implementation of the Debug Adapter Protocol for Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -698,7 +618,6 @@ files = [ name = "decopatch" version = "1.4.10" description = "Create decorators easily in python." -category = "dev" optional = false python-versions = "*" files = [ @@ -713,7 +632,6 @@ makefun = ">=1.5.0" name = "decorator" version = "5.1.1" description = "Decorators for Humans" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -725,7 +643,6 @@ files = [ name = "defusedxml" version = "0.7.1" description = "XML bomb protection for Python stdlib modules" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -737,7 +654,6 @@ files = [ name = "docopt" version = "0.6.2" description = "Pythonic argument parser, that will make you smile" -category = "dev" optional = false python-versions = "*" files = [ @@ -746,14 +662,13 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.1.1" +version = "1.1.2" description = "Backport of PEP 654 (exception groups)" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.1-py3-none-any.whl", hash = "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e"}, - {file = "exceptiongroup-1.1.1.tar.gz", hash = "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785"}, + {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, + {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, ] [package.extras] @@ -763,7 +678,6 @@ test = ["pytest (>=6)"] name = "executing" version = "1.2.0" description = "Get the currently executing AST node of a frame, and other information" -category = "main" optional = false python-versions = "*" files = [ @@ -776,14 +690,13 @@ tests = ["asttokens", "littleutils", "pytest", "rich"] [[package]] name = "fastjsonschema" -version = "2.16.3" +version = "2.17.1" description = "Fastest Python implementation of JSON schema" -category = "dev" optional = false python-versions = "*" files = [ - {file = "fastjsonschema-2.16.3-py3-none-any.whl", hash = "sha256:04fbecc94300436f628517b05741b7ea009506ce8f946d40996567c669318490"}, - {file = "fastjsonschema-2.16.3.tar.gz", hash = "sha256:4a30d6315a68c253cfa8f963b9697246315aa3db89f98b97235e345dedfb0b8e"}, + {file = "fastjsonschema-2.17.1-py3-none-any.whl", hash = "sha256:4b90b252628ca695280924d863fe37234eebadc29c5360d322571233dc9746e0"}, + {file = "fastjsonschema-2.17.1.tar.gz", hash = "sha256:f4eeb8a77cef54861dbf7424ac8ce71306f12cbb086c45131bcba2c6a4f726e3"}, ] [package.extras] @@ -791,14 +704,45 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "fonttools" -version = "4.39.3" +version = "4.40.0" description = "Tools to manipulate font files" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.39.3-py3-none-any.whl", hash = "sha256:64c0c05c337f826183637570ac5ab49ee220eec66cf50248e8df527edfa95aeb"}, - {file = "fonttools-4.39.3.zip", hash = "sha256:9234b9f57b74e31b192c3fc32ef1a40750a8fbc1cd9837a7b7bfc4ca4a5c51d7"}, + {file = "fonttools-4.40.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b802dcbf9bcff74672f292b2466f6589ab8736ce4dcf36f48eb994c2847c4b30"}, + {file = "fonttools-4.40.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7f6e3fa3da923063c286320e728ba2270e49c73386e3a711aa680f4b0747d692"}, + {file = "fonttools-4.40.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fdf60f8a5c6bcce7d024a33f7e4bc7921f5b74e8ea13bccd204f2c8b86f3470"}, + {file = "fonttools-4.40.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91784e21a1a085fac07c6a407564f4a77feb471b5954c9ee55a4f9165151f6c1"}, + {file = "fonttools-4.40.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:05171f3c546f64d78569f10adc0de72561882352cac39ec7439af12304d8d8c0"}, + {file = "fonttools-4.40.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7449e5e306f3a930a8944c85d0cbc8429cba13503372a1a40f23124d6fb09b58"}, + {file = "fonttools-4.40.0-cp310-cp310-win32.whl", hash = "sha256:bae8c13abbc2511e9a855d2142c0ab01178dd66b1a665798f357da0d06253e0d"}, + {file = "fonttools-4.40.0-cp310-cp310-win_amd64.whl", hash = "sha256:425b74a608427499b0e45e433c34ddc350820b6f25b7c8761963a08145157a66"}, + {file = "fonttools-4.40.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:00ab569b2a3e591e00425023ade87e8fef90380c1dde61be7691cb524ca5f743"}, + {file = "fonttools-4.40.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:18ea64ac43e94c9e0c23d7a9475f1026be0e25b10dda8f236fc956188761df97"}, + {file = "fonttools-4.40.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:022c4a16b412293e7f1ce21b8bab7a6f9d12c4ffdf171fdc67122baddb973069"}, + {file = "fonttools-4.40.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:530c5d35109f3e0cea2535742d6a3bc99c0786cf0cbd7bb2dc9212387f0d908c"}, + {file = "fonttools-4.40.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5e00334c66f4e83535384cb5339526d01d02d77f142c23b2f97bd6a4f585497a"}, + {file = "fonttools-4.40.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb52c10fda31159c22c7ed85074e05f8b97da8773ea461706c273e31bcbea836"}, + {file = "fonttools-4.40.0-cp311-cp311-win32.whl", hash = "sha256:6a8d71b9a5c884c72741868e845c0e563c5d83dcaf10bb0ceeec3b4b2eb14c67"}, + {file = "fonttools-4.40.0-cp311-cp311-win_amd64.whl", hash = "sha256:15abb3d055c1b2dff9ce376b6c3db10777cb74b37b52b78f61657634fd348a0d"}, + {file = "fonttools-4.40.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:14037c31138fbd21847ad5e5441dfdde003e0a8f3feb5812a1a21fd1c255ffbd"}, + {file = "fonttools-4.40.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:94c915f6716589f78bc00fbc14c5b8de65cfd11ee335d32504f1ef234524cb24"}, + {file = "fonttools-4.40.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37467cee0f32cada2ec08bc16c9c31f9b53ea54b2f5604bf25a1246b5f50593a"}, + {file = "fonttools-4.40.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56d4d85f5374b45b08d2f928517d1e313ea71b4847240398decd0ab3ebbca885"}, + {file = "fonttools-4.40.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8c4305b171b61040b1ee75d18f9baafe58bd3b798d1670078efe2c92436bfb63"}, + {file = "fonttools-4.40.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a954b90d1473c85a22ecf305761d9fd89da93bbd31dae86e7dea436ad2cb5dc9"}, + {file = "fonttools-4.40.0-cp38-cp38-win32.whl", hash = "sha256:1bc4c5b147be8dbc5df9cc8ac5e93ee914ad030fe2a201cc8f02f499db71011d"}, + {file = "fonttools-4.40.0-cp38-cp38-win_amd64.whl", hash = "sha256:8a917828dbfdb1cbe50cf40eeae6fbf9c41aef9e535649ed8f4982b2ef65c091"}, + {file = "fonttools-4.40.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:882983279bf39afe4e945109772c2ffad2be2c90983d6559af8b75c19845a80a"}, + {file = "fonttools-4.40.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c55f1b4109dbc3aeb496677b3e636d55ef46dc078c2a5e3f3db4e90f1c6d2907"}, + {file = "fonttools-4.40.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec468c022d09f1817c691cf884feb1030ef6f1e93e3ea6831b0d8144c06480d1"}, + {file = "fonttools-4.40.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d5adf4ba114f028fc3f5317a221fd8b0f4ef7a2e5524a2b1e0fd891b093791a"}, + {file = "fonttools-4.40.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aa83b3f151bc63970f39b2b42a06097c5a22fd7ed9f7ba008e618de4503d3895"}, + {file = "fonttools-4.40.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:97d95b8301b62bdece1af943b88bcb3680fd385f88346a4a899ee145913b414a"}, + {file = "fonttools-4.40.0-cp39-cp39-win32.whl", hash = "sha256:1a003608400dd1cca3e089e8c94973c6b51a4fb1ef00ff6d7641617b9242e637"}, + {file = "fonttools-4.40.0-cp39-cp39-win_amd64.whl", hash = "sha256:7961575221e3da0841c75da53833272c520000d76f7f71274dbf43370f8a1065"}, + {file = "fonttools-4.40.0-py3-none-any.whl", hash = "sha256:200729d12461e2038700d31f0d49ad5a7b55855dec7525074979a06b46f88505"}, + {file = "fonttools-4.40.0.tar.gz", hash = "sha256:337b6e83d7ee73c40ea62407f2ce03b07c3459e213b6f332b94a69923b9e1cb9"}, ] [package.extras] @@ -819,7 +763,6 @@ woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] name = "fqdn" version = "1.5.1" description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" -category = "dev" optional = false python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" files = [ @@ -831,7 +774,6 @@ files = [ name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -841,14 +783,13 @@ files = [ [[package]] name = "imageio" -version = "2.28.1" +version = "2.31.1" description = "Library for reading and writing a wide range of image, video, scientific, and volumetric data formats." -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "imageio-2.28.1-py3-none-any.whl", hash = "sha256:b9b456146aab459e648cde633b81bf487eb45248948f79c033e55af3bf1e6d70"}, - {file = "imageio-2.28.1.tar.gz", hash = "sha256:5db5087be5c814ecf7e2c7d30a1a15c97eca97d8c26f31ddc54d767d4a43bce8"}, + {file = "imageio-2.31.1-py3-none-any.whl", hash = "sha256:4106fb395ef7f8dc0262d6aa1bb03daba818445c381ca8b7d5dfc7a2089b04df"}, + {file = "imageio-2.31.1.tar.gz", hash = "sha256:f8436a02af02fd63f272dab50f7d623547a38f0e04a4a73e2b02ae1b8b180f27"}, ] [package.dependencies] @@ -873,14 +814,13 @@ tifffile = ["tifffile"] [[package]] name = "importlib-metadata" -version = "6.6.0" +version = "6.7.0" description = "Read metadata from Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "importlib_metadata-6.6.0-py3-none-any.whl", hash = "sha256:43dd286a2cd8995d5eaef7fee2066340423b818ed3fd70adf0bad5f1fac53fed"}, - {file = "importlib_metadata-6.6.0.tar.gz", hash = "sha256:92501cdf9cc66ebd3e612f1b4f0c0765dfa42f0fa38ffb319b6bd84dd675d705"}, + {file = "importlib_metadata-6.7.0-py3-none-any.whl", hash = "sha256:cb52082e659e97afc5dac71e79de97d8681de3aa07ff18578330904a9d18e5b5"}, + {file = "importlib_metadata-6.7.0.tar.gz", hash = "sha256:1aaf550d4f73e5d6783e7acb77aec43d49da8017410afae93822cc9cca98c4d4"}, ] [package.dependencies] @@ -889,13 +829,12 @@ zipp = ">=0.5" [package.extras] docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] [[package]] name = "importlib-resources" version = "5.12.0" description = "Read resources from Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -914,7 +853,6 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -924,14 +862,13 @@ files = [ [[package]] name = "ipykernel" -version = "6.23.0" +version = "6.24.0" description = "IPython Kernel for Jupyter" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "ipykernel-6.23.0-py3-none-any.whl", hash = "sha256:fc886f1dcdc0ec17f277e4d21fd071c857d381adcb04f3f3735d25325ca323c6"}, - {file = "ipykernel-6.23.0.tar.gz", hash = "sha256:bd6f487d9e2744c84f6e667d46462d7647a4c862e70e08282f05a52b9d4b705f"}, + {file = "ipykernel-6.24.0-py3-none-any.whl", hash = "sha256:2f5fffc7ad8f1fd5aadb4e171ba9129d9668dbafa374732cf9511ada52d6547f"}, + {file = "ipykernel-6.24.0.tar.gz", hash = "sha256:29cea0a716b1176d002a61d0b0c851f34536495bc4ef7dd0222c88b41b816123"}, ] [package.dependencies] @@ -940,7 +877,7 @@ comm = ">=0.1.1" debugpy = ">=1.6.5" ipython = ">=7.23.1" jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" matplotlib-inline = ">=0.1" nest-asyncio = "*" packaging = "*" @@ -958,14 +895,13 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio" [[package]] name = "ipython" -version = "8.13.2" +version = "8.14.0" description = "IPython: Productive Interactive Computing" -category = "main" optional = false python-versions = ">=3.9" files = [ - {file = "ipython-8.13.2-py3-none-any.whl", hash = "sha256:ffca270240fbd21b06b2974e14a86494d6d29290184e788275f55e0b55914926"}, - {file = "ipython-8.13.2.tar.gz", hash = "sha256:7dff3fad32b97f6488e02f87b970f309d082f758d7b7fc252e3b19ee0e432dbb"}, + {file = "ipython-8.14.0-py3-none-any.whl", hash = "sha256:248aca623f5c99a6635bc3857677b7320b9b8039f99f070ee0d20a5ca5a8e6bf"}, + {file = "ipython-8.14.0.tar.gz", hash = "sha256:1d197b907b6ba441b692c48cf2a3a2de280dc0ac91a3405b39349a50272ca0a1"}, ] [package.dependencies] @@ -1000,7 +936,6 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pa name = "ipython-genutils" version = "0.2.0" description = "Vestigial utilities from IPython" -category = "dev" optional = false python-versions = "*" files = [ @@ -1010,14 +945,13 @@ files = [ [[package]] name = "ipywidgets" -version = "8.0.6" +version = "8.0.7" description = "Jupyter interactive widgets" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "ipywidgets-8.0.6-py3-none-any.whl", hash = "sha256:a60bf8d2528997e05ac83fd19ea2fbe65f2e79fbe1b2b35779bdfc46c2941dcc"}, - {file = "ipywidgets-8.0.6.tar.gz", hash = "sha256:de7d779f2045d60de9f6c25f653fdae2dba57898e6a1284494b3ba20b6893bb8"}, + {file = "ipywidgets-8.0.7-py3-none-any.whl", hash = "sha256:e0aed0c95a1e55b6a123f64305245578bdc09e52965a34941c2b6a578b8c64a0"}, + {file = "ipywidgets-8.0.7.tar.gz", hash = "sha256:50ace0a8886e9a0d68b980db82f94c25d55d21ff2340ed36f802dd9365e94acf"}, ] [package.dependencies] @@ -1034,7 +968,6 @@ test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] name = "isoduration" version = "20.11.0" description = "Operations with ISO 8601 durations" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1049,7 +982,6 @@ arrow = ">=0.15.0" name = "isort" version = "5.12.0" description = "A Python utility / library to sort Python imports." -category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -1067,7 +999,6 @@ requirements-deprecated-finder = ["pip-api", "pipreqs"] name = "jedi" version = "0.18.2" description = "An autocompletion tool for Python that can be used for text editors." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1087,7 +1018,6 @@ testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] name = "jinja2" version = "3.1.2" description = "A very fast and expressive template engine." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1103,26 +1033,24 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "joblib" -version = "1.2.0" +version = "1.3.1" description = "Lightweight pipelining with Python functions" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "joblib-1.2.0-py3-none-any.whl", hash = "sha256:091138ed78f800342968c523bdde947e7a305b8594b910a0fea2ab83c3c6d385"}, - {file = "joblib-1.2.0.tar.gz", hash = "sha256:e1cee4a79e4af22881164f218d4311f60074197fb707e082e803b61f6d137018"}, + {file = "joblib-1.3.1-py3-none-any.whl", hash = "sha256:89cf0529520e01b3de7ac7b74a8102c90d16d54c64b5dd98cafcd14307fdf915"}, + {file = "joblib-1.3.1.tar.gz", hash = "sha256:1f937906df65329ba98013dc9692fe22a4c5e4a648112de500508b18a21b41e3"}, ] [[package]] name = "json5" -version = "0.9.11" +version = "0.9.14" description = "A Python implementation of the JSON5 data format." -category = "dev" optional = false python-versions = "*" files = [ - {file = "json5-0.9.11-py2.py3-none-any.whl", hash = "sha256:1aa54b80b5e507dfe31d12b7743a642e2ffa6f70bf73b8e3d7d1d5fba83d99bd"}, - {file = "json5-0.9.11.tar.gz", hash = "sha256:4f1e196acc55b83985a51318489f345963c7ba84aa37607e49073066c562e99b"}, + {file = "json5-0.9.14-py2.py3-none-any.whl", hash = "sha256:740c7f1b9e584a468dbb2939d8d458db3427f2c93ae2139d05f47e453eae964f"}, + {file = "json5-0.9.14.tar.gz", hash = "sha256:9ed66c3a6ca3510a976a9ef9b8c0787de24802724ab1860bc0153c7fdd589b02"}, ] [package.extras] @@ -1130,21 +1058,19 @@ dev = ["hypothesis"] [[package]] name = "jsonpointer" -version = "2.3" +version = "2.4" description = "Identify specific nodes in a JSON document (RFC 6901)" -category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" files = [ - {file = "jsonpointer-2.3-py2.py3-none-any.whl", hash = "sha256:51801e558539b4e9cd268638c078c6c5746c9ac96bc38152d443400e4f3793e9"}, - {file = "jsonpointer-2.3.tar.gz", hash = "sha256:97cba51526c829282218feb99dab1b1e6bdf8efd1c43dc9d57be093c0d69c99a"}, + {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, + {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, ] [[package]] name = "jsonschema" version = "4.17.3" description = "An implementation of JSON Schema validation for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1170,19 +1096,18 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "jupyter-client" -version = "8.2.0" +version = "8.3.0" description = "Jupyter protocol implementation and client libraries" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_client-8.2.0-py3-none-any.whl", hash = "sha256:b18219aa695d39e2ad570533e0d71fb7881d35a873051054a84ee2a17c4b7389"}, - {file = "jupyter_client-8.2.0.tar.gz", hash = "sha256:9fe233834edd0e6c0aa5f05ca2ab4bdea1842bfd2d8a932878212fc5301ddaf0"}, + {file = "jupyter_client-8.3.0-py3-none-any.whl", hash = "sha256:7441af0c0672edc5d28035e92ba5e32fadcfa8a4e608a434c228836a89df6158"}, + {file = "jupyter_client-8.3.0.tar.gz", hash = "sha256:3af69921fe99617be1670399a0b857ad67275eefcfa291e2c81a160b7b650f5f"}, ] [package.dependencies] importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" python-dateutil = ">=2.8.2" pyzmq = ">=23.0" tornado = ">=6.2" @@ -1196,7 +1121,6 @@ test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pyt name = "jupyter-contrib-core" version = "0.4.2" description = "Common utilities for jupyter-contrib projects." -category = "dev" optional = false python-versions = "*" files = [ @@ -1217,7 +1141,6 @@ testing-utils = ["mock", "nose"] name = "jupyter-contrib-nbextensions" version = "0.7.0" description = "A collection of Jupyter nbextensions." -category = "dev" optional = false python-versions = "*" files = [ @@ -1241,14 +1164,13 @@ test = ["mock", "nbformat", "nose", "pip", "requests"] [[package]] name = "jupyter-core" -version = "5.3.0" +version = "5.3.1" description = "Jupyter core package. A base package on which Jupyter projects rely." -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_core-5.3.0-py3-none-any.whl", hash = "sha256:d4201af84559bc8c70cead287e1ab94aeef3c512848dde077b7684b54d67730d"}, - {file = "jupyter_core-5.3.0.tar.gz", hash = "sha256:6db75be0c83edbf1b7c9f91ec266a9a24ef945da630f3120e1a0046dc13713fc"}, + {file = "jupyter_core-5.3.1-py3-none-any.whl", hash = "sha256:ae9036db959a71ec1cac33081eeb040a79e681f08ab68b0883e9a676c7a90dce"}, + {file = "jupyter_core-5.3.1.tar.gz", hash = "sha256:5ba5c7938a7f97a6b0481463f7ff0dbac7c15ba48cf46fa4035ca6e838aa1aba"}, ] [package.dependencies] @@ -1264,7 +1186,6 @@ test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] name = "jupyter-events" version = "0.6.3" description = "Jupyter Event System library" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1289,7 +1210,6 @@ test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>= name = "jupyter-highlight-selected-word" version = "0.2.0" description = "Jupyter notebook extension that enables highlighting every instance of the current word in the notebook." -category = "dev" optional = false python-versions = "*" files = [ @@ -1301,7 +1221,6 @@ files = [ name = "jupyter-nbextensions-configurator" version = "0.6.3" description = "jupyter serverextension providing configuration interfaces for nbextensions." -category = "dev" optional = false python-versions = "*" files = [ @@ -1321,14 +1240,13 @@ test = ["jupyter-contrib-core[testing-utils]", "mock", "nose", "requests", "sele [[package]] name = "jupyter-server" -version = "2.5.0" +version = "2.7.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_server-2.5.0-py3-none-any.whl", hash = "sha256:e6bc1e9e96d7c55b9ce9699ff6cb9a910581fe7349e27c40389acb67632e24c0"}, - {file = "jupyter_server-2.5.0.tar.gz", hash = "sha256:9fde612791f716fd34d610cd939704a9639643744751ba66e7ee8fdc9cead07e"}, + {file = "jupyter_server-2.7.0-py3-none-any.whl", hash = "sha256:6a77912aff643e53fa14bdb2634884b52b784a4be77ce8e93f7283faed0f0849"}, + {file = "jupyter_server-2.7.0.tar.gz", hash = "sha256:36da0a266d31a41ac335a366c88933c17dfa5bb817a48f5c02c16d303bc9477f"}, ] [package.dependencies] @@ -1336,11 +1254,12 @@ anyio = ">=3.1.0" argon2-cffi = "*" jinja2 = "*" jupyter-client = ">=7.4.4" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" -jupyter-events = ">=0.4.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-events = ">=0.6.0" jupyter-server-terminals = "*" nbconvert = ">=6.4.4" nbformat = ">=5.3.0" +overrides = "*" packaging = "*" prometheus-client = "*" pywinpty = {version = "*", markers = "os_name == \"nt\""} @@ -1352,14 +1271,13 @@ traitlets = ">=5.6.0" websocket-client = "*" [package.extras] -docs = ["docutils (<0.20)", "ipykernel", "jinja2", "jupyter-client", "jupyter-server", "mistune (<1.0.0)", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] -test = ["ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.4)", "pytest-timeout", "requests"] +docs = ["ipykernel", "jinja2", "jupyter-client", "jupyter-server", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] +test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.4)", "pytest-timeout", "requests"] [[package]] name = "jupyter-server-fileid" version = "0.9.0" description = "" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1379,7 +1297,6 @@ test = ["jupyter-server[test] (>=1.15,<3)", "pytest", "pytest-cov"] name = "jupyter-server-terminals" version = "0.4.4" description = "A Jupyter Server Extension Providing Terminals." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1399,7 +1316,6 @@ test = ["coverage", "jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-cov", name = "jupyter-server-ydoc" version = "0.8.0" description = "A Jupyter Server Extension Providing Y Documents." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1419,7 +1335,6 @@ test = ["coverage", "jupyter-server[test] (>=2.0.0a0)", "pytest (>=7.0)", "pytes name = "jupyter-ydoc" version = "0.2.4" description = "Document structures for collaborative editing using Ypy" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1437,14 +1352,13 @@ test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-we [[package]] name = "jupyterlab" -version = "3.6.3" +version = "3.6.5" description = "JupyterLab computational environment" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "jupyterlab-3.6.3-py3-none-any.whl", hash = "sha256:6aba0caa771697d02fbf409f9767b2fdb4ee32ce935940e3b9a0d5d48d994d0f"}, - {file = "jupyterlab-3.6.3.tar.gz", hash = "sha256:373e9cfb8a72edd294be14f16662563a220cecf0fb26de7aab1af9a29b689b82"}, + {file = "jupyterlab-3.6.5-py3-none-any.whl", hash = "sha256:4d13665c2c2f42c753140d88b52ff8722cd5b38629b934f5612bfa5490bcdc65"}, + {file = "jupyterlab-3.6.5.tar.gz", hash = "sha256:ac0cb19756be1d1e14b2be1f23c603de46e0f0113960fce9888889ca55ae8923"}, ] [package.dependencies] @@ -1453,7 +1367,7 @@ jinja2 = ">=2.1" jupyter-core = "*" jupyter-server = ">=1.16.0,<3" jupyter-server-ydoc = ">=0.8.0,<0.9.0" -jupyter-ydoc = ">=0.2.3,<0.3.0" +jupyter-ydoc = ">=0.2.4,<0.3.0" jupyterlab-server = ">=2.19,<3.0" nbclassic = "*" notebook = "<7" @@ -1468,7 +1382,6 @@ test = ["check-manifest", "coverage", "jupyterlab-server[test]", "pre-commit", " name = "jupyterlab-pygments" version = "0.2.2" description = "Pygments theme using JupyterLab CSS variables" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1478,14 +1391,13 @@ files = [ [[package]] name = "jupyterlab-server" -version = "2.22.1" +version = "2.23.0" description = "A set of server components for JupyterLab and JupyterLab like applications." -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "jupyterlab_server-2.22.1-py3-none-any.whl", hash = "sha256:1c8eb55c7cd70a50a51fef42a7b4e26ef2f7fc48728f0290604bd89b1dd156e6"}, - {file = "jupyterlab_server-2.22.1.tar.gz", hash = "sha256:dfaaf898af84b9d01ae9583b813f378b96ee90c3a66f24c5186ea5d1bbdb2089"}, + {file = "jupyterlab_server-2.23.0-py3-none-any.whl", hash = "sha256:a5ea2c839336a8ba7c38c8e7b2f24cedf919f0d439f4d2e606d9322013a95788"}, + {file = "jupyterlab_server-2.23.0.tar.gz", hash = "sha256:83c01aa4ad9451cd61b383e634d939ff713850f4640c0056b2cdb2b6211a74c7"}, ] [package.dependencies] @@ -1499,27 +1411,25 @@ packaging = ">=21.3" requests = ">=2.28" [package.extras] -docs = ["autodoc-traits", "docutils (<0.20)", "jinja2 (<3.2.0)", "mistune (<3)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi"] +docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] openapi = ["openapi-core (>=0.16.1,<0.17.0)", "ruamel-yaml"] test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.6.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] [[package]] name = "jupyterlab-widgets" -version = "3.0.7" +version = "3.0.8" description = "Jupyter interactive widgets for JupyterLab" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "jupyterlab_widgets-3.0.7-py3-none-any.whl", hash = "sha256:c73f8370338ec19f1bec47254752d6505b03601cbd5a67e6a0b184532f73a459"}, - {file = "jupyterlab_widgets-3.0.7.tar.gz", hash = "sha256:c3a50ed5bf528a0c7a869096503af54702f86dda1db469aee1c92dc0c01b43ca"}, + {file = "jupyterlab_widgets-3.0.8-py3-none-any.whl", hash = "sha256:4715912d6ceab839c9db35953c764b3214ebbc9161c809f6e0510168845dfdf5"}, + {file = "jupyterlab_widgets-3.0.8.tar.gz", hash = "sha256:d428ab97b8d87cc7c54cbf37644d6e0f0e662f23876e05fa460a73ec3257252a"}, ] [[package]] name = "kiwisolver" version = "1.4.4" description = "A fast implementation of the Cassowary constraint solver" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1595,118 +1505,137 @@ files = [ [[package]] name = "lazy-loader" -version = "0.2" +version = "0.3" description = "lazy_loader" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "lazy_loader-0.2-py3-none-any.whl", hash = "sha256:c35875f815c340f823ce3271ed645045397213f961b40ad0c0d395c3f5218eeb"}, - {file = "lazy_loader-0.2.tar.gz", hash = "sha256:0edc7a5175c400acb108f283749951fefdadedeb00adcec6e88b974a9254f18a"}, + {file = "lazy_loader-0.3-py3-none-any.whl", hash = "sha256:1e9e76ee8631e264c62ce10006718e80b2cfc74340d17d1031e0f84af7478554"}, + {file = "lazy_loader-0.3.tar.gz", hash = "sha256:3b68898e34f5b2a29daaaac172c6555512d0f32074f147e2254e4a6d9d838f37"}, ] [package.extras] -lint = ["pre-commit (>=3.1)"] -test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] +lint = ["pre-commit (>=3.3)"] +test = ["pytest (>=7.4)", "pytest-cov (>=4.1)"] + +[[package]] +name = "loguru" +version = "0.7.0" +description = "Python logging made (stupidly) simple" +optional = false +python-versions = ">=3.5" +files = [ + {file = "loguru-0.7.0-py3-none-any.whl", hash = "sha256:b93aa30099fa6860d4727f1b81f8718e965bb96253fa190fab2077aaad6d15d3"}, + {file = "loguru-0.7.0.tar.gz", hash = "sha256:1612053ced6ae84d7959dd7d5e431a0532642237ec21f7fd83ac73fe539e03e1"}, +] + +[package.dependencies] +colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} +win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} + +[package.extras] +dev = ["Sphinx (==5.3.0)", "colorama (==0.4.5)", "colorama (==0.4.6)", "freezegun (==1.1.0)", "freezegun (==1.2.2)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v0.990)", "pre-commit (==3.2.1)", "pytest (==6.1.2)", "pytest (==7.2.1)", "pytest-cov (==2.12.1)", "pytest-cov (==4.0.0)", "pytest-mypy-plugins (==1.10.1)", "pytest-mypy-plugins (==1.9.3)", "sphinx-autobuild (==2021.3.14)", "sphinx-rtd-theme (==1.2.0)", "tox (==3.27.1)", "tox (==4.4.6)"] [[package]] name = "lxml" -version = "4.9.2" +version = "4.9.3" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" files = [ - {file = "lxml-4.9.2-cp27-cp27m-macosx_10_15_x86_64.whl", hash = "sha256:76cf573e5a365e790396a5cc2b909812633409306c6531a6877c59061e42c4f2"}, - {file = "lxml-4.9.2-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b1f42b6921d0e81b1bcb5e395bc091a70f41c4d4e55ba99c6da2b31626c44892"}, - {file = "lxml-4.9.2-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9f102706d0ca011de571de32c3247c6476b55bb6bc65a20f682f000b07a4852a"}, - {file = "lxml-4.9.2-cp27-cp27m-win32.whl", hash = "sha256:8d0b4612b66ff5d62d03bcaa043bb018f74dfea51184e53f067e6fdcba4bd8de"}, - {file = "lxml-4.9.2-cp27-cp27m-win_amd64.whl", hash = "sha256:4c8f293f14abc8fd3e8e01c5bd86e6ed0b6ef71936ded5bf10fe7a5efefbaca3"}, - {file = "lxml-4.9.2-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2899456259589aa38bfb018c364d6ae7b53c5c22d8e27d0ec7609c2a1ff78b50"}, - {file = "lxml-4.9.2-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6749649eecd6a9871cae297bffa4ee76f90b4504a2a2ab528d9ebe912b101975"}, - {file = "lxml-4.9.2-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:a08cff61517ee26cb56f1e949cca38caabe9ea9fbb4b1e10a805dc39844b7d5c"}, - {file = "lxml-4.9.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:85cabf64adec449132e55616e7ca3e1000ab449d1d0f9d7f83146ed5bdcb6d8a"}, - {file = "lxml-4.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8340225bd5e7a701c0fa98284c849c9b9fc9238abf53a0ebd90900f25d39a4e4"}, - {file = "lxml-4.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:1ab8f1f932e8f82355e75dda5413a57612c6ea448069d4fb2e217e9a4bed13d4"}, - {file = "lxml-4.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:699a9af7dffaf67deeae27b2112aa06b41c370d5e7633e0ee0aea2e0b6c211f7"}, - {file = "lxml-4.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9cc34af337a97d470040f99ba4282f6e6bac88407d021688a5d585e44a23184"}, - {file = "lxml-4.9.2-cp310-cp310-win32.whl", hash = "sha256:d02a5399126a53492415d4906ab0ad0375a5456cc05c3fc0fc4ca11771745cda"}, - {file = "lxml-4.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:a38486985ca49cfa574a507e7a2215c0c780fd1778bb6290c21193b7211702ab"}, - {file = "lxml-4.9.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:c83203addf554215463b59f6399835201999b5e48019dc17f182ed5ad87205c9"}, - {file = "lxml-4.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:2a87fa548561d2f4643c99cd13131acb607ddabb70682dcf1dff5f71f781a4bf"}, - {file = "lxml-4.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:d6b430a9938a5a5d85fc107d852262ddcd48602c120e3dbb02137c83d212b380"}, - {file = "lxml-4.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3efea981d956a6f7173b4659849f55081867cf897e719f57383698af6f618a92"}, - {file = "lxml-4.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:df0623dcf9668ad0445e0558a21211d4e9a149ea8f5666917c8eeec515f0a6d1"}, - {file = "lxml-4.9.2-cp311-cp311-win32.whl", hash = "sha256:da248f93f0418a9e9d94b0080d7ebc407a9a5e6d0b57bb30db9b5cc28de1ad33"}, - {file = "lxml-4.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:3818b8e2c4b5148567e1b09ce739006acfaa44ce3156f8cbbc11062994b8e8dd"}, - {file = "lxml-4.9.2-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ca989b91cf3a3ba28930a9fc1e9aeafc2a395448641df1f387a2d394638943b0"}, - {file = "lxml-4.9.2-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:822068f85e12a6e292803e112ab876bc03ed1f03dddb80154c395f891ca6b31e"}, - {file = "lxml-4.9.2-cp35-cp35m-win32.whl", hash = "sha256:be7292c55101e22f2a3d4d8913944cbea71eea90792bf914add27454a13905df"}, - {file = "lxml-4.9.2-cp35-cp35m-win_amd64.whl", hash = "sha256:998c7c41910666d2976928c38ea96a70d1aa43be6fe502f21a651e17483a43c5"}, - {file = "lxml-4.9.2-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:b26a29f0b7fc6f0897f043ca366142d2b609dc60756ee6e4e90b5f762c6adc53"}, - {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:ab323679b8b3030000f2be63e22cdeea5b47ee0abd2d6a1dc0c8103ddaa56cd7"}, - {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:689bb688a1db722485e4610a503e3e9210dcc20c520b45ac8f7533c837be76fe"}, - {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:f49e52d174375a7def9915c9f06ec4e569d235ad428f70751765f48d5926678c"}, - {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:36c3c175d34652a35475a73762b545f4527aec044910a651d2bf50de9c3352b1"}, - {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a35f8b7fa99f90dd2f5dc5a9fa12332642f087a7641289ca6c40d6e1a2637d8e"}, - {file = "lxml-4.9.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:58bfa3aa19ca4c0f28c5dde0ff56c520fbac6f0daf4fac66ed4c8d2fb7f22e74"}, - {file = "lxml-4.9.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc718cd47b765e790eecb74d044cc8d37d58562f6c314ee9484df26276d36a38"}, - {file = "lxml-4.9.2-cp36-cp36m-win32.whl", hash = "sha256:d5bf6545cd27aaa8a13033ce56354ed9e25ab0e4ac3b5392b763d8d04b08e0c5"}, - {file = "lxml-4.9.2-cp36-cp36m-win_amd64.whl", hash = "sha256:3ab9fa9d6dc2a7f29d7affdf3edebf6ece6fb28a6d80b14c3b2fb9d39b9322c3"}, - {file = "lxml-4.9.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:05ca3f6abf5cf78fe053da9b1166e062ade3fa5d4f92b4ed688127ea7d7b1d03"}, - {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:a5da296eb617d18e497bcf0a5c528f5d3b18dadb3619fbdadf4ed2356ef8d941"}, - {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:04876580c050a8c5341d706dd464ff04fd597095cc8c023252566a8826505726"}, - {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c9ec3eaf616d67db0764b3bb983962b4f385a1f08304fd30c7283954e6a7869b"}, - {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2a29ba94d065945944016b6b74e538bdb1751a1db6ffb80c9d3c2e40d6fa9894"}, - {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a82d05da00a58b8e4c0008edbc8a4b6ec5a4bc1e2ee0fb6ed157cf634ed7fa45"}, - {file = "lxml-4.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:223f4232855ade399bd409331e6ca70fb5578efef22cf4069a6090acc0f53c0e"}, - {file = "lxml-4.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d17bc7c2ccf49c478c5bdd447594e82692c74222698cfc9b5daae7ae7e90743b"}, - {file = "lxml-4.9.2-cp37-cp37m-win32.whl", hash = "sha256:b64d891da92e232c36976c80ed7ebb383e3f148489796d8d31a5b6a677825efe"}, - {file = "lxml-4.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:a0a336d6d3e8b234a3aae3c674873d8f0e720b76bc1d9416866c41cd9500ffb9"}, - {file = "lxml-4.9.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:da4dd7c9c50c059aba52b3524f84d7de956f7fef88f0bafcf4ad7dde94a064e8"}, - {file = "lxml-4.9.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:821b7f59b99551c69c85a6039c65b75f5683bdc63270fec660f75da67469ca24"}, - {file = "lxml-4.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:e5168986b90a8d1f2f9dc1b841467c74221bd752537b99761a93d2d981e04889"}, - {file = "lxml-4.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:8e20cb5a47247e383cf4ff523205060991021233ebd6f924bca927fcf25cf86f"}, - {file = "lxml-4.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:13598ecfbd2e86ea7ae45ec28a2a54fb87ee9b9fdb0f6d343297d8e548392c03"}, - {file = "lxml-4.9.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:880bbbcbe2fca64e2f4d8e04db47bcdf504936fa2b33933efd945e1b429bea8c"}, - {file = "lxml-4.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7d2278d59425777cfcb19735018d897ca8303abe67cc735f9f97177ceff8027f"}, - {file = "lxml-4.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5344a43228767f53a9df6e5b253f8cdca7dfc7b7aeae52551958192f56d98457"}, - {file = "lxml-4.9.2-cp38-cp38-win32.whl", hash = "sha256:925073b2fe14ab9b87e73f9a5fde6ce6392da430f3004d8b72cc86f746f5163b"}, - {file = "lxml-4.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:9b22c5c66f67ae00c0199f6055705bc3eb3fcb08d03d2ec4059a2b1b25ed48d7"}, - {file = "lxml-4.9.2-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:5f50a1c177e2fa3ee0667a5ab79fdc6b23086bc8b589d90b93b4bd17eb0e64d1"}, - {file = "lxml-4.9.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:090c6543d3696cbe15b4ac6e175e576bcc3f1ccfbba970061b7300b0c15a2140"}, - {file = "lxml-4.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:63da2ccc0857c311d764e7d3d90f429c252e83b52d1f8f1d1fe55be26827d1f4"}, - {file = "lxml-4.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:5b4545b8a40478183ac06c073e81a5ce4cf01bf1734962577cf2bb569a5b3bbf"}, - {file = "lxml-4.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2e430cd2824f05f2d4f687701144556646bae8f249fd60aa1e4c768ba7018947"}, - {file = "lxml-4.9.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6804daeb7ef69e7b36f76caddb85cccd63d0c56dedb47555d2fc969e2af6a1a5"}, - {file = "lxml-4.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a6e441a86553c310258aca15d1c05903aaf4965b23f3bc2d55f200804e005ee5"}, - {file = "lxml-4.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ca34efc80a29351897e18888c71c6aca4a359247c87e0b1c7ada14f0ab0c0fb2"}, - {file = "lxml-4.9.2-cp39-cp39-win32.whl", hash = "sha256:6b418afe5df18233fc6b6093deb82a32895b6bb0b1155c2cdb05203f583053f1"}, - {file = "lxml-4.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:f1496ea22ca2c830cbcbd473de8f114a320da308438ae65abad6bab7867fe38f"}, - {file = "lxml-4.9.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:b264171e3143d842ded311b7dccd46ff9ef34247129ff5bf5066123c55c2431c"}, - {file = "lxml-4.9.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0dc313ef231edf866912e9d8f5a042ddab56c752619e92dfd3a2c277e6a7299a"}, - {file = "lxml-4.9.2-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:16efd54337136e8cd72fb9485c368d91d77a47ee2d42b057564aae201257d419"}, - {file = "lxml-4.9.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:0f2b1e0d79180f344ff9f321327b005ca043a50ece8713de61d1cb383fb8ac05"}, - {file = "lxml-4.9.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:7b770ed79542ed52c519119473898198761d78beb24b107acf3ad65deae61f1f"}, - {file = "lxml-4.9.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:efa29c2fe6b4fdd32e8ef81c1528506895eca86e1d8c4657fda04c9b3786ddf9"}, - {file = "lxml-4.9.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7e91ee82f4199af8c43d8158024cbdff3d931df350252288f0d4ce656df7f3b5"}, - {file = "lxml-4.9.2-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:b23e19989c355ca854276178a0463951a653309fb8e57ce674497f2d9f208746"}, - {file = "lxml-4.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:01d36c05f4afb8f7c20fd9ed5badca32a2029b93b1750f571ccc0b142531caf7"}, - {file = "lxml-4.9.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7b515674acfdcadb0eb5d00d8a709868173acece5cb0be3dd165950cbfdf5409"}, - {file = "lxml-4.9.2.tar.gz", hash = "sha256:2455cfaeb7ac70338b3257f41e21f0724f4b5b0c0e7702da67ee6c3640835b67"}, + {file = "lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl", hash = "sha256:b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c"}, + {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d"}, + {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef"}, + {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb"}, + {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e"}, + {file = "lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991"}, + {file = "lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd"}, + {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8"}, + {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76"}, + {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23"}, + {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f"}, + {file = "lxml-4.9.3-cp310-cp310-win32.whl", hash = "sha256:cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85"}, + {file = "lxml-4.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d"}, + {file = "lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5"}, + {file = "lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf"}, + {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f"}, + {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b"}, + {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120"}, + {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6"}, + {file = "lxml-4.9.3-cp311-cp311-win32.whl", hash = "sha256:0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305"}, + {file = "lxml-4.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc"}, + {file = "lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4"}, + {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be"}, + {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13"}, + {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9"}, + {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5"}, + {file = "lxml-4.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8"}, + {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7"}, + {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2"}, + {file = "lxml-4.9.3-cp35-cp35m-win32.whl", hash = "sha256:704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d"}, + {file = "lxml-4.9.3-cp35-cp35m-win_amd64.whl", hash = "sha256:c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833"}, + {file = "lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584"}, + {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287"}, + {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458"}, + {file = "lxml-4.9.3-cp36-cp36m-win32.whl", hash = "sha256:50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477"}, + {file = "lxml-4.9.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4"}, + {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a"}, + {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02"}, + {file = "lxml-4.9.3-cp37-cp37m-win32.whl", hash = "sha256:1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f"}, + {file = "lxml-4.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa"}, + {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40"}, + {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7"}, + {file = "lxml-4.9.3-cp38-cp38-win32.whl", hash = "sha256:57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574"}, + {file = "lxml-4.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96"}, + {file = "lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432"}, + {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69"}, + {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50"}, + {file = "lxml-4.9.3-cp39-cp39-win32.whl", hash = "sha256:8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2"}, + {file = "lxml-4.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2"}, + {file = "lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35"}, + {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0"}, + {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9"}, + {file = "lxml-4.9.3.tar.gz", hash = "sha256:48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c"}, ] [package.extras] cssselect = ["cssselect (>=0.7)"] html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=0.29.7)"] +source = ["Cython (>=0.29.35)"] [[package]] name = "makefun" version = "1.15.1" description = "Small library to dynamically create python functions." -category = "dev" optional = false python-versions = "*" files = [ @@ -1716,69 +1645,67 @@ files = [ [[package]] name = "markupsafe" -version = "2.1.2" +version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, - {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, ] [[package]] name = "matplotlib" version = "3.7.1" description = "Python plotting package" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1841,7 +1768,6 @@ python-dateutil = ">=2.7" name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1856,7 +1782,6 @@ traitlets = "*" name = "mibi-bin-tools" version = "0.2.9" description = "Source for extracting .bin files from the commercial MIBI." -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -1897,21 +1822,19 @@ test = ["coveralls[toml]", "pytest", "pytest-cases", "pytest-cov", "pytest-mock" [[package]] name = "mistune" -version = "2.0.5" -description = "A sane Markdown parser with useful plugins and renderers" -category = "dev" +version = "3.0.1" +description = "A sane and fast Markdown parser with useful plugins and renderers" optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "mistune-2.0.5-py2.py3-none-any.whl", hash = "sha256:bad7f5d431886fcbaf5f758118ecff70d31f75231b34024a1341120340a65ce8"}, - {file = "mistune-2.0.5.tar.gz", hash = "sha256:0246113cb2492db875c6be56974a7c893333bf26cd92891c85f63151cee09d34"}, + {file = "mistune-3.0.1-py3-none-any.whl", hash = "sha256:b9b3e438efbb57c62b5beb5e134dab664800bdf1284a7ee09e8b12b13eb1aac6"}, + {file = "mistune-3.0.1.tar.gz", hash = "sha256:e912116c13aa0944f9dc530db38eb88f6a77087ab128f49f84a48f4c05ea163c"}, ] [[package]] name = "mock" version = "5.0.2" description = "Rolling backport of unittest.mock for all Pythons" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1928,7 +1851,6 @@ test = ["pytest", "pytest-cov"] name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1938,14 +1860,13 @@ files = [ [[package]] name = "natsort" -version = "8.3.1" +version = "8.4.0" description = "Simple yet flexible natural sorting in Python." -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "natsort-8.3.1-py3-none-any.whl", hash = "sha256:d583bc9050dd10538de36297c960b93f873f0cd01671a3c50df5bd86dd391dcb"}, - {file = "natsort-8.3.1.tar.gz", hash = "sha256:517595492dde570a4fd6b6a76f644440c1ba51e2338c8a671d7f0475fda8f9fd"}, + {file = "natsort-8.4.0-py3-none-any.whl", hash = "sha256:4732914fb471f56b5cce04d7bae6f164a592c7712e1c85f9ef585e197299521c"}, + {file = "natsort-8.4.0.tar.gz", hash = "sha256:45312c4a0e5507593da193dedd04abb1469253b601ecaf63445ad80f0a1ea581"}, ] [package.extras] @@ -1956,7 +1877,6 @@ icu = ["PyICU (>=1.0.0)"] name = "nbclassic" version = "1.0.0" description = "Jupyter Notebook as a Jupyter Server extension." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1990,56 +1910,54 @@ test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-jupyter", "pytest-p [[package]] name = "nbclient" -version = "0.7.4" +version = "0.8.0" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." -category = "dev" optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.8.0" files = [ - {file = "nbclient-0.7.4-py3-none-any.whl", hash = "sha256:c817c0768c5ff0d60e468e017613e6eae27b6fa31e43f905addd2d24df60c125"}, - {file = "nbclient-0.7.4.tar.gz", hash = "sha256:d447f0e5a4cfe79d462459aec1b3dc5c2e9152597262be8ee27f7d4c02566a0d"}, + {file = "nbclient-0.8.0-py3-none-any.whl", hash = "sha256:25e861299e5303a0477568557c4045eccc7a34c17fc08e7959558707b9ebe548"}, + {file = "nbclient-0.8.0.tar.gz", hash = "sha256:f9b179cd4b2d7bca965f900a2ebf0db4a12ebff2f36a711cb66861e4ae158e55"}, ] [package.dependencies] jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" nbformat = ">=5.1" -traitlets = ">=5.3" +traitlets = ">=5.4" [package.extras] dev = ["pre-commit"] docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] -test = ["flaky", "ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] +test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] [[package]] name = "nbconvert" -version = "7.4.0" +version = "7.6.0" description = "Converting Jupyter Notebooks" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "nbconvert-7.4.0-py3-none-any.whl", hash = "sha256:af5064a9db524f9f12f4e8be7f0799524bd5b14c1adea37e34e83c95127cc818"}, - {file = "nbconvert-7.4.0.tar.gz", hash = "sha256:51b6c77b507b177b73f6729dba15676e42c4e92bcb00edc8cc982ee72e7d89d7"}, + {file = "nbconvert-7.6.0-py3-none-any.whl", hash = "sha256:5a445c6794b0791984bc5436608fe2c066cb43c83920c7bc91bde3b765e9a264"}, + {file = "nbconvert-7.6.0.tar.gz", hash = "sha256:24fcf27efdef2b51d7f090cc5ce5a9b178766a55be513c4ebab08c91899ab550"}, ] [package.dependencies] beautifulsoup4 = "*" -bleach = "*" +bleach = "!=5.0.0" defusedxml = "*" importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} jinja2 = ">=3.0" jupyter-core = ">=4.7" jupyterlab-pygments = "*" markupsafe = ">=2.0" -mistune = ">=2.0.3,<3" +mistune = ">=2.0.3,<4" nbclient = ">=0.5.0" -nbformat = ">=5.1" +nbformat = ">=5.7" packaging = "*" pandocfilters = ">=1.4.1" pygments = ">=2.4.1" tinycss2 = "*" -traitlets = ">=5.0" +traitlets = ">=5.1" [package.extras] all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"] @@ -2052,14 +1970,13 @@ webpdf = ["pyppeteer (>=1,<1.1)"] [[package]] name = "nbformat" -version = "5.8.0" +version = "5.9.0" description = "The Jupyter Notebook format" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "nbformat-5.8.0-py3-none-any.whl", hash = "sha256:d910082bd3e0bffcf07eabf3683ed7dda0727a326c446eeb2922abe102e65162"}, - {file = "nbformat-5.8.0.tar.gz", hash = "sha256:46dac64c781f1c34dfd8acba16547024110348f9fc7eab0f31981c2a3dc48d1f"}, + {file = "nbformat-5.9.0-py3-none-any.whl", hash = "sha256:8c8fa16d6d05062c26177754bfbfac22de644888e2ef69d27ad2a334cf2576e5"}, + {file = "nbformat-5.9.0.tar.gz", hash = "sha256:e98ebb6120c3efbafdee2a40af2a140cadee90bb06dd69a2a63d9551fcc7f976"}, ] [package.dependencies] @@ -2076,7 +1993,6 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] name = "nest-asyncio" version = "1.5.6" description = "Patch asyncio to allow nested event loops" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -2088,7 +2004,6 @@ files = [ name = "networkx" version = "3.1" description = "Python package for creating and manipulating graphs and networks" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2107,7 +2022,6 @@ test = ["codecov (>=2.1)", "pytest (>=7.2)", "pytest-cov (>=4.0)"] name = "notebook" version = "6.5.4" description = "A web-based notebook environment for interactive computing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2142,7 +2056,6 @@ test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixs name = "notebook-shim" version = "0.2.3" description = "A shim layer for notebook traits and config" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2158,47 +2071,53 @@ test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync" [[package]] name = "numpy" -version = "1.24.3" +version = "1.25.0" description = "Fundamental package for array computing in Python" -category = "main" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "numpy-1.24.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3c1104d3c036fb81ab923f507536daedc718d0ad5a8707c6061cdfd6d184e570"}, - {file = "numpy-1.24.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:202de8f38fc4a45a3eea4b63e2f376e5f2dc64ef0fa692838e31a808520efaf7"}, - {file = "numpy-1.24.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8535303847b89aa6b0f00aa1dc62867b5a32923e4d1681a35b5eef2d9591a463"}, - {file = "numpy-1.24.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d926b52ba1367f9acb76b0df6ed21f0b16a1ad87c6720a1121674e5cf63e2b6"}, - {file = "numpy-1.24.3-cp310-cp310-win32.whl", hash = "sha256:f21c442fdd2805e91799fbe044a7b999b8571bb0ab0f7850d0cb9641a687092b"}, - {file = "numpy-1.24.3-cp310-cp310-win_amd64.whl", hash = "sha256:ab5f23af8c16022663a652d3b25dcdc272ac3f83c3af4c02eb8b824e6b3ab9d7"}, - {file = "numpy-1.24.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9a7721ec204d3a237225db3e194c25268faf92e19338a35f3a224469cb6039a3"}, - {file = "numpy-1.24.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d6cc757de514c00b24ae8cf5c876af2a7c3df189028d68c0cb4eaa9cd5afc2bf"}, - {file = "numpy-1.24.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76e3f4e85fc5d4fd311f6e9b794d0c00e7002ec122be271f2019d63376f1d385"}, - {file = "numpy-1.24.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1d3c026f57ceaad42f8231305d4653d5f05dc6332a730ae5c0bea3513de0950"}, - {file = "numpy-1.24.3-cp311-cp311-win32.whl", hash = "sha256:c91c4afd8abc3908e00a44b2672718905b8611503f7ff87390cc0ac3423fb096"}, - {file = "numpy-1.24.3-cp311-cp311-win_amd64.whl", hash = "sha256:5342cf6aad47943286afa6f1609cad9b4266a05e7f2ec408e2cf7aea7ff69d80"}, - {file = "numpy-1.24.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7776ea65423ca6a15255ba1872d82d207bd1e09f6d0894ee4a64678dd2204078"}, - {file = "numpy-1.24.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ae8d0be48d1b6ed82588934aaaa179875e7dc4f3d84da18d7eae6eb3f06c242c"}, - {file = "numpy-1.24.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecde0f8adef7dfdec993fd54b0f78183051b6580f606111a6d789cd14c61ea0c"}, - {file = "numpy-1.24.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4749e053a29364d3452c034827102ee100986903263e89884922ef01a0a6fd2f"}, - {file = "numpy-1.24.3-cp38-cp38-win32.whl", hash = "sha256:d933fabd8f6a319e8530d0de4fcc2e6a61917e0b0c271fded460032db42a0fe4"}, - {file = "numpy-1.24.3-cp38-cp38-win_amd64.whl", hash = "sha256:56e48aec79ae238f6e4395886b5eaed058abb7231fb3361ddd7bfdf4eed54289"}, - {file = "numpy-1.24.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4719d5aefb5189f50887773699eaf94e7d1e02bf36c1a9d353d9f46703758ca4"}, - {file = "numpy-1.24.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0ec87a7084caa559c36e0a2309e4ecb1baa03b687201d0a847c8b0ed476a7187"}, - {file = "numpy-1.24.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea8282b9bcfe2b5e7d491d0bf7f3e2da29700cec05b49e64d6246923329f2b02"}, - {file = "numpy-1.24.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210461d87fb02a84ef243cac5e814aad2b7f4be953b32cb53327bb49fd77fbb4"}, - {file = "numpy-1.24.3-cp39-cp39-win32.whl", hash = "sha256:784c6da1a07818491b0ffd63c6bbe5a33deaa0e25a20e1b3ea20cf0e43f8046c"}, - {file = "numpy-1.24.3-cp39-cp39-win_amd64.whl", hash = "sha256:d5036197ecae68d7f491fcdb4df90082b0d4960ca6599ba2659957aafced7c17"}, - {file = "numpy-1.24.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:352ee00c7f8387b44d19f4cada524586f07379c0d49270f87233983bc5087ca0"}, - {file = "numpy-1.24.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7d6acc2e7524c9955e5c903160aa4ea083736fde7e91276b0e5d98e6332812"}, - {file = "numpy-1.24.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:35400e6a8d102fd07c71ed7dcadd9eb62ee9a6e84ec159bd48c28235bbb0f8e4"}, - {file = "numpy-1.24.3.tar.gz", hash = "sha256:ab344f1bf21f140adab8e47fdbc7c35a477dc01408791f8ba00d018dd0bc5155"}, + {file = "numpy-1.25.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8aa130c3042052d656751df5e81f6d61edff3e289b5994edcf77f54118a8d9f4"}, + {file = "numpy-1.25.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e3f2b96e3b63c978bc29daaa3700c028fe3f049ea3031b58aa33fe2a5809d24"}, + {file = "numpy-1.25.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6b267f349a99d3908b56645eebf340cb58f01bd1e773b4eea1a905b3f0e4208"}, + {file = "numpy-1.25.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4aedd08f15d3045a4e9c648f1e04daca2ab1044256959f1f95aafeeb3d794c16"}, + {file = "numpy-1.25.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6d183b5c58513f74225c376643234c369468e02947b47942eacbb23c1671f25d"}, + {file = "numpy-1.25.0-cp310-cp310-win32.whl", hash = "sha256:d76a84998c51b8b68b40448ddd02bd1081bb33abcdc28beee6cd284fe11036c6"}, + {file = "numpy-1.25.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0dc071017bc00abb7d7201bac06fa80333c6314477b3d10b52b58fa6a6e38f6"}, + {file = "numpy-1.25.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c69fe5f05eea336b7a740e114dec995e2f927003c30702d896892403df6dbf0"}, + {file = "numpy-1.25.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c7211d7920b97aeca7b3773a6783492b5b93baba39e7c36054f6e749fc7490c"}, + {file = "numpy-1.25.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecc68f11404930e9c7ecfc937aa423e1e50158317bf67ca91736a9864eae0232"}, + {file = "numpy-1.25.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e559c6afbca484072a98a51b6fa466aae785cfe89b69e8b856c3191bc8872a82"}, + {file = "numpy-1.25.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6c284907e37f5e04d2412950960894b143a648dea3f79290757eb878b91acbd1"}, + {file = "numpy-1.25.0-cp311-cp311-win32.whl", hash = "sha256:95367ccd88c07af21b379be1725b5322362bb83679d36691f124a16357390153"}, + {file = "numpy-1.25.0-cp311-cp311-win_amd64.whl", hash = "sha256:b76aa836a952059d70a2788a2d98cb2a533ccd46222558b6970348939e55fc24"}, + {file = "numpy-1.25.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b792164e539d99d93e4e5e09ae10f8cbe5466de7d759fc155e075237e0c274e4"}, + {file = "numpy-1.25.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7cd981ccc0afe49b9883f14761bb57c964df71124dcd155b0cba2b591f0d64b9"}, + {file = "numpy-1.25.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5aa48bebfb41f93043a796128854b84407d4df730d3fb6e5dc36402f5cd594c0"}, + {file = "numpy-1.25.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5177310ac2e63d6603f659fadc1e7bab33dd5a8db4e0596df34214eeab0fee3b"}, + {file = "numpy-1.25.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0ac6edfb35d2a99aaf102b509c8e9319c499ebd4978df4971b94419a116d0790"}, + {file = "numpy-1.25.0-cp39-cp39-win32.whl", hash = "sha256:7412125b4f18aeddca2ecd7219ea2d2708f697943e6f624be41aa5f8a9852cc4"}, + {file = "numpy-1.25.0-cp39-cp39-win_amd64.whl", hash = "sha256:26815c6c8498dc49d81faa76d61078c4f9f0859ce7817919021b9eba72b425e3"}, + {file = "numpy-1.25.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5b1b90860bf7d8a8c313b372d4f27343a54f415b20fb69dd601b7efe1029c91e"}, + {file = "numpy-1.25.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85cdae87d8c136fd4da4dad1e48064d700f63e923d5af6c8c782ac0df8044542"}, + {file = "numpy-1.25.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cc3fda2b36482891db1060f00f881c77f9423eead4c3579629940a3e12095fe8"}, + {file = "numpy-1.25.0.tar.gz", hash = "sha256:f1accae9a28dc3cda46a91de86acf69de0d1b5f4edd44a9b0c3ceb8036dfff19"}, +] + +[[package]] +name = "overrides" +version = "7.3.1" +description = "A decorator to automatically detect mismatch when overriding a method." +optional = false +python-versions = ">=3.6" +files = [ + {file = "overrides-7.3.1-py3-none-any.whl", hash = "sha256:6187d8710a935d09b0bcef8238301d6ee2569d2ac1ae0ec39a8c7924e27f58ca"}, + {file = "overrides-7.3.1.tar.gz", hash = "sha256:8b97c6c1e1681b78cbc9424b138d880f0803c2254c5ebaabdde57bb6c62093f2"}, ] [[package]] name = "packaging" version = "23.1" description = "Core utilities for Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2208,39 +2127,36 @@ files = [ [[package]] name = "pandas" -version = "1.5.3" +version = "2.0.3" description = "Powerful data structures for data analysis, time series, and statistics" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "pandas-1.5.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3749077d86e3a2f0ed51367f30bf5b82e131cc0f14260c4d3e499186fccc4406"}, - {file = "pandas-1.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:972d8a45395f2a2d26733eb8d0f629b2f90bebe8e8eddbb8829b180c09639572"}, - {file = "pandas-1.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:50869a35cbb0f2e0cd5ec04b191e7b12ed688874bd05dd777c19b28cbea90996"}, - {file = "pandas-1.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3ac844a0fe00bfaeb2c9b51ab1424e5c8744f89860b138434a363b1f620f354"}, - {file = "pandas-1.5.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a0a56cef15fd1586726dace5616db75ebcfec9179a3a55e78f72c5639fa2a23"}, - {file = "pandas-1.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:478ff646ca42b20376e4ed3fa2e8d7341e8a63105586efe54fa2508ee087f328"}, - {file = "pandas-1.5.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6973549c01ca91ec96199e940495219c887ea815b2083722821f1d7abfa2b4dc"}, - {file = "pandas-1.5.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c39a8da13cede5adcd3be1182883aea1c925476f4e84b2807a46e2775306305d"}, - {file = "pandas-1.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f76d097d12c82a535fda9dfe5e8dd4127952b45fea9b0276cb30cca5ea313fbc"}, - {file = "pandas-1.5.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e474390e60ed609cec869b0da796ad94f420bb057d86784191eefc62b65819ae"}, - {file = "pandas-1.5.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f2b952406a1588ad4cad5b3f55f520e82e902388a6d5a4a91baa8d38d23c7f6"}, - {file = "pandas-1.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:bc4c368f42b551bf72fac35c5128963a171b40dce866fb066540eeaf46faa003"}, - {file = "pandas-1.5.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:14e45300521902689a81f3f41386dc86f19b8ba8dd5ac5a3c7010ef8d2932813"}, - {file = "pandas-1.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9842b6f4b8479e41968eced654487258ed81df7d1c9b7b870ceea24ed9459b31"}, - {file = "pandas-1.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:26d9c71772c7afb9d5046e6e9cf42d83dd147b5cf5bcb9d97252077118543792"}, - {file = "pandas-1.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fbcb19d6fceb9e946b3e23258757c7b225ba450990d9ed63ccceeb8cae609f7"}, - {file = "pandas-1.5.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:565fa34a5434d38e9d250af3c12ff931abaf88050551d9fbcdfafca50d62babf"}, - {file = "pandas-1.5.3-cp38-cp38-win32.whl", hash = "sha256:87bd9c03da1ac870a6d2c8902a0e1fd4267ca00f13bc494c9e5a9020920e1d51"}, - {file = "pandas-1.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:41179ce559943d83a9b4bbacb736b04c928b095b5f25dd2b7389eda08f46f373"}, - {file = "pandas-1.5.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c74a62747864ed568f5a82a49a23a8d7fe171d0c69038b38cedf0976831296fa"}, - {file = "pandas-1.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c4c00e0b0597c8e4f59e8d461f797e5d70b4d025880516a8261b2817c47759ee"}, - {file = "pandas-1.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a50d9a4336a9621cab7b8eb3fb11adb82de58f9b91d84c2cd526576b881a0c5a"}, - {file = "pandas-1.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd05f7783b3274aa206a1af06f0ceed3f9b412cf665b7247eacd83be41cf7bf0"}, - {file = "pandas-1.5.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f69c4029613de47816b1bb30ff5ac778686688751a5e9c99ad8c7031f6508e5"}, - {file = "pandas-1.5.3-cp39-cp39-win32.whl", hash = "sha256:7cec0bee9f294e5de5bbfc14d0573f65526071029d036b753ee6507d2a21480a"}, - {file = "pandas-1.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:dfd681c5dc216037e0b0a2c821f5ed99ba9f03ebcf119c7dac0e9a7b960b9ec9"}, - {file = "pandas-1.5.3.tar.gz", hash = "sha256:74a3fd7e5a7ec052f183273dc7b0acd3a863edf7520f5d3a1765c04ffdb3b0b1"}, + {file = "pandas-2.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e4c7c9f27a4185304c7caf96dc7d91bc60bc162221152de697c98eb0b2648dd8"}, + {file = "pandas-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f167beed68918d62bffb6ec64f2e1d8a7d297a038f86d4aed056b9493fca407f"}, + {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce0c6f76a0f1ba361551f3e6dceaff06bde7514a374aa43e33b588ec10420183"}, + {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba619e410a21d8c387a1ea6e8a0e49bb42216474436245718d7f2e88a2f8d7c0"}, + {file = "pandas-2.0.3-cp310-cp310-win32.whl", hash = "sha256:3ef285093b4fe5058eefd756100a367f27029913760773c8bf1d2d8bebe5d210"}, + {file = "pandas-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:9ee1a69328d5c36c98d8e74db06f4ad518a1840e8ccb94a4ba86920986bb617e"}, + {file = "pandas-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b084b91d8d66ab19f5bb3256cbd5ea661848338301940e17f4492b2ce0801fe8"}, + {file = "pandas-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37673e3bdf1551b95bf5d4ce372b37770f9529743d2498032439371fc7b7eb26"}, + {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9cb1e14fdb546396b7e1b923ffaeeac24e4cedd14266c3497216dd4448e4f2d"}, + {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9cd88488cceb7635aebb84809d087468eb33551097d600c6dad13602029c2df"}, + {file = "pandas-2.0.3-cp311-cp311-win32.whl", hash = "sha256:694888a81198786f0e164ee3a581df7d505024fbb1f15202fc7db88a71d84ebd"}, + {file = "pandas-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6a21ab5c89dcbd57f78d0ae16630b090eec626360085a4148693def5452d8a6b"}, + {file = "pandas-2.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4da0d45e7f34c069fe4d522359df7d23badf83abc1d1cef398895822d11061"}, + {file = "pandas-2.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:32fca2ee1b0d93dd71d979726b12b61faa06aeb93cf77468776287f41ff8fdc5"}, + {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:258d3624b3ae734490e4d63c430256e716f488c4fcb7c8e9bde2d3aa46c29089"}, + {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eae3dc34fa1aa7772dd3fc60270d13ced7346fcbcfee017d3132ec625e23bb0"}, + {file = "pandas-2.0.3-cp38-cp38-win32.whl", hash = "sha256:f3421a7afb1a43f7e38e82e844e2bca9a6d793d66c1a7f9f0ff39a795bbc5e02"}, + {file = "pandas-2.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:69d7f3884c95da3a31ef82b7618af5710dba95bb885ffab339aad925c3e8ce78"}, + {file = "pandas-2.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5247fb1ba347c1261cbbf0fcfba4a3121fbb4029d95d9ef4dc45406620b25c8b"}, + {file = "pandas-2.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:81af086f4543c9d8bb128328b5d32e9986e0c84d3ee673a2ac6fb57fd14f755e"}, + {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1994c789bf12a7c5098277fb43836ce090f1073858c10f9220998ac74f37c69b"}, + {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ec591c48e29226bcbb316e0c1e9423622bc7a4eaf1ef7c3c9fa1a3981f89641"}, + {file = "pandas-2.0.3-cp39-cp39-win32.whl", hash = "sha256:04dbdbaf2e4d46ca8da896e1805bc04eb85caa9a82e259e8eed00254d5e0c682"}, + {file = "pandas-2.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:1168574b036cd8b93abc746171c9b4f1b83467438a5e45909fed645cf8692dbc"}, + {file = "pandas-2.0.3.tar.gz", hash = "sha256:c02f372a88e0d17f36d3093a644c73cfc1788e876a7c4bcb4020a77512e2043c"}, ] [package.dependencies] @@ -2249,17 +2165,37 @@ numpy = [ {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, ] -python-dateutil = ">=2.8.1" +python-dateutil = ">=2.8.2" pytz = ">=2020.1" - -[package.extras] -test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"] +tzdata = ">=2022.1" + +[package.extras] +all = ["PyQt5 (>=5.15.1)", "SQLAlchemy (>=1.4.16)", "beautifulsoup4 (>=4.9.3)", "bottleneck (>=1.3.2)", "brotlipy (>=0.7.0)", "fastparquet (>=0.6.3)", "fsspec (>=2021.07.0)", "gcsfs (>=2021.07.0)", "html5lib (>=1.1)", "hypothesis (>=6.34.2)", "jinja2 (>=3.0.0)", "lxml (>=4.6.3)", "matplotlib (>=3.6.1)", "numba (>=0.53.1)", "numexpr (>=2.7.3)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pandas-gbq (>=0.15.0)", "psycopg2 (>=2.8.6)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "python-snappy (>=0.6.0)", "pyxlsb (>=1.0.8)", "qtpy (>=2.2.0)", "s3fs (>=2021.08.0)", "scipy (>=1.7.1)", "tables (>=3.6.1)", "tabulate (>=0.8.9)", "xarray (>=0.21.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)", "zstandard (>=0.15.2)"] +aws = ["s3fs (>=2021.08.0)"] +clipboard = ["PyQt5 (>=5.15.1)", "qtpy (>=2.2.0)"] +compression = ["brotlipy (>=0.7.0)", "python-snappy (>=0.6.0)", "zstandard (>=0.15.2)"] +computation = ["scipy (>=1.7.1)", "xarray (>=0.21.0)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pyxlsb (>=1.0.8)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)"] +feather = ["pyarrow (>=7.0.0)"] +fss = ["fsspec (>=2021.07.0)"] +gcp = ["gcsfs (>=2021.07.0)", "pandas-gbq (>=0.15.0)"] +hdf5 = ["tables (>=3.6.1)"] +html = ["beautifulsoup4 (>=4.9.3)", "html5lib (>=1.1)", "lxml (>=4.6.3)"] +mysql = ["SQLAlchemy (>=1.4.16)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.0.0)", "tabulate (>=0.8.9)"] +parquet = ["pyarrow (>=7.0.0)"] +performance = ["bottleneck (>=1.3.2)", "numba (>=0.53.1)", "numexpr (>=2.7.1)"] +plot = ["matplotlib (>=3.6.1)"] +postgresql = ["SQLAlchemy (>=1.4.16)", "psycopg2 (>=2.8.6)"] +spss = ["pyreadstat (>=1.1.2)"] +sql-other = ["SQLAlchemy (>=1.4.16)"] +test = ["hypothesis (>=6.34.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.6.3)"] [[package]] name = "pandocfilters" version = "1.5.0" description = "Utilities for writing pandoc filters in python" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2271,7 +2207,6 @@ files = [ name = "parso" version = "0.8.3" description = "A Python Parser" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2287,7 +2222,6 @@ testing = ["docopt", "pytest (<6.0.0)"] name = "pathspec" version = "0.11.1" description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2299,7 +2233,6 @@ files = [ name = "pexpect" version = "4.8.0" description = "Pexpect allows easy control of interactive console applications." -category = "main" optional = false python-versions = "*" files = [ @@ -2314,7 +2247,6 @@ ptyprocess = ">=0.5" name = "pickleshare" version = "0.7.5" description = "Tiny 'shelve'-like database with concurrency support" -category = "main" optional = false python-versions = "*" files = [ @@ -2326,7 +2258,6 @@ files = [ name = "pillow" version = "9.5.0" description = "Python Imaging Library (Fork)" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2404,30 +2335,28 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa [[package]] name = "platformdirs" -version = "3.5.0" +version = "3.8.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.5.0-py3-none-any.whl", hash = "sha256:47692bc24c1958e8b0f13dd727307cff1db103fca36399f457da8e05f222fdc4"}, - {file = "platformdirs-3.5.0.tar.gz", hash = "sha256:7954a68d0ba23558d753f73437c55f89027cf8f5108c19844d4b82e5af396335"}, + {file = "platformdirs-3.8.0-py3-none-any.whl", hash = "sha256:ca9ed98ce73076ba72e092b23d3c93ea6c4e186b3f1c3dad6edd98ff6ffcca2e"}, + {file = "platformdirs-3.8.0.tar.gz", hash = "sha256:b0cabcb11063d21a0b261d557acb0a9d2126350e63b70cdf7db6347baea456dc"}, ] [package.extras] -docs = ["furo (>=2023.3.27)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] +docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)"] [[package]] name = "pluggy" -version = "1.0.0" +version = "1.2.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, + {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, + {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, ] [package.extras] @@ -2436,14 +2365,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "prometheus-client" -version = "0.16.0" +version = "0.17.0" description = "Python client for the Prometheus monitoring system." -category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "prometheus_client-0.16.0-py3-none-any.whl", hash = "sha256:0836af6eb2c8f4fed712b2f279f6c0a8bbab29f9f4aa15276b91c7cb0d1616ab"}, - {file = "prometheus_client-0.16.0.tar.gz", hash = "sha256:a03e35b359f14dd1630898543e2120addfdeacd1a6069c1367ae90fd93ad3f48"}, + {file = "prometheus_client-0.17.0-py3-none-any.whl", hash = "sha256:a77b708cf083f4d1a3fb3ce5c95b4afa32b9c521ae363354a4a910204ea095ce"}, + {file = "prometheus_client-0.17.0.tar.gz", hash = "sha256:9c3b26f1535945e85b8934fb374678d263137b78ef85f305b1156c7c881cd11b"}, ] [package.extras] @@ -2451,14 +2379,13 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.38" +version = "3.0.39" description = "Library for building powerful interactive command lines in Python" -category = "main" optional = false python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.38-py3-none-any.whl", hash = "sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f"}, - {file = "prompt_toolkit-3.0.38.tar.gz", hash = "sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b"}, + {file = "prompt_toolkit-3.0.39-py3-none-any.whl", hash = "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88"}, + {file = "prompt_toolkit-3.0.39.tar.gz", hash = "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac"}, ] [package.dependencies] @@ -2468,7 +2395,6 @@ wcwidth = "*" name = "psutil" version = "5.9.5" description = "Cross-platform lib for process and system monitoring in Python." -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2495,7 +2421,6 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" -category = "main" optional = false python-versions = "*" files = [ @@ -2507,7 +2432,6 @@ files = [ name = "pure-eval" version = "0.2.2" description = "Safely evaluate AST nodes without side effects" -category = "main" optional = false python-versions = "*" files = [ @@ -2522,7 +2446,6 @@ tests = ["pytest"] name = "py" version = "1.11.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -2534,7 +2457,6 @@ files = [ name = "pycodestyle" version = "2.10.0" description = "Python style guide checker" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2546,7 +2468,6 @@ files = [ name = "pycparser" version = "2.21" description = "C parser in Python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2558,7 +2479,6 @@ files = [ name = "pygments" version = "2.15.1" description = "Pygments is a syntax highlighting package written in Python." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2571,14 +2491,13 @@ plugins = ["importlib-metadata"] [[package]] name = "pyparsing" -version = "3.0.9" +version = "3.1.0" description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "main" optional = false python-versions = ">=3.6.8" files = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, + {file = "pyparsing-3.1.0-py3-none-any.whl", hash = "sha256:d554a96d1a7d3ddaf7183104485bc19fd80543ad6ac5bdb6426719d766fb06c1"}, + {file = "pyparsing-3.1.0.tar.gz", hash = "sha256:edb662d6fe322d6e990b1594b5feaeadf806803359e3d4d42f11e295e588f0ea"}, ] [package.extras] @@ -2588,7 +2507,6 @@ diagrams = ["jinja2", "railroad-diagrams"] name = "pyrsistent" version = "0.19.3" description = "Persistent/Functional/Immutable data structures" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2623,14 +2541,13 @@ files = [ [[package]] name = "pytest" -version = "7.3.1" +version = "7.4.0" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.3.1-py3-none-any.whl", hash = "sha256:3799fa815351fea3a5e96ac7e503a96fa51cc9942c3753cda7651b93c1cfa362"}, - {file = "pytest-7.3.1.tar.gz", hash = "sha256:434afafd78b1d78ed0addf160ad2b77a30d35d4bdf8af234fe621919d9ed15e3"}, + {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, + {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, ] [package.dependencies] @@ -2642,13 +2559,12 @@ pluggy = ">=0.12,<2.0" tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-cases" version = "3.6.14" description = "Separate test code from test cases in pytest." -category = "dev" optional = false python-versions = "*" files = [ @@ -2662,14 +2578,13 @@ makefun = ">=1.9.5" [[package]] name = "pytest-cov" -version = "4.0.0" +version = "4.1.0" description = "Pytest plugin for measuring coverage." -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "pytest-cov-4.0.0.tar.gz", hash = "sha256:996b79efde6433cdbd0088872dbc5fb3ed7fe1578b68cdbba634f14bb8dd0470"}, - {file = "pytest_cov-4.0.0-py3-none-any.whl", hash = "sha256:2feb1b751d66a8bd934e5edfa2e961d11309dc37b73b0eabe73b5945fee20f6b"}, + {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, + {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, ] [package.dependencies] @@ -2681,14 +2596,13 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale [[package]] name = "pytest-mock" -version = "3.10.0" +version = "3.11.1" description = "Thin-wrapper around the mock package for easier use with pytest" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-mock-3.10.0.tar.gz", hash = "sha256:fbbdb085ef7c252a326fd8cdcac0aa3b1333d8811f131bdcc701002e1be7ed4f"}, - {file = "pytest_mock-3.10.0-py3-none-any.whl", hash = "sha256:f4c973eeae0282963eb293eb173ce91b091a79c1334455acfac9ddee8a1c784b"}, + {file = "pytest-mock-3.11.1.tar.gz", hash = "sha256:7f6b125602ac6d743e523ae0bfa71e1a697a2f5534064528c6ff84c2f7c2fc7f"}, + {file = "pytest_mock-3.11.1-py3-none-any.whl", hash = "sha256:21c279fff83d70763b05f8874cc9cfb3fcacd6d354247a976f9529d19f9acf39"}, ] [package.dependencies] @@ -2701,7 +2615,6 @@ dev = ["pre-commit", "pytest-asyncio", "tox"] name = "pytest-pycodestyle" version = "2.3.1" description = "pytest plugin to run pycodestyle" -category = "dev" optional = false python-versions = "~=3.7" files = [ @@ -2720,7 +2633,6 @@ tests = ["pytest-isort"] name = "pytest-randomly" version = "3.12.0" description = "Pytest plugin to randomly order tests and control random.seed." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2736,7 +2648,6 @@ pytest = "*" name = "python-dateutil" version = "2.8.2" description = "Extensions to the standard Python datetime module" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ @@ -2751,7 +2662,6 @@ six = ">=1.5" name = "python-json-logger" version = "2.0.7" description = "A python library adding a json log formatter" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2763,7 +2673,6 @@ files = [ name = "pytz" version = "2023.3" description = "World timezone definitions, modern and historical" -category = "main" optional = false python-versions = "*" files = [ @@ -2775,7 +2684,6 @@ files = [ name = "pywavelets" version = "1.4.1" description = "PyWavelets, wavelet transform module" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2813,7 +2721,6 @@ numpy = ">=1.17.3" name = "pywin32" version = "306" description = "Python for Window Extensions" -category = "main" optional = false python-versions = "*" files = [ @@ -2837,7 +2744,6 @@ files = [ name = "pywinpty" version = "2.0.10" description = "Pseudo terminal support for Windows from Python." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2853,7 +2759,6 @@ files = [ name = "pyyaml" version = "6.0" description = "YAML parser and emitter for Python" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2901,89 +2806,88 @@ files = [ [[package]] name = "pyzmq" -version = "25.0.2" +version = "25.1.0" description = "Python bindings for 0MQ" -category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "pyzmq-25.0.2-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:ac178e666c097c8d3deb5097b58cd1316092fc43e8ef5b5fdb259b51da7e7315"}, - {file = "pyzmq-25.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:659e62e1cbb063151c52f5b01a38e1df6b54feccfa3e2509d44c35ca6d7962ee"}, - {file = "pyzmq-25.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8280ada89010735a12b968ec3ea9a468ac2e04fddcc1cede59cb7f5178783b9c"}, - {file = "pyzmq-25.0.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9b5eeb5278a8a636bb0abdd9ff5076bcbb836cd2302565df53ff1fa7d106d54"}, - {file = "pyzmq-25.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a2e5fe42dfe6b73ca120b97ac9f34bfa8414feb15e00e37415dbd51cf227ef6"}, - {file = "pyzmq-25.0.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:827bf60e749e78acb408a6c5af6688efbc9993e44ecc792b036ec2f4b4acf485"}, - {file = "pyzmq-25.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7b504ae43d37e282301da586529e2ded8b36d4ee2cd5e6db4386724ddeaa6bbc"}, - {file = "pyzmq-25.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cb1f69a0a2a2b1aae8412979dd6293cc6bcddd4439bf07e4758d864ddb112354"}, - {file = "pyzmq-25.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2b9c9cc965cdf28381e36da525dcb89fc1571d9c54800fdcd73e3f73a2fc29bd"}, - {file = "pyzmq-25.0.2-cp310-cp310-win32.whl", hash = "sha256:24abbfdbb75ac5039205e72d6c75f10fc39d925f2df8ff21ebc74179488ebfca"}, - {file = "pyzmq-25.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6a821a506822fac55d2df2085a52530f68ab15ceed12d63539adc32bd4410f6e"}, - {file = "pyzmq-25.0.2-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:9af0bb0277e92f41af35e991c242c9c71920169d6aa53ade7e444f338f4c8128"}, - {file = "pyzmq-25.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:54a96cf77684a3a537b76acfa7237b1e79a8f8d14e7f00e0171a94b346c5293e"}, - {file = "pyzmq-25.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88649b19ede1cab03b96b66c364cbbf17c953615cdbc844f7f6e5f14c5e5261c"}, - {file = "pyzmq-25.0.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:715cff7644a80a7795953c11b067a75f16eb9fc695a5a53316891ebee7f3c9d5"}, - {file = "pyzmq-25.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:312b3f0f066b4f1d17383aae509bacf833ccaf591184a1f3c7a1661c085063ae"}, - {file = "pyzmq-25.0.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d488c5c8630f7e782e800869f82744c3aca4aca62c63232e5d8c490d3d66956a"}, - {file = "pyzmq-25.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:38d9f78d69bcdeec0c11e0feb3bc70f36f9b8c44fc06e5d06d91dc0a21b453c7"}, - {file = "pyzmq-25.0.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3059a6a534c910e1d5d068df42f60d434f79e6cc6285aa469b384fa921f78cf8"}, - {file = "pyzmq-25.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6526d097b75192f228c09d48420854d53dfbc7abbb41b0e26f363ccb26fbc177"}, - {file = "pyzmq-25.0.2-cp311-cp311-win32.whl", hash = "sha256:5c5fbb229e40a89a2fe73d0c1181916f31e30f253cb2d6d91bea7927c2e18413"}, - {file = "pyzmq-25.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:ed15e3a2c3c2398e6ae5ce86d6a31b452dfd6ad4cd5d312596b30929c4b6e182"}, - {file = "pyzmq-25.0.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:032f5c8483c85bf9c9ca0593a11c7c749d734ce68d435e38c3f72e759b98b3c9"}, - {file = "pyzmq-25.0.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:374b55516393bfd4d7a7daa6c3b36d6dd6a31ff9d2adad0838cd6a203125e714"}, - {file = "pyzmq-25.0.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:08bfcc21b5997a9be4fefa405341320d8e7f19b4d684fb9c0580255c5bd6d695"}, - {file = "pyzmq-25.0.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1a843d26a8da1b752c74bc019c7b20e6791ee813cd6877449e6a1415589d22ff"}, - {file = "pyzmq-25.0.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:b48616a09d7df9dbae2f45a0256eee7b794b903ddc6d8657a9948669b345f220"}, - {file = "pyzmq-25.0.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:d4427b4a136e3b7f85516c76dd2e0756c22eec4026afb76ca1397152b0ca8145"}, - {file = "pyzmq-25.0.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:26b0358e8933990502f4513c991c9935b6c06af01787a36d133b7c39b1df37fa"}, - {file = "pyzmq-25.0.2-cp36-cp36m-win32.whl", hash = "sha256:c8fedc3ccd62c6b77dfe6f43802057a803a411ee96f14e946f4a76ec4ed0e117"}, - {file = "pyzmq-25.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:2da6813b7995b6b1d1307329c73d3e3be2fd2d78e19acfc4eff2e27262732388"}, - {file = "pyzmq-25.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a35960c8b2f63e4ef67fd6731851030df68e4b617a6715dd11b4b10312d19fef"}, - {file = "pyzmq-25.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eef2a0b880ab40aca5a878933376cb6c1ec483fba72f7f34e015c0f675c90b20"}, - {file = "pyzmq-25.0.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:85762712b74c7bd18e340c3639d1bf2f23735a998d63f46bb6584d904b5e401d"}, - {file = "pyzmq-25.0.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:64812f29d6eee565e129ca14b0c785744bfff679a4727137484101b34602d1a7"}, - {file = "pyzmq-25.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:510d8e55b3a7cd13f8d3e9121edf0a8730b87d925d25298bace29a7e7bc82810"}, - {file = "pyzmq-25.0.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b164cc3c8acb3d102e311f2eb6f3c305865ecb377e56adc015cb51f721f1dda6"}, - {file = "pyzmq-25.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:28fdb9224a258134784a9cf009b59265a9dde79582fb750d4e88a6bcbc6fa3dc"}, - {file = "pyzmq-25.0.2-cp37-cp37m-win32.whl", hash = "sha256:dd771a440effa1c36d3523bc6ba4e54ff5d2e54b4adcc1e060d8f3ca3721d228"}, - {file = "pyzmq-25.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:9bdc40efb679b9dcc39c06d25629e55581e4c4f7870a5e88db4f1c51ce25e20d"}, - {file = "pyzmq-25.0.2-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:1f82906a2d8e4ee310f30487b165e7cc8ed09c009e4502da67178b03083c4ce0"}, - {file = "pyzmq-25.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:21ec0bf4831988af43c8d66ba3ccd81af2c5e793e1bf6790eb2d50e27b3c570a"}, - {file = "pyzmq-25.0.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abbce982a17c88d2312ec2cf7673985d444f1beaac6e8189424e0a0e0448dbb3"}, - {file = "pyzmq-25.0.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9e1d2f2d86fc75ed7f8845a992c5f6f1ab5db99747fb0d78b5e4046d041164d2"}, - {file = "pyzmq-25.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2e92ff20ad5d13266bc999a29ed29a3b5b101c21fdf4b2cf420c09db9fb690e"}, - {file = "pyzmq-25.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:edbbf06cc2719889470a8d2bf5072bb00f423e12de0eb9ffec946c2c9748e149"}, - {file = "pyzmq-25.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:77942243ff4d14d90c11b2afd8ee6c039b45a0be4e53fb6fa7f5e4fd0b59da39"}, - {file = "pyzmq-25.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ab046e9cb902d1f62c9cc0eca055b1d11108bdc271caf7c2171487298f229b56"}, - {file = "pyzmq-25.0.2-cp38-cp38-win32.whl", hash = "sha256:ad761cfbe477236802a7ab2c080d268c95e784fe30cafa7e055aacd1ca877eb0"}, - {file = "pyzmq-25.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:8560756318ec7c4c49d2c341012167e704b5a46d9034905853c3d1ade4f55bee"}, - {file = "pyzmq-25.0.2-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:ab2c056ac503f25a63f6c8c6771373e2a711b98b304614151dfb552d3d6c81f6"}, - {file = "pyzmq-25.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cca8524b61c0eaaa3505382dc9b9a3bc8165f1d6c010fdd1452c224225a26689"}, - {file = "pyzmq-25.0.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cfb9f7eae02d3ac42fbedad30006b7407c984a0eb4189a1322241a20944d61e5"}, - {file = "pyzmq-25.0.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5eaeae038c68748082137d6896d5c4db7927e9349237ded08ee1bbd94f7361c9"}, - {file = "pyzmq-25.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a31992a8f8d51663ebf79df0df6a04ffb905063083d682d4380ab8d2c67257c"}, - {file = "pyzmq-25.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6a979e59d2184a0c8f2ede4b0810cbdd86b64d99d9cc8a023929e40dce7c86cc"}, - {file = "pyzmq-25.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1f124cb73f1aa6654d31b183810febc8505fd0c597afa127c4f40076be4574e0"}, - {file = "pyzmq-25.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:65c19a63b4a83ae45d62178b70223adeee5f12f3032726b897431b6553aa25af"}, - {file = "pyzmq-25.0.2-cp39-cp39-win32.whl", hash = "sha256:83d822e8687621bed87404afc1c03d83fa2ce39733d54c2fd52d8829edb8a7ff"}, - {file = "pyzmq-25.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:24683285cc6b7bf18ad37d75b9db0e0fefe58404e7001f1d82bf9e721806daa7"}, - {file = "pyzmq-25.0.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4a4b4261eb8f9ed71f63b9eb0198dd7c934aa3b3972dac586d0ef502ba9ab08b"}, - {file = "pyzmq-25.0.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:62ec8d979f56c0053a92b2b6a10ff54b9ec8a4f187db2b6ec31ee3dd6d3ca6e2"}, - {file = "pyzmq-25.0.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:affec1470351178e892121b3414c8ef7803269f207bf9bef85f9a6dd11cde264"}, - {file = "pyzmq-25.0.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffc71111433bd6ec8607a37b9211f4ef42e3d3b271c6d76c813669834764b248"}, - {file = "pyzmq-25.0.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6fadc60970714d86eff27821f8fb01f8328dd36bebd496b0564a500fe4a9e354"}, - {file = "pyzmq-25.0.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:269968f2a76c0513490aeb3ba0dc3c77b7c7a11daa894f9d1da88d4a0db09835"}, - {file = "pyzmq-25.0.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f7c8b8368e84381ae7c57f1f5283b029c888504aaf4949c32e6e6fb256ec9bf0"}, - {file = "pyzmq-25.0.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25e6873a70ad5aa31e4a7c41e5e8c709296edef4a92313e1cd5fc87bbd1874e2"}, - {file = "pyzmq-25.0.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b733076ff46e7db5504c5e7284f04a9852c63214c74688bdb6135808531755a3"}, - {file = "pyzmq-25.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:a6f6ae12478fdc26a6d5fdb21f806b08fa5403cd02fd312e4cb5f72df078f96f"}, - {file = "pyzmq-25.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:67da1c213fbd208906ab3470cfff1ee0048838365135a9bddc7b40b11e6d6c89"}, - {file = "pyzmq-25.0.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:531e36d9fcd66f18de27434a25b51d137eb546931033f392e85674c7a7cea853"}, - {file = "pyzmq-25.0.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34a6fddd159ff38aa9497b2e342a559f142ab365576284bc8f77cb3ead1f79c5"}, - {file = "pyzmq-25.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b491998ef886662c1f3d49ea2198055a9a536ddf7430b051b21054f2a5831800"}, - {file = "pyzmq-25.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:5d496815074e3e3d183fe2c7fcea2109ad67b74084c254481f87b64e04e9a471"}, - {file = "pyzmq-25.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:56a94ab1d12af982b55ca96c6853db6ac85505e820d9458ac76364c1998972f4"}, - {file = "pyzmq-25.0.2.tar.gz", hash = "sha256:6b8c1bbb70e868dc88801aa532cae6bd4e3b5233784692b786f17ad2962e5149"}, + {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1a6169e69034eaa06823da6a93a7739ff38716142b3596c180363dee729d713d"}, + {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:19d0383b1f18411d137d891cab567de9afa609b214de68b86e20173dc624c101"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1e931d9a92f628858a50f5bdffdfcf839aebe388b82f9d2ccd5d22a38a789dc"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97d984b1b2f574bc1bb58296d3c0b64b10e95e7026f8716ed6c0b86d4679843f"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:154bddda2a351161474b36dba03bf1463377ec226a13458725183e508840df89"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cb6d161ae94fb35bb518b74bb06b7293299c15ba3bc099dccd6a5b7ae589aee3"}, + {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:90146ab578931e0e2826ee39d0c948d0ea72734378f1898939d18bc9c823fcf9"}, + {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:831ba20b660b39e39e5ac8603e8193f8fce1ee03a42c84ade89c36a251449d80"}, + {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3a522510e3434e12aff80187144c6df556bb06fe6b9d01b2ecfbd2b5bfa5c60c"}, + {file = "pyzmq-25.1.0-cp310-cp310-win32.whl", hash = "sha256:be24a5867b8e3b9dd5c241de359a9a5217698ff616ac2daa47713ba2ebe30ad1"}, + {file = "pyzmq-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:5693dcc4f163481cf79e98cf2d7995c60e43809e325b77a7748d8024b1b7bcba"}, + {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:13bbe36da3f8aaf2b7ec12696253c0bf6ffe05f4507985a8844a1081db6ec22d"}, + {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:69511d604368f3dc58d4be1b0bad99b61ee92b44afe1cd9b7bd8c5e34ea8248a"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a983c8694667fd76d793ada77fd36c8317e76aa66eec75be2653cef2ea72883"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:332616f95eb400492103ab9d542b69d5f0ff628b23129a4bc0a2fd48da6e4e0b"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58416db767787aedbfd57116714aad6c9ce57215ffa1c3758a52403f7c68cff5"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cad9545f5801a125f162d09ec9b724b7ad9b6440151b89645241d0120e119dcc"}, + {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d6128d431b8dfa888bf51c22a04d48bcb3d64431caf02b3cb943269f17fd2994"}, + {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b15247c49d8cbea695b321ae5478d47cffd496a2ec5ef47131a9e79ddd7e46c"}, + {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:442d3efc77ca4d35bee3547a8e08e8d4bb88dadb54a8377014938ba98d2e074a"}, + {file = "pyzmq-25.1.0-cp311-cp311-win32.whl", hash = "sha256:65346f507a815a731092421d0d7d60ed551a80d9b75e8b684307d435a5597425"}, + {file = "pyzmq-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b45d722046fea5a5694cba5d86f21f78f0052b40a4bbbbf60128ac55bfcc7b6"}, + {file = "pyzmq-25.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f45808eda8b1d71308c5416ef3abe958f033fdbb356984fabbfc7887bed76b3f"}, + {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b697774ea8273e3c0460cf0bba16cd85ca6c46dfe8b303211816d68c492e132"}, + {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b324fa769577fc2c8f5efcd429cef5acbc17d63fe15ed16d6dcbac2c5eb00849"}, + {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5873d6a60b778848ce23b6c0ac26c39e48969823882f607516b91fb323ce80e5"}, + {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f0d9e7ba6a815a12c8575ba7887da4b72483e4cfc57179af10c9b937f3f9308f"}, + {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:414b8beec76521358b49170db7b9967d6974bdfc3297f47f7d23edec37329b00"}, + {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:01f06f33e12497dca86353c354461f75275a5ad9eaea181ac0dc1662da8074fa"}, + {file = "pyzmq-25.1.0-cp36-cp36m-win32.whl", hash = "sha256:b5a07c4f29bf7cb0164664ef87e4aa25435dcc1f818d29842118b0ac1eb8e2b5"}, + {file = "pyzmq-25.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:968b0c737797c1809ec602e082cb63e9824ff2329275336bb88bd71591e94a90"}, + {file = "pyzmq-25.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47b915ba666c51391836d7ed9a745926b22c434efa76c119f77bcffa64d2c50c"}, + {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5af31493663cf76dd36b00dafbc839e83bbca8a0662931e11816d75f36155897"}, + {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5489738a692bc7ee9a0a7765979c8a572520d616d12d949eaffc6e061b82b4d1"}, + {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1fc56a0221bdf67cfa94ef2d6ce5513a3d209c3dfd21fed4d4e87eca1822e3a3"}, + {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:75217e83faea9edbc29516fc90c817bc40c6b21a5771ecb53e868e45594826b0"}, + {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3830be8826639d801de9053cf86350ed6742c4321ba4236e4b5568528d7bfed7"}, + {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3575699d7fd7c9b2108bc1c6128641a9a825a58577775ada26c02eb29e09c517"}, + {file = "pyzmq-25.1.0-cp37-cp37m-win32.whl", hash = "sha256:95bd3a998d8c68b76679f6b18f520904af5204f089beebb7b0301d97704634dd"}, + {file = "pyzmq-25.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:dbc466744a2db4b7ca05589f21ae1a35066afada2f803f92369f5877c100ef62"}, + {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:3bed53f7218490c68f0e82a29c92335daa9606216e51c64f37b48eb78f1281f4"}, + {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eb52e826d16c09ef87132c6e360e1879c984f19a4f62d8a935345deac43f3c12"}, + {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ddbef8b53cd16467fdbfa92a712eae46dd066aa19780681a2ce266e88fbc7165"}, + {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9301cf1d7fc1ddf668d0abbe3e227fc9ab15bc036a31c247276012abb921b5ff"}, + {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e23a8c3b6c06de40bdb9e06288180d630b562db8ac199e8cc535af81f90e64b"}, + {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4a82faae00d1eed4809c2f18b37f15ce39a10a1c58fe48b60ad02875d6e13d80"}, + {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c8398a1b1951aaa330269c35335ae69744be166e67e0ebd9869bdc09426f3871"}, + {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d40682ac60b2a613d36d8d3a0cd14fbdf8e7e0618fbb40aa9fa7b796c9081584"}, + {file = "pyzmq-25.1.0-cp38-cp38-win32.whl", hash = "sha256:33d5c8391a34d56224bccf74f458d82fc6e24b3213fc68165c98b708c7a69325"}, + {file = "pyzmq-25.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:c66b7ff2527e18554030319b1376d81560ca0742c6e0b17ff1ee96624a5f1afd"}, + {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:af56229ea6527a849ac9fb154a059d7e32e77a8cba27e3e62a1e38d8808cb1a5"}, + {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bdca18b94c404af6ae5533cd1bc310c4931f7ac97c148bbfd2cd4bdd62b96253"}, + {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b6b42f7055bbc562f63f3df3b63e3dd1ebe9727ff0f124c3aa7bcea7b3a00f9"}, + {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c2fc7aad520a97d64ffc98190fce6b64152bde57a10c704b337082679e74f67"}, + {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be86a26415a8b6af02cd8d782e3a9ae3872140a057f1cadf0133de685185c02b"}, + {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:851fb2fe14036cfc1960d806628b80276af5424db09fe5c91c726890c8e6d943"}, + {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2a21fec5c3cea45421a19ccbe6250c82f97af4175bc09de4d6dd78fb0cb4c200"}, + {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bad172aba822444b32eae54c2d5ab18cd7dee9814fd5c7ed026603b8cae2d05f"}, + {file = "pyzmq-25.1.0-cp39-cp39-win32.whl", hash = "sha256:4d67609b37204acad3d566bb7391e0ecc25ef8bae22ff72ebe2ad7ffb7847158"}, + {file = "pyzmq-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:71c7b5896e40720d30cd77a81e62b433b981005bbff0cb2f739e0f8d059b5d99"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cb27ef9d3bdc0c195b2dc54fcb8720e18b741624686a81942e14c8b67cc61a6"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c4fc2741e0513b5d5a12fe200d6785bbcc621f6f2278893a9ca7bed7f2efb7d"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fc34fdd458ff77a2a00e3c86f899911f6f269d393ca5675842a6e92eea565bae"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8751f9c1442624da391bbd92bd4b072def6d7702a9390e4479f45c182392ff78"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6581e886aec3135964a302a0f5eb68f964869b9efd1dbafdebceaaf2934f8a68"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5482f08d2c3c42b920e8771ae8932fbaa0a67dff925fc476996ddd8155a170f3"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7fbcafa3ea16d1de1f213c226005fea21ee16ed56134b75b2dede5a2129e62"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:adecf6d02b1beab8d7c04bc36f22bb0e4c65a35eb0b4750b91693631d4081c70"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d39e42a0aa888122d1beb8ec0d4ddfb6c6b45aecb5ba4013c27e2f28657765"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7018289b402ebf2b2c06992813523de61d4ce17bd514c4339d8f27a6f6809492"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9e68ae9864d260b18f311b68d29134d8776d82e7f5d75ce898b40a88df9db30f"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e21cc00e4debe8f54c3ed7b9fcca540f46eee12762a9fa56feb8512fd9057161"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f666ae327a6899ff560d741681fdcdf4506f990595201ed39b44278c471ad98"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f5efcc29056dfe95e9c9db0dfbb12b62db9c4ad302f812931b6d21dd04a9119"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:48e5e59e77c1a83162ab3c163fc01cd2eebc5b34560341a67421b09be0891287"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:108c96ebbd573d929740d66e4c3d1bdf31d5cde003b8dc7811a3c8c5b0fc173b"}, + {file = "pyzmq-25.1.0.tar.gz", hash = "sha256:80c41023465d36280e801564a69cbfce8ae85ff79b080e1913f6e90481fb8957"}, ] [package.dependencies] @@ -2991,14 +2895,13 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "requests" -version = "2.30.0" +version = "2.31.0" description = "Python HTTP for Humans." -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "requests-2.30.0-py3-none-any.whl", hash = "sha256:10e94cc4f3121ee6da529d358cdaeaff2f1c409cd377dbc72b825852f2f7e294"}, - {file = "requests-2.30.0.tar.gz", hash = "sha256:239d7d4458afcb28a692cdd298d87542235f4ca8d36d03a15bfc128a6559a2f4"}, + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, ] [package.dependencies] @@ -3015,7 +2918,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "rfc3339-validator" version = "0.1.4" description = "A pure python RFC3339 validator" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -3030,7 +2932,6 @@ six = "*" name = "rfc3986-validator" version = "0.1.1" description = "Pure python rfc3986 validator" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -3040,181 +2941,135 @@ files = [ [[package]] name = "scikit-image" -version = "0.20.0" +version = "0.21.0" description = "Image processing in Python" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "scikit_image-0.20.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3cec8c5e8412ee19642a916648144186eb6b60c39fb6608ab478b4d1a4575e25"}, - {file = "scikit_image-0.20.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:0ab378822fadc93db7e917a266d489ea33df3b42edfef197caaebbabbc2e4ecc"}, - {file = "scikit_image-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6797e3ef5fc53897bde131cfc3ceba6ce247d89cfe194fc8d3aba7f5c12aaf6"}, - {file = "scikit_image-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f667dcf01737248bc5bd0a99fad58475abeb6b6a8229aecee9fdb96cf988ae85"}, - {file = "scikit_image-0.20.0-cp310-cp310-win_amd64.whl", hash = "sha256:79a400ffe35fc7f64d1d043f3d043e062015689ad5637c35cd5569edae87ae13"}, - {file = "scikit_image-0.20.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:049d955869620453b9e0568c2da62c8fec47bf3714be48b5d46bbaebb91bdc1f"}, - {file = "scikit_image-0.20.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:a503ee85b444234ee88f34bf8674872dc37c6124ff60b7eb9242813de012ff4e"}, - {file = "scikit_image-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3943d7355d02b40c066fd87cd5fe1b4f6637a16448e62333c4191a65ebf40a1c"}, - {file = "scikit_image-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d719242ea7e7250d49e38d1e33c44c2dd59c3414ae085881d168b98cbb6059a"}, - {file = "scikit_image-0.20.0-cp311-cp311-win_amd64.whl", hash = "sha256:fdd1fd258e78c86e382fd687177431088a40880bd785e0ab40ee5f3794366710"}, - {file = "scikit_image-0.20.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1cd0486cb769d906307a3ec3884630be822d8ec2f41069e197336f904f584a33"}, - {file = "scikit_image-0.20.0-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:2e9026161d0a698f532352dda6455a0bc13b1c9d831ea9279726b59d064df574"}, - {file = "scikit_image-0.20.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c123e6b0677dc1697c04b5bf2efb7110bcca511b4bc6967a38fa395ae5edf44"}, - {file = "scikit_image-0.20.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76f2fd12b537daea806a078df9ea76f5cc5a529d5bd7c41d7d0a101e9c5f91c4"}, - {file = "scikit_image-0.20.0-cp38-cp38-win_amd64.whl", hash = "sha256:2118d610096754bca44b5d37328e1382e5fa7c6493803685100c9238e257d848"}, - {file = "scikit_image-0.20.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:13a5c1c81ee5bcb64ee8ca8f1a2cf371b0c4345ea6fb67c3052e1c6d5edbd936"}, - {file = "scikit_image-0.20.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:1794889d2dbb385c7ad5656363371ba0057b7a3335cda093a11415af84bb96e2"}, - {file = "scikit_image-0.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df14f8a55dae511749b081d9402ea215ea7c641bd6f74f06aa7b623e132817df"}, - {file = "scikit_image-0.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b856efc75e3051bea6d40a8ffcdaabd5682783ece1aa91c3f6777c3372a98ca1"}, - {file = "scikit_image-0.20.0-cp39-cp39-win_amd64.whl", hash = "sha256:a600374394b76b7fc260cef54e1be21047c4de0ecffb0b7f2f7392cd8ba16ffa"}, - {file = "scikit_image-0.20.0.tar.gz", hash = "sha256:2cd784fce18bd31d71ade62c6221440199ead03acf7544086261ee032264cf61"}, -] - -[package.dependencies] -imageio = ">=2.4.1" -lazy_loader = ">=0.1" + {file = "scikit_image-0.21.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:978ac3302252155a8556cdfe067bad2d18d5ccef4e91c2f727bc564ed75566bc"}, + {file = "scikit_image-0.21.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:82c22e008527e5ee26ab08e3ce919998ef164d538ff30b9e5764b223cfda06b1"}, + {file = "scikit_image-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd29d2631d3e975c377066acfc1f4cb2cc95e2257cf70e7fedfcb96441096e88"}, + {file = "scikit_image-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6c12925ceb9f3aede555921e26642d601b2d37d1617002a2636f2cb5178ae2f"}, + {file = "scikit_image-0.21.0-cp310-cp310-win_amd64.whl", hash = "sha256:1f538d4de77e4f3225d068d9ea2965bed3f7dda7f457a8f89634fa22ffb9ad8c"}, + {file = "scikit_image-0.21.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ec9bab6920ac43037d7434058b67b5778d42c60f67b8679239f48a471e7ed6f8"}, + {file = "scikit_image-0.21.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:a54720430dba833ffbb6dedd93d9f0938c5dd47d20ab9ba3e4e61c19d95f6f19"}, + {file = "scikit_image-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e40dd102da14cdadc09210f930b4556c90ff8f99cd9d8bcccf9f73a86c44245"}, + {file = "scikit_image-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff5719c7eb99596a39c3e1d9b564025bae78ecf1da3ee6842d34f6965b5f1474"}, + {file = "scikit_image-0.21.0-cp311-cp311-win_amd64.whl", hash = "sha256:146c3824253eee9ff346c4ad10cb58376f91aefaf4a4bb2fe11aa21691f7de76"}, + {file = "scikit_image-0.21.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4e1b09f81a99c9c390215929194847b3cd358550b4b65bb6e42c5393d69cb74a"}, + {file = "scikit_image-0.21.0-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:9f7b5fb4a22f0d5ae0fa13beeb887c925280590145cd6d8b2630794d120ff7c7"}, + {file = "scikit_image-0.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4814033717f0b6491fee252facb9df92058d6a72ab78dd6408a50f3915a88b8"}, + {file = "scikit_image-0.21.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b0d6ed6502cca0c9719c444caafa0b8cda0f9e29e01ca42f621a240073284be"}, + {file = "scikit_image-0.21.0-cp38-cp38-win_amd64.whl", hash = "sha256:9194cb7bc21215fde6c1b1e9685d312d2aa8f65ea9736bc6311126a91c860032"}, + {file = "scikit_image-0.21.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54df1ddc854f37a912d42bc724e456e86858107e94048a81a27720bc588f9937"}, + {file = "scikit_image-0.21.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:c01e3ab0a1fabfd8ce30686d4401b7ed36e6126c9d4d05cb94abf6bdc46f7ac9"}, + {file = "scikit_image-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ef5d8d1099317b7b315b530348cbfa68ab8ce32459de3c074d204166951025c"}, + {file = "scikit_image-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b1e96c59cab640ca5c5b22c501524cfaf34cbe0cb51ba73bd9a9ede3fb6e1d"}, + {file = "scikit_image-0.21.0-cp39-cp39-win_amd64.whl", hash = "sha256:9cffcddd2a5594c0a06de2ae3e1e25d662745a26f94fda31520593669677c010"}, +] + +[package.dependencies] +imageio = ">=2.27" +lazy_loader = ">=0.2" networkx = ">=2.8" numpy = ">=1.21.1" -packaging = ">=20.0" +packaging = ">=21" pillow = ">=9.0.1" PyWavelets = ">=1.1.1" -scipy = [ - {version = ">=1.8,<1.9.2", markers = "python_version <= \"3.9\""}, - {version = ">=1.8", markers = "python_version > \"3.9\""}, -] -tifffile = ">=2019.7.26" +scipy = ">=1.8" +tifffile = ">=2022.8.12" [package.extras] -build = ["Cython (>=0.29.24)", "build", "meson-python (>=0.13.0rc0)", "ninja", "numpy (>=1.21.1)", "packaging (>=20)", "pythran", "setuptools (>=67)", "wheel"] -data = ["pooch (>=1.3.0)"] -default = ["PyWavelets (>=1.1.1)", "imageio (>=2.4.1)", "lazy_loader (>=0.1)", "networkx (>=2.8)", "numpy (>=1.21.1)", "packaging (>=20.0)", "pillow (>=9.0.1)", "scipy (>=1.8)", "scipy (>=1.8,<1.9.2)", "tifffile (>=2019.7.26)"] +build = ["Cython (>=0.29.32)", "build", "meson-python (>=0.13)", "ninja", "numpy (>=1.21.1)", "packaging (>=21)", "pythran", "setuptools (>=67)", "spin (==0.3)", "wheel"] +data = ["pooch (>=1.6.0)"] +default = ["PyWavelets (>=1.1.1)", "imageio (>=2.27)", "lazy_loader (>=0.2)", "networkx (>=2.8)", "numpy (>=1.21.1)", "packaging (>=21)", "pillow (>=9.0.1)", "scipy (>=1.8)", "tifffile (>=2022.8.12)"] developer = ["pre-commit", "rtoml"] -docs = ["dask[array] (>=2022.9.2)", "ipywidgets", "kaleido", "matplotlib (>=3.6)", "myst-parser", "numpydoc (>=1.5)", "pandas (>=1.5)", "plotly (>=5.10)", "pooch (>=1.6)", "pytest-runner", "scikit-learn", "seaborn (>=0.11)", "sphinx (>=5.2)", "sphinx-copybutton", "sphinx-gallery (>=0.11)", "tifffile (>=2022.8.12)"] -optional = ["SimpleITK", "astropy (>=3.1.2)", "cloudpickle (>=0.2.1)", "dask[array] (>=1.0.0,!=2.17.0)", "matplotlib (>=3.3)", "pooch (>=1.3.0)", "pyamg"] -test = ["asv", "codecov", "matplotlib (>=3.3)", "pooch (>=1.3.0)", "pytest (>=5.2.0)", "pytest-cov (>=2.7.0)", "pytest-faulthandler", "pytest-localserver"] +docs = ["dask[array] (>=2022.9.2)", "ipykernel", "ipywidgets", "kaleido", "matplotlib (>=3.5)", "myst-parser", "numpydoc (>=1.5)", "pandas (>=1.5)", "plotly (>=5.10)", "pooch (>=1.6)", "pydata-sphinx-theme (>=0.13)", "pytest-runner", "scikit-learn (>=0.24.0)", "seaborn (>=0.11)", "sphinx (>=5.0)", "sphinx-copybutton", "sphinx-gallery (>=0.11)", "sphinx_design (>=0.3)", "tifffile (>=2022.8.12)"] +optional = ["SimpleITK", "astropy (>=5.0)", "cloudpickle (>=0.2.1)", "dask[array] (>=2021.1.0)", "matplotlib (>=3.5)", "pooch (>=1.6.0)", "pyamg", "scikit-learn (>=0.24.0)"] +test = ["asv", "matplotlib (>=3.5)", "pooch (>=1.6.0)", "pytest (>=7.0)", "pytest-cov (>=2.11.0)", "pytest-faulthandler", "pytest-localserver"] [[package]] name = "scikit-learn" -version = "1.2.2" +version = "1.3.0" description = "A set of python modules for machine learning and data mining" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "scikit-learn-1.2.2.tar.gz", hash = "sha256:8429aea30ec24e7a8c7ed8a3fa6213adf3814a6efbea09e16e0a0c71e1a1a3d7"}, - {file = "scikit_learn-1.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99cc01184e347de485bf253d19fcb3b1a3fb0ee4cea5ee3c43ec0cc429b6d29f"}, - {file = "scikit_learn-1.2.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:e6e574db9914afcb4e11ade84fab084536a895ca60aadea3041e85b8ac963edb"}, - {file = "scikit_learn-1.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fe83b676f407f00afa388dd1fdd49e5c6612e551ed84f3b1b182858f09e987d"}, - {file = "scikit_learn-1.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e2642baa0ad1e8f8188917423dd73994bf25429f8893ddbe115be3ca3183584"}, - {file = "scikit_learn-1.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ad66c3848c0a1ec13464b2a95d0a484fd5b02ce74268eaa7e0c697b904f31d6c"}, - {file = "scikit_learn-1.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dfeaf8be72117eb61a164ea6fc8afb6dfe08c6f90365bde2dc16456e4bc8e45f"}, - {file = "scikit_learn-1.2.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:fe0aa1a7029ed3e1dcbf4a5bc675aa3b1bc468d9012ecf6c6f081251ca47f590"}, - {file = "scikit_learn-1.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:065e9673e24e0dc5113e2dd2b4ca30c9d8aa2fa90f4c0597241c93b63130d233"}, - {file = "scikit_learn-1.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf036ea7ef66115e0d49655f16febfa547886deba20149555a41d28f56fd6d3c"}, - {file = "scikit_learn-1.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:8b0670d4224a3c2d596fd572fb4fa673b2a0ccfb07152688ebd2ea0b8c61025c"}, - {file = "scikit_learn-1.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9c710ff9f9936ba8a3b74a455ccf0dcf59b230caa1e9ba0223773c490cab1e51"}, - {file = "scikit_learn-1.2.2-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:2dd3ffd3950e3d6c0c0ef9033a9b9b32d910c61bd06cb8206303fb4514b88a49"}, - {file = "scikit_learn-1.2.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44b47a305190c28dd8dd73fc9445f802b6ea716669cfc22ab1eb97b335d238b1"}, - {file = "scikit_learn-1.2.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:953236889928d104c2ef14027539f5f2609a47ebf716b8cbe4437e85dce42744"}, - {file = "scikit_learn-1.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:7f69313884e8eb311460cc2f28676d5e400bd929841a2c8eb8742ae78ebf7c20"}, - {file = "scikit_learn-1.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8156db41e1c39c69aa2d8599ab7577af53e9e5e7a57b0504e116cc73c39138dd"}, - {file = "scikit_learn-1.2.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:fe175ee1dab589d2e1033657c5b6bec92a8a3b69103e3dd361b58014729975c3"}, - {file = "scikit_learn-1.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d5312d9674bed14f73773d2acf15a3272639b981e60b72c9b190a0cffed5bad"}, - {file = "scikit_learn-1.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea061bf0283bf9a9f36ea3c5d3231ba2176221bbd430abd2603b1c3b2ed85c89"}, - {file = "scikit_learn-1.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:6477eed40dbce190f9f9e9d0d37e020815825b300121307942ec2110302b66a3"}, + {file = "scikit-learn-1.3.0.tar.gz", hash = "sha256:8be549886f5eda46436b6e555b0e4873b4f10aa21c07df45c4bc1735afbccd7a"}, + {file = "scikit_learn-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:981287869e576d42c682cf7ca96af0c6ac544ed9316328fd0d9292795c742cf5"}, + {file = "scikit_learn-1.3.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:436aaaae2c916ad16631142488e4c82f4296af2404f480e031d866863425d2a2"}, + {file = "scikit_learn-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7e28d8fa47a0b30ae1bd7a079519dd852764e31708a7804da6cb6f8b36e3630"}, + {file = "scikit_learn-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae80c08834a473d08a204d966982a62e11c976228d306a2648c575e3ead12111"}, + {file = "scikit_learn-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:552fd1b6ee22900cf1780d7386a554bb96949e9a359999177cf30211e6b20df6"}, + {file = "scikit_learn-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:79970a6d759eb00a62266a31e2637d07d2d28446fca8079cf9afa7c07b0427f8"}, + {file = "scikit_learn-1.3.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:850a00b559e636b23901aabbe79b73dc604b4e4248ba9e2d6e72f95063765603"}, + {file = "scikit_learn-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee04835fb016e8062ee9fe9074aef9b82e430504e420bff51e3e5fffe72750ca"}, + {file = "scikit_learn-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d953531f5d9f00c90c34fa3b7d7cfb43ecff4c605dac9e4255a20b114a27369"}, + {file = "scikit_learn-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:151ac2bf65ccf363664a689b8beafc9e6aae36263db114b4ca06fbbbf827444a"}, + {file = "scikit_learn-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a885a9edc9c0a341cab27ec4f8a6c58b35f3d449c9d2503a6fd23e06bbd4f6a"}, + {file = "scikit_learn-1.3.0-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:9877af9c6d1b15486e18a94101b742e9d0d2f343d35a634e337411ddb57783f3"}, + {file = "scikit_learn-1.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c470f53cea065ff3d588050955c492793bb50c19a92923490d18fcb637f6383a"}, + {file = "scikit_learn-1.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd6e2d7389542eae01077a1ee0318c4fec20c66c957f45c7aac0c6eb0fe3c612"}, + {file = "scikit_learn-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:3a11936adbc379a6061ea32fa03338d4ca7248d86dd507c81e13af428a5bc1db"}, + {file = "scikit_learn-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:998d38fcec96584deee1e79cd127469b3ad6fefd1ea6c2dfc54e8db367eb396b"}, + {file = "scikit_learn-1.3.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:ded35e810438a527e17623ac6deae3b360134345b7c598175ab7741720d7ffa7"}, + {file = "scikit_learn-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e8102d5036e28d08ab47166b48c8d5e5810704daecf3a476a4282d562be9a28"}, + {file = "scikit_learn-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7617164951c422747e7c32be4afa15d75ad8044f42e7d70d3e2e0429a50e6718"}, + {file = "scikit_learn-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:1d54fb9e6038284548072df22fd34777e434153f7ffac72c8596f2d6987110dd"}, ] [package.dependencies] joblib = ">=1.1.1" numpy = ">=1.17.3" -scipy = ">=1.3.2" +scipy = ">=1.5.0" threadpoolctl = ">=2.0.0" [package.extras] benchmark = ["matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "pandas (>=1.0.5)"] -docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "plotly (>=5.10.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)", "sphinx (>=4.0.1)", "sphinx-gallery (>=0.7.0)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"] -examples = ["matplotlib (>=3.1.3)", "pandas (>=1.0.5)", "plotly (>=5.10.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)"] -tests = ["black (>=22.3.0)", "flake8 (>=3.8.2)", "matplotlib (>=3.1.3)", "mypy (>=0.961)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pytest (>=5.3.1)", "pytest-cov (>=2.9.0)", "scikit-image (>=0.16.2)"] +docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)", "sphinx (>=6.0.0)", "sphinx-copybutton (>=0.5.2)", "sphinx-gallery (>=0.10.1)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"] +examples = ["matplotlib (>=3.1.3)", "pandas (>=1.0.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)"] +tests = ["black (>=23.3.0)", "matplotlib (>=3.1.3)", "mypy (>=1.3)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.0.272)", "scikit-image (>=0.16.2)"] [[package]] name = "scipy" -version = "1.9.1" -description = "SciPy: Scientific Library for Python" -category = "main" -optional = false -python-versions = ">=3.8,<3.12" -files = [ - {file = "scipy-1.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c61b4a91a702e8e04aeb0bfc40460e1f17a640977c04dda8757efb0199c75332"}, - {file = "scipy-1.9.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d79da472015d0120ba9b357b28a99146cd6c17b9609403164b1a8ed149b4dfc8"}, - {file = "scipy-1.9.1-cp310-cp310-macosx_12_0_universal2.macosx_10_9_x86_64.whl", hash = "sha256:825951b88f56765aeb6e5e38ac9d7d47407cfaaeb008d40aa1b45a2d7ea2731e"}, - {file = "scipy-1.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f950a04b33e17b38ff561d5a0951caf3f5b47caa841edd772ffb7959f20a6af0"}, - {file = "scipy-1.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cc81ac25659fec73599ccc52c989670e5ccd8974cf34bacd7b54a8d809aff1a"}, - {file = "scipy-1.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:8d3faa40ac16c6357aaf7ea50394ea6f1e8e99d75e927a51102b1943b311b4d9"}, - {file = "scipy-1.9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7a412c476a91b080e456229e413792bbb5d6202865dae963d1e6e28c2bb58691"}, - {file = "scipy-1.9.1-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:eb954f5aca4d26f468bbebcdc5448348eb287f7bea536c6306f62ea062f63d9a"}, - {file = "scipy-1.9.1-cp38-cp38-macosx_12_0_universal2.macosx_10_9_x86_64.whl", hash = "sha256:3c6f5d1d4b9a5e4fe5e14f26ffc9444fc59473bbf8d45dc4a9a15283b7063a72"}, - {file = "scipy-1.9.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:bc4e2c77d4cd015d739e75e74ebbafed59ba8497a7ed0fd400231ed7683497c4"}, - {file = "scipy-1.9.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0419485dbcd0ed78c0d5bf234c5dd63e86065b39b4d669e45810d42199d49521"}, - {file = "scipy-1.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34441dfbee5b002f9e15285014fd56e5e3372493c3e64ae297bae2c4b9659f5a"}, - {file = "scipy-1.9.1-cp38-cp38-win32.whl", hash = "sha256:b97b479f39c7e4aaf807efd0424dec74bbb379108f7d22cf09323086afcd312c"}, - {file = "scipy-1.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:e8fe305d9d67a81255e06203454729405706907dccbdfcc330b7b3482a6c371d"}, - {file = "scipy-1.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:39ab9240cd215a9349c85ab908dda6d732f7d3b4b192fa05780812495536acc4"}, - {file = "scipy-1.9.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:71487c503e036740635f18324f62a11f283a632ace9d35933b2b0a04fd898c98"}, - {file = "scipy-1.9.1-cp39-cp39-macosx_12_0_universal2.macosx_10_9_x86_64.whl", hash = "sha256:3bc1ab68b9a096f368ba06c3a5e1d1d50957a86665fc929c4332d21355e7e8f4"}, - {file = "scipy-1.9.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f7c39f7dbb57cce00c108d06d731f3b0e2a4d3a95c66d96bce697684876ce4d4"}, - {file = "scipy-1.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47d1a95bd9d37302afcfe1b84c8011377c4f81e33649c5a5785db9ab827a6ade"}, - {file = "scipy-1.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96d7cf7b25c9f23c59a766385f6370dab0659741699ecc7a451f9b94604938ce"}, - {file = "scipy-1.9.1-cp39-cp39-win32.whl", hash = "sha256:09412eb7fb60b8f00b328037fd814d25d261066ebc43a1e339cdce4f7502877e"}, - {file = "scipy-1.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:90c805f30c46cf60f1e76e947574f02954d25e3bb1e97aa8a07bc53aa31cf7d1"}, - {file = "scipy-1.9.1.tar.gz", hash = "sha256:26d28c468900e6d5fdb37d2812ab46db0ccd22c63baa095057871faa3a498bc9"}, -] - -[package.dependencies] -numpy = ">=1.18.5,<1.25.0" - -[[package]] -name = "scipy" -version = "1.9.3" +version = "1.11.1" description = "Fundamental algorithms for scientific computing in Python" -category = "main" optional = false -python-versions = ">=3.8" +python-versions = "<3.13,>=3.9" files = [ - {file = "scipy-1.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1884b66a54887e21addf9c16fb588720a8309a57b2e258ae1c7986d4444d3bc0"}, - {file = "scipy-1.9.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:83b89e9586c62e787f5012e8475fbb12185bafb996a03257e9675cd73d3736dd"}, - {file = "scipy-1.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a72d885fa44247f92743fc20732ae55564ff2a519e8302fb7e18717c5355a8b"}, - {file = "scipy-1.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d01e1dd7b15bd2449c8bfc6b7cc67d630700ed655654f0dfcf121600bad205c9"}, - {file = "scipy-1.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:68239b6aa6f9c593da8be1509a05cb7f9efe98b80f43a5861cd24c7557e98523"}, - {file = "scipy-1.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b41bc822679ad1c9a5f023bc93f6d0543129ca0f37c1ce294dd9d386f0a21096"}, - {file = "scipy-1.9.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:90453d2b93ea82a9f434e4e1cba043e779ff67b92f7a0e85d05d286a3625df3c"}, - {file = "scipy-1.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83c06e62a390a9167da60bedd4575a14c1f58ca9dfde59830fc42e5197283dab"}, - {file = "scipy-1.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abaf921531b5aeaafced90157db505e10345e45038c39e5d9b6c7922d68085cb"}, - {file = "scipy-1.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:06d2e1b4c491dc7d8eacea139a1b0b295f74e1a1a0f704c375028f8320d16e31"}, - {file = "scipy-1.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5a04cd7d0d3eff6ea4719371cbc44df31411862b9646db617c99718ff68d4840"}, - {file = "scipy-1.9.3-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:545c83ffb518094d8c9d83cce216c0c32f8c04aaf28b92cc8283eda0685162d5"}, - {file = "scipy-1.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d54222d7a3ba6022fdf5773931b5d7c56efe41ede7f7128c7b1637700409108"}, - {file = "scipy-1.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cff3a5295234037e39500d35316a4c5794739433528310e117b8a9a0c76d20fc"}, - {file = "scipy-1.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:2318bef588acc7a574f5bfdff9c172d0b1bf2c8143d9582e05f878e580a3781e"}, - {file = "scipy-1.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d644a64e174c16cb4b2e41dfea6af722053e83d066da7343f333a54dae9bc31c"}, - {file = "scipy-1.9.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:da8245491d73ed0a994ed9c2e380fd058ce2fa8a18da204681f2fe1f57f98f95"}, - {file = "scipy-1.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4db5b30849606a95dcf519763dd3ab6fe9bd91df49eba517359e450a7d80ce2e"}, - {file = "scipy-1.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c68db6b290cbd4049012990d7fe71a2abd9ffbe82c0056ebe0f01df8be5436b0"}, - {file = "scipy-1.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:5b88e6d91ad9d59478fafe92a7c757d00c59e3bdc3331be8ada76a4f8d683f58"}, - {file = "scipy-1.9.3.tar.gz", hash = "sha256:fbc5c05c85c1a02be77b1ff591087c83bc44579c6d2bd9fb798bb64ea5e1a027"}, + {file = "scipy-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:aec8c62fbe52914f9cf28d846cf0401dd80ab80788bbab909434eb336ed07c04"}, + {file = "scipy-1.11.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:3b9963798df1d8a52db41a6fc0e6fa65b1c60e85d73da27ae8bb754de4792481"}, + {file = "scipy-1.11.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e8eb42db36526b130dfbc417609498a6192381abc1975b91e3eb238e0b41c1a"}, + {file = "scipy-1.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:366a6a937110d80dca4f63b3f5b00cc89d36f678b2d124a01067b154e692bab1"}, + {file = "scipy-1.11.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:08d957ca82d3535b3b9ba6c8ff355d78fe975271874e2af267cb5add5bd78625"}, + {file = "scipy-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:e866514bc2d660608447b6ba95c8900d591f2865c07cca0aa4f7ff3c4ca70f30"}, + {file = "scipy-1.11.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba94eeef3c9caa4cea7b402a35bb02a5714ee1ee77eb98aca1eed4543beb0f4c"}, + {file = "scipy-1.11.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:512fdc18c65f76dadaca139348e525646d440220d8d05f6d21965b8d4466bccd"}, + {file = "scipy-1.11.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cce154372f0ebe88556ed06d7b196e9c2e0c13080ecb58d0f35062dc7cc28b47"}, + {file = "scipy-1.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4bb943010203465ac81efa392e4645265077b4d9e99b66cf3ed33ae12254173"}, + {file = "scipy-1.11.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:249cfa465c379c9bb2c20123001e151ff5e29b351cbb7f9c91587260602c58d0"}, + {file = "scipy-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:ffb28e3fa31b9c376d0fb1f74c1f13911c8c154a760312fbee87a21eb21efe31"}, + {file = "scipy-1.11.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:39154437654260a52871dfde852adf1b93b1d1bc5dc0ffa70068f16ec0be2624"}, + {file = "scipy-1.11.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:b588311875c58d1acd4ef17c983b9f1ab5391755a47c3d70b6bd503a45bfaf71"}, + {file = "scipy-1.11.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d51565560565a0307ed06fa0ec4c6f21ff094947d4844d6068ed04400c72d0c3"}, + {file = "scipy-1.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b41a0f322b4eb51b078cb3441e950ad661ede490c3aca66edef66f4b37ab1877"}, + {file = "scipy-1.11.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:396fae3f8c12ad14c5f3eb40499fd06a6fef8393a6baa352a652ecd51e74e029"}, + {file = "scipy-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:be8c962a821957fdde8c4044efdab7a140c13294997a407eaee777acf63cbf0c"}, + {file = "scipy-1.11.1.tar.gz", hash = "sha256:fb5b492fa035334fd249f0973cc79ecad8b09c604b42a127a677b45a9a3d4289"}, ] [package.dependencies] -numpy = ">=1.18.5,<1.26.0" +numpy = ">=1.21.6,<1.28.0" [package.extras] -dev = ["flake8", "mypy", "pycodestyle", "typing_extensions"] -doc = ["matplotlib (>2)", "numpydoc", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-panels (>=0.5.2)", "sphinx-tabs"] -test = ["asv", "gmpy2", "mpmath", "pytest", "pytest-cov", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] +doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] +test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "seaborn" version = "0.12.2" description = "Statistical data visualization" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3236,7 +3091,6 @@ stats = ["scipy (>=1.3)", "statsmodels (>=0.10)"] name = "send2trash" version = "1.8.2" description = "Send file to trash natively under Mac OS X, Windows and Linux" -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ @@ -3251,26 +3105,24 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "67.7.2" +version = "68.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "setuptools-67.7.2-py3-none-any.whl", hash = "sha256:23aaf86b85ca52ceb801d32703f12d77517b2556af839621c641fca11287952b"}, - {file = "setuptools-67.7.2.tar.gz", hash = "sha256:f104fa03692a2602fa0fec6c6a9e63b6c8a968de13e17c026957dd1f53d80990"}, + {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, + {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -3282,7 +3134,6 @@ files = [ name = "sniffio" version = "1.3.0" description = "Sniff out which async library your code is running under" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3294,7 +3145,6 @@ files = [ name = "soupsieve" version = "2.4.1" description = "A modern CSS selector implementation for Beautiful Soup." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3306,7 +3156,6 @@ files = [ name = "stack-data" version = "0.6.2" description = "Extract data from python stack frames and tracebacks for informative displays" -category = "main" optional = false python-versions = "*" files = [ @@ -3326,7 +3175,6 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] name = "terminado" version = "0.17.1" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3347,7 +3195,6 @@ test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] name = "threadpoolctl" version = "3.1.0" description = "threadpoolctl" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -3357,14 +3204,13 @@ files = [ [[package]] name = "tifffile" -version = "2023.4.12" +version = "2023.7.4" description = "Read and write TIFF files" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "tifffile-2023.4.12-py3-none-any.whl", hash = "sha256:3161954746fe32c4f4244d0fb2eb0a272f3a3760b78882a42faa83ac5e6e0b74"}, - {file = "tifffile-2023.4.12.tar.gz", hash = "sha256:2fa99f9890caab919d932a0acaa9d0f5843dc2ef3594e212963932e20713badd"}, + {file = "tifffile-2023.7.4-py3-none-any.whl", hash = "sha256:f56d20ecce270f2ca5704ade578edfe4bf30158db96f50f5da39c816655311b8"}, + {file = "tifffile-2023.7.4.tar.gz", hash = "sha256:2f9ed41bb531832b5a32c35e241fcb5a0aa322323485f2a82afb7df78b900534"}, ] [package.dependencies] @@ -3377,7 +3223,6 @@ all = ["defusedxml", "fsspec", "imagecodecs (>=2023.1.23)", "lxml", "matplotlib" name = "tinycss2" version = "1.2.1" description = "A tiny CSS parser" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3396,7 +3241,6 @@ test = ["flake8", "isort", "pytest"] name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3406,30 +3250,28 @@ files = [ [[package]] name = "tornado" -version = "6.3.1" +version = "6.3.2" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -category = "main" optional = false python-versions = ">= 3.8" files = [ - {file = "tornado-6.3.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:db181eb3df8738613ff0a26f49e1b394aade05034b01200a63e9662f347d4415"}, - {file = "tornado-6.3.1-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b4e7b956f9b5e6f9feb643ea04f07e7c6b49301e03e0023eedb01fa8cf52f579"}, - {file = "tornado-6.3.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9661aa8bc0e9d83d757cd95b6f6d1ece8ca9fd1ccdd34db2de381e25bf818233"}, - {file = "tornado-6.3.1-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:81c17e0cc396908a5e25dc8e9c5e4936e6dfd544c9290be48bd054c79bcad51e"}, - {file = "tornado-6.3.1-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a27a1cfa9997923f80bdd962b3aab048ac486ad8cfb2f237964f8ab7f7eb824b"}, - {file = "tornado-6.3.1-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:d7117f3c7ba5d05813b17a1f04efc8e108a1b811ccfddd9134cc68553c414864"}, - {file = "tornado-6.3.1-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:ffdce65a281fd708da5a9def3bfb8f364766847fa7ed806821a69094c9629e8a"}, - {file = "tornado-6.3.1-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:90f569a35a8ec19bde53aa596952071f445da678ec8596af763b9b9ce07605e6"}, - {file = "tornado-6.3.1-cp38-abi3-win32.whl", hash = "sha256:3455133b9ff262fd0a75630af0a8ee13564f25fb4fd3d9ce239b8a7d3d027bf8"}, - {file = "tornado-6.3.1-cp38-abi3-win_amd64.whl", hash = "sha256:1285f0691143f7ab97150831455d4db17a267b59649f7bd9700282cba3d5e771"}, - {file = "tornado-6.3.1.tar.gz", hash = "sha256:5e2f49ad371595957c50e42dd7e5c14d64a6843a3cf27352b69c706d1b5918af"}, + {file = "tornado-6.3.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:c367ab6c0393d71171123ca5515c61ff62fe09024fa6bf299cd1339dc9456829"}, + {file = "tornado-6.3.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b46a6ab20f5c7c1cb949c72c1994a4585d2eaa0be4853f50a03b5031e964fc7c"}, + {file = "tornado-6.3.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2de14066c4a38b4ecbbcd55c5cc4b5340eb04f1c5e81da7451ef555859c833f"}, + {file = "tornado-6.3.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:05615096845cf50a895026f749195bf0b10b8909f9be672f50b0fe69cba368e4"}, + {file = "tornado-6.3.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b17b1cf5f8354efa3d37c6e28fdfd9c1c1e5122f2cb56dac121ac61baa47cbe"}, + {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:29e71c847a35f6e10ca3b5c2990a52ce38b233019d8e858b755ea6ce4dcdd19d"}, + {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:834ae7540ad3a83199a8da8f9f2d383e3c3d5130a328889e4cc991acc81e87a0"}, + {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6a0848f1aea0d196a7c4f6772197cbe2abc4266f836b0aac76947872cd29b411"}, + {file = "tornado-6.3.2-cp38-abi3-win32.whl", hash = "sha256:7efcbcc30b7c654eb6a8c9c9da787a851c18f8ccd4a5a3a95b05c7accfa068d2"}, + {file = "tornado-6.3.2-cp38-abi3-win_amd64.whl", hash = "sha256:0c325e66c8123c606eea33084976c832aa4e766b7dff8aedd7587ea44a604cdf"}, + {file = "tornado-6.3.2.tar.gz", hash = "sha256:4b927c4f19b71e627b13f3db2324e4ae660527143f9e1f2e2fb404f3a187e2ba"}, ] [[package]] name = "tqdm" version = "4.65.0" description = "Fast, Extensible Progress Meter" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3450,7 +3292,6 @@ telegram = ["requests"] name = "traitlets" version = "5.9.0" description = "Traitlets Python configuration system" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3464,41 +3305,49 @@ test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] [[package]] name = "typing-extensions" -version = "4.5.0" +version = "4.7.1" description = "Backported and Experimental Type Hints for Python 3.7+" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, - {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, +] + +[[package]] +name = "tzdata" +version = "2023.3" +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"}, ] [[package]] name = "uri-template" -version = "1.2.0" +version = "1.3.0" description = "RFC 6570 URI Template Processor" -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "uri_template-1.2.0-py3-none-any.whl", hash = "sha256:f1699c77b73b925cf4937eae31ab282a86dc885c333f2e942513f08f691fc7db"}, - {file = "uri_template-1.2.0.tar.gz", hash = "sha256:934e4d09d108b70eb8a24410af8615294d09d279ce0e7cbcdaef1bd21f932b06"}, + {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, + {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, ] [package.extras] -dev = ["flake8 (<4.0.0)", "flake8-annotations", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-noqa", "flake8-requirements", "flake8-type-annotations", "flake8-use-fstring", "mypy", "pep8-naming"] +dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] [[package]] name = "urllib3" -version = "2.0.2" +version = "2.0.3" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "urllib3-2.0.2-py3-none-any.whl", hash = "sha256:d055c2f9d38dc53c808f6fdc8eab7360b6fdbbde02340ed25cfbcd817c62469e"}, - {file = "urllib3-2.0.2.tar.gz", hash = "sha256:61717a1095d7e155cdb737ac7bb2f4324a858a1e2e6466f6d03ff630ca68d3cc"}, + {file = "urllib3-2.0.3-py3-none-any.whl", hash = "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1"}, + {file = "urllib3-2.0.3.tar.gz", hash = "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825"}, ] [package.extras] @@ -3511,7 +3360,6 @@ zstd = ["zstandard (>=0.18.0)"] name = "watchdog" version = "3.0.0" description = "Filesystem events monitoring" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3551,7 +3399,6 @@ watchmedo = ["PyYAML (>=3.10)"] name = "wcwidth" version = "0.2.6" description = "Measures the displayed width of unicode strings in a terminal" -category = "main" optional = false python-versions = "*" files = [ @@ -3563,7 +3410,6 @@ files = [ name = "webcolors" version = "1.13" description = "A library for working with the color formats defined by HTML and CSS." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3579,7 +3425,6 @@ tests = ["pytest", "pytest-cov"] name = "webencodings" version = "0.5.1" description = "Character encoding aliases for legacy web content" -category = "dev" optional = false python-versions = "*" files = [ @@ -3589,14 +3434,13 @@ files = [ [[package]] name = "websocket-client" -version = "1.5.1" +version = "1.6.1" description = "WebSocket client for Python with low level API options" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "websocket-client-1.5.1.tar.gz", hash = "sha256:3f09e6d8230892547132177f575a4e3e73cfdf06526e20cc02aa1c3b47184d40"}, - {file = "websocket_client-1.5.1-py3-none-any.whl", hash = "sha256:cdf5877568b7e83aa7cf2244ab56a3213de587bbe0ce9d8b9600fc77b455d89e"}, + {file = "websocket-client-1.6.1.tar.gz", hash = "sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd"}, + {file = "websocket_client-1.6.1-py3-none-any.whl", hash = "sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d"}, ] [package.extras] @@ -3606,26 +3450,38 @@ test = ["websockets"] [[package]] name = "widgetsnbextension" -version = "4.0.7" +version = "4.0.8" description = "Jupyter interactive widgets for Jupyter Notebook" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "widgetsnbextension-4.0.7-py3-none-any.whl", hash = "sha256:be3228a73bbab189a16be2d4a3cd89ecbd4e31948bfdc64edac17dcdee3cd99c"}, - {file = "widgetsnbextension-4.0.7.tar.gz", hash = "sha256:ea67c17a7cd4ae358f8f46c3b304c40698bc0423732e3f273321ee141232c8be"}, + {file = "widgetsnbextension-4.0.8-py3-none-any.whl", hash = "sha256:2e37f0ce9da11651056280c7efe96f2db052fe8fc269508e3724f5cbd6c93018"}, + {file = "widgetsnbextension-4.0.8.tar.gz", hash = "sha256:9ec291ba87c2dfad42c3d5b6f68713fa18be1acd7476569516b2431682315c17"}, ] +[[package]] +name = "win32-setctime" +version = "1.1.0" +description = "A small Python utility to set file creation time on Windows" +optional = false +python-versions = ">=3.5" +files = [ + {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, + {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"}, +] + +[package.extras] +dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] + [[package]] name = "xarray" -version = "2023.4.2" +version = "2023.6.0" description = "N-D labeled arrays and datasets in Python" -category = "main" optional = false python-versions = ">=3.9" files = [ - {file = "xarray-2023.4.2-py3-none-any.whl", hash = "sha256:1b6d577c1217ad6bf7458426af19ed7a489ab6c41220ca791f55f5df9648173a"}, - {file = "xarray-2023.4.2.tar.gz", hash = "sha256:958ec588220352343b910cbc05e54e7ab54d4e8c1c3a7783d6bfe7549d0bd0d2"}, + {file = "xarray-2023.6.0-py3-none-any.whl", hash = "sha256:bdd4c45511ab4e84f4249ea1030336db59b750968f25369d8e132d6d7ead7cc9"}, + {file = "xarray-2023.6.0.tar.gz", hash = "sha256:267a231ee4efc0341ebbffc6d4ec60e4a66e4849c16e0305c03fcefeca77698c"}, ] [package.dependencies] @@ -3645,7 +3501,6 @@ viz = ["matplotlib", "nc-time-axis", "seaborn"] name = "xmltodict" version = "0.13.0" description = "Makes working with XML feel like you are working with JSON" -category = "main" optional = false python-versions = ">=3.4" files = [ @@ -3657,7 +3512,6 @@ files = [ name = "y-py" version = "0.5.9" description = "Python bindings for the Y-CRDT built from yrs (Rust)" -category = "dev" optional = false python-versions = "*" files = [ @@ -3733,7 +3587,6 @@ files = [ name = "ypy-websocket" version = "0.8.2" description = "WebSocket connector for Ypy" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3753,7 +3606,6 @@ test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] name = "zipp" version = "3.15.0" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3767,5 +3619,5 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.0" -python-versions = "^3.9" -content-hash = "80560b3ed1dc640fb5b10966688a1811f351aa968d2094567b2f0d8a62a6770a" +python-versions = ">=3.9,<3.12" +content-hash = "2fe07f2c6eb19f355a5dd660202faf5465ebcc36ad7beb2212588b1ec62e1ea1" diff --git a/pyproject.toml b/pyproject.toml index 53259f9e..5a15e8ff 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,8 +36,8 @@ style = "pep440" metadata = false [tool.poetry.dependencies] -python = "^3.9" -alpineer = "0.1.7" +python = ">=3.9,<3.12" +alpineer = ">=0.1.9" mibi-bin-tools = "0.2.9" ipywidgets = "^8" numpy = "1.*" @@ -46,7 +46,8 @@ seaborn = "^0.12" scikit-learn = "^1" watchdog = "^3" tqdm = "^4" -pandas = "^1" +scipy = "^1.10.1" +pandas = "^2" [tool.poetry.group.test] optional = true @@ -69,6 +70,7 @@ black = "^22.10.0" isort = "^5.10.1" jupyterlab = "^3.6.1" jupyter-contrib-nbextensions = "^0.7.0" +loguru = "^0.7.0" ## TYPE CHECKING ## diff --git a/src/toffy/bin_extraction.py b/src/toffy/bin_extraction.py index 707c560d..3dbd400c 100644 --- a/src/toffy/bin_extraction.py +++ b/src/toffy/bin_extraction.py @@ -24,7 +24,6 @@ def extract_missing_fovs( extract_intensities (bool): whether to extract intensities from the bin files replace (bool): whether to replace pulse images with intensity """ - # retrieve all fov names from base_dir and extracted fovs from extraction_dir fovs = io_utils.remove_file_extensions(io_utils.list_files(bin_file_dir, substrs=".bin")) extracted_fovs = io_utils.list_folders(extraction_dir, substrs="fov") diff --git a/src/toffy/qc_comp.py b/src/toffy/qc_comp.py index 1bf6b6cb..339b1722 100644 --- a/src/toffy/qc_comp.py +++ b/src/toffy/qc_comp.py @@ -1,17 +1,24 @@ import copy +import itertools import os import pathlib +import re +from dataclasses import dataclass, field from shutil import rmtree -from typing import List, Optional, Union +from typing import Dict, List, Optional, Tuple, Union -import matplotlib.pyplot as plt +import natsort as ns import numpy as np +import numpy.ma as ma import pandas as pd -import seaborn as sns -import seaborn.objects as so +import xarray as xr from alpineer import image_utils, io_utils, load_utils, misc_utils +from numpy.ma import MaskedArray +from pandas.core.groupby import DataFrameGroupBy from requests.exceptions import HTTPError from scipy.ndimage import gaussian_filter +from scipy.stats import rankdata +from tqdm.auto import tqdm from toffy import settings from toffy.mibitracker_utils import MibiRequests, MibiTrackerError @@ -278,7 +285,7 @@ def compute_qc_metrics( Args: extracted_imgs_path (str): - the directory when extracted images are stored + the directory where extracted images are stored fov_name (str): the name of the FOV to extract from `bin_file_path`, needs to correspond with JSON name gaussian_blur (bool): @@ -291,8 +298,7 @@ def compute_qc_metrics( path to save csvs of the qc metrics to Returns: - None | Dict[str, pd.DataFrame]: - If save_csv is False, returns qc metrics. Otherwise, no return + None """ # path validation checks @@ -325,10 +331,6 @@ def compute_qc_metrics_direct(image_data, fov_name, gaussian_blur=False, blur_fa set to 0 to use raw inputs without Gaussian blurring ignored if `gaussian_blur` set to `False` - Returns: - Dict[str, pd.DataFrame]: - Returns qc metrics - """ # there's only 1 FOV and 1 type ('pulse'), so subset on that @@ -418,129 +420,500 @@ def combine_qc_metrics(qc_metrics_dir): metric_df.to_csv(os.path.join(qc_metrics_dir, "combined_%s.csv" % ms), index=False) -def visualize_qc_metrics( - metric_name: str, - qc_metric_dir: Union[str, pathlib.Path], - save_dir: Union[str, pathlib.Path], - channel_filters: Optional[List[str]] = ["chan_"], - axes_font_size: int = 16, - wrap: int = 6, - dpi: int = 300, - return_plot: bool = False, -) -> Optional[sns.FacetGrid]: +def format_img_data(img_data): + """Formats the image array from load_imgs_from_tree to be same structure as the array returned + by extract_bin_files. Works for one FOV data at a time. + Args: + img_data (str): current image data array as produced by load function + Returns: + xarray.DataArray: image data array with shape [fov, type, x, y, channel] + """ + + # add type dimension + img_data = img_data.assign_coords(type="pulse") + img_data = img_data.expand_dims("type", 1) + + # edit dimension names + img_data = img_data.rename({"fovs": "fov", "rows": "x", "cols": "y", "channels": "channel"}) + + return img_data + + +def qc_filtering(qc_metrics: List[str]) -> Tuple[List[str], List[str]]: + """ + Filters the QC columns and suffixes based on the user specified QC metrics, + then sorts the suffixes w.r.t the columns. Refer to `settings.py` for the + Column and Suffixes available. + + Args: + qc_metrics (List[str]): A list of QC metrics to use. Options include: + + - `"Non-zero mean intensity"` + - `"Total intensity"` + - `"99.9% intensity value"` + + + Returns: + Tuple[List[str], List[str]]: Returns the QC Columns and the QC Suffixes + """ + # Filter out unused QC columns and suffixes + if qc_metrics is not None: + selected_qcs: List[bool] = [qcm in qc_metrics for qcm in settings.QC_COLUMNS] + qc_cols = list(itertools.compress(settings.QC_COLUMNS, selected_qcs)) + qc_suffixes = list(itertools.compress(settings.QC_SUFFIXES, selected_qcs)) + else: + qc_cols: List[str] = settings.QC_COLUMNS + qc_suffixes: List[str] = settings.QC_SUFFIXES + + return qc_cols, qc_suffixes + + +def _channel_filtering( + df: pd.DataFrame, channel_include: List[str] = None, channel_exclude: List[str] = None +) -> pd.DataFrame: """ - Visualize the barplot of a specific QC metric. + Filters the DataFrame based on the included and excluded channels. In addition + the default ignored channels; Au, Fe, Na, Ta, Noodle, are removed. Args: - metric_name (str): - The name of the QC metric to plot. Used as the y-axis label. Options include: - `"Non-zero mean intensity"`, `"Total intensity"`, `"99.9% intensity value"`. - qc_metric_dir (Union[str, pathlib.Path]): - The path to the directory containing the `'combined_{qc_metric}.csv'` files - save_dir (Optional[Union[str, pathlib.Path]], optional): - The name of the directory to save the plot to. Defaults to None. - channel_filters (List[str], optional): - A list of channels to filter out. - axes_font_size (int, optional): - The font size of the axes labels. Defaults to 16. - wrap (int, optional): - The number of plots to display per row. Defaults to 6. - dpi (Optional[int], optional): - The resolution of the image to use for saving. Defaults to None. - return_plot (bool): - If `True`, this will return the plot. Defaults to `False` - - Raises: - ValueError: - When an invalid metric is provided. - FileNotFoundError: - The QC metric directory `qc_metric_dir` does not exist. - FileNotFoundError: - The QC metric `combined_csv` file is does not exist in `qc_metric_dir`. + df (pd.DataFrame): The DataFrame to filter. + channel_include (List[str], optional): A list of channels to include. Defaults to None. + channel_exclude (List[str], optional): A list of channels to exclude. Defaults to None. Returns: - Optional[sns.FacetGrid]: Returns the Seaborn FacetGrid catplot of the QC metrics. + pd.DataFrame: The filtered DataFrame. """ - # verify the metric provided is valid - if metric_name not in settings.QC_COLUMNS: - raise ValueError( - "Invalid metric %s provided, must be set to 'Non-zero mean intensity', " - "'Total intensity', or '99.9%% intensity value'" % metric_name + + if ( + isinstance(channel_include, list) + and isinstance(channel_exclude, list) + and not set(channel_exclude).isdisjoint(set(channel_include)) + ): + raise ValueError("You cannot include and exclude the same channel.") + + # Filter out the default ignored channels + df = df[~df["channel"].isin(settings.QC_CHANNEL_IGNORE)] + + # Remove the excluded channels + # If a channel does not exist, it is ignored + if channel_exclude is not None: + df: pd.DataFrame = df[~df["channel"].isin(channel_exclude)] + + # Then filter the excluded channels + # If a channel does not exist, it is ignored + if channel_include is not None: + df: pd.DataFrame = df[df["channel"].isin(channel_include)] + return df + + +@dataclass +class QCTMA: + """ + Computes the QC metrics for a given list of TMAs of interest and saves TMA specific QC files + in the `qc_tma_metrics_dir` directory. + + + Args: + cohort_path (Union[str,pathlib.Path]): The directory where the extracted images are + stored. + qc_tma_metrics_dir (Union[str, pathlib.path]): The directory where to save the QC TMA + metrics. + qc_metrics (List[str]): A list of QC metrics to use. Options include: + + - `"Non-zero mean intensity"` + - `"Total intensity"` + - `"99.9% intensity value"` + + Attributes: + qc_cols (List[str]): A list of the QC columns. + qc_suffixes (List[str]): A list of the QC suffixes, ordered w.r.t `qc_cols`. + search_term (re.Pattern): The regex pattern to extract n,m from FOV names of the form RnCm. + tma_avg_ranks (Dict[str, xr.DataArray]): A dictionary containing the average ranks for each + TMA for each QC Metric in `qc_metrics`. + """ + + qc_metrics: Optional[List[str]] + cohort_path: Union[str, pathlib.Path] + metrics_dir: Union[str, pathlib.Path] + + # Fields initialized after `__post_init__` + search_term: re.Pattern = field(init=False) + qc_cols: List[str] = field(init=False) + qc_suffixes: List[str] = field(init=False) + + # Set by methods + tma_avg_ranks: Dict[str, xr.DataArray] = field(init=False) + + def __post_init__(self): + # Input validation: Ensure that the paths exist + io_utils.validate_paths([self.cohort_path, self.metrics_dir]) + + self.qc_cols, self.qc_suffixes = qc_filtering(qc_metrics=self.qc_metrics) + + # Create regex pattern for searching RnCm + self.search_term: re.Pattern = re.compile(r"R\+?(\d+)C\+?(\d+)") + + # Set the tma_avg_ranks to be an empty dictionary + self.tma_avg_ranks = {} + + def _get_r_c(self, fov_name: pd.Series) -> pd.Series: + """Extracts the row and column value from a FOV's name containing RnCm. + + Args: + fov_name (pd.Series): The FOV's name. + Returns: + pd.Series: Returns `n` and `m` as a series of integers. + """ + r, c = map(int, re.search(self.search_term, fov_name).group(1, 2)) + return pd.Series([r, c]) + + def _create_r_c_tma_matrix( + self, group: DataFrameGroupBy, n_cols: int, n_rows: int, qc_col: str + ) -> pd.Series: + """ + Ranks all FOVS for a given channel and creates a matrix of size `n_rows` by `n_cols` + as the TMA grid. + + + Args: + group (DataFrameGroupBy): Each group consists of an individual channel, and all of it's + associated FOVs. + n_cols (int): The number of columns in the matrix. + n_rows (int): The number of rows in the matrix. + qc_col (str): The column to get the the QC data. + + Returns: + pd.Series[np.ndarray]: Returns the a series containing the ranked matrix. + """ + + rc_array: np.ndarray = np.full(shape=(n_cols, n_rows), fill_value=np.nan) + rc_array[group["column"] - 1, group["row"] - 1] = group[qc_col].rank() + + return pd.Series([rc_array]) + + def compute_qc_tma_metrics(self, tmas: List[str]): + """ + Calculates the QC metrics for a user specified list of TMAs. + + Args: + tmas (List[str]): The FOVs with the TMA in the folder name to gather. + """ + with tqdm( + total=len(tmas), desc="Computing QC TMA Metrics", unit="TMA", leave=True + ) as tma_pbar: + for tma in tmas: + self._compute_qc_tma_metrics(tma=tma) + tma_pbar.set_postfix(TMA=tma) + tma_pbar.update(n=1) + + def _compute_qc_tma_metrics(self, tma: str): + """ + Computes the FOV QC metrics for all FOVs in a given TMA. + If the QC metrics have already been computed, then + + Args: + tma (str): The TMA to compute the QC metrics for. + """ + + # cannot use `io_utils.list_folders` because it cannot do a partial "exact match" + # i.e. if we want to match `tma_1_Rn_Cm` but not `tma_10_Rn_Cm`, `io_utils.list_folders` + # will return both for `tma_1` + fovs: List[str] = ns.natsorted( + seq=(p.name for p in pathlib.Path(self.cohort_path).glob(f"{tma}_*")) ) - # verify the path to the QC metric datasets exist - if not os.path.exists(qc_metric_dir): - raise FileNotFoundError("qc_metric_dir %s does not exist" % qc_metric_dir) + # Compute the QC metrics + with tqdm(fovs, desc="Computing QC Metrics", unit="FOV", leave=False) as pbar: + for fov in pbar: + # Gather the qc tma files for the current fov if they exist + pre_computed_metrics = filter( + lambda f: "combined" not in f, + io_utils.list_files( + dir_name=self.metrics_dir, + substrs=[f"{fov}_{qc_suffix}.csv" for qc_suffix in self.qc_suffixes], + ), + ) - # get the file name of the combined QC metric .csv file to use - qc_metric_index = settings.QC_COLUMNS.index(metric_name) - qc_metric_suffix = settings.QC_SUFFIXES[qc_metric_index] - qc_metric_path = os.path.join(qc_metric_dir, "combined_%s.csv" % qc_metric_suffix) + # only compute if any QC files are missing for the current fov + if len(list(pre_computed_metrics)) != len(self.qc_cols): + compute_qc_metrics( + extracted_imgs_path=self.cohort_path, + fov_name=fov, + save_csv=self.metrics_dir, + ) + pbar.set_postfix(FOV=fov, status="Computing") + else: + pbar.set_postfix(FOV=fov, status="Already Computed") + + # Generate the combined metrics for each TMA + for qc_suffix in self.qc_suffixes: + metric_files: List[str] = ns.natsorted( + ( + io_utils.list_files( + dir_name=self.metrics_dir, + substrs=[f"{fov}_{qc_suffix}.csv" for fov in fovs], + ) + ) + ) + + # Define an aggregated metric DataFrame + combined_metric_tissue_df: pd.DataFrame = pd.concat( + (pd.read_csv(os.path.join(self.metrics_dir, mf)) for mf in metric_files) + ) + + combined_metric_tissue_df.to_csv( + os.path.join(self.metrics_dir, f"{tma}_combined_{qc_suffix}.csv"), + index=False, + ) - # ensure the user set the right qc_metric_dir - if not os.path.exists(qc_metric_path): - raise FileNotFoundError( - "Could not locate %s, ensure qc_metric_dir is correct" % qc_metric_path + def qc_tma_metrics_rank(self, tmas: List[str], channel_exclude: List[str] = None): + """ + Creates the average rank for a given TMA across all FOVs and unexcluded channels. + By default the following channels are excluded: Au, Fe, Na, Ta, Noodle. + + + Args: + tmas (List[str]): The FOVs withmetet the TMA in the folder name to gather. + channel_exclude (List[str], optional): An optional list of channels to further filter + out. Defaults to None. + """ + + with tqdm(total=len(tmas), desc="Computing QC TMA Metric Ranks", unit="TMA") as pbar: + for tma in tmas: + self.tma_avg_ranks[tma] = self._compute_qc_tma_metrics_rank( + tma, channel_exclude=channel_exclude + ) + pbar.set_postfix(TMA=tma) + pbar.update() + + def _compute_qc_tma_metrics_rank( + self, + tma: str, + channel_exclude: List[str] = None, + ) -> xr.DataArray: + """ + Creates the average rank for a given TMA across all FOVs and unexcluded channels. + By default the following channels are excluded: Au, Fe, Na, Ta, Noodle. + + + Args: + tma (str): The TMA to compute the average rank for. + channel_exclude (List[str], optional): An optional list of channels to further filter + out. Defaults to None. + + Returns: + xr.DataArray: An xarray DataArray containing the average rank for each channel across + a TMA. + """ + + # Sort the loaded combined csv files based on the filtered `qc_suffixes` + combined_metric_tmas: List[str] = ns.natsorted( + io_utils.list_files(self.metrics_dir, substrs=f"{tma}_combined"), + key=lambda tma_mf: (i for i, qc_s in enumerate(self.qc_suffixes) if qc_s in tma_mf), ) - # read in the QC metric data - qc_metric_df = pd.read_csv(qc_metric_path) - - # filter out naturally-occurring elements as well as Noodle - qc_metric_df = qc_metric_df[~qc_metric_df["channel"].isin(settings.QC_CHANNEL_IGNORE)] - - # filter out any channel in the channel_filters list - if channel_filters is not None: - qc_metric_df: pd.DataFrame = qc_metric_df[ - ~qc_metric_df["channel"].str.contains("|".join(channel_filters)) - ] - - # catplot allows for easy facets on a barplot - qc_fg: sns.FacetGrid = sns.catplot( - x="fov", - y=metric_name, - col="channel", - col_wrap=wrap, - data=qc_metric_df, - kind="bar", - color="black", - sharex=True, - sharey=False, - ) + ranked_channels_matrix = [] + n_cols: int = None + n_rows: int = None - # remove the 'channel =' in each subplot title - qc_fg.set_titles(template="{col_name}") - qc_fg.figure.supxlabel(t="fov", x=0.5, y=0, ha="center", size=axes_font_size) - qc_fg.figure.supylabel(t=f"{metric_name}", x=0, y=0.5, va="center", size=axes_font_size) - qc_fg.set(xticks=[]) + for cmt, qc_col in zip(combined_metric_tmas, self.qc_cols): + # Open and filter the default ignored channels, along with the user specified channels + cmt_df: pd.DataFrame = _channel_filtering( + df=pd.read_csv(os.path.join(self.metrics_dir, cmt)), channel_exclude=channel_exclude + ) - # per Erin's visualization remove the default axis title on the y-axis - # and instead show 'fov' along x-axis and the metric name along the y-axis (overarching) - qc_fg.set_axis_labels(x_var="", y_var="") - qc_fg.set_xticklabels([]) + cmt_df[["column", "row"]] = cmt_df["fov"].apply(self._get_r_c) - # save the figure always - # Return the figure if specified. - qc_fg.savefig(os.path.join(save_dir, f"{metric_name}_barplot_stats.png"), dpi=dpi) + # Get matrix dimensions + n_cols = cmt_df["column"].max() + n_rows = cmt_df["row"].max() - if return_plot: - return qc_fg + # Rank all FOVs per channel, and then create the heatmap matrix + ranked_channel_tmas: pd.DataFrame = cmt_df.groupby(by="channel", sort=True).apply( + lambda group: self._create_r_c_tma_matrix(group, n_cols, n_rows, qc_col) + ) + ranked_channel_matrices: np.ndarray = np.array( + [c_tma[0] for c_tma in ranked_channel_tmas.values], + ) + avg_rank = np.mean(ranked_channel_matrices, axis=0) + + ranked_channels_matrix.append(avg_rank) + + return xr.DataArray( + data=np.stack(ranked_channels_matrix), + coords=[self.qc_cols, np.arange(n_cols), np.arange(n_rows)], + dims=["qc_col", "cols", "rows"], + ) + + +@dataclass +class QCControlMetrics: + """ + Computes QC Metrics for a set of control sample FOVs across various runs, and saves the QC + files in the `longitudinal_control_metrics_dir`. -def format_img_data(img_data): - """Formats the image array from load_imgs_from_tree to be same structure as the array returned - by extract_bin_files. Works for one FOV data at a time. Args: - img_data (str): current image data array as produced by load function - Returns: - xarray.DataArray: image data array with shape [fov, type, x, y, channel] + cohort_path (Union[str,pathlib.Path]): The directory where the extracted images are + stored for the control FOVs. + longitudinal_control_metrics_dir (Union[str, pathlib.Path]): The directory where to save + the QC Control metrics. + qc_metrics (List[str]): A list of QC metrics to use. Options include: + + - `"Non-zero mean intensity"` + - `"Total intensity"` + - `"99.9% intensity value"` + + Attributes: + qc_cols (List[str]): A list of the QC columns. + qc_suffixes (List[str]): A list of the QC suffixes, ordered w.r.t `qc_cols`. """ - # add type dimension - img_data = img_data.assign_coords(type="pulse") - img_data = img_data.expand_dims("type", 1) + qc_metrics: Optional[List[str]] + cohort_path: Union[str, pathlib.Path] + metrics_dir: Union[str, pathlib.Path] + + # Fields initialized after `__post_init__` + qc_cols: List[str] = field(init=False) + qc_suffixes: List[str] = field(init=False) + longitudinal_control_metrics: Dict[Tuple[str, str], pd.DataFrame] = field(init=False) + + def __post_init__(self): + # Input validation: Ensure that the paths exist + io_utils.validate_paths([self.cohort_path, self.metrics_dir]) + + self.qc_cols, self.qc_suffixes = qc_filtering(qc_metrics=self.qc_metrics) + + self.longitudinal_control_metrics = {} + + def compute_control_qc_metrics( + self, + control_sample_name: str, + fovs: List[str], + channel_exclude: List[str] = None, + channel_include: List[str] = None, + ) -> None: + """ + Computes QC metrics for a set of Control Sample FOVs and saves their QC files in the + `longitudinal_control_metrics_dir`. Calculates the following metrics for the specified + control samples: + - `"Non-zero mean intensity"` + - `"Total intensity"` + - `"99.9% intensity value"` + + Args: + control_sample_name (str): An identifier for naming the control sample. + fovs (List[str]): A list of control samples to find QC metrics for. + channel_exclude (List[str], optional): A list of channels to exclude. Defaults to None. + channel_include (List[str], optional): A list of channels to include. Defaults to None. + + + Raises: + ValueError: Errors if `tissues` is either None, or a list of size 0. + """ + if fovs is None or not isinstance(fovs, list): + raise ValueError("The tissues must be specified as a list of strings") + + with tqdm( + total=len(fovs), + desc=f"Computing QC Longitudinal Control metrics - {control_sample_name}", + unit="FOVs", + ) as pbar: + for fov in ns.natsorted(fovs): + # Gather the qc files for the current fov if they exist + pre_computed_metrics = filter( + lambda f: "combined" not in f, + io_utils.list_files( + dir_name=self.metrics_dir, + substrs=[f"{fov}_{qc_suffix}.csv" for qc_suffix in self.qc_suffixes], + ), + ) - # edit dimension names - img_data = img_data.rename({"fovs": "fov", "rows": "x", "cols": "y", "channels": "channel"}) + if len(list(pre_computed_metrics)) != len(self.qc_cols): + compute_qc_metrics( + extracted_imgs_path=self.cohort_path, + fov_name=fov, + save_csv=self.metrics_dir, + ) + pbar.set_postfix(FOV=fov, status="Computing") + else: + pbar.set_postfix(FOV=fov, status="Already Computed") + pbar.update() + + # Combine metrics for the set of FOVs into a single file per QC metric + for qc_col, qc_suffix in zip(self.qc_cols, self.qc_suffixes): + metric_files = filter( + lambda f: "combined" not in f, + io_utils.list_files( + dir_name=self.metrics_dir, + substrs=[f"{fov}_{qc_suffix}.csv" for fov in fovs], + ), + ) - return img_data + # Define an aggregated metric DataFrame, and filter channels + combined_lc_df: pd.DataFrame = _channel_filtering( + df=pd.concat( + (pd.read_csv(os.path.join(self.metrics_dir, mf)) for mf in metric_files), + ), + channel_include=channel_include, + channel_exclude=channel_exclude, + ) + + self.longitudinal_control_metrics.update( + {(control_sample_name, qc_col): combined_lc_df} + ) + + combined_lc_df.to_csv( + os.path.join(self.metrics_dir, f"{control_sample_name}_combined_{qc_suffix}.csv"), + index=False, + ) + + def transformed_control_effects_data( + self, control_sample_name: str, qc_metric: str + ) -> pd.DataFrame: + """ + Creates a transformed DataFrame for the Longitudinal Control effects data, normalizing by the mean, + then taking the `log2` of each value. + + Args: + control_sample_name (str): A control sample to tranform the longitudinal control effects for. + qc_metric (str): The metric to transform. + + Returns: + pd.DataFrame: The transformed QC Longitudinal Control data. + """ + misc_utils.verify_in_list(user_metric=qc_metric, qc_metrics=self.qc_cols) + + try: + df: pd.DataFrame = self.longitudinal_control_metrics[control_sample_name, qc_metric] + except KeyError: + # A qc file which isn't stored in the longitudinal_control_metrics dictionary, try to load it + # in if it exists as a file + df: pd.DataFrame = pd.read_csv( + os.path.join( + self.metrics_dir, + f"{control_sample_name}_combined_{self.qc_suffixes[self.qc_cols.index(qc_metric)]}.csv", + ) + ) + except FileNotFoundError as e: + raise FileNotFoundError( + f"QC Metric Not Found for the Control Sample {control_sample_name}" + ) from e + + # Apply a log2 transformation to the mean normalized data. + log2_norm_df: pd.DataFrame = df.pivot( + index="channel", columns="fov", values=qc_metric + ).transform(func=lambda row: np.log2(row / row.mean()), axis=1) + + mean_log2_norm_df: pd.DataFrame = ( + log2_norm_df.mean(axis=0) + .to_frame(name="mean") + .transpose() + .sort_values(by="mean", axis=1) + ) + + transformed_df: pd.DataFrame = pd.concat( + objs=[log2_norm_df, mean_log2_norm_df] + ).sort_values(by="mean", axis=1, inplace=False) + + return transformed_df diff --git a/src/toffy/qc_metrics_plots.py b/src/toffy/qc_metrics_plots.py index 058634ca..0cd91afa 100644 --- a/src/toffy/qc_metrics_plots.py +++ b/src/toffy/qc_metrics_plots.py @@ -1,87 +1,338 @@ +import os +import pathlib +from typing import List, Optional, Union + +import matplotlib.gridspec as gridspec import matplotlib.pyplot as plt +import natsort as ns +import numpy as np import pandas as pd import seaborn as sns -from alpineer import io_utils, load_utils +from matplotlib import cm +from matplotlib.axes import Axes +from matplotlib.colors import ListedColormap, Normalize +from matplotlib.figure import Figure +from tqdm.auto import tqdm + +from toffy import settings +from toffy.qc_comp import QCTMA, QCControlMetrics -from toffy import qc_comp +def visualize_qc_metrics( + metric_name: str, + qc_metric_dir: Union[str, pathlib.Path], + save_dir: Union[str, pathlib.Path], + channel_filters: Optional[List[str]] = ["chan_"], + axes_font_size: int = 16, + wrap: int = 6, + dpi: int = 300, + return_plot: bool = False, +) -> Optional[sns.FacetGrid]: + """ + Visualize the barplot of a specific QC metric. + + Args: + metric_name (str): + The name of the QC metric to plot. Used as the y-axis label. Options include: + `"Non-zero mean intensity"`, `"Total intensity"`, `"99.9% intensity value"`. + qc_metric_dir (Union[str, pathlib.Path]): + The path to the directory containing the `'combined_{qc_metric}.csv'` files + save_dir (Optional[Union[str, pathlib.Path]], optional): + The name of the directory to save the plot to. Defaults to None. + channel_filters (List[str], optional): + A list of channels to filter out. + axes_font_size (int, optional): + The font size of the axes labels. Defaults to 16. + wrap (int, optional): + The number of plots to display per row. Defaults to 6. + dpi (Optional[int], optional): + The resolution of the image to use for saving. Defaults to None. + return_plot (bool): + If `True`, this will return the plot. Defaults to `False` -def call_violin_swarm_plot(plotting_df, fig_label, figsize=(20, 3), fig_dir=None): - """Makes violin plot with swarm dots. Used with make_batch_effect_plot() + Raises: + ValueError: + When an invalid metric is provided. + FileNotFoundError: + The QC metric directory `qc_metric_dir` does not exist. + FileNotFoundError: + The QC metric `combined_csv` file is does not exist in `qc_metric_dir`. - Args: plotting_df (pandas dataframe): "sample", "channel", "tma", "99.9th_percentile" - figsize (tuple): (length x width) of figsize - fig_dir (str): Dir to save plots. + Returns: + Optional[sns.FacetGrid]: Returns the Seaborn FacetGrid catplot of the QC metrics. """ - plt.figure(figsize=figsize) - ax = sns.violinplot( - x="channel", - y="99.9th_percentile", - data=plotting_df, - inner=None, - scale="width", - color="gray", - ) - ax = sns.swarmplot( - x="channel", - y="99.9th_percentile", - data=plotting_df, - edgecolor="black", - hue="tma", - palette="tab20", + # verify the metric provided is valid + if metric_name not in settings.QC_COLUMNS: + raise ValueError( + "Invalid metric %s provided, must be set to 'Non-zero mean intensity', " + "'Total intensity', or '99.9%% intensity value'" % metric_name + ) + + # verify the path to the QC metric datasets exist + if not os.path.exists(qc_metric_dir): + raise FileNotFoundError("qc_metric_dir %s does not exist" % qc_metric_dir) + + # get the file name of the combined QC metric .csv file to use + qc_metric_index = settings.QC_COLUMNS.index(metric_name) + qc_metric_suffix = settings.QC_SUFFIXES[qc_metric_index] + qc_metric_path = os.path.join(qc_metric_dir, "combined_%s.csv" % qc_metric_suffix) + + # ensure the user set the right qc_metric_dir + if not os.path.exists(qc_metric_path): + raise FileNotFoundError( + "Could not locate %s, ensure qc_metric_dir is correct" % qc_metric_path + ) + + # read in the QC metric data + qc_metric_df = pd.read_csv(qc_metric_path) + + # filter out naturally-occurring elements as well as Noodle + qc_metric_df = qc_metric_df[~qc_metric_df["channel"].isin(settings.QC_CHANNEL_IGNORE)] + + # filter out any channel in the channel_filters list + if channel_filters is not None: + qc_metric_df: pd.DataFrame = qc_metric_df[ + ~qc_metric_df["channel"].str.contains("|".join(channel_filters)) + ] + + # catplot allows for easy facets on a barplot + qc_fg: sns.FacetGrid = sns.catplot( + x="fov", + y=metric_name, + col="channel", + col_wrap=wrap, + data=qc_metric_df, + kind="bar", + color="black", + sharex=True, + sharey=False, ) - ax.set_title(fig_label) - plt.xticks(rotation=45) - if fig_dir: - plt.savefig(fig_dir + fig_label + "_batch_effects.png", dpi=300) - return ax - - -def make_batch_effect_plot( - data_dir, - normal_tissues, - exclude_channels=None, - img_sub_folder=None, - qc_metric="99.9th_percentile", - fig_dir=None, -): - """Makes violin plots based on tissue type. Calls call_violin_swarm_plot. + + # remove the 'channel =' in each subplot title + qc_fg.set_titles(template="{col_name}") + qc_fg.figure.supxlabel(t="fov", x=0.5, y=0, ha="center", size=axes_font_size) + qc_fg.figure.supylabel(t=f"{metric_name}", x=0, y=0.5, va="center", size=axes_font_size) + qc_fg.set(xticks=[]) + + # per Erin's visualization remove the default axis title on the y-axis + # and instead show 'fov' along x-axis and the metric name along the y-axis (overarching) + qc_fg.set_axis_labels(x_var="", y_var="") + qc_fg.set_xticklabels([]) + + # save the figure always + # Return the figure if specified. + qc_fg.savefig(os.path.join(save_dir, f"{metric_name}_barplot_stats.png"), dpi=dpi) + + if return_plot: + return qc_fg + + +def qc_tmas_metrics_plot( + qc_tmas: QCTMA, + tmas: List[str], + save_figure: bool = False, + dpi: int = 300, +) -> None: + """ + Produces the QC TMA metrics plot for a given set of QC metrics applied to a user specified + TMA. The figures are saved in `qc_tma_metrics_dir/figures`. Args: - normal_tissues (str): is a list of the tissue type substring to match - exclude_channels (str): is a list of channels to not plot - img_sub_folder (str): in case theres additional sub folder structure - qc_metric (str): Type of qc_metric. Currently only 99.9th percentile. + qc_tmas (QCTMA): The class which contains the QC TMA data, filepaths, and methods. + QC matrix. + tma (str): The TMAs to plot the QC metrics for. + save_figure (bool, optional): If `True`, the figure is saved in a subdirectory in the + `QCTMA.qc_tma_metrics_dir` directory. Defaults to `False`. + dpi (int, optional): Dots per inch, the resolution of the image. Defaults to 300. + """ + + if save_figure: + fig_dir: pathlib.Path = pathlib.Path(qc_tmas.metrics_dir) / "figures" + fig_dir.mkdir(parents=True, exist_ok=True) + with tqdm(total=len(tmas), desc="Plotting QC TMA Metric Ranks", unit="TMAs") as pbar: + for tma in tmas: + _qc_tma_metrics_plot(qc_tmas, tma, fig_dir=fig_dir, save_figure=save_figure, dpi=dpi) + pbar.set_postfix(TMA=tma) + pbar.update(n=1) + + +def _qc_tma_metrics_plot( + qc_tmas: QCTMA, + tma: str, + fig_dir: pathlib.Path, + save_figure: bool = False, + dpi: int = 300, +) -> None: """ - for i in range(len(normal_tissues)): - samples = io_utils.list_folders(dir_name=data_dir, substrs=normal_tissues[i]) - data = load_utils.load_imgs_from_tree( - data_dir=data_dir, img_sub_folder=img_sub_folder, fovs=samples + Produces the QC TMA metrics plot for a given set of QC metrics applied to a user specified + TMA. The figures are saved in `qc_tma_metrics_dir/figures`. + + Args: + qc_tmas (QCTMA): The class which contains the QC TMA data, filepaths, and methods. + tma (str): The TMA to plot the metrics for. + save_figure (bool, optional): If `True`, the figure is saved in a subdirectory in the + `qc_tma_metrics_dir` directory. Defaults to `False`. + dpi (int, optional): Dots per inch, the resolution of the image. Defaults to 300. + """ + + for qc_metric, suffix in zip(qc_tmas.qc_cols, qc_tmas.qc_suffixes): + qc_tma_data: np.ndarray = qc_tmas.tma_avg_ranks[tma].loc[qc_metric].values + + # Set up the Figure for multiple axes + fig: Figure = plt.figure(dpi=dpi) + fig.set_layout_engine(layout="constrained") + gs = gridspec.GridSpec(1, 2, figure=fig, wspace=0.05) + fig.suptitle(f"{tma} - {qc_metric}") + + # Heatmap + ax_heatmap: Axes = fig.add_subplot(gs[0, 0]) + sns.heatmap( + data=qc_tma_data, + square=True, + ax=ax_heatmap, + linewidths=1, + linecolor="black", + cbar_kws={"shrink": 0.5}, + annot=True, + cmap=sns.color_palette(palette="Blues", as_cmap=True), + ) + # Set ticks + ax_heatmap.set_xticks( + ticks=ax_heatmap.get_xticks(), + labels=[f"{i+1}" for i in range(qc_tma_data.shape[1])], + rotation=0, + ) + + ax_heatmap.set_yticks( + ticks=ax_heatmap.get_yticks(), + labels=[f"{i+1}" for i in range(qc_tma_data.shape[0])], + rotation=0, ) - channels = list(data.channels.values) - if exclude_channels: - channels = [x for x in channels if x not in exclude_channels] - - # i could add a separate function to produce the plotting_df that is testable - plotting_df = pd.DataFrame(columns=["sample", "channel", "tma", "99.9th_percentile"]) - - for j in range(len(channels)): - qc_metrics_per_channel = [] - - for k in range(len(samples)): - tma = [x for x in samples[k].split("_") if "TMA" in x][0] - qc_metrics_per_channel += [ - [ - normal_tissues[i], - channels[j], - tma, - qc_comp.compute_99_9_intensity(data.loc[samples[k], :, :, channels[j]]), - ] - ] - - plotting_df = plotting_df.append( - pd.DataFrame(qc_metrics_per_channel, columns=plotting_df.columns) + + ax_heatmap.set_xlabel("Column") + ax_heatmap.set_ylabel("Row") + ax_heatmap.set_title("Average Rank") + + # Histogram + ax_hist: Axes = fig.add_subplot(gs[0, 1]) + sns.histplot(qc_tma_data.ravel(), ax=ax_hist, bins=10) + ax_hist.set(xlabel="Average Rank", ylabel="Count") + ax_hist.set_title("Average Rank Distribution") + + if save_figure: + fig.savefig( + fname=fig_dir / f"{tma}_{suffix}.png", + dpi=dpi, + bbox_inches="tight", ) + plt.close(fig) + + +def longitudinal_control_heatmap( + qc_control: QCControlMetrics, + control_sample_name: str, + save_figure: bool = False, + dpi: int = 300, +) -> None: + """ + Generates a heatmap of the QC metrics for the QC Control FOVs. + + Args: + qc_control (QCControlMetrics): The class which contains the QC LC data, filepaths + , and methods. + control_sample_name (List[str]): A list of tissues to plot the QC metrics for. + save_figure (bool, optional): If `True`, the figure is saved in a subdirectory in the + `longitudinal_control_metrics_dir` directory. Defaults to `False`. + dpi (int, optional): Dots per inch, the resolution of the image. Defaults to 300. + + Raises: + ValueError: Raised when the input tissues are not a list of strings. + """ + if control_sample_name is None or not isinstance(control_sample_name, str): + raise ValueError("The control sample name must be string.") + if save_figure: + fig_dir: pathlib.Path = pathlib.Path(qc_control.metrics_dir) / "figures" + fig_dir.mkdir(parents=True, exist_ok=True) + + for qc_col, qc_suffix in zip(qc_control.qc_cols, qc_control.qc_suffixes): + t_df: pd.DataFrame = qc_control.transformed_control_effects_data( + control_sample_name=control_sample_name, qc_metric=qc_col + ) - call_violin_swarm_plot(plotting_df, fig_label=normal_tissues[i], fig_dir=fig_dir) + # Set up the Figure for multiple axes + fig: Figure = plt.figure(figsize=(12, 12), dpi=dpi) + fig.set_layout_engine(layout="constrained") + gs = gridspec.GridSpec(nrows=2, ncols=1, figure=fig, height_ratios=[len(t_df.index) - 1, 1]) + + # Colorbar Normalization + _norm = Normalize(vmin=-1, vmax=1) + _cmap = sns.color_palette("vlag", as_cmap=True) + + fig.suptitle(f"{control_sample_name} - QC: {qc_col}") + + # Heatmap + ax_heatmap: Axes = fig.add_subplot(gs[0, 0]) + + sns.heatmap( + t_df[~t_df.index.isin(["mean"])], + ax=ax_heatmap, + linewidths=1, + linecolor="black", + cbar_kws={"shrink": 0.5}, + annot=True, + xticklabels=False, + norm=_norm, + cmap=_cmap, + ) + + # cbar title + ax_heatmap.collections[0].colorbar.ax.set_title(r"$\log_2(QC)$") + + # Axes labels, and ticks + ax_heatmap.set_yticks( + ticks=ax_heatmap.get_yticks(), + labels=ax_heatmap.get_yticklabels(), + rotation=0, + ) + ax_heatmap.set_xlabel(None) + + # Averaged values + ax_avg: Axes = fig.add_subplot(gs[1, 0]) + + sns.heatmap( + data=t_df[t_df.index.isin(["mean"])], + ax=ax_avg, + linewidths=1, + linecolor="black", + annot=True, + fmt=".2f", + cmap=ListedColormap(["white"]), + cbar=False, + ) + ax_avg.set_yticks( + ticks=ax_avg.get_yticks(), + labels=["Mean"], + rotation=0, + ) + ax_avg.set_xticks( + ticks=ax_avg.get_xticks(), + labels=ax_avg.get_xticklabels(), + rotation=45, + ha="right", + rotation_mode="anchor", + ) + ax_heatmap.set_ylabel("Channel") + ax_avg.set_xlabel("FOV") + + # Save figure + if save_figure: + fig.savefig( + fname=pathlib.Path(qc_control.metrics_dir) + / "figures" + / f"{control_sample_name}_heatmap_{qc_suffix}.png", + dpi=dpi, + bbox_inches="tight", + ) + plt.show() + plt.close(fig) diff --git a/src/toffy/rosetta.py b/src/toffy/rosetta.py index 0cb7d3a0..6e714a60 100644 --- a/src/toffy/rosetta.py +++ b/src/toffy/rosetta.py @@ -1,5 +1,4 @@ import copy -import json import os import random import shutil diff --git a/src/toffy/watcher_callbacks.py b/src/toffy/watcher_callbacks.py index d288016a..aad6836b 100644 --- a/src/toffy/watcher_callbacks.py +++ b/src/toffy/watcher_callbacks.py @@ -1,6 +1,5 @@ import inspect import os -import platform from dataclasses import dataclass, field from typing import Iterable @@ -9,7 +8,6 @@ matplotlib.use("Agg") -import matplotlib.pyplot as plt import pandas as pd import xarray as xr from alpineer import misc_utils @@ -19,8 +17,9 @@ from toffy.image_stitching import stitch_images from toffy.mph_comp import combine_mph_metrics, compute_mph_metrics, visualize_mph from toffy.normalize import write_mph_per_mass -from toffy.qc_comp import combine_qc_metrics, compute_qc_metrics_direct, visualize_qc_metrics -from toffy.settings import QC_COLUMNS, QC_SUFFIXES +from toffy.qc_comp import combine_qc_metrics, compute_qc_metrics_direct +from toffy.qc_metrics_plots import visualize_qc_metrics +from toffy.settings import QC_COLUMNS RUN_PREREQUISITES = { "plot_qc_metrics": set(["generate_qc"]), diff --git a/templates/3c_generate_qc_metrics.ipynb b/templates/3c_generate_qc_metrics.ipynb index 746a7152..b93afd59 100644 --- a/templates/3c_generate_qc_metrics.ipynb +++ b/templates/3c_generate_qc_metrics.ipynb @@ -1,6 +1,7 @@ { "cells": [ { + "attachments": {}, "cell_type": "markdown", "id": "78c18a71", "metadata": {}, @@ -9,6 +10,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "cf556c06-55eb-4ce1-a040-cb5260379244", "metadata": {}, @@ -26,11 +28,12 @@ "import os\n", "import natsort as ns\n", "\n", - "from toffy import qc_comp\n", + "from toffy import qc_comp, qc_metrics_plots\n", "from alpineer import io_utils" ] }, { + "attachments": {}, "cell_type": "markdown", "id": "e764f21a", "metadata": {}, @@ -39,6 +42,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "54dae734", "metadata": {}, @@ -62,6 +66,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "2572f3e4", "metadata": {}, @@ -89,6 +94,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "58f57192", "metadata": {}, @@ -124,6 +130,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "87e82396", "metadata": { @@ -145,6 +152,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "25542275-207a-44d2-b315-358f9759c221", "metadata": {}, @@ -205,7 +213,7 @@ ], "source": [ "# visualize the QC stats\n", - "qc_comp.visualize_qc_metrics(\n", + "qc_metrics_plots.visualize_qc_metrics(\n", " qc_metric,\n", " qc_out_dir,\n", " axes_font_size=16,\n", diff --git a/templates/6_tma_batch_qc_metrics.ipynb b/templates/6_tma_batch_qc_metrics.ipynb new file mode 100644 index 00000000..5a24c7c4 --- /dev/null +++ b/templates/6_tma_batch_qc_metrics.ipynb @@ -0,0 +1,545 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Computing TMA and Cohort-wise QC Metrics Notebook" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This notebook requires that you run `5_rename_and_reorganize.ipynb` beforehand. After you have your reorganized data, it may be useful to investigate if there are any widespread issues for TMAs and control tissues.\n", + "\n", + "The purpose of this notebook is to run QC checks on the following conditions:\n", + "- FOVs across a TMA\n", + "- Across various Samples for a control Tissue\n", + "\n", + "There are two parts which can be done in any order, depending on which type of QC effects are of interest to you." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from toffy import qc_comp, qc_metrics_plots" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## QC TMA Metrics" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can utilize QC Metrics to validate that are no spatial biases across your TMAs, or if they do exist, identify where they are most prevalent." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 0. Prerequisites" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to use the QC TMA Metrics functionality, you need to have run `5_rename_and_reorganize.ipynb` beforehand. In addition, each FOV within the cohort should be suffixed with the Row number and Column number it's associated TMA.\n", + "\n", + "For example, use Notebook 5 to combine, reorganize and rename the runs to something akin to `MY_COHORT_TMA1_R1C1` and `MY_COHORT_TMA11_R10C11`.\n", + "\n", + "To make use of the QC TMA Metrics, your cohort should look like something below:\n", + "\n", + "\n", + "```sh\n", + "my_cohort_tmas/\n", + "├── MY_COHORT_TMA1_R1C1/\n", + "├── MY_COHORT_TMA1_R1C2/\n", + "├── ...\n", + "├── MY_COHORT_TMA2_R1C2/\n", + "├── ...\n", + "├── MY_COHORT_TMA2_R7C10/\n", + "├── ...\n", + "└── MY_COHORT_TMA11_R11C10/\n", + "```\n", + "\n", + "It is **necessary** that the Row number and Column number values are the suffixes for each FOV." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Select QC Metrics and TMAs" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Specify the name of the relevant folders:\n", + "- `cohort_path`: The path to the cohort containing ready-to-analyze FOVs.\n", + "\n", + "The following folder will be created for you:\n", + "- `qc_tma_metrics_dir`: The path where the QC TMA metrics should be saved." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cohort_path = \"D:\\\\Cohorts\\\\20220101_new_cohort\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "qc_tma_metrics_dir = os.path.join(cohort_path, \"qc_tma_metrics\")\n", + "\n", + "if not os.path.exists(qc_tma_metrics_dir):\n", + " os.makedirs(qc_tma_metrics_dir)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Set `tmas` to a list of TMAs you wish to compute QC metrics for." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Change the `tmas` variable to be a list of the tmas you want to run the QC on\n", + "tmas = [\"MY_COHORT_TMA1\", \"MY_COHORT_TMA1\", \"MY_COHORT_TMA1\"]" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Select any combination of the following three QC metrics:\n", + "1. `\"Non-zero mean intensity\"`\n", + "2. `\"Total intensity\"`\n", + "3. `\"99.9% intensity value\"`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "qc_metrics = [\"Non-zero mean intensity\"]" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Compute QC TMA Metrics" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Initialize the QCTMA class with the path to your cohort (`cohort_path`), the path to the folder containing the QC TMA metrics (`qc_tma_metrics_dir`) and the QC Metrics of interest themselves (`qc_metrics`).\n", + "\n", + "Then compute the QC metrics per FOV. FOVs which already have QC metrics files do not get theirs recomputed." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "qc_tmas = qc_comp.QCTMA(\n", + " qc_metrics=qc_metrics,\n", + " cohort_path=cohort_path,\n", + " metrics_dir=qc_tma_metrics_dir,\n", + ")\n", + "\n", + "qc_tmas.compute_qc_tma_metrics(tmas=tmas)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You may want to exclude channels depending on their impact, the `channel_exclude` variable will filter out those channels when creating the ranked QC metrics.\n", + "\n", + "The following channels will *always* be excluded from the TMA Metrics ranking below:\n", + "- Au\n", + "- Fe\n", + "- Na\n", + "- Ta\n", + "- Noodle" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "channel_exclude = [\"chan_39\", \"chan_45\"]" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Compute the Ranked QC TMA Metrics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "qc_tmas.qc_tma_metrics_rank(tmas=tmas, channel_exclude=channel_exclude)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Plot the QC TMA Metrics\n", + "\n", + "The following plot below depicts a heatmap of the TMA along with a histogram. \n", + "\n", + "The TMA QC metrics are processed first by a FOV wise ranking for each channel, then each channel is averaged for each FOV.\n", + "\n", + "What we are looking for is that any particular region's average rank isn't higher than any other. An issue arises when, say all FOVs in the upper left corner of the TMA are systematically brighter than the others.\n", + "\n", + "\n", + "These plots get saved in a `figures` subfolder within `qc_tma_metrics_dir`." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "
\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "qc_metrics_plots.qc_tmas_metrics_plot(qc_tmas=qc_tmas, tmas=tmas, save_figure=True, dpi=300)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## QC Longitudinal Control Metrics" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The second half of this notebook is dedicated to looking at QC metrics for a particular control sample across many runs, these are called *longitudinal control* metrics." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 0. Prerequisites" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to make use of the QC Longitudinal Control Metrics, you need to have run `5_rename_and_reorganize.ipynb` beforehand. There is no set naming convention here for each FOV.\n", + "\n", + "To make use of the LC Metrics, your cohort should consist of one control sample across several runs\n", + "\n", + "```sh\n", + "my_control_sample_runs/\n", + "├── MY_CONTROL_SAMPLE_RUN1/\n", + "├── MY_CONTROL_SAMPLE_RUN2/\n", + "├── ...\n", + "├── MY_CONTROL_SAMPLE_RUN5/\n", + "├── MY_CONTROL_SAMPLE_RUN6/\n", + "└── MY_CONTROL_SAMPLE_RUN7/\n", + "```\n", + "\n", + "Longitudinal Control Metrics can be computed for control sample FOVs across different cohorts. For a given control sample, we will be able to analyze it's run-to-run variance. " + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Set QC metrics, Control Sample FOVs, Paths, and the Control Sample Name" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Specify the names of the relevant folders:\n", + "- `control_path`: The path to the cohort containing ready-to-analyze FOVs.\n", + "\n", + "The following folder will be created for you:\n", + "- `qc_control_metrics_dir`: The path where the QC TMA metrics should be saved." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "control_path = \"D:\\\\Cohorts\\\\20220101_new_cohort_controls\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "qc_control_metrics_dir = os.path.join(control_path, \"qc_longitudinal_control\")\n", + "\n", + "if not os.path.exists(qc_control_metrics_dir):\n", + " os.makedirs(qc_control_metrics_dir)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Select any combination of the following three QC metrics:\n", + "1. `\"Non-zero mean intensity\"`\n", + "2. `\"Total intensity\"`\n", + "3. `\"99.9% intensity value\"`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "qc_metrics = [\"Non-zero mean intensity\"]" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Set `control_sample_name` to an informative name." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "control_sample_name = \"MY_CONTROL_SAMPLE\"" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Set `fovs` to a list of FOVs you wish to compute the Longitudinal QC Metrics for." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fovs = [\"MY_CONTROL_SAMPLE_RUN1\", \"MY_CONTROL_SAMPLE_RUN2\", \"MY_CONTROL_SAMPLE_RUN3\"]" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You may want to include, and exclude various channels depending on their impact.\n", + "\n", + "- `channel_exclude`: A list of channels to filter out for the Longitudinal Control QC Metrics.\n", + "- `channel_include`: A list of channels to *only* include for the Longitudinal Control QC Metrics.\n", + "\n", + "The following channels will always be excluded from the Longitudinal Control QC Metrics ranking below:\n", + "- Au\n", + "- Fe\n", + "- Na\n", + "- Ta\n", + "- Noodle\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "channel_exclude = [\"chan_39\", \"Biotin\", \"PDL1\", \"chan_45\"]\n", + "channel_include = None" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Compute the Longitudinal Control QC metrics for the set of Control Sample FOVs." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Initialize the QC Control Metrics class\n", + "qc_control = qc_comp.QCControlMetrics(\n", + " qc_metrics=qc_metrics,\n", + " cohort_path=control_path,\n", + " metrics_dir=qc_control_metrics_dir,\n", + ")\n", + "\n", + "# Compute the QC metrics for the FOVs provided\n", + "qc_control.compute_control_qc_metrics(\n", + " control_sample_name=control_sample_name,\n", + " fovs=fovs,\n", + " channel_exclude=channel_exclude,\n", + " channel_include=channel_include,\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. Longitudinal Control Heatmap" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following plot below is a heatmap for each Control Sample FOV associated with a particular tissue, in this case it is `\"MY_CONTROL_SAMPLE\"`.\n", + "\n", + "Given each FOV $i$, it's associated QC metric $qc_i$, we calculate the Longitudinal value $l_i$ with the following:\n", + "\n", + "$$\n", + "l_i = \\log_2\\left(\\frac{qc_i}{\\frac{1}{n}\\sum_{i}^{n} qc_i}\\right)\n", + "$$\n", + "\n", + "\n", + "A value of $1$ would be interpreted as be $2$ times greater than the row average, and a value of $-1$ would be $2$ times less than the row average.\n", + "\n", + "These plots get saved in a `figures` subfolder within `qc_control_effect_metrics_dir`." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "
\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "qc_metrics_plots.longitudinal_control_heatmap(\n", + " qc_control=qc_control, control_sample_name=control_sample_name, save_figure=True, dpi=300\n", + ")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "toffy-r1jqSdeC-py3.11", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.4" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/templates/batch_effects_violin_example.ipynb b/templates/batch_effects_violin_example.ipynb deleted file mode 100644 index ee7bd648..00000000 --- a/templates/batch_effects_violin_example.ipynb +++ /dev/null @@ -1,103 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "043d3cf0", - "metadata": {}, - "outputs": [], - "source": [ - "from toffy import qc_metrics_plots" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "b203e00a", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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RERERERE9CiBpYiIiIhxkLSPpO9L+p6kT7fNb5T0H5L+u5O9JGk5SV+RdIuk2yS9rW1fXdKdks6VdIekf5e0dHvsa5JOknSjpB9L2qJtX1zSyZK+28Z+70gOPiIiImKMBJYiIiIiFpGk1wDHANvY/jPgsPbQS4DNgR2BE9u2x4C3214P2Bo4VZLaY2sDZ9p+DXA/sFvXMLNsbwQcDvy/tm1/4AHbGwIbAgdIenn/jzAiIiJifGaNegIRERERU8g2wCW27wOw/dsWK7rM9jzgB5Je1PYVcLykNwLzgNWAzmM/sX1r+/+bgdW7xrh0AdvfDKzT1ctpBSo49eO+HVlEREREDxJYioiIiJi4x7v+v5OVtBewCrC+7Scl/RRYagH7Pw0svYDnepr552oCDrF9Tfegklaf8MwjIiIiJiClcBERERGL7jrgnZJeACBppYXsuwLwmxZU2hp42QTGvQY4UNLsNu4rJC07geeLiIiI6ItkLEVEREQsItt3SDoO+Lqkp4H/XMjunwWukHQbcBPwwwkMfR5VFndL69N0L7DLBJ4vIiIioi9ke9RziIiIiIiIiIiIKSilcBERERERERER0ZMEliIiIiIiIiIioicJLEVERERERERERE8SWIqIiIiIiIiIiJ4ksBQRERERERERET1JYCkiIiIiIiIiInqSwFJERERERERERPQkgaWIiIiIiIiIiOjJ/weO40SU4qT40QAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# single tissue specified.\n", - "qc_metrics_plots.make_batch_effect_plot(data_dir=\"/Users/heskett/control_sample_Examples\",\n", - " normal_tissues=[\"ln\"], \n", - " exclude_channels=[\"Au\",\"chan_39\",\"Fe\",\"ChyTr\",\"Noodle\",\"chan_45\",\n", - " \"chan_48\",\"chan_115\",\"chan_141\",\"SMA\"],\n", - " fig_dir=\"/Users/heskett/toffy/\")" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "ccf33b83", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Multiple tissue types. \n", - "qc_metrics_plots.make_batch_effect_plot(data_dir=\"/Users/heskett/control_sample_Examples\",\n", - " normal_tissues=[\"ln_top\",\"ln_bottom\"], \n", - " exclude_channels=[\"Au\",\"chan_39\",\"Fe\",\"ChyTr\",\"Noodle\",\"chan_45\",\n", - " \"chan_48\",\"chan_115\",\"chan_141\",\"SMA\"],\n", - " fig_dir=\"/Users/heskett/toffy/\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.2" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/templates/img/nb6_ex_avg_tma_rank.png b/templates/img/nb6_ex_avg_tma_rank.png new file mode 100644 index 00000000..a250e378 Binary files /dev/null and b/templates/img/nb6_ex_avg_tma_rank.png differ diff --git a/templates/img/nb6_ex_batch_effect_heatmap.png b/templates/img/nb6_ex_batch_effect_heatmap.png new file mode 100644 index 00000000..8b989f63 Binary files /dev/null and b/templates/img/nb6_ex_batch_effect_heatmap.png differ diff --git a/tests/qc_comp_test.py b/tests/qc_comp_test.py index bf6724b7..7ad22ea2 100644 --- a/tests/qc_comp_test.py +++ b/tests/qc_comp_test.py @@ -1,15 +1,20 @@ +import itertools import os +import pathlib import tempfile +from dataclasses import dataclass from pathlib import Path +from typing import Generator, List import numpy as np import pandas as pd import pytest -from alpineer import io_utils, load_utils, misc_utils +import xarray as xr +from alpineer import io_utils, load_utils, test_utils from mibi_bin_tools import bin_files +from tqdm import tqdm from toffy import qc_comp, settings -from toffy.mibitracker_utils import MibiRequests parametrize = pytest.mark.parametrize @@ -214,65 +219,6 @@ def test_combine_qc_metrics(fovs): assert list(metric_data[mc]) == qc_metric_vals -def test_visualize_qc_metrics(): - # define the channels to use - chans = ["chan0", "chan1", "chan2"] - - # define the fov names to use for each channel - fov_batches = [["fov0", "fov1"], ["fov2", "fov3"], ["fov4", "fov5"]] - - # define the supported metrics to iterate over - metrics = ["Non-zero mean intensity", "Total intensity", "99.9% intensity value"] - - with tempfile.TemporaryDirectory() as temp_dir: - # save sample combined .csv files for each metric - for metric in metrics: - # define the test melted DataFrame for an arbitrary QC metric - sample_qc_metric_data = pd.DataFrame() - - for chan, fovs in zip(chans, fov_batches): - chan_data = pd.DataFrame(np.random.rand(len(fovs)), columns=[metric]) - - chan_data["fov"] = fovs - chan_data["channel"] = chan - - sample_qc_metric_data = pd.concat([sample_qc_metric_data, chan_data]) - - # get the file name of the combined QC metric .csv file to use - qc_metric_index = settings.QC_COLUMNS.index(metric) - qc_metric_suffix = settings.QC_SUFFIXES[qc_metric_index] + ".csv" - - # save the combined data - sample_qc_metric_data.to_csv( - os.path.join(temp_dir, "combined_%s" % qc_metric_suffix), index=False - ) - - # pass an invalid metric - with pytest.raises(ValueError): - qc_comp.visualize_qc_metrics(metric_name="bad_metric", qc_metric_dir="", save_dir="") - - # pass an invalid qc_metric_dir - with pytest.raises(FileNotFoundError): - qc_comp.visualize_qc_metrics("Non-zero mean intensity", "bad_qc_dir", save_dir="") - - # pass a qc_metric_dir without the combined files - os.mkdir(os.path.join(temp_dir, "empty_qc_dir")) - with pytest.raises(FileNotFoundError): - qc_comp.visualize_qc_metrics( - "Non-zero mean intensity", os.path.join(temp_dir, "empty_qc_dir"), save_dir="" - ) - - # now test the visualization process for each metric - for metric in metrics: - # test without saving (should raise an error) - with pytest.raises(TypeError): - qc_comp.visualize_qc_metrics(metric, temp_dir) - - # test with saving - qc_comp.visualize_qc_metrics(metric, temp_dir, save_dir=temp_dir) - assert os.path.exists(os.path.join(temp_dir, "%s_barplot_stats.png" % metric)) - - def test_format_img_data(): # define a sample panel, leave panel correctness/incorrectness test for mibi_bin_tools panel = pd.DataFrame( @@ -309,3 +255,434 @@ def test_format_img_data(): # test for successful reformatting load_data = qc_comp.format_img_data(load_data) assert load_data.equals(extracted_data) + + +@dataclass +class QCMetricData: + """ + Contains misc information for a testing set of QC information such as the tma names, fovs, + channels, and a DataFrame containing testing data. + """ + + tma_name: str + fov_count: int + channel_ignore_count: int + tma_n_m: np.ndarray + fovs: List[str] + channels: List[str] + qc_df: pd.DataFrame + cohort_path: pathlib.Path + qc_metrics_dir: pathlib.Path + qc_metrics: List[str] + + +@pytest.fixture(scope="function") +def qc_tmas( + rng: np.random.Generator, tmp_path: pathlib.Path +) -> Generator[QCMetricData, None, None]: + """ + A Fixture which yields a dataclass used containing the QC dataframe with the three metrics, + the tma name, fovs, channels and the regex search term for RnCm. + + Args: + rng (np.random.Generator): The random number generator in `conftest.py`. + tmp_path (pathlib.Path): The temporary path to the test directory. + + Yields: + Generator[QCMetricData, None, None]: The dataclass containing testing data. + """ + + # Set up the testing data features + fov_count: int = 5 + channel_ignore_count: int = len(settings.QC_CHANNEL_IGNORE) + channel_count: int = 3 + _, chan_names = test_utils.gen_fov_chan_names(num_fovs=fov_count, num_chans=channel_count) + chan_names.extend(settings.QC_CHANNEL_IGNORE) + + total_n_m_options: np.ndarray = np.arange(0, 13) + tma_name: str = "Project_TMA1" + + tma_n_m: np.ndarray = rng.choice(a=total_n_m_options, size=(fov_count, 2), replace=False) + fovs: List[str] = [f"Project_TMA1_R{tma[0]}C{tma[1]}" for tma in tma_n_m] + + # Create the directory containing extracted images for a tma + cohort_path: Path = tmp_path / "tma" + cohort_path.mkdir(parents=True, exist_ok=True) + + # Create the directory containing the QC metrics data + qc_metrics_dir: Path = tmp_path / "qc_metrics" + qc_metrics_dir.mkdir(parents=True, exist_ok=True) + + _ = test_utils.create_paired_xarray_fovs( + base_dir=cohort_path, + fov_names=fovs, + channel_names=chan_names, + img_shape=(20, 20), + ) + + qc_df: pd.DataFrame = pd.DataFrame( + data={ + "fov": fovs * (channel_count + channel_ignore_count), + "channel": chan_names * fov_count, + **{ + qc_col: rng.random(size=(fov_count * len(chan_names))) + for qc_col in settings.QC_COLUMNS + }, + "row": np.tile(A=tma_n_m[:, 0], reps=len(chan_names)), + "column": np.tile(A=tma_n_m[:, 1], reps=len(chan_names)), + } + ) + + for qc_col, qc_suffix in zip(settings.QC_COLUMNS, settings.QC_SUFFIXES): + qc_df[["fov", "channel", qc_col, "row", "column"]].to_csv( + qc_metrics_dir / f"{tma_name}_combined_{qc_suffix}.csv", index=False + ) + + yield QCMetricData( + tma_name=tma_name, + fov_count=fov_count, + channel_ignore_count=channel_ignore_count, + tma_n_m=tma_n_m, + fovs=fovs, + channels=chan_names, + qc_df=qc_df, + cohort_path=cohort_path, + qc_metrics_dir=qc_metrics_dir, + qc_metrics=settings.QC_COLUMNS, + ) + + +@parametrize( + "_qc_metrics, _qc_suffixes", + [ + (settings.QC_COLUMNS[:2], settings.QC_SUFFIXES[:2]), + ([settings.QC_COLUMNS[0]], [settings.QC_SUFFIXES[0]]), + (settings.QC_COLUMNS, settings.QC_SUFFIXES), + ], +) +def test_qc_filtering(_qc_metrics, _qc_suffixes): + qc_cols, qc_suffixes = qc_comp.qc_filtering(qc_metrics=_qc_metrics) + + # Assert correct number of elements + assert len(qc_cols) == len(qc_suffixes) + assert len(qc_suffixes) == len(_qc_metrics) + + # Assert correct ordering of elements + for qc_col, qc_suffix in zip(qc_cols, qc_suffixes): + assert qc_col in _qc_metrics + assert qc_suffix in _qc_suffixes + + # Assert uniqueness of elements + assert set(qc_cols) == set(_qc_metrics) + assert set(qc_suffixes) == set(_qc_suffixes) + + +@parametrize( + "_channel_exclude, _channel_include", + [ + (None, None), # Default, only settings.QC_CHANNEL_IGNORE is removed + (["chan0", "chan1"], None), # Remove chan_0 and chan_1 + (["chan0"], ["chan1"]), # Remove chan_0, and only include chan_1 (df with chan_1 only) + ( + None, + ["chan0", "chan1"], + ), # Only include chan_0 and chan_1 (df with chan_0 and chan_1 only) + pytest.param( + ["chan0", "chan1"], + ["chan0", "chan_"], + marks=pytest.mark.xfail, + ), # Error, both exclude and include channels are the same + ], +) +def test__channel_filtering(qc_tmas: QCMetricData, _channel_exclude, _channel_include): + # Filter out channels that are in the ignore list + qc_df = qc_comp._channel_filtering( + df=qc_tmas.qc_df, channel_exclude=_channel_exclude, channel_include=_channel_include + ) + + # Assert that the default excluded channels: Au, Fe, Na, Ta, Noodle are not in the dataframe + assert set(qc_df["channel"]).isdisjoint(set(settings.QC_CHANNEL_IGNORE)) + + # Assert that the excluded channels are removed from the dataframe + assert set(qc_df["channel"]).isdisjoint(set(_channel_exclude) if _channel_exclude else set()) + + # Asser that the included channels are included in the dataframe + assert set(qc_df["channel"]).issuperset(set(_channel_include) if _channel_include else set()) + + +class TestQCTMA: + @pytest.fixture(scope="function", autouse=True) + def _setup(self, qc_tmas: QCMetricData) -> None: + self.qc_tmas_fixture = qc_tmas + + self.qc_tma = qc_comp.QCTMA( + qc_metrics=qc_tmas.qc_metrics, + cohort_path=qc_tmas.cohort_path, + metrics_dir=qc_tmas.qc_metrics_dir, + ) + + def test__post_init__(self) -> None: + assert self.qc_tma.qc_cols == settings.QC_COLUMNS + assert self.qc_tma.qc_suffixes == settings.QC_SUFFIXES + + assert self.qc_tma.tma_avg_ranks == {} + + def test__get_r_c(self) -> None: + result = pd.DataFrame() + result[["R", "C"]]: pd.DataFrame = self.qc_tmas_fixture.qc_df["fov"].apply( + lambda row: self.qc_tma._get_r_c(row) + ) + + # Make sure the lengths are the same + assert len(result) == len(self.qc_tmas_fixture.qc_df) + + # Make sure the set of values are the same for Row and Column + assert set(result["R"]) == set(self.qc_tmas_fixture.tma_n_m[:, 0]) + assert set(result["C"]) == set(self.qc_tmas_fixture.tma_n_m[:, 1]) + + def test_compute_qc_tma_metrics(self) -> None: + self.qc_tma.compute_qc_tma_metrics(tmas=[self.qc_tmas_fixture.tma_name]) + + for ms in settings.QC_SUFFIXES: + all_metric_files: str = io_utils.list_files( + self.qc_tmas_fixture.qc_metrics_dir, substrs=f"{ms}.csv" + ) + + # Get the combined file + combined_metric_file: str = next(filter(lambda mf: "combined" in mf, all_metric_files)) + + # Filter out combined files + metric_files: List[str] = list( + filter(lambda mf: "combined" not in mf, all_metric_files) + ) + + # Make sure that they all have the `tma_name` as the prefix + assert all(mf.startswith(self.qc_tmas_fixture.tma_name) for mf in all_metric_files) + + # Combined metric file df + combined_mf_df = pd.read_csv(self.qc_tmas_fixture.qc_metrics_dir / combined_metric_file) + + for mf in metric_files: + mf_df: pd.DataFrame = pd.read_csv(self.qc_tmas_fixture.qc_metrics_dir / mf) + # Merge the dataframes together, and check that "fov", "channel", and metric val + # Assert that all elements in the metric csv exist in the combined metric csv + pd.testing.assert_frame_equal( + left=combined_mf_df.merge(mf_df).iloc[:, 0:3], right=mf_df + ) + + def test__create_r_c_tma_matrix(self) -> None: + y_size, x_size = np.max(self.qc_tmas_fixture.tma_n_m, axis=0) + + for qc_col in settings.QC_COLUMNS: + r_c_tma_matrix_df = pd.DataFrame() + + r_c_tma_matrix_df[["rc_matrix"]] = self.qc_tmas_fixture.qc_df.groupby( + by="channel", sort=True + ).apply(lambda group: self.qc_tma._create_r_c_tma_matrix(group, x_size, y_size, qc_col)) + + # Assert that the shapes are correct. + for rc_matrix in r_c_tma_matrix_df["rc_matrix"]: + assert rc_matrix.shape == (x_size, y_size) + + @parametrize( + "channel_exclude", + [ + (None), + (["chan0"]), + (["chan0", "chan1"]), + ], + ) + # test_qc_tma_metrics_compute_qc_tma_metrics + def test_qc_tma_metrics_rank(self, channel_exclude) -> None: + self.qc_tma.qc_tma_metrics_rank( + tmas=[self.qc_tmas_fixture.tma_name], channel_exclude=channel_exclude + ) + + assert self.qc_tma.tma_avg_ranks[self.qc_tmas_fixture.tma_name].shape == ( + 3, + *self.qc_tmas_fixture.tma_n_m.max(0).tolist(), + ) + + +@dataclass +class BatchEffectMetricData: + """ + Contains misc information for a testing set of QC information such as the tma names, fovs, + channels, and a DataFrame containing testing data. + """ + + qc_metrics: List[str] + qc_df: pd.DataFrame + fovs: List[str] + cohort_img_dir: pathlib.Path + cohort_metrics_dir: pathlib.Path + + +@pytest.fixture(scope="function") +def cohort_data( + rng: np.random.Generator, tmp_path: Path +) -> Generator[BatchEffectMetricData, None, None]: + """ + A fixture for generating cohort fovs, and channels for various tissues. + + Args: + rng (np.random.Generator): The random number generator in `conftest.py`. + tmp_path (Path): A temporary directory to write files for testing. + + Yields: + Generator[BatchEffectMetricData, None, None]: Yields a dataclass containing + the testing data: qc_metrics, qc dataframe, tissues, and cohort data_directory. + """ + + # Set up Directories for the cohort data + cohort_dir: Path = tmp_path / "my_cohort" + cohort_img_dir: Path = cohort_dir / "images" + cohort_metrics_dir: Path = cohort_dir / "metrics" + + for directory in [cohort_dir, cohort_img_dir, cohort_metrics_dir]: + directory.mkdir(parents=True, exist_ok=True) + + # Set up the testing data fovs + channel_count: int = 5 + fov_count: int = 3 + + fov_names, chan_names = test_utils.gen_fov_chan_names( + num_fovs=fov_count, num_chans=channel_count + ) + + # Add the default channels to ignore + chan_names.extend(settings.QC_CHANNEL_IGNORE) + + _ = test_utils.create_paired_xarray_fovs( + base_dir=cohort_img_dir, fov_names=fov_names, channel_names=chan_names, img_shape=(20, 20) + ) + + control_sample_names = ["batch0", "batch1", "batch2", "batch3"] + + qc_df: pd.DataFrame = pd.DataFrame( + data={ + "fov": fov_names * (channel_count + len(settings.QC_CHANNEL_IGNORE)), + "channel": chan_names * fov_count, + **{ + qc_col: rng.random( + size=(fov_count * (channel_count + len(settings.QC_CHANNEL_IGNORE))) + ) + for qc_col in settings.QC_COLUMNS + }, + } + ) + + for control_sample_name, (qc_col, qc_suffix) in itertools.product( + control_sample_names, zip(settings.QC_COLUMNS, settings.QC_SUFFIXES) + ): + qc_df[ + [ + "fov", + "channel", + qc_col, + ] + ].to_csv( + cohort_metrics_dir / f"{control_sample_name}_combined_{qc_suffix}.csv", index=False + ) + + yield BatchEffectMetricData( + qc_metrics=settings.QC_COLUMNS, + qc_df=qc_df, + fovs=fov_names, + cohort_img_dir=cohort_img_dir, + cohort_metrics_dir=cohort_metrics_dir, + ) + + +class TestQCControlMetrics: + @pytest.fixture(autouse=True) + def _setup(self, cohort_data: BatchEffectMetricData) -> None: + self.cohort_data: BatchEffectMetricData = cohort_data + + self.qc_batch_effect = qc_comp.QCControlMetrics( + qc_metrics=settings.QC_COLUMNS, + cohort_path=self.cohort_data.cohort_img_dir, + metrics_dir=self.cohort_data.cohort_metrics_dir, + ) + + def test__post_init__(self) -> None: + assert self.qc_batch_effect.qc_cols == settings.QC_COLUMNS + assert self.qc_batch_effect.qc_suffixes == settings.QC_SUFFIXES + + assert self.qc_batch_effect.longitudinal_control_metrics == {} + + @parametrize( + "_control_sample_name,_channel_include,_channel_exclude", + [ + ("batch0", None, None), + ("batch1", ["chan0"], None), + ("batch2", None, ["chan0", "chan1"]), + pytest.param("batch3", ["chan0"], ["chan0"], marks=pytest.mark.xfail), + pytest.param(None, None, None, marks=pytest.mark.xfail), + ], + ) + def test_compute_control_qc_metrics( + self, + _control_sample_name, + _channel_include, + _channel_exclude, + ) -> None: + self.qc_batch_effect.compute_control_qc_metrics( + control_sample_name=_control_sample_name, + fovs=self.cohort_data.fovs, + channel_exclude=_channel_exclude, + channel_include=_channel_include, + ) + + for qc_suffix in settings.QC_SUFFIXES: + assert os.path.exists( + self.qc_batch_effect.metrics_dir + / f"{_control_sample_name}_combined_{qc_suffix}.csv" + ) + + qc_df = pd.read_csv( + self.qc_batch_effect.metrics_dir + / f"{_control_sample_name}_combined_{qc_suffix}.csv" + ) + assert set(qc_df["channel"]).isdisjoint(set(settings.QC_CHANNEL_IGNORE)) + + # Assert that the excluded channels are removed from the dataframe + assert set(qc_df["channel"]).isdisjoint( + set(_channel_exclude) if _channel_exclude else set() + ) + + # Assert that the included channels are included in the dataframe + assert set(qc_df["channel"]).issuperset( + set(_channel_include) if _channel_include else set() + ) + + @parametrize( + "_control_sample_name,_metric", + [ + ("batch0", settings.QC_COLUMNS[0]), + ("batch1", settings.QC_COLUMNS[1]), + ("batch2", settings.QC_COLUMNS[2]), + ( + "batch3", + settings.QC_COLUMNS[0], + ), # Test reading from a file if the metric has been already computed + ], + ) + def test_transformed_control_effects_data(self, _control_sample_name, _metric) -> None: + self.qc_batch_effect.compute_control_qc_metrics( + control_sample_name=_control_sample_name, + fovs=self.cohort_data.fovs, + channel_exclude=None, + channel_include=None, + ) + + transformed_df = self.qc_batch_effect.transformed_control_effects_data( + control_sample_name=_control_sample_name, qc_metric=_metric + ) + # self.cohort_data.qc_df + + # All FOVs exist + assert set(transformed_df.axes[1]) == set(self.cohort_data.qc_df["fov"]) + + # Ignored channels are not in the dataframe + assert set(transformed_df.axes[0]).isdisjoint(set(settings.QC_CHANNEL_IGNORE)) diff --git a/tests/qc_metrics_plots_test.py b/tests/qc_metrics_plots_test.py index 0a363107..f7b25f7b 100644 --- a/tests/qc_metrics_plots_test.py +++ b/tests/qc_metrics_plots_test.py @@ -1,97 +1,203 @@ +import itertools import os -import tempfile +from pathlib import Path +from typing import Generator, List, Optional +import numpy as np import pandas as pd +import pytest from alpineer import test_utils +from traitlets import Callable -from toffy import qc_metrics_plots +from toffy import qc_metrics_plots, settings +from toffy.qc_comp import QCTMA, QCControlMetrics +from .qc_comp_test import BatchEffectMetricData, QCMetricData, cohort_data, qc_tmas -def test_call_violin_swarm(): - # generate fake df - plotting_df = pd.DataFrame(columns=["sample", "channel", "tma", "99.9th_percentile"]) - plotting_df = plotting_df.append( - pd.DataFrame([["TMA1_fov1", "chan0", "TMA1", 0.5]], columns=plotting_df.columns) - ) - # Test that file is created. - with tempfile.TemporaryDirectory() as temp_dir: - _ = qc_metrics_plots.call_violin_swarm_plot( - plotting_df, fig_label="test123", figsize=(20, 3), fig_dir=temp_dir - ) - assert os.path.exists(temp_dir + "test123" + "_batch_effects.png") +def test_visualize_qc_metrics(tmp_path: Path): + # define the channels to use + chans = ["chan0", "chan1", "chan2"] + + # define the fov names to use for each channel + fov_batches = [["fov0", "fov1"], ["fov2", "fov3"], ["fov4", "fov5"]] + + # define the supported metrics to iterate over + metrics = ["Non-zero mean intensity", "Total intensity", "99.9% intensity value"] + + # save sample combined .csv files for each metric + for metric in metrics: + # define the test melted DataFrame for an arbitrary QC metric + sample_qc_metric_data = pd.DataFrame() + + for chan, fovs in zip(chans, fov_batches): + chan_data = pd.DataFrame(np.random.rand(len(fovs)), columns=[metric]) - # Test that no file is created when not passing fig_dir - with tempfile.TemporaryDirectory() as temp_dir: - file_number_before = len(os.listdir(temp_dir)) - _ = qc_metrics_plots.call_violin_swarm_plot( - plotting_df, fig_label="test123", figsize=(20, 3), fig_dir=None + chan_data["fov"] = fovs + chan_data["channel"] = chan + + sample_qc_metric_data = pd.concat([sample_qc_metric_data, chan_data]) + + # get the file name of the combined QC metric .csv file to use + qc_metric_index = settings.QC_COLUMNS.index(metric) + qc_metric_suffix = settings.QC_SUFFIXES[qc_metric_index] + ".csv" + + # save the combined data + sample_qc_metric_data.to_csv( + os.path.join(tmp_path, "combined_%s" % qc_metric_suffix), index=False ) - file_number_after = len(os.listdir(temp_dir)) - assert file_number_before == file_number_after - - -def test_make_batch_effect_plot(): - # Testing exclude_channels would require making a separate function in - # qc_metrics_plots to generate and return the plotting_df - with tempfile.TemporaryDirectory() as top_level_dir: - data_dir = os.path.join(top_level_dir, "data_dir") - os.makedirs(data_dir) - fovs, chans = test_utils.gen_fov_chan_names(num_fovs=3, num_chans=3) - chans = ["chan0", "chan1", "chan2"] - fovs = ["TMA1_fov1", "TMA1_fov2", "TMA2_fov1", "TMA2_fov2"] - filelocs, data_xr = test_utils.create_paired_xarray_fovs( - data_dir, fovs, chans, img_shape=(10, 10), fills=True + + # pass an invalid metric + with pytest.raises(ValueError): + qc_metrics_plots.visualize_qc_metrics( + metric_name="bad_metric", qc_metric_dir="", save_dir="" ) - # Test no plot is made when not passing fig dir - file_number_before = len(os.listdir(data_dir)) - qc_metrics_plots.make_batch_effect_plot( - data_dir=data_dir, - normal_tissues=["fov1"], - exclude_channels=None, - img_sub_folder=None, - qc_metric="99.9th_percentile", - fig_dir=None, + # pass an invalid qc_metric_dir + with pytest.raises(FileNotFoundError): + qc_metrics_plots.visualize_qc_metrics("Non-zero mean intensity", "bad_qc_dir", save_dir="") + + # pass a qc_metric_dir without the combined files + os.mkdir(os.path.join(tmp_path, "empty_qc_dir")) + with pytest.raises(FileNotFoundError): + qc_metrics_plots.visualize_qc_metrics( + "Non-zero mean intensity", os.path.join(tmp_path, "empty_qc_dir"), save_dir="" ) - file_number_after = len(os.listdir(data_dir)) - assert file_number_before == file_number_after - - # Test plots are made when passing fig dir - qc_metrics_plots.make_batch_effect_plot( - data_dir=data_dir, - normal_tissues=["fov1", "fov2"], - exclude_channels=None, - img_sub_folder=None, - qc_metric="99.9th_percentile", - fig_dir=data_dir, + + # now test the visualization process for each metric + for metric in metrics: + # test without saving (should raise an error) + with pytest.raises(TypeError): + qc_metrics_plots.visualize_qc_metrics(metric, tmp_path) + + # test with saving + qc_metrics_plots.visualize_qc_metrics(metric, tmp_path, save_dir=tmp_path) + assert os.path.exists(os.path.join(tmp_path, "%s_barplot_stats.png" % metric)) + + +@pytest.fixture(scope="function") +def qc_tma_data(qc_tmas: QCMetricData) -> Generator[Callable, None, None]: + """ + A fixture which yields a function which creates the QCTMA class, + and computes the metrics, and the rank metrics. + + Args: + qc_tmas (QCMetricData): The fixture which creates the QCMetricData class. + + Yields: + Generator[Callable, None, None]: Yields a function which creates the QCTMA class, + and `tmas` and `channel_exclude` are variables which can be passed to the function. + """ + + def _compute_qc_tmas_metrics( + tmas: List[str], + channel_exclude: List[str] = None, + ) -> QCTMA: + qc_tmas_data = QCTMA( + qc_metrics=qc_tmas.qc_metrics, + cohort_path=qc_tmas.cohort_path, + metrics_dir=qc_tmas.qc_metrics_dir, ) - file_number_after = len(os.listdir(data_dir)) - assert os.path.exists(data_dir + "fov1" + "_batch_effects.png") - assert os.path.exists(data_dir + "fov2" + "_batch_effects.png") - - # test img sub folder - with tempfile.TemporaryDirectory() as top_level_dir: - data_dir = os.path.join(top_level_dir, "data_dir") - os.makedirs(data_dir) - fovs, chans = test_utils.gen_fov_chan_names(num_fovs=3, num_chans=3) - chans = ["chan0", "chan1", "chan2"] - fovs = ["TMA1_fov1", "TMA1_fov2", "TMA2_fov1", "TMA2_fov2"] - img_sub_folder = "sub_folder" - filelocs, data_xr = test_utils.create_paired_xarray_fovs( - data_dir, - fovs, - chans, - img_shape=(10, 10), - fills=True, - sub_dir=img_sub_folder, + + qc_tmas_data.compute_qc_tma_metrics(tmas=tmas) + qc_tmas_data.qc_tma_metrics_rank(tmas=tmas, channel_exclude=channel_exclude) + + return qc_tmas_data + + yield _compute_qc_tmas_metrics + + +@pytest.mark.parametrize( + "_tmas,_channel_exclude", + [ + (["Project_TMA1"], ["chan0"]), + (["Project_TMA1"], ["chan0", "chan1"]), + ], +) +def test_qc_tmas_metrics_plot( + qc_tma_data: QCTMA, _tmas: List[str], _channel_exclude: List[str] +) -> None: + qc_tma: QCTMA = qc_tma_data(tmas=_tmas, channel_exclude=_channel_exclude) + + qc_metrics_plots.qc_tmas_metrics_plot(qc_tmas=qc_tma, tmas=_tmas, dpi=30, save_figure=True) + + total_figures = [ + f"{tissue}_{qc}.png" for tissue, qc in itertools.product(_tmas, qc_tma.qc_suffixes) + ] + + # Assert the existance of the QC TMA metrics figures + for fig in total_figures: + assert os.path.exists(qc_tma.metrics_dir / "figures" / fig) + + +@pytest.fixture(scope="function") +def batch_effect_qc_data(cohort_data: BatchEffectMetricData) -> Generator[Callable, None, None]: + """ + Creates the QCControlMetrics class, and computes the metrics, and then filters out unwanted + channels. + + Args: + cohort_data (BatchEffectMetricData): The Fixture which creates the BatchEffectMetricData + class. + + Yields: + Generator[Callable, None, None]: A Function which generates the QCControlMetrics object, + computes the QC metricss, and filters channels.. + """ + + def _compute_qc_batch_effects( + fovs: List[str], + channel_include: List[str] = None, + channel_exclude: List[str] = None, + ) -> QCControlMetrics: + qc_batch_effects = QCControlMetrics( + qc_metrics=cohort_data.qc_metrics, + cohort_path=cohort_data.cohort_img_dir, + metrics_dir=cohort_data.cohort_metrics_dir, ) - qc_metrics_plots.make_batch_effect_plot( - data_dir=data_dir, - normal_tissues=["fov1", "fov2"], - exclude_channels=None, - img_sub_folder=img_sub_folder, - qc_metric="99.9th_percentile", - fig_dir=data_dir, + + qc_batch_effects.compute_control_qc_metrics( + control_sample_name="Project_Batch1", + fovs=fovs, + channel_exclude=channel_exclude, + channel_include=channel_include, ) - assert os.path.exists(data_dir + "fov1" + "_batch_effects.png") + return qc_batch_effects + + yield _compute_qc_batch_effects + + +@pytest.mark.parametrize( + "_fovs,_channel_include,_channel_exclude", + [ + (["fov0", "fov1", "fov2"], ["chan0", "chan1"], None), + (["fov0"], ["chan0"], ["chan1", "chan2"]), + ], +) +def test_longitudinal_control_heatmap( + batch_effect_qc_data: Callable, + _fovs: List[str], + _channel_include: Optional[List[str]], + _channel_exclude: Optional[List[str]], +) -> None: + _save_figure: bool = True + + qc_control: QCControlMetrics = batch_effect_qc_data(_fovs, _channel_include, _channel_exclude) + + _control_sample_name = "Project_Batch1" + + qc_metrics_plots.longitudinal_control_heatmap( + qc_control=qc_control, + control_sample_name=_control_sample_name, + save_figure=_save_figure, + dpi=30, + ) + + total_figures: List[str] = [ + f"{_control_sample_name}_heatmap_{qc}.png" + for fov, qc in itertools.product(_fovs, qc_control.qc_suffixes) + ] + + # Assert the existance of the Longitudinal Control figures + for fig in total_figures: + assert os.path.exists(qc_control.metrics_dir / "figures" / fig) diff --git a/tests/reorg_test.py b/tests/reorg_test.py index 2b1b913a..fe7c653b 100644 --- a/tests/reorg_test.py +++ b/tests/reorg_test.py @@ -1,4 +1,3 @@ -import json import os import tempfile diff --git a/tests/streak_detection_test.py b/tests/streak_detection_test.py index 0b51ad98..edb74be7 100644 --- a/tests/streak_detection_test.py +++ b/tests/streak_detection_test.py @@ -12,7 +12,7 @@ @pytest.fixture(scope="function") -def streak_dataset() -> Callable: +def streak_dataset(rng: np.random.Generator) -> Callable: """A wrapper for creating a StreakData DataClass for testing purposes. Returns: @@ -27,9 +27,9 @@ def streak_data_generator(corrected_dir, fov: str, chan: str, shape: Tuple[int, corrected_dir=corrected_dir, streak_channel=chan, streak_mask=np.zeros(shape=shape), - streak_df=pd.util.testing.makeDataFrame(), + streak_df=pd.DataFrame({"A": rng.random(10), "B": rng.random(10)}), filtered_streak_mask=np.zeros(shape=shape), - filtered_streak_df=pd.util.testing.makeDataFrame(), + filtered_streak_df=pd.DataFrame({"A": rng.random(10), "B": rng.random(10)}), boxed_streaks=np.zeros(shape=shape), corrected_streak_mask=np.zeros(shape=shape), )