Skip to content

Commit 8ba2707

Browse files
authored
Refactor concat / combine / merge into xarray/structure (#10134)
* Refactor concat / combine / merge into `xarray/structure`
1 parent e4c1a04 commit 8ba2707

28 files changed

+75
-75
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ check_untyped_defs = true
169169
module = [
170170
"xarray.core.accessor_dt",
171171
"xarray.core.accessor_str",
172-
"xarray.core.alignment",
172+
"xarray.structure.alignment",
173173
"xarray.computation.*",
174174
"xarray.indexes.*",
175175
"xarray.tests.*",

xarray/__init__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,7 @@
2828
where,
2929
)
3030
from xarray.conventions import SerializationWarning, decode_cf
31-
from xarray.core.alignment import align, broadcast
32-
from xarray.core.combine import combine_by_coords, combine_nested
3331
from xarray.core.common import ALL_DIMS, full_like, ones_like, zeros_like
34-
from xarray.core.concat import concat
3532
from xarray.core.coordinates import Coordinates
3633
from xarray.core.dataarray import DataArray
3734
from xarray.core.dataset import Dataset
@@ -44,7 +41,6 @@
4441
)
4542
from xarray.core.indexes import Index
4643
from xarray.core.indexing import IndexSelResult
47-
from xarray.core.merge import Context, MergeError, merge
4844
from xarray.core.options import get_options, set_options
4945
from xarray.core.parallel import map_blocks
5046
from xarray.core.treenode import (
@@ -55,6 +51,10 @@
5551
)
5652
from xarray.core.variable import IndexVariable, Variable, as_variable
5753
from xarray.namedarray.core import NamedArray
54+
from xarray.structure.alignment import align, broadcast
55+
from xarray.structure.combine import combine_by_coords, combine_nested
56+
from xarray.structure.concat import concat
57+
from xarray.structure.merge import Context, MergeError, merge
5858
from xarray.util.print_versions import show_versions
5959

6060
try:

xarray/backends/api.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,6 @@
3636
from xarray.coders import CFDatetimeCoder, CFTimedeltaCoder
3737
from xarray.core import indexing
3838
from xarray.core.chunk import _get_chunk, _maybe_chunk
39-
from xarray.core.combine import (
40-
_infer_concat_order_from_positions,
41-
_nested_combine,
42-
combine_by_coords,
43-
)
4439
from xarray.core.dataarray import DataArray
4540
from xarray.core.dataset import Dataset
4641
from xarray.core.datatree import DataTree
@@ -50,6 +45,11 @@
5045
from xarray.core.utils import is_remote_uri
5146
from xarray.namedarray.daskmanager import DaskManager
5247
from xarray.namedarray.parallelcompat import guess_chunkmanager
48+
from xarray.structure.combine import (
49+
_infer_concat_order_from_positions,
50+
_nested_combine,
51+
combine_by_coords,
52+
)
5353

5454
if TYPE_CHECKING:
5555
try:

xarray/computation/apply_ufunc.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,8 @@
2727
_V = TypeVar("_V", bound=Union["Dataset", "DataArray"])
2828

2929
from xarray.core import duck_array_ops, utils
30-
from xarray.core.alignment import deep_align
3130
from xarray.core.formatting import limit_lines
3231
from xarray.core.indexes import Index, filter_indexes_from_coords
33-
from xarray.core.merge import merge_attrs, merge_coordinates_without_align
3432
from xarray.core.options import _get_keep_attrs
3533
from xarray.core.utils import (
3634
is_dict_like,
@@ -39,6 +37,8 @@
3937
from xarray.core.variable import Variable
4038
from xarray.namedarray.parallelcompat import get_chunked_array_type
4139
from xarray.namedarray.pycompat import is_chunked_array
40+
from xarray.structure.alignment import deep_align
41+
from xarray.structure.merge import merge_attrs, merge_coordinates_without_align
4242

4343
if TYPE_CHECKING:
4444
from xarray.core.coordinates import Coordinates

xarray/computation/computation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
from xarray.compat.array_api_compat import to_like_array
2121
from xarray.computation.apply_ufunc import apply_ufunc
2222
from xarray.core import dtypes, duck_array_ops, utils
23-
from xarray.core.alignment import align
2423
from xarray.core.common import zeros_like
2524
from xarray.core.duck_array_ops import datetime_to_numeric
2625
from xarray.core.options import OPTIONS, _get_keep_attrs
@@ -32,6 +31,7 @@
3231
from xarray.core.variable import Variable
3332
from xarray.namedarray.parallelcompat import get_chunked_array_type
3433
from xarray.namedarray.pycompat import is_chunked_array
34+
from xarray.structure.alignment import align
3535
from xarray.util.deprecation_helpers import deprecate_dims
3636

3737
if TYPE_CHECKING:

xarray/computation/weighted.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
from xarray.computation.apply_ufunc import apply_ufunc
1010
from xarray.computation.computation import dot
1111
from xarray.core import duck_array_ops, utils
12-
from xarray.core.alignment import align, broadcast
1312
from xarray.core.types import Dims, T_DataArray, T_Xarray
1413
from xarray.namedarray.utils import is_duck_dask_array
14+
from xarray.structure.alignment import align, broadcast
1515

1616
# Weighted quantile methods are a subset of the numpy supported quantile methods.
1717
QUANTILE_METHODS = Literal[

xarray/core/common.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1216,9 +1216,9 @@ def where(self, cond: Any, other: Any = dtypes.NA, drop: bool = False) -> Self:
12161216
numpy.where : corresponding numpy function
12171217
where : equivalent function
12181218
"""
1219-
from xarray.core.alignment import align
12201219
from xarray.core.dataarray import DataArray
12211220
from xarray.core.dataset import Dataset
1221+
from xarray.structure.alignment import align
12221222

12231223
if callable(cond):
12241224
cond = cond(self)

xarray/core/coordinates.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import pandas as pd
1414

1515
from xarray.core import formatting
16-
from xarray.core.alignment import Aligner
1716
from xarray.core.indexes import (
1817
Index,
1918
Indexes,
@@ -22,7 +21,6 @@
2221
assert_no_index_corrupted,
2322
create_default_index_implicit,
2423
)
25-
from xarray.core.merge import merge_coordinates_without_align, merge_coords
2624
from xarray.core.types import DataVars, Self, T_DataArray, T_Xarray
2725
from xarray.core.utils import (
2826
Frozen,
@@ -31,6 +29,8 @@
3129
emit_user_level_warning,
3230
)
3331
from xarray.core.variable import Variable, as_variable, calculate_dimensions
32+
from xarray.structure.alignment import Aligner
33+
from xarray.structure.merge import merge_coordinates_without_align, merge_coords
3434

3535
if TYPE_CHECKING:
3636
from xarray.core.common import DataWithCoords

xarray/core/dataarray.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,10 @@
3232
from xarray.computation import computation, ops
3333
from xarray.computation.arithmetic import DataArrayArithmetic
3434
from xarray.computation.computation import unify_chunks
35-
from xarray.core import alignment, dtypes, indexing, utils
35+
from xarray.core import dtypes, indexing, utils
3636
from xarray.core._aggregations import DataArrayAggregations
3737
from xarray.core.accessor_dt import CombinedDatetimelikeAccessor
3838
from xarray.core.accessor_str import StringAccessor
39-
from xarray.core.alignment import (
40-
_broadcast_helper,
41-
_get_broadcast_dims_map_common_coords,
42-
align,
43-
)
4439
from xarray.core.common import AbstractArray, DataWithCoords, get_chunksizes
4540
from xarray.core.coordinates import (
4641
Coordinates,
@@ -59,7 +54,6 @@
5954
isel_indexes,
6055
)
6156
from xarray.core.indexing import is_fancy_indexer, map_index_queries
62-
from xarray.core.merge import PANDAS_TYPES, MergeError
6357
from xarray.core.options import OPTIONS, _get_keep_attrs
6458
from xarray.core.types import (
6559
Bins,
@@ -88,6 +82,13 @@
8882
)
8983
from xarray.plot.accessor import DataArrayPlotAccessor
9084
from xarray.plot.utils import _get_units_from_attrs
85+
from xarray.structure import alignment
86+
from xarray.structure.alignment import (
87+
_broadcast_helper,
88+
_get_broadcast_dims_map_common_coords,
89+
align,
90+
)
91+
from xarray.structure.merge import PANDAS_TYPES, MergeError
9192
from xarray.util.deprecation_helpers import _deprecate_positional_args, deprecate_dims
9293

9394
if TYPE_CHECKING:

xarray/core/dataset.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -45,20 +45,14 @@
4545
from xarray.computation import ops
4646
from xarray.computation.arithmetic import DatasetArithmetic
4747
from xarray.computation.computation import _ensure_numeric, unify_chunks
48+
from xarray.core import dtypes as xrdtypes
4849
from xarray.core import (
49-
alignment,
5050
duck_array_ops,
5151
formatting,
5252
formatting_html,
5353
utils,
5454
)
55-
from xarray.core import dtypes as xrdtypes
5655
from xarray.core._aggregations import DatasetAggregations
57-
from xarray.core.alignment import (
58-
_broadcast_helper,
59-
_get_broadcast_dims_map_common_coords,
60-
align,
61-
)
6256
from xarray.core.common import (
6357
DataWithCoords,
6458
_contains_datetime_like_objects,
@@ -83,12 +77,6 @@
8377
roll_indexes,
8478
)
8579
from xarray.core.indexing import is_fancy_indexer, map_index_queries
86-
from xarray.core.merge import (
87-
dataset_merge_method,
88-
dataset_update_method,
89-
merge_coordinates_without_align,
90-
merge_data_and_coords,
91-
)
9280
from xarray.core.options import OPTIONS, _get_keep_attrs
9381
from xarray.core.types import (
9482
Bins,
@@ -131,6 +119,18 @@
131119
from xarray.namedarray.parallelcompat import get_chunked_array_type, guess_chunkmanager
132120
from xarray.namedarray.pycompat import array_type, is_chunked_array, to_numpy
133121
from xarray.plot.accessor import DatasetPlotAccessor
122+
from xarray.structure import alignment
123+
from xarray.structure.alignment import (
124+
_broadcast_helper,
125+
_get_broadcast_dims_map_common_coords,
126+
align,
127+
)
128+
from xarray.structure.merge import (
129+
dataset_merge_method,
130+
dataset_update_method,
131+
merge_coordinates_without_align,
132+
merge_data_and_coords,
133+
)
134134
from xarray.util.deprecation_helpers import _deprecate_positional_args, deprecate_dims
135135

136136
if TYPE_CHECKING:
@@ -144,7 +144,6 @@
144144
from xarray.computation.weighted import DatasetWeighted
145145
from xarray.core.dataarray import DataArray
146146
from xarray.core.groupby import DatasetGroupBy
147-
from xarray.core.merge import CoercibleMapping, CoercibleValue
148147
from xarray.core.resample import DatasetResample
149148
from xarray.core.types import (
150149
CFCalendar,
@@ -176,6 +175,7 @@
176175
)
177176
from xarray.groupers import Grouper, Resampler
178177
from xarray.namedarray.parallelcompat import ChunkManagerEntrypoint
178+
from xarray.structure.merge import CoercibleMapping, CoercibleValue
179179

180180

181181
# list of attributes of pd.DatetimeIndex that are ndarrays of time info
@@ -1402,8 +1402,8 @@ def _setitem_check(self, key, value):
14021402
When assigning values to a subset of a Dataset, do consistency check beforehand
14031403
to avoid leaving the dataset in a partially updated state when an error occurs.
14041404
"""
1405-
from xarray.core.alignment import align
14061405
from xarray.core.dataarray import DataArray
1406+
from xarray.structure.alignment import align
14071407

14081408
if isinstance(value, Dataset):
14091409
missing_vars = [
@@ -5297,7 +5297,7 @@ def to_stacked_array(
52975297
Dimensions without coordinates: x
52985298
52995299
"""
5300-
from xarray.core.concat import concat
5300+
from xarray.structure.concat import concat
53015301

53025302
stacking_dims = tuple(dim for dim in self.dims if dim not in sample_dims)
53035303

@@ -9784,8 +9784,8 @@ def curvefit(
97849784
from scipy.optimize import curve_fit
97859785

97869786
from xarray.computation.computation import apply_ufunc
9787-
from xarray.core.alignment import broadcast
97889787
from xarray.core.dataarray import _THIS_ARRAY, DataArray
9788+
from xarray.structure.alignment import broadcast
97899789

97909790
if p0 is None:
97919791
p0 = {}

xarray/core/datatree.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
from xarray.core import utils
2828
from xarray.core._aggregations import DataTreeAggregations
2929
from xarray.core._typed_ops import DataTreeOpsMixin
30-
from xarray.core.alignment import align
3130
from xarray.core.common import TreeAttrAccessMixin, get_chunksizes
3231
from xarray.core.coordinates import Coordinates, DataTreeCoordinates
3332
from xarray.core.dataarray import DataArray
@@ -45,7 +44,6 @@
4544
datatree_repr as datatree_repr_html,
4645
)
4746
from xarray.core.indexes import Index, Indexes
48-
from xarray.core.merge import dataset_update_method
4947
from xarray.core.options import OPTIONS as XR_OPTS
5048
from xarray.core.treenode import NamedNode, NodePath, zip_subtrees
5149
from xarray.core.types import Self
@@ -62,6 +60,8 @@
6260
from xarray.core.variable import Variable
6361
from xarray.namedarray.parallelcompat import get_chunked_array_type
6462
from xarray.namedarray.pycompat import is_chunked_array
63+
from xarray.structure.alignment import align
64+
from xarray.structure.merge import dataset_update_method
6565

6666
try:
6767
from xarray.core.variable import calculate_dimensions
@@ -74,7 +74,6 @@
7474
import pandas as pd
7575

7676
from xarray.core.datatree_io import T_DataTreeNetcdfEngine, T_DataTreeNetcdfTypes
77-
from xarray.core.merge import CoercibleMapping, CoercibleValue
7877
from xarray.core.types import (
7978
Dims,
8079
DtCompatible,
@@ -86,6 +85,7 @@
8685
ZarrWriteModes,
8786
)
8887
from xarray.namedarray.parallelcompat import ChunkManagerEntrypoint
88+
from xarray.structure.merge import CoercibleMapping, CoercibleValue
8989

9090
# """
9191
# DEVELOPERS' NOTE

xarray/core/groupby.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,14 @@
2222
DataArrayGroupByAggregations,
2323
DatasetGroupByAggregations,
2424
)
25-
from xarray.core.alignment import align, broadcast
2625
from xarray.core.common import ImplementsArrayReduce, ImplementsDatasetReduce
27-
from xarray.core.concat import concat
2826
from xarray.core.coordinates import Coordinates, _coordinates_from_variable
2927
from xarray.core.duck_array_ops import where
3028
from xarray.core.formatting import format_array_flat
3129
from xarray.core.indexes import (
3230
PandasMultiIndex,
3331
filter_indexes_from_coords,
3432
)
35-
from xarray.core.merge import merge_coords
3633
from xarray.core.options import OPTIONS, _get_keep_attrs
3734
from xarray.core.types import (
3835
Dims,
@@ -54,6 +51,9 @@
5451
)
5552
from xarray.core.variable import IndexVariable, Variable
5653
from xarray.namedarray.pycompat import is_chunked_array
54+
from xarray.structure.alignment import align, broadcast
55+
from xarray.structure.concat import concat
56+
from xarray.structure.merge import merge_coords
5757

5858
if TYPE_CHECKING:
5959
from numpy.typing import ArrayLike

xarray/core/parallel.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88

99
import numpy as np
1010

11-
from xarray.core.alignment import align
1211
from xarray.core.coordinates import Coordinates
1312
from xarray.core.dataarray import DataArray
1413
from xarray.core.dataset import Dataset
1514
from xarray.core.indexes import Index
16-
from xarray.core.merge import merge
1715
from xarray.core.utils import is_dask_collection
1816
from xarray.core.variable import Variable
17+
from xarray.structure.alignment import align
18+
from xarray.structure.merge import merge
1919

2020
if TYPE_CHECKING:
2121
from xarray.core.types import T_Xarray

0 commit comments

Comments
 (0)