diff --git a/properties/test_index_manipulation.py b/properties/test_index_manipulation.py index 9c3e6fba290..e04db83fd84 100644 --- a/properties/test_index_manipulation.py +++ b/properties/test_index_manipulation.py @@ -261,8 +261,6 @@ def assert_invariants(self): @pytest.mark.skip(reason="failure detected by hypothesis") def test_unstack_object(): - import xarray as xr - ds = xr.Dataset() ds["0"] = np.array(["", "\x000"], dtype=object) ds.stack({"1": ["0"]}).unstack() @@ -270,8 +268,6 @@ def test_unstack_object(): @pytest.mark.skip(reason="failure detected by hypothesis") def test_unstack_timedelta_index(): - import xarray as xr - ds = xr.Dataset() ds["0"] = np.array([0, 1, 2, 3], dtype="timedelta64[ns]") ds.stack({"1": ["0"]}).unstack() diff --git a/xarray/coding/cftime_offsets.py b/xarray/coding/cftime_offsets.py index d6256e7acb1..e8d407b282c 100644 --- a/xarray/coding/cftime_offsets.py +++ b/xarray/coding/cftime_offsets.py @@ -1419,8 +1419,6 @@ def date_range( cftime_range date_range_like """ - from xarray.coding.times import _is_standard_calendar - if tz is not None: use_cftime = False diff --git a/xarray/coding/cftimeindex.py b/xarray/coding/cftimeindex.py index caf33cb2dd4..210bbf263b1 100644 --- a/xarray/coding/cftimeindex.py +++ b/xarray/coding/cftimeindex.py @@ -689,8 +689,6 @@ def asi8(self): @property def calendar(self): """The calendar used by the datetimes in the index.""" - from xarray.coding.times import infer_calendar_name - if not self._data.size: return None diff --git a/xarray/computation/apply_ufunc.py b/xarray/computation/apply_ufunc.py index 9ebdfa4273d..678c702f3f3 100644 --- a/xarray/computation/apply_ufunc.py +++ b/xarray/computation/apply_ufunc.py @@ -569,7 +569,6 @@ def apply_groupby_func(func, *args): DataArray, Variable and/or ndarray objects. """ from xarray.core.groupby import GroupBy, peek_at - from xarray.core.variable import Variable groupbys = [arg for arg in args if isinstance(arg, GroupBy)] assert groupbys, "must have at least one groupby to iterate over" diff --git a/xarray/computation/computation.py b/xarray/computation/computation.py index 93099a7015e..14b1ae6e240 100644 --- a/xarray/computation/computation.py +++ b/xarray/computation/computation.py @@ -574,7 +574,6 @@ def dot( array(235) """ from xarray.core.dataarray import DataArray - from xarray.core.variable import Variable if any(not isinstance(arr, Variable | DataArray) for arr in arrays): raise TypeError( diff --git a/xarray/computation/fit.py b/xarray/computation/fit.py index 7c9c25abe52..cc7289ac647 100644 --- a/xarray/computation/fit.py +++ b/xarray/computation/fit.py @@ -474,7 +474,7 @@ def _wrapper(Y, *args, **kwargs): mask = np.all([np.any(~np.isnan(x), axis=0), ~np.isnan(y)], axis=0) x = x[:, mask] y = y[mask] - if not len(y): + if y.size == 0: popt = np.full([n_params], np.nan) pcov = np.full([n_params, n_params], np.nan) return popt, pcov diff --git a/xarray/computation/nanops.py b/xarray/computation/nanops.py index 17c60b6f663..ce9682ea79e 100644 --- a/xarray/computation/nanops.py +++ b/xarray/computation/nanops.py @@ -105,8 +105,6 @@ def nansum(a, axis=None, dtype=None, out=None, min_count=None): def _nanmean_ddof_object(ddof, value, axis=None, dtype=None, **kwargs): """In house nanmean. ddof argument will be used in _nanvar method""" - from xarray.core.duck_array_ops import count, fillna, where_method - valid_count = count(value, axis=axis) value = fillna(value, 0) # As dtype inference is impossible for object dtype, we assume float diff --git a/xarray/core/dataset.py b/xarray/core/dataset.py index 95e6f516403..888288c57b6 100644 --- a/xarray/core/dataset.py +++ b/xarray/core/dataset.py @@ -1359,7 +1359,6 @@ def _setitem_check(self, key, value): to avoid leaving the dataset in a partially updated state when an error occurs. """ from xarray.core.dataarray import DataArray - from xarray.structure.alignment import align if isinstance(value, Dataset): missing_vars = [ @@ -2551,7 +2550,6 @@ def _validate_indexers( + string indexers are cast to the appropriate date type if the associated index is a DatetimeIndex or CFTimeIndex """ - from xarray.coding.cftimeindex import CFTimeIndex from xarray.core.dataarray import DataArray indexers = drop_dims_from_indexers(indexers, self.dims, missing_dims) @@ -8268,8 +8266,6 @@ def differentiate( -------- numpy.gradient: corresponding numpy function """ - from xarray.core.variable import Variable - if coord not in self.variables and coord not in self.dims: variables_and_dims = tuple(set(self.variables.keys()).union(self.dims)) raise ValueError( diff --git a/xarray/core/datatree.py b/xarray/core/datatree.py index 734927fd3d1..746f82b6175 100644 --- a/xarray/core/datatree.py +++ b/xarray/core/datatree.py @@ -1629,7 +1629,6 @@ def _unary_op(self, f, *args, **kwargs) -> DataTree: return self.map_over_datasets(functools.partial(f, **kwargs), *args) # type: ignore[return-value] def _binary_op(self, other, f, reflexive=False, join=None) -> DataTree: - from xarray.core.dataset import Dataset from xarray.core.groupby import GroupBy if isinstance(other, GroupBy): diff --git a/xarray/core/duck_array_ops.py b/xarray/core/duck_array_ops.py index bd9b14eb91d..0c7d40113d6 100644 --- a/xarray/core/duck_array_ops.py +++ b/xarray/core/duck_array_ops.py @@ -49,8 +49,6 @@ def einsum(*args, **kwargs): - from xarray.core.options import OPTIONS - if OPTIONS["use_opt_einsum"] and module_available("opt_einsum"): import opt_einsum @@ -681,9 +679,7 @@ def timedelta_to_numeric(value, datetime_unit="ns", dtype=float): The output data type. """ - import datetime as dt - - if isinstance(value, dt.timedelta): + if isinstance(value, datetime.timedelta): out = py_timedelta_to_float(value, datetime_unit) elif isinstance(value, np.timedelta64): out = np_timedelta64_to_float(value, datetime_unit) diff --git a/xarray/core/groupby.py b/xarray/core/groupby.py index 1bcda765f1d..446fd1343cc 100644 --- a/xarray/core/groupby.py +++ b/xarray/core/groupby.py @@ -540,7 +540,7 @@ def factorize(self) -> EncodedGroups: _flatcodes = where(mask.data, -1, _flatcodes) full_index = pd.MultiIndex.from_product( - list(grouper.full_index.values for grouper in groupers), + [grouper.full_index.values for grouper in groupers], names=tuple(grouper.name for grouper in groupers), ) if not full_index.is_unique: diff --git a/xarray/core/treenode.py b/xarray/core/treenode.py index c5d910994b6..df58f7aed6f 100644 --- a/xarray/core/treenode.py +++ b/xarray/core/treenode.py @@ -786,12 +786,12 @@ def _path_to_ancestor(self, ancestor: NamedNode) -> NodePath: raise NotFoundInTreeError( "Cannot find relative path to ancestor because nodes do not lie within the same tree" ) - if ancestor.path not in list(a.path for a in (self, *self.parents)): + if ancestor.path not in [a.path for a in (self, *self.parents)]: raise NotFoundInTreeError( "Cannot find relative path to ancestor because given node is not an ancestor of this node" ) - parents_paths = list(parent.path for parent in (self, *self.parents)) + parents_paths = [parent.path for parent in (self, *self.parents)] generation_gap = list(parents_paths).index(ancestor.path) path_upwards = "../" * generation_gap if generation_gap > 0 else "." return NodePath(path_upwards) diff --git a/xarray/groupers.py b/xarray/groupers.py index 9ed948956a8..3a27d725116 100644 --- a/xarray/groupers.py +++ b/xarray/groupers.py @@ -484,8 +484,6 @@ def reset(self) -> Self: ) def _init_properties(self, group: T_Group) -> None: - from xarray import CFTimeIndex - group_as_index = safe_cast_to_index(group) offset = self.offset @@ -494,8 +492,6 @@ def _init_properties(self, group: T_Group) -> None: raise ValueError("Index must be monotonic for resampling") if isinstance(group_as_index, CFTimeIndex): - from xarray.core.resample_cftime import CFTimeGrouper - self.index_grouper = CFTimeGrouper( freq=self.freq, closed=self.closed, diff --git a/xarray/plot/utils.py b/xarray/plot/utils.py index dd47df703b5..dd13ada2a3c 100644 --- a/xarray/plot/utils.py +++ b/xarray/plot/utils.py @@ -457,8 +457,6 @@ def get_axis( ax: Axes | None = None, **subplot_kws: Any, ) -> Axes: - from xarray.core.utils import attempt_import - if TYPE_CHECKING: import matplotlib as mpl import matplotlib.pyplot as plt @@ -1048,8 +1046,6 @@ def legend_elements( labels : list of str The string labels for elements of the legend. """ - import warnings - import matplotlib as mpl mlines = mpl.lines diff --git a/xarray/structure/concat.py b/xarray/structure/concat.py index 54f006a2a0a..2f1f3c28b02 100644 --- a/xarray/structure/concat.py +++ b/xarray/structure/concat.py @@ -418,7 +418,7 @@ def process_subset_opt(opt, subset): elif opt == "all": concat_over.update( set().union( - *list(set(getattr(d, subset)) - set(d.dims) for d in datasets) + *[set(getattr(d, subset)) - set(d.dims) for d in datasets] ) ) elif opt == "minimal": diff --git a/xarray/tests/test_datatree.py b/xarray/tests/test_datatree.py index f6d9bd76baa..e2a95e4d015 100644 --- a/xarray/tests/test_datatree.py +++ b/xarray/tests/test_datatree.py @@ -837,7 +837,7 @@ def test_nones(self) -> None: def test_full(self, simple_datatree) -> None: dt = simple_datatree - paths = list(node.path for node in dt.subtree) + paths = [node.path for node in dt.subtree] assert paths == [ "/", "/set1", diff --git a/xarray/tests/test_groupby.py b/xarray/tests/test_groupby.py index ac90d216144..54cc21b5d2c 100644 --- a/xarray/tests/test_groupby.py +++ b/xarray/tests/test_groupby.py @@ -3256,8 +3256,6 @@ def test_shuffle_simple() -> None: def test_shuffle_by(chunks, expected_chunks): import dask.array - from xarray.groupers import UniqueGrouper - da = xr.DataArray( dims="x", data=dask.array.arange(10, chunks=chunks), diff --git a/xarray/tests/test_units.py b/xarray/tests/test_units.py index ab4ec36ea97..d98d72d9876 100644 --- a/xarray/tests/test_units.py +++ b/xarray/tests/test_units.py @@ -2650,7 +2650,7 @@ def test_searchsorted(self, func, unit, error, dtype): data_array = xr.DataArray(data=array) scalar_types = (int, float) - args = list(value * unit for value in func.args) + args = [value * unit for value in func.args] kwargs = { key: (value * unit if isinstance(value, scalar_types) else value) for key, value in func.kwargs.items() @@ -2708,7 +2708,7 @@ def test_numpy_methods_with_args(self, func, unit, error, dtype): data_array = xr.DataArray(data=array) scalar_types = (int, float) - args = list(value * unit for value in func.args) + args = [value * unit for value in func.args] kwargs = { key: (value * unit if isinstance(value, scalar_types) else value) for key, value in func.kwargs.items()