# Pip requirements file for development dependencies.


# Include test dependencies (which includes install dependencies)
-r test-requirements.txt


# Direct dependencies for development and indirect dependencies for development
# that are needed for some reason (must be consistent with minimum-constraints.txt)

# Build distribution archive
# Version 1.1.0 pulled after release
# FUTURE: Remove  wheel < 1.0 For details, see
#       https://github.com/pypa/build/issues/750. Circumvention for now is
#       to pin build to <1.0. See issue #3112
build>=0.5.1, <1.0

# Cythonize
Cython>=3.0.0

# Vendorize
vendorize>=0.2.2; python_version == '2.7'
vendorize>=0.3.0; python_version >= '3.6'

# Coverage reporting (no imports, invoked via coveralls script):
# coverage is pinned to <7.0 to speed up pip; coveralls 3.3 also pins coverage<7.0
coverage>=5.0,<7.0
pytest-cov>=2.7.0
# coveralls 2.0 has removed support for Python 2.7
git+https://github.com/andy-maier/coveralls-python.git@andy/add-py27#egg=coveralls; python_version == '2.7'
coveralls>=3.3.0; python_version >= '3.6'

# version 8.11 requires python 3.6, See issue #2796
more-itertools>=4.0.0,!=8.11.0; python_version == '2.7'
more-itertools>=4.0.0; python_version >= '3.6'

# Safety CI by pyup.io
# Safety is run only on Python >=3.7
# Safety 3.0.0 requires exact versions of authlib==1.2.0 and jwt==1.3.1.
safety>=3.0.1; python_version >= '3.7'

# Tox
tox>=2.5.0

# Sphinx (no imports, invoked via sphinx-build script):
# Sphinx 6.0.0 started requiring Python>=3.8
# Sphinx 7.2.0 started requiring Python>=3.9
# Sphinx is used only on Python>=3.8
Sphinx>=7.1.0,!=7.2.0,!=7.2.1,!=7.2.2,!=7.2.3; python_version == '3.8'
Sphinx>=7.2.4; python_version >= '3.9'
# Sphinx 7.1.0 pins docutils to <0.21
docutils>=0.18.1,<0.21; python_version == '3.8'
docutils>=0.18.1; python_version >= '3.9'
sphinx-git>=10.1.1; python_version >= '3.8'
GitPython>=3.1.41; python_version >= '3.8'
Pygments>=2.15.0; python_version >= '3.8'
sphinx-rtd-theme>=2.0.0; python_version >= '3.8'
sphinxcontrib-applehelp>=1.0.4; python_version >= '3.8'
sphinxcontrib-devhelp>=1.0.2; python_version >= '3.8'
sphinxcontrib-htmlhelp>=2.0.1; python_version >= '3.8'
sphinxcontrib-jquery>=4.1; python_version >= '3.8'
sphinxcontrib-jsmath>=1.0.1; python_version >= '3.8'
sphinxcontrib-qthelp>=1.0.3; python_version >= '3.8'
sphinxcontrib-serializinghtml>=1.1.5; python_version == '3.8'
sphinxcontrib-serializinghtml>=1.1.9; python_version >= '3.9'
sphinxcontrib-websupport>=1.2.4; python_version >= '3.8'
autodocsumm>=0.2.12; python_version >= '3.8'
Babel>=2.9.1; python_version >= '3.8'

# PyLint (no imports, invoked via pylint script)
# Pylint requires astroid
# Pylint 1.x / astroid 1.x supports py27 and py34/35/36
# Pylint 2.0 / astroid 2.0 removed py27, added py37
# Pylint 2.7 / astroid 2.5 removed support for py35
# Pylint 2.7-2.9 had issue https://github.com/PyCQA/pylint/issues/4118 (issues #2672, #2673)
# Pylint 2.14 / astroid 2.11 support wrapt 1.14 which is required for Python 3.11
# Pylint 2.15 / astroid 2.12 is needed to circumvent issue https://github.com/PyCQA/pylint/issues/7972 on Python 3.11
# Pylint 3.0.1 / astroid 3.0.1 python 3.12
# astroid 2.13.0 uses typing-extensions on Python<3.11 but misses to require it on 3.10. See https://github.com/PyCQA/astroid/issues/1942
# Pylint 3.3.0 is excluded due to false positive no-member on f-string. See https://github.com/pylint-dev/pylint/issues/9947
pylint>=2.13.0,<2.14.0; python_version == '3.6'
pylint>=2.13.0,!=3.3.0; python_version >= '3.7' and python_version <= '3.10'
pylint>=2.15.0,!=3.3.0; python_version == '3.11'
pylint>=3.0.3,!=3.3.0; python_version >= '3.12'
astroid>=2.11.0; python_version >= '3.6' and python_version <= '3.10'
astroid>=2.12.4; python_version == '3.11'
astroid>=3.0.2; python_version >= '3.12'
typed-ast>=1.4.0,<1.5.0; python_version >= '3.6' and python_version < '3.8' and implementation_name=='cpython'
# lazy-object-proxy is used by astroid
lazy-object-proxy>=1.4.3; python_version >= '3.6'
wrapt>=1.11.2; python_version >= '3.6' and python_version <= '3.10'
wrapt>=1.14; python_version >= '3.11'
# platformdirs is used by pylint starting with its 2.10
platformdirs>=2.2.0; python_version == '3.6'
platformdirs>=2.5.0; python_version >= '3.7' and python_version <= '3.11'
platformdirs>=3.9.1; python_version >= '3.12'
# isort 5.0.0 removed support for py27,py35
# isort 4.2.8 fixes a pylint issue with false positive on import order of ssl on Windows
# isort 4.3.8 fixes an issue with py310 and works on py310 (Note that isort 5.10.0 has official support for py310)
isort>=4.3.8
# Pylint 2.14 uses tomlkit>=0.10.1 and requires py>=3.7
tomlkit>=0.10.1; python_version >= '3.7'
# dill is used by pylint >=2.13
dill>=0.3.4; python_version >= '3.6' and python_version <= '3.10'
dill>=0.3.6; python_version >= '3.11'

# rich 13.3.5 requires typing-extensions>=4.0.0,<5.0
# typing-extensions 4.0.0 removed support for Python < 3.6
typing-extensions>=3.10.0; python_version == '2.7'
typing-extensions>=4.1.0; python_version == '3.6'
typing-extensions>=4.7.1; python_version >= '3.7' and python_version <= '3.10'

# Flake8 and dependents (no imports, invoked via flake8 script):
# flake8 4.0.0 fixes an AttributeError on Python 3.10.
# flake8 4.0.0 pins importlib-metadata to <4.3 on Python <3.8. This causes
#   version conflicts with Sphinx>=4.4.0 and virtualenv>=20.0.35
flake8>=3.8.0,<4.0.0; python_version == '2.7'
flake8>=3.8.0; python_version >= '3.6' and python_version <= '3.9'
flake8>=5.0.0; python_version >= '3.10'
mccabe>=0.6.0; python_version <= '3.9'
mccabe>=0.7.0; python_version >= '3.10'
pycodestyle>=2.6.0,<2.8.0; python_version == '2.7'
pycodestyle>=2.6.0; python_version >= '3.6' and python_version <= '3.9'
pycodestyle>=2.9.0; python_version >= '3.10'
pyflakes>=2.2.0,<2.4.0; python_version == '2.7'
pyflakes>=2.2.0; python_version >= '3.6' and python_version <= '3.9'
pyflakes>=2.5.0; python_version >= '3.10'
entrypoints>=0.3.0
functools32>=3.2.3.post2; python_version == '2.7'  # technically: python_version < '3.2'

# Ruff checker
ruff>=0.3.5; python_version >= '3.7'

# Twine (no imports, invoked via twine script):
# twine 2.0.0 removed support for Python < 3.6
twine>=1.8.1,<2.0.0; python_version == '2.7'
twine>=3.0.0; python_version >= '3.6'

# readme-renderer 23.0 has made cmarkgfm part of extras (it fails on Cygwin)
readme-renderer>=23.0

# Jupyter Notebook (no imports, invoked via jupyter script):

jupyter>=1.0.0

# ipython 7.17.0 removed support for Python 3.6
# ipython 8.0.0 removed support for Python 3.7
# ipython 8.13.1 removed support for Python 3.8
# ipython 8.20.0 removed support for Python 3.9
# latest 3.10: ipython 8.20.0
ipython>=5.1.0,<6.0; python_version == '2.7'
ipython>=7.16.3; python_version == '3.6'
ipython>=7.23.1; python_version == '3.7'
ipython>=8.10.0; python_version >= '3.8'

# ipykernel 6.0.0 removed support for Python 3.5 and 3.6
# ipykernel 6.17.0 removed support for Python 3.7
# ipykernel 6.2.0 pins ipython to <8.0
# latest 3.10: ipykernel 6.28.0
ipykernel>=4.5.2; python_version == '2.7'
ipykernel>=4.5.2; python_version == '3.6'
ipykernel>=6.14.0; python_version == '3.7'
ipykernel>=6.17.0; python_version >= '3.8'

# latest 3.10: ipython-genutils 0.2.0
ipython-genutils>=0.2.0

# ipywidget 7.8.0 claims support for py27 but does not install,
#   see https://github.com/jupyter-widgets/ipywidgets/issues/3825
# ipywidget <8.0.0 does not declare supported Python versions
# latest 3.10: ipywidgets 8.1.1
ipywidgets>=5.2.2,<7.8.0; python_version == '2.7'
ipywidgets>=5.2.2; python_version == '3.6'
ipywidgets>=8.0.0; python_version >= '3.7'

# jupyter-console 6.5.0 removed support for Python 3.6
# latest 3.10: jupyter-console 6.6.3
jupyter-console>=5.0.0,<6.0.0; python_version == '2.7'
jupyter-console>=6.0.0; python_version == '3.6'
jupyter-console>=6.5.0; python_version >= '3.7'

# jupyter_client 7.2.0 removed support for Python 3.6
# jupyter_client 8.0.0 removed support for Python 3.7
# latest 3.10: jupyter_client 8.6.0
jupyter_client>=4.4.0; python_version == '2.7'
jupyter_client>=6.1.12; python_version == '3.6'
jupyter_client>=7.4.4; python_version == '3.7'
jupyter_client>=8.0.3; python_version >= '3.8'

# jupyter_core 4.7.0 removed support for Python <= 3.5
# jupyter_core 4.10.0 removed support for Python 3.6
# jupyter_core 5.0.0 removed support for Python 3.7
# latest 3.10: jupyter_core 5.7.1
jupyter_core>=4.2.1; python_version == '2.7'
jupyter_core>=4.6.1; python_version == '3.6'
jupyter_core>=4.12.0; python_version == '3.7'
jupyter_core>=5.1.0; python_version >= '3.8'

# jupyterlab_pygments 0.2.0 removed support for Python <= 3.6
# jupyterlab_pygments 0.3.0 removed support for Python 3.7
# latest 3.10: jupyterlab_pygments 0.3.0
jupyterlab_pygments>=0.1.2; python_version == '2.7'
jupyterlab_pygments>=0.1.2; python_version == '3.6'
jupyterlab_pygments>=0.2.0; python_version == '3.7'
jupyterlab_pygments>=0.3.0; python_version >= '3.8'

# jupyterlab-widgets 1.0.0 removed support for Python <= 3.5
# jupyterlab-widgets 3.0.0 removed support for Python 3.6
# latest 3.10: jupyterlab-widgets 3.0.9
jupyterlab-widgets>=0.6.5; python_version == '2.7'
jupyterlab-widgets>=1.0.2; python_version == '3.6'
jupyterlab-widgets>=3.0.3; python_version >= '3.7'

# nbclassic 0.4.7 depends on jupyter-server>=1.8
# jupyter-server 2.11.0 removed support for Python 3.6
# jupyter-server 2.25.0 removed support for Python 3.7
# latest 3.10: jupyter_server 2.12.4
jupyter-server>=1.24.0; python_version == '3.7'
# safety issue requires jupyter_server >=2.11.2 2204-3-17
jupyter-server>=2.14.1; python_version >= '3.8'

# latest 3.10: jupyter-events                0.9.0
# latest 3.10: jupyter-lsp                   2.2.1
# latest 3.10: jupyter_server_terminals      0.5.1

# notebook 6.5.1 started using nbclassic
# nbclassic 0.3.6 removed support for Python 3.6
# latest 3.10: nbclassic 1.0.0
nbclassic>=1.0.0; python_version >= '3.7'

# nbclient 0.5.10 removed support for Python 3.6
# nbclient 0.8.0 removed support for Python 3.7
# latest 3.10: nbclient 0.9.0
nbclient>=0.5.9; python_version == '3.6'
nbclient>=0.5.13; python_version == '3.7'
nbclient>=0.8.0; python_version >= '3.8'

# nbconvert 6.1.0 removed support for Python 3.6
# nbconvert 7.7.0 removed support for Python 3.7
# latest 3.10: nbconvert 7.14.1
nbconvert>=5.0.0,<=5.6.1; python_version == '2.7'
nbconvert>=5.0.0; python_version == '3.6'
nbconvert>=6.5.1; python_version == '3.7'
nbconvert>=7.7.3; python_version >= '3.8'

# nbformat 5.1.0 to 5.1.2 are yanked
# nbformat 5.2.0 removed support for Python 3.5 and 3.6
# nbformat 5.9.0 removed support for Python 3.7
# latest 3.10: nbformat 5.9.2
nbformat>=4.2.0; python_version == '2.7'
nbformat>=5.1.3; python_version == '3.6'
nbformat>=5.3.0; python_version == '3.7'
nbformat>=5.9.0; python_version >= '3.8'

# Notebook 6.1.0 introduced usage of f-strings (which requires py>=3.6) but still required py>=3.5.
# latest 3.10: notebook 7.0.6
# nbformat 6.4.11 removed support for Python 3.6
# nbformat 7.0.0 removed support for Python 3.7
notebook>=4.3.1,<6.1.0; python_version == '2.7'
notebook>=6.4.10; python_version == '3.6'
notebook>=6.5.4; python_version == '3.7'
# safety issue sets new minimum 7.1.0 2025-3-17
notebook>=7.2.2; python_version >= '3.8'

# notebook-shim 0.1.0 removed support for Python 3.6
# latest 3.10: notebook_shim 0.2.3
notebook-shim>=0.2.3; python_version >= '3.7'

# jupyterlab-server 2.25.0 removed support for Python 3.7
# latest 3.10: jupyterlab_server 2.25.2
jupyterlab-server>=2.27.1,<3; python_version >= '3.8'

# jupyterlab 4.0.0 removed support for Python 3.7
# latest 3.10: jupyterlab 4.0.10
# safety vulnerability #64588, #64587 jupyterlab < 4.0.11
# notebook 7.1.0 depends on jupyterlab<4.2 and >=4.1.1
jupyterlab>=4.2.6,<5; python_version >= '3.8'

pyrsistent>=0.14.0,<0.16.0; python_version == '2.7'
pyrsistent>=0.14.0; python_version == '3.6'
pyrsistent>=0.19.1; python_version >= '3.7'

# Pywin32 is used (at least?) by jupyter.
# Pywin32 version 222 is inconsistent in its 32-bit/64-bit support on py37
# Pywin32 version 226 needs to be excluded, see issues #1946 and #1975.
# Issue #2675: Pywin32 version 225+ provides wheel files for py38, but does not
#   advertise py38 on Pypi. That causes pywin32==225 to fail but pywin32>=225
#   to work.
#   Reported to pywin32 as https://github.com/mhammond/pywin32/issues/1448.
#   Addressed by increasing the minimum version of pywin32 to >=227 on Python >=3.8.
# pywin32 version 302 added support for Python 3.10 (lower pywin32 versions could not be installed there)
# pywin32 version 303 added support for Python 3.11 (lower pywin32 versions could not be installed there)
# pywin32 version 306 added support for Python 3.12 (lower pywin32 versions could not be installed there)
pywin32>=222,!=226; sys_platform == 'win32' and python_version == '2.7'
pywin32>=222,!=226; sys_platform == 'win32' and python_version == '3.6'
pywin32>=223,!=226; sys_platform == 'win32' and python_version == '3.7'
pywin32>=227; sys_platform == 'win32' and python_version >= '3.8' and python_version <= '3.9'
pywin32>=306; sys_platform == 'win32' and python_version >= '3.10'

# The tornado package is used by ipykernel which is used by jupyter.
# Workaround: Tornado 5.0.0 and 5.0.1 rejects installation if the Python ssl module
#   does not have certain symbols required by Tornado. This issue exists for
#   example with Python 2.7.6 on Ubuntu 14.04, but not with Python 2.7.5 on
#   RHEL 7.4. This can be checked with:
#     python -c "import ssl; ssl.SSLContext; ssl.create_default_context; ssl.match_hostname"
#   Other projects have the same issue:
#     https://github.com/floydhub/dl-docker/issues/84
#   There is no Tornado issue open for this and we do not expect it to be fixed
#   since it only appears on Python 2.
#   This issue has been circumvented by pinning the Tornado version to <5.0 on
#   Python 2.
tornado>=4.4.2,<5.0; python_version == '2.7'
tornado>=6.1; python_version == '3.6'
tornado>=6.2; python_version == '3.7'
tornado>=6.4.2; python_version >= '3.8'

# Table output formatter used by the manual performance tests to display
# timing results
tabulate>=0.8.3

# Performance profiling tools
pyinstrument>=3.0.1; python_version <= '3.11'
pyinstrument-cext>=0.2.2; python_version <= '3.11'  # from pyinstrument
pyinstrument>=4.5.3; python_version >= '3.12'    # pyinstrument-cext integrated

# psutil on PyPy needs to be <=5.6.3 to avoid an installation error,
#   see https://github.com/giampaolo/psutil/issues/1659.
# psutil on macos 11.6 needs to be >=5.8.0 to have support for the compiler.
# psutil on windows needs to be >=5.9.0 to have support for the MSVC++ 14.0 compiler.
psutil>=5.9.0; sys_platform != 'cygwin' and platform_python_implementation != 'PyPy'
psutil>=5.6.0,<=5.6.3; sys_platform != 'cygwin' and platform_python_implementation == 'PyPy'

# Package dependency management tools
pipdeptree>=2.2.0
# pip-check-reqs 2.1.1 removed support for Python 2.7 but does not declare that.
# pip-check-reqs 2.0.4 (last version with Python 2.7 support) still uses
#   pip._internal.download which was removed in pip 20.0. That pip version does
#   not yet have proper dependency handling, so we do not install pip-check-reqs
#   on Python 2.7.
# pip-check-reqs 2.3.2 is needed to have proper support for pip>=21.3 and below.
# pip-check-reqs 2.4.3 fixes a speed issue on Python 3.11.
# pip-check-reqs 2.5.0 has issue https://github.com/r1chardj0n3s/pip-check-reqs/issues/143
pip-check-reqs>=2.3.2; python_version >= '3.6' and python_version <= '3.7'
pip-check-reqs>=2.4.3,!=2.5.0; python_version >= '3.8' and python_version <= '3.11'
pip-check-reqs>=2.5.1; python_version >= '3.12'

# notebook 6.4.10 depends on pyzmq>=17
pyzmq==17.0.0; python_version <= '3.6'
pyzmq>=24.0.0; python_version >= '3.7' and python_version <= '3.11'
pyzmq>=25.1.1; python_version >= '3.12'

# bleach is used by nbconvert and readme-renderer
# bleach 3.1.1 addressed safety issue 38546
# bleach 3.1.1 addressed safety issue 37910
# bleach 3.1.2 addressed safety issue 38076
# bleach 3.1.4 addressed safety issue 38107
# bleach 3.3.0 addressed dependabot issue GHSA-vv2x-vrpj-qqpq
bleach>=3.3.0; python_version == '2.7'
bleach>=3.3.0; python_version >= '3.6'

# pywinpty is used by terminado <- notebook <- jupyter
# pywinpty does not declare supported Python versions and 1.0 has removed support for py27.
# pywinpty 2.0.14 has an issue with latest maturin on Python 3.8, see https://github.com/andfoy/pywinpty/issues/486
# pywinpty <2.0.14 has the above issue on Python 3.13
pywinpty>=0.5; os_name == "nt" and python_version <= '3.6'
pywinpty>=2.0.10; os_name == "nt" and python_version == '3.7'
pywinpty>=2.0.12,!=2.0.14; os_name == "nt" and python_version == '3.8'
pywinpty>=2.0.12; os_name == "nt" and python_version >= '3.9' and python_version <= '3.12'
pywinpty>=2.0.14; os_name == "nt" and python_version >= '3.13'

# This version caused by notebook 6.4.10 depends on terminado>=0.8.3
# terminado 0.10.0 requires pywinpty>=1.1.0, see issue there
terminado>=0.6; python_version == '2.7'
terminado>=0.8.3,<0.10.0; python_version >= '3.6'


# Dependencies to reduce backtracking time (must be consistent with minimum-constraints.txt)

anyio>=3.7.1; python_version == '3.7'
anyio>=4.4.0; python_version >= '3.8'
distlib>=0.3.4; python_version <= '3.11'
distlib>=0.3.7; python_version >= '3.12'
filelock>=3.2.0; python_version <= "3.11"
filelock>=3.12.2; python_version >= "3.12"
# gitdb2 4.0.2 requires gitdb>=4.0.1 for installation, see https://github.com/gitpython-developers/gitdb/issues/86
gitdb2>=2.0.6,<4.0; python_version == '2.7'
gitdb2>=2.0.6,<4.0; python_version == '3.6'
gitdb>=4.0.8; python_version >= '3.7'
# jupyter-server 1.17.0 depends on traitlets>=5.1
traitlets>=4.3.1; python_version == '2.7'
traitlets>=4.3.1; python_version == '3.6'
traitlets>=5.6.0; python_version >= '3.7'
