|
17 | 17 | """Unit tests for Scene conversion functionality.""" |
18 | 18 |
|
19 | 19 | import datetime as dt |
| 20 | +from datetime import datetime |
20 | 21 |
|
| 22 | +import numpy as np |
21 | 23 | import pytest |
22 | 24 | import xarray as xr |
23 | 25 | from dask import array as da |
@@ -51,14 +53,6 @@ def test_serialization_with_readers_and_data_arr(self): |
51 | 53 | class TestSceneConversions: |
52 | 54 | """Test Scene conversion to geoviews, xarray, etc.""" |
53 | 55 |
|
54 | | - def test_to_xarray_dataset_with_empty_scene(self): |
55 | | - """Test converting empty Scene to xarray dataset.""" |
56 | | - scn = Scene() |
57 | | - xrds = scn.to_xarray_dataset() |
58 | | - assert isinstance(xrds, xr.Dataset) |
59 | | - assert len(xrds.variables) == 0 |
60 | | - assert len(xrds.coords) == 0 |
61 | | - |
62 | 56 | def test_geoviews_basic_with_area(self): |
63 | 57 | """Test converting a Scene to geoviews with an AreaDefinition.""" |
64 | 58 | from pyresample.geometry import AreaDefinition |
@@ -164,6 +158,43 @@ def single_area_scn(self): |
164 | 158 | scn["var1"] = data_array |
165 | 159 | return scn |
166 | 160 |
|
| 161 | + def test_to_xarray_dataset_with_conflicting_variables(self): |
| 162 | + """Test converting Scene with DataArrays with conflicting variables. |
| 163 | +
|
| 164 | + E.g. "acq_time" in the seviri_l1b_nc reader |
| 165 | + """ |
| 166 | + from pyresample.geometry import AreaDefinition |
| 167 | + area = AreaDefinition("test", "test", "test", |
| 168 | + {"proj": "geos", "lon_0": -95.5, "h": 35786023.0}, |
| 169 | + 2, 2, [-200, -200, 200, 200]) |
| 170 | + scn = Scene() |
| 171 | + |
| 172 | + acq_time_1 = ("y", [np.datetime64("1958-01-02 00:00:01"), |
| 173 | + np.datetime64("1958-01-02 00:00:02")]) |
| 174 | + ds = xr.DataArray(da.zeros((2, 2), chunks=-1), dims=("y", "x"), |
| 175 | + attrs={"start_time": datetime(2018, 1, 1), "area": area}) |
| 176 | + ds["acq_time"] = acq_time_1 |
| 177 | + |
| 178 | + scn["ds1"] = ds |
| 179 | + |
| 180 | + acq_time_2 = ("y", [np.datetime64("1958-02-02 00:00:01"), |
| 181 | + np.datetime64("1958-02-02 00:00:02")]) |
| 182 | + ds2 = ds.copy() |
| 183 | + ds2["acq_time"] = acq_time_2 |
| 184 | + |
| 185 | + scn["ds2"] = ds2 |
| 186 | + |
| 187 | + # drop case (compat="minimal") |
| 188 | + xrds = scn.to_xarray_dataset() |
| 189 | + assert isinstance(xrds, xr.Dataset) |
| 190 | + assert "acq_time" not in xrds.coords |
| 191 | + |
| 192 | + # override: pick variable from first dataset |
| 193 | + xrds = scn.to_xarray_dataset(datasets=["ds1", "ds2"], compat="override") |
| 194 | + assert isinstance(xrds, xr.Dataset) |
| 195 | + assert "acq_time" in xrds.coords |
| 196 | + xr.testing.assert_equal(xrds["acq_time"], ds["acq_time"]) |
| 197 | + |
167 | 198 | @pytest.fixture |
168 | 199 | def multi_area_scn(self): |
169 | 200 | """Define Scene with multiple area.""" |
|
0 commit comments