From 8497d91bc3d8489501bd9291a9d1bc114bbc5737 Mon Sep 17 00:00:00 2001 From: Illviljan <14371165+Illviljan@users.noreply.github.com> Date: Sat, 15 May 2021 12:36:26 +0200 Subject: [PATCH 1/6] optional import versions to pycompat --- xarray/core/dask_array_compat.py | 11 +++++------ xarray/core/indexing.py | 10 ++-------- xarray/core/pycompat.py | 11 ++++++++++- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/xarray/core/dask_array_compat.py b/xarray/core/dask_array_compat.py index 9f24590af8e..c0b99d430d4 100644 --- a/xarray/core/dask_array_compat.py +++ b/xarray/core/dask_array_compat.py @@ -1,13 +1,12 @@ import warnings -from distutils.version import LooseVersion import numpy as np +from .pycompat import dask_version + try: import dask.array as da - from dask import __version__ as dask_version except ImportError: - dask_version = "0.0.0" da = None @@ -57,7 +56,7 @@ def pad(array, pad_width, mode="constant", **kwargs): return padded -if LooseVersion(dask_version) > LooseVersion("2.30.0"): +if dask_version > "2.30.0": ensure_minimum_chunksize = da.overlap.ensure_minimum_chunksize else: @@ -114,7 +113,7 @@ def ensure_minimum_chunksize(size, chunks): return tuple(output) -if LooseVersion(dask_version) > LooseVersion("2021.03.0"): +if dask_version > "2021.03.0": sliding_window_view = da.lib.stride_tricks.sliding_window_view else: @@ -180,7 +179,7 @@ def sliding_window_view(x, window_shape, axis=None): axis=axis, ) # map_overlap's signature changed in https://github.com/dask/dask/pull/6165 - if LooseVersion(dask_version) > "2.18.0": + if dask_version > "2.18.0": return map_overlap(_np_sliding_window_view, x, align_arrays=False, **kwargs) else: return map_overlap(x, _np_sliding_window_view, **kwargs) diff --git a/xarray/core/indexing.py b/xarray/core/indexing.py index 76a0c6888b2..81e4264a0c5 100644 --- a/xarray/core/indexing.py +++ b/xarray/core/indexing.py @@ -8,16 +8,10 @@ import numpy as np import pandas as pd -try: - import dask - - DASK_VERSION = LooseVersion(dask.__version__) -except ModuleNotFoundError: - DASK_VERSION = LooseVersion("0") - from . import duck_array_ops, nputils, utils from .pycompat import ( dask_array_type, + dask_version, integer_types, is_duck_dask_array, sparse_array_type, @@ -1393,7 +1387,7 @@ def __getitem__(self, key): return value def __setitem__(self, key, value): - if DASK_VERSION >= "2021.04.1": + if dask_version >= "2021.04.1": if isinstance(key, BasicIndexer): self.array[key.tuple] = value elif isinstance(key, VectorizedIndexer): diff --git a/xarray/core/pycompat.py b/xarray/core/pycompat.py index 8d613038957..19801536b61 100644 --- a/xarray/core/pycompat.py +++ b/xarray/core/pycompat.py @@ -1,3 +1,5 @@ +from distutils.version import LooseVersion + import numpy as np from .utils import is_duck_array @@ -5,9 +7,11 @@ integer_types = (int, np.integer) try: - import dask.array + import dask from dask.base import is_dask_collection + dask_version = LooseVersion(dask.__version__) + # solely for isinstance checks dask_array_type = (dask.array.Array,) @@ -16,6 +20,7 @@ def is_duck_dask_array(x): except ImportError: # pragma: no cover + dask_version = LooseVersion("0.0.0") dask_array_type = () is_duck_dask_array = lambda _: False is_dask_collection = lambda _: False @@ -24,14 +29,18 @@ def is_duck_dask_array(x): # solely for isinstance checks import sparse + sparse_version = LooseVersion(sparse.__version__) sparse_array_type = (sparse.SparseArray,) except ImportError: # pragma: no cover + sparse_version = LooseVersion("0.0.0") sparse_array_type = () try: # solely for isinstance checks import cupy + cupy_version = LooseVersion(sparse.__version__) cupy_array_type = (cupy.ndarray,) except ImportError: # pragma: no cover + cupy_version = LooseVersion("0.0.0") cupy_array_type = () From 2c119485b95a9aa6c80521b4a2f23f2546779fdb Mon Sep 17 00:00:00 2001 From: Illviljan <14371165+Illviljan@users.noreply.github.com> Date: Sat, 15 May 2021 12:44:14 +0200 Subject: [PATCH 2/6] Update indexing.py --- xarray/core/indexing.py | 1 - 1 file changed, 1 deletion(-) diff --git a/xarray/core/indexing.py b/xarray/core/indexing.py index 81e4264a0c5..cd8dcb9ad3c 100644 --- a/xarray/core/indexing.py +++ b/xarray/core/indexing.py @@ -2,7 +2,6 @@ import functools import operator from collections import defaultdict -from distutils.version import LooseVersion from typing import Any, Callable, Iterable, List, Sequence, Tuple, Union import numpy as np From aeea5ccd934d6781fbc2dae6d0d331ba18284e86 Mon Sep 17 00:00:00 2001 From: Illviljan <14371165+Illviljan@users.noreply.github.com> Date: Sat, 15 May 2021 13:02:37 +0200 Subject: [PATCH 3/6] move dtypes to avoid circular import --- xarray/core/utils.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/xarray/core/utils.py b/xarray/core/utils.py index 62b66278b24..98d558008f2 100644 --- a/xarray/core/utils.py +++ b/xarray/core/utils.py @@ -31,8 +31,6 @@ import numpy as np import pandas as pd -from . import dtypes - K = TypeVar("K") V = TypeVar("V") T = TypeVar("T") @@ -83,9 +81,10 @@ def maybe_coerce_to_str(index, original_coords): pd.Index uses object-dtype to store str - try to avoid this for coords """ + from .dtypes import result_type as dtypes_result_type try: - result_type = dtypes.result_type(*original_coords) + result_type = dtypes_result_type(*original_coords) except TypeError: pass else: From 8fa535c3ab7c4a6dd8fc2fd9db04450bb8a5f0ab Mon Sep 17 00:00:00 2001 From: Illviljan <14371165+Illviljan@users.noreply.github.com> Date: Sat, 15 May 2021 13:11:29 +0200 Subject: [PATCH 4/6] Update pycompat.py --- xarray/core/pycompat.py | 1 + 1 file changed, 1 insertion(+) diff --git a/xarray/core/pycompat.py b/xarray/core/pycompat.py index 19801536b61..fbe53e2a435 100644 --- a/xarray/core/pycompat.py +++ b/xarray/core/pycompat.py @@ -8,6 +8,7 @@ try: import dask + import dask.array from dask.base import is_dask_collection dask_version = LooseVersion(dask.__version__) From 8f15a28ed9743437e0be97a7c4015479fce0a420 Mon Sep 17 00:00:00 2001 From: Illviljan <14371165+Illviljan@users.noreply.github.com> Date: Sat, 15 May 2021 18:19:29 +0200 Subject: [PATCH 5/6] cupy.__version__ --- xarray/core/pycompat.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/core/pycompat.py b/xarray/core/pycompat.py index fbe53e2a435..9f47da6c8cc 100644 --- a/xarray/core/pycompat.py +++ b/xarray/core/pycompat.py @@ -40,7 +40,7 @@ def is_duck_dask_array(x): # solely for isinstance checks import cupy - cupy_version = LooseVersion(sparse.__version__) + cupy_version = LooseVersion(cupy.__version__) cupy_array_type = (cupy.ndarray,) except ImportError: # pragma: no cover cupy_version = LooseVersion("0.0.0") From b41c11322fd9dd89beb57024c703c4724e32bc8c Mon Sep 17 00:00:00 2001 From: Illviljan <14371165+Illviljan@users.noreply.github.com> Date: Sun, 16 May 2021 06:36:18 +0200 Subject: [PATCH 6/6] import whole dtypes --- xarray/core/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xarray/core/utils.py b/xarray/core/utils.py index 98d558008f2..52621f3d922 100644 --- a/xarray/core/utils.py +++ b/xarray/core/utils.py @@ -81,10 +81,10 @@ def maybe_coerce_to_str(index, original_coords): pd.Index uses object-dtype to store str - try to avoid this for coords """ - from .dtypes import result_type as dtypes_result_type + from . import dtypes try: - result_type = dtypes_result_type(*original_coords) + result_type = dtypes.result_type(*original_coords) except TypeError: pass else: