# 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
libcst==0.4.1
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
tabulate==0.8.10
typer==0.6.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
git+https://github.com/lowRISC/fusesoc.git@ot-0.3

# Development version with OT-specific changes
git+https://github.com/lowRISC/edalize.git@v0.4.0

# 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
