html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,performed_via_github_app,issue
https://github.com/pydata/xarray/pull/4144#issuecomment-644639292,https://api.github.com/repos/pydata/xarray/issues/4144,644639292,MDEyOklzc3VlQ29tbWVudDY0NDYzOTI5Mg==,6213168,2020-06-16T09:10:07Z,2020-06-16T09:10:07Z,MEMBER,@nbren12 it seems to me that mypy is being overly aggressive when parsing the hinted code (hence why I had to put ``# type: ignore`` on it) but it is being more lax when the same code is invoked somewhere else like in my test script. Overall I suspect it may be fragile and break in future mypy versions...,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,636611699
https://github.com/pydata/xarray/pull/4144#issuecomment-644231473,https://api.github.com/repos/pydata/xarray/issues/4144,644231473,MDEyOklzc3VlQ29tbWVudDY0NDIzMTQ3Mw==,1386642,2020-06-15T16:15:58Z,2020-06-15T16:32:24Z,CONTRIBUTOR,"@crusaderky Thanks for the re-work. For my own benefit, could you explain why that code worked? I remember writing something very similar, and running into mypy errors. My understanding of how mypy intreprets overload seems incomplete.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,636611699
https://github.com/pydata/xarray/pull/4144#issuecomment-643655275,https://api.github.com/repos/pydata/xarray/issues/4144,643655275,MDEyOklzc3VlQ29tbWVudDY0MzY1NTI3NQ==,6213168,2020-06-13T17:44:43Z,2020-06-13T17:44:43Z,MEMBER,"I took the liberty to rework it, please have a look
Test script:
```python
from typing import Hashable, Mapping
import xarray
ds: xarray.Dataset
class D(Hashable, Mapping):
def __hash__(self): ...
def __getitem__(self, item): ...
def __iter__(self): ...
def __len__(self): ...
reveal_type(ds[""foo""])
reveal_type(ds[[""foo"", ""bar""]])
reveal_type(ds[{}])
reveal_type(ds[D()])
```
mypy output:
```
t1.py:12: note: Revealed type is 'xarray.core.dataarray.DataArray'
t1.py:13: note: Revealed type is 'xarray.core.dataset.Dataset'
t1.py:14: note: Revealed type is 'xarray.core.dataset.Dataset'
t1.py:15: note: Revealed type is 'xarray.core.dataset.Dataset'
```
","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,636611699
https://github.com/pydata/xarray/pull/4144#issuecomment-642320316,https://api.github.com/repos/pydata/xarray/issues/4144,642320316,MDEyOklzc3VlQ29tbWVudDY0MjMyMDMxNg==,24736507,2020-06-10T23:33:46Z,2020-06-13T17:43:56Z,NONE,"Hello @nbren12! Thanks for updating this PR. We checked the lines you've touched for [PEPĀ 8](https://www.python.org/dev/peps/pep-0008) issues, and found:
There are currently no PEP 8 issues detected in this Pull Request. Cheers! :beers:
##### Comment last updated at 2020-06-13 17:43:56 UTC","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,636611699
https://github.com/pydata/xarray/pull/4144#issuecomment-643506298,https://api.github.com/repos/pydata/xarray/issues/4144,643506298,MDEyOklzc3VlQ29tbWVudDY0MzUwNjI5OA==,1386642,2020-06-12T22:23:56Z,2020-06-12T22:23:56Z,CONTRIBUTOR,No problem! I think I am done with this one unless you think its important that I document or test this somehow. Can someone review it?,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,636611699
https://github.com/pydata/xarray/pull/4144#issuecomment-643303946,https://api.github.com/repos/pydata/xarray/issues/4144,643303946,MDEyOklzc3VlQ29tbWVudDY0MzMwMzk0Ng==,5635139,2020-06-12T14:34:01Z,2020-06-12T14:34:01Z,MEMBER,"Nice find @mathause ; I remember that discussion now.
As @nbren12 said, this doesn't go all the way given mypy's restrictions, but seems like a dominant improvement.
Test failures are unrelated.
Thanks @nbren12 !","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,636611699
https://github.com/pydata/xarray/pull/4144#issuecomment-643242850,https://api.github.com/repos/pydata/xarray/issues/4144,643242850,MDEyOklzc3VlQ29tbWVudDY0MzI0Mjg1MA==,10194086,2020-06-12T12:24:20Z,2020-06-12T12:24:20Z,MEMBER,"Seems this was already discussed in [GH3210 (comment)](https://github.com/pydata/xarray/pull/3210/files/3cfd9a0c8c09de28e71abf8c861a8599c93bfd29#r317969251) and see also the TODO:
https://github.com/pydata/xarray/blob/8f688ea92ae8416ecc3e18f6e060dad16960e9ac/xarray/core/dataset.py#L1244-L1250
(although it is not entirely clear to me whether this is actually fixed or not)","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,636611699
https://github.com/pydata/xarray/pull/4144#issuecomment-643079280,https://api.github.com/repos/pydata/xarray/issues/4144,643079280,MDEyOklzc3VlQ29tbWVudDY0MzA3OTI4MA==,1386642,2020-06-12T05:49:56Z,2020-06-12T05:49:56Z,CONTRIBUTOR,"Okay. Assuming the tests pass, I think this is ready for review. I tried adding a test, but mypy didn't seem to find problems even with code that I *know* doesn't work (e.g. `'a'+ 1`). Is there some strategy for testing tricky type hints like this?
In any case, this code does work:
```
$ cat test_mypy.py (fv3net)
import xarray as xr
ds = xr.Dataset({""a"": ()})
arr = ds['a']
union_obj = ds[['a']]
reveal_locals()
$ mypy test_mypy.py (fv3net)
test_mypy.py:8: note: Revealed local types are:
test_mypy.py:8: note: arr: xarray.core.dataarray.DataArray
test_mypy.py:8: note: ds: xarray.core.dataset.Dataset
test_mypy.py:8: note: union_obj: Union[xarray.core.dataarray.DataArray, xarray.core.dataset.Dataset]
```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,636611699
https://github.com/pydata/xarray/pull/4144#issuecomment-643014353,https://api.github.com/repos/pydata/xarray/issues/4144,643014353,MDEyOklzc3VlQ29tbWVudDY0MzAxNDM1Mw==,1386642,2020-06-12T01:27:55Z,2020-06-12T01:33:41Z,CONTRIBUTOR,"@mathause On further consideration, I think it might not be possible to get this to work. This method has three behaviors:
- Mapping -> Dataset
- Hashable -> DataArray
- else (List): -> Dataset
With my limited understanding of `mypy`, I think that any two of these is supported by `overload`, but I'm not sure it's possible to support all 3. I tried several different options, but maybe I am missing something.
Would a good middle ground be something like this?
- Hashable -> DataArray
- Any -> Union[DataArray, Dataset]
I *think* this would work since both the input/outputs of the first one are subtypes of the second one. It's not a complete solution, but it would solve the most common problem of `ds['a']` returning a union type rather than a DataArray.","{""total_count"": 2, ""+1"": 2, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,636611699
https://github.com/pydata/xarray/pull/4144#issuecomment-642554509,https://api.github.com/repos/pydata/xarray/issues/4144,642554509,MDEyOklzc3VlQ29tbWVudDY0MjU1NDUwOQ==,10194086,2020-06-11T10:20:33Z,2020-06-11T10:20:33Z,MEMBER,"The mypy check throws an error: `xarray/core/dataset.py:1250: error: Overloaded function signature 2 will never be matched: signature 1's parameter type(s) are the same` I think you can ignore the other failures. Should that be:
```python
@overload
def __getitem__(self, key: Hashable) -> DataArray:
...
@overload
def __getitem__(self, key: Iterable[Hashable]) -> ""Dataset"":
...
```
? Only guessing, though - it was `Any` so there may be more options. @crusaderky
","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,636611699