Skip to content

Commit 56182f7

Browse files
authored
Don't access data when creating DataArray from Variable. (#8754)
* Don't access data when creating DataArray from Variable. Closes #8573 * Fix DataArray * Fix test * Add comment
1 parent 40b3f2c commit 56182f7

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

xarray/core/variable.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,8 +264,13 @@ def as_compatible_data(
264264

265265
from xarray.core.dataarray import DataArray
266266

267-
if isinstance(data, (Variable, DataArray)):
268-
return data.data
267+
# TODO: do this uwrapping in the Variable/NamedArray constructor instead.
268+
if isinstance(data, Variable):
269+
return cast("T_DuckArray", data._data)
270+
271+
# TODO: do this uwrapping in the DataArray constructor instead.
272+
if isinstance(data, DataArray):
273+
return cast("T_DuckArray", data._variable._data)
269274

270275
if isinstance(data, NON_NUMPY_SUPPORTED_ARRAY_TYPES):
271276
data = _possibly_convert_datetime_or_timedelta_index(data)

xarray/tests/test_dataarray.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4947,7 +4947,7 @@ def test_idxmin(
49474947
with pytest.raises(ValueError):
49484948
xr.DataArray(5).idxmin()
49494949

4950-
coordarr0 = xr.DataArray(ar0.coords["x"], dims=["x"])
4950+
coordarr0 = xr.DataArray(ar0.coords["x"].data, dims=["x"])
49514951
coordarr1 = coordarr0.copy()
49524952

49534953
hasna = np.isnan(minindex)
@@ -5062,7 +5062,7 @@ def test_idxmax(
50625062
with pytest.raises(ValueError):
50635063
xr.DataArray(5).idxmax()
50645064

5065-
coordarr0 = xr.DataArray(ar0.coords["x"], dims=["x"])
5065+
coordarr0 = xr.DataArray(ar0.coords["x"].data, dims=["x"])
50665066
coordarr1 = coordarr0.copy()
50675067

50685068
hasna = np.isnan(maxindex)
@@ -7167,3 +7167,13 @@ def test_nD_coord_dataarray() -> None:
71677167
_assert_internal_invariants(da4, check_default_indexes=True)
71687168
assert "x" not in da4.xindexes
71697169
assert "x" in da4.coords
7170+
7171+
7172+
def test_lazy_data_variable_not_loaded():
7173+
# GH8753
7174+
array = InaccessibleArray(np.array([1, 2, 3]))
7175+
v = Variable(data=array, dims="x")
7176+
# No data needs to be accessed, so no error should be raised
7177+
da = xr.DataArray(v)
7178+
# No data needs to be accessed, so no error should be raised
7179+
xr.DataArray(da)

0 commit comments

Comments
 (0)