Execute index queries from a DataArray / Dataset and label-based indexers and return the (merged) query results.
(
obj: T_Xarray,
indexers: Mapping[Any, Any],
method=None,
tolerance: int | float | Iterable[int | float] | None = None,
**indexers_kwargs: Any,
)
| 184 | |
| 185 | |
| 186 | def map_index_queries( |
| 187 | obj: T_Xarray, |
| 188 | indexers: Mapping[Any, Any], |
| 189 | method=None, |
| 190 | tolerance: int | float | Iterable[int | float] | None = None, |
| 191 | **indexers_kwargs: Any, |
| 192 | ) -> IndexSelResult: |
| 193 | """Execute index queries from a DataArray / Dataset and label-based indexers |
| 194 | and return the (merged) query results. |
| 195 | |
| 196 | """ |
| 197 | from xarray.core.dataarray import DataArray |
| 198 | |
| 199 | # TODO benbovy - flexible indexes: remove when custom index options are available |
| 200 | if method is None and tolerance is None: |
| 201 | options = {} |
| 202 | else: |
| 203 | options = {"method": method, "tolerance": tolerance} |
| 204 | |
| 205 | indexers = either_dict_or_kwargs(indexers, indexers_kwargs, "map_index_queries") |
| 206 | grouped_indexers = group_indexers_by_index(obj, indexers, options) |
| 207 | |
| 208 | results = [] |
| 209 | for index, labels in grouped_indexers: |
| 210 | if index is None: |
| 211 | # forward dimension indexers with no index/coordinate |
| 212 | results.append(IndexSelResult(labels)) |
| 213 | else: |
| 214 | results.append(index.sel(labels, **options)) |
| 215 | |
| 216 | merged = merge_sel_results(results) |
| 217 | |
| 218 | # drop dimension coordinates found in dimension indexers |
| 219 | # (also drop multi-index if any) |
| 220 | # (.sel() already ensures alignment) |
| 221 | for k, v in merged.dim_indexers.items(): |
| 222 | if isinstance(v, DataArray): |
| 223 | if k in v._indexes: |
| 224 | v = v.reset_index(k) |
| 225 | drop_coords = [name for name in v._coords if name in merged.dim_indexers] |
| 226 | merged.dim_indexers[k] = v.drop_vars(drop_coords) |
| 227 | |
| 228 | return merged |
| 229 | |
| 230 | |
| 231 | def expanded_indexer(key, ndim): |
no test coverage detected
searching dependent graphs…