Python: [mypy] Need help to fix all `mypy` errors in the codebase
Just one left to fix…
https://github.com/TheAlgorithms/Python/blob/master/mypy.ini#L5
UPDATE: Our GitHub Actions now run mypy --ignore-missing-imports
excluding those directories that fail that test.
Currently, we are not running mypy
in our regular CI tests as there are a lot of errors in the entire codebase, which needs to be fixed. This won’t be a one-person job, so we are asking for help from you. I cannot paste the entire message in here as there are around 600 of them, so here’s just a gist of it:
$ mypy --ignore-missing-imports .
strings/word_occurrence.py:17: error: Need type annotation for 'occurrence'
strings/min_cost_string_conversion.py:36: error: No overload variant of "__setitem__" of "list" matches argument types "int", "str"
strings/min_cost_string_conversion.py:36: note: Possible overload variants:
strings/min_cost_string_conversion.py:36: note: def __setitem__(self, int, int) -> None
strings/min_cost_string_conversion.py:36: note: def __setitem__(self, slice, Iterable[int]) -> None
strings/min_cost_string_conversion.py:40: error: No overload variant of "__setitem__" of "list" matches argument types "int", "str"
strings/min_cost_string_conversion.py:40: note: Possible overload variants:
strings/min_cost_string_conversion.py:40: note: def __setitem__(self, int, int) -> None
strings/min_cost_string_conversion.py:40: note: def __setitem__(self, slice, Iterable[int]) -> None
...
backtracking/n_queens_math.py:109: error: List comprehension has incompatible type List[str]; expected List[int]
backtracking/n_queens_math.py:110: error: Argument 1 to "append" of "list" has incompatible type "List[int]"; expected "List[str]"
backtracking/n_queens_math.py:149: error: Need type annotation for 'boards' (hint: "boards: List[<type>] = ...")
backtracking/minimax.py:15: error: "list" is not subscriptable, use "typing.List" instead
backtracking/knight_tour.py:6: error: "tuple" is not subscriptable, use "typing.Tuple" instead
backtracking/knight_tour.py:6: error: "list" is not subscriptable, use "typing.List" instead
...
Guidelines to follow:
- Please make sure you read the Contributing Guidelines first.
- Please submit a fix for a maximum of 3 files at a time (1 file is also acceptable).
- As we are not running
mypy
in our CI tests, the user who is submitting a pull request should run it on their local machine and ensure there are no errors in their submission. - Please ensure your pull request title contains the word
mypy
in it. If possible use this template for your pull request title:
[mypy] Fix type annotations for <filenames>
Which errors to fix?
Please follow the below steps to produce all the errors in this library:
- Fork this repository if you haven’t already.
- Clone the forked repository on your local machine using the command:
git clone --depth 1 https://github.com/TheAlgorithms/Python.git
Then you need to install all the necessary requirements:
cd python/
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
python -m pip install mypy
Then run either of the two commands:
mypy --ignore-missing-imports .
-> To produce all the error messages for the entire codebase.mypy --ignore-missing-imports <filepath1> <filepath2> ...
-> To produce error messages for the mentioned file.
How to fix the errors?
- Make a separate branch for your fix with the command:
git checkout -b mypy-fix
- Make changes to the selected files.
- Push it to your forked copy and open a pull request with the appropriate title as mentioned above.
Focus on one directory at a time:
.
├── [x] arithmetic_analysis
├── [x] backtracking
├── [x] bit_manipulation
├── [x] blockchain
├── [x] boolean_algebra
├── [x] cellular_automata
├── [x] ciphers
├── [x] compression
├── [x] computer_vision
├── [x] conversions
├── [ ] data_structures
├── [x] digital_image_processing
├── [x] divide_and_conquer
├── [ ] dynamic_programming
├── [x] electronics
├── [x] file_transfer
├── [x] fractals
├── [x] fuzzy_logic
├── [x] genetic_algorithm
├── [x] geodesy
├── [x] graphics
├── [ ] graphs
├── [x] hashes
├── [x] knapsack
├── [x] linear_algebra
├── [x] machine_learning
├── [ ] maths
├── [ ] matrix
├── [x] networking_flow
├── [x] neural_network
├── [ ] other
├── [ ] project_euler
├── [x] quantum
├── [x] scheduling
├── [x] scripts
├── [ ] searches
├── [x] sorts
├── [ ] strings
└── [x] web_programming
Pre-requisites:
- You should be familiar with
mypy
: https://mypy.readthedocs.io - You should be familiar with Python type hints: https://docs.python.org/3/library/typing.html
About this issue
- Original URL
- State: closed
- Created 4 years ago
- Comments: 31 (16 by maintainers)
Commits related to this issue
- [mypy] Add/fix type annotations for "conways_game_of_life.py" & "one_dimensional.py" (#4216) Related Issue: #4052 — committed to TheAlgorithms/Python by algobytewise 3 years ago
- [mypy] Add/fix type annotations for "conways_game_of_life.py" & "one_dimensional.py" (#4216) Related Issue: #4052 — committed to peRFectBeliever/Python by algobytewise 3 years ago
- [mypy] Add/fix type annotations for "conways_game_of_life.py" & "one_dimensional.py" (#4216) Related Issue: #4052 — committed to Panquesito7/Python by algobytewise 3 years ago
- Fix type annotations for integer_partition.py #4052 — committed to aswinmurali-io/Python by aswinmurali-io 3 years ago
- Fix type annotations for integer_partition.py #4052 (#4689) — committed to TheAlgorithms/Python by aswinmurali-io 3 years ago
- fix: type annotations for pypi 🏷️ Fixes #4052 — committed to meysam81/Python by meysam81 3 years ago
- [mypy] fix type annotations for graphs/a_star.py #4052 — committed to NumberPiOso/Python by NumberPiOso 3 years ago
- Update annotations to Python 3.10 #4052 — committed to NumberPiOso/Python by NumberPiOso 3 years ago
- [mypy] check polygon and corrections (#5419) * Update annotations to Python 3.10 #4052 * Add floats doctest * Copy list to avoid changing input unpredictably * Refactor code to make it reada... — committed to TheAlgorithms/Python by NumberPiOso 3 years ago
- [mypy] Add/fix type annotations for "conways_game_of_life.py" & "one_dimensional.py" (#4216) Related Issue: #4052 — committed to shermanhui/Python by algobytewise 3 years ago
- Fix type annotations for integer_partition.py #4052 (#4689) — committed to shermanhui/Python by aswinmurali-io 3 years ago
- [mypy] Fix type annotations for graphs/boruvka (#4867) * fix: type annotations for pypi 🏷️ Fixes #4052 * updating DIRECTORY.md * apply suggestions from code review Co-authored-by: Christ... — committed to shermanhui/Python by meysam81 3 years ago
- [mypy] check polygon and corrections (#5419) * Update annotations to Python 3.10 #4052 * Add floats doctest * Copy list to avoid changing input unpredictably * Refactor code to make it reada... — committed to shermanhui/Python by NumberPiOso 3 years ago
- [mypy] fix type annotations for graphs/a_star.py #4052 (#5224) * [mypy] fix type annotations for graphs/a_star.py #4052 * updating DIRECTORY.md * Add from __future__ import anotations * rena... — committed to TheAlgorithms/Python by NumberPiOso 3 years ago
- [mypy] Fixes type annotations in other/graham_scan #4052 + Prefer tuple to list for point x,y pairs — committed to spazm/Python by spazm 3 years ago
- [mypy] Fixes type annotations in other/graham_scan #4052 + Prefer tuple to list for point x,y pairs — committed to spazm/Python by spazm 3 years ago
- [mypy] Adds type annotations in other/activity_selection #4052 — committed to spazm/Python by spazm 3 years ago
- [mypy] Fixes type annotations in other/graham_scan #4052 + Prefer tuple to list for point x,y pairs — committed to spazm/Python by spazm 3 years ago
- [mypy] Adds type annotations in other/activity_selection #4052 — committed to spazm/Python by spazm 3 years ago
- [mypy-fix] Type fixes for graham_scan (#5589) * [mypy] Fixes type annotations in other/graham_scan #4052 + Prefer tuple to list for point x,y pairs * NOP: fixes typo in comment — committed to TheAlgorithms/Python by spazm 3 years ago
Going directory by directory now: 3 additional directories done. Back into timeout, because the next PR will make the bot angry 😉
I’m personally aiming for
--strict
compliance with my contributions (to set a good example), but I agree with @cclaus that we probably don’t want to enforce that level due to the chance of scaring off beginning developers. I do think we should (eventually) enforce--disallow-untyped-defs --check-untyped-defs --disallow-untyped-decorators --strict-equality
because the first 3 in that list are the useful ones from a documentation/editor integration point of view and the last one often triggers on bugs.I would be willing to live with mypy fixes on a directory-by-directory basis.
I doubt that we need to go all the way to
—strict
. Having type hints for all function parameters and return types is super helpful but we do not want mypy wound up so tight that beginning developers cannot contribute.What remains??? https://github.com/TheAlgorithms/Python/blob/master/mypy.ini#L5
No one assigns work. We just review pull requests so please go ahead.
Please add
from __future__ import annotations
and uselist
, notList
because Python 3.10 is already released and we will move to it as soon as opencv-python gets compatible.