Skip to content

Commit 05c3609

Browse files
HasanAhmadQ7HasanAhmadQ7
HasanAhmadQ7
authored and
HasanAhmadQ7
committed
BUG .sel method gives error with float32 values
avoid copying indexers for efficiency
1 parent 0794f41 commit 05c3609

File tree

1 file changed

+19
-15
lines changed

1 file changed

+19
-15
lines changed

xarray/core/dataset.py

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1814,9 +1814,17 @@ def sel(self, indexers=None, method=None, tolerance=None, drop=False,
18141814
DataArray.sel
18151815
"""
18161816
indexers = either_dict_or_kwargs(indexers, indexers_kwargs, 'sel')
1817-
casted_indexers = self._maybe_cast_floats(indexers)
1817+
casting_keys = self._get_casting_keys(indexers.keys())
1818+
from .dataarray import DataArray
1819+
for k in casting_keys:
1820+
if isinstance(indexers[k], (slice, DataArray, Variable)):
1821+
pass
1822+
else:
1823+
casting_type = getattr(self.coords[k].values.dtype, "type")
1824+
indexers[k] = casting_type(indexers[k])
1825+
18181826
pos_indexers, new_indexes = remap_label_indexers(
1819-
self, indexers=casted_indexers, method=method, tolerance=tolerance)
1827+
self, indexers=indexers, method=method, tolerance=tolerance)
18201828
result = self.isel(indexers=pos_indexers, drop=drop)
18211829
return result._overwrite_indexes(new_indexes)
18221830

@@ -2324,20 +2332,16 @@ def interp_like(self, other, method='linear', assume_sorted=False,
23242332
return ds.interp(numeric_coords, method, assume_sorted, kwargs)
23252333

23262334
# Helper method for sel()
2327-
def _maybe_cast_floats(self, indexers):
2328-
""" Cast float labels passed to sel() method to the float
2329-
types of the corresponding coordinates"""
2330-
from .dataarray import DataArray
2331-
casted_indexers = indexers.copy()
2332-
for k, v in indexers.items():
2335+
def _get_casting_keys(self, indexers_keys):
2336+
casting_keys = []
2337+
coords_keys = self.coords.keys()
2338+
common_keys = list(set(indexers_keys) & set(coords_keys))
2339+
for k in common_keys:
23332340
coords_var = self.coords[k].values
2334-
if isinstance(indexers[k], (slice, DataArray, Variable)):
2335-
pass
2336-
elif (isinstance(coords_var, np.ndarray) and
2337-
coords_var.dtype.kind == 'f'):
2338-
casting_type = getattr(coords_var.dtype, "type")
2339-
casted_indexers[k] = casting_type(indexers[k])
2340-
return casted_indexers
2341+
if (isinstance(coords_var, np.ndarray) and
2342+
coords_var.dtype.kind == 'f'):
2343+
casting_keys.append(k)
2344+
return casting_keys
23412345

23422346
# Helper methods for rename()
23432347
def _rename_vars(self, name_dict, dims_dict):

0 commit comments

Comments
 (0)