Checking of type hints using mypy ================================= Optional type hints can be added to python code which allows specification of the type of a variable. Type hints were specified in `PEP484 `_. Type hints are ignored when running the code but can be statically analysed using a various tools: - `Mypy `_. - `Pyright `_ `Mypy `_ is used for Nashpy. For example, consider the file :code:`main.py`: .. literalinclude:: /_static/contributing/discussion/mypy/main.py After installing mypy:: $ python -m pip install mypy If we check the annotations present in the file:: $ python -m mypy main.py Success: no issues found in 1 source file There are no issues because there are no annotations. If the following annotations are added: .. literalinclude:: /_static/contributing/discussion/mypy/main_with_wrong_types.py We get:: $ python -m mypy main.py main_with_wrong_types.py:17: error: Argument 1 to "len" has incompatible type "Iterable[Any]"; expected "Sized" Found 1 error in 1 file (checked 1 source file) Mypy has found an error here: the :code:`Iterable` type does not necessarily have a length. The following modifies this: .. literalinclude:: /_static/contributing/discussion/mypy/main_with_correct_types.py We get:: $ python -m mypy main.py Success: no issues found in 1 source file --ignore-missing-import ----------------------- In some cases some imported modules cannot be used checked with Mypy, these can be ignored by running the following:: $ python -m mypy --ignore-missing-import main.py Overlap of functionality with darglint -------------------------------------- The python library `darglint `_ checks the format of the docstrings. This will also use any type annotations and so the type annotations and the types specified in the docstrings must correspond.