Skip to content

Commit 2b5e936

Browse files
committed
12k->15k
1 parent b464438 commit 2b5e936

File tree

3 files changed

+54
-12
lines changed

3 files changed

+54
-12
lines changed

xarray/core/dataarray.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -1503,7 +1503,11 @@ def isel(
15031503
# lists, or zero or one-dimensional np.ndarray's
15041504

15051505
variable = self._variable.isel(indexers, missing_dims=missing_dims)
1506-
indexes, index_variables = isel_indexes(self.xindexes, indexers)
1506+
indexes, index_variables = isel_indexes(
1507+
self._indexes,
1508+
self._coords,
1509+
indexers,
1510+
)
15071511

15081512
coords = {}
15091513
for coord_name, coord_value in self._coords.items():

xarray/core/dataset.py

+15-4
Original file line numberDiff line numberDiff line change
@@ -2979,8 +2979,11 @@ def isel(
29792979
dims: dict[Hashable, int] = {}
29802980
coord_names = self._coord_names.copy()
29812981

2982-
indexes, index_variables = isel_indexes(self.xindexes, indexers)
2983-
2982+
indexes, index_variables = isel_indexes(
2983+
self._indexes,
2984+
self.coords,
2985+
indexers,
2986+
)
29842987
for name, var in self._variables.items():
29852988
# preserve variable order
29862989
if name in index_variables:
@@ -3015,7 +3018,11 @@ def _isel_fancy(
30153018
valid_indexers = dict(self._validate_indexers(indexers, missing_dims))
30163019

30173020
variables: dict[Hashable, Variable] = {}
3018-
indexes, index_variables = isel_indexes(self.xindexes, valid_indexers)
3021+
indexes, index_variables = isel_indexes(
3022+
self._indexes,
3023+
self.coords,
3024+
valid_indexers,
3025+
)
30193026

30203027
for name, var in self.variables.items():
30213028
if name in index_variables:
@@ -7828,7 +7835,11 @@ def diff(
78287835
else:
78297836
raise ValueError("The 'label' argument has to be either 'upper' or 'lower'")
78307837

7831-
indexes, index_vars = isel_indexes(self.xindexes, slice_new)
7838+
indexes, index_vars = isel_indexes(
7839+
self._indexes,
7840+
self.coords,
7841+
slice_new
7842+
)
78327843
variables = {}
78337844

78347845
for name, var in self.variables.items():

xarray/core/indexes.py

+34-7
Original file line numberDiff line numberDiff line change
@@ -1480,13 +1480,15 @@ def _id_index(self) -> dict[int, T_PandasOrXarrayIndex]:
14801480
@property
14811481
def _id_coord_names(self) -> dict[int, tuple[Hashable, ...]]:
14821482
if self.__id_coord_names is None:
1483-
id_coord_names: Mapping[int, list[Hashable]] = defaultdict(list)
1484-
for k, v in self._coord_name_id.items():
1485-
id_coord_names[v].append(k)
1486-
self.__id_coord_names = {k: tuple(v) for k, v in id_coord_names.items()}
1487-
1483+
self._create_id_coord_names()
14881484
return self.__id_coord_names
14891485

1486+
def _create_id_coord_names(self) -> None:
1487+
id_coord_names: Mapping[int, list[Hashable]] = defaultdict(list)
1488+
for k, v in self._coord_name_id.items():
1489+
id_coord_names[v].append(k)
1490+
self.__id_coord_names = {k: tuple(v) for k, v in id_coord_names.items()}
1491+
14901492
@property
14911493
def variables(self) -> Mapping[Hashable, Variable]:
14921494
return Frozen(self._variables)
@@ -1772,6 +1774,30 @@ def check_variables():
17721774
return not not_equal
17731775

17741776

1777+
def _apply_indexes_isel(
1778+
indexes: dict[Hashable, Index],
1779+
coords,
1780+
args: Mapping[Any, Any],
1781+
):
1782+
new_indexes: dict[Hashable, Index] = {k: v for k, v in indexes.items()}
1783+
new_index_variables: dict[Hashable, Variable] = {}
1784+
for name, index in indexes.items():
1785+
index_args = {k: v for k, v in args.items() if k == name}
1786+
index_dims = (name,)
1787+
index_vars = {name: coords[name]}
1788+
if index_args:
1789+
new_index = index.isel(index_args)
1790+
if new_index is not None:
1791+
new_indexes.update({k: new_index for k in index_vars})
1792+
new_index_vars = new_index.create_variables(index_vars)
1793+
new_index_variables.update(new_index_vars)
1794+
new_index_variables.update(new_index_vars)
1795+
else:
1796+
for k in index_vars:
1797+
new_indexes.pop(k, None)
1798+
return new_indexes, new_index_variables
1799+
1800+
17751801
def _apply_indexes(
17761802
indexes: Indexes[Index],
17771803
args: Mapping[Any, Any],
@@ -1797,10 +1823,11 @@ def _apply_indexes(
17971823

17981824

17991825
def isel_indexes(
1800-
indexes: Indexes[Index],
1826+
indexes,
1827+
coords,
18011828
indexers: Mapping[Any, Any],
18021829
) -> tuple[dict[Hashable, Index], dict[Hashable, Variable]]:
1803-
return _apply_indexes(indexes, indexers, "isel")
1830+
return _apply_indexes_isel(indexes, coords, indexers)
18041831

18051832

18061833
def roll_indexes(

0 commit comments

Comments
 (0)