From 19b71a21dbc375cc3dbafcbdc5be16c365ef4c73 Mon Sep 17 00:00:00 2001 From: Peter Hessey Date: Tue, 30 Aug 2022 10:21:09 +0100 Subject: [PATCH 1/5] =?UTF-8?q?=F0=9F=93=9D=20=20=F0=9F=93=8C=20Lock=20env?= =?UTF-8?q?=20and=20add=202=20scripts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- InnerEye/Scripts/move_model.py | 8 +++- TestSubmodule/environment.yml | 39 ++++++++++--------- docs/source/conf.py | 36 +++++++++-------- docs/source/rst/api/Scripts/index.rst | 0 docs/source/rst/api/Scripts/move_model.rst | 6 +++ docs/source/rst/api/Scripts/runner.rst | 8 ++++ docs/source/rst/api/Scripts/scripts.rst | 11 ++++++ .../rst/api/Scripts/submit_for_inference.rst | 8 ++++ docs/source/rst/api/index.rst | 1 + environment.yml | 39 ++++++++++--------- primary_deps.yml | 1 + 11 files changed, 103 insertions(+), 54 deletions(-) delete mode 100644 docs/source/rst/api/Scripts/index.rst create mode 100644 docs/source/rst/api/Scripts/move_model.rst create mode 100644 docs/source/rst/api/Scripts/runner.rst create mode 100644 docs/source/rst/api/Scripts/scripts.rst create mode 100644 docs/source/rst/api/Scripts/submit_for_inference.rst diff --git a/InnerEye/Scripts/move_model.py b/InnerEye/Scripts/move_model.py index bc9d1e512..09832e7f0 100644 --- a/InnerEye/Scripts/move_model.py +++ b/InnerEye/Scripts/move_model.py @@ -3,6 +3,7 @@ # Licensed under the MIT License (MIT). See LICENSE in the repo root for license information. # ------------------------------------------------------------------------------------------ from argparse import ArgumentParser +import argparse from pathlib import Path from typing import Tuple @@ -99,7 +100,7 @@ def get_workspace(config: MoveModelConfig) -> Workspace: resource_group=config.resource_group) -def main() -> None: +def get_move_model_parser() -> argparse.ArgumentParser: parser = ArgumentParser() parser.add_argument("-a", "--action", type=str, required=True, help="Action (download or upload)") @@ -114,6 +115,11 @@ def main() -> None: parser.add_argument("-m", "--model_id", type=str, required=True, help="The AzureML model ID") + return parser + +def main() -> None: + + parser = get_move_model_parser() args = parser.parse_args() config = MoveModelConfig(workspace_name=args.workspace_name, subscription_id=args.subscription_id, resource_group=args.resource_group, diff --git a/TestSubmodule/environment.yml b/TestSubmodule/environment.yml index 8f5b5c7de..c9d9ccef8 100644 --- a/TestSubmodule/environment.yml +++ b/TestSubmodule/environment.yml @@ -23,6 +23,8 @@ dependencies: - lame=3.100=h7b6447c_0 - lcms2=2.12=h3be6417_0 - ld_impl_linux-64=2.38=h1181459_1 + - lerc=3.0=h295c915_0 + - libdeflate=1.8=h7f8727e_5 - libffi=3.3=he6710b0_2 - libgcc-ng=11.2.0=h1234567_1 - libgomp=11.2.0=h1234567_1 @@ -31,7 +33,7 @@ dependencies: - libpng=1.6.37=hbc83047_0 - libstdcxx-ng=11.2.0=h1234567_1 - libtasn1=4.16.0=h27cfd23_0 - - libtiff=4.2.0=h2818925_1 + - libtiff=4.4.0=hecacb30_0 - libunistring=0.9.10=h27cfd23_0 - libuv=1.40.0=h7b6447c_0 - libvpx=1.7.0=h439df22_0 @@ -52,7 +54,7 @@ dependencies: - pytorch=1.10.0=py3.8_cuda11.3_cudnn8.2.0_0 - pytorch-mutex=1.0=cuda - readline=8.1.2=h7f8727e_1 - - setuptools=61.2.0=py38h06a4308_0 + - setuptools=63.4.1=py38h06a4308_0 - sqlite=3.39.2=h5082296_0 - tk=8.6.12=h1ccaba5_0 - torchvision=0.11.1=py38_cu113 @@ -111,17 +113,17 @@ dependencies: - bleach==5.0.1 - cachetools==4.2.4 - cffi==1.15.1 - - charset-normalizer==2.1.0 + - charset-normalizer==2.1.1 - click==8.1.3 - cloudpickle==1.6.0 - colorama==0.4.5 - commonmark==0.9.1 - conda-merge==0.1.5 - contextlib2==21.6.0 - - coverage==6.4.3 + - coverage==6.4.4 - cryptography==3.3.2 - cycler==0.11.0 - - databricks-cli==0.17.1 + - databricks-cli==0.17.3 - dataclasses-json==0.5.2 - debugpy==1.6.3 - defusedxml==0.7.1 @@ -146,7 +148,7 @@ dependencies: - google-auth==1.35.0 - google-auth-oauthlib==0.4.6 - gputil==1.4.0 - - greenlet==1.1.2 + - greenlet==1.1.3 - grpcio==1.47.0 - gunicorn==20.1.0 - h5py==2.10.0 @@ -163,7 +165,7 @@ dependencies: - ipykernel==6.15.1 - ipython==7.31.1 - ipython-genutils==0.2.0 - - ipywidgets==7.7.1 + - ipywidgets==8.0.1 - isodate==0.6.1 - itsdangerous==2.1.2 - jeepney==0.8.0 @@ -171,13 +173,13 @@ dependencies: - jmespath==0.10.0 - joblib==0.16.0 - jsonpickle==2.2.0 - - jsonschema==4.9.1 + - jsonschema==4.14.0 - jupyter==1.0.0 - jupyter-client==6.1.5 - jupyter-console==6.4.4 - jupyter-core==4.11.1 - jupyterlab-pygments==0.2.2 - - jupyterlab-widgets==1.1.1 + - jupyterlab-widgets==3.0.2 - kiwisolver==1.4.4 - lightning-bolts==0.4.0 - llvmlite==0.34.0 @@ -186,13 +188,13 @@ dependencies: - markdown==3.4.1 - markdown-it-py==2.1.0 - markupsafe==2.1.1 - - marshmallow==3.17.0 + - marshmallow==3.17.1 - marshmallow-enum==1.5.1 - matplotlib==3.3.0 - mccabe==0.6.1 - mdit-py-plugins==0.3.0 - mdurl==0.1.2 - - mistune==0.8.4 + - mistune==2.0.4 - mlflow==1.23.1 - mlflow-skinny==1.28.0 - monai==0.6.0 @@ -205,12 +207,12 @@ dependencies: - mypy==0.910 - mypy-extensions==0.4.3 - myst-parser==0.18.0 - - nbclient==0.6.6 - - nbconvert==6.5.3 + - nbclient==0.6.7 + - nbconvert==7.0.0 - nbformat==5.4.0 - ndg-httpsclient==0.5.1 - nest-asyncio==1.5.5 - - networkx==2.8.5 + - networkx==2.8.6 - nibabel==4.0.1 - notebook==6.4.12 - numba==0.51.2 @@ -259,7 +261,7 @@ dependencies: - pywavelets==1.3.0 - pyyaml==6.0 - pyzmq==23.2.1 - - qtconsole==5.3.1 + - qtconsole==5.3.2 - qtpy==2.2.0 - querystring-parser==1.2.4 - requests==2.28.1 @@ -282,6 +284,7 @@ dependencies: - snowballstemmer==2.2.0 - soupsieve==2.3.2.post1 - sphinx==5.0.2 + - sphinx-argparse==0.3.1 - sphinx-basic-ng==0.0.1a12 - sphinx-rtd-theme==1.0.0 - sphinxcontrib-applehelp==1.0.2 @@ -310,13 +313,13 @@ dependencies: - torchmetrics==0.6.0 - tornado==6.2 - tqdm==4.64.0 - - typing-inspect==0.7.1 + - typing-inspect==0.8.0 - umap-learn==0.5.2 - urllib3==1.26.7 - webencodings==0.5.1 - - websocket-client==1.3.3 + - websocket-client==1.4.0 - werkzeug==2.2.2 - - widgetsnbextension==3.6.1 + - widgetsnbextension==4.0.2 - wrapt==1.14.1 - yacs==0.1.8 - yarl==1.8.1 diff --git a/docs/source/conf.py b/docs/source/conf.py index 752098b3e..7a36fc574 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -16,6 +16,7 @@ # documentation root, make it absolute. # import sys +import os import shutil from pathlib import Path repo_dir = Path(__file__).absolute().parents[2] @@ -26,29 +27,30 @@ # -- Project information ----------------------------------------------------- -project = 'InnerEye-DeepLearning' -copyright = 'Microsoft Corporation' -author = 'Microsoft' +project = "InnerEye-DeepLearning" +copyright = "Microsoft Corporation" +author = "Microsoft" # The full version, including alpha/beta/rc tags -release = '0.4' +release = "0.4" # -- General configuration --------------------------------------------------- # Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# extensions coming with Sphinx (named "sphinx.ext.*") or your custom # ones. extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.autosummary', - 'sphinx_rtd_theme', - 'myst_parser', - 'sphinx.ext.viewcode', + "sphinx.ext.autodoc", + "sphinx.ext.autosummary", + "sphinx_rtd_theme", + "myst_parser", + "sphinx.ext.viewcode", + "sphinxarg.ext", ] # Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] +templates_path = ["_templates"] # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. @@ -61,23 +63,23 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = 'furo' +html_theme = "furo" # 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_static_path = ["_static"] source_suffix = { - '.rst': 'restructuredtext', - '.md': 'markdown', + ".rst": "restructuredtext", + ".md": "markdown", } # Autodoc options autodoc_default_options = { - 'members': True, - 'undoc-members': True, + "members": True, + "undoc-members": True, } diff --git a/docs/source/rst/api/Scripts/index.rst b/docs/source/rst/api/Scripts/index.rst deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/source/rst/api/Scripts/move_model.rst b/docs/source/rst/api/Scripts/move_model.rst new file mode 100644 index 000000000..258aa62c8 --- /dev/null +++ b/docs/source/rst/api/Scripts/move_model.rst @@ -0,0 +1,6 @@ +Move model +=========== + +.. argparse:: + :ref: InnerEye.Scripts.move_model.get_move_model_parser + :prog: move_model.py diff --git a/docs/source/rst/api/Scripts/runner.rst b/docs/source/rst/api/Scripts/runner.rst new file mode 100644 index 000000000..8820245fd --- /dev/null +++ b/docs/source/rst/api/Scripts/runner.rst @@ -0,0 +1,8 @@ +Runner +====== + +This script is the entry point for running all InnerEye jobs, both locally and in AzureML. See the user guides for example usage. + +.. argparse:: + :ref: InnerEye.Azure.azure_runner.create_runner_parser + :prog: runner.py diff --git a/docs/source/rst/api/Scripts/scripts.rst b/docs/source/rst/api/Scripts/scripts.rst new file mode 100644 index 000000000..713fdbdf8 --- /dev/null +++ b/docs/source/rst/api/Scripts/scripts.rst @@ -0,0 +1,11 @@ +Scripts +======= + +Please see links below for information on key scripts and their arguments. + +.. toctree:: + :maxdepth: 1 + + runner + submit_for_inference + move_model diff --git a/docs/source/rst/api/Scripts/submit_for_inference.rst b/docs/source/rst/api/Scripts/submit_for_inference.rst new file mode 100644 index 000000000..f520893b0 --- /dev/null +++ b/docs/source/rst/api/Scripts/submit_for_inference.rst @@ -0,0 +1,8 @@ +Submit for Inference +==================== + +This script is used to submit a single image for inference against a trained model. + +.. .. argparse:: +.. :ref: InnerEye.Scripts.submit_for_inference +.. :prog: submit_for_inference diff --git a/docs/source/rst/api/index.rst b/docs/source/rst/api/index.rst index 746bcb34e..eb0d19696 100644 --- a/docs/source/rst/api/index.rst +++ b/docs/source/rst/api/index.rst @@ -1,3 +1,4 @@ .. toctree:: ML/ML + Scripts/scripts diff --git a/environment.yml b/environment.yml index 8f5b5c7de..c9d9ccef8 100644 --- a/environment.yml +++ b/environment.yml @@ -23,6 +23,8 @@ dependencies: - lame=3.100=h7b6447c_0 - lcms2=2.12=h3be6417_0 - ld_impl_linux-64=2.38=h1181459_1 + - lerc=3.0=h295c915_0 + - libdeflate=1.8=h7f8727e_5 - libffi=3.3=he6710b0_2 - libgcc-ng=11.2.0=h1234567_1 - libgomp=11.2.0=h1234567_1 @@ -31,7 +33,7 @@ dependencies: - libpng=1.6.37=hbc83047_0 - libstdcxx-ng=11.2.0=h1234567_1 - libtasn1=4.16.0=h27cfd23_0 - - libtiff=4.2.0=h2818925_1 + - libtiff=4.4.0=hecacb30_0 - libunistring=0.9.10=h27cfd23_0 - libuv=1.40.0=h7b6447c_0 - libvpx=1.7.0=h439df22_0 @@ -52,7 +54,7 @@ dependencies: - pytorch=1.10.0=py3.8_cuda11.3_cudnn8.2.0_0 - pytorch-mutex=1.0=cuda - readline=8.1.2=h7f8727e_1 - - setuptools=61.2.0=py38h06a4308_0 + - setuptools=63.4.1=py38h06a4308_0 - sqlite=3.39.2=h5082296_0 - tk=8.6.12=h1ccaba5_0 - torchvision=0.11.1=py38_cu113 @@ -111,17 +113,17 @@ dependencies: - bleach==5.0.1 - cachetools==4.2.4 - cffi==1.15.1 - - charset-normalizer==2.1.0 + - charset-normalizer==2.1.1 - click==8.1.3 - cloudpickle==1.6.0 - colorama==0.4.5 - commonmark==0.9.1 - conda-merge==0.1.5 - contextlib2==21.6.0 - - coverage==6.4.3 + - coverage==6.4.4 - cryptography==3.3.2 - cycler==0.11.0 - - databricks-cli==0.17.1 + - databricks-cli==0.17.3 - dataclasses-json==0.5.2 - debugpy==1.6.3 - defusedxml==0.7.1 @@ -146,7 +148,7 @@ dependencies: - google-auth==1.35.0 - google-auth-oauthlib==0.4.6 - gputil==1.4.0 - - greenlet==1.1.2 + - greenlet==1.1.3 - grpcio==1.47.0 - gunicorn==20.1.0 - h5py==2.10.0 @@ -163,7 +165,7 @@ dependencies: - ipykernel==6.15.1 - ipython==7.31.1 - ipython-genutils==0.2.0 - - ipywidgets==7.7.1 + - ipywidgets==8.0.1 - isodate==0.6.1 - itsdangerous==2.1.2 - jeepney==0.8.0 @@ -171,13 +173,13 @@ dependencies: - jmespath==0.10.0 - joblib==0.16.0 - jsonpickle==2.2.0 - - jsonschema==4.9.1 + - jsonschema==4.14.0 - jupyter==1.0.0 - jupyter-client==6.1.5 - jupyter-console==6.4.4 - jupyter-core==4.11.1 - jupyterlab-pygments==0.2.2 - - jupyterlab-widgets==1.1.1 + - jupyterlab-widgets==3.0.2 - kiwisolver==1.4.4 - lightning-bolts==0.4.0 - llvmlite==0.34.0 @@ -186,13 +188,13 @@ dependencies: - markdown==3.4.1 - markdown-it-py==2.1.0 - markupsafe==2.1.1 - - marshmallow==3.17.0 + - marshmallow==3.17.1 - marshmallow-enum==1.5.1 - matplotlib==3.3.0 - mccabe==0.6.1 - mdit-py-plugins==0.3.0 - mdurl==0.1.2 - - mistune==0.8.4 + - mistune==2.0.4 - mlflow==1.23.1 - mlflow-skinny==1.28.0 - monai==0.6.0 @@ -205,12 +207,12 @@ dependencies: - mypy==0.910 - mypy-extensions==0.4.3 - myst-parser==0.18.0 - - nbclient==0.6.6 - - nbconvert==6.5.3 + - nbclient==0.6.7 + - nbconvert==7.0.0 - nbformat==5.4.0 - ndg-httpsclient==0.5.1 - nest-asyncio==1.5.5 - - networkx==2.8.5 + - networkx==2.8.6 - nibabel==4.0.1 - notebook==6.4.12 - numba==0.51.2 @@ -259,7 +261,7 @@ dependencies: - pywavelets==1.3.0 - pyyaml==6.0 - pyzmq==23.2.1 - - qtconsole==5.3.1 + - qtconsole==5.3.2 - qtpy==2.2.0 - querystring-parser==1.2.4 - requests==2.28.1 @@ -282,6 +284,7 @@ dependencies: - snowballstemmer==2.2.0 - soupsieve==2.3.2.post1 - sphinx==5.0.2 + - sphinx-argparse==0.3.1 - sphinx-basic-ng==0.0.1a12 - sphinx-rtd-theme==1.0.0 - sphinxcontrib-applehelp==1.0.2 @@ -310,13 +313,13 @@ dependencies: - torchmetrics==0.6.0 - tornado==6.2 - tqdm==4.64.0 - - typing-inspect==0.7.1 + - typing-inspect==0.8.0 - umap-learn==0.5.2 - urllib3==1.26.7 - webencodings==0.5.1 - - websocket-client==1.3.3 + - websocket-client==1.4.0 - werkzeug==2.2.2 - - widgetsnbextension==3.6.1 + - widgetsnbextension==4.0.2 - wrapt==1.14.1 - yacs==0.1.8 - yarl==1.8.1 diff --git a/primary_deps.yml b/primary_deps.yml index aa8ff1918..f79b44bc0 100644 --- a/primary_deps.yml +++ b/primary_deps.yml @@ -73,6 +73,7 @@ dependencies: - six==1.15.0 - sphinx-rtd-theme==1.0.0 - sphinx==5.0.2 + - sphinx-argparse==0.3.1 - stopit==1.1.2 - tabulate==0.8.7 - tensorboard==2.3.0 From 81632a6adb3f6f2dc067566bc1eea70a25025a5f Mon Sep 17 00:00:00 2001 From: Peter Hessey Date: Tue, 30 Aug 2022 14:08:05 +0100 Subject: [PATCH 2/5] =?UTF-8?q?=F0=9F=9A=A8=20Fix=20flake8=20warnings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/conf.py | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 7a36fc574..b9424ffad 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -16,7 +16,6 @@ # documentation root, make it absolute. # import sys -import os import shutil from pathlib import Path repo_dir = Path(__file__).absolute().parents[2] From f65e661e4aca46e23aef930c58289cff35f26954 Mon Sep 17 00:00:00 2001 From: Peter Hessey Date: Tue, 30 Aug 2022 16:26:07 +0100 Subject: [PATCH 3/5] =?UTF-8?q?=F0=9F=9A=A7=20WIP:=20add=20submit=5Ffor=5F?= =?UTF-8?q?inference=20script=20args=20to=20RTD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- InnerEye/Scripts/submit_for_inference.py | 11 +++++++++++ docs/source/rst/api/Scripts/submit_for_inference.rst | 6 +++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/InnerEye/Scripts/submit_for_inference.py b/InnerEye/Scripts/submit_for_inference.py index aea8eb9bf..6385a99d1 100755 --- a/InnerEye/Scripts/submit_for_inference.py +++ b/InnerEye/Scripts/submit_for_inference.py @@ -3,6 +3,7 @@ # Licensed under the MIT License (MIT). See LICENSE in the repo root for license information. # ------------------------------------------------------------------------------------------ +import argparse import logging import shutil import sys @@ -213,6 +214,16 @@ def submit_for_inference(args: SubmitForInferenceConfig, azure_config: AzureConf return download_path +def get_submit_for_inference_parser() -> argparse.ArgumentParser: + """This function is need to allow sphinx to access the arguments for documenation + + :return: An example parser used for inference submission + """ + + inference_config = SubmitForInferenceConfig(should_validate=False) + return inference_config.create_argparser() + + def main(args: Optional[List[str]] = None, project_root: Optional[Path] = None) -> None: """ Main function. diff --git a/docs/source/rst/api/Scripts/submit_for_inference.rst b/docs/source/rst/api/Scripts/submit_for_inference.rst index f520893b0..27afd34d3 100644 --- a/docs/source/rst/api/Scripts/submit_for_inference.rst +++ b/docs/source/rst/api/Scripts/submit_for_inference.rst @@ -3,6 +3,6 @@ Submit for Inference This script is used to submit a single image for inference against a trained model. -.. .. argparse:: -.. :ref: InnerEye.Scripts.submit_for_inference -.. :prog: submit_for_inference +.. argparse:: + :ref: InnerEye.Scripts.submit_for_inference.get_submit_for_inference_parser + :prog: submit_for_inference From 34b46799af91ee00cd71e3a8c33a6d5249848173 Mon Sep 17 00:00:00 2001 From: Peter Hessey Date: Tue, 30 Aug 2022 16:31:09 +0100 Subject: [PATCH 4/5] =?UTF-8?q?=F0=9F=93=9D=20Finish=20adding=20scripts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/rst/api/Scripts/scripts.rst | 2 +- docs/source/rst/api/Scripts/submit_for_inference.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/rst/api/Scripts/scripts.rst b/docs/source/rst/api/Scripts/scripts.rst index 713fdbdf8..eee8712ae 100644 --- a/docs/source/rst/api/Scripts/scripts.rst +++ b/docs/source/rst/api/Scripts/scripts.rst @@ -1,7 +1,7 @@ Scripts ======= -Please see links below for information on key scripts and their arguments. +Please see links below for details on the available arguments for each of the primary InnerEye scripts. .. toctree:: :maxdepth: 1 diff --git a/docs/source/rst/api/Scripts/submit_for_inference.rst b/docs/source/rst/api/Scripts/submit_for_inference.rst index 27afd34d3..bbcb37e00 100644 --- a/docs/source/rst/api/Scripts/submit_for_inference.rst +++ b/docs/source/rst/api/Scripts/submit_for_inference.rst @@ -5,4 +5,4 @@ This script is used to submit a single image for inference against a trained mod .. argparse:: :ref: InnerEye.Scripts.submit_for_inference.get_submit_for_inference_parser - :prog: submit_for_inference + :prog: submit_for_inference.py From f71212cfc92606a084722f85a2d3925cd4b6a5ac Mon Sep 17 00:00:00 2001 From: Peter Hessey Date: Tue, 30 Aug 2022 16:46:10 +0100 Subject: [PATCH 5/5] =?UTF-8?q?=F0=9F=93=9D=20Remove=20WIP=20flag?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index 8345698d3..e6936fa5b 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -39,7 +39,7 @@ InnerEye-DeepLearning Documentation md/CHANGELOG.md .. toctree:: - :caption: API documentation (🚧 Work In Progress 🚧) + :caption: API documentation :maxdepth: 2 rst/api/index