# Pip requirements file for packages needed for development.


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

# PEP517 package builder, used in Makefile
build>=1.0.0
# build requires virtualenv.cli_run which was added in virtualenv 20.1
virtualenv>=20.25.0
pyproject-hooks>=1.1.0

# six (only needed by packages that still support Python 2)
six>=1.16.0

# Change log
towncrier>=22.8.0

# Unit test (imports into testcases):
# pytest is covered in extra-testutils-requirements.txt
testfixtures>=6.9.0
importlib-metadata>=4.8.3
# requests: covered in direct deps for installation
colorama>=0.4.6
requests-mock>=1.6.0
requests-toolbelt>=0.8.0
more-itertools>=4.0.0
# pytz: covered in requirements.txt

# packaging is used by pytest, pip-check-reqs, sphinx
packaging>=23.2

# Unit test (indirect dependencies):
pluggy>=1.3.0
# decorator: covered in requirements.txt

# Coverage reporting (no imports, invoked via coveralls script):
# coveralls pins coverage to <7.0, causing pip backtracking to happen. Pinning
# it to <7.0 in this file saves the time for backtracking, but requires to
# occasionally check for new versions of coveralls without pinning.
coverage>=5.0,<7.0
pytest-cov>=2.7.0
coveralls>=3.3.0
# PyYAML: covered in direct deps for development

# Safety CI by pyup.io
# Safety 3.0.0 requires exact versions of authlib==1.2.0 and jwt==1.3.1.
safety>=3.0.1
safety-schemas>=0.0.2
# TODO: Change to dparse 0.6.4 once released
dparse>=0.6.4b0
ruamel.yaml>=0.17.21
click>=8.0.2
Authlib>=1.2.0
marshmallow>=3.15.0
pydantic>=1.10.13
typer>=0.12.0
typer-cli>=0.12.0
typer-slim>=0.12.0
psutil>=6.0.0

# Bandit checker
bandit>=1.7.8

# Tox
tox>=4.15.0

# Sphinx (no imports, invoked via sphinx-build script):
# Sphinx 7.2.0 started requiring Python>=3.9
Sphinx>=7.1.0; python_version == '3.8'
Sphinx>=7.2.0; 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
GitPython>=3.1.41
Pygments>=2.15.0
sphinx-rtd-theme>=2.0.0
sphinxcontrib-applehelp>=1.0.4
sphinxcontrib-devhelp>=1.0.2
sphinxcontrib-htmlhelp>=2.0.1
sphinxcontrib-jquery>=4.1
sphinxcontrib-jsmath>=1.0.1
sphinxcontrib-qthelp>=1.0.3
sphinxcontrib-serializinghtml>=1.1.5; python_version == '3.8'
sphinxcontrib-serializinghtml>=1.1.9; python_version >= '3.9'
sphinxcontrib-websupport>=1.2.4
autodocsumm>=0.2.12
Babel>=2.9.1

# PyLint (no imports, invoked via pylint script)
pylint>=3.0.1
astroid>=3.0.1
lazy-object-proxy>=1.4.3
wrapt>=1.14
# platformdirs is also used by tox
platformdirs>=4.1.0
# 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
tomlkit>=0.10.1
dill>=0.3.7

# Flake8 and dependents (no imports, invoked via flake8 script):
flake8>=6.1.0
mccabe>=0.7.0
pycodestyle>=2.11.0
pyflakes>=3.1.0
entrypoints>=0.3.0

# Ruff checker (no imports, invoked via ruff script):
ruff>=0.3.5

# Jupyter Notebook (no imports, invoked via jupyter script):
# Note: The packages for Jupyter Notebook are prone to causing endless pip backtracking when
#       installed with minimum versions. This was addressed by pinning the package versions
#       to a maximum in order to reduce the search space for pip.
# Note: nbconvert 7.0.0 started using importlib-metadata and requires importlib-metadata>=3.6
#       which conflicts with flake8 (which still uses the deprecated interfaces importlib-metadata
#       removed). Therefore, we cannot currently use the latest versions of Jupyter Notebook
#       packages.
# Note: notebook 6.5.1 starts using nbclassic which seems to introduce some challenges for pip
#       dependency resolution, so for now we pin notebook to <6.5.
notebook>=6.4.12,<6.5
jupyter>=1.0.0
jupyter-console>=5.2.0,<6.0.0
ipywidgets>=5.2.2,<6.0.0
nbconvert>=6.0.0,<7.0.0
# nbconvert 6.x requires nbclient>=0.5.0,<0.6.0
nbclient>=0.5.9,<0.6.0
# nbclient 0.5.x requires nbformat>=5.0
nbformat>=5.0.2,<6.0.0
qtconsole>=5.4.0
ipykernel>=4.5.2,<5.0.0
jupyter-client>=6.1.5,<7.0.0
jupyterlab-widgets>=1.0.2,<2.0.0
jupyterlab-pygments>=0.2.0
jupyter-core>=4.11.2,<5.0.0
ipython-genutils>=0.2.0
ipython>=5.1.0,<6.0

# Pywin32 is used (at least?) by jupyter.
# Pywin32 version 226 needs to be excluded, see issues #1946 and #1975.
# pywin32 version 302 added support for Python 3.10
# pywin32 version 303 added support for Python 3.11
pywin32>=303; sys_platform == 'win32' and python_version <= '3.11'
pywin32>=306; sys_platform == 'win32' and python_version >= '3.12'

# The tornado package is used by ipykernel which is used by jupyter.
tornado>=6.4.1

# pyzmq 17.0.0,17.1.0 fail installation when wheel is used
pyzmq>=24.0.0; python_version <= '3.11'
pyzmq>=25.1.1; python_version >= '3.12'

# Aditional dependencies of examples
tabulate>=0.8.1
progressbar2>=3.12.0

# Package dependency management tools (not used by any make rules)
pipdeptree>=2.2.0
# pip-check-reqs 2.4.3 fixes a speed issue on Python 3.11 and requires pip>=21.2.4
# pip-check-reqs 2.5.0 dropped support for py38
# pip-check-reqs 2.5.0 has issue https://github.com/r1chardj0n3s/pip-check-reqs/issues/143
pip-check-reqs>=2.4.3,!=2.5.0; python_version == '3.8'
pip-check-reqs>=2.5.1; python_version >= '3.9'

# pywinpty is used by terminado <- notebook <- jupyter
# pywinpty <1.1.1 does not have metadata for required Python or dependent packages.
# pywinpty 1.0 requires maturin which fails installation on py>=3.7
pywinpty>=0.5,<1.0; os_name == "nt"
