combine_by_coords can succed when it shouldn't
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 4.2k
- Forks
- 1.4k
- Avg merge
- 2d 15h
- Merged PRs (30d)
- 14
Description
What happened:
combine_by_coords can succeed when it should not - depending on the name of the dimensions (which determines the order of operations in combine_by_coords).
What you expected to happen:
- I think it should throw an error in both cases.
Minimal Complete Verifiable Example:
import numpy as np
import xarray as xr
data = np.arange(5).reshape(1, 5)
x = np.arange(5)
x_name = "lat"
da0 = xr.DataArray(data, dims=("t", x_name), coords={"t": [1], x_name: x}).to_dataset(name="a")
x = x + 1e-6
da1 = xr.DataArray(data, dims=("t", x_name), coords={"t": [2], x_name: x}).to_dataset(name="a")
ds = xr.combine_by_coords((da0, da1))
ds
returns:
<xarray.Dataset>
Dimensions: (lat: 10, t: 2)
Coordinates:
* lat (lat) float64 0.0 1e-06 1.0 1.0 2.0 2.0 3.0 3.0 4.0 4.0
* t (t) int64 1 2
Data variables:
a (t, lat) float64 0.0 nan 1.0 nan 2.0 nan ... 2.0 nan 3.0 nan 4.0
Thus lat is interlaced - it don't think combine_by_coords should do this. If you set
x_name = "lat"
and run the example again, it returns:
ValueError: Resulting object does not have monotonic global indexes along dimension x
Anything else we need to know?:
- this is vaguely related to #4077 but I think it is separate
combine_by_coordsconcatenates over all dimensions where the coords are different - thereforecompat="override"doesn't actually do anything? Or does it?
cc @dcherian @TomNicholas
Environment:
Output of xr.show_versions()
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 at xarray/core/combine.py around the combine_by_coords logic linked in the issue, and reproduce the minimal example with both dimension-name cases. Trace why coordinate ordering changes the result, then add regression coverage showing that interlaced coordinates are rejected consistently. Done means both cases raise the expected ValueError without changing valid combinations.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- numpy, python
- Domain
- data
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100