# 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
# Override fusesoc's request for >= 0.8.0, because 0.9.0 is broken
# https://github.com/enthought/sat-solver/issues/289
simplesat==0.8.2

# 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
