From 7b388c52d90d7f9ac5afdd6b22ca1773c281cc05 Mon Sep 17 00:00:00 2001 From: Illviljan <14371165+Illviljan@users.noreply.github.com> Date: Fri, 27 May 2022 18:30:11 +0200 Subject: [PATCH 01/13] Allow all interp options --- xarray/core/dataarray.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/xarray/core/dataarray.py b/xarray/core/dataarray.py index b5bcc255b70..fcdccf7c386 100644 --- a/xarray/core/dataarray.py +++ b/xarray/core/dataarray.py @@ -88,7 +88,6 @@ ErrorOptions, ErrorOptionsWithWarn, InterpAllOptions, - InterpOptions, PadModeOptions, PadReflectOptions, QueryEngineOptions, @@ -1754,7 +1753,7 @@ def reindex( def interp( self: T_DataArray, coords: Mapping[Any, Any] | None = None, - method: InterpOptions = "linear", + method: InterpAllOptions = "linear", assume_sorted: bool = False, kwargs: Mapping[str, Any] | None = None, **coords_kwargs: Any, @@ -1885,7 +1884,7 @@ def interp( def interp_like( self: T_DataArray, other: DataArray | Dataset, - method: InterpOptions = "linear", + method: InterpAllOptions = "linear", assume_sorted: bool = False, kwargs: Mapping[str, Any] | None = None, ) -> T_DataArray: From 10e313bf6a9e3ad5ae0a06798d0c03057d02b004 Mon Sep 17 00:00:00 2001 From: Illviljan <14371165+Illviljan@users.noreply.github.com> Date: Sat, 28 May 2022 09:30:42 +0200 Subject: [PATCH 02/13] renaming the typve variable --- xarray/core/dataarray.py | 8 ++++---- xarray/core/types.py | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/xarray/core/dataarray.py b/xarray/core/dataarray.py index fcdccf7c386..0341d84b661 100644 --- a/xarray/core/dataarray.py +++ b/xarray/core/dataarray.py @@ -87,7 +87,7 @@ DatetimeUnitOptions, ErrorOptions, ErrorOptionsWithWarn, - InterpAllOptions, + InterpOptions, PadModeOptions, PadReflectOptions, QueryEngineOptions, @@ -1753,7 +1753,7 @@ def reindex( def interp( self: T_DataArray, coords: Mapping[Any, Any] | None = None, - method: InterpAllOptions = "linear", + method: InterpOptions = "linear", assume_sorted: bool = False, kwargs: Mapping[str, Any] | None = None, **coords_kwargs: Any, @@ -1884,7 +1884,7 @@ def interp( def interp_like( self: T_DataArray, other: DataArray | Dataset, - method: InterpAllOptions = "linear", + method: InterpOptions = "linear", assume_sorted: bool = False, kwargs: Mapping[str, Any] | None = None, ) -> T_DataArray: @@ -2625,7 +2625,7 @@ def fillna(self: T_DataArray, value: Any) -> T_DataArray: def interpolate_na( self: T_DataArray, dim: Hashable | None = None, - method: InterpAllOptions = "linear", + method: InterpOptions = "linear", limit: int | None = None, use_coordinate: bool | str = True, max_gap: ( diff --git a/xarray/core/types.py b/xarray/core/types.py index 38d13c07c3c..e58588906a7 100644 --- a/xarray/core/types.py +++ b/xarray/core/types.py @@ -49,10 +49,10 @@ ] JoinOptions = Literal["outer", "inner", "left", "right", "exact", "override"] -InterpOptions = Literal["linear", "nearest", "zero", "slinear", "quadratic", "cubic"] -Interp1dOptions = Union[InterpOptions, Literal["polynomial"]] -InterpAllOptions = Union[ - Interp1dOptions, Literal["barycentric", "krog", "pchip", "spline", "akima"] +Interp1dOptions = Literal["linear", "nearest", "zero", "slinear", "quadratic", "cubic", "polynomial"] +InterpolantOptions = Literal["barycentric", "krog", "pchip", "spline", "akima"] +InterpOptions = Union[ + Interp1dOptions, InterpolantOptions ] DatetimeUnitOptions = Literal[ From a07f7dc535c9da2b0db9209f703175cfab273d85 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 28 May 2022 07:32:19 +0000 Subject: [PATCH 03/13] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- xarray/core/types.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/xarray/core/types.py b/xarray/core/types.py index e58588906a7..f4f86bafc93 100644 --- a/xarray/core/types.py +++ b/xarray/core/types.py @@ -49,11 +49,11 @@ ] JoinOptions = Literal["outer", "inner", "left", "right", "exact", "override"] -Interp1dOptions = Literal["linear", "nearest", "zero", "slinear", "quadratic", "cubic", "polynomial"] -InterpolantOptions = Literal["barycentric", "krog", "pchip", "spline", "akima"] -InterpOptions = Union[ - Interp1dOptions, InterpolantOptions +Interp1dOptions = Literal[ + "linear", "nearest", "zero", "slinear", "quadratic", "cubic", "polynomial" ] +InterpolantOptions = Literal["barycentric", "krog", "pchip", "spline", "akima"] +InterpOptions = Union[Interp1dOptions, InterpolantOptions] DatetimeUnitOptions = Literal[ "Y", "M", "W", "D", "h", "m", "s", "ms", "us", "ns", "ps", "fs", "as" From b0cc4e10dabc014e1a47ee8934c6cab61ce42ba6 Mon Sep 17 00:00:00 2001 From: Illviljan <14371165+Illviljan@users.noreply.github.com> Date: Sat, 28 May 2022 09:51:02 +0200 Subject: [PATCH 04/13] use the Literal lists in the interpolator checks --- xarray/core/missing.py | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/xarray/core/missing.py b/xarray/core/missing.py index 2e869dbe675..990f88a0187 100644 --- a/xarray/core/missing.py +++ b/xarray/core/missing.py @@ -4,7 +4,7 @@ import warnings from functools import partial from numbers import Number -from typing import TYPE_CHECKING, Any, Callable, Hashable, Sequence +from typing import TYPE_CHECKING, Any, Callable, Hashable, Sequence, get_args import numpy as np import pandas as pd @@ -18,6 +18,7 @@ from .pycompat import dask_version, is_duck_dask_array from .utils import OrderedSet, is_scalar from .variable import Variable, broadcast_variables +from .types import Interp1dOptions, InterpOptions if TYPE_CHECKING: from .dataarray import DataArray @@ -469,27 +470,13 @@ def _import_interpolant(interpolant, method): raise ImportError(f"Interpolation with method {method} requires scipy.") from e -def _get_interpolator(method, vectorizeable_only=False, **kwargs): +def _get_interpolator(method: InterpOptions, vectorizeable_only: bool =False, **kwargs): """helper function to select the appropriate interpolator class returns interpolator class and keyword arguments for the class """ - interp1d_methods = [ - "linear", - "nearest", - "zero", - "slinear", - "quadratic", - "cubic", - "polynomial", - ] - valid_methods = interp1d_methods + [ - "barycentric", - "krog", - "pchip", - "spline", - "akima", - ] + interp1d_methods = get_args(Interp1dOptions) + valid_methods = get_args(InterpOptions) # prioritize scipy.interpolate if ( From e52489cb53d5af34b7bec8f7d7a2b931eb162d23 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 28 May 2022 07:53:00 +0000 Subject: [PATCH 05/13] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- xarray/core/missing.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/xarray/core/missing.py b/xarray/core/missing.py index 990f88a0187..b0990bafe03 100644 --- a/xarray/core/missing.py +++ b/xarray/core/missing.py @@ -16,9 +16,9 @@ from .duck_array_ops import datetime_to_numeric, push, timedelta_to_numeric from .options import OPTIONS, _get_keep_attrs from .pycompat import dask_version, is_duck_dask_array +from .types import Interp1dOptions, InterpOptions from .utils import OrderedSet, is_scalar from .variable import Variable, broadcast_variables -from .types import Interp1dOptions, InterpOptions if TYPE_CHECKING: from .dataarray import DataArray @@ -470,7 +470,9 @@ def _import_interpolant(interpolant, method): raise ImportError(f"Interpolation with method {method} requires scipy.") from e -def _get_interpolator(method: InterpOptions, vectorizeable_only: bool =False, **kwargs): +def _get_interpolator( + method: InterpOptions, vectorizeable_only: bool = False, **kwargs +): """helper function to select the appropriate interpolator class returns interpolator class and keyword arguments for the class From 4a5e53a34b379092d4024e5207c9085ccd06b1d4 Mon Sep 17 00:00:00 2001 From: Illviljan <14371165+Illviljan@users.noreply.github.com> Date: Sat, 28 May 2022 10:12:11 +0200 Subject: [PATCH 06/13] Update missing.py --- xarray/core/missing.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/xarray/core/missing.py b/xarray/core/missing.py index 990f88a0187..acea365e9fe 100644 --- a/xarray/core/missing.py +++ b/xarray/core/missing.py @@ -4,7 +4,7 @@ import warnings from functools import partial from numbers import Number -from typing import TYPE_CHECKING, Any, Callable, Hashable, Sequence, get_args +from typing import TYPE_CHECKING, Any, Callable, Hashable, Sequence, Union, get_args import numpy as np import pandas as pd @@ -310,7 +310,7 @@ def interp_na( self, dim: Hashable = None, use_coordinate: bool | str = True, - method: str = "linear", + method: InterpOptions = "linear", limit: int = None, max_gap: int | float | str | pd.Timedelta | np.timedelta64 | dt.timedelta = None, keep_attrs: bool = None, @@ -475,6 +475,8 @@ def _get_interpolator(method: InterpOptions, vectorizeable_only: bool =False, ** returns interpolator class and keyword arguments for the class """ + interp_class: Union[NumpyInterpolator, ScipyInterpolator] + interp1d_methods = get_args(Interp1dOptions) valid_methods = get_args(InterpOptions) @@ -584,7 +586,7 @@ def _floatize_x(x, new_x): return x, new_x -def interp(var, indexes_coords, method, **kwargs): +def interp(var, indexes_coords, method: InterpOptions, **kwargs): """Make an interpolation of Variable Parameters @@ -647,7 +649,7 @@ def interp(var, indexes_coords, method, **kwargs): return result -def interp_func(var, x, new_x, method, kwargs): +def interp_func(var, x, new_x, method: InterpOptions, kwargs): """ multi-dimensional interpolation for array-like. Interpolated axes should be located in the last position. From 93837fba1b42ef32fdce4f98a95518835823b6c4 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 28 May 2022 08:14:00 +0000 Subject: [PATCH 07/13] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- xarray/core/missing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/core/missing.py b/xarray/core/missing.py index af17811b121..0527028da63 100644 --- a/xarray/core/missing.py +++ b/xarray/core/missing.py @@ -477,7 +477,7 @@ def _get_interpolator( returns interpolator class and keyword arguments for the class """ - interp_class: Union[NumpyInterpolator, ScipyInterpolator] + interp_class: NumpyInterpolator | ScipyInterpolator interp1d_methods = get_args(Interp1dOptions) valid_methods = get_args(InterpOptions) From 043ca5fd6e70860c9768ec6e9d3548590a2eaa56 Mon Sep 17 00:00:00 2001 From: Illviljan <14371165+Illviljan@users.noreply.github.com> Date: Sat, 28 May 2022 10:27:34 +0200 Subject: [PATCH 08/13] more fixes --- xarray/core/dataset.py | 3 ++- xarray/core/missing.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/xarray/core/dataset.py b/xarray/core/dataset.py index c5c727f4bed..aa85f99d430 100644 --- a/xarray/core/dataset.py +++ b/xarray/core/dataset.py @@ -109,6 +109,7 @@ CompatOptions, ErrorOptions, ErrorOptionsWithWarn, + InterpOptions, JoinOptions, PadModeOptions, PadReflectOptions, @@ -3037,7 +3038,7 @@ def _reindex( def interp( self, coords: Mapping[Any, Any] = None, - method: str = "linear", + method: InterpOptions = "linear", assume_sorted: bool = False, kwargs: Mapping[str, Any] = None, method_non_numeric: str = "nearest", diff --git a/xarray/core/missing.py b/xarray/core/missing.py index 0527028da63..4abc27f1fbf 100644 --- a/xarray/core/missing.py +++ b/xarray/core/missing.py @@ -477,7 +477,7 @@ def _get_interpolator( returns interpolator class and keyword arguments for the class """ - interp_class: NumpyInterpolator | ScipyInterpolator + interp_class: type[NumpyInterpolator] | type[ScipyInterpolator] interp1d_methods = get_args(Interp1dOptions) valid_methods = get_args(InterpOptions) From 4653e589e3cd6a460d035c62be9b314a1a456ddb Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 28 May 2022 08:29:09 +0000 Subject: [PATCH 09/13] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- xarray/core/missing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/core/missing.py b/xarray/core/missing.py index 4abc27f1fbf..393367eba37 100644 --- a/xarray/core/missing.py +++ b/xarray/core/missing.py @@ -4,7 +4,7 @@ import warnings from functools import partial from numbers import Number -from typing import TYPE_CHECKING, Any, Callable, Hashable, Sequence, Union, get_args +from typing import TYPE_CHECKING, Any, Callable, Hashable, Sequence, get_args import numpy as np import pandas as pd From 5af2fe31e9742854747acf6d9d6ebe4331a0f07e Mon Sep 17 00:00:00 2001 From: Illviljan <14371165+Illviljan@users.noreply.github.com> Date: Sat, 28 May 2022 10:45:13 +0200 Subject: [PATCH 10/13] more fixes --- xarray/core/dataset.py | 2 +- xarray/core/missing.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/xarray/core/dataset.py b/xarray/core/dataset.py index aa85f99d430..084437e102c 100644 --- a/xarray/core/dataset.py +++ b/xarray/core/dataset.py @@ -3299,7 +3299,7 @@ def _validate_interp_indexer(x, new_x): def interp_like( self, other: Dataset | DataArray, - method: str = "linear", + method: InterpOptions = "linear", assume_sorted: bool = False, kwargs: Mapping[str, Any] = None, method_non_numeric: str = "nearest", diff --git a/xarray/core/missing.py b/xarray/core/missing.py index 4abc27f1fbf..cfd9a0253cc 100644 --- a/xarray/core/missing.py +++ b/xarray/core/missing.py @@ -641,7 +641,7 @@ def interp(var, indexes_coords, method: InterpOptions, **kwargs): result = Variable(new_dims, interped, attrs=var.attrs) # dimension of the output array - out_dims = OrderedSet() + out_dims: OrderedSet = OrderedSet() for d in var.dims: if d in dims: out_dims.update(indexes_coords[d][1].dims) From 4dc66286611bd579487004a0ce8d77d77947812f Mon Sep 17 00:00:00 2001 From: Illviljan <14371165+Illviljan@users.noreply.github.com> Date: Sat, 28 May 2022 11:32:19 +0200 Subject: [PATCH 11/13] Get the args of Literals that's inside of the Union --- xarray/core/missing.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xarray/core/missing.py b/xarray/core/missing.py index 02f2a977929..2bcabe081cb 100644 --- a/xarray/core/missing.py +++ b/xarray/core/missing.py @@ -477,10 +477,10 @@ def _get_interpolator( returns interpolator class and keyword arguments for the class """ - interp_class: type[NumpyInterpolator] | type[ScipyInterpolator] + interp_class: type[NumpyInterpolator] | type[ScipyInterpolator] | Type[SplineInterpolator] interp1d_methods = get_args(Interp1dOptions) - valid_methods = get_args(InterpOptions) + valid_methods = tuple(vv for v in get_args(InterpOptions) for vv in get_args(v)) # prioritize scipy.interpolate if ( From acff97f9ae6bc8c36ff9ed3e8f9569d29171e54d Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 28 May 2022 09:33:56 +0000 Subject: [PATCH 12/13] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- xarray/core/missing.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/xarray/core/missing.py b/xarray/core/missing.py index 2bcabe081cb..698d767ed6e 100644 --- a/xarray/core/missing.py +++ b/xarray/core/missing.py @@ -477,7 +477,9 @@ def _get_interpolator( returns interpolator class and keyword arguments for the class """ - interp_class: type[NumpyInterpolator] | type[ScipyInterpolator] | Type[SplineInterpolator] + interp_class: type[NumpyInterpolator] | type[ScipyInterpolator] | Type[ + SplineInterpolator + ] interp1d_methods = get_args(Interp1dOptions) valid_methods = tuple(vv for v in get_args(InterpOptions) for vv in get_args(v)) From b254513817b8b8cfbf62868e49b92ea8800e9729 Mon Sep 17 00:00:00 2001 From: Illviljan <14371165+Illviljan@users.noreply.github.com> Date: Sat, 28 May 2022 12:02:30 +0200 Subject: [PATCH 13/13] Update missing.py --- xarray/core/missing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/core/missing.py b/xarray/core/missing.py index 2bcabe081cb..81966534355 100644 --- a/xarray/core/missing.py +++ b/xarray/core/missing.py @@ -477,7 +477,7 @@ def _get_interpolator( returns interpolator class and keyword arguments for the class """ - interp_class: type[NumpyInterpolator] | type[ScipyInterpolator] | Type[SplineInterpolator] + interp_class: type[NumpyInterpolator] | type[ScipyInterpolator] | type[SplineInterpolator] interp1d_methods = get_args(Interp1dOptions) valid_methods = tuple(vv for v in get_args(InterpOptions) for vv in get_args(v))