# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0

# Keep sorted.
hjson==3.1.0
jsonschema==4.17.3; python_version >= "3.7"
# Need to pin to 0.4.9 to be compatible with python3.11
libcst==0.4.9
mako==1.1.6
pluralizer==1.2.0
pycryptodome==3.15.0
pyelftools==0.29
pytest==7.0.1
pytest-timeout==2.1.0
rich==12.5.1
# Pyyaml 6.0.0 doesn't work with the latest cython
pyyaml==6.0.1
tabulate==0.8.10
typer==0.6.1

# Dependencies: gen-flash-img.py
pyfinite==1.9.1

# Dependencies: dv_sim
enlighten==1.10.2
mistletoe==0.9.0
# Premailer 3.9.0 broke the API by introducing an allow_loading_external_files
# argument that is now mandatory, but didn't exist in previous versions.
# To relax the constraint we either need to do a runtime detection, or switch all
# users to a newer version.
premailer==3.8.0

# Dependencies: check_dif_statuses.py
pydriller==2.1
termcolor==1.1.0

# Linters
flake8==5.0.4
isort==5.10.1
mypy==0.971
yapf==0.32.0

# Type stubs for mypy checking.
# types-dataclasses is only needed for Python <= 3.6.
types-dataclasses==0.6.6
types-pkg_resources==0.1.3
types-pyyaml==6.0.11
types-tabulate==0.8.11

# Dependency of sw/host/vendor/google_verible_verilog_syntax_py
anytree==2.8.0

# Development version with OT-specific changes
# The version is different from upstream OT because ot-0.3 builds HW twice
# somehow and doubles the build time.
git+https://github.com/lowRISC/fusesoc.git@ot-0.1

# Development version with OT-specific changes
# The version is different from upstream OT because v0.4.0 builds HW twice
# somehow and doubles the build time.
git+https://github.com/lowRISC/edalize.git@ot-0.1

# Development version of minimal ChipWhisperer toolchain with latest features
# and bug fixes. We fix the version for improved stability and manually update
# if necessary.
git+https://github.com/newaetech/chipwhisperer-minimal.git@2643131b71e528791446ee1bab7359120288f4ab#egg=chipwhisperer

# Dependencies: @matcha//util/image_to_c.py
Pillow == 10.0.1

# Dependencies: @matcha//util/run_live_cam.py
pyserial == 3.5

# Working version for CentOS 7
urllib3==1.26.15

setuptools==75
setuptools_scm==8.1.0
