From 830a7a48ed063918d14090ff67c2a0b4ebc80800 Mon Sep 17 00:00:00 2001 From: Maximilian Roos Date: Sun, 1 May 2022 17:28:31 -0700 Subject: [PATCH 01/11] Run mypy tests (but always pass) So we can at least see the result --- .github/workflows/ci-additional.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-additional.yaml b/.github/workflows/ci-additional.yaml index a5ddceebf11..9a10403d44b 100644 --- a/.github/workflows/ci-additional.yaml +++ b/.github/workflows/ci-additional.yaml @@ -105,10 +105,12 @@ jobs: - name: Install mypy run: | python -m pip install mypy - python -m mypy --install-types --non-interactive + # Temporarily overriding to be true due to https://github.com/pydata/xarray/issues/6551 + # python -m mypy --install-types --non-interactive - name: Run mypy - run: python -m mypy + run: | + python -m mypy --install-types --non-interactive || true min-version-policy: name: Minimum Version Policy From adef9ae30558eec0b10750fa75312c8bf9751697 Mon Sep 17 00:00:00 2001 From: Maximilian Roos Date: Mon, 2 May 2022 22:58:51 -0700 Subject: [PATCH 02/11] --- .github/workflows/ci-additional.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci-additional.yaml b/.github/workflows/ci-additional.yaml index 9a10403d44b..7396d0b4c1f 100644 --- a/.github/workflows/ci-additional.yaml +++ b/.github/workflows/ci-additional.yaml @@ -73,7 +73,6 @@ jobs: needs: detect-ci-trigger # temporarily skipping due to https://github.com/pydata/xarray/issues/6551 # if: needs.detect-ci-trigger.outputs.triggered == 'false' - if: false defaults: run: shell: bash -l {0} From 8f8e728dfff048bc7e40857088645a0808b75cc5 Mon Sep 17 00:00:00 2001 From: Maximilian Roos Date: Mon, 2 May 2022 22:58:57 -0700 Subject: [PATCH 03/11] --- .github/workflows/ci-additional.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-additional.yaml b/.github/workflows/ci-additional.yaml index 7396d0b4c1f..e2685f445d7 100644 --- a/.github/workflows/ci-additional.yaml +++ b/.github/workflows/ci-additional.yaml @@ -72,7 +72,7 @@ jobs: runs-on: "ubuntu-latest" needs: detect-ci-trigger # temporarily skipping due to https://github.com/pydata/xarray/issues/6551 - # if: needs.detect-ci-trigger.outputs.triggered == 'false' + if: needs.detect-ci-trigger.outputs.triggered == 'false' defaults: run: shell: bash -l {0} From 006a7cea16d136d42b15f404be47069e770bf6f9 Mon Sep 17 00:00:00 2001 From: Maximilian Roos Date: Sun, 8 May 2022 14:07:37 -0700 Subject: [PATCH 04/11] Fix mypy --- xarray/backends/api.py | 2 +- xarray/backends/locks.py | 4 ++-- xarray/core/_typed_ops.pyi | 2 +- xarray/core/dask_array_compat.py | 2 +- xarray/core/dataarray.py | 8 +++++--- xarray/core/dataset.py | 5 +++-- xarray/core/duck_array_ops.py | 2 +- xarray/core/nanops.py | 2 +- xarray/core/types.py | 2 +- xarray/tests/test_testing.py | 2 +- xarray/util/generate_ops.py | 2 +- 11 files changed, 18 insertions(+), 15 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index 9967b0a08c0..4962a4a9c02 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -35,7 +35,7 @@ try: from dask.delayed import Delayed except ImportError: - Delayed = None + Delayed = None # type: ignore DATAARRAY_NAME = "__xarray_dataarray_name__" diff --git a/xarray/backends/locks.py b/xarray/backends/locks.py index 59417336f5f..84301f199b3 100644 --- a/xarray/backends/locks.py +++ b/xarray/backends/locks.py @@ -7,12 +7,12 @@ from dask.utils import SerializableLock except ImportError: # no need to worry about serializing the lock - SerializableLock = threading.Lock + SerializableLock = threading.Lock # type: ignore try: from dask.distributed import Lock as DistributedLock except ImportError: - DistributedLock = None + DistributedLock = None # type: ignore[assignment] # Locks used by multiple backends. diff --git a/xarray/core/_typed_ops.pyi b/xarray/core/_typed_ops.pyi index e23b5848ff7..e5b3c9112c7 100644 --- a/xarray/core/_typed_ops.pyi +++ b/xarray/core/_typed_ops.pyi @@ -21,7 +21,7 @@ from .variable import Variable try: from dask.array import Array as DaskArray except ImportError: - DaskArray = np.ndarray + DaskArray = np.ndarray # type: ignore # DatasetOpsMixin etc. are parent classes of Dataset etc. # Because of https://github.com/pydata/xarray/issues/5755, we redefine these. Generally diff --git a/xarray/core/dask_array_compat.py b/xarray/core/dask_array_compat.py index 0e0229cc3ca..9916a76276d 100644 --- a/xarray/core/dask_array_compat.py +++ b/xarray/core/dask_array_compat.py @@ -8,7 +8,7 @@ try: import dask.array as da except ImportError: - da = None + da = None # type: ignore def _validate_pad_output_shape(input_shape, pad_width, output_shape): diff --git a/xarray/core/dataarray.py b/xarray/core/dataarray.py index d15cbd00c0d..9b0ce0b7de7 100644 --- a/xarray/core/dataarray.py +++ b/xarray/core/dataarray.py @@ -17,6 +17,8 @@ import numpy as np import pandas as pd +from xarray.backends.common import AbstractDataStore, ArrayWriter + from ..coding.calendar_ops import convert_calendar, interp_calendar from ..coding.cftimeindex import CFTimeIndex from ..plot.plot import _PlotMethods @@ -67,7 +69,7 @@ try: from dask.delayed import Delayed except ImportError: - Delayed = None + Delayed = None # type: ignore try: from cdms2 import Variable as cdms2_Variable except ImportError: @@ -1227,7 +1229,7 @@ def isel( if any(is_fancy_indexer(idx) for idx in indexers.values()): ds = self._to_temp_dataset()._isel_fancy( - indexers, drop=drop, missing_dims=missing_dims + indexers, missing_dims=missing_dims ) return self._from_temp_dataset(ds) @@ -2875,7 +2877,7 @@ def to_masked_array(self, copy: bool = True) -> np.ma.MaskedArray: isnull = pd.isnull(values) return np.ma.MaskedArray(data=values, mask=isnull, copy=copy) - def to_netcdf(self, *args, **kwargs) -> bytes | Delayed | None: + def to_netcdf(self, *args, **kwargs) -> tuple[ArrayWriter, AbstractDataStore] | bytes | Delayed | None: """Write DataArray contents to a netCDF file. All parameters are passed directly to :py:meth:`xarray.Dataset.to_netcdf`. diff --git a/xarray/core/dataset.py b/xarray/core/dataset.py index 76776b4bc44..1166e240120 100644 --- a/xarray/core/dataset.py +++ b/xarray/core/dataset.py @@ -32,6 +32,7 @@ import xarray as xr +from ..backends.common import ArrayWriter from ..coding.calendar_ops import convert_calendar, interp_calendar from ..coding.cftimeindex import CFTimeIndex, _parse_array_of_cftime_strings from ..plot.dataset_plot import _Dataset_PlotMethods @@ -110,7 +111,7 @@ try: from dask.delayed import Delayed except ImportError: - Delayed = None + Delayed = None # type: ignore # list of attributes of pd.DatetimeIndex that are ndarrays of time info @@ -1686,7 +1687,7 @@ def to_netcdf( unlimited_dims: Iterable[Hashable] = None, compute: bool = True, invalid_netcdf: bool = False, - ) -> bytes | Delayed | None: + ) -> tuple[ArrayWriter, AbstractDataStore] | bytes | Delayed | None: """Write dataset contents to a netCDF file. Parameters diff --git a/xarray/core/duck_array_ops.py b/xarray/core/duck_array_ops.py index b85d0e1645e..253a68b7205 100644 --- a/xarray/core/duck_array_ops.py +++ b/xarray/core/duck_array_ops.py @@ -30,7 +30,7 @@ import dask.array as dask_array from dask.base import tokenize except ImportError: - dask_array = None + dask_array = None # type: ignore def _dask_or_eager_func( diff --git a/xarray/core/nanops.py b/xarray/core/nanops.py index c1a4d629f97..fa96bd6e150 100644 --- a/xarray/core/nanops.py +++ b/xarray/core/nanops.py @@ -11,7 +11,7 @@ from . import dask_array_compat except ImportError: - dask_array = None + dask_array = None # type: ignore[assignment] dask_array_compat = None # type: ignore[assignment] diff --git a/xarray/core/types.py b/xarray/core/types.py index 3f368501b25..74cb2fc2d46 100644 --- a/xarray/core/types.py +++ b/xarray/core/types.py @@ -16,7 +16,7 @@ try: from dask.array import Array as DaskArray except ImportError: - DaskArray = np.ndarray + DaskArray = np.ndarray # type: ignore T_Dataset = TypeVar("T_Dataset", bound="Dataset") diff --git a/xarray/tests/test_testing.py b/xarray/tests/test_testing.py index 2bde7529d1e..1470706d0eb 100644 --- a/xarray/tests/test_testing.py +++ b/xarray/tests/test_testing.py @@ -10,7 +10,7 @@ try: from dask.array import from_array as dask_from_array except ImportError: - dask_from_array = lambda x: x + dask_from_array = lambda x: x # type: ignore try: import pint diff --git a/xarray/util/generate_ops.py b/xarray/util/generate_ops.py index f1fd6cbfeb2..0a382642708 100644 --- a/xarray/util/generate_ops.py +++ b/xarray/util/generate_ops.py @@ -210,7 +210,7 @@ def inplace(): try: from dask.array import Array as DaskArray except ImportError: - DaskArray = np.ndarray + DaskArray = np.ndarray # type: ignore # DatasetOpsMixin etc. are parent classes of Dataset etc. # Because of https://github.com/pydata/xarray/issues/5755, we redefine these. Generally From bd5dc2104d48a7eb16a526347c3a7b2912a5c98e Mon Sep 17 00:00:00 2001 From: Maximilian Roos Date: Sun, 8 May 2022 14:09:17 -0700 Subject: [PATCH 05/11] --- xarray/core/dataarray.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/xarray/core/dataarray.py b/xarray/core/dataarray.py index 9b0ce0b7de7..a1dc5b1fc06 100644 --- a/xarray/core/dataarray.py +++ b/xarray/core/dataarray.py @@ -1229,7 +1229,7 @@ def isel( if any(is_fancy_indexer(idx) for idx in indexers.values()): ds = self._to_temp_dataset()._isel_fancy( - indexers, missing_dims=missing_dims + indexers, drop=drop, missing_dims=missing_dims ) return self._from_temp_dataset(ds) @@ -2877,7 +2877,9 @@ def to_masked_array(self, copy: bool = True) -> np.ma.MaskedArray: isnull = pd.isnull(values) return np.ma.MaskedArray(data=values, mask=isnull, copy=copy) - def to_netcdf(self, *args, **kwargs) -> tuple[ArrayWriter, AbstractDataStore] | bytes | Delayed | None: + def to_netcdf( + self, *args, **kwargs + ) -> tuple[ArrayWriter, AbstractDataStore] | bytes | Delayed | None: """Write DataArray contents to a netCDF file. All parameters are passed directly to :py:meth:`xarray.Dataset.to_netcdf`. From 7c34f97407c01d73f1f757ac1c7ab0ae6c904b3b Mon Sep 17 00:00:00 2001 From: Maximilian Roos Date: Sun, 8 May 2022 14:31:58 -0700 Subject: [PATCH 06/11] --- .github/workflows/ci-additional.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/ci-additional.yaml b/.github/workflows/ci-additional.yaml index e2685f445d7..ff3e8ab7e63 100644 --- a/.github/workflows/ci-additional.yaml +++ b/.github/workflows/ci-additional.yaml @@ -105,11 +105,9 @@ jobs: run: | python -m pip install mypy - # Temporarily overriding to be true due to https://github.com/pydata/xarray/issues/6551 - # python -m mypy --install-types --non-interactive - name: Run mypy run: | - python -m mypy --install-types --non-interactive || true + python -m mypy --install-types --non-interactive min-version-policy: name: Minimum Version Policy From 28c724ff2b5266c3da6948b4b5d66abc11e776eb Mon Sep 17 00:00:00 2001 From: Maximilian Roos Date: Sun, 8 May 2022 14:44:16 -0700 Subject: [PATCH 07/11] . --- xarray/backends/locks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/backends/locks.py b/xarray/backends/locks.py index 84301f199b3..1cc93779843 100644 --- a/xarray/backends/locks.py +++ b/xarray/backends/locks.py @@ -12,7 +12,7 @@ try: from dask.distributed import Lock as DistributedLock except ImportError: - DistributedLock = None # type: ignore[assignment] + DistributedLock = None # type: ignore # Locks used by multiple backends. From 2068cd66d142819488e49750d502c797c27dd294 Mon Sep 17 00:00:00 2001 From: Maximilian Roos Date: Sun, 8 May 2022 14:51:04 -0700 Subject: [PATCH 08/11] --- xarray/core/computation.py | 27 ++++++++++++++------------- xarray/tests/test_computation.py | 7 +++++-- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/xarray/core/computation.py b/xarray/core/computation.py index 1a32cda512c..13b5acaf585 100644 --- a/xarray/core/computation.py +++ b/xarray/core/computation.py @@ -17,7 +17,6 @@ Iterable, Mapping, Sequence, - overload, ) import numpy as np @@ -1846,24 +1845,26 @@ def where(cond, x, y, keep_attrs=None): ) -@overload -def polyval(coord: DataArray, coeffs: DataArray, degree_dim: Hashable) -> DataArray: - ... +# These overloads seem not to work — mypy says it can't find a matching overload for +# `DataArray` & `DataArray`, despite that being in the first overload. Would be nice to +# have overloaded functions rather than just `T_Xarray` for everything. +# @overload +# def polyval(coord: DataArray, coeffs: DataArray, degree_dim: Hashable) -> DataArray: +# ... -@overload -def polyval(coord: T_Xarray, coeffs: Dataset, degree_dim: Hashable) -> Dataset: - ... +# @overload +# def polyval(coord: T_Xarray, coeffs: Dataset, degree_dim: Hashable) -> Dataset: +# ... -@overload -def polyval(coord: Dataset, coeffs: T_Xarray, degree_dim: Hashable) -> Dataset: - ... + +# @overload +# def polyval(coord: Dataset, coeffs: T_Xarray, degree_dim: Hashable) -> Dataset: +# ... -def polyval( - coord: T_Xarray, coeffs: T_Xarray, degree_dim: Hashable = "degree" -) -> T_Xarray: +def polyval(coord: T_Xarray, coeffs: T_Xarray, degree_dim=None) -> T_Xarray: """Evaluate a polynomial at specific values Parameters diff --git a/xarray/tests/test_computation.py b/xarray/tests/test_computation.py index 127fdc5404f..c59f1a6584f 100644 --- a/xarray/tests/test_computation.py +++ b/xarray/tests/test_computation.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import functools import operator import pickle @@ -22,6 +24,7 @@ unified_dim_sizes, ) from xarray.core.pycompat import dask_version +from xarray.core.types import T_Xarray from . import has_dask, raise_if_dask_computes, requires_dask @@ -2009,14 +2012,14 @@ def test_where_attrs() -> None: ), ], ) -def test_polyval(use_dask, x, coeffs, expected) -> None: +def test_polyval(use_dask, x: T_Xarray, coeffs: T_Xarray, expected) -> None: if use_dask: if not has_dask: pytest.skip("requires dask") coeffs = coeffs.chunk({"degree": 2}) x = x.chunk({"x": 2}) with raise_if_dask_computes(): - actual = xr.polyval(x, coeffs) + actual = xr.polyval(coord=x, coeffs=coeffs) xr.testing.assert_allclose(actual, expected) From 6d05e0024ecc52581b0e253c94d2fb5be5705ad1 Mon Sep 17 00:00:00 2001 From: Maximilian Roos <5635139+max-sixty@users.noreply.github.com> Date: Sun, 8 May 2022 15:34:45 -0700 Subject: [PATCH 09/11] Update xarray/core/dataarray.py Co-authored-by: Anderson Banihirwe --- xarray/core/dataarray.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/core/dataarray.py b/xarray/core/dataarray.py index a1dc5b1fc06..beeff30b6d0 100644 --- a/xarray/core/dataarray.py +++ b/xarray/core/dataarray.py @@ -17,7 +17,7 @@ import numpy as np import pandas as pd -from xarray.backends.common import AbstractDataStore, ArrayWriter +from ..backends.common import AbstractDataStore, ArrayWriter from ..coding.calendar_ops import convert_calendar, interp_calendar from ..coding.cftimeindex import CFTimeIndex From 62a7d6c63b3a71e56c3a52ef0437e884e7a594bc Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 8 May 2022 22:36:17 +0000 Subject: [PATCH 10/11] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- xarray/core/dataarray.py | 1 - 1 file changed, 1 deletion(-) diff --git a/xarray/core/dataarray.py b/xarray/core/dataarray.py index beeff30b6d0..fc3cbef16f8 100644 --- a/xarray/core/dataarray.py +++ b/xarray/core/dataarray.py @@ -18,7 +18,6 @@ import pandas as pd from ..backends.common import AbstractDataStore, ArrayWriter - from ..coding.calendar_ops import convert_calendar, interp_calendar from ..coding.cftimeindex import CFTimeIndex from ..plot.plot import _PlotMethods From 06b26a035aa12bb276d4afc496aaa3846b1f7efa Mon Sep 17 00:00:00 2001 From: Maximilian Roos Date: Sun, 8 May 2022 16:07:13 -0700 Subject: [PATCH 11/11] --- xarray/core/computation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/core/computation.py b/xarray/core/computation.py index 13b5acaf585..6f1e08bf84f 100644 --- a/xarray/core/computation.py +++ b/xarray/core/computation.py @@ -1864,7 +1864,7 @@ def where(cond, x, y, keep_attrs=None): # ... -def polyval(coord: T_Xarray, coeffs: T_Xarray, degree_dim=None) -> T_Xarray: +def polyval(coord: T_Xarray, coeffs: T_Xarray, degree_dim="degree") -> T_Xarray: """Evaluate a polynomial at specific values Parameters