swap_dims does not propagate indexes properly
Open
Nobody has claimed this yet.
bug
topic-indexing
- Dominant language
- Python
- Stars
- 4.2k
- Forks
- 1.4k
- Avg merge
- 2d 15h
- Merged PRs (30d)
- 14
Description
What happened?
Found by hypothesis
import xarray as xr
import numpy as np
var = xr.Variable(dims="2", data=np.array(['1970-01-01T00:00:00.000000000', '1970-01-01T00:00:00.000000002', '1970-01-01T00:00:00.000000001'], dtype='datetime64[ns]'))
var1 = xr.Variable(data=np.array([0], dtype=np.uint32), dims=['1'], attrs={})
state = xr.Dataset()
state['2'] = var
state = state.stack({"0": ["2"]})
state['1'] = var1
state['1_'] = var1#.copy(deep=True)
state = state.swap_dims({"1": "1_"})
xr.testing.assertions._assert_internal_invariants(state, False)
This swaps simple pandas indexed dims, but the multi-index that is in the dataset and not affected by the swap_dims op ends up broken.
cc @benbovy
What did you expect to happen?
No response
Minimal Complete Verifiable Example
No response
MVCE confirmation
- Minimal example — the example is as focused as reasonably possible to demonstrate the underlying issue in xarray.
- Complete example — the example is self-contained, including all data and the text of any traceback.
- Verifiable example — the example copy & pastes into an IPython prompt or Binder notebook, returning the result.
- New issue — a search of GitHub Issues suggests this is not a duplicate.
- Recent environment — the issue occurs with the latest version of xarray and its dependencies.
Relevant log output
No response
Anything else we need to know?
No response
Environment
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by running the provided xarray example and trace the swap_dims operation, focusing on how unaffected multi-indexes are handled. Use _assert_internal_invariants as the verification point; done means the dataset remains internally valid after swapping the simple indexed dimensions.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- numpy, pandas, python
- Domain
- data
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 38/100