diff --git a/pyproject.toml b/pyproject.toml index fed74619ec9..c0062107db5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -169,7 +169,7 @@ check_untyped_defs = true module = [ "xarray.core.accessor_dt", "xarray.core.accessor_str", - "xarray.core.alignment", + "xarray.structure.alignment", "xarray.computation.*", "xarray.indexes.*", "xarray.tests.*", diff --git a/xarray/__init__.py b/xarray/__init__.py index ec09f222c84..3fd57e1a335 100644 --- a/xarray/__init__.py +++ b/xarray/__init__.py @@ -28,10 +28,7 @@ where, ) from xarray.conventions import SerializationWarning, decode_cf -from xarray.core.alignment import align, broadcast -from xarray.core.combine import combine_by_coords, combine_nested from xarray.core.common import ALL_DIMS, full_like, ones_like, zeros_like -from xarray.core.concat import concat from xarray.core.coordinates import Coordinates from xarray.core.dataarray import DataArray from xarray.core.dataset import Dataset @@ -44,7 +41,6 @@ ) from xarray.core.indexes import Index from xarray.core.indexing import IndexSelResult -from xarray.core.merge import Context, MergeError, merge from xarray.core.options import get_options, set_options from xarray.core.parallel import map_blocks from xarray.core.treenode import ( @@ -55,6 +51,10 @@ ) from xarray.core.variable import IndexVariable, Variable, as_variable from xarray.namedarray.core import NamedArray +from xarray.structure.alignment import align, broadcast +from xarray.structure.combine import combine_by_coords, combine_nested +from xarray.structure.concat import concat +from xarray.structure.merge import Context, MergeError, merge from xarray.util.print_versions import show_versions try: diff --git a/xarray/backends/api.py b/xarray/backends/api.py index 019c5d11ed0..c205ed23aa9 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -36,11 +36,6 @@ from xarray.coders import CFDatetimeCoder, CFTimedeltaCoder from xarray.core import indexing from xarray.core.chunk import _get_chunk, _maybe_chunk -from xarray.core.combine import ( - _infer_concat_order_from_positions, - _nested_combine, - combine_by_coords, -) from xarray.core.dataarray import DataArray from xarray.core.dataset import Dataset from xarray.core.datatree import DataTree @@ -50,6 +45,11 @@ from xarray.core.utils import is_remote_uri from xarray.namedarray.daskmanager import DaskManager from xarray.namedarray.parallelcompat import guess_chunkmanager +from xarray.structure.combine import ( + _infer_concat_order_from_positions, + _nested_combine, + combine_by_coords, +) if TYPE_CHECKING: try: diff --git a/xarray/computation/apply_ufunc.py b/xarray/computation/apply_ufunc.py index 947faab0e63..50c3ed4bbd8 100644 --- a/xarray/computation/apply_ufunc.py +++ b/xarray/computation/apply_ufunc.py @@ -27,10 +27,8 @@ _V = TypeVar("_V", bound=Union["Dataset", "DataArray"]) from xarray.core import duck_array_ops, utils -from xarray.core.alignment import deep_align from xarray.core.formatting import limit_lines from xarray.core.indexes import Index, filter_indexes_from_coords -from xarray.core.merge import merge_attrs, merge_coordinates_without_align from xarray.core.options import _get_keep_attrs from xarray.core.utils import ( is_dict_like, @@ -39,6 +37,8 @@ from xarray.core.variable import Variable from xarray.namedarray.parallelcompat import get_chunked_array_type from xarray.namedarray.pycompat import is_chunked_array +from xarray.structure.alignment import deep_align +from xarray.structure.merge import merge_attrs, merge_coordinates_without_align if TYPE_CHECKING: from xarray.core.coordinates import Coordinates diff --git a/xarray/computation/computation.py b/xarray/computation/computation.py index 024f315af5c..8d876ace335 100644 --- a/xarray/computation/computation.py +++ b/xarray/computation/computation.py @@ -20,7 +20,6 @@ from xarray.compat.array_api_compat import to_like_array from xarray.computation.apply_ufunc import apply_ufunc from xarray.core import dtypes, duck_array_ops, utils -from xarray.core.alignment import align from xarray.core.common import zeros_like from xarray.core.duck_array_ops import datetime_to_numeric from xarray.core.options import OPTIONS, _get_keep_attrs @@ -32,6 +31,7 @@ from xarray.core.variable import Variable from xarray.namedarray.parallelcompat import get_chunked_array_type from xarray.namedarray.pycompat import is_chunked_array +from xarray.structure.alignment import align from xarray.util.deprecation_helpers import deprecate_dims if TYPE_CHECKING: diff --git a/xarray/computation/weighted.py b/xarray/computation/weighted.py index e7dd9d38a66..4c7711d0e2b 100644 --- a/xarray/computation/weighted.py +++ b/xarray/computation/weighted.py @@ -9,9 +9,9 @@ from xarray.computation.apply_ufunc import apply_ufunc from xarray.computation.computation import dot from xarray.core import duck_array_ops, utils -from xarray.core.alignment import align, broadcast from xarray.core.types import Dims, T_DataArray, T_Xarray from xarray.namedarray.utils import is_duck_dask_array +from xarray.structure.alignment import align, broadcast # Weighted quantile methods are a subset of the numpy supported quantile methods. QUANTILE_METHODS = Literal[ diff --git a/xarray/core/common.py b/xarray/core/common.py index 93036a612ea..3675659dd6a 100644 --- a/xarray/core/common.py +++ b/xarray/core/common.py @@ -1216,9 +1216,9 @@ def where(self, cond: Any, other: Any = dtypes.NA, drop: bool = False) -> Self: numpy.where : corresponding numpy function where : equivalent function """ - from xarray.core.alignment import align from xarray.core.dataarray import DataArray from xarray.core.dataset import Dataset + from xarray.structure.alignment import align if callable(cond): cond = cond(self) diff --git a/xarray/core/coordinates.py b/xarray/core/coordinates.py index b6c8e4a0dc5..408e9e630ee 100644 --- a/xarray/core/coordinates.py +++ b/xarray/core/coordinates.py @@ -13,7 +13,6 @@ import pandas as pd from xarray.core import formatting -from xarray.core.alignment import Aligner from xarray.core.indexes import ( Index, Indexes, @@ -22,7 +21,6 @@ assert_no_index_corrupted, create_default_index_implicit, ) -from xarray.core.merge import merge_coordinates_without_align, merge_coords from xarray.core.types import DataVars, Self, T_DataArray, T_Xarray from xarray.core.utils import ( Frozen, @@ -31,6 +29,8 @@ emit_user_level_warning, ) from xarray.core.variable import Variable, as_variable, calculate_dimensions +from xarray.structure.alignment import Aligner +from xarray.structure.merge import merge_coordinates_without_align, merge_coords if TYPE_CHECKING: from xarray.core.common import DataWithCoords diff --git a/xarray/core/dataarray.py b/xarray/core/dataarray.py index 87e95bdc464..b5f3cd5c200 100644 --- a/xarray/core/dataarray.py +++ b/xarray/core/dataarray.py @@ -32,15 +32,10 @@ from xarray.computation import computation, ops from xarray.computation.arithmetic import DataArrayArithmetic from xarray.computation.computation import unify_chunks -from xarray.core import alignment, dtypes, indexing, utils +from xarray.core import dtypes, indexing, utils from xarray.core._aggregations import DataArrayAggregations from xarray.core.accessor_dt import CombinedDatetimelikeAccessor from xarray.core.accessor_str import StringAccessor -from xarray.core.alignment import ( - _broadcast_helper, - _get_broadcast_dims_map_common_coords, - align, -) from xarray.core.common import AbstractArray, DataWithCoords, get_chunksizes from xarray.core.coordinates import ( Coordinates, @@ -59,7 +54,6 @@ isel_indexes, ) from xarray.core.indexing import is_fancy_indexer, map_index_queries -from xarray.core.merge import PANDAS_TYPES, MergeError from xarray.core.options import OPTIONS, _get_keep_attrs from xarray.core.types import ( Bins, @@ -88,6 +82,13 @@ ) from xarray.plot.accessor import DataArrayPlotAccessor from xarray.plot.utils import _get_units_from_attrs +from xarray.structure import alignment +from xarray.structure.alignment import ( + _broadcast_helper, + _get_broadcast_dims_map_common_coords, + align, +) +from xarray.structure.merge import PANDAS_TYPES, MergeError from xarray.util.deprecation_helpers import _deprecate_positional_args, deprecate_dims if TYPE_CHECKING: diff --git a/xarray/core/dataset.py b/xarray/core/dataset.py index 68f0caa678d..67d9b6642d1 100644 --- a/xarray/core/dataset.py +++ b/xarray/core/dataset.py @@ -45,20 +45,14 @@ from xarray.computation import ops from xarray.computation.arithmetic import DatasetArithmetic from xarray.computation.computation import _ensure_numeric, unify_chunks +from xarray.core import dtypes as xrdtypes from xarray.core import ( - alignment, duck_array_ops, formatting, formatting_html, utils, ) -from xarray.core import dtypes as xrdtypes from xarray.core._aggregations import DatasetAggregations -from xarray.core.alignment import ( - _broadcast_helper, - _get_broadcast_dims_map_common_coords, - align, -) from xarray.core.common import ( DataWithCoords, _contains_datetime_like_objects, @@ -83,12 +77,6 @@ roll_indexes, ) from xarray.core.indexing import is_fancy_indexer, map_index_queries -from xarray.core.merge import ( - dataset_merge_method, - dataset_update_method, - merge_coordinates_without_align, - merge_data_and_coords, -) from xarray.core.options import OPTIONS, _get_keep_attrs from xarray.core.types import ( Bins, @@ -131,6 +119,18 @@ from xarray.namedarray.parallelcompat import get_chunked_array_type, guess_chunkmanager from xarray.namedarray.pycompat import array_type, is_chunked_array, to_numpy from xarray.plot.accessor import DatasetPlotAccessor +from xarray.structure import alignment +from xarray.structure.alignment import ( + _broadcast_helper, + _get_broadcast_dims_map_common_coords, + align, +) +from xarray.structure.merge import ( + dataset_merge_method, + dataset_update_method, + merge_coordinates_without_align, + merge_data_and_coords, +) from xarray.util.deprecation_helpers import _deprecate_positional_args, deprecate_dims if TYPE_CHECKING: @@ -144,7 +144,6 @@ from xarray.computation.weighted import DatasetWeighted from xarray.core.dataarray import DataArray from xarray.core.groupby import DatasetGroupBy - from xarray.core.merge import CoercibleMapping, CoercibleValue from xarray.core.resample import DatasetResample from xarray.core.types import ( CFCalendar, @@ -176,6 +175,7 @@ ) from xarray.groupers import Grouper, Resampler from xarray.namedarray.parallelcompat import ChunkManagerEntrypoint + from xarray.structure.merge import CoercibleMapping, CoercibleValue # list of attributes of pd.DatetimeIndex that are ndarrays of time info @@ -1402,8 +1402,8 @@ def _setitem_check(self, key, value): When assigning values to a subset of a Dataset, do consistency check beforehand to avoid leaving the dataset in a partially updated state when an error occurs. """ - from xarray.core.alignment import align from xarray.core.dataarray import DataArray + from xarray.structure.alignment import align if isinstance(value, Dataset): missing_vars = [ @@ -5297,7 +5297,7 @@ def to_stacked_array( Dimensions without coordinates: x """ - from xarray.core.concat import concat + from xarray.structure.concat import concat stacking_dims = tuple(dim for dim in self.dims if dim not in sample_dims) @@ -9784,8 +9784,8 @@ def curvefit( from scipy.optimize import curve_fit from xarray.computation.computation import apply_ufunc - from xarray.core.alignment import broadcast from xarray.core.dataarray import _THIS_ARRAY, DataArray + from xarray.structure.alignment import broadcast if p0 is None: p0 = {} diff --git a/xarray/core/datatree.py b/xarray/core/datatree.py index 5abcf2bfe4a..4fe91bd9a12 100644 --- a/xarray/core/datatree.py +++ b/xarray/core/datatree.py @@ -27,7 +27,6 @@ from xarray.core import utils from xarray.core._aggregations import DataTreeAggregations from xarray.core._typed_ops import DataTreeOpsMixin -from xarray.core.alignment import align from xarray.core.common import TreeAttrAccessMixin, get_chunksizes from xarray.core.coordinates import Coordinates, DataTreeCoordinates from xarray.core.dataarray import DataArray @@ -45,7 +44,6 @@ datatree_repr as datatree_repr_html, ) from xarray.core.indexes import Index, Indexes -from xarray.core.merge import dataset_update_method from xarray.core.options import OPTIONS as XR_OPTS from xarray.core.treenode import NamedNode, NodePath, zip_subtrees from xarray.core.types import Self @@ -62,6 +60,8 @@ from xarray.core.variable import Variable from xarray.namedarray.parallelcompat import get_chunked_array_type from xarray.namedarray.pycompat import is_chunked_array +from xarray.structure.alignment import align +from xarray.structure.merge import dataset_update_method try: from xarray.core.variable import calculate_dimensions @@ -74,7 +74,6 @@ import pandas as pd from xarray.core.datatree_io import T_DataTreeNetcdfEngine, T_DataTreeNetcdfTypes - from xarray.core.merge import CoercibleMapping, CoercibleValue from xarray.core.types import ( Dims, DtCompatible, @@ -86,6 +85,7 @@ ZarrWriteModes, ) from xarray.namedarray.parallelcompat import ChunkManagerEntrypoint + from xarray.structure.merge import CoercibleMapping, CoercibleValue # """ # DEVELOPERS' NOTE diff --git a/xarray/core/groupby.py b/xarray/core/groupby.py index fa0c20d98fe..a0540d3a1b2 100644 --- a/xarray/core/groupby.py +++ b/xarray/core/groupby.py @@ -22,9 +22,7 @@ DataArrayGroupByAggregations, DatasetGroupByAggregations, ) -from xarray.core.alignment import align, broadcast from xarray.core.common import ImplementsArrayReduce, ImplementsDatasetReduce -from xarray.core.concat import concat from xarray.core.coordinates import Coordinates, _coordinates_from_variable from xarray.core.duck_array_ops import where from xarray.core.formatting import format_array_flat @@ -32,7 +30,6 @@ PandasMultiIndex, filter_indexes_from_coords, ) -from xarray.core.merge import merge_coords from xarray.core.options import OPTIONS, _get_keep_attrs from xarray.core.types import ( Dims, @@ -54,6 +51,9 @@ ) from xarray.core.variable import IndexVariable, Variable from xarray.namedarray.pycompat import is_chunked_array +from xarray.structure.alignment import align, broadcast +from xarray.structure.concat import concat +from xarray.structure.merge import merge_coords if TYPE_CHECKING: from numpy.typing import ArrayLike diff --git a/xarray/core/parallel.py b/xarray/core/parallel.py index 1b2afbe516b..996325e179a 100644 --- a/xarray/core/parallel.py +++ b/xarray/core/parallel.py @@ -8,14 +8,14 @@ import numpy as np -from xarray.core.alignment import align from xarray.core.coordinates import Coordinates from xarray.core.dataarray import DataArray from xarray.core.dataset import Dataset from xarray.core.indexes import Index -from xarray.core.merge import merge from xarray.core.utils import is_dask_collection from xarray.core.variable import Variable +from xarray.structure.alignment import align +from xarray.structure.merge import merge if TYPE_CHECKING: from xarray.core.types import T_Xarray diff --git a/xarray/core/types.py b/xarray/core/types.py index 186738ed718..dc95f3e2d69 100644 --- a/xarray/core/types.py +++ b/xarray/core/types.py @@ -38,7 +38,6 @@ if TYPE_CHECKING: from xarray.backends.common import BackendEntrypoint - from xarray.core.alignment import Aligner from xarray.core.common import AbstractArray, DataWithCoords from xarray.core.coordinates import Coordinates from xarray.core.dataarray import DataArray @@ -48,6 +47,7 @@ from xarray.core.utils import Frozen from xarray.core.variable import IndexVariable, Variable from xarray.groupers import Grouper, TimeResampler + from xarray.structure.alignment import Aligner GroupInput: TypeAlias = ( str @@ -141,7 +141,7 @@ def xindexes(self) -> Indexes[Index]: ... def _reindex_callback( self, - aligner: Aligner, + aligner: Any, dim_pos_indexers: dict[Hashable, Any], variables: dict[Hashable, Variable], indexes: dict[Hashable, Index], @@ -167,6 +167,7 @@ def copy( T_Alignable = TypeVar("T_Alignable", bound="Alignable") +T_Aligner = TypeVar("T_Aligner", bound="Aligner") T_Backend = TypeVar("T_Backend", bound="BackendEntrypoint") T_Dataset = TypeVar("T_Dataset", bound="Dataset") diff --git a/xarray/core/variable.py b/xarray/core/variable.py index bc9e6d17a07..52389a4bba9 100644 --- a/xarray/core/variable.py +++ b/xarray/core/variable.py @@ -1710,7 +1710,7 @@ def concat( Concatenated Variable formed by stacking all the supplied variables along the given dimension. """ - from xarray.core.merge import merge_attrs + from xarray.structure.merge import merge_attrs if not isinstance(dim, str): (dim,) = dim.dims @@ -2713,7 +2713,7 @@ def concat( This exists because we want to avoid converting Index objects to NumPy arrays, if possible. """ - from xarray.core.merge import merge_attrs + from xarray.structure.merge import merge_attrs if not isinstance(dim, str): (dim,) = dim.dims diff --git a/xarray/plot/dataarray_plot.py b/xarray/plot/dataarray_plot.py index cca9fe4f561..99c06e4c41b 100644 --- a/xarray/plot/dataarray_plot.py +++ b/xarray/plot/dataarray_plot.py @@ -8,8 +8,6 @@ import numpy as np import pandas as pd -from xarray.core.alignment import broadcast -from xarray.core.concat import concat from xarray.core.utils import attempt_import from xarray.plot.facetgrid import _easy_facetgrid from xarray.plot.utils import ( @@ -33,6 +31,8 @@ get_axis, label_from_attrs, ) +from xarray.structure.alignment import broadcast +from xarray.structure.concat import concat if TYPE_CHECKING: from matplotlib.axes import Axes diff --git a/xarray/plot/dataset_plot.py b/xarray/plot/dataset_plot.py index 44d4ffa676a..341125a55ee 100644 --- a/xarray/plot/dataset_plot.py +++ b/xarray/plot/dataset_plot.py @@ -6,7 +6,6 @@ from collections.abc import Callable, Hashable, Iterable from typing import TYPE_CHECKING, Any, TypeVar, overload -from xarray.core.alignment import broadcast from xarray.plot import dataarray_plot from xarray.plot.facetgrid import _easy_facetgrid from xarray.plot.utils import ( @@ -16,6 +15,7 @@ _process_cmap_cbar_kwargs, get_axis, ) +from xarray.structure.alignment import broadcast if TYPE_CHECKING: from matplotlib.axes import Axes diff --git a/xarray/structure/__init__.py b/xarray/structure/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/xarray/core/alignment.py b/xarray/structure/alignment.py similarity index 100% rename from xarray/core/alignment.py rename to xarray/structure/alignment.py diff --git a/xarray/core/combine.py b/xarray/structure/combine.py similarity index 99% rename from xarray/core/combine.py rename to xarray/structure/combine.py index f02d046fff6..01c14dffee4 100644 --- a/xarray/core/combine.py +++ b/xarray/structure/combine.py @@ -7,11 +7,11 @@ import pandas as pd from xarray.core import dtypes -from xarray.core.concat import concat from xarray.core.dataarray import DataArray from xarray.core.dataset import Dataset -from xarray.core.merge import merge from xarray.core.utils import iterate_nested +from xarray.structure.concat import concat +from xarray.structure.merge import merge if TYPE_CHECKING: from xarray.core.types import ( diff --git a/xarray/core/concat.py b/xarray/structure/concat.py similarity index 99% rename from xarray/core/concat.py rename to xarray/structure/concat.py index b824aabbb23..d1d64b4e1e3 100644 --- a/xarray/core/concat.py +++ b/xarray/structure/concat.py @@ -7,19 +7,19 @@ import pandas as pd from xarray.core import dtypes, utils -from xarray.core.alignment import align, reindex_variables from xarray.core.coordinates import Coordinates from xarray.core.duck_array_ops import lazy_array_equiv from xarray.core.indexes import Index, PandasIndex -from xarray.core.merge import ( +from xarray.core.types import T_DataArray, T_Dataset, T_Variable +from xarray.core.variable import Variable +from xarray.core.variable import concat as concat_vars +from xarray.structure.alignment import align, reindex_variables +from xarray.structure.merge import ( _VALID_COMPAT, collect_variables_and_indexes, merge_attrs, merge_collected, ) -from xarray.core.types import T_DataArray, T_Dataset, T_Variable -from xarray.core.variable import Variable -from xarray.core.variable import concat as concat_vars if TYPE_CHECKING: from xarray.core.types import ( diff --git a/xarray/core/merge.py b/xarray/structure/merge.py similarity index 99% rename from xarray/core/merge.py rename to xarray/structure/merge.py index 70ad387fb88..a06fbfc6d81 100644 --- a/xarray/core/merge.py +++ b/xarray/structure/merge.py @@ -7,7 +7,6 @@ import pandas as pd from xarray.core import dtypes -from xarray.core.alignment import deep_align from xarray.core.duck_array_ops import lazy_array_equiv from xarray.core.indexes import ( Index, @@ -17,6 +16,7 @@ ) from xarray.core.utils import Frozen, compat_dict_union, dict_equiv, equivalent from xarray.core.variable import Variable, as_variable, calculate_dimensions +from xarray.structure.alignment import deep_align if TYPE_CHECKING: from xarray.core.coordinates import Coordinates @@ -677,10 +677,6 @@ def merge_core( Dictionary mapping from dimension names to sizes. attrs : dict Dictionary of attributes - - Raises - ------ - MergeError if the merge cannot be done successfully. """ from xarray.core.dataarray import DataArray from xarray.core.dataset import Dataset diff --git a/xarray/tests/test_combine.py b/xarray/tests/test_combine.py index cc20ab414ee..80a795c4c52 100644 --- a/xarray/tests/test_combine.py +++ b/xarray/tests/test_combine.py @@ -15,7 +15,7 @@ merge, ) from xarray.core import dtypes -from xarray.core.combine import ( +from xarray.structure.combine import ( _check_shape_tile_ids, _combine_all_along_first_dim, _combine_nd, diff --git a/xarray/tests/test_computation.py b/xarray/tests/test_computation.py index 3abb63e9600..dc7016238df 100644 --- a/xarray/tests/test_computation.py +++ b/xarray/tests/test_computation.py @@ -20,8 +20,8 @@ ordered_set_union, unified_dim_sizes, ) -from xarray.core.alignment import broadcast from xarray.core.utils import result_name +from xarray.structure.alignment import broadcast from xarray.tests import ( has_dask, raise_if_dask_computes, diff --git a/xarray/tests/test_concat.py b/xarray/tests/test_concat.py index 9e8e06fc1ee..b4b02e25aee 100644 --- a/xarray/tests/test_concat.py +++ b/xarray/tests/test_concat.py @@ -9,9 +9,10 @@ import pytest from xarray import DataArray, Dataset, Variable, concat -from xarray.core import dtypes, merge +from xarray.core import dtypes from xarray.core.coordinates import Coordinates from xarray.core.indexes import PandasIndex +from xarray.structure import merge from xarray.tests import ( ConcatenatableArray, InaccessibleArray, diff --git a/xarray/tests/test_coordinates.py b/xarray/tests/test_coordinates.py index fe54a79c32a..b4ba922203a 100644 --- a/xarray/tests/test_coordinates.py +++ b/xarray/tests/test_coordinates.py @@ -6,12 +6,12 @@ import pandas as pd import pytest -from xarray.core.alignment import align from xarray.core.coordinates import Coordinates from xarray.core.dataarray import DataArray from xarray.core.dataset import Dataset from xarray.core.indexes import Index, PandasIndex, PandasMultiIndex from xarray.core.variable import IndexVariable, Variable +from xarray.structure.alignment import align from xarray.tests import assert_identical, source_ndarray diff --git a/xarray/tests/test_groupby.py b/xarray/tests/test_groupby.py index d42f86f5ea6..89ac567a4d8 100644 --- a/xarray/tests/test_groupby.py +++ b/xarray/tests/test_groupby.py @@ -14,7 +14,6 @@ import xarray as xr from xarray import DataArray, Dataset, Variable -from xarray.core.alignment import broadcast from xarray.core.groupby import _consolidate_slices from xarray.core.types import InterpOptions, ResampleCompatible from xarray.groupers import ( @@ -25,6 +24,7 @@ UniqueGrouper, ) from xarray.namedarray.pycompat import is_chunked_array +from xarray.structure.alignment import broadcast from xarray.tests import ( InaccessibleArray, assert_allclose, diff --git a/xarray/tests/test_merge.py b/xarray/tests/test_merge.py index 52935e9714e..302d26df8f3 100644 --- a/xarray/tests/test_merge.py +++ b/xarray/tests/test_merge.py @@ -4,8 +4,9 @@ import pytest import xarray as xr -from xarray.core import dtypes, merge -from xarray.core.merge import MergeError +from xarray.core import dtypes +from xarray.structure import merge +from xarray.structure.merge import MergeError from xarray.testing import assert_equal, assert_identical from xarray.tests.test_dataset import create_test_data