Read the Docs build information Build id: 3874232 Project: anyscale-ray Version: master Commit: a0b7c7901970360c41ffd83bb69e34de3e30e5fe Date: 2026-03-27T18:30:50.431626Z State: cancelled Success: False [rtd-command-info] start-time: 2026-03-27T18:30:51.345677Z, end-time: 2026-03-27T18:31:03.793615Z, duration: 12, exit-code: 0 git clone --depth 1 https://github.com/ray-project/ray.git . Cloning into '.'... Updating files: 22% (2336/10186) Updating files: 23% (2343/10186) Updating files: 24% (2445/10186) Updating files: 25% (2547/10186) Updating files: 26% (2649/10186) Updating files: 27% (2751/10186) Updating files: 28% (2853/10186) Updating files: 29% (2954/10186) Updating files: 30% (3056/10186) Updating files: 31% (3158/10186) Updating files: 32% (3260/10186) Updating files: 33% (3362/10186) Updating files: 34% (3464/10186) Updating files: 35% (3566/10186) Updating files: 36% (3667/10186) Updating files: 37% (3769/10186) Updating files: 38% (3871/10186) Updating files: 39% (3973/10186) Updating files: 40% (4075/10186) Updating files: 41% (4177/10186) Updating files: 42% (4279/10186) Updating files: 43% (4380/10186) Updating files: 44% (4482/10186) Updating files: 45% (4584/10186) Updating files: 46% (4686/10186) Updating files: 47% (4788/10186) Updating files: 48% (4890/10186) Updating files: 49% (4992/10186) Updating files: 50% (5093/10186) Updating files: 51% (5195/10186) Updating files: 52% (5297/10186) Updating files: 53% (5399/10186) Updating files: 54% (5501/10186) Updating files: 55% (5603/10186) Updating files: 56% (5705/10186) Updating files: 57% (5807/10186) Updating files: 58% (5908/10186) Updating files: 59% (6010/10186) Updating files: 60% (6112/10186) Updating files: 61% (6214/10186) Updating files: 62% (6316/10186) Updating files: 63% (6418/10186) Updating files: 64% (6520/10186) Updating files: 65% (6621/10186) Updating files: 66% (6723/10186) Updating files: 67% (6825/10186) Updating files: 68% (6927/10186) Updating files: 69% (7029/10186) Updating files: 70% (7131/10186) Updating files: 71% (7233/10186) Updating files: 72% (7334/10186) Updating files: 73% (7436/10186) Updating files: 74% (7538/10186) Updating files: 75% (7640/10186) Updating files: 76% (7742/10186) Updating files: 77% (7844/10186) Updating files: 78% (7946/10186) Updating files: 79% (8047/10186) Updating files: 80% (8149/10186) Updating files: 81% (8251/10186) Updating files: 82% (8353/10186) Updating files: 83% (8455/10186) Updating files: 84% (8557/10186) Updating files: 85% (8659/10186) Updating files: 86% (8760/10186) Updating files: 87% (8862/10186) Updating files: 88% (8964/10186) Updating files: 89% (9066/10186) Updating files: 90% (9168/10186) Updating files: 91% (9270/10186) Updating files: 92% (9372/10186) Updating files: 93% (9473/10186) Updating files: 94% (9575/10186) Updating files: 95% (9677/10186) Updating files: 96% (9779/10186) Updating files: 97% (9881/10186) Updating files: 98% (9983/10186) Updating files: 99% (10085/10186) Updating files: 100% (10186/10186) Updating files: 100% (10186/10186), done. [rtd-command-info] start-time: 2026-03-27T18:31:03.882900Z, end-time: 2026-03-27T18:31:04.570932Z, duration: 0, exit-code: 0 git fetch origin --force --prune --prune-tags --depth 50 refs/heads/master:refs/remotes/origin/master [rtd-command-info] start-time: 2026-03-27T18:31:05.259227Z, end-time: 2026-03-27T18:31:06.395439Z, duration: 1, exit-code: 0 git checkout --force origin/master Note: switching to 'origin/master'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by switching back to a branch. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -c with the switch command. Example: git switch -c Or undo this operation with: git switch - Turn off this advice by setting config variable advice.detachedHead to false HEAD is now at a0b7c79 [cluster launcher] [azure] fix: do not delete shared msi in azure when taking down clusters (#61811) [rtd-command-info] start-time: 2026-03-27T18:31:06.484764Z, end-time: 2026-03-27T18:31:06.520834Z, duration: 0, exit-code: 0 cat .readthedocs.yaml # .readthedocs.yaml # Read the Docs configuration file # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details # Required version: 2 # Set the version of Python and other tools you might need build: os: ubuntu-24.04 tools: python: "3.10" # Build documentation in the docs/ directory with Sphinx sphinx: configuration: doc/source/conf.py fail_on_warning: true # We recommend specifying your dependencies to enable reproducible builds: # https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html python: install: - requirements: doc/requirements-doc.lock.txt [rtd-command-info] start-time: 2026-03-27T18:31:11.303954Z, end-time: 2026-03-27T18:31:11.358326Z, duration: 0, exit-code: 0 asdf global python 3.10.17 [rtd-command-info] start-time: 2026-03-27T18:31:11.719411Z, end-time: 2026-03-27T18:31:12.485702Z, duration: 0, exit-code: 0 python -mvirtualenv $READTHEDOCS_VIRTUALENV_PATH created virtual environment CPython3.10.17.final.0-64 in 414ms creator CPython3Posix(dest=/home/docs/checkouts/readthedocs.org/user_builds/anyscale-ray/envs/master, clear=False, no_vcs_ignore=False, global=False) seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/docs/.local/share/virtualenv) added seed packages: pip==23.1, setuptools==67.6.1, wheel==0.40.0 activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator [rtd-command-info] start-time: 2026-03-27T18:31:12.586891Z, end-time: 2026-03-27T18:31:17.016065Z, duration: 4, exit-code: 0 python -m pip install --upgrade --no-cache-dir pip setuptools Requirement already satisfied: pip in /home/docs/checkouts/readthedocs.org/user_builds/anyscale-ray/envs/master/lib/python3.10/site-packages (23.1) Collecting pip Downloading pip-26.0.1-py3-none-any.whl (1.8 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 15.5 MB/s eta 0:00:00 Requirement already satisfied: setuptools in /home/docs/checkouts/readthedocs.org/user_builds/anyscale-ray/envs/master/lib/python3.10/site-packages (67.6.1) Collecting setuptools Downloading setuptools-82.0.1-py3-none-any.whl (1.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.0/1.0 MB 25.7 MB/s eta 0:00:00 Installing collected packages: setuptools, pip Attempting uninstall: setuptools Found existing installation: setuptools 67.6.1 Uninstalling setuptools-67.6.1: Successfully uninstalled setuptools-67.6.1 Attempting uninstall: pip Found existing installation: pip 23.1 Uninstalling pip-23.1: Successfully uninstalled pip-23.1 Successfully installed pip-26.0.1 setuptools-82.0.1 [rtd-command-info] start-time: 2026-03-27T18:31:17.110618Z, end-time: 2026-03-27T18:31:21.704612Z, duration: 4, exit-code: 0 python -m pip install --upgrade --no-cache-dir sphinx Collecting sphinx Downloading sphinx-8.1.3-py3-none-any.whl.metadata (6.4 kB) Collecting sphinxcontrib-applehelp>=1.0.7 (from sphinx) Downloading sphinxcontrib_applehelp-2.0.0-py3-none-any.whl.metadata (2.3 kB) Collecting sphinxcontrib-devhelp>=1.0.6 (from sphinx) Downloading sphinxcontrib_devhelp-2.0.0-py3-none-any.whl.metadata (2.3 kB) Collecting sphinxcontrib-htmlhelp>=2.0.6 (from sphinx) Downloading sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl.metadata (2.3 kB) Collecting sphinxcontrib-jsmath>=1.0.1 (from sphinx) Downloading sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl.metadata (1.4 kB) Collecting sphinxcontrib-qthelp>=1.0.6 (from sphinx) Downloading sphinxcontrib_qthelp-2.0.0-py3-none-any.whl.metadata (2.3 kB) Collecting sphinxcontrib-serializinghtml>=1.1.9 (from sphinx) Downloading sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl.metadata (2.4 kB) Collecting Jinja2>=3.1 (from sphinx) Downloading jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB) Collecting Pygments>=2.17 (from sphinx) Downloading pygments-2.19.2-py3-none-any.whl.metadata (2.5 kB) Collecting docutils<0.22,>=0.20 (from sphinx) Downloading docutils-0.21.2-py3-none-any.whl.metadata (2.8 kB) Collecting snowballstemmer>=2.2 (from sphinx) Downloading snowballstemmer-3.0.1-py3-none-any.whl.metadata (7.9 kB) Collecting babel>=2.13 (from sphinx) Downloading babel-2.18.0-py3-none-any.whl.metadata (2.2 kB) Collecting alabaster>=0.7.14 (from sphinx) Downloading alabaster-1.0.0-py3-none-any.whl.metadata (2.8 kB) Collecting imagesize>=1.3 (from sphinx) Downloading imagesize-2.0.0-py2.py3-none-any.whl.metadata (1.5 kB) Collecting requests>=2.30.0 (from sphinx) Downloading requests-2.33.0-py3-none-any.whl.metadata (5.1 kB) Collecting packaging>=23.0 (from sphinx) Downloading packaging-26.0-py3-none-any.whl.metadata (3.3 kB) Collecting tomli>=2 (from sphinx) Downloading tomli-2.4.1-py3-none-any.whl.metadata (10 kB) Collecting MarkupSafe>=2.0 (from Jinja2>=3.1->sphinx) Downloading markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (2.7 kB) Collecting charset_normalizer<4,>=2 (from requests>=2.30.0->sphinx) Downloading charset_normalizer-3.4.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (40 kB) Collecting idna<4,>=2.5 (from requests>=2.30.0->sphinx) Downloading idna-3.11-py3-none-any.whl.metadata (8.4 kB) Collecting urllib3<3,>=1.26 (from requests>=2.30.0->sphinx) Downloading urllib3-2.6.3-py3-none-any.whl.metadata (6.9 kB) Collecting certifi>=2023.5.7 (from requests>=2.30.0->sphinx) Downloading certifi-2026.2.25-py3-none-any.whl.metadata (2.5 kB) Downloading sphinx-8.1.3-py3-none-any.whl (3.5 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.5/3.5 MB 62.6 MB/s 0:00:00 Downloading docutils-0.21.2-py3-none-any.whl (587 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 587.4/587.4 kB 932.5 MB/s 0:00:00 Downloading alabaster-1.0.0-py3-none-any.whl (13 kB) Downloading babel-2.18.0-py3-none-any.whl (10.2 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.2/10.2 MB 357.8 MB/s 0:00:00 Downloading imagesize-2.0.0-py2.py3-none-any.whl (9.4 kB) Downloading jinja2-3.1.6-py3-none-any.whl (134 kB) Downloading markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (20 kB) Downloading packaging-26.0-py3-none-any.whl (74 kB) Downloading pygments-2.19.2-py3-none-any.whl (1.2 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 1.1 GB/s 0:00:00 Downloading requests-2.33.0-py3-none-any.whl (65 kB) Downloading charset_normalizer-3.4.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (207 kB) Downloading idna-3.11-py3-none-any.whl (71 kB) Downloading urllib3-2.6.3-py3-none-any.whl (131 kB) Downloading certifi-2026.2.25-py3-none-any.whl (153 kB) Downloading snowballstemmer-3.0.1-py3-none-any.whl (103 kB) Downloading sphinxcontrib_applehelp-2.0.0-py3-none-any.whl (119 kB) Downloading sphinxcontrib_devhelp-2.0.0-py3-none-any.whl (82 kB) Downloading sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl (98 kB) Downloading sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl (5.1 kB) Downloading sphinxcontrib_qthelp-2.0.0-py3-none-any.whl (88 kB) Downloading sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl (92 kB) Downloading tomli-2.4.1-py3-none-any.whl (14 kB) Installing collected packages: urllib3, tomli, sphinxcontrib-serializinghtml, sphinxcontrib-qthelp, sphinxcontrib-jsmath, sphinxcontrib-htmlhelp, sphinxcontrib-devhelp, sphinxcontrib-applehelp, snowballstemmer, Pygments, packaging, MarkupSafe, imagesize, idna, docutils, charset_normalizer, certifi, babel, alabaster, requests, Jinja2, sphinx Successfully installed Jinja2-3.1.6 MarkupSafe-3.0.3 Pygments-2.19.2 alabaster-1.0.0 babel-2.18.0 certifi-2026.2.25 charset_normalizer-3.4.6 docutils-0.21.2 idna-3.11 imagesize-2.0.0 packaging-26.0 requests-2.33.0 snowballstemmer-3.0.1 sphinx-8.1.3 sphinxcontrib-applehelp-2.0.0 sphinxcontrib-devhelp-2.0.0 sphinxcontrib-htmlhelp-2.1.0 sphinxcontrib-jsmath-1.0.1 sphinxcontrib-qthelp-2.0.0 sphinxcontrib-serializinghtml-2.0.0 tomli-2.4.1 urllib3-2.6.3 [rtd-command-info] start-time: 2026-03-27T18:31:21.813698Z, end-time: 2026-03-27T18:31:44.880731Z, duration: 23, exit-code: 0 python -m pip install --exists-action=w --no-cache-dir -r doc/requirements-doc.lock.txt Collecting accessible-pygments==0.0.5 (from -r doc/requirements-doc.lock.txt (line 3)) Downloading accessible_pygments-0.0.5-py3-none-any.whl (1.4 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.4/1.4 MB 13.4 MB/s 0:00:00 Collecting alabaster==0.7.16 (from -r doc/requirements-doc.lock.txt (line 7)) Downloading alabaster-0.7.16-py3-none-any.whl (13 kB) Collecting annotated-types==0.7.0 (from -r doc/requirements-doc.lock.txt (line 11)) Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB) Collecting anyio==4.11.0 (from -r doc/requirements-doc.lock.txt (line 15)) Downloading anyio-4.11.0-py3-none-any.whl (109 kB) Collecting appnope==0.1.4 (from -r doc/requirements-doc.lock.txt (line 21)) Downloading appnope-0.1.4-py2.py3-none-any.whl (4.3 kB) Collecting asttokens==3.0.0 (from -r doc/requirements-doc.lock.txt (line 25)) Downloading asttokens-3.0.0-py3-none-any.whl (26 kB) Collecting attrs==25.4.0 (from -r doc/requirements-doc.lock.txt (line 29)) Downloading attrs-25.4.0-py3-none-any.whl (67 kB) Collecting autodoc-pydantic==2.2.0 (from -r doc/requirements-doc.lock.txt (line 36)) Downloading autodoc_pydantic-2.2.0-py3-none-any.whl (34 kB) Collecting babel==2.17.0 (from -r doc/requirements-doc.lock.txt (line 39)) Downloading babel-2.17.0-py3-none-any.whl (10.2 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.2/10.2 MB 48.0 MB/s 0:00:00 Collecting beautifulsoup4==4.14.2 (from -r doc/requirements-doc.lock.txt (line 45)) Downloading beautifulsoup4-4.14.2-py3-none-any.whl (106 kB) Collecting boto3==1.34.69 (from -r doc/requirements-doc.lock.txt (line 49)) Downloading boto3-1.34.69-py3-none-any.whl (139 kB) Collecting botocore==1.34.162 (from -r doc/requirements-doc.lock.txt (line 53)) Downloading botocore-1.34.162-py3-none-any.whl (12.5 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.5/12.5 MB 136.7 MB/s 0:00:00 Collecting certifi==2025.10.5 (from -r doc/requirements-doc.lock.txt (line 59)) Downloading certifi-2025.10.5-py3-none-any.whl (163 kB) Collecting charset-normalizer==3.4.4 (from -r doc/requirements-doc.lock.txt (line 63)) Downloading charset_normalizer-3.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (153 kB) Collecting click==8.1.7 (from -r doc/requirements-doc.lock.txt (line 178)) Downloading click-8.1.7-py3-none-any.whl (97 kB) Collecting colorama==0.4.6 (from -r doc/requirements-doc.lock.txt (line 186)) Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB) Collecting comm==0.2.3 (from -r doc/requirements-doc.lock.txt (line 190)) Downloading comm-0.2.3-py3-none-any.whl (7.3 kB) Collecting debugpy==1.8.17 (from -r doc/requirements-doc.lock.txt (line 194)) Downloading debugpy-1.8.17-cp310-cp310-manylinux_2_34_x86_64.whl (3.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1/3.1 MB 201.1 MB/s 0:00:00 Collecting decorator==5.2.1 (from -r doc/requirements-doc.lock.txt (line 226)) Downloading decorator-5.2.1-py3-none-any.whl (9.2 kB) Collecting docutils==0.20.1 (from -r doc/requirements-doc.lock.txt (line 230)) Downloading docutils-0.20.1-py3-none-any.whl (572 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 572.7/572.7 kB 808.6 MB/s 0:00:00 Collecting exceptiongroup==1.3.0 (from -r doc/requirements-doc.lock.txt (line 239)) Downloading exceptiongroup-1.3.0-py3-none-any.whl (16 kB) Collecting executing==2.2.1 (from -r doc/requirements-doc.lock.txt (line 245)) Downloading executing-2.2.1-py2.py3-none-any.whl (28 kB) Collecting fastjsonschema==2.21.2 (from -r doc/requirements-doc.lock.txt (line 249)) Downloading fastjsonschema-2.21.2-py3-none-any.whl (24 kB) Collecting gitdb==4.0.12 (from -r doc/requirements-doc.lock.txt (line 253)) Downloading gitdb-4.0.12-py3-none-any.whl (62 kB) Collecting gitpython==3.1.46 (from -r doc/requirements-doc.lock.txt (line 257)) Downloading gitpython-3.1.46-py3-none-any.whl (208 kB) Collecting greenlet==3.2.4 (from -r doc/requirements-doc.lock.txt (line 261)) Downloading greenlet-3.2.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (584 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 584.4/584.4 kB 740.2 MB/s 0:00:00 Collecting h11==0.16.0 (from -r doc/requirements-doc.lock.txt (line 317)) Downloading h11-0.16.0-py3-none-any.whl (37 kB) Requirement already satisfied: idna==3.11 in /home/docs/checkouts/readthedocs.org/user_builds/anyscale-ray/envs/master/lib/python3.10/site-packages (from -r doc/requirements-doc.lock.txt (line 321)) (3.11) Collecting imagesize==1.4.1 (from -r doc/requirements-doc.lock.txt (line 327)) Downloading imagesize-1.4.1-py2.py3-none-any.whl (8.8 kB) Collecting importlib-metadata==8.7.0 (from -r doc/requirements-doc.lock.txt (line 331)) Downloading importlib_metadata-8.7.0-py3-none-any.whl (27 kB) Collecting ipykernel==7.0.1 (from -r doc/requirements-doc.lock.txt (line 337)) Downloading ipykernel-7.0.1-py3-none-any.whl (118 kB) Collecting ipython==8.37.0 (from -r doc/requirements-doc.lock.txt (line 341)) Downloading ipython-8.37.0-py3-none-any.whl (831 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 831.9/831.9 kB 373.7 MB/s 0:00:00 Collecting jedi==0.19.2 (from -r doc/requirements-doc.lock.txt (line 347)) Downloading jedi-0.19.2-py2.py3-none-any.whl (1.6 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 197.7 MB/s 0:00:00 Requirement already satisfied: jinja2==3.1.6 in /home/docs/checkouts/readthedocs.org/user_builds/anyscale-ray/envs/master/lib/python3.10/site-packages (from -r doc/requirements-doc.lock.txt (line 351)) (3.1.6) Collecting jmespath==1.0.1 (from -r doc/requirements-doc.lock.txt (line 359)) Downloading jmespath-1.0.1-py3-none-any.whl (20 kB) Collecting jsonpointer==3.0.0 (from -r doc/requirements-doc.lock.txt (line 365)) Downloading jsonpointer-3.0.0-py2.py3-none-any.whl (7.6 kB) Collecting jsonschema==4.25.1 (from -r doc/requirements-doc.lock.txt (line 369)) Downloading jsonschema-4.25.1-py3-none-any.whl (90 kB) Collecting jsonschema-specifications==2025.9.1 (from -r doc/requirements-doc.lock.txt (line 375)) Downloading jsonschema_specifications-2025.9.1-py3-none-any.whl (18 kB) Collecting jupyter-cache==0.6.1 (from -r doc/requirements-doc.lock.txt (line 379)) Downloading jupyter_cache-0.6.1-py3-none-any.whl (33 kB) Collecting jupyter-client==8.6.3 (from -r doc/requirements-doc.lock.txt (line 383)) Downloading jupyter_client-8.6.3-py3-none-any.whl (106 kB) Collecting jupyter-core==5.9.1 (from -r doc/requirements-doc.lock.txt (line 389)) Downloading jupyter_core-5.9.1-py3-none-any.whl (29 kB) Collecting jupytext==1.15.2 (from -r doc/requirements-doc.lock.txt (line 397)) Downloading jupytext-1.15.2-py3-none-any.whl (307 kB) Collecting markdown-it-py==3.0.0 (from -r doc/requirements-doc.lock.txt (line 401)) Downloading markdown_it_py-3.0.0-py3-none-any.whl (87 kB) Requirement already satisfied: markupsafe==3.0.3 in /home/docs/checkouts/readthedocs.org/user_builds/anyscale-ray/envs/master/lib/python3.10/site-packages (from -r doc/requirements-doc.lock.txt (line 408)) (3.0.3) Collecting matplotlib-inline==0.1.7 (from -r doc/requirements-doc.lock.txt (line 499)) Downloading matplotlib_inline-0.1.7-py3-none-any.whl (9.9 kB) Collecting mdit-py-plugins==0.5.0 (from -r doc/requirements-doc.lock.txt (line 505)) Downloading mdit_py_plugins-0.5.0-py3-none-any.whl (57 kB) Collecting mdurl==0.1.2 (from -r doc/requirements-doc.lock.txt (line 511)) Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB) Collecting myst-nb==1.0.0rc0 (from -r doc/requirements-doc.lock.txt (line 515)) Downloading myst_nb-1.0.0rc0-py3-none-any.whl (80 kB) Collecting myst-parser==2.0.0 (from -r doc/requirements-doc.lock.txt (line 519)) Downloading myst_parser-2.0.0-py3-none-any.whl (77 kB) Collecting nbclient==0.7.4 (from -r doc/requirements-doc.lock.txt (line 525)) Downloading nbclient-0.7.4-py3-none-any.whl (73 kB) Collecting nbformat==5.10.4 (from -r doc/requirements-doc.lock.txt (line 531)) Downloading nbformat-5.10.4-py3-none-any.whl (78 kB) Collecting nest-asyncio==1.6.0 (from -r doc/requirements-doc.lock.txt (line 539)) Downloading nest_asyncio-1.6.0-py3-none-any.whl (5.2 kB) Collecting packaging==25.0 (from -r doc/requirements-doc.lock.txt (line 543)) Downloading packaging-25.0-py3-none-any.whl (66 kB) Collecting parso==0.8.5 (from -r doc/requirements-doc.lock.txt (line 551)) Downloading parso-0.8.5-py2.py3-none-any.whl (106 kB) Collecting pexpect==4.9.0 (from -r doc/requirements-doc.lock.txt (line 555)) Downloading pexpect-4.9.0-py2.py3-none-any.whl (63 kB) Collecting platformdirs==4.5.0 (from -r doc/requirements-doc.lock.txt (line 559)) Downloading platformdirs-4.5.0-py3-none-any.whl (18 kB) Collecting prompt-toolkit==3.0.52 (from -r doc/requirements-doc.lock.txt (line 563)) Downloading prompt_toolkit-3.0.52-py3-none-any.whl (391 kB) Collecting psutil==7.1.0 (from -r doc/requirements-doc.lock.txt (line 567)) Downloading psutil-7.1.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (291 kB) Collecting ptyprocess==0.7.0 (from -r doc/requirements-doc.lock.txt (line 578)) Downloading ptyprocess-0.7.0-py2.py3-none-any.whl (13 kB) Collecting pure-eval==0.2.3 (from -r doc/requirements-doc.lock.txt (line 582)) Downloading pure_eval-0.2.3-py3-none-any.whl (11 kB) Collecting pydantic==2.5.0 (from -r doc/requirements-doc.lock.txt (line 586)) Downloading pydantic-2.5.0-py3-none-any.whl (407 kB) Collecting pydantic-core==2.14.1 (from -r doc/requirements-doc.lock.txt (line 593)) Downloading pydantic_core-2.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 228.3 MB/s 0:00:00 Collecting pydantic-settings==2.2.1 (from -r doc/requirements-doc.lock.txt (line 696)) Downloading pydantic_settings-2.2.1-py3-none-any.whl (13 kB) Collecting pydata-sphinx-theme==0.14.1 (from -r doc/requirements-doc.lock.txt (line 700)) Downloading pydata_sphinx_theme-0.14.1-py3-none-any.whl (3.8 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.8/3.8 MB 250.4 MB/s 0:00:00 Collecting pygments==2.16.1 (from -r doc/requirements-doc.lock.txt (line 704)) Downloading Pygments-2.16.1-py3-none-any.whl (1.2 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 555.5 MB/s 0:00:00 Collecting python-dateutil==2.9.0.post0 (from -r doc/requirements-doc.lock.txt (line 713)) Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB) Collecting python-dotenv==1.1.1 (from -r doc/requirements-doc.lock.txt (line 719)) Downloading python_dotenv-1.1.1-py3-none-any.whl (20 kB) Collecting pyyaml==6.0.3 (from -r doc/requirements-doc.lock.txt (line 723)) Downloading pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (770 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 770.3/770.3 kB 844.5 MB/s 0:00:00 Collecting pyzmq==27.1.0 (from -r doc/requirements-doc.lock.txt (line 804)) Downloading pyzmq-27.1.0-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl (854 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 854.1/854.1 kB 768.5 MB/s 0:00:00 Collecting referencing==0.37.0 (from -r doc/requirements-doc.lock.txt (line 900)) Downloading referencing-0.37.0-py3-none-any.whl (26 kB) Collecting requests==2.32.5 (from -r doc/requirements-doc.lock.txt (line 906)) Downloading requests-2.32.5-py3-none-any.whl (64 kB) Collecting rpds-py==0.27.1 (from -r doc/requirements-doc.lock.txt (line 913)) Downloading rpds_py-0.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (384 kB) Collecting s3transfer==0.10.4 (from -r doc/requirements-doc.lock.txt (line 1072)) Downloading s3transfer-0.10.4-py3-none-any.whl (83 kB) Collecting setuptools==80.9.0 (from -r doc/requirements-doc.lock.txt (line 1076)) Downloading setuptools-80.9.0-py3-none-any.whl (1.2 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 491.2 MB/s 0:00:00 Collecting six==1.17.0 (from -r doc/requirements-doc.lock.txt (line 1080)) Downloading six-1.17.0-py2.py3-none-any.whl (11 kB) Collecting smmap==5.0.2 (from -r doc/requirements-doc.lock.txt (line 1086)) Downloading smmap-5.0.2-py3-none-any.whl (24 kB) Collecting sniffio==1.3.1 (from -r doc/requirements-doc.lock.txt (line 1090)) Downloading sniffio-1.3.1-py3-none-any.whl (10 kB) Requirement already satisfied: snowballstemmer==3.0.1 in /home/docs/checkouts/readthedocs.org/user_builds/anyscale-ray/envs/master/lib/python3.10/site-packages (from -r doc/requirements-doc.lock.txt (line 1094)) (3.0.1) Collecting soupsieve==2.8 (from -r doc/requirements-doc.lock.txt (line 1098)) Downloading soupsieve-2.8-py3-none-any.whl (36 kB) Collecting sphinx==7.3.7 (from -r doc/requirements-doc.lock.txt (line 1102)) Downloading sphinx-7.3.7-py3-none-any.whl (3.3 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 218.1 MB/s 0:00:00 Collecting sphinx-autobuild==2024.4.16 (from -r doc/requirements-doc.lock.txt (line 1121)) Downloading sphinx_autobuild-2024.4.16-py3-none-any.whl (11 kB) Collecting sphinx-click==5.1.0 (from -r doc/requirements-doc.lock.txt (line 1125)) Downloading sphinx_click-5.1.0-py3-none-any.whl (9.7 kB) Collecting sphinx-collections==0.3.1 (from -r doc/requirements-doc.lock.txt (line 1129)) Downloading sphinx_collections-0.3.1-py3-none-any.whl (16 kB) Collecting sphinx-copybutton==0.5.2 (from -r doc/requirements-doc.lock.txt (line 1133)) Downloading sphinx_copybutton-0.5.2-py3-none-any.whl (13 kB) Collecting sphinx-design==0.5.0 (from -r doc/requirements-doc.lock.txt (line 1137)) Downloading sphinx_design-0.5.0-py3-none-any.whl (2.2 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2/2.2 MB 274.3 MB/s 0:00:00 Collecting sphinx-docsearch==0.0.7 (from -r doc/requirements-doc.lock.txt (line 1141)) Downloading sphinx_docsearch-0.0.7-py3-none-any.whl (42 kB) Collecting sphinx-jsonschema==1.19.1 (from -r doc/requirements-doc.lock.txt (line 1145)) Downloading sphinx-jsonschema-1.19.1.tar.gz (18 kB) Installing build dependencies: started Installing build dependencies: finished with status 'done' Getting requirements to build wheel: started Getting requirements to build wheel: finished with status 'done' Preparing metadata (pyproject.toml): started Preparing metadata (pyproject.toml): finished with status 'done' Collecting sphinx-remove-toctrees==0.0.3 (from -r doc/requirements-doc.lock.txt (line 1148)) Downloading sphinx_remove_toctrees-0.0.3-py3-none-any.whl (4.7 kB) Collecting sphinx-sitemap==2.5.1 (from -r doc/requirements-doc.lock.txt (line 1152)) Downloading sphinx_sitemap-2.5.1-py3-none-any.whl (5.5 kB) Requirement already satisfied: sphinxcontrib-applehelp==2.0.0 in /home/docs/checkouts/readthedocs.org/user_builds/anyscale-ray/envs/master/lib/python3.10/site-packages (from -r doc/requirements-doc.lock.txt (line 1156)) (2.0.0) Requirement already satisfied: sphinxcontrib-devhelp==2.0.0 in /home/docs/checkouts/readthedocs.org/user_builds/anyscale-ray/envs/master/lib/python3.10/site-packages (from -r doc/requirements-doc.lock.txt (line 1160)) (2.0.0) Requirement already satisfied: sphinxcontrib-htmlhelp==2.1.0 in /home/docs/checkouts/readthedocs.org/user_builds/anyscale-ray/envs/master/lib/python3.10/site-packages (from -r doc/requirements-doc.lock.txt (line 1164)) (2.1.0) Requirement already satisfied: sphinxcontrib-jsmath==1.0.1 in /home/docs/checkouts/readthedocs.org/user_builds/anyscale-ray/envs/master/lib/python3.10/site-packages (from -r doc/requirements-doc.lock.txt (line 1168)) (1.0.1) Requirement already satisfied: sphinxcontrib-qthelp==2.0.0 in /home/docs/checkouts/readthedocs.org/user_builds/anyscale-ray/envs/master/lib/python3.10/site-packages (from -r doc/requirements-doc.lock.txt (line 1172)) (2.0.0) Collecting sphinxcontrib-redoc==1.6.0 (from -r doc/requirements-doc.lock.txt (line 1176)) Downloading sphinxcontrib-redoc-1.6.0.tar.gz (350 kB) Installing build dependencies: started Installing build dependencies: finished with status 'done' Getting requirements to build wheel: started Getting requirements to build wheel: finished with status 'done' Installing backend dependencies: started Installing backend dependencies: finished with status 'done' Preparing metadata (pyproject.toml): started Preparing metadata (pyproject.toml): finished with status 'done' Requirement already satisfied: sphinxcontrib-serializinghtml==2.0.0 in /home/docs/checkouts/readthedocs.org/user_builds/anyscale-ray/envs/master/lib/python3.10/site-packages (from -r doc/requirements-doc.lock.txt (line 1179)) (2.0.0) Collecting sphinxemoji==0.3.2 (from -r doc/requirements-doc.lock.txt (line 1183)) Downloading sphinxemoji-0.3.2-py3-none-any.whl (45 kB) Collecting sqlalchemy==2.0.44 (from -r doc/requirements-doc.lock.txt (line 1187)) Downloading sqlalchemy-2.0.44-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.2 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.2/3.2 MB 326.1 MB/s 0:00:00 Collecting stack-data==0.6.3 (from -r doc/requirements-doc.lock.txt (line 1246)) Downloading stack_data-0.6.3-py3-none-any.whl (24 kB) Collecting starlette==0.48.0 (from -r doc/requirements-doc.lock.txt (line 1250)) Downloading starlette-0.48.0-py3-none-any.whl (73 kB) Collecting tabulate==0.9.0 (from -r doc/requirements-doc.lock.txt (line 1254)) Downloading tabulate-0.9.0-py3-none-any.whl (35 kB) Collecting toml==0.10.2 (from -r doc/requirements-doc.lock.txt (line 1258)) Downloading toml-0.10.2-py2.py3-none-any.whl (16 kB) Collecting tomli==2.3.0 (from -r doc/requirements-doc.lock.txt (line 1262)) Downloading tomli-2.3.0-py3-none-any.whl (14 kB) Collecting tornado==6.5.2 (from -r doc/requirements-doc.lock.txt (line 1306)) Downloading tornado-6.5.2-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (443 kB) Collecting traitlets==5.14.3 (from -r doc/requirements-doc.lock.txt (line 1322)) Downloading traitlets-5.14.3-py3-none-any.whl (85 kB) Collecting typing-extensions==4.15.0 (from -r doc/requirements-doc.lock.txt (line 1333)) Downloading typing_extensions-4.15.0-py3-none-any.whl (44 kB) Collecting urllib3==1.26.20 (from -r doc/requirements-doc.lock.txt (line 1349)) Downloading urllib3-1.26.20-py2.py3-none-any.whl (144 kB) Collecting uvicorn==0.37.0 (from -r doc/requirements-doc.lock.txt (line 1356)) Downloading uvicorn-0.37.0-py3-none-any.whl (67 kB) Collecting watchfiles==1.1.1 (from -r doc/requirements-doc.lock.txt (line 1360)) Downloading watchfiles-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (455 kB) Collecting wcwidth==0.2.14 (from -r doc/requirements-doc.lock.txt (line 1471)) Downloading wcwidth-0.2.14-py2.py3-none-any.whl (37 kB) Collecting websockets==15.0.1 (from -r doc/requirements-doc.lock.txt (line 1475)) Downloading websockets-15.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (181 kB) Collecting zipp==3.23.0 (from -r doc/requirements-doc.lock.txt (line 1546)) Downloading zipp-3.23.0-py3-none-any.whl (10 kB) Building wheels for collected packages: sphinx-jsonschema, sphinxcontrib-redoc Building wheel for sphinx-jsonschema (pyproject.toml): started Building wheel for sphinx-jsonschema (pyproject.toml): finished with status 'done' Created wheel for sphinx-jsonschema: filename=sphinx_jsonschema-1.19.1-py3-none-any.whl size=15469 sha256=f5a1835a20402c67dded5c8e7d33d55177a03013047ef570ec574c3e1c00e426 Stored in directory: /tmp/pip-ephem-wheel-cache-0kb6tvvk/wheels/82/8b/0f/4cf4419b592e6ad5f1361067888fd0cade74714061a34d2858 Building wheel for sphinxcontrib-redoc (pyproject.toml): started Building wheel for sphinxcontrib-redoc (pyproject.toml): finished with status 'done' Created wheel for sphinxcontrib-redoc: filename=sphinxcontrib_redoc-1.6.0-py3-none-any.whl size=299648 sha256=b1def6309174706b6d268277e98c5db4a0a4c709de568b98f47a133e2424ddee Stored in directory: /tmp/pip-ephem-wheel-cache-0kb6tvvk/wheels/c3/f3/09/ca56bcb5e735dbf9d7ccfcbfa66480b60179becfe44e425e7b Successfully built sphinx-jsonschema sphinxcontrib-redoc Installing collected packages: pure-eval, ptyprocess, fastjsonschema, zipp, websockets, wcwidth, urllib3, typing-extensions, traitlets, tornado, tomli, toml, tabulate, soupsieve, sniffio, smmap, six, setuptools, rpds-py, pyzmq, pyyaml, python-dotenv, pygments, psutil, platformdirs, pexpect, parso, packaging, nest-asyncio, mdurl, jsonpointer, jmespath, imagesize, h11, greenlet, executing, docutils, decorator, debugpy, comm, colorama, click, charset-normalizer, certifi, babel, attrs, asttokens, appnope, annotated-types, alabaster, uvicorn, stack-data, sqlalchemy, requests, referencing, python-dateutil, pydantic-core, prompt-toolkit, matplotlib-inline, markdown-it-py, jupyter-core, jedi, importlib-metadata, gitdb, exceptiongroup, beautifulsoup4, accessible-pygments, sphinx-jsonschema, sphinx, pydantic, mdit-py-plugins, jupyter-client, jsonschema-specifications, ipython, gitpython, botocore, anyio, watchfiles, starlette, sphinxemoji, sphinx-sitemap, sphinx-remove-toctrees, sphinx-docsearch, sphinx-design, sphinx-copybutton, sphinx-collections, sphinx-click, s3transfer, pydata-sphinx-theme, pydantic-settings, myst-parser, jsonschema, ipykernel, sphinxcontrib-redoc, sphinx-autobuild, nbformat, boto3, autodoc-pydantic, nbclient, jupytext, jupyter-cache, myst-nb Attempting uninstall: urllib3 Found existing installation: urllib3 2.6.3 Uninstalling urllib3-2.6.3: Successfully uninstalled urllib3-2.6.3 Attempting uninstall: tomli Found existing installation: tomli 2.4.1 Uninstalling tomli-2.4.1: Successfully uninstalled tomli-2.4.1 Attempting uninstall: setuptools Found existing installation: setuptools 82.0.1 Uninstalling setuptools-82.0.1: Successfully uninstalled setuptools-82.0.1 Attempting uninstall: pygments Found existing installation: Pygments 2.19.2 Uninstalling Pygments-2.19.2: Successfully uninstalled Pygments-2.19.2 Attempting uninstall: packaging Found existing installation: packaging 26.0 Uninstalling packaging-26.0: Successfully uninstalled packaging-26.0 Attempting uninstall: imagesize Found existing installation: imagesize 2.0.0 Uninstalling imagesize-2.0.0: Successfully uninstalled imagesize-2.0.0 Attempting uninstall: docutils Found existing installation: docutils 0.21.2 Uninstalling docutils-0.21.2: Successfully uninstalled docutils-0.21.2 Attempting uninstall: charset-normalizer Found existing installation: charset-normalizer 3.4.6 Uninstalling charset-normalizer-3.4.6: Successfully uninstalled charset-normalizer-3.4.6 Attempting uninstall: certifi Found existing installation: certifi 2026.2.25 Uninstalling certifi-2026.2.25: Successfully uninstalled certifi-2026.2.25 Attempting uninstall: babel Found existing installation: babel 2.18.0 Uninstalling babel-2.18.0: Successfully uninstalled babel-2.18.0 Attempting uninstall: alabaster Found existing installation: alabaster 1.0.0 Uninstalling alabaster-1.0.0: Successfully uninstalled alabaster-1.0.0 Attempting uninstall: requests Found existing installation: requests 2.33.0 Uninstalling requests-2.33.0: Successfully uninstalled requests-2.33.0 Attempting uninstall: sphinx Found existing installation: Sphinx 8.1.3 Uninstalling Sphinx-8.1.3: Successfully uninstalled Sphinx-8.1.3 Successfully installed accessible-pygments-0.0.5 alabaster-0.7.16 annotated-types-0.7.0 anyio-4.11.0 appnope-0.1.4 asttokens-3.0.0 attrs-25.4.0 autodoc-pydantic-2.2.0 babel-2.17.0 beautifulsoup4-4.14.2 boto3-1.34.69 botocore-1.34.162 certifi-2025.10.5 charset-normalizer-3.4.4 click-8.1.7 colorama-0.4.6 comm-0.2.3 debugpy-1.8.17 decorator-5.2.1 docutils-0.20.1 exceptiongroup-1.3.0 executing-2.2.1 fastjsonschema-2.21.2 gitdb-4.0.12 gitpython-3.1.46 greenlet-3.2.4 h11-0.16.0 imagesize-1.4.1 importlib-metadata-8.7.0 ipykernel-7.0.1 ipython-8.37.0 jedi-0.19.2 jmespath-1.0.1 jsonpointer-3.0.0 jsonschema-4.25.1 jsonschema-specifications-2025.9.1 jupyter-cache-0.6.1 jupyter-client-8.6.3 jupyter-core-5.9.1 jupytext-1.15.2 markdown-it-py-3.0.0 matplotlib-inline-0.1.7 mdit-py-plugins-0.5.0 mdurl-0.1.2 myst-nb-1.0.0rc0 myst-parser-2.0.0 nbclient-0.7.4 nbformat-5.10.4 nest-asyncio-1.6.0 packaging-25.0 parso-0.8.5 pexpect-4.9.0 platformdirs-4.5.0 prompt-toolkit-3.0.52 psutil-7.1.0 ptyprocess-0.7.0 pure-eval-0.2.3 pydantic-2.5.0 pydantic-core-2.14.1 pydantic-settings-2.2.1 pydata-sphinx-theme-0.14.1 pygments-2.16.1 python-dateutil-2.9.0.post0 python-dotenv-1.1.1 pyyaml-6.0.3 pyzmq-27.1.0 referencing-0.37.0 requests-2.32.5 rpds-py-0.27.1 s3transfer-0.10.4 setuptools-80.9.0 six-1.17.0 smmap-5.0.2 sniffio-1.3.1 soupsieve-2.8 sphinx-7.3.7 sphinx-autobuild-2024.4.16 sphinx-click-5.1.0 sphinx-collections-0.3.1 sphinx-copybutton-0.5.2 sphinx-design-0.5.0 sphinx-docsearch-0.0.7 sphinx-jsonschema-1.19.1 sphinx-remove-toctrees-0.0.3 sphinx-sitemap-2.5.1 sphinxcontrib-redoc-1.6.0 sphinxemoji-0.3.2 sqlalchemy-2.0.44 stack-data-0.6.3 starlette-0.48.0 tabulate-0.9.0 toml-0.10.2 tomli-2.3.0 tornado-6.5.2 traitlets-5.14.3 typing-extensions-4.15.0 urllib3-1.26.20 uvicorn-0.37.0 watchfiles-1.1.1 wcwidth-0.2.14 websockets-15.0.1 zipp-3.23.0 [rtd-command-info] start-time: 2026-03-27T18:31:45.053710Z, end-time: 2026-03-27T18:31:45.093363Z, duration: 0, exit-code: 0 cat doc/source/conf.py import io import json import logging import os import pathlib import re import sys import zipfile from datetime import datetime from dataclasses import is_dataclass from importlib import import_module from typing import Any, Dict from urllib.request import urlopen import sphinx from docutils import nodes from jinja2.filters import FILTERS from sphinx.ext import autodoc from sphinx.ext.autosummary import generate from sphinx.util.inspect import safe_getattr DEFAULT_API_GROUP = "Others" logger = logging.getLogger(__name__) sys.path.insert(0, os.path.abspath(".")) from custom_directives import ( # noqa DownloadAndPreprocessEcosystemDocs, update_context, LinkcheckSummarizer, parse_navbar_config, setup_context, pregenerate_example_rsts, generate_versions_json, collect_example_orphans, ) # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. assert not os.path.exists( "../../python/ray/_raylet.so" ), "_raylet.so should not be imported for the purpose for doc build, please rename the file to _raylet.so.bak and try again." sys.path.insert(0, os.path.abspath("../../python/")) # -- General configuration ------------------------------------------------ # This setting controls how single backticks are handled by sphinx. Developers # are used to using single backticks for code, but RST syntax requires that code # code to be denoted with _double_ backticks. # Here we make sphinx treat single backticks as code also, because everyone is # used to using single backticks as is done with markdown; without this setting, # lots of documentation ends up getting committed with single backticks anyway, # so we might as well make it work as developers intend for it to. default_role = "code" sys.path.append(os.path.abspath("./_ext")) extensions = [ "callouts", # custom extension from _ext folder "queryparamrefs", "sphinx.ext.autodoc", "sphinx.ext.viewcode", "sphinx.ext.napoleon", "sphinx_click.ext", "sphinx-jsonschema", "sphinxemoji.sphinxemoji", "sphinx_copybutton", "sphinx_sitemap", "myst_nb", "sphinx.ext.doctest", "sphinx.ext.coverage", "sphinx.ext.autosummary", "sphinxcontrib.autodoc_pydantic", "sphinxcontrib.redoc", "sphinx_remove_toctrees", "sphinx_design", "sphinx.ext.intersphinx", "sphinx_docsearch", "sphinx_collections", ] # -- sphinx-collections: pull external template files at build time ----------- _TEMPLATES_CI_BASE = "https://templates.ci.ray.io" _TEMPLATE_CHANNEL_API = _TEMPLATES_CI_BASE + "/templates/{name}/latest/channel.json" _TEMPLATE_COLLECTIONS = { "deployment-serve-llm": { "target": "serve/tutorials/deployment-serve-llm", }, } def _resolve_template_url(name): """Fetch the build zip URL for a template from the channel API.""" api_url = _TEMPLATE_CHANNEL_API.format(name=name) logger.info("sphinx-collections: resolving template URL from %s", api_url) with urlopen(api_url) as resp: data = json.loads(resp.read()) url = data["url"] # Replace the ascommon:/// protocol with the templates.ci.ray.io base URL. url = url.replace("ascommon:///", _TEMPLATES_CI_BASE + "/") # Append /build.zip to get the docs build archive. url = url.rstrip("/") + "/build.zip" logger.info("sphinx-collections: resolved URL %s", url) return url def _fetch_and_extract_zip(config): """Download a zip archive and extract it into the collection target directory.""" import shutil url = _resolve_template_url(config["name"]) target = pathlib.Path(config["target"]) if target.is_dir(): shutil.rmtree(target) target.mkdir(parents=True, exist_ok=True) logger.info("sphinx-collections: downloading %s -> %s", url, target) with urlopen(url) as resp: zip_bytes = io.BytesIO(resp.read()) with zipfile.ZipFile(zip_bytes) as zf: zf.extractall(target) logger.info("sphinx-collections: extracted %d files to %s", len(zf.namelist()), target) collections = { name: { "driver": "function", "source": _fetch_and_extract_zip, "target": coll["target"], "clean": False, "final_clean": False, "write_result": False, } for name, coll in _TEMPLATE_COLLECTIONS.items() } # Don't wipe the target before build — other docs may co-exist in parent dirs. collections_clean = True # Clean up collected files after build so they don't get committed. collections_final_clean = True # The collections config contains a function reference (for the "function" driver) # which Sphinx cannot pickle for caching. This is harmless — suppress the warning # so it doesn't cause a build failure under -W (warnings-as-errors). suppress_warnings = ["config.cache"] # Disable autodoc_pydantic features that can produce empty raw directives # (e.g. when schema JSON fails for models with non-serializable fields) autodoc_pydantic_model_show_json = False # Configuration for algolia # Note: This API key grants read access to our indexes and is intended to be public. # See https://www.algolia.com/doc/guides/security/api-keys/ for more information. docsearch_app_id = "LBHF0PABBL" docsearch_api_key = "6c42f30d9669d8e42f6fc92f44028596" docsearch_index_name = "docs-ray" remove_from_toctrees = [ "cluster/running-applications/job-submission/doc/*", "ray-observability/reference/doc/*", "ray-core/api/doc/*", "data/api/doc/*", "train/api/doc/*", "tune/api/doc/*", "serve/api/doc/*", "rllib/package_ref/algorithm/*", "rllib/package_ref/policy/*", "rllib/package_ref/models/*", "rllib/package_ref/catalogs/*", "rllib/package_ref/rl_modules/*", "rllib/package_ref/learner/*", "rllib/package_ref/evaluation/*", "rllib/package_ref/replay-buffers/*", "rllib/package_ref/utils/*", ] myst_enable_extensions = [ "dollarmath", "amsmath", "deflist", "html_admonition", "html_image", "colon_fence", "smartquotes", "replacements", ] myst_heading_anchors = 3 # Add these for attachment handling nb_render_key_pairs = { "html": [ ("img", ["src", "alt"]), ] } nb_output_folder = "_build/jupyter_execute" # Make broken internal references into build time errors. # See https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-nitpicky # for more information. :py:class: references are ignored due to false positives # arising from type annotations. See https://github.com/ray-project/ray/pull/46103 # for additional context. nitpicky = True nitpick_ignore_regex = [ ("py:obj", "ray.actor.T"), ("py:obj", "ray.data.aggregate.AccumulatorType"), ("py:obj", "ray.data.aggregate.SupportsRichComparisonType"), ("py:obj", "ray.data.aggregate.AggOutputType"), ("py:class", ".*"), # Workaround for https://github.com/sphinx-doc/sphinx/issues/10974 ("py:obj", "ray\\.data\\.datasource\\.datasink\\.WriteReturnType"), # UnknownPreprocessorError is an internal exception not exported in public API ("py:exc", "UnknownPreprocessorError"), ("py:exc", "ray\\.data\\.preprocessors\\.version_support\\.UnknownPreprocessorError"), # TypeVar for gRPCInputStream generic type ("py:obj", "ray\\.serve\\.grpc_util\\.T"), # autodoc_pydantic generates invalid py:obj refs for pydantic v2 validators # (e.g. "all fields", "_validate_*" references in validator docstrings) ("py:obj", r"ray\.serve\.config\.\w+\.all fields"), ("py:obj", r"ray\.serve\.config\.GangSchedulingConfig\._validate_runtime_failure_policy"), ("py:obj", r"ray\.serve\.schema\.\w+\.all fields"), ] # Cache notebook outputs in _build/.jupyter_cache # To prevent notebook execution, set this to "off". To force re-execution, set this to # "force". To cache previous runs, set this to "cache". nb_execution_mode = os.getenv("RUN_NOTEBOOKS", "off") # Add a render priority for doctest nb_mime_priority_overrides = [ ("html", "application/vnd.jupyter.widget-view+json", 10), ("html", "application/javascript", 20), ("html", "text/html", 30), ("html", "image/svg+xml", 40), ("html", "image/png", 50), ("html", "image/jpeg", 60), ("html", "text/markdown", 70), ("html", "text/latex", 80), ("html", "text/plain", 90), ] html_extra_path = ["robots.txt"] html_baseurl = "https://docs.ray.io/en/latest" # This pattern matches: # - Python Repl prompts (">>> ") and it's continuation ("... ") # - Bash prompts ("$ ") # - IPython prompts ("In []: ", "In [999]: ") and it's continuations # (" ...: ", " : ") copybutton_prompt_text = r">>> |\.\.\. |\$ |In \[\d*\]: | {2,5}\.\.\.: | {5,8}: " copybutton_prompt_is_regexp = True # Ignore divs with class="no-copybutton" copybutton_selector = "div:not(.no-copybutton) > div.highlight > pre" # By default, tabs can be closed by selecting an open tab. We disable this # functionality with the `sphinx_tabs_disable_tab_closing` option. sphinx_tabs_disable_tab_closing = True # Special mocking of packaging.version.Version is required when using sphinx; # we can't just add this to autodoc_mock_imports, as packaging is imported by # sphinx even before it can be mocked. Instead, we patch it here. import packaging.version as packaging_version # noqa Version = packaging_version.Version class MockVersion(Version): def __init__(self, version: str): if isinstance(version, (str, bytes)): super().__init__(version) else: super().__init__("0") packaging_version.Version = MockVersion # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] # The master toctree document. master_doc = "index" # General information about the project. project = "Ray" copyright = str(datetime.now().year) + ", The Ray Team" author = "The Ray Team" # The version info for the project you're documenting acts as replacement for # |version| and |release|, and is also used in various other places throughout the # built documents. Retrieve the version using `find_version` rather than importing # directly (from ray import __version__) because initializing ray will prevent # mocking of certain external dependencies. from setup import find_version # noqa release = find_version("ray", "_version.py") language = "en" # autogen files are only used to auto-generate public API documentation. # They are not included in the toctree to avoid warnings such as documents not included # in any toctree. autogen_files = [ "data/api/_autogen.rst", ] # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # Also helps resolve warnings about documents not included in any toctree. exclude_patterns = [ "templates/*", "cluster/running-applications/doc/ray.*", "data/api/ray.data.*.rst", # Hide README.md used for display on the console (anyscale templates) "serve/tutorials/**/content/**README.md", "data/examples/**/content/**README.md", "ray-overview/examples/**/content/**README.md", "ray-core/examples/**/content/**README.md", "train/examples/**/content/**README.md", "tune/examples/**/content/**README.md", # Other misc files (overviews, console-only examples, etc) "ray-overview/examples/llamafactory-llm-fine-tune/README.ipynb", "ray-overview/examples/llamafactory-llm-fine-tune/**/*.ipynb", "train/tutorials/content/**/README.md", "serve/tutorials/video-analysis/*.ipynb", # Legacy/backward compatibility "ray-overview/examples/**/README.md", "train/examples/**/README.md", "_collections/serve/tutorials/deployment-serve-llm/README.*", "_collections/serve/tutorials/deployment-serve-llm/*.ipynb", "_collections/serve/tutorials/deployment-serve-llm/**/*.ipynb", ] + autogen_files # If "DOC_LIB" is found, only build that top-level navigation item. build_one_lib = os.getenv("DOC_LIB") all_toc_libs = [ f.path.strip("./") for f in os.scandir(".") if f.is_dir() and "ray-" in f.path ] all_toc_libs += [ "cluster", "tune", "data", "train", "rllib", "serve", "llm", "workflows", ] if build_one_lib and build_one_lib in all_toc_libs: all_toc_libs.remove(build_one_lib) exclude_patterns += all_toc_libs # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False # Do not check anchors for links because it produces many false positives # and is slow (it needs to download the linked website). linkcheck_anchors = False if os.environ.get("LINKCHECK_ALL"): # Only check external links, i.e. the ones starting with http:// or https://. linkcheck_ignore = [ r"^((?!http).)*$", # exclude links not starting with http "http://ala2017.it.nuigalway.ie/papers/ALA2017_Gupta.pdf", # broken "https://mvnrepository.com/artifact/*", # working but somehow not with linkcheck # This should be fixed -- is temporal the successor of cadence? Do the examples need to be updated? "https://github.com/serverlessworkflow/specification/blob/main/comparisons/comparison-cadence.md", "https://www.oracle.com/java/technologies/javase-jdk15-downloads.html", # forbidden for client "https://speakerdeck.com/*", # forbidden for bots r"https://huggingface.co/*", # seems to be flaky r"https://www.meetup.com/*", # seems to be flaky r"https://www.pettingzoo.ml/*", # seems to be flaky r"http://localhost[:/].*", # Ignore localhost links r"^http:/$", # Ignore incomplete links # 403 Client Error: Forbidden for url. # They ratelimit bots. "https://www.datanami.com/2018/02/01/rays-new-library-targets-high-speed-reinforcement-learning/", # 403 Client Error: Forbidden for url. # They ratelimit bots. "https://www.researchgate.net/publication/222573328_Stochastic_Gradient_Boosting", "https://www.datanami.com/2019/11/05/why-every-python-developer-will-love-ray/", "https://dev.mysql.com/doc/connector-python/en/", # Returning 522s intermittently. "https://lczero.org/", # Returns 406 but remains accessible "https://www.uber.com/blog/elastic-xgboost-ray/", # Aggressive anti-bot checks "https://archive.vn/*", "https://archive.is/*", # 429: Rate limited "https://medium.com/*", "https://towardsdatascience.com/*", ] else: # Only check links that point to the ray-project org on github, since those # links are under our control and therefore much more likely to be real # issues that we need to fix if they are broken. linkcheck_ignore = [ r"^(?!https://(raw\.githubusercontent|github)\.com/ray-project/).*$" ] # -- Options for HTML output ---------------------------------------------- def render_svg_logo(path): with open(pathlib.Path(__file__).parent / path, "r") as f: content = f.read() return content # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. html_theme = "pydata_sphinx_theme" # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. html_theme_options = { "use_edit_page_button": True, "announcement": """Try Ray with $100 credit — Start now""", "logo": { "svg": render_svg_logo("_static/img/ray_logo.svg"), }, "navbar_start": ["navbar-ray-logo"], "navbar_end": [ "theme-switcher", "version-switcher", "navbar-icon-links", "navbar-anyscale", ], "navbar_center": ["navbar-links"], "navbar_align": "left", "secondary_sidebar_items": [ "page-toc", "edit-on-github", ], "content_footer_items": [ "csat", ], "navigation_depth": 4, "pygment_light_style": "stata-dark", "pygment_dark_style": "stata-dark", "switcher": { "json_url": "https://docs.ray.io/en/master/_static/versions.json", "version_match": os.getenv("READTHEDOCS_VERSION", "master"), }, } html_context = { "github_user": "ray-project", "github_repo": "ray", "github_version": "master", "doc_path": "doc/source/", } html_sidebars = { "**": [ ( "main-sidebar-readthedocs" if os.getenv("READTHEDOCS") == "True" else "main-sidebar" ) ], "ray-overview/examples": [], } # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". html_title = f"Ray {release}" autodoc_typehints_format = "short" # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. html_favicon = "_static/favicon.ico" # 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"] # Output file base name for HTML help builder. htmlhelp_basename = "Raydoc" # -- Options for LaTeX output --------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). # 'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). # 'pointsize': '10pt', # Additional stuff for the LaTeX preamble. # 'preamble': '', # Latex figure (float) alignment # 'figure_align': 'htbp', } latex_documents = [ (master_doc, "Ray.tex", "Ray Documentation", author, "manual"), ] # -- Options for manual page output --------------------------------------- man_pages = [(master_doc, "ray", "Ray Documentation", [author], 1)] # -- Options for Texinfo output ------------------------------------------- texinfo_documents = [ ( master_doc, "Ray", "Ray Documentation", author, "Ray", "Ray provides a simple, universal API for building distributed applications.", "Miscellaneous", ), ] # Python methods should be presented in source code order autodoc_member_order = "bysource" # Better typehint formatting (see custom.css) autodoc_typehints = "signature" def filter_out_undoc_class_members(member_name, class_name, module_name): module = import_module(module_name) cls = getattr(module, class_name) if getattr(cls, member_name).__doc__: return f"~{class_name}.{member_name}" else: return "" def has_public_constructor(class_name, module_name): cls = getattr(import_module(module_name), class_name) return _is_public_api(cls) def get_api_groups(method_names, class_name, module_name): api_groups = set() cls = getattr(import_module(module_name), class_name) for method_name in method_names: method = getattr(cls, method_name) if _is_public_api(method): api_groups.add( safe_getattr(method, "_annotated_api_group", DEFAULT_API_GROUP) ) return sorted(api_groups) def select_api_group(method_names, class_name, module_name, api_group): cls = getattr(import_module(module_name), class_name) return [ method_name for method_name in method_names if _is_public_api(getattr(cls, method_name)) and _is_api_group(getattr(cls, method_name), api_group) ] def _is_public_api(obj): api_type = safe_getattr(obj, "_annotated_type", None) if not api_type: return False return api_type.value == "PublicAPI" def _is_api_group(obj, group): return safe_getattr(obj, "_annotated_api_group", DEFAULT_API_GROUP) == group FILTERS["filter_out_undoc_class_members"] = filter_out_undoc_class_members FILTERS["get_api_groups"] = get_api_groups FILTERS["select_api_group"] = select_api_group FILTERS["has_public_constructor"] = has_public_constructor def add_custom_assets( app: sphinx.application.Sphinx, pagename: str, templatename: str, context: Dict[str, Any], doctree: nodes.Node, ): """Add custom per-page assets. See documentation on Sphinx Core Events for more information: https://www.sphinx-doc.org/en/master/extdev/appapi.html#sphinx-core-events """ if pagename == "index": app.add_css_file("css/index.css") app.add_js_file("js/index.js") return "index.html" # Use the special index.html template for this page if pagename == "ray-overview/examples": app.add_css_file("css/examples.css") app.add_js_file("js/examples.js") return "ray-overview/examples.html" if pagename in [ "data/examples", "train/examples", "serve/examples", ]: return "examples.html" if pagename == "train/train": app.add_css_file("css/ray-train.css") elif pagename == "ray-overview/ray-libraries": app.add_css_file("css/ray-libraries.css") elif pagename == "ray-overview/use-cases": app.add_css_file("css/use_cases.css") def _autogen_apis(app: sphinx.application.Sphinx): """ Auto-generate public API documentation. """ try: generate.generate_autosummary_docs( [os.path.join(app.srcdir, file) for file in autogen_files], app=app, ) except Exception as e: import warnings warnings.warn(f"Skipping autogen due to: {e}") def process_signature(app, what, name, obj, options, signature, return_annotation): # Sphinx is unable to render dataclass with factory/`field` # https://github.com/sphinx-doc/sphinx/issues/10893 if what == "class" and is_dataclass(obj): return signature.replace("", "..."), return_annotation def setup(app): # Only generate versions JSON during RTD build if os.getenv("READTHEDOCS") == "True": generate_versions_json() pregenerate_example_rsts(app) # NOTE: 'MOCK' is a custom option we introduced to illustrate mock outputs. Since # `doctest` doesn't support this flag by default, `sphinx.ext.doctest` raises # warnings when we build the documentation. import doctest doctest.register_optionflag("MOCK") app.connect("html-page-context", update_context) app.add_config_value("navbar_content_path", "navbar.yml", "env") app.connect("config-inited", parse_navbar_config) app.connect("html-page-context", setup_context) app.connect("html-page-context", add_custom_assets) # https://github.com/ines/termynal app.add_js_file("js/termynal.js", defer="defer") app.add_css_file("css/termynal.css") app.add_js_file("js/custom.js", defer="defer") app.add_css_file("css/custom.css", priority=800) app.add_js_file("js/csat.js", defer="defer") app.add_css_file("css/csat.css") app.add_js_file("js/dismissable-banner.js", defer="defer") app.add_css_file("css/dismissable-banner.css") base_path = pathlib.Path(__file__).parent github_docs = DownloadAndPreprocessEcosystemDocs(base_path) # Download docs from ecosystem library repos app.connect("builder-inited", github_docs.write_new_docs) # Restore original file content after build app.connect("build-finished", github_docs.write_original_docs) # Hook into the logger used by linkcheck to display a summary at the end. linkcheck_summarizer = LinkcheckSummarizer() app.connect("builder-inited", linkcheck_summarizer.add_handler_to_linkcheck) app.connect("build-finished", linkcheck_summarizer.summarize) # Hook into the auto generation of public apis app.connect("builder-inited", _autogen_apis) app.connect("autodoc-process-signature", process_signature) class DuplicateObjectFilter(logging.Filter): def filter(self, record): # Intentionally allow duplicate object description of ray.actor.ActorMethod.bind: # once in Ray Core API and once in Compiled Graph API if "duplicate object description of ray.actor.ActorMethod.bind" in record.getMessage(): return False # Don't log this specific warning return True # Log all other warnings logging.getLogger("sphinx").addFilter(DuplicateObjectFilter()) # Register hook to mark orphan documents example_orphan_documents = collect_example_orphans(app.confdir, app.srcdir) def mark_orphans(app, docname, _source): if docname in example_orphan_documents: app.env.metadata.setdefault(docname, {}) app.env.metadata[docname]["orphan"] = True app.connect('source-read', mark_orphans) # Fix code-block language tags in _collections markdown files. # Notebooks converted to markdown tag Jupyter magic shell commands # (e.g. ``!serve run ...``) as ``python`` code blocks, which causes # Sphinx highlighting warnings. Re-tag them as ``bash``. _MAGIC_CODE_BLOCK_RE = re.compile(r"```python\n(![a-z])") def fix_collections_code_blocks(app, docname, source): if docname.startswith("_collections/"): source[0] = _MAGIC_CODE_BLOCK_RE.sub(r"```bash\n\1", source[0]) app.connect('source-read', fix_collections_code_blocks) redoc = [ { "name": "Ray Jobs API", "page": "cluster/running-applications/job-submission/api", "spec": "cluster/running-applications/job-submission/openapi.yml", "embed": True, }, ] redoc_uri = "https://cdn.redoc.ly/redoc/latest/bundles/redoc.standalone.js" autosummary_filename_map = { "ray.serve.deployment": "ray.serve.deployment_decorator", "ray.serve.Deployment": "ray.serve.Deployment", } # Mock out external dependencies here. autodoc_mock_imports = [ "aiohttp", "async_timeout", "backoff", "cachetools", "comet_ml", "composer", "cupy", "dask", "datasets", "fastapi", "filelock", "fsspec", "google", "grpc", "gymnasium", "horovod", "huggingface", "httpx", "joblib", "lightgbm", "lightgbm_ray", "mlflow", "nevergrad", "numpy", "pandas", "pyarrow", "pyarrow.compute", "pytorch_lightning", "scipy", "setproctitle", "skimage", "sklearn", "starlette", "tensorflow", "torch", "torchvision", "transformers", "tree", "typer", "uvicorn", "wandb", "watchfiles", "openai", "xgboost", "xgboost_ray", "psutil", "colorama", "grpc", "vllm", # Internal compiled modules "ray._raylet", "ray.core.generated", "ray.serve.generated", ] for mock_target in autodoc_mock_imports: if mock_target in sys.modules: logger.info( f"Potentially problematic mock target ({mock_target}) found; " "autodoc_mock_imports cannot mock modules that have already " "been loaded into sys.modules when the sphinx build starts." ) class MockedClassDocumenter(autodoc.ClassDocumenter): """Remove note about base class when a class is derived from object.""" def add_line(self, line: str, source: str, *lineno: int) -> None: if line == " Bases: :py:class:`object`": return super().add_line(line, source, *lineno) autodoc.ClassDocumenter = MockedClassDocumenter # Other sphinx docs can be linked to if the appropriate URL to the docs # is specified in the `intersphinx_mapping` - for example, types annotations # that are defined in dependencies can link to their respective documentation. intersphinx_mapping = { "aiohttp": ("https://docs.aiohttp.org/en/stable/", None), "composer": ("https://docs.mosaicml.com/en/latest/", None), "dask": ("https://docs.dask.org/en/stable/", None), "datasets": ("https://huggingface.co/docs/datasets/main/en/", None), "distributed": ("https://distributed.dask.org/en/stable/", None), "grpc": ("https://grpc.github.io/grpc/python/", None), "gymnasium": ("https://gymnasium.farama.org/", None), "horovod": ("https://horovod.readthedocs.io/en/stable/", None), "lightgbm": ("https://lightgbm.readthedocs.io/en/latest/", None), "mars": ("https://mars-project.readthedocs.io/en/latest/", None), "modin": ("https://modin.readthedocs.io/en/stable/", None), "nevergrad": ("https://facebookresearch.github.io/nevergrad/", None), "numpy": ("https://numpy.org/doc/stable/", None), "pandas": ( "https://pandas.pydata.org/pandas-docs/stable/", "https://github.com/ray-project/pandas/releases/download/object-mirror-0.1.0/objects.inv", ), "pyarrow": ("https://arrow.apache.org/docs", None), "pydantic": ("https://docs.pydantic.dev/latest/", None), "pymongoarrow": ("https://mongo-arrow.readthedocs.io/en/latest/", None), "pyspark": ("https://spark.apache.org/docs/latest/api/python/", None), "python": ("https://docs.python.org/3", None), "pytorch_lightning": ("https://lightning.ai/docs/pytorch/stable/", None), "scipy": ( "https://docs.scipy.org/doc/scipy/", "https://github.com/ray-project/scipy/releases/download/object-mirror-0.1.0/objects.inv", ), "sklearn": ("https://scikit-learn.org/stable/", None), "tensorflow": ( "https://www.tensorflow.org/api_docs/python", "https://raw.githubusercontent.com/GPflow/tensorflow-intersphinx/master/tf2_py_objects.inv", ), "torch": ("https://pytorch.org/docs/stable/", None), "torchvision": ("https://pytorch.org/vision/stable/", None), "transformers": ("https://huggingface.co/docs/transformers/main/en/", None), } # Ray must not be imported in conf.py because third party modules initialized by # `import ray` will no be mocked out correctly. Perform a check here to ensure # ray is not imported by future maintainers. assert ( "ray" not in sys.modules ), "If ray is already imported, we will not render documentation correctly!" os.environ["RAY_TRAIN_V2_ENABLED"] = "1" os.environ["RAY_DOC_BUILD"] = "1" [rtd-command-info] start-time: None, end-time: None, duration: None, exit-code: None python -m sphinx -T -W --keep-going -j auto -b html -d _build/doctrees -D language=en . $READTHEDOCS_OUTPUT/html