docs: install_deps> python -I -m pip install -r docs/requirements.txt docs-linkcheck: install_deps> python -I -m pip install -r docs/requirements.txt pre-commit: install_deps> python -I -m pip install pre-commit pre-commit: freeze> python -m pip freeze --all pre-commit: cfgv==3.4.0,distlib==0.4.0,filelock==3.20.0,identify==2.6.15,nodeenv==1.9.1,pip==25.2,platformdirs==4.5.0,pre_commit==4.3.0,PyYAML==6.0.3,setuptools==80.9.0,virtualenv==20.35.3 pre-commit: commands[0]> pre-commit run --all-files --show-diff-on-failure [WARNING] hook id `remove-tabs` uses deprecated stage names (commit) which will be removed in a future version. run: `pre-commit migrate-config` to automatically fix this. [INFO] Initializing environment for https://github.com/pre-commit/pre-commit-hooks. [WARNING] repo `https://github.com/pre-commit/pre-commit-hooks` uses deprecated stage names (commit, push) which will be removed in a future version. Hint: often `pre-commit autoupdate --repo https://github.com/pre-commit/pre-commit-hooks` will fix this. if it does not -- consider reporting an issue to that repo. [INFO] Initializing environment for https://github.com/Lucas-C/pre-commit-hooks. [INFO] Installing environment for https://github.com/pre-commit/pre-commit-hooks. [INFO] Once installed this environment will be reused. [INFO] This may take a few minutes... [INFO] Installing environment for https://github.com/Lucas-C/pre-commit-hooks. [INFO] Once installed this environment will be reused. [INFO] This may take a few minutes... trim trailing whitespace.................................................Failed - hook id: trailing-whitespace - exit code: 1 - files were modified by this hook Fixing tests/lib/ip_topology.py Fixing tests/test_suites/bgp_userfeatures/ibgp_peer_lsp.py Fixing tests/test_suites/bgp_userfeatures/010_bgp_flowspec.py Fixing tests/lib/flowspec.py Fixing tests/test_suites/bgp_userfeatures/bgp_functional_md5.py Fixing tests/lib/pcep.py Fixing tests/lib/utils.py Fixing tests/test_suites/bgp_userfeatures/bgp_llgr_basic.py Fixing tests/test_suites/bgp_userfeatures/bgp_app_peer_basic.py Fixing tests/test_suites/bgp_userfeatures/050_bmp_basic.py Fixing tests/lib/bgp.py Fixing tests/test_suites/bgp_userfeatures/010_bgp_functional_l3vpn.py Fixing tests/test_suites/bgp_userfeatures/test.py Fixing tests/lib/infra.py Tabs remover.............................................................Looking in indexes: https://nexus3.opendaylight.org/repository/PyPi/simple Collecting lfdocs-conf (from -r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/lfdocs-conf/0.9.0/lfdocs_conf-0.9.0-py2.py3-none-any.whl (8.4 kB) Collecting PyYAML (from lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/pyyaml/6.0.3/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (806 kB) Collecting Sphinx>=4.2.0 (from lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinx/8.2.3/sphinx-8.2.3-py3-none-any.whl (3.6 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.6/3.6 MB 41.6 MB/s 0:00:00 Collecting sphinx-bootstrap-theme (from lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinx-bootstrap-theme/0.8.1/sphinx_bootstrap_theme-0.8.1-py2.py3-none-any.whl (1.2 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 19.6 MB/s 0:00:00 Collecting sphinx-tabs (from lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinx-tabs/3.4.7/sphinx_tabs-3.4.7-py3-none-any.whl (9.7 kB) Collecting sphinxcontrib-blockdiag (from lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinxcontrib-blockdiag/3.0.0/sphinxcontrib_blockdiag-3.0.0-py2.py3-none-any.whl (6.8 kB) Collecting sphinxcontrib-needs (from lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinxcontrib-needs/0.7.9/sphinxcontrib_needs-0.7.9-py3-none-any.whl (2.6 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.6/2.6 MB 33.2 MB/s 0:00:00 Collecting sphinxcontrib.plantuml (from lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinxcontrib-plantuml/0.31/sphinxcontrib_plantuml-0.31.tar.gz (15 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 sphinxcontrib-nwdiag (from lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinxcontrib-nwdiag/2.0.0/sphinxcontrib_nwdiag-2.0.0-py2.py3-none-any.whl (13 kB) Collecting sphinxcontrib-seqdiag (from lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinxcontrib-seqdiag/3.0.0/sphinxcontrib_seqdiag-3.0.0-py2.py3-none-any.whl (6.9 kB) Collecting sphinxcontrib-swaggerdoc (from lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinxcontrib-swaggerdoc/0.1.7/sphinxcontrib_swaggerdoc-0.1.7-py2.py3-none-any.whl (7.6 kB) Collecting sphinx-rtd-theme (from lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinx-rtd-theme/3.0.2/sphinx_rtd_theme-3.0.2-py2.py3-none-any.whl (7.7 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.7/7.7 MB 38.6 MB/s 0:00:00 Collecting funcparserlib>=1.0.0a0 (from lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/funcparserlib/2.0.0a0/funcparserlib-2.0.0a0-py3-none-any.whl (16 kB) Collecting sphinxcontrib-applehelp>=1.0.7 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinxcontrib-applehelp/2.0.0/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl (119 kB) Collecting sphinxcontrib-devhelp>=1.0.6 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinxcontrib-devhelp/2.0.0/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl (82 kB) Collecting sphinxcontrib-htmlhelp>=2.0.6 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinxcontrib-htmlhelp/2.1.0/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl (98 kB) Collecting sphinxcontrib-jsmath>=1.0.1 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinxcontrib-jsmath/1.0.1/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl (5.1 kB) Collecting sphinxcontrib-qthelp>=1.0.6 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinxcontrib-qthelp/2.0.0/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl (88 kB) Collecting sphinxcontrib-serializinghtml>=1.1.9 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinxcontrib-serializinghtml/2.0.0/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl (92 kB) Collecting Jinja2>=3.1 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/jinja2/3.1.6/jinja2-3.1.6-py3-none-any.whl (134 kB) Collecting Pygments>=2.17 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/pygments/2.19.2/pygments-2.19.2-py3-none-any.whl (1.2 MB) Collecting docutils<0.22,>=0.20 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/docutils/0.21.2/docutils-0.21.2-py3-none-any.whl (587 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 587.4/587.4 kB 27.3 MB/s 0:00:00 Collecting snowballstemmer>=2.2 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/snowballstemmer/3.0.1/snowballstemmer-3.0.1-py3-none-any.whl (103 kB) Collecting babel>=2.13 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/babel/2.17.0/babel-2.17.0-py3-none-any.whl (10.2 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.2/10.2 MB 36.7 MB/s 0:00:00 Collecting alabaster>=0.7.14 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/alabaster/1.0.0/alabaster-1.0.0-py3-none-any.whl (13 kB) Collecting imagesize>=1.3 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/imagesize/1.4.1/imagesize-1.4.1-py2.py3-none-any.whl (8.8 kB) Collecting requests>=2.30.0 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/requests/2.32.5/requests-2.32.5-py3-none-any.whl (64 kB) Collecting roman-numerals-py>=1.0.0 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/roman-numerals-py/3.1.0/roman_numerals_py-3.1.0-py3-none-any.whl (7.7 kB) Collecting packaging>=23.0 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/packaging/25.0/packaging-25.0-py3-none-any.whl (66 kB) Collecting MarkupSafe>=2.0 (from Jinja2>=3.1->Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/markupsafe/3.0.3/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (22 kB) Collecting charset_normalizer<4,>=2 (from requests>=2.30.0->Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/charset-normalizer/3.4.4/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (151 kB) Collecting idna<4,>=2.5 (from requests>=2.30.0->Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/idna/3.11/idna-3.11-py3-none-any.whl (71 kB) Collecting urllib3<3,>=1.21.1 (from requests>=2.30.0->Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/urllib3/2.5.0/urllib3-2.5.0-py3-none-any.whl (129 kB) Collecting certifi>=2017.4.17 (from requests>=2.30.0->Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/certifi/2025.10.5/certifi-2025.10.5-py3-none-any.whl (163 kB) Collecting sphinxcontrib-jquery<5,>=4 (from sphinx-rtd-theme->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinxcontrib-jquery/4.1/sphinxcontrib_jquery-4.1-py2.py3-none-any.whl (121 kB) Collecting blockdiag>=1.5.0 (from sphinxcontrib-blockdiag->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/blockdiag/3.0.0/blockdiag-3.0.0-py3-none-any.whl (2.7 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 49.3 MB/s 0:00:00 Requirement already satisfied: setuptools in ./.tox/docs/lib/python3.11/site-packages (from blockdiag>=1.5.0->sphinxcontrib-blockdiag->lfdocs-conf->-r docs/requirements.txt (line 1)) (80.9.0) Collecting Pillow>3.0 (from blockdiag>=1.5.0->sphinxcontrib-blockdiag->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/pillow/12.0.0/pillow-12.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (7.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.0/7.0 MB 55.8 MB/s 0:00:00 Collecting webcolors (from blockdiag>=1.5.0->sphinxcontrib-blockdiag->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/webcolors/24.11.1/webcolors-24.11.1-py3-none-any.whl (14 kB) Collecting jsonschema==3.2.0 (from sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/jsonschema/3.2.0/jsonschema-3.2.0-py2.py3-none-any.whl (56 kB) Collecting matplotlib>3.1.0 (from sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/matplotlib/3.10.7/matplotlib-3.10.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (8.7 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.7/8.7 MB 66.6 MB/s 0:00:00 Collecting requests-file<2.0.0,>=1.5.1 (from sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/requests-file/1.5.1/requests_file-1.5.1-py2.py3-none-any.whl (3.7 kB) Collecting sphinx-data-viewer<0.2.0,>=0.1.1 (from sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinx-data-viewer/0.1.5/sphinx_data_viewer-0.1.5-py3-none-any.whl (8.2 kB) Collecting attrs>=17.4.0 (from jsonschema==3.2.0->sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/attrs/25.4.0/attrs-25.4.0-py3-none-any.whl (67 kB) Collecting pyrsistent>=0.14.0 (from jsonschema==3.2.0->sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/pyrsistent/0.20.0/pyrsistent-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (120 kB) Collecting six>=1.11.0 (from jsonschema==3.2.0->sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/six/1.17.0/six-1.17.0-py2.py3-none-any.whl (11 kB) Collecting contourpy>=1.0.1 (from matplotlib>3.1.0->sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/contourpy/1.3.3/contourpy-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (355 kB) Collecting cycler>=0.10 (from matplotlib>3.1.0->sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/cycler/0.12.1/cycler-0.12.1-py3-none-any.whl (8.3 kB) Collecting fonttools>=4.22.0 (from matplotlib>3.1.0->sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/fonttools/4.60.1/fonttools-4.60.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (5.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.0/5.0 MB 54.5 MB/s 0:00:00 Collecting kiwisolver>=1.3.1 (from matplotlib>3.1.0->sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/kiwisolver/1.4.9/kiwisolver-1.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (1.4 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.4/1.4 MB 22.2 MB/s 0:00:00 Collecting numpy>=1.23 (from matplotlib>3.1.0->sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/numpy/2.3.4/numpy-2.3.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (16.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 16.9/16.9 MB 32.0 MB/s 0:00:00 Collecting pyparsing>=3 (from matplotlib>3.1.0->sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/pyparsing/3.2.5/pyparsing-3.2.5-py3-none-any.whl (113 kB) Collecting python-dateutil>=2.7 (from matplotlib>3.1.0->sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/python-dateutil/2.9.0.post0/python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB) Collecting nwdiag>=1.0.3 (from sphinxcontrib-nwdiag->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/nwdiag/3.0.0/nwdiag-3.0.0-py3-none-any.whl (7.7 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.7/7.7 MB 19.6 MB/s 0:00:00 Collecting seqdiag>=0.9.3 (from sphinxcontrib-seqdiag->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/seqdiag/3.0.0/seqdiag-3.0.0-py3-none-any.whl (2.6 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.6/2.6 MB 27.6 MB/s 0:00:00 Collecting future (from sphinxcontrib-swaggerdoc->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/future/1.0.0/future-1.0.0-py3-none-any.whl (491 kB) Building wheels for collected packages: sphinxcontrib.plantuml Building wheel for sphinxcontrib.plantuml (pyproject.toml): started Building wheel for sphinxcontrib.plantuml (pyproject.toml): finished with status 'done' Created wheel for sphinxcontrib.plantuml: filename=sphinxcontrib_plantuml-0.31-py3-none-any.whl size=11975 sha256=41c90ee2d03e5a1ada899d0b28a33fe43cb129c107490c2507cee28759b80ad0 Stored in directory: /home/jenkins/.cache/pip/wheels/c1/74/53/6547a21c043e8bf249fd4200e89ee25b855b740d0e31a29deb Successfully built sphinxcontrib.plantuml Installing collected packages: sphinx-bootstrap-theme, webcolors, urllib3, sphinxcontrib-serializinghtml, sphinxcontrib-qthelp, sphinxcontrib-jsmath, sphinxcontrib-htmlhelp, sphinxcontrib-devhelp, sphinxcontrib-applehelp, snowballstemmer, six, roman-numerals-py, PyYAML, pyrsistent, pyparsing, Pygments, Pillow, packaging, numpy, MarkupSafe, kiwisolver, imagesize, idna, future, funcparserlib, fonttools, docutils, cycler, charset_normalizer, certifi, babel, attrs, alabaster, requests, python-dateutil, jsonschema, Jinja2, contourpy, blockdiag, Sphinx, seqdiag, requests-file, nwdiag, matplotlib, sphinxcontrib-swaggerdoc, sphinxcontrib-seqdiag, sphinxcontrib.plantuml, sphinxcontrib-nwdiag, sphinxcontrib-jquery, sphinxcontrib-blockdiag, sphinx-tabs, sphinx-data-viewer, sphinxcontrib-needs, sphinx-rtd-theme, lfdocs-conf docs: exit -15 (15.88 seconds) /w/workspace/bgpcep-tox-verify-master> python -I -m pip install -r docs/requirements.txt pid=2361 Failed - hook id: remove-tabs - exit code: 1 - files were modified by this hook Substituting tabs in: tests/test_suites/bgp_userfeatures/010_bgp_functional_l3vpn.py by 4 whitespaces Tabs have been successfully removed. Now aborting the commit. You can check the changes made. Then simply "git add --update ." and re-commit pre-commit hook(s) made changes. If you are seeing this message in CI, reproduce locally with: `pre-commit run --all-files`. To run `pre-commit` as part of git workflow, use `pre-commit install`. All changes made by hooks: docs: FAIL ✖ in 17.01 seconds Looking in indexes: https://nexus3.opendaylight.org/repository/PyPi/simple Collecting lfdocs-conf (from -r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/lfdocs-conf/0.9.0/lfdocs_conf-0.9.0-py2.py3-none-any.whl (8.4 kB) Collecting PyYAML (from lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/pyyaml/6.0.3/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (806 kB) Collecting Sphinx>=4.2.0 (from lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinx/8.2.3/sphinx-8.2.3-py3-none-any.whl (3.6 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.6/3.6 MB 39.0 MB/s 0:00:00 Collecting sphinx-bootstrap-theme (from lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinx-bootstrap-theme/0.8.1/sphinx_bootstrap_theme-0.8.1-py2.py3-none-any.whl (1.2 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 19.3 MB/s 0:00:00 Collecting sphinx-tabs (from lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinx-tabs/3.4.7/sphinx_tabs-3.4.7-py3-none-any.whl (9.7 kB) Collecting sphinxcontrib-blockdiag (from lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinxcontrib-blockdiag/3.0.0/sphinxcontrib_blockdiag-3.0.0-py2.py3-none-any.whl (6.8 kB) Collecting sphinxcontrib-needs (from lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinxcontrib-needs/0.7.9/sphinxcontrib_needs-0.7.9-py3-none-any.whl (2.6 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.6/2.6 MB 32.6 MB/s 0:00:00 Collecting sphinxcontrib.plantuml (from lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinxcontrib-plantuml/0.31/sphinxcontrib_plantuml-0.31.tar.gz (15 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 sphinxcontrib-nwdiag (from lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinxcontrib-nwdiag/2.0.0/sphinxcontrib_nwdiag-2.0.0-py2.py3-none-any.whl (13 kB) Collecting sphinxcontrib-seqdiag (from lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinxcontrib-seqdiag/3.0.0/sphinxcontrib_seqdiag-3.0.0-py2.py3-none-any.whl (6.9 kB) Collecting sphinxcontrib-swaggerdoc (from lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinxcontrib-swaggerdoc/0.1.7/sphinxcontrib_swaggerdoc-0.1.7-py2.py3-none-any.whl (7.6 kB) Collecting sphinx-rtd-theme (from lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinx-rtd-theme/3.0.2/sphinx_rtd_theme-3.0.2-py2.py3-none-any.whl (7.7 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.7/7.7 MB 55.5 MB/s 0:00:00 Collecting funcparserlib>=1.0.0a0 (from lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/funcparserlib/2.0.0a0/funcparserlib-2.0.0a0-py3-none-any.whl (16 kB) Collecting sphinxcontrib-applehelp>=1.0.7 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinxcontrib-applehelp/2.0.0/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl (119 kB) Collecting sphinxcontrib-devhelp>=1.0.6 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinxcontrib-devhelp/2.0.0/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl (82 kB) Collecting sphinxcontrib-htmlhelp>=2.0.6 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinxcontrib-htmlhelp/2.1.0/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl (98 kB) Collecting sphinxcontrib-jsmath>=1.0.1 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinxcontrib-jsmath/1.0.1/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl (5.1 kB) Collecting sphinxcontrib-qthelp>=1.0.6 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinxcontrib-qthelp/2.0.0/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl (88 kB) Collecting sphinxcontrib-serializinghtml>=1.1.9 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinxcontrib-serializinghtml/2.0.0/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl (92 kB) Collecting Jinja2>=3.1 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/jinja2/3.1.6/jinja2-3.1.6-py3-none-any.whl (134 kB) Collecting Pygments>=2.17 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/pygments/2.19.2/pygments-2.19.2-py3-none-any.whl (1.2 MB) Collecting docutils<0.22,>=0.20 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/docutils/0.21.2/docutils-0.21.2-py3-none-any.whl (587 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 587.4/587.4 kB 14.8 MB/s 0:00:00 Collecting snowballstemmer>=2.2 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/snowballstemmer/3.0.1/snowballstemmer-3.0.1-py3-none-any.whl (103 kB) Collecting babel>=2.13 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/babel/2.17.0/babel-2.17.0-py3-none-any.whl (10.2 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.2/10.2 MB 37.9 MB/s 0:00:00 Collecting alabaster>=0.7.14 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/alabaster/1.0.0/alabaster-1.0.0-py3-none-any.whl (13 kB) Collecting imagesize>=1.3 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/imagesize/1.4.1/imagesize-1.4.1-py2.py3-none-any.whl (8.8 kB) Collecting requests>=2.30.0 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/requests/2.32.5/requests-2.32.5-py3-none-any.whl (64 kB) Collecting roman-numerals-py>=1.0.0 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/roman-numerals-py/3.1.0/roman_numerals_py-3.1.0-py3-none-any.whl (7.7 kB) Collecting packaging>=23.0 (from Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/packaging/25.0/packaging-25.0-py3-none-any.whl (66 kB) Collecting MarkupSafe>=2.0 (from Jinja2>=3.1->Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/markupsafe/3.0.3/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (22 kB) Collecting charset_normalizer<4,>=2 (from requests>=2.30.0->Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/charset-normalizer/3.4.4/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (151 kB) Collecting idna<4,>=2.5 (from requests>=2.30.0->Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/idna/3.11/idna-3.11-py3-none-any.whl (71 kB) Collecting urllib3<3,>=1.21.1 (from requests>=2.30.0->Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/urllib3/2.5.0/urllib3-2.5.0-py3-none-any.whl (129 kB) Collecting certifi>=2017.4.17 (from requests>=2.30.0->Sphinx>=4.2.0->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/certifi/2025.10.5/certifi-2025.10.5-py3-none-any.whl (163 kB) Collecting sphinxcontrib-jquery<5,>=4 (from sphinx-rtd-theme->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinxcontrib-jquery/4.1/sphinxcontrib_jquery-4.1-py2.py3-none-any.whl (121 kB) Collecting blockdiag>=1.5.0 (from sphinxcontrib-blockdiag->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/blockdiag/3.0.0/blockdiag-3.0.0-py3-none-any.whl (2.7 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 33.1 MB/s 0:00:00 Requirement already satisfied: setuptools in ./.tox/docs-linkcheck/lib/python3.11/site-packages (from blockdiag>=1.5.0->sphinxcontrib-blockdiag->lfdocs-conf->-r docs/requirements.txt (line 1)) (80.9.0) Collecting Pillow>3.0 (from blockdiag>=1.5.0->sphinxcontrib-blockdiag->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/pillow/12.0.0/pillow-12.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (7.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.0/7.0 MB 33.3 MB/s 0:00:00 Collecting webcolors (from blockdiag>=1.5.0->sphinxcontrib-blockdiag->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/webcolors/24.11.1/webcolors-24.11.1-py3-none-any.whl (14 kB) Collecting jsonschema==3.2.0 (from sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/jsonschema/3.2.0/jsonschema-3.2.0-py2.py3-none-any.whl (56 kB) Collecting matplotlib>3.1.0 (from sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/matplotlib/3.10.7/matplotlib-3.10.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (8.7 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.7/8.7 MB 50.9 MB/s 0:00:00 Collecting requests-file<2.0.0,>=1.5.1 (from sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/requests-file/1.5.1/requests_file-1.5.1-py2.py3-none-any.whl (3.7 kB) Collecting sphinx-data-viewer<0.2.0,>=0.1.1 (from sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/sphinx-data-viewer/0.1.5/sphinx_data_viewer-0.1.5-py3-none-any.whl (8.2 kB) Collecting attrs>=17.4.0 (from jsonschema==3.2.0->sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/attrs/25.4.0/attrs-25.4.0-py3-none-any.whl (67 kB) Collecting pyrsistent>=0.14.0 (from jsonschema==3.2.0->sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/pyrsistent/0.20.0/pyrsistent-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (120 kB) Collecting six>=1.11.0 (from jsonschema==3.2.0->sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/six/1.17.0/six-1.17.0-py2.py3-none-any.whl (11 kB) Collecting contourpy>=1.0.1 (from matplotlib>3.1.0->sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/contourpy/1.3.3/contourpy-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (355 kB) Collecting cycler>=0.10 (from matplotlib>3.1.0->sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/cycler/0.12.1/cycler-0.12.1-py3-none-any.whl (8.3 kB) Collecting fonttools>=4.22.0 (from matplotlib>3.1.0->sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/fonttools/4.60.1/fonttools-4.60.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (5.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.0/5.0 MB 36.9 MB/s 0:00:00 Collecting kiwisolver>=1.3.1 (from matplotlib>3.1.0->sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/kiwisolver/1.4.9/kiwisolver-1.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (1.4 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.4/1.4 MB 18.9 MB/s 0:00:00 Collecting numpy>=1.23 (from matplotlib>3.1.0->sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/numpy/2.3.4/numpy-2.3.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (16.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 16.9/16.9 MB 32.5 MB/s 0:00:00 Collecting pyparsing>=3 (from matplotlib>3.1.0->sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/pyparsing/3.2.5/pyparsing-3.2.5-py3-none-any.whl (113 kB) Collecting python-dateutil>=2.7 (from matplotlib>3.1.0->sphinxcontrib-needs->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/python-dateutil/2.9.0.post0/python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB) Collecting nwdiag>=1.0.3 (from sphinxcontrib-nwdiag->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/nwdiag/3.0.0/nwdiag-3.0.0-py3-none-any.whl (7.7 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.7/7.7 MB 22.9 MB/s 0:00:00 Collecting seqdiag>=0.9.3 (from sphinxcontrib-seqdiag->lfdocs-conf->-r docs/requirements.txt (line 1)) Downloading https://nexus3.opendaylight.org/repository/PyPi/packages/seqdiag/3.0.0/seqdiag-3.0.0-py3-none-any.whl (2.6 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.6/2.6 MB 30.9 MB/s 0:00:00 Collecting future (from sphinxcontrib-swaggerdoc->lfdocs-conf->-r docs/requirements.txt (line 1)) Using cached https://nexus3.opendaylight.org/repository/PyPi/packages/future/1.0.0/future-1.0.0-py3-none-any.whl (491 kB) Building wheels for collected packages: sphinxcontrib.plantuml Building wheel for sphinxcontrib.plantuml (pyproject.toml): started Building wheel for sphinxcontrib.plantuml (pyproject.toml): finished with status 'done' Created wheel for sphinxcontrib.plantuml: filename=sphinxcontrib_plantuml-0.31-py3-none-any.whl size=11975 sha256=41c90ee2d03e5a1ada899d0b28a33fe43cb129c107490c2507cee28759b80ad0 Stored in directory: /home/jenkins/.cache/pip/wheels/c1/74/53/6547a21c043e8bf249fd4200e89ee25b855b740d0e31a29deb Successfully built sphinxcontrib.plantuml Installing collected packages: sphinx-bootstrap-theme, webcolors, urllib3, sphinxcontrib-serializinghtml, sphinxcontrib-qthelp, sphinxcontrib-jsmath, sphinxcontrib-htmlhelp, sphinxcontrib-devhelp, sphinxcontrib-applehelp, snowballstemmer, six, roman-numerals-py, PyYAML, pyrsistent, pyparsing, Pygments, Pillow, packaging, numpy, MarkupSafe, kiwisolver, imagesize, idna, future, funcparserlib, fonttools, docutils, cycler, charset_normalizer, certifi, babel, attrs, alabaster, requests, python-dateutil, jsonschema, Jinja2, contourpy, blockdiag, Sphinx, seqdiag, requests-file, nwdiag, matplotlib, sphinxcontrib-swaggerdoc, sphinxcontrib-seqdiag, sphinxcontrib.plantuml, sphinxcontrib-nwdiag, sphinxcontrib-jquery, sphinxcontrib-blockdiag, sphinx-tabs, sphinx-data-viewer, sphinxcontrib-needs, sphinx-rtd-theme, lfdocs-conf docs-linkcheck: exit -15 (15.88 seconds) /w/workspace/bgpcep-tox-verify-master> python -I -m pip install -r docs/requirements.txt pid=2364