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
mypyin 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
mypyin 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
--strictcompliance 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-equalitybecause 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 annotationsand uselist, notListbecause Python 3.10 is already released and we will move to it as soon as opencv-python gets compatible.