(
self,
indexers: Mapping[Any, Any],
*,
drop: bool,
missing_dims: ErrorOptionsWithWarn = "raise",
)
| 2901 | ) |
| 2902 | |
| 2903 | def _isel_fancy( |
| 2904 | self, |
| 2905 | indexers: Mapping[Any, Any], |
| 2906 | *, |
| 2907 | drop: bool, |
| 2908 | missing_dims: ErrorOptionsWithWarn = "raise", |
| 2909 | ) -> Self: |
| 2910 | valid_indexers = dict(self._validate_indexers(indexers, missing_dims)) |
| 2911 | |
| 2912 | variables: dict[Hashable, Variable] = {} |
| 2913 | indexes, index_variables = isel_indexes(self.xindexes, valid_indexers) |
| 2914 | |
| 2915 | for name, var in self.variables.items(): |
| 2916 | if name in index_variables: |
| 2917 | new_var = index_variables[name] |
| 2918 | else: |
| 2919 | var_indexers = { |
| 2920 | k: v for k, v in valid_indexers.items() if k in var.dims |
| 2921 | } |
| 2922 | if var_indexers: |
| 2923 | new_var = var.isel(indexers=var_indexers) |
| 2924 | # drop scalar coordinates |
| 2925 | # https://github.com/pydata/xarray/issues/6554 |
| 2926 | if name in self.coords and drop and new_var.ndim == 0: |
| 2927 | continue |
| 2928 | else: |
| 2929 | new_var = var.copy(deep=False) |
| 2930 | if name not in indexes: |
| 2931 | new_var = new_var.to_base_variable() |
| 2932 | variables[name] = new_var |
| 2933 | |
| 2934 | coord_names = self._coord_names & variables.keys() |
| 2935 | selected = self._replace_with_new_dims(variables, coord_names, indexes) |
| 2936 | |
| 2937 | # Extract coordinates from indexers |
| 2938 | coord_vars, new_indexes = selected._get_indexers_coords_and_indexes(indexers) |
| 2939 | variables.update(coord_vars) |
| 2940 | indexes.update(new_indexes) |
| 2941 | coord_names = self._coord_names & variables.keys() | coord_vars.keys() |
| 2942 | return self._replace_with_new_dims(variables, coord_names, indexes=indexes) |
| 2943 | |
| 2944 | def sel( |
| 2945 | self, |
no test coverage detected