From b9f38767cdbf398bcfe372fe15433e78013e2f4b Mon Sep 17 00:00:00 2001 From: Amrit Krishnan Date: Fri, 9 Feb 2024 12:32:09 -0500 Subject: [PATCH 1/2] Update to pillow 10.0 which has important security fixes (#551) --- .pre-commit-config.yaml | 4 +- cyclops/models/catalog.py | 2 +- poetry.lock | 260 +++++++++++++++++++++----------------- pyproject.toml | 25 ++-- 4 files changed, 162 insertions(+), 129 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index dec51d443..0dae4d3d7 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -21,7 +21,7 @@ repos: - id: black - repo: https://github.com/charliermarsh/ruff-pre-commit - rev: 'v0.1.7' + rev: 'v0.2.1' hooks: - id: ruff args: [--fix, --exit-non-zero-on-fix] @@ -45,7 +45,7 @@ repos: exclude: ^docs/source/tutorials/gemini/.*\.ipynb$ - repo: https://github.com/nbQA-dev/nbQA - rev: 1.7.0 + rev: 1.7.1 hooks: - id: nbqa-black - id: nbqa-ruff diff --git a/cyclops/models/catalog.py b/cyclops/models/catalog.py index 437f5edc5..502037da7 100644 --- a/cyclops/models/catalog.py +++ b/cyclops/models/catalog.py @@ -218,7 +218,7 @@ def create_model( An instance of the model. """ - model_class = _model_catalog.get(model_name, None) + model_class = _model_catalog.get(model_name) if model_class is None: if model_name == "xgb_classifier": raise RuntimeError(_xgboost_unavailable_message) diff --git a/poetry.lock b/poetry.lock index 102922b3c..dd50f33df 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. [[package]] name = "aiofiles" @@ -149,13 +149,13 @@ files = [ [[package]] name = "alibi" -version = "0.9.4" +version = "0.9.5" description = "Algorithms for monitoring and explaining machine learning models" optional = false python-versions = ">=3.8" files = [ - {file = "alibi-0.9.4-py3-none-any.whl", hash = "sha256:85f014f3d451273209f3aea3e31dd79b7cdd2969224718c19c171dc94873e4b0"}, - {file = "alibi-0.9.4.tar.gz", hash = "sha256:96d2dec2f2bdf6fc7ea30d35372b1f078128568db656849a26f37d69f5c89a83"}, + {file = "alibi-0.9.5-py3-none-any.whl", hash = "sha256:88ac97ff00e06d7686f82480d6cdba86109245f0dd2bb7b311b1a95f8162fcd1"}, + {file = "alibi-0.9.5.tar.gz", hash = "sha256:7797e480285338eb24eea606d620b9b74ccddfd32c366b4c73076cfd57e46096"}, ] [package.dependencies] @@ -163,64 +163,65 @@ attrs = ">=19.2.0,<24.0.0" blis = "<0.8.0" dill = ">=0.3.0,<0.4.0" matplotlib = ">=3.0.0,<4.0.0" -numba = {version = ">=0.50.0,<0.54.0 || >0.54.0,<0.58.0", optional = true, markers = "extra == \"shap\""} +numba = {version = ">=0.50.0,<0.54.0 || >0.54.0,<0.59.0", optional = true, markers = "extra == \"shap\""} numpy = ">=1.16.2,<2.0.0" pandas = ">=1.0.0,<3.0.0" -Pillow = ">=5.4.1,<10.0" +Pillow = ">=5.4.1,<11.0" +pydantic = "<2.0.0" requests = ">=2.21.0,<3.0.0" -scikit-image = ">=0.17.2,<0.22" +scikit-image = ">=0.17.2,<0.23" scikit-learn = ">=1.0.0,<2.0.0" scipy = ">=1.1.0,<2.0.0" -shap = {version = ">=0.40.0,<0.43.0", optional = true, markers = "extra == \"shap\""} +shap = {version = ">=0.40.0,<0.44.0", optional = true, markers = "extra == \"shap\""} spacy = {version = ">=2.0.0,<4.0.0", extras = ["lookups"]} tqdm = ">=4.28.1,<5.0.0" transformers = ">=4.7.0,<5.0.0" typing-extensions = ">=3.7.4.3" [package.extras] -all = ["numba (>=0.50.0,!=0.54.0,<0.58.0)", "ray (>=0.8.7,<3.0.0)", "shap (>=0.40.0,<0.43.0)", "tensorflow (>=2.0.0,!=2.6.0,!=2.6.1,<2.13.0)", "torch (>=1.9.0,<3.0.0)"] +all = ["numba (>=0.50.0,!=0.54.0,<0.59.0)", "ray (>=0.8.7,<3.0.0)", "shap (>=0.40.0,<0.44.0)", "tensorflow (>=2.0.0,!=2.6.0,!=2.6.1,<2.15.0)", "torch (>=1.9.0,<3.0.0)"] ray = ["ray (>=0.8.7,<3.0.0)"] -shap = ["numba (>=0.50.0,!=0.54.0,<0.58.0)", "shap (>=0.40.0,<0.43.0)"] -tensorflow = ["tensorflow (>=2.0.0,!=2.6.0,!=2.6.1,<2.13.0)"] -torch = ["torch (>=1.9.0,<2.0.0)"] +shap = ["numba (>=0.50.0,!=0.54.0,<0.59.0)", "shap (>=0.40.0,<0.44.0)"] +tensorflow = ["tensorflow (>=2.0.0,!=2.6.0,!=2.6.1,<2.15.0)"] +torch = ["torch (>=1.9.0,<3.0.0)"] [[package]] name = "alibi-detect" -version = "0.11.4" +version = "0.11.5" description = "Algorithms for outlier detection, concept drift and metrics." optional = false python-versions = ">=3.8" files = [ - {file = "alibi-detect-0.11.4.tar.gz", hash = "sha256:5e81eee628260a264e5ebf27d9ab400a34f8ab53d1c0e883547c4c6f9b1aa1be"}, - {file = "alibi_detect-0.11.4-py3-none-any.whl", hash = "sha256:d1273a160583df44eaa17d557762152f70dda0ef064963c622655f3fef8d4aa3"}, + {file = "alibi-detect-0.11.5.tar.gz", hash = "sha256:b6018021d82d36c01856fc4e7b3b2f92aa9aa46e4c4621aaf2e649c2e932129d"}, + {file = "alibi_detect-0.11.5-py3-none-any.whl", hash = "sha256:fd65eb0451d3ac4cc676181c65ec4aafffe855cce16bc218dd00216ae317e58a"}, ] [package.dependencies] catalogue = ">=2.0.0,<3.0.0" dill = ">=0.3.0,<0.4.0" matplotlib = ">=3.0.0,<4.0.0" -numba = ">=0.50.0,<0.54.0 || >0.54.0,<0.58.0" +numba = ">=0.50.0,<0.54.0 || >0.54.0,<0.59.0" numpy = ">=1.16.2,<2.0.0" opencv-python = ">=3.2.0,<5.0.0" pandas = ">=1.0.0,<3.0.0" -Pillow = ">=5.4.1,<10.0.0" +Pillow = ">=5.4.1,<11.0.0" pydantic = ">=1.8.0,<2.0.0" requests = ">=2.21.0,<3.0.0" -scikit-image = ">=0.14.2,<0.17.1 || >0.17.1,<0.22" +scikit-image = ">=0.19,<0.23" scikit-learn = ">=0.20.2,<2.0.0" scipy = ">=1.3.0,<2.0.0" toml = ">=0.10.1,<1.0.0" -torch = {version = ">=1.7.0,<1.14.0", optional = true, markers = "extra == \"torch\""} +torch = {version = ">=1.7.0,<3.0.0", optional = true, markers = "extra == \"torch\""} tqdm = ">=4.28.1,<5.0.0" transformers = ">=4.0.0,<5.0.0" typing-extensions = ">=3.7.4.3" [package.extras] -all = ["prophet (>=1.1.0,<2.0.0)", "pykeops (>=2.0.0,<2.2.0)", "tensorflow (>=2.2.0,!=2.6.0,!=2.6.1,<2.13.0)", "tensorflow-probability (>=0.8.0,<0.20.0)", "torch (>=1.7.0,<1.14.0)"] -keops = ["pykeops (>=2.0.0,<2.2.0)", "torch (>=1.7.0,<1.14.0)"] +all = ["prophet (>=1.1.0,<2.0.0)", "pykeops (>=2.0.0,<2.2.0)", "tensorflow (>=2.2.0,!=2.6.0,!=2.6.1,<2.15.0)", "tensorflow-probability (>=0.8.0,<0.23.0)", "torch (>=1.7.0,<3.0.0)"] +keops = ["pykeops (>=2.0.0,<2.2.0)", "torch (>=1.7.0,<3.0.0)"] prophet = ["prophet (>=1.1.0,<2.0.0)"] -tensorflow = ["tensorflow (>=2.2.0,!=2.6.0,!=2.6.1,<2.13.0)", "tensorflow-probability (>=0.8.0,<0.20.0)"] -torch = ["torch (>=1.7.0,<1.14.0)"] +tensorflow = ["tensorflow (>=2.2.0,!=2.6.0,!=2.6.1,<2.15.0)", "tensorflow-probability (>=0.8.0,<0.23.0)"] +torch = ["torch (>=1.7.0,<3.0.0)"] [[package]] name = "antlr4-python3-runtime" @@ -2408,6 +2409,7 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" files = [ {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, + {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, ] [[package]] @@ -3155,6 +3157,16 @@ files = [ {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-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, {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"}, @@ -4070,10 +4082,12 @@ files = [ [package.dependencies] numpy = [ - {version = ">=1.21.0", markers = "python_version == \"3.9\" and platform_system == \"Darwin\" and platform_machine == \"arm64\""}, + {version = ">=1.21.0", markers = "python_version <= \"3.9\" and platform_system == \"Darwin\" and platform_machine == \"arm64\""}, + {version = ">=1.21.2", markers = "python_version >= \"3.10\""}, {version = ">=1.21.4", markers = "python_version >= \"3.10\" and platform_system == \"Darwin\""}, - {version = ">=1.21.2", markers = "platform_system != \"Darwin\" and python_version >= \"3.10\""}, - {version = ">=1.19.3", markers = "platform_system == \"Linux\" and platform_machine == \"aarch64\" and python_version >= \"3.8\" and python_version < \"3.10\" or python_version > \"3.9\" and python_version < \"3.10\" or python_version >= \"3.9\" and platform_system != \"Darwin\" and python_version < \"3.10\" or python_version >= \"3.9\" and platform_machine != \"arm64\" and python_version < \"3.10\""}, + {version = ">=1.19.3", markers = "python_version >= \"3.6\" and platform_system == \"Linux\" and platform_machine == \"aarch64\" or python_version >= \"3.9\""}, + {version = ">=1.17.0", markers = "python_version >= \"3.7\""}, + {version = ">=1.17.3", markers = "python_version >= \"3.8\""}, ] [[package]] @@ -4226,82 +4240,88 @@ ptyprocess = ">=0.5" [[package]] name = "pillow" -version = "9.5.0" +version = "10.2.0" description = "Python Imaging Library (Fork)" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Pillow-9.5.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:ace6ca218308447b9077c14ea4ef381ba0b67ee78d64046b3f19cf4e1139ad16"}, - {file = "Pillow-9.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d3d403753c9d5adc04d4694d35cf0391f0f3d57c8e0030aac09d7678fa8030aa"}, - {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ba1b81ee69573fe7124881762bb4cd2e4b6ed9dd28c9c60a632902fe8db8b38"}, - {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe7e1c262d3392afcf5071df9afa574544f28eac825284596ac6db56e6d11062"}, - {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f36397bf3f7d7c6a3abdea815ecf6fd14e7fcd4418ab24bae01008d8d8ca15e"}, - {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:252a03f1bdddce077eff2354c3861bf437c892fb1832f75ce813ee94347aa9b5"}, - {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:85ec677246533e27770b0de5cf0f9d6e4ec0c212a1f89dfc941b64b21226009d"}, - {file = "Pillow-9.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b416f03d37d27290cb93597335a2f85ed446731200705b22bb927405320de903"}, - {file = "Pillow-9.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1781a624c229cb35a2ac31cc4a77e28cafc8900733a864870c49bfeedacd106a"}, - {file = "Pillow-9.5.0-cp310-cp310-win32.whl", hash = "sha256:8507eda3cd0608a1f94f58c64817e83ec12fa93a9436938b191b80d9e4c0fc44"}, - {file = "Pillow-9.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:d3c6b54e304c60c4181da1c9dadf83e4a54fd266a99c70ba646a9baa626819eb"}, - {file = "Pillow-9.5.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:7ec6f6ce99dab90b52da21cf0dc519e21095e332ff3b399a357c187b1a5eee32"}, - {file = "Pillow-9.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:560737e70cb9c6255d6dcba3de6578a9e2ec4b573659943a5e7e4af13f298f5c"}, - {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96e88745a55b88a7c64fa49bceff363a1a27d9a64e04019c2281049444a571e3"}, - {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d9c206c29b46cfd343ea7cdfe1232443072bbb270d6a46f59c259460db76779a"}, - {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cfcc2c53c06f2ccb8976fb5c71d448bdd0a07d26d8e07e321c103416444c7ad1"}, - {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:a0f9bb6c80e6efcde93ffc51256d5cfb2155ff8f78292f074f60f9e70b942d99"}, - {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8d935f924bbab8f0a9a28404422da8af4904e36d5c33fc6f677e4c4485515625"}, - {file = "Pillow-9.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fed1e1cf6a42577953abbe8e6cf2fe2f566daebde7c34724ec8803c4c0cda579"}, - {file = "Pillow-9.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c1170d6b195555644f0616fd6ed929dfcf6333b8675fcca044ae5ab110ded296"}, - {file = "Pillow-9.5.0-cp311-cp311-win32.whl", hash = "sha256:54f7102ad31a3de5666827526e248c3530b3a33539dbda27c6843d19d72644ec"}, - {file = "Pillow-9.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:cfa4561277f677ecf651e2b22dc43e8f5368b74a25a8f7d1d4a3a243e573f2d4"}, - {file = "Pillow-9.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:965e4a05ef364e7b973dd17fc765f42233415974d773e82144c9bbaaaea5d089"}, - {file = "Pillow-9.5.0-cp312-cp312-win32.whl", hash = "sha256:22baf0c3cf0c7f26e82d6e1adf118027afb325e703922c8dfc1d5d0156bb2eeb"}, - {file = "Pillow-9.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:432b975c009cf649420615388561c0ce7cc31ce9b2e374db659ee4f7d57a1f8b"}, - {file = "Pillow-9.5.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:5d4ebf8e1db4441a55c509c4baa7a0587a0210f7cd25fcfe74dbbce7a4bd1906"}, - {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:375f6e5ee9620a271acb6820b3d1e94ffa8e741c0601db4c0c4d3cb0a9c224bf"}, - {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99eb6cafb6ba90e436684e08dad8be1637efb71c4f2180ee6b8f940739406e78"}, - {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dfaaf10b6172697b9bceb9a3bd7b951819d1ca339a5ef294d1f1ac6d7f63270"}, - {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:763782b2e03e45e2c77d7779875f4432e25121ef002a41829d8868700d119392"}, - {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:35f6e77122a0c0762268216315bf239cf52b88865bba522999dc38f1c52b9b47"}, - {file = "Pillow-9.5.0-cp37-cp37m-win32.whl", hash = "sha256:aca1c196f407ec7cf04dcbb15d19a43c507a81f7ffc45b690899d6a76ac9fda7"}, - {file = "Pillow-9.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322724c0032af6692456cd6ed554bb85f8149214d97398bb80613b04e33769f6"}, - {file = "Pillow-9.5.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:a0aa9417994d91301056f3d0038af1199eb7adc86e646a36b9e050b06f526597"}, - {file = "Pillow-9.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f8286396b351785801a976b1e85ea88e937712ee2c3ac653710a4a57a8da5d9c"}, - {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c830a02caeb789633863b466b9de10c015bded434deb3ec87c768e53752ad22a"}, - {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fbd359831c1657d69bb81f0db962905ee05e5e9451913b18b831febfe0519082"}, - {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8fc330c3370a81bbf3f88557097d1ea26cd8b019d6433aa59f71195f5ddebbf"}, - {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:7002d0797a3e4193c7cdee3198d7c14f92c0836d6b4a3f3046a64bd1ce8df2bf"}, - {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:229e2c79c00e85989a34b5981a2b67aa079fd08c903f0aaead522a1d68d79e51"}, - {file = "Pillow-9.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9adf58f5d64e474bed00d69bcd86ec4bcaa4123bfa70a65ce72e424bfb88ed96"}, - {file = "Pillow-9.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:662da1f3f89a302cc22faa9f14a262c2e3951f9dbc9617609a47521c69dd9f8f"}, - {file = "Pillow-9.5.0-cp38-cp38-win32.whl", hash = "sha256:6608ff3bf781eee0cd14d0901a2b9cc3d3834516532e3bd673a0a204dc8615fc"}, - {file = "Pillow-9.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:e49eb4e95ff6fd7c0c402508894b1ef0e01b99a44320ba7d8ecbabefddcc5569"}, - {file = "Pillow-9.5.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:482877592e927fd263028c105b36272398e3e1be3269efda09f6ba21fd83ec66"}, - {file = "Pillow-9.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3ded42b9ad70e5f1754fb7c2e2d6465a9c842e41d178f262e08b8c85ed8a1d8e"}, - {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c446d2245ba29820d405315083d55299a796695d747efceb5717a8b450324115"}, - {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aca1152d93dcc27dc55395604dcfc55bed5f25ef4c98716a928bacba90d33a3"}, - {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:608488bdcbdb4ba7837461442b90ea6f3079397ddc968c31265c1e056964f1ef"}, - {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:60037a8db8750e474af7ffc9faa9b5859e6c6d0a50e55c45576bf28be7419705"}, - {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:07999f5834bdc404c442146942a2ecadd1cb6292f5229f4ed3b31e0a108746b1"}, - {file = "Pillow-9.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a127ae76092974abfbfa38ca2d12cbeddcdeac0fb71f9627cc1135bedaf9d51a"}, - {file = "Pillow-9.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:489f8389261e5ed43ac8ff7b453162af39c3e8abd730af8363587ba64bb2e865"}, - {file = "Pillow-9.5.0-cp39-cp39-win32.whl", hash = "sha256:9b1af95c3a967bf1da94f253e56b6286b50af23392a886720f563c547e48e964"}, - {file = "Pillow-9.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:77165c4a5e7d5a284f10a6efaa39a0ae8ba839da344f20b111d62cc932fa4e5d"}, - {file = "Pillow-9.5.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:833b86a98e0ede388fa29363159c9b1a294b0905b5128baf01db683672f230f5"}, - {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aaf305d6d40bd9632198c766fb64f0c1a83ca5b667f16c1e79e1661ab5060140"}, - {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0852ddb76d85f127c135b6dd1f0bb88dbb9ee990d2cd9aa9e28526c93e794fba"}, - {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:91ec6fe47b5eb5a9968c79ad9ed78c342b1f97a091677ba0e012701add857829"}, - {file = "Pillow-9.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:cb841572862f629b99725ebaec3287fc6d275be9b14443ea746c1dd325053cbd"}, - {file = "Pillow-9.5.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:c380b27d041209b849ed246b111b7c166ba36d7933ec6e41175fd15ab9eb1572"}, - {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c9af5a3b406a50e313467e3565fc99929717f780164fe6fbb7704edba0cebbe"}, - {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5671583eab84af046a397d6d0ba25343c00cd50bce03787948e0fff01d4fd9b1"}, - {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:84a6f19ce086c1bf894644b43cd129702f781ba5751ca8572f08aa40ef0ab7b7"}, - {file = "Pillow-9.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1e7723bd90ef94eda669a3c2c19d549874dd5badaeefabefd26053304abe5799"}, - {file = "Pillow-9.5.0.tar.gz", hash = "sha256:bf548479d336726d7a0eceb6e767e179fbde37833ae42794602631a070d630f1"}, + {file = "pillow-10.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e"}, + {file = "pillow-10.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2"}, + {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c"}, + {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0"}, + {file = "pillow-10.2.0-cp310-cp310-win32.whl", hash = "sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023"}, + {file = "pillow-10.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72"}, + {file = "pillow-10.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad"}, + {file = "pillow-10.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5"}, + {file = "pillow-10.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311"}, + {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1"}, + {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757"}, + {file = "pillow-10.2.0-cp311-cp311-win32.whl", hash = "sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068"}, + {file = "pillow-10.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56"}, + {file = "pillow-10.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1"}, + {file = "pillow-10.2.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef"}, + {file = "pillow-10.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04"}, + {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f"}, + {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb"}, + {file = "pillow-10.2.0-cp312-cp312-win32.whl", hash = "sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f"}, + {file = "pillow-10.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9"}, + {file = "pillow-10.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48"}, + {file = "pillow-10.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9"}, + {file = "pillow-10.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d"}, + {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6"}, + {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe"}, + {file = "pillow-10.2.0-cp38-cp38-win32.whl", hash = "sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e"}, + {file = "pillow-10.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39"}, + {file = "pillow-10.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67"}, + {file = "pillow-10.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13"}, + {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7"}, + {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591"}, + {file = "pillow-10.2.0-cp39-cp39-win32.whl", hash = "sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516"}, + {file = "pillow-10.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8"}, + {file = "pillow-10.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6"}, + {file = "pillow-10.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868"}, + {file = "pillow-10.2.0.tar.gz", hash = "sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e"}, ] [package.extras] docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +typing = ["typing-extensions"] +xmp = ["defusedxml"] [[package]] name = "platformdirs" @@ -4490,6 +4510,8 @@ files = [ {file = "psycopg2-2.9.9-cp310-cp310-win_amd64.whl", hash = "sha256:426f9f29bde126913a20a96ff8ce7d73fd8a216cfb323b1f04da402d452853c3"}, {file = "psycopg2-2.9.9-cp311-cp311-win32.whl", hash = "sha256:ade01303ccf7ae12c356a5e10911c9e1c51136003a9a1d92f7aa9d010fb98372"}, {file = "psycopg2-2.9.9-cp311-cp311-win_amd64.whl", hash = "sha256:121081ea2e76729acfb0673ff33755e8703d45e926e416cb59bae3a86c6a4981"}, + {file = "psycopg2-2.9.9-cp312-cp312-win32.whl", hash = "sha256:d735786acc7dd25815e89cc4ad529a43af779db2e25aa7c626de864127e5a024"}, + {file = "psycopg2-2.9.9-cp312-cp312-win_amd64.whl", hash = "sha256:a7653d00b732afb6fc597e29c50ad28087dcb4fbfb28e86092277a559ae4e693"}, {file = "psycopg2-2.9.9-cp37-cp37m-win32.whl", hash = "sha256:5e0d98cade4f0e0304d7d6f25bbfbc5bd186e07b38eac65379309c4ca3193efa"}, {file = "psycopg2-2.9.9-cp37-cp37m-win_amd64.whl", hash = "sha256:7e2dacf8b009a1c1e843b5213a87f7c544b2b042476ed7755be813eaf4e8347a"}, {file = "psycopg2-2.9.9-cp38-cp38-win32.whl", hash = "sha256:ff432630e510709564c01dafdbe996cb552e0b9f3f065eb89bdce5bd31fabf4c"}, @@ -4967,6 +4989,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -4974,8 +4997,15 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -4992,6 +5022,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -4999,6 +5030,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -5440,28 +5472,28 @@ files = [ [[package]] name = "ruff" -version = "0.1.8" +version = "0.2.1" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.1.8-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:7de792582f6e490ae6aef36a58d85df9f7a0cfd1b0d4fe6b4fb51803a3ac96fa"}, - {file = "ruff-0.1.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:c8e3255afd186c142eef4ec400d7826134f028a85da2146102a1172ecc7c3696"}, - {file = "ruff-0.1.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff78a7583020da124dd0deb835ece1d87bb91762d40c514ee9b67a087940528b"}, - {file = "ruff-0.1.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd8ee69b02e7bdefe1e5da2d5b6eaaddcf4f90859f00281b2333c0e3a0cc9cd6"}, - {file = "ruff-0.1.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a05b0ddd7ea25495e4115a43125e8a7ebed0aa043c3d432de7e7d6e8e8cd6448"}, - {file = "ruff-0.1.8-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:e6f08ca730f4dc1b76b473bdf30b1b37d42da379202a059eae54ec7fc1fbcfed"}, - {file = "ruff-0.1.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f35960b02df6b827c1b903091bb14f4b003f6cf102705efc4ce78132a0aa5af3"}, - {file = "ruff-0.1.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7d076717c67b34c162da7c1a5bda16ffc205e0e0072c03745275e7eab888719f"}, - {file = "ruff-0.1.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6a21ab023124eafb7cef6d038f835cb1155cd5ea798edd8d9eb2f8b84be07d9"}, - {file = "ruff-0.1.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:ce697c463458555027dfb194cb96d26608abab920fa85213deb5edf26e026664"}, - {file = "ruff-0.1.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:db6cedd9ffed55548ab313ad718bc34582d394e27a7875b4b952c2d29c001b26"}, - {file = "ruff-0.1.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:05ffe9dbd278965271252704eddb97b4384bf58b971054d517decfbf8c523f05"}, - {file = "ruff-0.1.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5daaeaf00ae3c1efec9742ff294b06c3a2a9db8d3db51ee4851c12ad385cda30"}, - {file = "ruff-0.1.8-py3-none-win32.whl", hash = "sha256:e49fbdfe257fa41e5c9e13c79b9e79a23a79bd0e40b9314bc53840f520c2c0b3"}, - {file = "ruff-0.1.8-py3-none-win_amd64.whl", hash = "sha256:f41f692f1691ad87f51708b823af4bb2c5c87c9248ddd3191c8f088e66ce590a"}, - {file = "ruff-0.1.8-py3-none-win_arm64.whl", hash = "sha256:aa8ee4f8440023b0a6c3707f76cadce8657553655dcbb5fc9b2f9bb9bee389f6"}, - {file = "ruff-0.1.8.tar.gz", hash = "sha256:f7ee467677467526cfe135eab86a40a0e8db43117936ac4f9b469ce9cdb3fb62"}, + {file = "ruff-0.2.1-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:dd81b911d28925e7e8b323e8d06951554655021df8dd4ac3045d7212ac4ba080"}, + {file = "ruff-0.2.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:dc586724a95b7d980aa17f671e173df00f0a2eef23f8babbeee663229a938fec"}, + {file = "ruff-0.2.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c92db7101ef5bfc18e96777ed7bc7c822d545fa5977e90a585accac43d22f18a"}, + {file = "ruff-0.2.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:13471684694d41ae0f1e8e3a7497e14cd57ccb7dd72ae08d56a159d6c9c3e30e"}, + {file = "ruff-0.2.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a11567e20ea39d1f51aebd778685582d4c56ccb082c1161ffc10f79bebe6df35"}, + {file = "ruff-0.2.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:00a818e2db63659570403e44383ab03c529c2b9678ba4ba6c105af7854008105"}, + {file = "ruff-0.2.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be60592f9d218b52f03384d1325efa9d3b41e4c4d55ea022cd548547cc42cd2b"}, + {file = "ruff-0.2.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbd2288890b88e8aab4499e55148805b58ec711053588cc2f0196a44f6e3d855"}, + {file = "ruff-0.2.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3ef052283da7dec1987bba8d8733051c2325654641dfe5877a4022108098683"}, + {file = "ruff-0.2.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:7022d66366d6fded4ba3889f73cd791c2d5621b2ccf34befc752cb0df70f5fad"}, + {file = "ruff-0.2.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:0a725823cb2a3f08ee743a534cb6935727d9e47409e4ad72c10a3faf042ad5ba"}, + {file = "ruff-0.2.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:0034d5b6323e6e8fe91b2a1e55b02d92d0b582d2953a2b37a67a2d7dedbb7acc"}, + {file = "ruff-0.2.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e5cb5526d69bb9143c2e4d2a115d08ffca3d8e0fddc84925a7b54931c96f5c02"}, + {file = "ruff-0.2.1-py3-none-win32.whl", hash = "sha256:6b95ac9ce49b4fb390634d46d6ece32ace3acdd52814671ccaf20b7f60adb232"}, + {file = "ruff-0.2.1-py3-none-win_amd64.whl", hash = "sha256:e3affdcbc2afb6f5bd0eb3130139ceedc5e3f28d206fe49f63073cb9e65988e0"}, + {file = "ruff-0.2.1-py3-none-win_arm64.whl", hash = "sha256:efababa8e12330aa94a53e90a81eb6e2d55f348bc2e71adbf17d9cad23c03ee6"}, + {file = "ruff-0.2.1.tar.gz", hash = "sha256:3b42b5d8677cd0c72b99fcaf068ffc62abb5a19e71b4a3b9cfa50658a0af02f1"}, ] [[package]] @@ -6362,7 +6394,7 @@ files = [ ] [package.dependencies] -greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} +greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and (platform_machine == \"win32\" or platform_machine == \"WIN32\" or platform_machine == \"AMD64\" or platform_machine == \"amd64\" or platform_machine == \"x86_64\" or platform_machine == \"ppc64le\" or platform_machine == \"aarch64\")"} [package.extras] aiomysql = ["aiomysql (>=0.2.0)", "greenlet (!=0.4.17)"] @@ -7666,4 +7698,4 @@ xgboost = ["xgboost"] [metadata] lock-version = "2.0" python-versions = ">=3.9, <3.11" -content-hash = "0c2ee6790e7c45da8e7b9f7d8dfb30f3579081be4da9df5600be577be1eeac07" +content-hash = "e7c753e736bb502e827a90ef2ad0d9df6b5f4c421508aac8a1ada122de930302" diff --git a/pyproject.toml b/pyproject.toml index 3a0994770..b55a59fdc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,7 +27,7 @@ pybtex = "^0.24.0" kaleido = "0.2.1" scour = "^0.38.2" plotly = "^5.7.0" -pillow = "^9.5.0" +pillow = "^10.0.0" array-api-compat = "^1.4" hydra-core = "^1.2.0" @@ -100,7 +100,7 @@ pytest-cov = "^3.0.0" codecov = "^2.1.13" nbstripout = "^0.6.1" mypy = "^1.7.0" -ruff = "^0.1.0" +ruff = "^0.2.0" nbqa = { version = "^1.7.0", extras = ["toolchain"] } cycquery = "^0.1.2" # used for integration test torchmetrics = {version = "^1.2.0", extras = ["classification", "regression"]} @@ -174,6 +174,12 @@ extra_checks = true [tool.ruff] include = ["*.py", "pyproject.toml", "*.ipynb"] +line-length = 88 +exclude = [ + "use_cases", + "nbs", +] +[tool.ruff.lint] select = [ "A", # flake8-builtins "B", # flake8-bugbear @@ -194,11 +200,6 @@ select = [ "PL", # pylint ] fixable = ["A", "B", "COM", "C4", "RET", "SIM", "ICN", "Q", "RSE", "D", "E", "F", "I", "W", "N", "ERA", "PL"] -line-length = 88 -exclude = [ - "use_cases", - "nbs", -] ignore = [ "B905", # `zip()` without an explicit `strict=` parameter "E501", # line too long @@ -209,19 +210,19 @@ ignore = [ ] # Ignore import violations in all `__init__.py` files. -[tool.ruff.per-file-ignores] +[tool.ruff.lint.per-file-ignores] "__init__.py" = ["E402", "F401", "F403", "F811"] -[tool.ruff.pep8-naming] +[tool.ruff.lint.pep8-naming] ignore-names = ["X*", "setUp"] -[tool.ruff.isort] +[tool.ruff.lint.isort] lines-after-imports = 2 -[tool.ruff.pydocstyle] +[tool.ruff.lint.pydocstyle] convention = "numpy" -[tool.ruff.pycodestyle] +[tool.ruff.lint.pycodestyle] max-doc-length = 88 [tool.pytest.ini_options] From 1bf5eb28076afd67b5c0e00d1b9feae40e95bf29 Mon Sep 17 00:00:00 2001 From: Roya Javadi Date: Sun, 11 Feb 2024 12:37:06 -0800 Subject: [PATCH 2/2] Improve documentation for evaluate package (#543) * Changed documentation theme to sphinx-book-theme * Added details about Pandoc requirment * Added initial document for accuracy.py * Fix pre-commit hook errors * Added confusion matrix doc * Add auroc doc and fix titles * Add average precision docs * Added more documents for metrics * Add index for user guide in side bar * Minor patches (#542) * Fix capitalization of Python * Change ValueError to TypeError and update docstrings * Add Precision-Recall Curve to experimental metrics (#544) * Add ROC curve (#545) * Add ROC metrics to experimental module * fix typo * Fix docstrings * Add AUROC (#546) * Add AUROC metric to experimental module * Refactor binary and multiclass ROC functions * Refactor tests to use a common thresholds list * Fix mypy error * Add regression metrics (#547) * Add regression support * update docstrings * Ignore `no-any-return` errors * Integrate experimental metrics with other modules (#549) * integrate experimental metrics with other modules * add average precision metric to experimental metrics package * fix tutorials * Add type hints and keyword arguments to metrics classes * Update nbsphinx version to 0.9.3 * Update nbconvert version to 7.14.2 * Fix type annotations and formatting issues * Update kernel display name in mortality_prediction.ipynb * Add guard clause to prevent module execution on import * Update `torch_distributed.py` with type hints * Add multiclass and multilabel average precision metrics * Change jupyter kernel * Fix type annotations for metric values in ClassificationPlotter --------- Co-authored-by: Amrit K * Changed documentation theme to sphinx-book-theme * Don't update deps * Pre-commit fixes * Add doc for ROC Curve * Fix footer in docs * Bump to 0.2.3 Signed-off-by: Amrit Krishnan * Add logo and css fixes * Fix formatting of conf.py file * Small fix * Move evaluation metrics docs under API reference * Fix poetry build * Improve documentation structure * Formatting fixes --------- Signed-off-by: Amrit Krishnan Co-authored-by: Franklin <41602287+fcogidi@users.noreply.github.com> Co-authored-by: Amrit K Co-authored-by: Amrit Krishnan --- README.md | 2 + docs/source/_static/css/cyclops.css | 50 +++ .../static => _static}/cyclops_logo-dark.png | Bin .../static => _static}/cyclops_logo.png | Bin .../{theme/static => _static}/favicon.ico | Bin .../static => _static}/logos/gemini_logo.png | Bin .../static => _static}/logos/vector_logo.png | Bin docs/source/_templates/sections/footer.html | 26 ++ docs/source/api.rst | 6 +- docs/source/conf.py | 21 +- docs/source/developing.rst | 34 ++ docs/source/evaluation.rst | 2 + docs/source/index.rst | 5 +- docs/source/installation.rst | 29 ++ docs/source/intro.rst | 130 ------- docs/source/model_report.rst | 2 + docs/source/monitoring.rst | 2 + .../source/reference/api/cyclops.evaluate.rst | 73 ---- docs/source/reference/api/evaluator.rst | 12 + .../reference/api/fairness_evaluator.rst | 12 + docs/source/reference/api/metrics.rst | 8 + .../source/reference/api/metrics/accuracy.rst | 39 +++ docs/source/reference/api/metrics/auroc.rst | 45 +++ .../api/metrics/average_precision.rst | 29 ++ docs/source/reference/api/metrics/f1score.rst | 49 +++ docs/source/reference/api/metrics/f_beta.rst | 48 +++ .../reference/api/metrics/precision.rst | 46 +++ .../api/metrics/precision_recall_curve.rst | 45 +++ docs/source/reference/api/metrics/recall.rst | 45 +++ docs/source/reference/api/metrics/roc.rst | 45 +++ .../reference/api/metrics/sensitivity.rst | 46 +++ .../reference/api/metrics/specificity.rst | 46 +++ .../reference/api/metrics/stat_scores.rst | 46 +++ docs/source/theme/breadcrumbs.html | 41 --- docs/source/theme/footer.html | 63 ---- docs/source/theme/layout.html | 117 ------- docs/source/theme/static/css/cyclops.css | 326 ------------------ docs/source/theme/static/js/theme.js | 31 -- docs/source/theme/theme.conf | 11 - docs/source/tutorials.rst | 1 - .../tutorials/nihcxr/cxr_classification.ipynb | 10 +- docs/source/user_guide.rst | 9 + poetry.lock | 96 ++++-- pyproject.toml | 3 +- 44 files changed, 810 insertions(+), 841 deletions(-) create mode 100644 docs/source/_static/css/cyclops.css rename docs/source/{theme/static => _static}/cyclops_logo-dark.png (100%) rename docs/source/{theme/static => _static}/cyclops_logo.png (100%) rename docs/source/{theme/static => _static}/favicon.ico (100%) rename docs/source/{theme/static => _static}/logos/gemini_logo.png (100%) rename docs/source/{theme/static => _static}/logos/vector_logo.png (100%) create mode 100644 docs/source/_templates/sections/footer.html create mode 100644 docs/source/developing.rst create mode 100644 docs/source/evaluation.rst create mode 100644 docs/source/installation.rst delete mode 100644 docs/source/intro.rst create mode 100644 docs/source/model_report.rst create mode 100644 docs/source/monitoring.rst delete mode 100644 docs/source/reference/api/cyclops.evaluate.rst create mode 100644 docs/source/reference/api/evaluator.rst create mode 100644 docs/source/reference/api/fairness_evaluator.rst create mode 100644 docs/source/reference/api/metrics.rst create mode 100644 docs/source/reference/api/metrics/accuracy.rst create mode 100644 docs/source/reference/api/metrics/auroc.rst create mode 100644 docs/source/reference/api/metrics/average_precision.rst create mode 100644 docs/source/reference/api/metrics/f1score.rst create mode 100644 docs/source/reference/api/metrics/f_beta.rst create mode 100644 docs/source/reference/api/metrics/precision.rst create mode 100644 docs/source/reference/api/metrics/precision_recall_curve.rst create mode 100644 docs/source/reference/api/metrics/recall.rst create mode 100644 docs/source/reference/api/metrics/roc.rst create mode 100644 docs/source/reference/api/metrics/sensitivity.rst create mode 100644 docs/source/reference/api/metrics/specificity.rst create mode 100644 docs/source/reference/api/metrics/stat_scores.rst delete mode 100644 docs/source/theme/breadcrumbs.html delete mode 100644 docs/source/theme/footer.html delete mode 100644 docs/source/theme/layout.html delete mode 100644 docs/source/theme/static/css/cyclops.css delete mode 100644 docs/source/theme/static/js/theme.js delete mode 100644 docs/source/theme/theme.conf create mode 100644 docs/source/user_guide.rst diff --git a/README.md b/README.md index b4a97616b..1033df3ad 100644 --- a/README.md +++ b/README.md @@ -89,6 +89,8 @@ guidelines. ## 📚 [Documentation](https://vectorinstitute.github.io/cyclops/) +If you need to build the documentations locally, make sure to install ``Pandoc`` in addition to ``docs`` poetry group. + ## 📓 Notebooks diff --git a/docs/source/_static/css/cyclops.css b/docs/source/_static/css/cyclops.css new file mode 100644 index 000000000..00ba7d572 --- /dev/null +++ b/docs/source/_static/css/cyclops.css @@ -0,0 +1,50 @@ +footer span.commit code, +.rst-content pre.literal-block, +.rst-content div[class^='highlight'] pre, +.rst-content .linenodiv pre, +.rst-content tt, +.rst-content code, +.rst-content pre, +.rst-content kbd, +.rst-content samp { + font-family: 'IBM Plex Mono', monospace; + font-size: 0.8rem; +} + +footer { + color: var(--text-color); +} +footer .footer-small-text { + font-weight: 300; + font-size: 0.9rem; +} +footer .copyright { + font-weight: 300; + font-size: 0.8rem; +} +footer div.logo { + display: flex; + flex-wrap: wrap; + justify-content: space-around; + margin: 0px; + padding: 10px 0px 0px 0px; +} +footer a.logo { + /* Using flex here (to vertically align the child img) causes aspect-ratio issues */ + flex-basis: 120px; + margin: 10px auto 10px auto; + text-align: center; +} +footer a.logo:hover { + text-decoration: none; +} +footer span.logo { + display: inline-block; + height: 100%; + vertical-align: middle; +} +footer img.logo { + display: inline-block; + vertical-align: middle; + height: auto; +} diff --git a/docs/source/theme/static/cyclops_logo-dark.png b/docs/source/_static/cyclops_logo-dark.png similarity index 100% rename from docs/source/theme/static/cyclops_logo-dark.png rename to docs/source/_static/cyclops_logo-dark.png diff --git a/docs/source/theme/static/cyclops_logo.png b/docs/source/_static/cyclops_logo.png similarity index 100% rename from docs/source/theme/static/cyclops_logo.png rename to docs/source/_static/cyclops_logo.png diff --git a/docs/source/theme/static/favicon.ico b/docs/source/_static/favicon.ico similarity index 100% rename from docs/source/theme/static/favicon.ico rename to docs/source/_static/favicon.ico diff --git a/docs/source/theme/static/logos/gemini_logo.png b/docs/source/_static/logos/gemini_logo.png similarity index 100% rename from docs/source/theme/static/logos/gemini_logo.png rename to docs/source/_static/logos/gemini_logo.png diff --git a/docs/source/theme/static/logos/vector_logo.png b/docs/source/_static/logos/vector_logo.png similarity index 100% rename from docs/source/theme/static/logos/vector_logo.png rename to docs/source/_static/logos/vector_logo.png diff --git a/docs/source/_templates/sections/footer.html b/docs/source/_templates/sections/footer.html new file mode 100644 index 000000000..2ff7a747e --- /dev/null +++ b/docs/source/_templates/sections/footer.html @@ -0,0 +1,26 @@ +{% block extrafooter %} + + + +{% endblock %} diff --git a/docs/source/api.rst b/docs/source/api.rst index caf347cc6..b953ba773 100644 --- a/docs/source/api.rst +++ b/docs/source/api.rst @@ -2,9 +2,13 @@ API Reference ============= .. toctree:: + :maxdepth: 1 + :glob: reference/api/cyclops.data.rst reference/api/cyclops.tasks.rst - reference/api/cyclops.evaluate.rst + reference/api/evaluator.rst + reference/api/fairness_evaluator.rst + reference/api/metrics.rst reference/api/cyclops.monitor.rst reference/api/cyclops.report.rst diff --git a/docs/source/conf.py b/docs/source/conf.py index 288beebd9..944b6315e 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -59,6 +59,14 @@ copybutton_prompt_text = r">>> |\.\.\. " copybutton_prompt_is_regexp = True +html_theme_options = { + "collapse_navigation": False, + "sticky_navigation": True, + "navigation_depth": 4, + "includehidden": True, + "titles_only": False, +} + intersphinx_mapping = { "python": ("https://docs.python.org/3.9/", None), "numpy": ("http://docs.scipy.org/doc/numpy/", None), @@ -84,10 +92,19 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = "theme" -html_theme_path = ["."] +html_theme = "sphinx_book_theme" # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ["_static"] +html_css_files = ["css/cyclops.css"] +html_logo = "_static/cyclops_logo-dark.png" +html_favicon = "_static/favicon.ico" +html_theme_options = { + "logo": { # type: ignore + "text": "cyclops documentation", + "image_light": "_static/cyclops_logo-dark.png", + "image_dark": "_static/cyclops_logo-dark.png", + }, +} diff --git a/docs/source/developing.rst b/docs/source/developing.rst new file mode 100644 index 000000000..0ad8258a2 --- /dev/null +++ b/docs/source/developing.rst @@ -0,0 +1,34 @@ +🧑🏿‍💻 Developing +======================= + +Using poetry +------------ + +The development environment can be set up using `poetry `__. Hence, make sure it is installed and then run: + +.. code:: bash + + python3 -m poetry install + source $(poetry env info --path)/bin/activate + +In order to install dependencies for testing (codestyle, unit tests, integration tests), run: + +.. code:: bash + + python3 -m poetry install --with test + +API documentation is built using `Sphinx `__ and can be locally built by: + +.. code:: bash + + python3 -m poetry install --with docs + cd docs + make html SPHINXOPTS="-D nbsphinx_allow_errors=True" + + +If you need to build the documentations locally, make sure to install ``Pandoc`` in addition to ``docs`` poetry group. + +Contributing +------------ + +Contributing to cyclops is welcomed. See `Contributing `__ for guidelines. diff --git a/docs/source/evaluation.rst b/docs/source/evaluation.rst new file mode 100644 index 000000000..d48a02f04 --- /dev/null +++ b/docs/source/evaluation.rst @@ -0,0 +1,2 @@ +Evaluation +========== diff --git a/docs/source/index.rst b/docs/source/index.rst index 9d245b7f5..b7e0ff881 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -6,7 +6,8 @@ Welcome to cyclops's documentation! :maxdepth: 2 :caption: Contents: - intro - contributing + user_guide tutorials + developing + contributing api diff --git a/docs/source/installation.rst b/docs/source/installation.rst new file mode 100644 index 000000000..29e355167 --- /dev/null +++ b/docs/source/installation.rst @@ -0,0 +1,29 @@ +Installation +============ + +Using pip +--------- + +.. code:: bash + + python3 -m pip install pycyclops + +``cyclops`` has many optional dependencies that are used for specific functionality. For example, the `monai `__ library is used for loading DICOM images to create datasets. All optional dependencies can be installed with ``pycyclops[all]``, and specific sets of dependencies are listed in the sections below. + ++-----------------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ +| Dependency | pip extra | Notes | ++=============================+==========================+===============================================================================================================+ +| xgboost | xgboost | Allows use of `XGBoost `__ model | ++-----------------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ +| torch | torch | Allows use of `PyTorch `__ models | ++-----------------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ +| torchvision | torchvision | Allows use of `Torchvision `__ library | ++-----------------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ +| torchxrayvision | torchxrayvision | Uses `TorchXRayVision `__ library | ++-----------------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ +| monai | monai | Uses `MONAI `__ to load and transform images | ++-----------------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ +| alibi | alibi | Uses `Alibi `__ for additional explainability functionality | ++-----------------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ +| alibi-detect | alibi-detect | Uses `Alibi Detect `__ for dataset shift detection | ++-----------------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ diff --git a/docs/source/intro.rst b/docs/source/intro.rst deleted file mode 100644 index 0206124c0..000000000 --- a/docs/source/intro.rst +++ /dev/null @@ -1,130 +0,0 @@ -.. figure:: https://github.com/VectorInstitute/cyclops/blob/main/docs/source/theme/static/cyclops_logo-dark.png?raw=true - :alt: cyclops Logo - --------------- - -|PyPI| |PyPI - Python Version| |code checks| |integration tests| |docs| |codecov| |docker| |license| - -``cyclops`` is a toolkit for facilitating research and deployment of ML models for healthcare. It provides a few high-level APIs namely: - -- ``data`` - Create datasets for training, inference and evaluation. We use the popular 🤗 `datasets `__ to efficiently load and slice different modalities of data -- ``models`` - Use common model implementations using `scikit-learn `__ and `PyTorch `__ -- ``tasks`` - Use common ML task formulations such as binary classification or multi-label classification on tabular, time-series and image data -- ``evaluate`` - Evaluate models on clinical prediction tasks -- ``monitor`` - Detect dataset shift relevant for clinical use cases -- ``report`` - Create `model report cards `__ for clinical ML models - -``cyclops`` also provides example end-to-end use case implementations on clinical datasets such as - -- `NIH chest x-ray `__ -- `MIMIC-IV `__ - -🐣 Getting Started -================== - -Installing cyclops using pip ----------------------------- - -.. code:: bash - - python3 -m pip install pycyclops - -``cyclops`` has many optional dependencies that are used for specific functionality. For example, the `monai `__ library is used for loading DICOM images to create datasets. All optional dependencies can be installed with ``pycyclops[all]``, and specific sets of dependencies are listed in the sections below. - -+-----------------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ -| Dependency | pip extra | Notes | -+=============================+==========================+===============================================================================================================+ -| xgboost | xgboost | Allows use of `XGBoost `__ model | -+-----------------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ -| torch | torch | Allows use of `PyTorch `__ models | -+-----------------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ -| torchvision | torchvision | Allows use of `Torchvision `__ library | -+-----------------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ -| torchxrayvision | torchxrayvision | Uses `TorchXRayVision `__ library | -+-----------------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ -| monai | monai | Uses `MONAI `__ to load and transform images | -+-----------------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ -| alibi | alibi | Uses `Alibi `__ for additional explainability functionality | -+-----------------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ -| alibi-detect | alibi-detect | Uses `Alibi Detect `__ for dataset shift detection | -+-----------------------------+--------------------------+---------------------------------------------------------------------------------------------------------------+ - -🧑🏿‍💻 Developing -======================= - -Using poetry ------------- - -The development environment can be set up using `poetry `__. Hence, make sure it is installed and then run: - -.. code:: bash - - python3 -m poetry install - source $(poetry env info --path)/bin/activate - -In order to install dependencies for testing (codestyle, unit tests, integration tests), run: - -.. code:: bash - - python3 -m poetry install --with test - -API documentation is built using `Sphinx `__ and can be locally built by: - -.. code:: bash - - python3 -m poetry install --with docs - cd docs - make html SPHINXOPTS="-D nbsphinx_allow_errors=True" - -Contributing ------------- - -Contributing to cyclops is welcomed. See `Contributing `__ for guidelines. - -📚 `Documentation `__ -================================================================= - -📓 Notebooks -============ - -To use jupyter notebooks, the python virtual environment can be installed and used inside an IPython kernel. After activating the virtual environment, run: - -.. code:: bash - - python3 -m ipykernel install --user --name - -Now, you can navigate to the notebook’s ``Kernel`` tab and set it as ````. - -🎓 Citation -=========== - -Reference to cite when you use ``cyclops`` in a project or a research paper: - -:: - - @article {Krishnan2022.12.02.22283021, - author = {Krishnan, Amrit and Subasri, Vallijah and McKeen, Kaden and Kore, Ali and Ogidi, Franklin and Alinoori, Mahshid and Lalani, Nadim and Dhalla, Azra and Verma, Amol and Razak, Fahad and Pandya, Deval and Dolatabadi, Elham}, - title = {CyclOps: Cyclical development towards operationalizing ML models for health}, - elocation-id = {2022.12.02.22283021}, - year = {2022}, - doi = {10.1101/2022.12.02.22283021}, - publisher = {Cold Spring Harbor Laboratory Press}, - URL = {https://www.medrxiv.org/content/early/2022/12/08/2022.12.02.22283021}, - journal = {medRxiv} - } - -.. |PyPI| image:: https://img.shields.io/pypi/v/pycyclops - :target: https://pypi.org/project/pycyclops -.. |PyPI - Python Version| image:: https://img.shields.io/pypi/pyversions/pycyclops -.. |code checks| image:: https://github.com/VectorInstitute/cyclops/actions/workflows/code_checks.yml/badge.svg - :target: https://github.com/VectorInstitute/cyclops/actions/workflows/code_checks.yml -.. |integration tests| image:: https://github.com/VectorInstitute/cyclops/actions/workflows/integration_tests.yml/badge.svg - :target: https://github.com/VectorInstitute/cyclops/actions/workflows/integration_tests.yml -.. |docs| image:: https://github.com/VectorInstitute/cyclops/actions/workflows/docs_deploy.yml/badge.svg - :target: https://github.com/VectorInstitute/cyclops/actions/workflows/docs_deploy.yml -.. |codecov| image:: https://codecov.io/gh/VectorInstitute/cyclops/branch/main/graph/badge.svg - :target: https://codecov.io/gh/VectorInstitute/cyclops -.. |docker| image:: https://github.com/VectorInstitute/cyclops/actions/workflows/docker.yml/badge.svg - :target: https://hub.docker.com/r/vectorinstitute/cyclops -.. |license| image:: https://img.shields.io/github/license/VectorInstitute/cyclops.svg - :target: https://github.com/VectorInstitute/cyclops/blob/main/LICENSE diff --git a/docs/source/model_report.rst b/docs/source/model_report.rst new file mode 100644 index 000000000..b76ded777 --- /dev/null +++ b/docs/source/model_report.rst @@ -0,0 +1,2 @@ +Model Report +============ diff --git a/docs/source/monitoring.rst b/docs/source/monitoring.rst new file mode 100644 index 000000000..bd66e1235 --- /dev/null +++ b/docs/source/monitoring.rst @@ -0,0 +1,2 @@ +Monitoring +========== diff --git a/docs/source/reference/api/cyclops.evaluate.rst b/docs/source/reference/api/cyclops.evaluate.rst deleted file mode 100644 index db916df82..000000000 --- a/docs/source/reference/api/cyclops.evaluate.rst +++ /dev/null @@ -1,73 +0,0 @@ -.. role:: hidden - :class: hidden-section - - -cyclops.evaluate -================ - -.. automodule:: cyclops.evaluate - -.. autosummary:: - :toctree: _autosummary - :nosignatures: - :template: custom-module-template.rst - - evaluator - - -cyclops.evaluate.metrics ------------------------- - -.. automodule:: cyclops.evaluate.metrics - -.. autosummary:: - :toctree: _autosummary - :nosignatures: - :template: custom-module-template.rst - - metric - factory - accuracy - auroc - precision_recall - precision_recall_curve - roc - sensitivity - specificity - f_beta - stat_scores - - -cyclops.evaluate.metrics.functional ------------------------------------ - -.. automodule:: cyclops.evaluate.metrics.functional - -.. autosummary:: - :toctree: _autosummary - :nosignatures: - :template: custom-module-template.rst - - accuracy - auroc - precision_recall - precision_recall_curve - roc - sensitivity - specificity - f_beta - stat_scores - - -cyclops.evaluate.fairness --------------------------- - -.. automodule:: cyclops.evaluate.fairness - -.. autosummary:: - :toctree: _autosummary - :nosignatures: - :template: custom-module-template.rst - - evaluator - config diff --git a/docs/source/reference/api/evaluator.rst b/docs/source/reference/api/evaluator.rst new file mode 100644 index 000000000..f21431725 --- /dev/null +++ b/docs/source/reference/api/evaluator.rst @@ -0,0 +1,12 @@ +.. role:: hidden + :class: hidden-section + +######### +Evaluator +######### + +The evaluator module consists of the ``evaluate`` API method, which is used to evaluate +the performance of the model. It returns a dictionary containing various evaluation +metrics. + +.. autofunction:: cyclops.evaluate.evaluator.evaluate diff --git a/docs/source/reference/api/fairness_evaluator.rst b/docs/source/reference/api/fairness_evaluator.rst new file mode 100644 index 000000000..c9834e738 --- /dev/null +++ b/docs/source/reference/api/fairness_evaluator.rst @@ -0,0 +1,12 @@ +.. role:: hidden + :class: hidden-section + +################## +Fairness Evaluator +################## + +The fairness evaluator module consists of the ``evaluate_fairness`` API method, +which is used to evaluate the fairness of a model. The method returns parity metrics +for the model. + +.. autofunction:: cyclops.evaluate.fairness.evaluator.evaluate_fairness diff --git a/docs/source/reference/api/metrics.rst b/docs/source/reference/api/metrics.rst new file mode 100644 index 000000000..24af790e8 --- /dev/null +++ b/docs/source/reference/api/metrics.rst @@ -0,0 +1,8 @@ +Evaluation Metrics +================== + +.. toctree:: + :maxdepth: 1 + :glob: + + metrics/* diff --git a/docs/source/reference/api/metrics/accuracy.rst b/docs/source/reference/api/metrics/accuracy.rst new file mode 100644 index 000000000..0f08f7acf --- /dev/null +++ b/docs/source/reference/api/metrics/accuracy.rst @@ -0,0 +1,39 @@ +######## +Accuracy +######## + +Module Interface +________________ + +Accuracy +^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.Accuracy + :class-doc-from: class + +BinaryAccuracy +^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.BinaryAccuracy + :class-doc-from: class + +MulticlassAccuracy +^^^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.MulticlassAccuracy + +MultilabelAccuracy +^^^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.MultilabelAccuracy + +Functional Interface +____________________ + +binary_accuracy +^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.accuracy.binary_accuracy + +multiclass_accuracy +^^^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.accuracy.multiclass_accuracy + +multilabel_accuracy +^^^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.accuracy.multilabel_accuracy diff --git a/docs/source/reference/api/metrics/auroc.rst b/docs/source/reference/api/metrics/auroc.rst new file mode 100644 index 000000000..c3554cc00 --- /dev/null +++ b/docs/source/reference/api/metrics/auroc.rst @@ -0,0 +1,45 @@ +##### +AUROC +##### + +Module Interface +________________ + +AUROC +^^^^^ +.. autoclass:: cyclops.evaluate.metrics.AUROC + :class-doc-from: class + +BinaryAUROC +^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.BinaryAUROC + :class-doc-from: class + +MulticlassAUROC +^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.MulticlassAUROC + :class-doc-from: class + +MultilabelAUROC +^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.MultilabelAUROC + :class-doc-from: class + +Functional Interface +____________________ + +auroc +^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.auroc.auroc + +binary_auroc +^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.auroc.binary_auroc + +multiclass_auroc +^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.auroc.multiclass_auroc + +multilabel_auroc +^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.auroc.multilabel_auroc diff --git a/docs/source/reference/api/metrics/average_precision.rst b/docs/source/reference/api/metrics/average_precision.rst new file mode 100644 index 000000000..4b9e16174 --- /dev/null +++ b/docs/source/reference/api/metrics/average_precision.rst @@ -0,0 +1,29 @@ +################# +Average Precision +################# + +Module Interface +________________ + +.. TODO AveragePrecision is not exposed to API +.. AveragePrecision +.. ^^^^^^^^^^^^^^^^ +.. .. autoclass:: cyclops.evaluate.metrics.AveragePrecision + .. :class-doc-from: class + +BinaryAveragePrecision +^^^^^^^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.BinaryAveragePrecision + :class-doc-from: class + + +Functional Interface +____________________ + +average_precision +^^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.average_precision.average_precision + +binary_average_precision +^^^^^^^^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.average_precision.binary_average_precision diff --git a/docs/source/reference/api/metrics/f1score.rst b/docs/source/reference/api/metrics/f1score.rst new file mode 100644 index 000000000..726ad0174 --- /dev/null +++ b/docs/source/reference/api/metrics/f1score.rst @@ -0,0 +1,49 @@ +######### +F1-Score +######### + +Module Interface +________________ + +F1Score +^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.F1Score + :class-doc-from: class + +BinaryF1Score +^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.BinaryF1Score + :class-doc-from: class + +MulticlassF1Score +^^^^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.MulticlassF1Score + :class-doc-from: class + + +MultilabelF1Score +^^^^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.MultilabelF1Score + :class-doc-from: class + + + +Functional Interface +____________________ + +f1_score +^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.f_beta.f1_score + +binary_f1_score +^^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.f_beta.binary_f1_score + +multiclass_f1_score +^^^^^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.f_beta.multiclass_f1_score + + +multilabel_f1_score +^^^^^^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.f_beta.multilabel_f1_score diff --git a/docs/source/reference/api/metrics/f_beta.rst b/docs/source/reference/api/metrics/f_beta.rst new file mode 100644 index 000000000..3f2a0f229 --- /dev/null +++ b/docs/source/reference/api/metrics/f_beta.rst @@ -0,0 +1,48 @@ +############# +F-beta Score +############# + +Module Interface +________________ + +FbetaScore +^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.FbetaScore + :class-doc-from: class + +BinaryFbetaScore +^^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.BinaryFbetaScore + :class-doc-from: class + +MulticlassFbetaScore +^^^^^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.MulticlassFbetaScore + :class-doc-from: class + + +MultilabelFbetaScore +^^^^^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.MultilabelFbetaScore + :class-doc-from: class + + + +Functional Interface +____________________ + +fbeta_score +^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.f_beta.fbeta_score + +binary_fbeta_score +^^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.f_beta.binary_fbeta_score + +multiclass_fbeta_score +^^^^^^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.f_beta.multiclass_fbeta_score + +multilabel_fbeta_score +^^^^^^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.f_beta.multilabel_fbeta_score diff --git a/docs/source/reference/api/metrics/precision.rst b/docs/source/reference/api/metrics/precision.rst new file mode 100644 index 000000000..8cf9fc165 --- /dev/null +++ b/docs/source/reference/api/metrics/precision.rst @@ -0,0 +1,46 @@ +######### +Precision +######### + +Module Interface +________________ + +Precision +^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.Precision + :class-doc-from: class + +BinaryPrecision +^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.BinaryPrecision + :class-doc-from: class + +MulticlassPrecision +^^^^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.MulticlassPrecision + :class-doc-from: class + +MultilabelPrecision +^^^^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.MultilabelPrecision + :class-doc-from: class + + +Functional Interface +____________________ + +precision +^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.precision_recall.precision + +binary_precision +^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.precision_recall.binary_precision + +multiclass_precision +^^^^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.precision_recall.multiclass_precision + +multilabel_precision +^^^^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.precision_recall.multilabel_precision diff --git a/docs/source/reference/api/metrics/precision_recall_curve.rst b/docs/source/reference/api/metrics/precision_recall_curve.rst new file mode 100644 index 000000000..2c74a67b7 --- /dev/null +++ b/docs/source/reference/api/metrics/precision_recall_curve.rst @@ -0,0 +1,45 @@ +#################### +PrecisionRecallCurve +#################### + +Module Interface +________________ + +PrecisionRecallCurve +^^^^^^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.PrecisionRecallCurve + :class-doc-from: class + +BinaryPrecisionRecallCurve +^^^^^^^^^^^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.BinaryPrecisionRecallCurve + :class-doc-from: class + +MulticlassPrecisionRecallCurve +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.MulticlassPrecisionRecallCurve + :class-doc-from: class + +MultilabelPrecisionRecallCurve +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.MultilabelPrecisionRecallCurve + :class-doc-from: class + + +Functional Interface +____________________ + +precision_recall_curve +^^^^^^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.precision_recall_curve.precision_recall_curve + +binary_precision_recall_curve +.. autofunction:: cyclops.evaluate.metrics.functional.precision_recall_curve.binary_precision_recall_curve + +multiclass_precision_recall_curve +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.precision_recall_curve.multiclass_precision_recall_curve + +multilabel_precision_recall_curve +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.precision_recall_curve.multilabel_precision_recall_curve diff --git a/docs/source/reference/api/metrics/recall.rst b/docs/source/reference/api/metrics/recall.rst new file mode 100644 index 000000000..bc749deee --- /dev/null +++ b/docs/source/reference/api/metrics/recall.rst @@ -0,0 +1,45 @@ +###### +Recall +###### + +Module Interface +________________ + +Recall +^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.Recall + :class-doc-from: class + +BinaryRecall +^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.BinaryRecall + :class-doc-from: class + +MulticlassRecall +^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.MulticlassRecall + :class-doc-from: class + +MultilabelRecall +^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.MultilabelRecall + :class-doc-from: class + + +Functional Interface +____________________ + +recall +^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.precision_recall.recall + +binary_recall +.. autofunction:: cyclops.evaluate.metrics.functional.precision_recall.binary_recall + +multiclass_recall +^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.precision_recall.multiclass_recall + +multilabel_recall +^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.precision_recall.multilabel_recall diff --git a/docs/source/reference/api/metrics/roc.rst b/docs/source/reference/api/metrics/roc.rst new file mode 100644 index 000000000..fac737805 --- /dev/null +++ b/docs/source/reference/api/metrics/roc.rst @@ -0,0 +1,45 @@ +######### +ROC Curve +######### + +Module Interface +________________ + +ROCCurve +^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.ROCCurve + :class-doc-from: class + +BinaryROCCurve +^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.BinaryROCCurve + :class-doc-from: class + +MulticlassROCCurve +^^^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.MulticlassROCCurve + :class-doc-from: class + +MultilabelROCCurve +^^^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.MultilabelROCCurve + :class-doc-from: class + +Functional Interface +____________________ + +roc_curve +^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.roc.roc_curve + +binary_roc_curve +^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.roc.binary_roc_curve + +multiclass_roc_curve +^^^^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.roc.multiclass_roc_curve + +multilabel_roc_curve +^^^^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.roc.multilabel_roc_curve diff --git a/docs/source/reference/api/metrics/sensitivity.rst b/docs/source/reference/api/metrics/sensitivity.rst new file mode 100644 index 000000000..fa3e7ea3c --- /dev/null +++ b/docs/source/reference/api/metrics/sensitivity.rst @@ -0,0 +1,46 @@ +########### +Sensitivity +########### + +Module Interface +________________ + +Sensitivity +^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.Sensitivity + :class-doc-from: class + +BinarySensitivity +^^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.BinarySensitivity + :class-doc-from: class + +MulticlassSensitivity +^^^^^^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.MulticlassSensitivity + :class-doc-from: class + +MultilabelSensitivity +^^^^^^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.MultilabelSensitivity + :class-doc-from: class + + +Functional Interface +____________________ + +sensitivity +^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.sensitivity.sensitivity + +binary_sensitivity +^^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.sensitivity.binary_sensitivity + +multiclass_sensitivity +^^^^^^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.sensitivity.multiclass_sensitivity + +multilabel_sensitivity +^^^^^^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.sensitivity.multilabel_sensitivity diff --git a/docs/source/reference/api/metrics/specificity.rst b/docs/source/reference/api/metrics/specificity.rst new file mode 100644 index 000000000..8655bcf56 --- /dev/null +++ b/docs/source/reference/api/metrics/specificity.rst @@ -0,0 +1,46 @@ +########### +Specificity +########### + +Module Interface +________________ + +Specificity +^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.Specificity + :class-doc-from: class + +BinarySpecificity +^^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.BinarySpecificity + :class-doc-from: class + +MulticlassSpecificity +^^^^^^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.MulticlassSpecificity + :class-doc-from: class + +MultilabelSpecificity +^^^^^^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.MultilabelSpecificity + :class-doc-from: class + + +Functional Interface +____________________ + +specificity +^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.specificity.specificity + +binary_specificity +^^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.specificity.binary_specificity + +multiclass_specificity +^^^^^^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.specificity.multiclass_specificity + +multilabel_specificity +^^^^^^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.specificity.multilabel_specificity diff --git a/docs/source/reference/api/metrics/stat_scores.rst b/docs/source/reference/api/metrics/stat_scores.rst new file mode 100644 index 000000000..a95ec59b8 --- /dev/null +++ b/docs/source/reference/api/metrics/stat_scores.rst @@ -0,0 +1,46 @@ +########## +StatScores +########## + +Module Interface +________________ + +StatScores +^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.StatScores + :class-doc-from: class + +BinaryStatScores +^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.BinaryStatScores + :class-doc-from: class + +MulticlassStatScores +^^^^^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.MulticlassStatScores + :class-doc-from: class + +MultilabelStatScores +^^^^^^^^^^^^^^^^^^^^ +.. autoclass:: cyclops.evaluate.metrics.MultilabelStatScores + :class-doc-from: class + + +Functional Interface +____________________ + +stat_scores +^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.stat_scores.stat_scores + +binary_stat_scores +^^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.stat_scores.binary_stat_scores + +multiclass_stat_scores +^^^^^^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.stat_scores.multiclass_stat_scores + +multilabel_stat_scores +^^^^^^^^^^^^^^^^^^^^^^ +.. autofunction:: cyclops.evaluate.metrics.functional.stat_scores.multilabel_stat_scores diff --git a/docs/source/theme/breadcrumbs.html b/docs/source/theme/breadcrumbs.html deleted file mode 100644 index ebc48da6b..000000000 --- a/docs/source/theme/breadcrumbs.html +++ /dev/null @@ -1,41 +0,0 @@ -{% extends "sphinx_rtd_theme/breadcrumbs.html" %} - -{% block breadcrumbs %} - {# Separators between
  • s are added by CSS. #} - - {# - Breadcrumbs always start with home icon pointing to the main Nextstrain doc - project. - - If the current project is the main project, then we don't hardcode the URL - so the currently viewed version/language is preserved (although we don't - use these features currently). - #} - {% if theme_subproject %} -
  • Home
  • -
  • {{ project }}
  • - {% else %} -
  • Home
  • - {% endif %} - - {# - The parents of the current page, according to the project toctree, without - the root doc (master_doc). - #} - {% for doc in parents %} -
  • {{ doc.title }}
  • - {% endfor %} - - {# - Don't include the current page's title (like the template we're extending - does) because the page title is immediately below these breadcrumbs anyway. - - This also follows common UX recommendations for breadcrumbs, e.g. the UK's - Government Digital Service (gov.uk) breadcrumbs component guidelines¹ says: - - The breadcrumb should start with your ‘home’ page and end with the - parent section of the current page. - - ¹ https://design-system.service.gov.uk/components/breadcrumbs/ - #} -{% endblock %} diff --git a/docs/source/theme/footer.html b/docs/source/theme/footer.html deleted file mode 100644 index 45769db88..000000000 --- a/docs/source/theme/footer.html +++ /dev/null @@ -1,63 +0,0 @@ -{% extends "sphinx_rtd_theme/footer.html" %} - -{# - The design of the rtd-theme footer template includes content which is - not inside a block (and thus not trivial to overwrite). By setting - the following variabels we essentially hide footer content which we want - to include ourselves. P.S. These variables are only used in the footer. -#} -{% set show_sphinx = false %} -{% set show_copyright = false %} - -{# - Footer design largely replicates https://github.com/nextstrain/nextstrain.org/raw/0c3222d/static-site/src/components/Footer/index.jsx -#} - -{# - The following could probably be written in a much nicer, less verbose style. - This is/was my first time using Jinja, so i'm falling back onto basic HTML. - If you can improve this, please do & show me the way! james oct 2020 -#} -{% block extrafooter %} - - - - - -
    - - - - - - - -{% endblock %} diff --git a/docs/source/theme/layout.html b/docs/source/theme/layout.html deleted file mode 100644 index 7c5f7739c..000000000 --- a/docs/source/theme/layout.html +++ /dev/null @@ -1,117 +0,0 @@ -{# - Use our theme's favicon by default. We do it here layout.html since the - "html_favicon" configuration option unfortunately can't be set by the theme - directly. The "favicon" variable is used by Sphinx versions < 4; - "favicon_url" by newer versions. -#} -{% if not favicon %} -{% set favicon = 'favicon.ico' %} -{% set favicon_url = pathto('_static/' + favicon, 1) %} -{% endif %} - -{% extends "sphinx_rtd_theme/layout.html" %} -{# - Most of this block is copied from sphinx_rtd_theme version 0.5.0-1-gaa71fd6. - - Tweaks were necessary for our theme to provide a default logo, since Sphinx's - html_logo configuration option (template variable "logo" below) can't be set - by the theme *and also* can't refer to a theme-provided file when set by the - doc project's conf.py. - - We also adjust the rendering of the project name to remove the home icon. -#} -{% block sidebartitle %} - -{% set logo = logo if logo else 'cyclops_logo-dark.png' if theme_logo else '' %} - -{% if logo %} - - - -{% endif %} - -{% if theme_subproject %} -
    - - {{ project }} - - - {# - NOTE the version only works on RTD (not locally) as the variables `nav_version` and - `current_version` don't seem to be set on a local build. - #} - {%- set nav_version = version %} - {% if READTHEDOCS and current_version %} - {%- set nav_version = current_version %} - {% endif %} - {% if nav_version %} -
    - {% if nav_version == "stable" %} - stable version - {% if version and version != "stable" %} - ({{ version }}) - {% endif %} - {% elif nav_version == "latest" %} - development version - {% if commit %} - ({{ commit }}) - {% endif %} - {% else %} - version {{ nav_version }} - {% endif %} -
    - {% endif %} - -
    - -{% endif %} - -{% include "searchbox.html" %} - -{% endblock %} - - -{% block extrabody %} - - -{% endblock %} diff --git a/docs/source/theme/static/css/cyclops.css b/docs/source/theme/static/css/cyclops.css deleted file mode 100644 index 45fbc6f9a..000000000 --- a/docs/source/theme/static/css/cyclops.css +++ /dev/null @@ -1,326 +0,0 @@ -@import url('https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&display=swap'); -@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,400;0,700;1,400;1,700&display=swap'); -@import "theme.css"; /* From sphinx_rtd_theme */ - -html { - --text-color: #24292e; - --heading-color: #404040; - --link-color: #5097ba; - --sidebar-background-color: #2e76d49d; - --content-background-color: #ffffff; -} - -body { - font-family: 'Roboto', sans-serif; - font-weight: 400; - color: var(--text-color); - line-height: 1.5; -} - -.wy-menu-vertical a { color: #98a8f5;; } - -h1, h2, h3, h4, h5, h6, legend, .rst-content .toctree-wrapper p.caption, .rst-content .sidebar .sidebar-title { - font-family: Lato, 'Helvetica Neue', sans-serif; - font-weight: 600; - color: var(--heading-color); -} - -p { - line-height: inherit; -} - -a { - color: var(--link-color); -} -/* underlign lins on hover */ -a:hover { - text-decoration: underline; -} - -/* Monospace typography */ -footer span.commit code, -.rst-content pre.literal-block, -.rst-content div[class^='highlight'] pre, -.rst-content .linenodiv pre, -.rst-content tt, -.rst-content code, -.rst-content pre, -.rst-content kbd, -.rst-content samp { - font-family: 'IBM Plex Mono', monospace; - font-size: 0.8rem; -} - -/* Inline (backticks) code inspired by docusaurus (which Auspice used previously) */ -.rst-content code.literal, -.rst-content tt.literal { - background-color: rgba(27,31,35,.05); - border-radius: 3px; - border: 0; - color: inherit; - margin: 0; - padding: 3.2px 6.4px; -} - -/* Sidebar */ -.wy-nav-side { - background: var(--sidebar-background-color); -} - -/* main content section */ -.wy-nav-content { - background: var(--content-background-color); -} - -/* don't change the background for the area on the RHS of the main content */ -.wy-nav-content-wrap { - background: inherit; -} - -/* Pin the Nextstrain logo, project name, version, and search box to the top of - * the sidebar when the sidebar scrolls. - */ -.wy-side-nav-search { - position: sticky; - top: 0; -} - -/* Sub-project name, version (optional) and link back to the main docs */ -.wy-side-nav-search > div.subproject { - margin-top: -1rem; - margin-bottom: 1.2rem; -} -.wy-side-nav-search > div.subproject > a { /* subproject name */ - font-size: 1.5rem; - font-weight: 500; - color: var(--heading-color); -} -.wy-side-nav-search > div.subproject > .version { /* version name */ - display: block; - font-size: 1.1rem; - font-weight: 300; - color: var(--heading-color); -} - -/* Remove blue accent border */ -.wy-side-nav-search input[type="text"] { - border-color: #ccc; -} - -.wy-menu-vertical { - overflow-y: scroll; -} -.wy-menu-vertical header, -.wy-menu-vertical p.caption, -.wy-menu-vertical a { - font-size: 0.8rem; -} - -/* Remove sidebar TOC link colors, hover states, and borders */ -.wy-menu-vertical a { - color: var(--text-color); - background: none !important; -} - -.wy-menu-vertical a:hover { - color: var(--link-color) !important; - background: none !important; -} - -.wy-menu-vertical li.current { - background: none !important; -} - -.wy-menu-vertical li.current a { - border-right: none; -} - -.wy-menu-vertical li.current > a { - border-right: 2px solid var(--link-color); -} - -.wy-menu-vertical li.toctree-l1.current > a { - border-top: none; - border-bottom: none; -} - -/* Remove sidebar TOC heading/caption color */ -.wy-menu-vertical p.caption { - color: var(--heading-color); -} - -/* the buttons (previous / next) at the bottom of each doc page */ -.wy-nav-content a.btn { - border: 1px solid #24292e; - border-radius: 3px; - color: inherit; - display: inline-block; - font-size: 14px; - font-weight: 400; - line-height: 1.2em; - padding: 10px; - text-decoration: none !important; - text-transform: uppercase; - transition: background .3s,color .3s; - box-shadow: none; - font-family: inherit; - background-color: inherit; -} -/* following needs !important to override sphynx CSS which itself uses !important */ -.wy-nav-content a.btn-neutral { - background-color: var(--content-background-color) !important; - color: var(--text-color) !important; -} -.wy-nav-content a.btn-neutral:hover { - background-color: var(--text-color) !important; - color: var(--content-background-color) !important; -} - -.wy-nav-content { - max-width: 900px !important; -} - -/* Mark external links in the sidebar */ -.wy-menu-vertical a.external::after { - display: inline-block; - font-family: FontAwesome; - font-size: 0.6rem; - font-style: normal; - font-variant: normal; - text-rendering: auto; - margin-left: 0.2rem; - content: ""; -} - - -/* Breadcrumb separators (at top of the page) */ -.wy-breadcrumbs > li:not(:first-child):not(.wy-breadcrumbs-aside)::before { - display: inline-block; - content: "/\A0"; /* \A0 = no-break space (nbsp) */ - padding-right: 5px; - - /* The trailing space + 5px _right_ padding matches the amount of whitespace - * on the other side of the slash (/) the comes from the spaces between
  • s - * in the template and the 5px _left_ padding on
  • s. The result is that - * the slash (/) is centered between the end of the previous
  • 's text and - * start of this
  • 's text. - */ -} - - -/* Tables - */ -/* .wy-nav-content-wrap .wy-nav-content .wy-table-responsive { - /* Tables are wrapped in a container
    (.wy-table-responsive) to handle - * overflow. Set this
    's width to the larger of (a) 100% of its - * (several levels removed) container (.wy-nav-content) or (b) the width of - * the viewport minus the width of the sidebar and some left-side padding. - * Most of the time the latter (b) will be larger, but the former (a) will be - * larger when the viewport is narrow and the sidebar is hidden (e.g. on a - * mobile device). - * - * This has the effect of allowing tables to expand rightwards out of the - * main content container (.wy-nav-content), which is limited to max-width: - * 800px for text readability. Tables are at first allowed to overrun just - * the right-side content padding, but as the viewport expands wider, tables - * will spill out into the new blank space beyond the main content padding. - * Allowing tables to extend right up against the viewport edge makes a table - * appear cut off, which makes it clearer to the reader that expanding the - * viewport will reveal more of the table. However, tables also remain - * horizontally scrollable as necessary to accommodate overflow. This - * provides two means for seeing overflowing table content (scrolling or - * expanding the viewport). - * - * For reference in the calculation below: - * - * 100vw = width of the viewport - * 300px = width of .wy-nav-side and corresponding margin-left of .wy-nav-content-wrap - * 3.236em = padding-left of .wy-nav-content - * - * -trs, 16 March 2022 - */ -/* width: max(100%, calc(100vw - 300px - 3.236em)); - - /* override earlier max-width: 100% */ -/* max-width: none; -}*/ - -/* Mobile nav (top bar heading + flyout menu icon) - */ - -.wy-nav-top a, .wy-nav-top i { - color: var(--heading-color); -} - - -/* Footer styles. Largely chosen to mimic the previous rendering of the docs. See -https://github.com/nextstrain/nextstrain.org/blob/b1e09e57e91ed0c9343e1cd3104877ec3c5344a4/static-site/src/components/Footer/index.jsx -*/ -footer { - color: var(--text-color); -} -footer div { - margin: 20px 0px 0px 0px; -} -footer .footer-small-text { - font-weight: 300; - font-size: 0.9rem; -} -footer .copyright { - font-weight: 300; - font-size: 0.8rem; - text-align: center; -} -footer div.logo { - display: flex; - flex-wrap: wrap; - justify-content: space-around; - margin: 0px; - padding: 10px 0px 0px 0px; -} -footer a.logo { - /* Using flex here (to vertically align the child img) causes aspect-ratio issues */ - flex-basis: 120px; - margin: 10px auto 10px auto; - text-align: center; -} -footer a.logo:hover { - text-decoration: none; -} -footer span.logo { - display: inline-block; - height: 100%; - vertical-align: middle; -} -footer img.logo { - display: inline-block; - vertical-align: middle; - height: auto; -} -footer p.avatar { - font-weight: 300; - font-size: 1.1rem; - text-align: center; - margin: 16px 0px -10px 0px; -} -footer div.avatar { - display: flex; - flex-wrap: wrap; - justify-content: center; - line-height: 2.5 -} -footer div.avatar a { - color: var(--text-color); -} -footer div.avatar span { - white-space: nowrap; - font-weight: 300; - margin-left: 2px; - margin-right: 2px; -} -footer div.avatar img { - margin-left: 5px; - margin-right: 4px; - border-radius: 50%; - vertical-align: middle; -} diff --git a/docs/source/theme/static/js/theme.js b/docs/source/theme/static/js/theme.js deleted file mode 100644 index f9f63bceb..000000000 --- a/docs/source/theme/static/js/theme.js +++ /dev/null @@ -1,31 +0,0 @@ -/* XXX TODO: Delete this file if the bug fix PR below is accepted and released - * by upstream. - * - * Overrides the default static/js/theme.js from sphinx-rtd-theme with our - * customized copy that fixes the initial scroll-into-view behaviour for the - * nav sidebar, c.f. . - * -trs, 8 July 2022 - */ -/* - * The MIT License (MIT) - * - * Copyright (c) 2013-2018 Dave Snider, Read the Docs, Inc. & contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("
    "),n("table.docutils.footnote").wrap("
    "),n("table.docutils.citation").wrap("
    "),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t.closest("li.toctree-l1")[0].scrollIntoView({block:"nearest"}),t[0].scrollIntoView({block:"nearest"})}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t -[theme] -inherit = sphinx_rtd_theme -stylesheet = css/cyclops.css -pygments_style = default - -[options] -style_nav_header_background = #efeeed -logo = True -logo_link = https://vectorinstitute.github.io/cyclops/ -subproject = True diff --git a/docs/source/tutorials.rst b/docs/source/tutorials.rst index 5a81267aa..4ff2e5c14 100644 --- a/docs/source/tutorials.rst +++ b/docs/source/tutorials.rst @@ -4,4 +4,3 @@ Tutorials .. toctree:: tutorials_use_cases - tutorials_monitor diff --git a/docs/source/tutorials/nihcxr/cxr_classification.ipynb b/docs/source/tutorials/nihcxr/cxr_classification.ipynb index c4e34479f..e2cbed78e 100644 --- a/docs/source/tutorials/nihcxr/cxr_classification.ipynb +++ b/docs/source/tutorials/nihcxr/cxr_classification.ipynb @@ -60,7 +60,9 @@ "cell_type": "code", "execution_count": null, "id": "25c2a16f", - "metadata": {}, + "metadata": { + "nbsphinx": "hidden" + }, "outputs": [], "source": [ "\"\"\"Generate historical reports with validation data\n", @@ -330,8 +332,6 @@ "\n", "fig.update_layout(\n", " title=\"Gender Distribution\",\n", - " width=1200,\n", - " height=600,\n", ")\n", "\n", "report.log_plotly_figure(\n", @@ -357,8 +357,6 @@ " xaxis_title=\"Age\",\n", " yaxis_title=\"Count\",\n", " bargap=0.2,\n", - " width=1200,\n", - " height=600,\n", ")\n", "\n", "report.log_plotly_figure(\n", @@ -384,8 +382,6 @@ " yaxis_title=\"Count\",\n", " bargap=0.2,\n", " # change size of plot\n", - " width=1200,\n", - " height=600,\n", ")\n", "\n", "report.log_plotly_figure(\n", diff --git a/docs/source/user_guide.rst b/docs/source/user_guide.rst new file mode 100644 index 000000000..d921711b7 --- /dev/null +++ b/docs/source/user_guide.rst @@ -0,0 +1,9 @@ +User Guide +========== + +.. toctree:: + + installation + evaluation + monitoring + model_report diff --git a/poetry.lock b/poetry.lock index dd50f33df..c4d5c82bd 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,5 +1,19 @@ # This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. +[[package]] +name = "accessible-pygments" +version = "0.0.4" +description = "A collection of accessible pygments styles" +optional = false +python-versions = "*" +files = [ + {file = "accessible-pygments-0.0.4.tar.gz", hash = "sha256:e7b57a9b15958e9601c7e9eb07a440c813283545a20973f2574a5f453d0e953e"}, + {file = "accessible_pygments-0.0.4-py2.py3-none-any.whl", hash = "sha256:416c6d8c1ea1c5ad8701903a20fcedf953c6e720d64f33dc47bfb2d3f2fa4e8d"}, +] + +[package.dependencies] +pygments = ">=1.5" + [[package]] name = "aiofiles" version = "22.1.0" @@ -4698,6 +4712,33 @@ typing-extensions = ">=4.2.0" dotenv = ["python-dotenv (>=0.10.4)"] email = ["email-validator (>=1.0.3)"] +[[package]] +name = "pydata-sphinx-theme" +version = "0.15.2" +description = "Bootstrap-based Sphinx theme from the PyData community" +optional = false +python-versions = ">=3.9" +files = [ + {file = "pydata_sphinx_theme-0.15.2-py3-none-any.whl", hash = "sha256:0c5fa1fa98a9b26dae590666ff576f27e26c7ba708fee754ecb9e07359ed4588"}, + {file = "pydata_sphinx_theme-0.15.2.tar.gz", hash = "sha256:4243fee85b3afcfae9df64f83210a04e7182e53bc3db8841ffff6d21d95ae320"}, +] + +[package.dependencies] +accessible-pygments = "*" +Babel = "*" +beautifulsoup4 = "*" +docutils = "!=0.17.0" +packaging = "*" +pygments = ">=2.7" +sphinx = ">=5.0" +typing-extensions = "*" + +[package.extras] +a11y = ["pytest-playwright"] +dev = ["nox", "pre-commit", "pydata-sphinx-theme[doc,test]", "pyyaml"] +doc = ["ablog (>=0.11.0rc2)", "colorama", "ipykernel", "ipyleaflet", "jupyter_sphinx", "jupyterlite-sphinx", "linkify-it-py", "matplotlib", "myst-parser", "nbsphinx", "numpy", "numpydoc", "pandas", "plotly", "rich", "sphinx-autoapi (>=3.0.0)", "sphinx-copybutton", "sphinx-design", "sphinx-favicon (>=1.0.1)", "sphinx-sitemap", "sphinx-togglebutton", "sphinxcontrib-youtube (<1.4)", "sphinxext-rediraffe", "xarray"] +test = ["pytest", "pytest-cov", "pytest-regressions"] + [[package]] name = "pyflakes" version = "3.1.0" @@ -6190,41 +6231,42 @@ numpy = ["nptyping (>=2.5)"] testing = ["covdefaults (>=2.3)", "coverage (>=7.3)", "diff-cover (>=7.7)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "sphobjinv (>=2.3.1)", "typing-extensions (>=4.7.1)"] [[package]] -name = "sphinx-copybutton" -version = "0.5.2" -description = "Add a copy button to each of your code cells." +name = "sphinx-book-theme" +version = "1.1.0" +description = "A clean book theme for scientific explanations and documentation with Sphinx" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" files = [ - {file = "sphinx-copybutton-0.5.2.tar.gz", hash = "sha256:4cf17c82fb9646d1bc9ca92ac280813a3b605d8c421225fd9913154103ee1fbd"}, - {file = "sphinx_copybutton-0.5.2-py3-none-any.whl", hash = "sha256:fb543fd386d917746c9a2c50360c7905b605726b9355cd26e9974857afeae06e"}, + {file = "sphinx_book_theme-1.1.0-py3-none-any.whl", hash = "sha256:088bc69d65fab8446adb8691ed61687f71bf7504c9740af68bc78cf936a26112"}, + {file = "sphinx_book_theme-1.1.0.tar.gz", hash = "sha256:ad4f92998e53e24751ecd0978d3eb79fdaa59692f005b1b286ecdd6146ebc9c1"}, ] [package.dependencies] -sphinx = ">=1.8" +pydata-sphinx-theme = ">=0.14" +sphinx = ">=5" [package.extras] -code-style = ["pre-commit (==2.12.1)"] -rtd = ["ipython", "myst-nb", "sphinx", "sphinx-book-theme", "sphinx-examples"] +code-style = ["pre-commit"] +doc = ["ablog", "folium", "ipywidgets", "matplotlib", "myst-nb", "nbclient", "numpy", "numpydoc", "pandas", "plotly", "sphinx-copybutton", "sphinx-design", "sphinx-examples", "sphinx-tabs", "sphinx-thebe", "sphinx-togglebutton", "sphinxcontrib-bibtex", "sphinxcontrib-youtube", "sphinxext-opengraph"] +test = ["beautifulsoup4", "coverage", "myst-nb", "pytest", "pytest-cov", "pytest-regressions", "sphinx_thebe"] [[package]] -name = "sphinx-rtd-theme" -version = "2.0.0" -description = "Read the Docs theme for Sphinx" +name = "sphinx-copybutton" +version = "0.5.2" +description = "Add a copy button to each of your code cells." optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "sphinx_rtd_theme-2.0.0-py2.py3-none-any.whl", hash = "sha256:ec93d0856dc280cf3aee9a4c9807c60e027c7f7b461b77aeffed682e68f0e586"}, - {file = "sphinx_rtd_theme-2.0.0.tar.gz", hash = "sha256:bd5d7b80622406762073a04ef8fadc5f9151261563d47027de09910ce03afe6b"}, + {file = "sphinx-copybutton-0.5.2.tar.gz", hash = "sha256:4cf17c82fb9646d1bc9ca92ac280813a3b605d8c421225fd9913154103ee1fbd"}, + {file = "sphinx_copybutton-0.5.2-py3-none-any.whl", hash = "sha256:fb543fd386d917746c9a2c50360c7905b605726b9355cd26e9974857afeae06e"}, ] [package.dependencies] -docutils = "<0.21" -sphinx = ">=5,<8" -sphinxcontrib-jquery = ">=4,<5" +sphinx = ">=1.8" [package.extras] -dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] +code-style = ["pre-commit (==2.12.1)"] +rtd = ["ipython", "myst-nb", "sphinx", "sphinx-book-theme", "sphinx-examples"] [[package]] name = "sphinxcontrib-apidoc" @@ -6295,20 +6337,6 @@ Sphinx = ">=5" lint = ["docutils-stubs", "flake8", "mypy"] test = ["html5lib", "pytest"] -[[package]] -name = "sphinxcontrib-jquery" -version = "4.1" -description = "Extension to include jQuery on newer Sphinx releases" -optional = false -python-versions = ">=2.7" -files = [ - {file = "sphinxcontrib-jquery-4.1.tar.gz", hash = "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a"}, - {file = "sphinxcontrib_jquery-4.1-py2.py3-none-any.whl", hash = "sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae"}, -] - -[package.dependencies] -Sphinx = ">=1.8" - [[package]] name = "sphinxcontrib-jsmath" version = "1.0.1" @@ -7698,4 +7726,4 @@ xgboost = ["xgboost"] [metadata] lock-version = "2.0" python-versions = ">=3.9, <3.11" -content-hash = "e7c753e736bb502e827a90ef2ad0d9df6b5f4c421508aac8a1ada122de930302" +content-hash = "09fc3928ae2b2da1494924a9417bc7b281376ec817b2b8d934177ce2d135eaf0" diff --git a/pyproject.toml b/pyproject.toml index b55a59fdc..1b2d1a4e9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,6 @@ xgboost = { version = "^1.5.2", optional = true } alibi = { version = "^0.9.4", optional = true, extras = ["shap"] } alibi-detect = { version = "^0.11.0", optional = true, extras = ["torch"] } llvmlite = { version = "^0.40.0", optional = true } -nbsphinx = "^0.9.3" [tool.poetry.group.xgboost] optional = true @@ -111,7 +110,6 @@ optional = true [tool.poetry.group.docs.dependencies] numpydoc = "^1.2" sphinx = "^7.2.5" -sphinx-rtd-theme = "^2.0.0rc2" sphinxcontrib-apidoc = "^0.4.0" sphinx-autodoc-typehints = "^1.24.0" myst-parser = "^2.0.0" @@ -121,6 +119,7 @@ nbsphinx = "^0.9.3" ipython = "^8.8.0" ipykernel = "^6.23.0" kaggle = "^1.5.13" +sphinx-book-theme = "^1.1.0" [tool.poetry.group.dev] optional = true