Maybe replace indexes. This function may do a lot more depending on index query results.
(
self,
indexes: Mapping[Hashable, Index],
variables: Mapping[Hashable, Variable] | None = None,
drop_variables: list[Hashable] | None = None,
drop_indexes: list[Hashable] | None = None,
rename_dims: Mapping[Hashable, Hashable] | None = None,
)
| 958 | ) |
| 959 | |
| 960 | def _overwrite_indexes( |
| 961 | self, |
| 962 | indexes: Mapping[Hashable, Index], |
| 963 | variables: Mapping[Hashable, Variable] | None = None, |
| 964 | drop_variables: list[Hashable] | None = None, |
| 965 | drop_indexes: list[Hashable] | None = None, |
| 966 | rename_dims: Mapping[Hashable, Hashable] | None = None, |
| 967 | ) -> Self: |
| 968 | """Maybe replace indexes. |
| 969 | |
| 970 | This function may do a lot more depending on index query |
| 971 | results. |
| 972 | |
| 973 | """ |
| 974 | if not indexes: |
| 975 | return self |
| 976 | |
| 977 | if variables is None: |
| 978 | variables = {} |
| 979 | if drop_variables is None: |
| 980 | drop_variables = [] |
| 981 | if drop_indexes is None: |
| 982 | drop_indexes = [] |
| 983 | |
| 984 | new_variables = self._variables.copy() |
| 985 | new_coord_names = self._coord_names.copy() |
| 986 | new_indexes = dict(self._indexes) |
| 987 | |
| 988 | index_variables = {} |
| 989 | no_index_variables = {} |
| 990 | for name, var in variables.items(): |
| 991 | old_var = self._variables.get(name) |
| 992 | if old_var is not None: |
| 993 | var.attrs.update(old_var.attrs) |
| 994 | var.encoding.update(old_var.encoding) |
| 995 | if name in indexes: |
| 996 | index_variables[name] = var |
| 997 | else: |
| 998 | no_index_variables[name] = var |
| 999 | |
| 1000 | for name in indexes: |
| 1001 | new_indexes[name] = indexes[name] |
| 1002 | |
| 1003 | for name, var in index_variables.items(): |
| 1004 | new_coord_names.add(name) |
| 1005 | new_variables[name] = var |
| 1006 | |
| 1007 | # append no-index variables at the end |
| 1008 | for k in no_index_variables: |
| 1009 | new_variables.pop(k) |
| 1010 | new_variables.update(no_index_variables) |
| 1011 | |
| 1012 | for name in drop_indexes: |
| 1013 | new_indexes.pop(name) |
| 1014 | |
| 1015 | for name in drop_variables: |
| 1016 | new_variables.pop(name) |
| 1017 | new_indexes.pop(name, None) |
no test coverage detected