Vela Testing

Tools

Vela's Python codebase is PEP8 compliant with the exception of a 120 character line length. The following code formatting and linting tools are run on all the Python files (excluding the directories ethosu/vela/tflite/, ethosu/vela/tosa/, and ethosu/vela/ethos_u55_regs because they contain auto-generated code):

  • mypy (code linter)
  • reorder-python-import (code formatter)
  • black (code formatter)
  • flake8 (code linter)
  • pylint (code linter)

These tools are run using the pre-commit framework. This is also used to run the following test and coverage tools:

  • pytest (testing framework)
  • pytest-cov (code coverage plugin for pytest)

Installation

To install the development dependencies, use the following command:

pip install -e .[dev]

This command will install the following tools:

  • pytest
  • pytest-cov
  • pre-commit
  • build
  • setuptools_scm

The remaining tools will all be installed automatically upon first use of pre-commit.

Add pre-commit hook (Automatically running the tools)

To support code development all the above tools can be configured to run automatically on git commit (except pytest-cov which is run on git push) by using the command:

$ pre-commit install
pre-commit installed at .git/hooks/pre-commit

When committing (or pushing) if any of the tools result in a failure (meaning an issue was found) then it will need to be resolved and the git operation repeated.

Manually running the tools

All of the tools can be run individually by invoking them using the following pre-commit framework commands:

$ pre-commit run mypy --all-files
...
$ pre-commit run reorder-python-imports --all-files
...
$ pre-commit run black --all-files
...
$ pre-commit run flake8 --all-files
...
$ pre-commit run pylint --all-files
...
$ pre-commit run pytest
...
$ pre-commit run pytest-cov --hook-stage push
...

Alternatively, all of the commit stage hooks can be run using the command:

$ pre-commit run --all-files
mypy.....................................................................Passed
Reorder python imports...................................................Passed
black....................................................................Passed
flake8...................................................................Passed
pylint...................................................................Passed
pytest...................................................................Passed