From 7b78dd85fc06eb635b278ff432184d99e14a6900 Mon Sep 17 00:00:00 2001 From: Guido Imperiale Date: Fri, 9 Aug 2019 10:08:04 +0100 Subject: [PATCH 1/6] One-off, manually vetted and tweaked isort run --- xarray/backends/api.py | 11 +++++------ xarray/core/alignment.py | 2 +- xarray/core/combine.py | 4 ++-- xarray/core/computation.py | 2 +- xarray/core/concat.py | 2 +- xarray/core/coordinates.py | 2 +- xarray/core/dataarray.py | 6 +++--- xarray/core/dataset.py | 6 +++--- xarray/core/groupby.py | 2 +- xarray/core/indexing.py | 2 +- xarray/core/merge.py | 2 +- xarray/core/npcompat.py | 2 +- xarray/core/pdcompat.py | 1 + xarray/core/variable.py | 2 +- xarray/testing.py | 5 ++--- xarray/tests/__init__.py | 2 +- xarray/tests/test_backends.py | 4 ++-- xarray/tests/test_coding_times.py | 2 +- xarray/tests/test_combine.py | 18 ++++++++++++------ xarray/tests/test_concat.py | 1 + xarray/tests/test_dataset.py | 2 +- xarray/tests/test_duck_array_ops.py | 2 +- xarray/tests/test_formatting.py | 2 +- xarray/tests/test_sparse.py | 24 +++++++----------------- 24 files changed, 52 insertions(+), 56 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index 8d5f7f05a9f..f1f5196a2b7 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -6,6 +6,7 @@ from pathlib import Path from textwrap import dedent from typing import ( + TYPE_CHECKING, Callable, Dict, Hashable, @@ -13,21 +14,19 @@ Mapping, Tuple, Union, - TYPE_CHECKING, ) import numpy as np -from .. import Dataset, DataArray, backends, conventions, coding +from .. import DataArray, Dataset, auto_combine, backends, coding, conventions from ..core import indexing -from .. import auto_combine from ..core.combine import ( - combine_by_coords, - _nested_combine, _infer_concat_order_from_positions, + _nested_combine, + combine_by_coords, ) from ..core.utils import close_on_error, is_grib_path, is_remote_uri -from .common import ArrayWriter, AbstractDataStore +from .common import AbstractDataStore, ArrayWriter from .locks import _get_scheduler if TYPE_CHECKING: diff --git a/xarray/core/alignment.py b/xarray/core/alignment.py index 56f060fd713..3214ff448c5 100644 --- a/xarray/core/alignment.py +++ b/xarray/core/alignment.py @@ -3,7 +3,7 @@ import warnings from collections import OrderedDict, defaultdict from contextlib import suppress -from typing import Any, Dict, Hashable, Mapping, Optional, Tuple, Union, TYPE_CHECKING +from typing import TYPE_CHECKING, Any, Dict, Hashable, Mapping, Optional, Tuple, Union import numpy as np import pandas as pd diff --git a/xarray/core/combine.py b/xarray/core/combine.py index 740cb68c862..39a59469636 100644 --- a/xarray/core/combine.py +++ b/xarray/core/combine.py @@ -5,10 +5,10 @@ import pandas as pd +from . import dtypes +from .concat import concat from .dataarray import DataArray from .dataset import Dataset -from .concat import concat -from . import dtypes from .merge import merge diff --git a/xarray/core/computation.py b/xarray/core/computation.py index ee47f3593c4..8f6f166adb0 100644 --- a/xarray/core/computation.py +++ b/xarray/core/computation.py @@ -7,6 +7,7 @@ from collections import Counter, OrderedDict from distutils.version import LooseVersion from typing import ( + TYPE_CHECKING, AbstractSet, Any, Callable, @@ -17,7 +18,6 @@ Sequence, Tuple, Union, - TYPE_CHECKING, ) import numpy as np diff --git a/xarray/core/concat.py b/xarray/core/concat.py index 19609308e78..40f27366102 100644 --- a/xarray/core/concat.py +++ b/xarray/core/concat.py @@ -3,7 +3,7 @@ import pandas as pd -from . import utils, dtypes +from . import dtypes, utils from .alignment import align from .variable import IndexVariable, Variable, as_variable from .variable import concat as concat_vars diff --git a/xarray/core/coordinates.py b/xarray/core/coordinates.py index 38b4540cc4e..8dabca56561 100644 --- a/xarray/core/coordinates.py +++ b/xarray/core/coordinates.py @@ -1,7 +1,7 @@ import collections.abc from collections import OrderedDict from contextlib import contextmanager -from typing import Any, Hashable, Mapping, Iterator, Union, TYPE_CHECKING +from typing import TYPE_CHECKING, Any, Hashable, Iterator, Mapping, Union import pandas as pd diff --git a/xarray/core/dataarray.py b/xarray/core/dataarray.py index 33be8d96e91..a614488a165 100644 --- a/xarray/core/dataarray.py +++ b/xarray/core/dataarray.py @@ -4,6 +4,7 @@ from collections import OrderedDict from numbers import Number from typing import ( + TYPE_CHECKING, Any, Callable, Dict, @@ -17,7 +18,6 @@ Union, cast, overload, - TYPE_CHECKING, ) import numpy as np @@ -38,9 +38,9 @@ from .accessor_dt import DatetimeAccessor from .accessor_str import StringAccessor from .alignment import ( - align, _broadcast_helper, _get_broadcast_dims_map_common_coords, + align, reindex_like_indexers, ) from .common import AbstractArray, DataWithCoords @@ -54,7 +54,7 @@ from .formatting import format_item from .indexes import Indexes, default_indexes from .options import OPTIONS -from .utils import _check_inplace, either_dict_or_kwargs, ReprObject +from .utils import ReprObject, _check_inplace, either_dict_or_kwargs from .variable import ( IndexVariable, Variable, diff --git a/xarray/core/dataset.py b/xarray/core/dataset.py index a85f015cfa8..bc5e09f4fb7 100644 --- a/xarray/core/dataset.py +++ b/xarray/core/dataset.py @@ -7,6 +7,7 @@ from numbers import Number from pathlib import Path from typing import ( + TYPE_CHECKING, Any, Callable, DefaultDict, @@ -24,7 +25,6 @@ Union, cast, overload, - TYPE_CHECKING, ) import numpy as np @@ -32,6 +32,7 @@ import xarray as xr from ..coding.cftimeindex import _parse_array_of_cftime_strings +from ..plot.dataset_plot import _Dataset_PlotMethods from . import ( alignment, dtypes, @@ -45,7 +46,7 @@ rolling, utils, ) -from .alignment import align, _broadcast_helper, _get_broadcast_dims_map_common_coords +from .alignment import _broadcast_helper, _get_broadcast_dims_map_common_coords, align from .common import ( ALL_DIMS, DataWithCoords, @@ -78,7 +79,6 @@ maybe_wrap_array, ) from .variable import IndexVariable, Variable, as_variable, broadcast_variables -from ..plot.dataset_plot import _Dataset_PlotMethods if TYPE_CHECKING: from ..backends import AbstractDataStore, ZarrStore diff --git a/xarray/core/groupby.py b/xarray/core/groupby.py index a0d260c3f33..87d39129deb 100644 --- a/xarray/core/groupby.py +++ b/xarray/core/groupby.py @@ -7,8 +7,8 @@ from . import dtypes, duck_array_ops, nputils, ops, utils from .arithmetic import SupportsArithmetic -from .concat import concat from .common import ALL_DIMS, ImplementsArrayReduce, ImplementsDatasetReduce +from .concat import concat from .options import _get_keep_attrs from .pycompat import integer_types from .utils import hashable, maybe_wrap_array, peek_at, safe_cast_to_index diff --git a/xarray/core/indexing.py b/xarray/core/indexing.py index a6edb0a9562..725cd3c6e18 100644 --- a/xarray/core/indexing.py +++ b/xarray/core/indexing.py @@ -3,7 +3,7 @@ from collections import defaultdict from contextlib import suppress from datetime import timedelta -from typing import Any, Tuple, Sequence, Union +from typing import Any, Sequence, Tuple, Union import numpy as np import pandas as pd diff --git a/xarray/core/merge.py b/xarray/core/merge.py index b8d9e1a795c..4da1ba245d3 100644 --- a/xarray/core/merge.py +++ b/xarray/core/merge.py @@ -1,5 +1,6 @@ from collections import OrderedDict from typing import ( + TYPE_CHECKING, Any, Dict, Hashable, @@ -11,7 +12,6 @@ Set, Tuple, Union, - TYPE_CHECKING, ) import pandas as pd diff --git a/xarray/core/npcompat.py b/xarray/core/npcompat.py index ecaadae726e..22c14d9ff40 100644 --- a/xarray/core/npcompat.py +++ b/xarray/core/npcompat.py @@ -29,10 +29,10 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. import builtins +import operator from distutils.version import LooseVersion from typing import Union -import operator import numpy as np try: diff --git a/xarray/core/pdcompat.py b/xarray/core/pdcompat.py index 654a43b505e..2fd4310016b 100644 --- a/xarray/core/pdcompat.py +++ b/xarray/core/pdcompat.py @@ -38,6 +38,7 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. from distutils.version import LooseVersion + import numpy as np import pandas as pd diff --git a/xarray/core/variable.py b/xarray/core/variable.py index 41f2a64ed55..ca7350daf0a 100644 --- a/xarray/core/variable.py +++ b/xarray/core/variable.py @@ -18,9 +18,9 @@ VectorizedIndexer, as_indexable, ) +from .npcompat import IS_NEP18_ACTIVE from .options import _get_keep_attrs from .pycompat import dask_array_type, integer_types -from .npcompat import IS_NEP18_ACTIVE from .utils import ( OrderedSet, decode_numpy_dict_values, diff --git a/xarray/testing.py b/xarray/testing.py index 3c92eef04c6..fbb5904c678 100644 --- a/xarray/testing.py +++ b/xarray/testing.py @@ -5,12 +5,11 @@ import numpy as np import pandas as pd -from xarray.core import duck_array_ops -from xarray.core import formatting +from xarray.core import duck_array_ops, formatting from xarray.core.dataarray import DataArray from xarray.core.dataset import Dataset -from xarray.core.variable import IndexVariable, Variable from xarray.core.indexes import default_indexes +from xarray.core.variable import IndexVariable, Variable def _decode_string_data(data): diff --git a/xarray/tests/__init__.py b/xarray/tests/__init__.py index 044ba75e87f..fb4f8200e08 100644 --- a/xarray/tests/__init__.py +++ b/xarray/tests/__init__.py @@ -1,4 +1,5 @@ import importlib +import platform import re import warnings from contextlib import contextmanager @@ -32,7 +33,6 @@ except ImportError: pass -import platform arm_xfail = pytest.mark.xfail( platform.machine() == "aarch64" or "arm" in platform.machine(), diff --git a/xarray/tests/test_backends.py b/xarray/tests/test_backends.py index 83ff832f7fd..375b71d3ba3 100644 --- a/xarray/tests/test_backends.py +++ b/xarray/tests/test_backends.py @@ -38,6 +38,7 @@ from xarray.tests import mock from . import ( + arm_xfail, assert_allclose, assert_array_equal, assert_equal, @@ -61,14 +62,13 @@ requires_scipy, requires_scipy_or_netCDF4, requires_zarr, - arm_xfail, ) from .test_coding_times import ( _ALL_CALENDARS, _NON_STANDARD_CALENDARS, _STANDARD_CALENDARS, ) -from .test_dataset import create_test_data, create_append_test_data +from .test_dataset import create_append_test_data, create_test_data try: import netCDF4 as nc4 diff --git a/xarray/tests/test_coding_times.py b/xarray/tests/test_coding_times.py index ab5ed20d531..615a7e00172 100644 --- a/xarray/tests/test_coding_times.py +++ b/xarray/tests/test_coding_times.py @@ -19,13 +19,13 @@ from xarray.testing import assert_equal from . import ( + arm_xfail, assert_array_equal, has_cftime, has_cftime_or_netCDF4, has_dask, requires_cftime, requires_cftime_or_netCDF4, - arm_xfail, ) try: diff --git a/xarray/tests/test_combine.py b/xarray/tests/test_combine.py index e3801d02bc8..f786a851e62 100644 --- a/xarray/tests/test_combine.py +++ b/xarray/tests/test_combine.py @@ -1,23 +1,29 @@ from collections import OrderedDict -from itertools import product from datetime import datetime +from itertools import product import numpy as np import pytest -from xarray import DataArray, Dataset, concat, combine_by_coords, combine_nested -from xarray import auto_combine +from xarray import ( + DataArray, + Dataset, + auto_combine, + combine_by_coords, + combine_nested, + concat, +) from xarray.core import dtypes from xarray.core.combine import ( - _new_tile_id, _check_shape_tile_ids, _combine_all_along_first_dim, _combine_nd, - _infer_concat_order_from_positions, _infer_concat_order_from_coords, + _infer_concat_order_from_positions, + _new_tile_id, ) -from . import assert_identical, assert_equal, raises_regex +from . import assert_equal, assert_identical, raises_regex from .test_dataset import create_test_data diff --git a/xarray/tests/test_concat.py b/xarray/tests/test_concat.py index d16ebeeb53d..c82824941ad 100644 --- a/xarray/tests/test_concat.py +++ b/xarray/tests/test_concat.py @@ -6,6 +6,7 @@ from xarray import DataArray, Dataset, Variable, concat from xarray.core import dtypes + from . import ( InaccessibleArray, assert_array_equal, diff --git a/xarray/tests/test_dataset.py b/xarray/tests/test_dataset.py index 75325a77b36..d79d4e46029 100644 --- a/xarray/tests/test_dataset.py +++ b/xarray/tests/test_dataset.py @@ -30,8 +30,8 @@ from xarray.core.pycompat import integer_types from . import ( - LooseVersion, InaccessibleArray, + LooseVersion, UnexpectedDataAccess, assert_allclose, assert_array_equal, diff --git a/xarray/tests/test_duck_array_ops.py b/xarray/tests/test_duck_array_ops.py index ec63c9651eb..725cfe3d506 100644 --- a/xarray/tests/test_duck_array_ops.py +++ b/xarray/tests/test_duck_array_ops.py @@ -25,13 +25,13 @@ from xarray.testing import assert_allclose, assert_equal from . import ( + arm_xfail, assert_array_equal, has_dask, has_np113, raises_regex, requires_cftime, requires_dask, - arm_xfail, ) diff --git a/xarray/tests/test_formatting.py b/xarray/tests/test_formatting.py index 02b13fd5e0e..38e7cb10227 100644 --- a/xarray/tests/test_formatting.py +++ b/xarray/tests/test_formatting.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -from textwrap import dedent import sys +from textwrap import dedent import numpy as np import pandas as pd diff --git a/xarray/tests/test_sparse.py b/xarray/tests/test_sparse.py index 4014d8a66e6..a7800f43570 100644 --- a/xarray/tests/test_sparse.py +++ b/xarray/tests/test_sparse.py @@ -1,27 +1,17 @@ -from collections import OrderedDict -from contextlib import suppress -from distutils.version import LooseVersion -from textwrap import dedent import pickle +from textwrap import dedent + import numpy as np import pandas as pd +import pytest -from xarray import DataArray, Dataset, Variable -from xarray.tests import mock -from xarray.core.npcompat import IS_NEP18_ACTIVE import xarray as xr import xarray.ufuncs as xu +from xarray import Variable +from xarray.core.npcompat import IS_NEP18_ACTIVE -from . import ( - assert_allclose, - assert_array_equal, - assert_equal, - assert_frame_equal, - assert_identical, - raises_regex, -) +from . import assert_equal, assert_identical -import pytest param = pytest.param xfail = pytest.mark.xfail @@ -32,8 +22,8 @@ ) sparse = pytest.importorskip("sparse") -from sparse.utils import assert_eq as assert_sparse_eq # noqa from sparse import COO, SparseArray # noqa +from sparse.utils import assert_eq as assert_sparse_eq # noqa def make_ndarray(shape): From 7ee63cc98e34b85d7ae1afe8f18a69d638eb8730 Mon Sep 17 00:00:00 2001 From: Guido Imperiale Date: Fri, 9 Aug 2019 10:10:26 +0100 Subject: [PATCH 2/6] More isort tweaks --- asv_bench/benchmarks/combine.py | 1 + xarray/core/dask_array_compat.py | 1 - xarray/core/dataset.py | 1 + xarray/core/pdcompat.py | 1 - xarray/core/utils.py | 1 - xarray/tests/test_sparse.py | 1 - 6 files changed, 2 insertions(+), 4 deletions(-) diff --git a/asv_bench/benchmarks/combine.py b/asv_bench/benchmarks/combine.py index 9314361e998..aa9662d44f9 100644 --- a/asv_bench/benchmarks/combine.py +++ b/asv_bench/benchmarks/combine.py @@ -1,4 +1,5 @@ import numpy as np + import xarray as xr diff --git a/xarray/core/dask_array_compat.py b/xarray/core/dask_array_compat.py index 5d4ff849b57..fe2cdc5c553 100644 --- a/xarray/core/dask_array_compat.py +++ b/xarray/core/dask_array_compat.py @@ -4,7 +4,6 @@ import numpy as np from dask import __version__ as dask_version - try: blockwise = da.blockwise except AttributeError: diff --git a/xarray/core/dataset.py b/xarray/core/dataset.py index bc5e09f4fb7..76ea099fe21 100644 --- a/xarray/core/dataset.py +++ b/xarray/core/dataset.py @@ -29,6 +29,7 @@ import numpy as np import pandas as pd + import xarray as xr from ..coding.cftimeindex import _parse_array_of_cftime_strings diff --git a/xarray/core/pdcompat.py b/xarray/core/pdcompat.py index 2fd4310016b..91998482e3e 100644 --- a/xarray/core/pdcompat.py +++ b/xarray/core/pdcompat.py @@ -42,7 +42,6 @@ import numpy as np import pandas as pd - # allow ourselves to type checks for Panel even after it's removed if LooseVersion(pd.__version__) < "0.25.0": Panel = pd.Panel diff --git a/xarray/core/utils.py b/xarray/core/utils.py index 4541049d7e1..4c59da62d02 100644 --- a/xarray/core/utils.py +++ b/xarray/core/utils.py @@ -31,7 +31,6 @@ from .pycompat import dask_array_type - K = TypeVar("K") V = TypeVar("V") T = TypeVar("T") diff --git a/xarray/tests/test_sparse.py b/xarray/tests/test_sparse.py index a7800f43570..4a18ceb13fd 100644 --- a/xarray/tests/test_sparse.py +++ b/xarray/tests/test_sparse.py @@ -12,7 +12,6 @@ from . import assert_equal, assert_identical - param = pytest.param xfail = pytest.mark.xfail From 7902f154c494415da4e037b8bbe9e3d2ed8292a3 Mon Sep 17 00:00:00 2001 From: Guido Imperiale Date: Fri, 9 Aug 2019 10:16:28 +0100 Subject: [PATCH 3/6] Resilience to isort --- xarray/tests/test_sparse.py | 70 ++++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 32 deletions(-) diff --git a/xarray/tests/test_sparse.py b/xarray/tests/test_sparse.py index 4a18ceb13fd..500d3dda00a 100644 --- a/xarray/tests/test_sparse.py +++ b/xarray/tests/test_sparse.py @@ -21,8 +21,6 @@ ) sparse = pytest.importorskip("sparse") -from sparse import COO, SparseArray # noqa -from sparse.utils import assert_eq as assert_sparse_eq # noqa def make_ndarray(shape): @@ -228,7 +226,7 @@ def test_variable_method(func, sparse_output): ret_d = func(var_d) if sparse_output: - assert isinstance(ret_s.data, SparseArray) + assert isinstance(ret_s.data, sparse.SparseArray) assert np.allclose(ret_s.data.todense(), ret_d.data, equal_nan=True) else: assert np.allclose(ret_s, ret_d, equal_nan=True) @@ -254,7 +252,7 @@ def test_1d_variable_method(func, sparse_output): ret_d = func(var_d) if sparse_output: - assert isinstance(ret_s.data, SparseArray) + assert isinstance(ret_s.data, sparse.SparseArray) assert np.allclose(ret_s.data.todense(), ret_d.data) else: assert np.allclose(ret_s, ret_d) @@ -267,16 +265,16 @@ def setUp(self): self.var = xr.Variable(("x", "y"), self.data) def test_unary_op(self): - assert_sparse_eq(-self.var.data, -self.data) - assert_sparse_eq(abs(self.var).data, abs(self.data)) - assert_sparse_eq(self.var.round().data, self.data.round()) + sparse.utils.assert_eq(-self.var.data, -self.data) + sparse.utils.assert_eq(abs(self.var).data, abs(self.data)) + sparse.utils.assert_eq(self.var.round().data, self.data.round()) def test_univariate_ufunc(self): - assert_sparse_eq(np.sin(self.data), xu.sin(self.var).data) + sparse.utils.assert_eq(np.sin(self.data), xu.sin(self.var).data) def test_bivariate_ufunc(self): - assert_sparse_eq(np.maximum(self.data, 0), xu.maximum(self.var, 0).data) - assert_sparse_eq(np.maximum(self.data, 0), xu.maximum(0, self.var).data) + sparse.utils.assert_eq(np.maximum(self.data, 0), xu.maximum(self.var, 0).data) + sparse.utils.assert_eq(np.maximum(self.data, 0), xu.maximum(0, self.var).data) def test_repr(self): expected = dedent( @@ -289,12 +287,12 @@ def test_repr(self): def test_pickle(self): v1 = self.var v2 = pickle.loads(pickle.dumps(v1)) - assert_sparse_eq(v1.data, v2.data) + sparse.utils.assert_eq(v1.data, v2.data) @pytest.mark.xfail(reason="Missing implementation for np.result_type") def test_missing_values(self): a = np.array([0, 1, np.nan, 3]) - s = COO.from_numpy(a) + s = sparse.COO.from_numpy(a) var_s = Variable("x", s) assert np.all(var_s.fillna(2).data.todense() == np.arange(4)) assert np.all(var_s.count() == 3) @@ -544,7 +542,7 @@ def test_dataarray_method(func, sparse_output): ret_d = func(arr_d) if sparse_output: - assert isinstance(ret_s.data, SparseArray) + assert isinstance(ret_s.data, sparse.SparseArray) assert np.allclose(ret_s.data.todense(), ret_d.data, equal_nan=True) else: assert np.allclose(ret_s, ret_d, equal_nan=True) @@ -568,7 +566,7 @@ def test_datarray_1d_method(func, sparse_output): ret_d = func(arr_d) if sparse_output: - assert isinstance(ret_s.data, SparseArray) + assert isinstance(ret_s.data, sparse.SparseArray) assert np.allclose(ret_s.data.todense(), ret_d.data, equal_nan=True) else: assert np.allclose(ret_s, ret_d, equal_nan=True) @@ -593,10 +591,14 @@ def test_to_dataset_roundtrip(self): def test_align(self): a1 = xr.DataArray( - COO.from_numpy(np.arange(4)), dims=["x"], coords={"x": ["a", "b", "c", "d"]} + sparse.COO.from_numpy(np.arange(4)), + dims=["x"], + coords={"x": ["a", "b", "c", "d"]}, ) b1 = xr.DataArray( - COO.from_numpy(np.arange(4)), dims=["x"], coords={"x": ["a", "b", "d", "e"]} + sparse.COO.from_numpy(np.arange(4)), + dims=["x"], + coords={"x": ["a", "b", "d", "e"]}, ) a2, b2 = xr.align(a1, b1, join="inner") assert isinstance(a2.data, sparse.SparseArray) @@ -636,10 +638,14 @@ def test_align_2d(self): @pytest.mark.xfail(reason="fill value leads to sparse-dense operation") def test_align_outer(self): a1 = xr.DataArray( - COO.from_numpy(np.arange(4)), dims=["x"], coords={"x": ["a", "b", "c", "d"]} + sparse.COO.from_numpy(np.arange(4)), + dims=["x"], + coords={"x": ["a", "b", "c", "d"]}, ) b1 = xr.DataArray( - COO.from_numpy(np.arange(4)), dims=["x"], coords={"x": ["a", "b", "d", "e"]} + sparse.COO.from_numpy(np.arange(4)), + dims=["x"], + coords={"x": ["a", "b", "d", "e"]}, ) a2, b2 = xr.align(a1, b1, join="outer") assert isinstance(a2.data, sparse.SparseArray) @@ -653,13 +659,13 @@ def test_concat(self): ds2 = xr.Dataset(data_vars={"d": self.sp_xr}) ds3 = xr.Dataset(data_vars={"d": self.sp_xr}) out = xr.concat([ds1, ds2, ds3], dim="x") - assert_sparse_eq( + sparse.utils.assert_eq( out["d"].data, sparse.concatenate([self.sp_ar, self.sp_ar, self.sp_ar], axis=0), ) out = xr.concat([self.sp_xr, self.sp_xr, self.sp_xr], dim="y") - assert_sparse_eq( + sparse.utils.assert_eq( out.data, sparse.concatenate([self.sp_ar, self.sp_ar, self.sp_ar], axis=1) ) @@ -684,9 +690,9 @@ def test_ufuncs(self): def test_dataarray_repr(self): a = xr.DataArray( - COO.from_numpy(np.ones(4)), + sparse.COO.from_numpy(np.ones(4)), dims=["x"], - coords={"y": ("x", COO.from_numpy(np.arange(4)))}, + coords={"y": ("x", sparse.COO.from_numpy(np.arange(4)))}, ) expected = dedent( """\ @@ -700,8 +706,8 @@ def test_dataarray_repr(self): def test_dataset_repr(self): ds = xr.Dataset( - data_vars={"a": ("x", COO.from_numpy(np.ones(4)))}, - coords={"y": ("x", COO.from_numpy(np.arange(4)))}, + data_vars={"a": ("x", sparse.COO.from_numpy(np.ones(4)))}, + coords={"y": ("x", sparse.COO.from_numpy(np.arange(4)))}, ) expected = dedent( """\ @@ -717,17 +723,17 @@ def test_dataset_repr(self): def test_dataarray_pickle(self): a1 = xr.DataArray( - COO.from_numpy(np.ones(4)), + sparse.COO.from_numpy(np.ones(4)), dims=["x"], - coords={"y": ("x", COO.from_numpy(np.arange(4)))}, + coords={"y": ("x", sparse.COO.from_numpy(np.arange(4)))}, ) a2 = pickle.loads(pickle.dumps(a1)) assert_identical(a1, a2) def test_dataset_pickle(self): ds1 = xr.Dataset( - data_vars={"a": ("x", COO.from_numpy(np.ones(4)))}, - coords={"y": ("x", COO.from_numpy(np.arange(4)))}, + data_vars={"a": ("x", sparse.COO.from_numpy(np.ones(4)))}, + coords={"y": ("x", sparse.COO.from_numpy(np.arange(4)))}, ) ds2 = pickle.loads(pickle.dumps(ds1)) assert_identical(ds1, ds2) @@ -802,7 +808,7 @@ def test_resample(self): dims="time", ) t2 = t1.copy() - t2.data = COO(t2.data) + t2.data = sparse.COO(t2.data) m1 = t1.resample(time="QS-DEC").mean() m2 = t2.resample(time="QS-DEC").mean() assert isinstance(m2.data, sparse.SparseArray) @@ -833,7 +839,7 @@ def test_where(self): cond = a > 3 xr.DataArray(a).where(cond) - s = COO.from_numpy(a) + s = sparse.COO.from_numpy(a) cond = s > 3 xr.DataArray(s).where(cond) @@ -846,7 +852,7 @@ class TestSparseCoords: @pytest.mark.xfail(reason="Coercion of coords to dense") def test_sparse_coords(self): xr.DataArray( - COO.from_numpy(np.arange(4)), + sparse.COO.from_numpy(np.arange(4)), dims=["x"], - coords={"x": COO.from_numpy([1, 2, 3, 4])}, + coords={"x": sparse.COO.from_numpy([1, 2, 3, 4])}, ) From 6962b2a1105c7b91d00c3a79eda814c252954051 Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 12 Aug 2019 22:20:48 +0100 Subject: [PATCH 4/6] isort run --- xarray/core/coordinates.py | 6 +++--- xarray/tests/test_sparse.py | 5 +---- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/xarray/core/coordinates.py b/xarray/core/coordinates.py index 562d30dd6c7..82488f252f4 100644 --- a/xarray/core/coordinates.py +++ b/xarray/core/coordinates.py @@ -4,12 +4,12 @@ TYPE_CHECKING, Any, Hashable, - Mapping, Iterator, - Union, + Mapping, + Sequence, Set, Tuple, - Sequence, + Union, cast, ) diff --git a/xarray/tests/test_sparse.py b/xarray/tests/test_sparse.py index cc2c3966d6b..6531a1eed0f 100644 --- a/xarray/tests/test_sparse.py +++ b/xarray/tests/test_sparse.py @@ -1,4 +1,3 @@ -from textwrap import dedent import pickle from textwrap import dedent @@ -6,11 +5,9 @@ import pandas as pd import pytest -from xarray import DataArray, Variable -from xarray.core.npcompat import IS_NEP18_ACTIVE import xarray as xr import xarray.ufuncs as xu -from xarray import Variable +from xarray import DataArray, Variable from xarray.core.npcompat import IS_NEP18_ACTIVE from . import assert_equal, assert_identical From c5df9590fe160c3cbb4c81894acf1b2d1cfd6eef Mon Sep 17 00:00:00 2001 From: Guido Imperiale Date: Fri, 23 Aug 2019 09:40:24 +0100 Subject: [PATCH 5/6] Another isort run; fix sparse test --- xarray/core/dataset.py | 2 +- xarray/core/groupby.py | 2 +- xarray/tests/test_sparse.py | 6 ++++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/xarray/core/dataset.py b/xarray/core/dataset.py index ffa04028b53..e54b9ad3ba5 100644 --- a/xarray/core/dataset.py +++ b/xarray/core/dataset.py @@ -55,8 +55,8 @@ _contains_datetime_like_objects, ) from .coordinates import ( - DatasetCoordinates, DataArrayCoordinates, + DatasetCoordinates, LevelCoordinatesSource, assert_coordinate_consistent, remap_label_indexers, diff --git a/xarray/core/groupby.py b/xarray/core/groupby.py index 8eae78317cf..5d81b13983d 100644 --- a/xarray/core/groupby.py +++ b/xarray/core/groupby.py @@ -12,11 +12,11 @@ from .options import _get_keep_attrs from .pycompat import integer_types from .utils import ( + either_dict_or_kwargs, hashable, maybe_wrap_array, peek_at, safe_cast_to_index, - either_dict_or_kwargs, ) from .variable import IndexVariable, Variable, as_variable diff --git a/xarray/tests/test_sparse.py b/xarray/tests/test_sparse.py index 0bf6053b302..c94ee1b2978 100644 --- a/xarray/tests/test_sparse.py +++ b/xarray/tests/test_sparse.py @@ -10,7 +10,7 @@ from xarray import DataArray, Variable from xarray.core.npcompat import IS_NEP18_ACTIVE -from . import assert_equal, assert_identical, LooseVersion +from . import assert_equal, assert_identical param = pytest.param xfail = pytest.mark.xfail @@ -737,7 +737,9 @@ def test_dataset_repr(self): def test_sparse_dask_dataset_repr(self): pytest.importorskip("dask", minversion="2.0") - ds = xr.Dataset(data_vars={"a": ("x", COO.from_numpy(np.ones(4)))}).chunk() + ds = xr.Dataset( + data_vars={"a": ("x", sparse.COO.from_numpy(np.ones(4)))} + ).chunk() expected = dedent( """\ From be40d086c27d86bb1d94bfa214fa2ef012b3402d Mon Sep 17 00:00:00 2001 From: Guido Imperiale Date: Fri, 23 Aug 2019 09:46:39 +0100 Subject: [PATCH 6/6] Clean up unused imports --- setup.cfg | 2 -- xarray/backends/h5netcdf_.py | 2 +- xarray/backends/netCDF4_.py | 2 +- xarray/core/alignment.py | 4 ++-- xarray/core/computation.py | 1 - xarray/core/duck_array_ops.py | 2 +- xarray/core/variable.py | 2 +- xarray/tests/test_dataarray.py | 1 - xarray/tests/test_plot.py | 1 - xarray/util/print_versions.py | 1 - 10 files changed, 6 insertions(+), 12 deletions(-) diff --git a/setup.cfg b/setup.cfg index 6cb58d2b9a2..114f71f4a9f 100644 --- a/setup.cfg +++ b/setup.cfg @@ -25,8 +25,6 @@ ignore= E731 # line break before binary operator W503 - # Unused imports; TODO: Allow typing to work without triggering errors - F401 exclude= doc diff --git a/xarray/backends/h5netcdf_.py b/xarray/backends/h5netcdf_.py index edc28c7b0ff..0c5fe9087d2 100644 --- a/xarray/backends/h5netcdf_.py +++ b/xarray/backends/h5netcdf_.py @@ -5,7 +5,7 @@ from .. import Variable from ..core import indexing -from ..core.utils import FrozenOrderedDict, close_on_error +from ..core.utils import FrozenOrderedDict from .common import WritableCFDataStore from .file_manager import CachingFileManager from .locks import HDF5_LOCK, combine_locks, ensure_lock, get_write_lock diff --git a/xarray/backends/netCDF4_.py b/xarray/backends/netCDF4_.py index 9866a2fe344..57317a7a1a5 100644 --- a/xarray/backends/netCDF4_.py +++ b/xarray/backends/netCDF4_.py @@ -10,7 +10,7 @@ from .. import Variable, coding from ..coding.variables import pop_to from ..core import indexing -from ..core.utils import FrozenOrderedDict, close_on_error, is_remote_uri +from ..core.utils import FrozenOrderedDict, is_remote_uri from .common import ( BackendArray, WritableCFDataStore, diff --git a/xarray/core/alignment.py b/xarray/core/alignment.py index b8493de9a20..9aeef63e891 100644 --- a/xarray/core/alignment.py +++ b/xarray/core/alignment.py @@ -14,8 +14,8 @@ from .variable import IndexVariable, Variable if TYPE_CHECKING: - from .dataarray import DataArray - from .dataset import Dataset + from .dataarray import DataArray # noqa: F401 + from .dataset import Dataset # noqa: F401 def _get_joiner(join): diff --git a/xarray/core/computation.py b/xarray/core/computation.py index d91b73046ba..927803c80bb 100644 --- a/xarray/core/computation.py +++ b/xarray/core/computation.py @@ -648,7 +648,6 @@ def func(*arrays): def _apply_blockwise( func, args, input_dims, output_dims, signature, output_dtypes, output_sizes=None ): - import dask.array as da from .dask_array_compat import blockwise if signature.num_outputs > 1: diff --git a/xarray/core/duck_array_ops.py b/xarray/core/duck_array_ops.py index 3d7e7cc64bc..fcd0400566f 100644 --- a/xarray/core/duck_array_ops.py +++ b/xarray/core/duck_array_ops.py @@ -13,7 +13,7 @@ from . import dask_array_ops, dtypes, npcompat, nputils from .nputils import nanfirst, nanlast -from .pycompat import dask_array_type, sparse_array_type +from .pycompat import dask_array_type try: import dask.array as dask_array diff --git a/xarray/core/variable.py b/xarray/core/variable.py index 7b5b48e535c..aea4b211bbd 100644 --- a/xarray/core/variable.py +++ b/xarray/core/variable.py @@ -3,7 +3,7 @@ from collections import OrderedDict, defaultdict from datetime import timedelta from distutils.version import LooseVersion -from typing import Any, Hashable, Mapping, MutableMapping, Union +from typing import Any, Hashable, Mapping, Union import numpy as np import pandas as pd diff --git a/xarray/tests/test_dataarray.py b/xarray/tests/test_dataarray.py index 506c437c2bf..d2355e28f6e 100644 --- a/xarray/tests/test_dataarray.py +++ b/xarray/tests/test_dataarray.py @@ -24,7 +24,6 @@ assert_identical, raises_regex, requires_bottleneck, - requires_cftime, requires_dask, requires_iris, requires_np113, diff --git a/xarray/tests/test_plot.py b/xarray/tests/test_plot.py index 36e7a38151d..a1c05971ec4 100644 --- a/xarray/tests/test_plot.py +++ b/xarray/tests/test_plot.py @@ -8,7 +8,6 @@ import xarray as xr import xarray.plot as xplt from xarray import DataArray, Dataset -from xarray.coding.times import _import_cftime from xarray.plot.dataset_plot import _infer_meta_data from xarray.plot.plot import _infer_interval_breaks from xarray.plot.utils import ( diff --git a/xarray/util/print_versions.py b/xarray/util/print_versions.py index 85bb9db8360..4ba327913bc 100755 --- a/xarray/util/print_versions.py +++ b/xarray/util/print_versions.py @@ -1,5 +1,4 @@ """Utility functions for printing version information.""" -import codecs import importlib import locale import os