Skip to content

Commit efbc043

Browse files
committed
Fix variable redefinition
The previous commit revealed the following mypy error: xarray/core/dataset.py: note: In member "swap_dims" of class "Dataset": xarray/core/dataset.py:4415: error: Incompatible types in assignment (expression has type "Variable", variable has type "Hashable") [assignment] xarray/core/dataset.py:4415: note: Following member(s) of "Variable" have conflicts: xarray/core/dataset.py:4415: note: __hash__: expected "Callable[[], int]", got "None" xarray/core/dataset.py:4416: error: "Hashable" has no attribute "dims" [attr-defined] xarray/core/dataset.py:4419: error: "Hashable" has no attribute "to_index_variable" [attr-defined] xarray/core/dataset.py:4430: error: "Hashable" has no attribute "to_base_variable" [attr-defined]
1 parent 63c93a7 commit efbc043

File tree

1 file changed

+17
-15
lines changed

1 file changed

+17
-15
lines changed

xarray/core/dataset.py

+17-15
Original file line numberDiff line numberDiff line change
@@ -4393,16 +4393,18 @@ def swap_dims(
43934393
# rename_dims() method that only renames dimensions.
43944394

43954395
dims_dict = either_dict_or_kwargs(dims_dict, dims_kwargs, "swap_dims")
4396-
for k, v in dims_dict.items():
4397-
if k not in self.dims:
4396+
for current_name, new_name in dims_dict.items():
4397+
if current_name not in self.dims:
43984398
raise ValueError(
4399-
f"cannot swap from dimension {k!r} because it is "
4399+
f"cannot swap from dimension {current_name!r} because it is "
44004400
f"not one of the dimensions of this dataset {tuple(self.dims)}"
44014401
)
4402-
if v in self.variables and self.variables[v].dims != (k,):
4402+
if new_name in self.variables and self.variables[new_name].dims != (
4403+
current_name,
4404+
):
44034405
raise ValueError(
4404-
f"replacement dimension {v!r} is not a 1D "
4405-
f"variable along the old dimension {k!r}"
4406+
f"replacement dimension {new_name!r} is not a 1D "
4407+
f"variable along the old dimension {current_name!r}"
44064408
)
44074409

44084410
result_dims = {dims_dict.get(dim, dim) for dim in self.dims}
@@ -4412,24 +4414,24 @@ def swap_dims(
44124414

44134415
variables: dict[Hashable, Variable] = {}
44144416
indexes: dict[Hashable, Index] = {}
4415-
for k, v in self.variables.items():
4416-
dims = tuple(dims_dict.get(dim, dim) for dim in v.dims)
4417+
for current_name, current_variable in self.variables.items():
4418+
dims = tuple(dims_dict.get(dim, dim) for dim in current_variable.dims)
44174419
var: Variable
4418-
if k in result_dims:
4419-
var = v.to_index_variable()
4420+
if current_name in result_dims:
4421+
var = current_variable.to_index_variable()
44204422
var.dims = dims
4421-
if k in self._indexes:
4422-
indexes[k] = self._indexes[k]
4423-
variables[k] = var
4423+
if current_name in self._indexes:
4424+
indexes[current_name] = self._indexes[current_name]
4425+
variables[current_name] = var
44244426
else:
44254427
index, index_vars = create_default_index_implicit(var)
44264428
indexes.update({name: index for name in index_vars})
44274429
variables.update(index_vars)
44284430
coord_names.update(index_vars)
44294431
else:
4430-
var = v.to_base_variable()
4432+
var = current_variable.to_base_variable()
44314433
var.dims = dims
4432-
variables[k] = var
4434+
variables[current_name] = var
44334435

44344436
return self._replace_with_new_dims(variables, coord_names, indexes=indexes)
44354437

0 commit comments

Comments
 (0)