Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed type errors in mypy GitHub Action #6963

Merged
merged 12 commits into from
Nov 21, 2022
Merged

Conversation

lukeconibear
Copy link
Contributor

Fixed type errors in mypy GitHub Action

Running the GitHub Action for mypy locally returns successful:

$ python -m mypy --install-types --non-interactive 
Success: no issues found in 144 source files

@headtr1ck
Copy link
Collaborator

That is weird, with from __future__ import annotations this should work.

Actually the pyupgrade pre-commit hook should even replace the typing versions by built-in versions.

@headtr1ck
Copy link
Collaborator

Could you add an additional mypy workflow to test this behavior?
See #6962 (comment)

@headtr1ck
Copy link
Collaborator

When I run locally mypy --python-version 3.8 i get more errors. Maybe merge current main and let's see what new issues emerge.

@headtr1ck
Copy link
Collaborator

@dcherian on a different issue: can we prevent that the auto labeler removes manually added labels?

@dcherian
Copy link
Contributor

can we prevent that the auto labeler removes manually added labels?

no idea. cc @TomNicholas

@github-actions github-actions bot added the Automation Github bots, testing workflows, release automation label Oct 13, 2022
@headtr1ck
Copy link
Collaborator

Seems that pyupgrade does not update tuple -> Tuple inside of Union, which is exactly what caused these problems.

Looks good to me now 👍

@headtr1ck
Copy link
Collaborator

Seems like dasks typing is also not compatible with python 3.8, haha

@headtr1ck
Copy link
Collaborator

I cannot reproduce the mypy error locally.
Does this break for someone else?

@max-sixty
Copy link
Collaborator

I get some errors:

❯ git describe
v0.17.0-798-g3599f873

❯ mypy --python-version 3.8
xarray/core/types.py:72: error: "tuple" is not subscriptable  [misc]
xarray/core/types.py:74: error: "tuple" is not subscriptable  [misc]
xarray/core/types.py:76: error: "tuple" is not subscriptable  [misc]
xarray/core/types.py:78: error: "list" is not subscriptable  [misc]
xarray/core/_reductions.py:18: error: Cannot find implementation or library stub for module named "flox"  [import]
xarray/core/_reductions.py:18: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
xarray/core/merge.py:43: error: "tuple" is not subscriptable  [misc]
xarray/core/merge.py:44: error: "tuple" is not subscriptable  [misc]
xarray/core/merge.py:45: error: "tuple" is not subscriptable  [misc]
xarray/core/groupby.py:661: error: Cannot find implementation or library stub for module named "flox.xarray"  [import]
xarray/backends/api.py:65: error: "dict" is not subscriptable  [misc]
Found 10 errors in 5 files (checked 139 source files)

(not sure why git describe is showing that tag but the commit hash should repro)

@headtr1ck
Copy link
Collaborator

Hmmm, these errors should be fixed in the latest version of this PR.

The problem CI is running into is that mypy runs into an unrecoverable error parsing dask, this I cannot reproduce locally.

@max-sixty
Copy link
Collaborator

Hmmm, these errors should be fixed in the latest version of this PR.

Sorry, my test was on main. I can rerun on this PR.

@max-sixty
Copy link
Collaborator

I can't repro the failure on the current PR v0.17.0-804-g7018b950. I'm using Python 3.9 with the latest dask.

/home/runner/micromamba/envs/xarray-tests/lib/python3.10/site-packages/dask/utils.py:366: error: Parenthesized context managers are only supported in Python 3.9 and greater  [syntax]
Found 1 error in 1 file (errors prevented further checking)

I'm not sure why it's raising an error for an imported module where --follow-imports=silent. Isn't that supposed to suppress errors in imports?

And weirdly, I get errors running mypy in dask latest main, but not this error!

❯ mypy --python-version 3.8 .
dask/system.py:8: error: Unused "type: ignore" comment
dask/widgets/__init__.py:20: error: All conditional function variants must have identical signatures  [misc]
dask/widgets/__init__.py:23: error: All conditional function variants must have identical signatures  [misc]
dask/layers.py:1322: error: Unused "type: ignore" comment
dask/layers.py:1323: error: Unused "type: ignore" comment
dask/array/core.py:5814: error: Argument 1 to "ndindex" has incompatible type "Tuple[int, ...]"; expected "SupportsIndex"  [arg-type]
dask/array/fft.py:196: error: Unused "type: ignore" comment
dask/dataframe/core.py:438: error: Unused "type: ignore" comment
dask/dataframe/core.py:4186: error: Unused "type: ignore" comment
dask/dataframe/core.py:4197: error: Unused "type: ignore" comment
dask/dataframe/core.py:4209: error: Unused "type: ignore" comment
dask/dataframe/core.py:4408: error: Unused "type: ignore" comment
dask/dataframe/core.py:4420: error: Unused "type: ignore" comment
dask/dataframe/core.py:4425: error: Unused "type: ignore" comment
dask/dataframe/groupby.py:1204: error: Unused "type: ignore" comment
dask/dataframe/io/csv.py:9: error: Unused "type: ignore" comment
dask/bytes/tests/test_s3.py:380: error: Unused "type: ignore" comment
dask/bytes/tests/test_local.py:191: error: Unused "type: ignore" comment
dask/bag/tests/test_text.py:33: error: Unused "type: ignore" comment
dask/dataframe/tests/test_shuffle.py:1408: error: Unused "type: ignore" comment
dask/dataframe/tests/test_shuffle.py:1409: error: Unused "type: ignore" comment
dask/dataframe/tests/test_shuffle.py:1412: error: Unused "type: ignore" comment
dask/diagnostics/tests/test_profiler.py:21: error: Unused "type: ignore" comment
dask/tests/test_graph_manipulation.py:106: error: "tuple" is not subscriptable, use "typing.Tuple" instead  [misc]
Found 24 errors in 14 files (checked 243 source files)

@headtr1ck
Copy link
Collaborator

headtr1ck commented Oct 14, 2022

It seems that mypy encountered an unrecoverable runtime error.
We should probably report that to mypy, but I cannot reproduce it locally, yet alone create a MVCE.

@headtr1ck headtr1ck mentioned this pull request Nov 20, 2022
1 task
@Illviljan
Copy link
Contributor

Dask is on the ignore list:

xarray/pyproject.toml

Lines 31 to 43 in d6671dd

# Most of the numerical computing stack doesn't have type annotations yet.
[[tool.mypy.overrides]]
ignore_missing_imports = true
module = [
"affine.*",
"bottleneck.*",
"cartopy.*",
"cdms2.*",
"cf_units.*",
"cfgrib.*",
"cftime.*",
"cupy.*",
"dask.*",

This seems to ignore the list and follow-imports doesn't seem to work either:

      - name: Run mypy with python3.8
        # silent all imports, since external repos might not support this
        run: |
          python -m mypy --install-types --non-interactive --python-version 3.8 --follow-imports=silent

A good ol' copy/paste job works as expected though. :) I think we can discuss more elegant solutions in a follow up PR.

@Illviljan Illviljan added the plan to merge Final call for comments label Nov 20, 2022
@headtr1ck
Copy link
Collaborator

A good ol' copy/paste job works as expected though. :) I think we can discuss more elegant solutions in a follow up PR.

So now mypy is not crashing anymore? Thats weird, we should open an issue on mypy about this...

run: |
python -m mypy --install-types --non-interactive --cobertura-xml-report mypy_report

- name: Upload mypy coverage to Codecov
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need to upload this to codecov? The coverage should be the same as for the newest python.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not really, I just kept it simple with the copy/pasting as I suspect we can do this workflow in a smarter way; similar way as the pytest CI or the mypy --python-version 3.8-way.

I think we can just focus on getting the xarray bugs fixed in this PR and not get stuck with the CI semantics.

python xarray/util/print_versions.py
- name: Install mypy
run: |
python -m pip install 'mypy<0.990'
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is mypy=0.990 still crashing?

@Illviljan
Copy link
Contributor

A good ol' copy/paste job works as expected though. :) I think we can discuss more elegant solutions in a follow up PR.

So now mypy is not crashing anymore? Thats weird, we should open an issue on mypy about this...

This one throws errors still: python -m mypy --install-types --non-interactive --python-version 3.8 --follow-imports=silent
Did it ever crash if we used the normal mypy CI but with changed python version?

@headtr1ck
Copy link
Collaborator

This one throws errors still: python -m mypy --install-types --non-interactive --python-version 3.8 --follow-imports=silent
Did it ever crash if we used the normal mypy CI but with changed python version?

I don't think we ever used --python-version outside of this PR.

We should report this mypy bug...

@Illviljan Illviljan merged commit 88a75c9 into pydata:main Nov 21, 2022
@Illviljan
Copy link
Contributor

Thanks, @lukeconibear !

@lukeconibear lukeconibear deleted the 6962-mypy branch November 22, 2022 00:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Automation Github bots, testing workflows, release automation io plan to merge Final call for comments topic-backends topic-typing
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Type errors in mypy GitHub Action
5 participants