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/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/api.py b/xarray/backends/api.py index 887af0023fb..9ad1db1829b 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/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 bb44f48fb9b..9aeef63e891 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 @@ -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/combine.py b/xarray/core/combine.py index 3aae12c3b66..c24be88b19e 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 cb3a0d5db7d..927803c80bb 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 @@ -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/concat.py b/xarray/core/concat.py index 014b615f2a7..9c7c622a31c 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 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/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/dataarray.py b/xarray/core/dataarray.py index 52c11429e2b..f147a97d39b 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 076b97e8623..e54b9ad3ba5 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,14 +25,15 @@ Union, cast, overload, - TYPE_CHECKING, ) import numpy as np import pandas as pd + 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 +47,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, @@ -53,8 +55,8 @@ _contains_datetime_like_objects, ) from .coordinates import ( - DatasetCoordinates, DataArrayCoordinates, + DatasetCoordinates, LevelCoordinatesSource, assert_coordinate_consistent, remap_label_indexers, @@ -79,7 +81,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/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/groupby.py b/xarray/core/groupby.py index 3ed3491b582..5d81b13983d 100644 --- a/xarray/core/groupby.py +++ b/xarray/core/groupby.py @@ -7,16 +7,16 @@ 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 ( + 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/core/indexing.py b/xarray/core/indexing.py index c5c3cadf7a2..d5cd5eb9e8f 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 882667dbaaa..225507b9204 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..91998482e3e 100644 --- a/xarray/core/pdcompat.py +++ b/xarray/core/pdcompat.py @@ -38,10 +38,10 @@ # 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 - # 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 ba478686d61..bf8c9a264e3 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/core/variable.py b/xarray/core/variable.py index 4c095f3a062..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 @@ -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 dd102f8e2e1..e76cb3aecf7 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 4adcc0d5c49..b8ab89e926c 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_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_dataset.py b/xarray/tests/test_dataset.py index 55358e47e41..f76dea86776 100644 --- a/xarray/tests/test_dataset.py +++ b/xarray/tests/test_dataset.py @@ -31,8 +31,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 56fba20ffc0..c518f528537 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_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/tests/test_sparse.py b/xarray/tests/test_sparse.py index 74805b225fa..c94ee1b2978 100644 --- a/xarray/tests/test_sparse.py +++ b/xarray/tests/test_sparse.py @@ -1,16 +1,16 @@ -from textwrap import dedent import pickle +from textwrap import dedent + import numpy as np 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 DataArray, Variable +from xarray.core.npcompat import IS_NEP18_ACTIVE -from . import assert_equal, assert_identical, LooseVersion - -import pytest +from . import assert_equal, assert_identical param = pytest.param xfail = pytest.mark.xfail @@ -21,8 +21,6 @@ ) sparse = pytest.importorskip("sparse") -from sparse.utils import assert_eq as assert_sparse_eq # noqa -from sparse import COO, SparseArray # noqa def make_ndarray(shape): @@ -239,7 +237,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) @@ -265,7 +263,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) @@ -278,16 +276,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( @@ -300,12 +298,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) @@ -558,7 +556,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) @@ -582,7 +580,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) @@ -607,10 +605,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) @@ -650,10 +652,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) @@ -667,13 +673,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) ) @@ -698,9 +704,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( """\ @@ -714,8 +720,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( """\ @@ -731,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( """\ @@ -744,17 +752,17 @@ def test_sparse_dask_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) @@ -829,7 +837,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) @@ -860,7 +868,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) @@ -873,9 +881,9 @@ 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])}, ) 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