Repository navigation
[mypy] Need help to fix all mypy errors in the codebase #4052
Copy link
Copy link
Closed
Labels
Description
Just one left to fix...
https://github.com/TheAlgorithms/Python/blob/master/mypy.ini#L5
- other/least_recently_used.py
- other/lfu_cache.py [mypy] Annotate other/lru_cache and other/lfu_cache #5755
- other/lru_cache.py [mypy] Annotate other/lru_cache and other/lfu_cache #5755
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
Reactions are currently unavailable
Activity
ManuKashyap01 commentedon Jan 5, 2021
@dhruvmanila I am beginner programmer in python. Is there any help I can do regarding this?
sky3760000 commentedon Jan 24, 2021
wrking
[mypy] Add/fix type annotations for "conways_game_of_life.py" & "one_…
dhruvmanila commentedon Feb 23, 2021
Update:
With the latest update for
mypyhttp://mypy-lang.org/, it supports PEP 585 which lets us uselist[int]instead ofList[int]. We always run on the latest Python version so we will adopt the built in generic types instead of importing it from thetypingmodule.cclauss commentedon Mar 19, 2021
I updated the list above to reflect the directories that pass in our build GitHub Action. As contributors fix directories, please add them to the mypy tests in
.github/workflows/build.ymlso that they get tested and we do not have regressions.[mypy] Add/fix type annotations for "conways_game_of_life.py" & "one_…
ayushigoyal2840 commentedon Apr 18, 2021
So, here's the crux of the issue: mypy does not try type-checking every single module you've imported. Instead, it only attempts to type-check modules that have explicitly opted-in to the typing ecosystem.
Modules can opt-in to the typing ecosystem via two key mechanisms:
Add type hints or stubs to their code, and include a file named py.typed within the package they distribute to PyPi (or any other package repository). The presence of this marker makes the package PEP-561-aware. The mypy docs also have more info about PEP-561-aware packages.
Alternatively, add stubs to typeshed, the repository of type hints for the standard library and select 3rd party libraries.
The aws_xray_sdk package has done neither of these things, so will be ignored by mypy.
cclauss commentedon Apr 18, 2021
@ayushigoyal2840 The next step is to remove the
excludestatement while keeping the tests green. Once that is done, we can look into the missing imports. Once that is done, we can try adding--strictikobangs commentedon Apr 28, 2021
Great work team
cclauss commentedon Apr 28, 2021
@ikobangs There is still work to do so please consider attacking one of the following directories:
ikobangs commentedon Apr 28, 2021
Where to start
[mypy] Add/fix type annotations for "conways_game_of_life.py" & "one_…
stale commentedon Jun 2, 2021
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
47 remaining items
DRAFT: Run a mypy reality check
[mypy] Fix type annotation in euler_method.py
[mypy] Fix type annotation in euler_method.py (#5649)
spazm commentedon Oct 29, 2021
When you get a chance, please open #5648, #5653, and #5656.
I'm over my quota of open pull requests. :)
cclauss commentedon Nov 5, 2021
#5608 Can anyone explain why the exclude in
mypy.inidoes not work?!?mypy: Exclude only 20 files that are still failing (#5608)
cclauss commentedon Nov 7, 2021
What remains??? https://github.com/TheAlgorithms/Python/blob/master/mypy.ini#L5
matrix_operation.py#5808cclauss commentedon Nov 10, 2021
Just three left to fix...
https://github.com/TheAlgorithms/Python/blob/master/mypy.ini#L5
[mypy] Fix type annotations for graphs/boruvka (TheAlgorithms#4867)