Read the Docs build information Build id: 1375723 Project: icb-scanpy Version: 2457 Commit: 0cf93d92033123a29f0df033a625849dcfad5c4a Date: 2023-03-27T06:01:45.398150Z State: finished Success: False [rtd-command-info] start-time: 2023-03-27T06:01:47.380975Z, end-time: 2023-03-27T06:01:50.430131Z, duration: 3, exit-code: 0 git clone --no-single-branch --depth 50 https://github.com/scverse/scanpy.git . Cloning into '.'... [rtd-command-info] start-time: 2023-03-27T06:01:50.648550Z, end-time: 2023-03-27T06:01:51.269519Z, duration: 0, exit-code: 0 git fetch origin --force --tags --prune --prune-tags --depth 50 pull/2457/head:external-2457 From https://github.com/scverse/scanpy * [new ref] refs/pull/2457/head -> external-2457 [rtd-command-info] start-time: 2023-03-27T06:01:51.459059Z, end-time: 2023-03-27T06:01:51.679386Z, duration: 0, exit-code: 0 git checkout --force 0cf93d92033123a29f0df033a625849dcfad5c4a Note: switching to '0cf93d92033123a29f0df033a625849dcfad5c4a'. 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 0cf93d92 Removing Master Changes [rtd-command-info] start-time: 2023-03-27T06:01:51.884043Z, end-time: 2023-03-27T06:01:51.964423Z, duration: 0, exit-code: 0 git clean -d -f -f [rtd-command-info] start-time: 2023-03-27T06:01:52.159613Z, end-time: 2023-03-27T06:01:52.931077Z, duration: 0, exit-code: 0 git submodule sync [rtd-command-info] start-time: 2023-03-27T06:01:53.126678Z, end-time: 2023-03-27T06:02:01.608410Z, duration: 8, exit-code: 0 git submodule update --init --force docs/tutorials Submodule 'docs/tutorials' (https://github.com/scverse/scanpy-tutorials.git) registered for path 'docs/tutorials' Cloning into '/home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/checkouts/2457/docs/tutorials'... Submodule path 'docs/tutorials': checked out '75c5ebb5b63769aee65f38842a34b7f7e1bbd476' [rtd-command-info] start-time: 2023-03-27T06:02:07.026529Z, end-time: 2023-03-27T06:02:07.137997Z, duration: 0, exit-code: 0 asdf global python 3.9.15 [rtd-command-info] start-time: 2023-03-27T06:02:07.605582Z, end-time: 2023-03-27T06:02:08.621855Z, duration: 1, exit-code: 0 python -mvirtualenv $READTHEDOCS_VIRTUALENV_PATH created virtual environment CPython3.9.15.final.0-64 in 697ms creator CPython3Posix(dest=/home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457, 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==21.2.3, setuptools==57.4.0, wheel==0.37.0 activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator [rtd-command-info] start-time: 2023-03-27T06:02:08.828171Z, end-time: 2023-03-27T06:02:19.736992Z, duration: 10, exit-code: 0 python -m pip install --upgrade --no-cache-dir pip setuptools<58.3.0 Requirement already satisfied: pip in /home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages (21.2.3) Collecting pip Downloading pip-23.0.1-py3-none-any.whl (2.1 MB) Requirement already satisfied: setuptools<58.3.0 in /home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages (57.4.0) Collecting setuptools<58.3.0 Downloading setuptools-58.2.0-py3-none-any.whl (946 kB) Installing collected packages: setuptools, pip Attempting uninstall: setuptools Found existing installation: setuptools 57.4.0 Uninstalling setuptools-57.4.0: Successfully uninstalled setuptools-57.4.0 Attempting uninstall: pip Found existing installation: pip 21.2.3 Uninstalling pip-21.2.3: Successfully uninstalled pip-21.2.3 Successfully installed pip-23.0.1 setuptools-58.2.0 [rtd-command-info] start-time: 2023-03-27T06:02:19.936672Z, end-time: 2023-03-27T06:02:29.468116Z, duration: 9, exit-code: 0 python -m pip install --upgrade --no-cache-dir pillow mock==1.0.1 alabaster>=0.7,<0.8,!=0.7.5 commonmark==0.9.1 recommonmark==0.5.0 sphinx<2 sphinx-rtd-theme<0.5 readthedocs-sphinx-ext<2.3 jinja2<3.1.0 Collecting pillow Downloading Pillow-9.4.0-cp39-cp39-manylinux_2_28_x86_64.whl (3.4 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.4/3.4 MB 73.7 MB/s eta 0:00:00 Collecting mock==1.0.1 Downloading mock-1.0.1.zip (861 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 861.9/861.9 kB 151.2 MB/s eta 0:00:00 Preparing metadata (setup.py): started Preparing metadata (setup.py): finished with status 'done' Collecting alabaster!=0.7.5,<0.8,>=0.7 Downloading alabaster-0.7.13-py3-none-any.whl (13 kB) Collecting commonmark==0.9.1 Downloading commonmark-0.9.1-py2.py3-none-any.whl (51 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 51.1/51.1 kB 120.3 MB/s eta 0:00:00 Collecting recommonmark==0.5.0 Downloading recommonmark-0.5.0-py2.py3-none-any.whl (9.8 kB) Collecting sphinx<2 Downloading Sphinx-1.8.6-py2.py3-none-any.whl (3.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1/3.1 MB 127.7 MB/s eta 0:00:00 Collecting sphinx-rtd-theme<0.5 Downloading sphinx_rtd_theme-0.4.3-py2.py3-none-any.whl (6.4 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.4/6.4 MB 136.3 MB/s eta 0:00:00 Collecting readthedocs-sphinx-ext<2.3 Downloading readthedocs_sphinx_ext-2.2.0-py2.py3-none-any.whl (11 kB) Collecting jinja2<3.1.0 Downloading Jinja2-3.0.3-py3-none-any.whl (133 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 133.6/133.6 kB 126.6 MB/s eta 0:00:00 Collecting docutils>=0.11 Downloading docutils-0.19-py3-none-any.whl (570 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 570.5/570.5 kB 142.2 MB/s eta 0:00:00 Collecting babel!=2.0,>=1.3 Downloading Babel-2.12.1-py3-none-any.whl (10.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.1/10.1 MB 142.7 MB/s eta 0:00:00 Collecting docutils>=0.11 Downloading docutils-0.17.1-py2.py3-none-any.whl (575 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 575.5/575.5 kB 148.3 MB/s eta 0:00:00 Collecting snowballstemmer>=1.1 Downloading snowballstemmer-2.2.0-py2.py3-none-any.whl (93 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 93.0/93.0 kB 206.8 MB/s eta 0:00:00 Collecting Pygments>=2.0 Downloading Pygments-2.14.0-py3-none-any.whl (1.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 181.4 MB/s eta 0:00:00 Collecting sphinxcontrib-websupport Downloading sphinxcontrib_websupport-1.2.4-py2.py3-none-any.whl (39 kB) Requirement already satisfied: setuptools in /home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages (from sphinx<2) (58.2.0) Collecting six>=1.5 Downloading six-1.16.0-py2.py3-none-any.whl (11 kB) Collecting packaging Downloading packaging-23.0-py3-none-any.whl (42 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 42.7/42.7 kB 104.8 MB/s eta 0:00:00 Collecting requests>=2.0.0 Downloading requests-2.28.2-py3-none-any.whl (62 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.8/62.8 kB 116.5 MB/s eta 0:00:00 Collecting imagesize Downloading imagesize-1.4.1-py2.py3-none-any.whl (8.8 kB) Collecting MarkupSafe>=2.0 Downloading MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25 kB) Collecting idna<4,>=2.5 Downloading idna-3.4-py3-none-any.whl (61 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.5/61.5 kB 111.7 MB/s eta 0:00:00 Collecting charset-normalizer<4,>=2 Downloading charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (199 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 199.2/199.2 kB 159.5 MB/s eta 0:00:00 Collecting certifi>=2017.4.17 Downloading certifi-2022.12.7-py3-none-any.whl (155 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 155.3/155.3 kB 155.4 MB/s eta 0:00:00 Collecting urllib3<1.27,>=1.21.1 Downloading urllib3-1.26.15-py2.py3-none-any.whl (140 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 140.9/140.9 kB 147.2 MB/s eta 0:00:00 Collecting sphinxcontrib-serializinghtml Downloading sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl (94 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 94.0/94.0 kB 146.6 MB/s eta 0:00:00 Building wheels for collected packages: mock Building wheel for mock (setup.py): started Building wheel for mock (setup.py): finished with status 'done' Created wheel for mock: filename=mock-1.0.1-py3-none-any.whl size=23772 sha256=1ee34aa1b445f12f199f2d14950af83a5acc6d1969d2adc2c94fa528c24f1e7e Stored in directory: /tmp/pip-ephem-wheel-cache-i2bqv861/wheels/44/dc/c7/e89296d3612588db0aa6545ee3305c23b7a48b3a9922916e1f Successfully built mock Installing collected packages: snowballstemmer, mock, commonmark, urllib3, sphinxcontrib-serializinghtml, six, Pygments, pillow, packaging, MarkupSafe, imagesize, idna, docutils, charset-normalizer, certifi, babel, alabaster, sphinxcontrib-websupport, requests, jinja2, sphinx, readthedocs-sphinx-ext, sphinx-rtd-theme, recommonmark Successfully installed MarkupSafe-2.1.2 Pygments-2.14.0 alabaster-0.7.13 babel-2.12.1 certifi-2022.12.7 charset-normalizer-3.1.0 commonmark-0.9.1 docutils-0.17.1 idna-3.4 imagesize-1.4.1 jinja2-3.0.3 mock-1.0.1 packaging-23.0 pillow-9.4.0 readthedocs-sphinx-ext-2.2.0 recommonmark-0.5.0 requests-2.28.2 six-1.16.0 snowballstemmer-2.2.0 sphinx-1.8.6 sphinx-rtd-theme-0.4.3 sphinxcontrib-serializinghtml-1.1.5 sphinxcontrib-websupport-1.2.4 urllib3-1.26.15 [rtd-command-info] start-time: 2023-03-27T06:02:29.706862Z, end-time: 2023-03-27T06:03:59.975311Z, duration: 90, exit-code: 0 python -m pip install --upgrade --upgrade-strategy eager --no-cache-dir .[doc,leiden] Processing /home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/checkouts/2457 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' Collecting statsmodels>=0.10.0rc2 Downloading statsmodels-0.13.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (9.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.9/9.9 MB 123.7 MB/s eta 0:00:00 Collecting joblib Downloading joblib-1.2.0-py3-none-any.whl (297 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 298.0/298.0 kB 245.3 MB/s eta 0:00:00 Collecting pandas>=1.0 Downloading pandas-1.5.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.2 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.2/12.2 MB 206.6 MB/s eta 0:00:00 Collecting numba>=0.41.0 Downloading numba-0.56.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (3.5 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.5/3.5 MB 136.4 MB/s eta 0:00:00 Collecting patsy Downloading patsy-0.5.3-py2.py3-none-any.whl (233 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 233.8/233.8 kB 241.9 MB/s eta 0:00:00 Collecting networkx>=2.3 Downloading networkx-3.0-py3-none-any.whl (2.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 221.6 MB/s eta 0:00:00 Collecting scipy>=1.4 Downloading scipy-1.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (34.5 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 34.5/34.5 MB 198.4 MB/s eta 0:00:00 Collecting h5py>=3 Downloading h5py-3.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.7 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.7/4.7 MB 172.5 MB/s eta 0:00:00 Collecting umap-learn>=0.3.10 Downloading umap-learn-0.5.3.tar.gz (88 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 88.2/88.2 kB 216.9 MB/s eta 0:00:00 Preparing metadata (setup.py): started Preparing metadata (setup.py): finished with status 'done' Collecting numpy>=1.17.0 Downloading numpy-1.24.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (17.3 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 17.3/17.3 MB 212.2 MB/s eta 0:00:00 Collecting seaborn Downloading seaborn-0.12.2-py3-none-any.whl (293 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 293.3/293.3 kB 235.1 MB/s eta 0:00:00 Collecting natsort Downloading natsort-8.3.1-py3-none-any.whl (38 kB) Collecting matplotlib>=3.4 Downloading matplotlib-3.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.6 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.6/11.6 MB 184.2 MB/s eta 0:00:00 Collecting anndata>=0.7.4 Downloading anndata-0.8.0-py3-none-any.whl (96 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 96.1/96.1 kB 192.4 MB/s eta 0:00:00 Collecting session-info Downloading session_info-1.0.0.tar.gz (24 kB) Preparing metadata (setup.py): started Preparing metadata (setup.py): finished with status 'done' Requirement already satisfied: packaging in /home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages (from scanpy==1.10.0.dev54+g0cf93d92) (23.0) Collecting scikit-learn>=0.22 Downloading scikit_learn-1.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (9.6 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.6/9.6 MB 213.0 MB/s eta 0:00:00 Collecting tqdm Downloading tqdm-4.65.0-py3-none-any.whl (77 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 77.1/77.1 kB 214.2 MB/s eta 0:00:00 Collecting sphinxext-opengraph Downloading sphinxext_opengraph-0.8.1-py3-none-any.whl (1.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.0/1.0 MB 255.4 MB/s eta 0:00:00 Collecting ipython>=7.20 Downloading ipython-8.11.0-py3-none-any.whl (793 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 793.3/793.3 kB 249.1 MB/s eta 0:00:00 Collecting sphinx<5,>=4.4 Downloading Sphinx-4.5.0-py3-none-any.whl (3.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1/3.1 MB 224.0 MB/s eta 0:00:00 Collecting myst-nb Downloading myst_nb-0.17.1-py3-none-any.whl (78 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 78.6/78.6 kB 205.1 MB/s eta 0:00:00 Collecting myst-parser Downloading myst_parser-1.0.0-py3-none-any.whl (77 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 77.3/77.3 kB 208.3 MB/s eta 0:00:00 Collecting sphinx-copybutton Downloading sphinx_copybutton-0.5.1-py3-none-any.whl (13 kB) Collecting sphinx-book-theme Downloading sphinx_book_theme-1.0.0-py3-none-any.whl (400 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 400.4/400.4 kB 253.1 MB/s eta 0:00:00 Collecting scanpydoc[typehints]>=0.7.7 Downloading scanpydoc-0.7.8-py3-none-any.whl (29 kB) Collecting sphinx-design Downloading sphinx_design-0.3.0-py3-none-any.whl (2.2 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2/2.2 MB 219.8 MB/s eta 0:00:00 Collecting nbsphinx Downloading nbsphinx-0.9.1-py3-none-any.whl (30 kB) Collecting python-igraph Downloading python-igraph-0.10.4.tar.gz (9.5 kB) Preparing metadata (setup.py): started Preparing metadata (setup.py): finished with status 'done' Collecting leidenalg Downloading leidenalg-0.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3/1.3 MB 262.3 MB/s eta 0:00:00 Collecting traitlets>=5 Downloading traitlets-5.9.0-py3-none-any.whl (117 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 117.4/117.4 kB 210.2 MB/s eta 0:00:00 Collecting prompt-toolkit!=3.0.37,<3.1.0,>=3.0.30 Downloading prompt_toolkit-3.0.38-py3-none-any.whl (385 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 385.8/385.8 kB 251.8 MB/s eta 0:00:00 Collecting pexpect>4.3 Downloading pexpect-4.8.0-py2.py3-none-any.whl (59 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 59.0/59.0 kB 208.5 MB/s eta 0:00:00 Collecting pickleshare Downloading pickleshare-0.7.5-py2.py3-none-any.whl (6.9 kB) Collecting decorator Downloading decorator-5.1.1-py3-none-any.whl (9.1 kB) Collecting backcall Downloading backcall-0.2.0-py2.py3-none-any.whl (11 kB) Collecting jedi>=0.16 Downloading jedi-0.18.2-py2.py3-none-any.whl (1.6 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 257.9 MB/s eta 0:00:00 Collecting matplotlib-inline Downloading matplotlib_inline-0.1.6-py3-none-any.whl (9.4 kB) Requirement already satisfied: pygments>=2.4.0 in /home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages (from ipython>=7.20->scanpy==1.10.0.dev54+g0cf93d92) (2.14.0) Collecting stack-data Downloading stack_data-0.6.2-py3-none-any.whl (24 kB) Collecting kiwisolver>=1.0.1 Downloading kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.6 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 253.1 MB/s eta 0:00:00 Collecting python-dateutil>=2.7 Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 247.7/247.7 kB 245.9 MB/s eta 0:00:00 Collecting contourpy>=1.0.1 Downloading contourpy-1.0.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (299 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 299.7/299.7 kB 245.0 MB/s eta 0:00:00 Requirement already satisfied: pillow>=6.2.0 in /home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages (from matplotlib>=3.4->scanpy==1.10.0.dev54+g0cf93d92) (9.4.0) Collecting fonttools>=4.22.0 Downloading fonttools-4.39.2-py3-none-any.whl (1.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.0/1.0 MB 257.6 MB/s eta 0:00:00 Collecting cycler>=0.10 Downloading cycler-0.11.0-py3-none-any.whl (6.4 kB) Collecting pyparsing>=2.3.1 Downloading pyparsing-3.0.9-py3-none-any.whl (98 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 98.3/98.3 kB 221.4 MB/s eta 0:00:00 Collecting importlib-resources>=3.2.0 Downloading importlib_resources-5.12.0-py3-none-any.whl (36 kB) Requirement already satisfied: setuptools in /home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages (from numba>=0.41.0->scanpy==1.10.0.dev54+g0cf93d92) (58.2.0) Collecting setuptools Downloading setuptools-67.6.0-py3-none-any.whl (1.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 262.0 MB/s eta 0:00:00 Collecting llvmlite<0.40,>=0.39.0dev0 Downloading llvmlite-0.39.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (34.6 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 34.6/34.6 MB 196.7 MB/s eta 0:00:00 Collecting numpy>=1.17.0 Downloading numpy-1.23.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (17.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 17.1/17.1 MB 199.8 MB/s eta 0:00:00 Collecting pytz>=2020.1 Downloading pytz-2023.2-py2.py3-none-any.whl (502 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 502.1/502.1 kB 257.5 MB/s eta 0:00:00 Collecting get_version Downloading get_version-3.5.4-py3-none-any.whl (18 kB) Collecting sphinx-autodoc-typehints>=1.15.2 Downloading sphinx_autodoc_typehints-1.22-py3-none-any.whl (17 kB) Collecting threadpoolctl>=2.0.0 Downloading threadpoolctl-3.1.0-py3-none-any.whl (14 kB) Requirement already satisfied: snowballstemmer>=1.1 in /home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages (from sphinx<5,>=4.4->scanpy==1.10.0.dev54+g0cf93d92) (2.2.0) Requirement already satisfied: Jinja2>=2.3 in /home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages (from sphinx<5,>=4.4->scanpy==1.10.0.dev54+g0cf93d92) (3.0.3) Collecting Jinja2>=2.3 Downloading Jinja2-3.1.2-py3-none-any.whl (133 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 133.1/133.1 kB 231.6 MB/s eta 0:00:00 Requirement already satisfied: sphinxcontrib-serializinghtml>=1.1.5 in /home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages (from sphinx<5,>=4.4->scanpy==1.10.0.dev54+g0cf93d92) (1.1.5) Collecting sphinxcontrib-htmlhelp>=2.0.0 Downloading sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl (99 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 99.8/99.8 kB 224.3 MB/s eta 0:00:00 Requirement already satisfied: requests>=2.5.0 in /home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages (from sphinx<5,>=4.4->scanpy==1.10.0.dev54+g0cf93d92) (2.28.2) Requirement already satisfied: babel>=1.3 in /home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages (from sphinx<5,>=4.4->scanpy==1.10.0.dev54+g0cf93d92) (2.12.1) Collecting sphinxcontrib-applehelp Downloading sphinxcontrib_applehelp-1.0.4-py3-none-any.whl (120 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 120.6/120.6 kB 214.1 MB/s eta 0:00:00 Collecting sphinxcontrib-devhelp Downloading sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl (84 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 84.7/84.7 kB 196.9 MB/s eta 0:00:00 Collecting sphinxcontrib-qthelp Downloading sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl (90 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.6/90.6 kB 223.0 MB/s eta 0:00:00 Requirement already satisfied: imagesize in /home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages (from sphinx<5,>=4.4->scanpy==1.10.0.dev54+g0cf93d92) (1.4.1) Requirement already satisfied: alabaster<0.8,>=0.7 in /home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages (from sphinx<5,>=4.4->scanpy==1.10.0.dev54+g0cf93d92) (0.7.13) Collecting sphinxcontrib-jsmath Downloading sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl (5.1 kB) Collecting importlib-metadata>=4.4 Downloading importlib_metadata-6.1.0-py3-none-any.whl (21 kB) Requirement already satisfied: docutils<0.18,>=0.14 in /home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages (from sphinx<5,>=4.4->scanpy==1.10.0.dev54+g0cf93d92) (0.17.1) Requirement already satisfied: six in /home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages (from patsy->scanpy==1.10.0.dev54+g0cf93d92) (1.16.0) Collecting pynndescent>=0.5 Downloading pynndescent-0.5.8.tar.gz (1.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 257.5 MB/s eta 0:00:00 Preparing metadata (setup.py): started Preparing metadata (setup.py): finished with status 'done' Collecting igraph<0.11,>=0.10.0 Downloading igraph-0.10.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 208.1 MB/s eta 0:00:00 Collecting myst-parser Downloading myst_parser-0.18.1-py3-none-any.whl (58 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 58.2/58.2 kB 184.0 MB/s eta 0:00:00 Collecting jupyter-cache~=0.5.0 Downloading jupyter_cache-0.5.0-py3-none-any.whl (34 kB) Collecting pyyaml Downloading PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (661 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 661.8/661.8 kB 254.3 MB/s eta 0:00:00 Collecting typing-extensions Downloading typing_extensions-4.5.0-py3-none-any.whl (27 kB) Collecting nbformat~=5.0 Downloading nbformat-5.8.0-py3-none-any.whl (77 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 77.4/77.4 kB 212.9 MB/s eta 0:00:00 Collecting ipykernel Downloading ipykernel-6.22.0-py3-none-any.whl (149 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 150.0/150.0 kB 234.3 MB/s eta 0:00:00 Collecting nbclient Downloading nbclient-0.7.2-py3-none-any.whl (71 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 72.0/72.0 kB 198.3 MB/s eta 0:00:00 Collecting mdit-py-plugins~=0.3.1 Downloading mdit_py_plugins-0.3.5-py3-none-any.whl (52 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.1/52.1 kB 191.3 MB/s eta 0:00:00 Collecting markdown-it-py<3.0.0,>=1.0.0 Downloading markdown_it_py-2.2.0-py3-none-any.whl (84 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 84.5/84.5 kB 215.6 MB/s eta 0:00:00 Collecting nbconvert!=5.4 Downloading nbconvert-7.2.10-py3-none-any.whl (275 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 275.2/275.2 kB 251.3 MB/s eta 0:00:00 Collecting texttable>=1.6.2 Downloading texttable-1.6.7-py2.py3-none-any.whl (10 kB) Collecting stdlib_list Downloading stdlib_list-0.8.0-py3-none-any.whl (63 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 63.5/63.5 kB 205.6 MB/s eta 0:00:00 Collecting pydata-sphinx-theme>=0.13.0 Downloading pydata_sphinx_theme-0.13.1-py3-none-any.whl (1.6 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 238.9 MB/s eta 0:00:00 Collecting zipp>=0.5 Downloading zipp-3.15.0-py3-none-any.whl (6.8 kB) Collecting parso<0.9.0,>=0.8.0 Downloading parso-0.8.3-py2.py3-none-any.whl (100 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100.8/100.8 kB 226.1 MB/s eta 0:00:00 Requirement already satisfied: MarkupSafe>=2.0 in /home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages (from Jinja2>=2.3->sphinx<5,>=4.4->scanpy==1.10.0.dev54+g0cf93d92) (2.1.2) Collecting nbclient Downloading nbclient-0.5.13-py3-none-any.whl (70 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 70.6/70.6 kB 210.7 MB/s eta 0:00:00 Collecting sqlalchemy<1.5,>=1.3.12 Downloading SQLAlchemy-1.4.47-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 257.2 MB/s eta 0:00:00 Collecting attrs Downloading attrs-22.2.0-py3-none-any.whl (60 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 60.0/60.0 kB 206.7 MB/s eta 0:00:00 Collecting tabulate Downloading tabulate-0.9.0-py3-none-any.whl (35 kB) Collecting click Downloading click-8.1.3-py3-none-any.whl (96 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 96.6/96.6 kB 225.3 MB/s eta 0:00:00 Collecting mdurl~=0.1 Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB) Collecting jupyter-client>=6.1.5 Downloading jupyter_client-8.1.0-py3-none-any.whl (102 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 102.9/102.9 kB 221.6 MB/s eta 0:00:00 Collecting nest-asyncio Downloading nest_asyncio-1.5.6-py3-none-any.whl (5.2 kB) Collecting defusedxml Downloading defusedxml-0.7.1-py2.py3-none-any.whl (25 kB) Collecting jupyter-core>=4.7 Downloading jupyter_core-5.3.0-py3-none-any.whl (93 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 93.2/93.2 kB 221.6 MB/s eta 0:00:00 Collecting tinycss2 Downloading tinycss2-1.2.1-py3-none-any.whl (21 kB) Collecting pandocfilters>=1.4.1 Downloading pandocfilters-1.5.0-py2.py3-none-any.whl (8.7 kB) Collecting beautifulsoup4 Downloading beautifulsoup4-4.12.0-py3-none-any.whl (132 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 132.2/132.2 kB 223.1 MB/s eta 0:00:00 Collecting mistune<3,>=2.0.3 Downloading mistune-2.0.5-py2.py3-none-any.whl (24 kB) Collecting bleach Downloading bleach-6.0.0-py3-none-any.whl (162 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 162.5/162.5 kB 232.2 MB/s eta 0:00:00 Collecting jupyterlab-pygments Downloading jupyterlab_pygments-0.2.2-py2.py3-none-any.whl (21 kB) Collecting fastjsonschema Downloading fastjsonschema-2.16.3-py3-none-any.whl (23 kB) Collecting jsonschema>=2.6 Downloading jsonschema-4.17.3-py3-none-any.whl (90 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.4/90.4 kB 224.8 MB/s eta 0:00:00 Collecting ptyprocess>=0.5 Downloading ptyprocess-0.7.0-py2.py3-none-any.whl (13 kB) Collecting wcwidth Downloading wcwidth-0.2.6-py2.py3-none-any.whl (29 kB) Collecting accessible-pygments Downloading accessible_pygments-0.0.4-py2.py3-none-any.whl (29 kB) Requirement already satisfied: urllib3<1.27,>=1.21.1 in /home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages (from requests>=2.5.0->sphinx<5,>=4.4->scanpy==1.10.0.dev54+g0cf93d92) (1.26.15) Requirement already satisfied: idna<4,>=2.5 in /home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages (from requests>=2.5.0->sphinx<5,>=4.4->scanpy==1.10.0.dev54+g0cf93d92) (3.4) Requirement already satisfied: charset-normalizer<4,>=2 in /home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages (from requests>=2.5.0->sphinx<5,>=4.4->scanpy==1.10.0.dev54+g0cf93d92) (3.1.0) Requirement already satisfied: certifi>=2017.4.17 in /home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages (from requests>=2.5.0->sphinx<5,>=4.4->scanpy==1.10.0.dev54+g0cf93d92) (2022.12.7) Collecting sphinx-autodoc-typehints>=1.15.2 Downloading sphinx_autodoc_typehints-1.21.8-py3-none-any.whl (17 kB) Downloading sphinx_autodoc_typehints-1.21.7-py3-none-any.whl (16 kB) Downloading sphinx_autodoc_typehints-1.21.6-py3-none-any.whl (16 kB) Downloading sphinx_autodoc_typehints-1.21.5-py3-none-any.whl (16 kB) Downloading sphinx_autodoc_typehints-1.21.4-py3-none-any.whl (16 kB) Downloading sphinx_autodoc_typehints-1.21.3-py3-none-any.whl (15 kB) Downloading sphinx_autodoc_typehints-1.21.2-py3-none-any.whl (13 kB) Downloading sphinx_autodoc_typehints-1.21.1-py3-none-any.whl (13 kB) Downloading sphinx_autodoc_typehints-1.21.0-py3-none-any.whl (13 kB) Downloading sphinx_autodoc_typehints-1.20.2-py3-none-any.whl (12 kB) Downloading sphinx_autodoc_typehints-1.20.1-py3-none-any.whl (12 kB) Downloading sphinx_autodoc_typehints-1.20.0-py3-none-any.whl (12 kB) Downloading sphinx_autodoc_typehints-1.19.5-py3-none-any.whl (12 kB) Downloading sphinx_autodoc_typehints-1.19.4-py3-none-any.whl (12 kB) Downloading sphinx_autodoc_typehints-1.19.3-py3-none-any.whl (12 kB) Downloading sphinx_autodoc_typehints-1.19.2-py3-none-any.whl (12 kB) Downloading sphinx_autodoc_typehints-1.19.1-py3-none-any.whl (12 kB) Collecting dunamai Downloading dunamai-1.16.0-py3-none-any.whl (23 kB) Collecting comm>=0.1.1 Downloading comm-0.1.3-py3-none-any.whl (6.6 kB) Collecting tornado>=6.1 Downloading tornado-6.2-cp37-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (423 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 424.0/424.0 kB 244.9 MB/s eta 0:00:00 Collecting psutil Downloading psutil-5.9.4-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (280 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 280.2/280.2 kB 242.6 MB/s eta 0:00:00 Collecting debugpy>=1.6.5 Downloading debugpy-1.6.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1/3.1 MB 209.5 MB/s eta 0:00:00 Collecting pyzmq>=20 Downloading pyzmq-25.0.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 258.7 MB/s eta 0:00:00 Collecting asttokens>=2.1.0 Downloading asttokens-2.2.1-py2.py3-none-any.whl (26 kB) Collecting pure-eval Downloading pure_eval-0.2.2-py3-none-any.whl (11 kB) Collecting executing>=1.2.0 Downloading executing-1.2.0-py2.py3-none-any.whl (24 kB) Collecting pyrsistent!=0.17.0,!=0.17.1,!=0.17.2,>=0.14.0 Downloading pyrsistent-0.19.3-py3-none-any.whl (57 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 57.5/57.5 kB 189.9 MB/s eta 0:00:00 Collecting platformdirs>=2.5 Downloading platformdirs-3.2.0-py3-none-any.whl (14 kB) Collecting greenlet!=0.4.17 Downloading greenlet-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (610 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 610.9/610.9 kB 255.8 MB/s eta 0:00:00 Collecting soupsieve>1.2 Downloading soupsieve-2.4-py3-none-any.whl (37 kB) Collecting webencodings Downloading webencodings-0.5.1-py2.py3-none-any.whl (11 kB) Building wheels for collected packages: umap-learn, python-igraph, scanpy, session-info, pynndescent Building wheel for umap-learn (setup.py): started Building wheel for umap-learn (setup.py): finished with status 'done' Created wheel for umap-learn: filename=umap_learn-0.5.3-py3-none-any.whl size=82830 sha256=cab91c461798acb331a2cb56200b8c186bd5619c798db087fd351f7852501a18 Stored in directory: /tmp/pip-ephem-wheel-cache-wexvrvtk/wheels/f4/3e/1c/596d0a463d17475af648688443fa4846fef624d1390339e7e9 Building wheel for python-igraph (setup.py): started Building wheel for python-igraph (setup.py): finished with status 'done' Created wheel for python-igraph: filename=python_igraph-0.10.4-py3-none-any.whl size=9076 sha256=bbf3f96fd165e37bced7f1c2f1b2e5b545eb2c56d77b805f68b0738480096295 Stored in directory: /tmp/pip-ephem-wheel-cache-wexvrvtk/wheels/dc/07/ac/bff79052fd6222d1239b228cd24a47222f227c2350f9c4df01 Building wheel for scanpy (pyproject.toml): started Building wheel for scanpy (pyproject.toml): finished with status 'done' Created wheel for scanpy: filename=scanpy-1.10.0.dev54+g0cf93d92-py3-none-any.whl size=11485862 sha256=7655b39c28b6a6a43829f60706ccb4400adfd8da0d19141e52b749884287acf7 Stored in directory: /tmp/pip-ephem-wheel-cache-wexvrvtk/wheels/6f/45/00/0db1e24f1cf1ff60077674e0ff21c81f2a96174d5729697553 Building wheel for session-info (setup.py): started Building wheel for session-info (setup.py): finished with status 'done' Created wheel for session-info: filename=session_info-1.0.0-py3-none-any.whl size=8045 sha256=b1ca61c4ed84be8054e11f239602a6337210d26adf6be4655cc99008a1e1146e Stored in directory: /tmp/pip-ephem-wheel-cache-wexvrvtk/wheels/d4/fc/2e/00ca60bac7954b84907efd41baa9b4853500eaeec4228410c6 Building wheel for pynndescent (setup.py): started Building wheel for pynndescent (setup.py): finished with status 'done' Created wheel for pynndescent: filename=pynndescent-0.5.8-py3-none-any.whl size=55511 sha256=177ea35cfd1cff351b918d890245aca7083c649fcb5110dc37ebb8197ac3f578 Stored in directory: /tmp/pip-ephem-wheel-cache-wexvrvtk/wheels/b9/89/cc/59ab91ef5b21dc2ab3635528d7d227f49dfc9169905dcb959d Successfully built umap-learn python-igraph scanpy session-info pynndescent Installing collected packages: webencodings, wcwidth, texttable, stdlib_list, pytz, pure-eval, ptyprocess, pickleshare, mistune, fastjsonschema, executing, backcall, zipp, typing-extensions, traitlets, tqdm, tornado, tinycss2, threadpoolctl, tabulate, sphinxcontrib-qthelp, sphinxcontrib-jsmath, sphinxcontrib-htmlhelp, sphinxcontrib-devhelp, sphinxcontrib-applehelp, soupsieve, setuptools, session-info, pyzmq, pyyaml, python-dateutil, pyrsistent, pyparsing, psutil, prompt-toolkit, platformdirs, pexpect, parso, pandocfilters, numpy, networkx, nest-asyncio, natsort, mdurl, llvmlite, kiwisolver, jupyterlab-pygments, joblib, Jinja2, igraph, greenlet, fonttools, dunamai, defusedxml, decorator, debugpy, cycler, click, bleach, attrs, asttokens, accessible-pygments, stack-data, sqlalchemy, scipy, python-igraph, patsy, pandas, numba, matplotlib-inline, markdown-it-py, leidenalg, jupyter-core, jsonschema, jedi, importlib-resources, importlib-metadata, h5py, get_version, contourpy, comm, beautifulsoup4, statsmodels, sphinx, scikit-learn, nbformat, mdit-py-plugins, matplotlib, jupyter-client, ipython, anndata, sphinxext-opengraph, sphinx-design, sphinx-copybutton, sphinx-autodoc-typehints, seaborn, scanpydoc, pynndescent, pydata-sphinx-theme, nbclient, myst-parser, ipykernel, umap-learn, sphinx-book-theme, nbconvert, jupyter-cache, scanpy, nbsphinx, myst-nb Attempting uninstall: setuptools Found existing installation: setuptools 58.2.0 Uninstalling setuptools-58.2.0: Successfully uninstalled setuptools-58.2.0 Attempting uninstall: Jinja2 Found existing installation: Jinja2 3.0.3 Uninstalling Jinja2-3.0.3: Successfully uninstalled Jinja2-3.0.3 Attempting uninstall: sphinx Found existing installation: Sphinx 1.8.6 Uninstalling Sphinx-1.8.6: Successfully uninstalled Sphinx-1.8.6 Successfully installed Jinja2-3.1.2 accessible-pygments-0.0.4 anndata-0.8.0 asttokens-2.2.1 attrs-22.2.0 backcall-0.2.0 beautifulsoup4-4.12.0 bleach-6.0.0 click-8.1.3 comm-0.1.3 contourpy-1.0.7 cycler-0.11.0 debugpy-1.6.6 decorator-5.1.1 defusedxml-0.7.1 dunamai-1.16.0 executing-1.2.0 fastjsonschema-2.16.3 fonttools-4.39.2 get_version-3.5.4 greenlet-2.0.2 h5py-3.8.0 igraph-0.10.4 importlib-metadata-6.1.0 importlib-resources-5.12.0 ipykernel-6.22.0 ipython-8.11.0 jedi-0.18.2 joblib-1.2.0 jsonschema-4.17.3 jupyter-cache-0.5.0 jupyter-client-8.1.0 jupyter-core-5.3.0 jupyterlab-pygments-0.2.2 kiwisolver-1.4.4 leidenalg-0.9.1 llvmlite-0.39.1 markdown-it-py-2.2.0 matplotlib-3.7.1 matplotlib-inline-0.1.6 mdit-py-plugins-0.3.5 mdurl-0.1.2 mistune-2.0.5 myst-nb-0.17.1 myst-parser-0.18.1 natsort-8.3.1 nbclient-0.5.13 nbconvert-7.2.10 nbformat-5.8.0 nbsphinx-0.9.1 nest-asyncio-1.5.6 networkx-3.0 numba-0.56.4 numpy-1.23.5 pandas-1.5.3 pandocfilters-1.5.0 parso-0.8.3 patsy-0.5.3 pexpect-4.8.0 pickleshare-0.7.5 platformdirs-3.2.0 prompt-toolkit-3.0.38 psutil-5.9.4 ptyprocess-0.7.0 pure-eval-0.2.2 pydata-sphinx-theme-0.13.1 pynndescent-0.5.8 pyparsing-3.0.9 pyrsistent-0.19.3 python-dateutil-2.8.2 python-igraph-0.10.4 pytz-2023.2 pyyaml-6.0 pyzmq-25.0.2 scanpy-1.10.0.dev54+g0cf93d92 scanpydoc-0.7.8 scikit-learn-1.2.2 scipy-1.10.1 seaborn-0.12.2 session-info-1.0.0 setuptools-67.6.0 soupsieve-2.4 sphinx-4.5.0 sphinx-autodoc-typehints-1.19.1 sphinx-book-theme-1.0.0 sphinx-copybutton-0.5.1 sphinx-design-0.3.0 sphinxcontrib-applehelp-1.0.4 sphinxcontrib-devhelp-1.0.2 sphinxcontrib-htmlhelp-2.0.1 sphinxcontrib-jsmath-1.0.1 sphinxcontrib-qthelp-1.0.3 sphinxext-opengraph-0.8.1 sqlalchemy-1.4.47 stack-data-0.6.2 statsmodels-0.13.5 stdlib_list-0.8.0 tabulate-0.9.0 texttable-1.6.7 threadpoolctl-3.1.0 tinycss2-1.2.1 tornado-6.2 tqdm-4.65.0 traitlets-5.9.0 typing-extensions-4.5.0 umap-learn-0.5.3 wcwidth-0.2.6 webencodings-0.5.1 zipp-3.15.0 [rtd-command-info] start-time: 2023-03-27T06:04:01.490961Z, end-time: 2023-03-27T06:04:01.574523Z, duration: 0, exit-code: 0 cat docs/conf.py import os import sys import importlib.util import inspect import re import subprocess from pathlib import Path from datetime import datetime from typing import Any import matplotlib # noqa from packaging.version import parse as parse_version # Don’t use tkinter agg when importing scanpy → … → matplotlib matplotlib.use('agg') HERE = Path(__file__).parent sys.path[:0] = [str(HERE.parent), str(HERE / 'extensions')] import scanpy # noqa on_rtd = os.environ.get('READTHEDOCS') == 'True' # -- General configuration ------------------------------------------------ nitpicky = True # Warn about broken links. This is here for a reason: Do not change. needs_sphinx = '4.0' # Nicer param docs suppress_warnings = [ 'ref.citation', 'myst.header', # https://github.com/executablebooks/MyST-Parser/issues/262 ] # General information project = 'Scanpy' author = 'Scanpy development team' repository_url = "https://github.com/scverse/scanpy" copyright = f'{datetime.now():%Y}, the Scanpy development team.' version = scanpy.__version__.replace('.dirty', '') # Bumping the version updates all docs, so don't do that if parse_version(version).is_devrelease: parsed = parse_version(version) version = f"{parsed.major}.{parsed.minor}.{parsed.micro}.dev" release = version # default settings templates_path = ['_templates'] master_doc = 'index' default_role = 'literal' exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store', '**.ipynb_checkpoints'] extensions = [ 'myst_nb', 'sphinx_copybutton', 'sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'sphinx.ext.doctest', 'sphinx.ext.coverage', 'sphinx.ext.mathjax', 'sphinx.ext.napoleon', 'sphinx.ext.autosummary', 'sphinx.ext.linkcode', 'sphinx.ext.extlinks', 'matplotlib.sphinxext.plot_directive', 'sphinx_autodoc_typehints', # needs to be after napoleon 'scanpydoc.autosummary_generate_imported', "sphinx_design", "sphinxext.opengraph", *[p.stem for p in (HERE / 'extensions').glob('*.py')], ] # Generate the API documentation when building autosummary_generate = True autodoc_member_order = 'bysource' # autodoc_default_flags = ['members'] napoleon_google_docstring = False napoleon_numpy_docstring = True napoleon_include_init_with_doc = False napoleon_use_rtype = True # having a separate entry generally helps readability napoleon_use_param = True napoleon_custom_sections = [('Params', 'Parameters')] todo_include_todos = False api_dir = HERE / 'api' # function_images myst_enable_extensions = [ "amsmath", "colon_fence", "deflist", "dollarmath", "html_image", "html_admonition", ] myst_url_schemes = ("http", "https", "mailto") nb_output_stderr = "remove" nb_execution_mode = "off" nb_merge_streams = True ogp_site_url = "https://scanpy.readthedocs.io/en/stable/" ogp_image = "https://scanpy.readthedocs.io/en/stable/_static/Scanpy_Logo_BrightFG.svg" typehints_defaults = 'braces' scanpy_tutorials_url = 'https://scanpy-tutorials.readthedocs.io/en/latest/' pygments_style = "default" pygments_dark_style = "native" intersphinx_mapping = dict( anndata=('https://anndata.readthedocs.io/en/stable/', None), bbknn=('https://bbknn.readthedocs.io/en/latest/', None), cycler=('https://matplotlib.org/cycler/', None), h5py=('https://docs.h5py.org/en/stable/', None), ipython=('https://ipython.readthedocs.io/en/stable/', None), leidenalg=('https://leidenalg.readthedocs.io/en/latest/', None), louvain=('https://louvain-igraph.readthedocs.io/en/latest/', None), matplotlib=('https://matplotlib.org/stable/', None), networkx=('https://networkx.org/documentation/stable/', None), numpy=('https://numpy.org/doc/stable/', None), pandas=('https://pandas.pydata.org/pandas-docs/stable/', None), pytest=('https://docs.pytest.org/en/latest/', None), python=('https://docs.python.org/3', None), scipy=('https://docs.scipy.org/doc/scipy/', None), seaborn=('https://seaborn.pydata.org/', None), sklearn=('https://scikit-learn.org/stable/', None), scanpy_tutorials=(scanpy_tutorials_url, None), ) # -- Options for HTML output ---------------------------------------------- html_theme = "sphinx_book_theme" html_theme_options = { "repository_url": repository_url, "use_repository_button": True, "logo_only": True, "show_toc_level": 4, # show all levels in the sidebar } html_static_path = ['_static'] html_css_files = ["css/override.css"] html_show_sphinx = False html_logo = '_static/img/Scanpy_Logo_BrightFG.svg' html_title = "scanpy" def setup(app): """App setup hook.""" # TODO: fix all warnings in a future PR # Many come from the tutorials, like the workshop directory # which is not included in the docs # app.warningiserror = on_rtd app.add_config_value( "recommonmark_config", { "auto_toc_tree_section": "Contents", "enable_auto_toc_tree": True, "enable_math": True, "enable_inline_math": False, "enable_eval_rst": True, }, True, ) # -- Options for other output formats ------------------------------------------ htmlhelp_basename = f'{project}doc' doc_title = f'{project} Documentation' latex_documents = [(master_doc, f'{project}.tex', doc_title, author, 'manual')] man_pages = [(master_doc, project, doc_title, [author], 1)] texinfo_documents = [ ( master_doc, project, doc_title, author, project, 'One line description of project.', 'Miscellaneous', ) ] # -- Suppress link warnings ---------------------------------------------------- qualname_overrides = { "sklearn.neighbors._dist_metrics.DistanceMetric": "sklearn.neighbors.DistanceMetric", # If the docs are built with an old version of numpy, this will make it work: "numpy.random.RandomState": "numpy.random.mtrand.RandomState", "scanpy.plotting._matrixplot.MatrixPlot": "scanpy.pl.MatrixPlot", "scanpy.plotting._dotplot.DotPlot": "scanpy.pl.DotPlot", "scanpy.plotting._stacked_violin.StackedViolin": "scanpy.pl.StackedViolin", "pandas.core.series.Series": "pandas.Series", } nitpick_ignore = [ # Will probably be documented ('py:class', 'scanpy._settings.Verbosity'), # Currently undocumented: https://github.com/mwaskom/seaborn/issues/1810 ('py:class', 'seaborn.ClusterGrid'), # Won’t be documented ('py:class', 'scanpy.plotting._utils._AxesSubplot'), ('py:class', 'scanpy._utils.Empty'), ('py:class', 'numpy.random.mtrand.RandomState'), # Will work once scipy 1.8 is released ('py:class', 'scipy.sparse.base.spmatrix'), ('py:class', 'scipy.sparse.csr.csr_matrix'), ] # Options for plot examples plot_include_source = True plot_formats = [("png", 90)] plot_html_show_formats = False plot_html_show_source_link = False plot_working_directory = HERE.parent # Project root # Linkcode config def git(*args): return subprocess.check_output(["git", *args]).strip().decode() # https://github.com/DisnakeDev/disnake/blob/7853da70b13fcd2978c39c0b7efa59b34d298186/docs/conf.py#L192 # Current git reference. Uses branch/tag name if found, otherwise uses commit hash git_ref = None try: git_ref = git("name-rev", "--name-only", "--no-undefined", "HEAD") git_ref = re.sub(r"^(remotes/[^/]+|tags)/", "", git_ref) except Exception: pass # (if no name found or relative ref, use commit hash instead) if not git_ref or re.search(r"[\^~]", git_ref): try: git_ref = git("rev-parse", "HEAD") except Exception: git_ref = "master" # https://github.com/DisnakeDev/disnake/blob/7853da70b13fcd2978c39c0b7efa59b34d298186/docs/conf.py#L192 _module_path = os.path.dirname(importlib.util.find_spec("scanpy").origin) # type: ignore def linkcode_resolve(domain, info): if domain != "py": return None try: obj: Any = sys.modules[info["module"]] for part in info["fullname"].split("."): obj = getattr(obj, part) obj = inspect.unwrap(obj) if isinstance(obj, property): obj = inspect.unwrap(obj.fget) # type: ignore path = os.path.relpath(inspect.getsourcefile(obj), start=_module_path) # type: ignore src, lineno = inspect.getsourcelines(obj) except Exception: return None path = f"{path}#L{lineno}-L{lineno + len(src) - 1}" return f"{repository_url}/blob/{git_ref}/scanpy/{path}" # extlinks config extlinks = { "issue": ("https://github.com/scverse/scanpy/issues/%s", "issue%s"), "pr": ("https://github.com/scverse/scanpy/pull/%s", "pr%s"), "tutorial": ( "https://github.com/scverse/scanpy-tutorials/%s.ipynb", "tutorial: %s", ), } ########################################################################### # auto-created readthedocs.org specific configuration # ########################################################################### # # The following code was added during an automated build on readthedocs.org # It is auto created and injected for every build. The result is based on the # conf.py.tmpl file found in the readthedocs.org codebase: # https://github.com/rtfd/readthedocs.org/blob/main/readthedocs/doc_builder/templates/doc_builder/conf.py.tmpl # # Note: this file shouldn't rely on extra dependencies. import importlib import sys import os.path # Borrowed from six. PY3 = sys.version_info[0] == 3 string_types = str if PY3 else basestring from sphinx import version_info # Get suffix for proper linking to GitHub # This is deprecated in Sphinx 1.3+, # as each page can have its own suffix if globals().get('source_suffix', False): if isinstance(source_suffix, string_types): SUFFIX = source_suffix elif isinstance(source_suffix, (list, tuple)): # Sphinx >= 1.3 supports list/tuple to define multiple suffixes SUFFIX = source_suffix[0] elif isinstance(source_suffix, dict): # Sphinx >= 1.8 supports a mapping dictionary for multiple suffixes SUFFIX = list(source_suffix.keys())[0] # make a ``list()`` for py2/py3 compatibility else: # default to .rst SUFFIX = '.rst' else: SUFFIX = '.rst' # Add RTD Static Path. Add to the end because it overwrites previous files. if not 'html_static_path' in globals(): html_static_path = [] if os.path.exists('_static'): html_static_path.append('_static') # Add RTD Theme only if they aren't overriding it already using_rtd_theme = ( ( 'html_theme' in globals() and html_theme in ['default'] and # Allow people to bail with a hack of having an html_style 'html_style' not in globals() ) or 'html_theme' not in globals() ) if using_rtd_theme: html_theme = 'sphinx_rtd_theme' html_style = None html_theme_options = {} # This following legacy behavior will gradually be sliced out until its deprecated and removed. # Skipped for Sphinx 6+ # Skipped by internal Feature flag SKIP_SPHINX_HTML_THEME_PATH # Skipped by all new projects since SKIP_SPHINX_HTML_THEME_PATH's introduction (jan 2023) if ( using_rtd_theme and version_info < (6,0) and not False ): theme = importlib.import_module('sphinx_rtd_theme') if 'html_theme_path' in globals(): html_theme_path.append(theme.get_html_theme_path()) else: html_theme_path = [theme.get_html_theme_path()] # Define websupport2_base_url and websupport2_static_url if globals().get('websupport2_base_url', False): websupport2_base_url = 'https://readthedocs.com/websupport' websupport2_static_url = 'https://assets.readthedocs.com/' #Add project information to the template context. context = { 'using_theme': using_rtd_theme, 'html_theme': html_theme, 'current_version': "2457", 'version_slug': "2457", 'MEDIA_URL': "https://media.readthedocs.com/media/", 'STATIC_URL': "https://assets.readthedocs.com/", 'PRODUCTION_DOMAIN': "readthedocs.com", 'proxied_static_path': "/_/static/", 'versions': [ ("latest", "/en/latest/"), ("stable", "/en/stable/"), ], 'downloads': [ ], 'subprojects': [ ], 'slug': 'icb-scanpy', 'name': u'scanpy', 'rtd_language': u'en', 'programming_language': u'py', 'canonical_url': 'https://scanpy.readthedocs.io/en/stable/', 'analytics_code': 'None', 'single_version': False, 'conf_py_path': '/docs/', 'api_host': 'https://readthedocs.com', 'github_user': 'scverse', 'proxied_api_host': '/_', 'github_repo': 'scanpy', 'github_version': '0cf93d92033123a29f0df033a625849dcfad5c4a', 'display_github': True, 'bitbucket_user': 'None', 'bitbucket_repo': 'None', 'bitbucket_version': '0cf93d92033123a29f0df033a625849dcfad5c4a', 'display_bitbucket': False, 'gitlab_user': 'None', 'gitlab_repo': 'None', 'gitlab_version': '0cf93d92033123a29f0df033a625849dcfad5c4a', 'display_gitlab': False, 'READTHEDOCS': True, 'using_theme': (html_theme == "default"), 'new_theme': (html_theme == "sphinx_rtd_theme"), 'source_suffix': SUFFIX, 'ad_free': False, 'docsearch_disabled': False, 'user_analytics_code': '', 'global_analytics_code': 'UA-17997319-2', 'commit': '0cf93d92', } # For sphinx >=1.8 we can use html_baseurl to set the canonical URL. # https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-html_baseurl if version_info >= (1, 8): if not globals().get('html_baseurl'): html_baseurl = context['canonical_url'] context['canonical_url'] = None if 'html_context' in globals(): html_context.update(context) else: html_context = context # Add custom RTD extension if 'extensions' in globals(): # Insert at the beginning because it can interfere # with other extensions. # See https://github.com/rtfd/readthedocs.org/pull/4054 extensions.insert(0, "readthedocs_ext.readthedocs") else: extensions = ["readthedocs_ext.readthedocs"] # Add External version warning banner to the external version documentation if 'external' == 'external': extensions.insert(1, "readthedocs_ext.external_version_warning") readthedocs_vcs_url = 'https://github.com/scverse/scanpy/pull/2457' readthedocs_build_url = 'https://readthedocs.com/projects/icb-scanpy/builds/1375723/' project_language = 'en' # User's Sphinx configurations language_user = globals().get('language', None) latex_engine_user = globals().get('latex_engine', None) latex_elements_user = globals().get('latex_elements', None) # Remove this once xindy gets installed in Docker image and XINDYOPS # env variable is supported # https://github.com/rtfd/readthedocs-docker-images/pull/98 latex_use_xindy = False chinese = any([ language_user in ('zh_CN', 'zh_TW'), project_language in ('zh_CN', 'zh_TW'), ]) japanese = any([ language_user == 'ja', project_language == 'ja', ]) if chinese: latex_engine = latex_engine_user or 'xelatex' latex_elements_rtd = { 'preamble': '\\usepackage[UTF8]{ctex}\n', } latex_elements = latex_elements_user or latex_elements_rtd elif japanese: latex_engine = latex_engine_user or 'platex' # Make sure our build directory is always excluded exclude_patterns = globals().get('exclude_patterns', []) exclude_patterns.extend(['_build']) [rtd-command-info] start-time: 2023-03-27T06:04:01.791261Z, end-time: 2023-03-27T06:04:07.229153Z, duration: 5, exit-code: 2 python -m sphinx -T -E -b html -d _build/doctrees -D language=en . $READTHEDOCS_OUTPUT/html Running Sphinx v4.5.0 Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages/sphinx/config.py", line 332, in eval_config_file exec(code, namespace) File "/home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/checkouts/2457/docs/conf.py", line 19, in import scanpy # noqa File "/home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/checkouts/2457/scanpy/__init__.py", line 14, in from . import tools as tl File "/home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/checkouts/2457/scanpy/tools/__init__.py", line 16, in from ._louvain import louvain File "/home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/checkouts/2457/scanpy/tools/_louvain.py", line 13, in from .._compat import Literal ImportError: cannot import name 'Literal' from 'scanpy._compat' (/home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/checkouts/2457/scanpy/_compat.py) The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages/sphinx/cmd/build.py", line 272, in build_main app = Sphinx(args.sourcedir, args.confdir, args.outputdir, File "/home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages/sphinx/application.py", line 202, in __init__ self.config = Config.read(self.confdir, confoverrides or {}, self.tags) File "/home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages/sphinx/config.py", line 165, in read namespace = eval_config_file(filename, tags) File "/home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages/sphinx/config.py", line 345, in eval_config_file raise ConfigError(msg % traceback.format_exc()) from exc sphinx.errors.ConfigError: There is a programmable error in your configuration file: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages/sphinx/config.py", line 332, in eval_config_file exec(code, namespace) File "/home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/checkouts/2457/docs/conf.py", line 19, in import scanpy # noqa File "/home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/checkouts/2457/scanpy/__init__.py", line 14, in from . import tools as tl File "/home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/checkouts/2457/scanpy/tools/__init__.py", line 16, in from ._louvain import louvain File "/home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/checkouts/2457/scanpy/tools/_louvain.py", line 13, in from .._compat import Literal ImportError: cannot import name 'Literal' from 'scanpy._compat' (/home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/checkouts/2457/scanpy/_compat.py) Configuration error: There is a programmable error in your configuration file: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/envs/2457/lib/python3.9/site-packages/sphinx/config.py", line 332, in eval_config_file exec(code, namespace) File "/home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/checkouts/2457/docs/conf.py", line 19, in import scanpy # noqa File "/home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/checkouts/2457/scanpy/__init__.py", line 14, in from . import tools as tl File "/home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/checkouts/2457/scanpy/tools/__init__.py", line 16, in from ._louvain import louvain File "/home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/checkouts/2457/scanpy/tools/_louvain.py", line 13, in from .._compat import Literal ImportError: cannot import name 'Literal' from 'scanpy._compat' (/home/docs/checkouts/readthedocs.org/user_builds/icb-scanpy/checkouts/2457/scanpy/_compat.py)