Skip to content

Commit e790588

Browse files
committed
Switch GAASP tests to use real files
1 parent c5103ab commit e790588

File tree

2 files changed

+67
-59
lines changed

2 files changed

+67
-59
lines changed

satpy/readers/amsr2_l2_gaasp.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,8 @@ def _scale_data(self, data_arr, attrs):
149149
add_offset = attrs.pop("add_offset", 0.)
150150
scaling_needed = not (scale_factor == 1 and add_offset == 0)
151151
if scaling_needed:
152-
data_arr = data_arr * scale_factor + add_offset
152+
new_dtype = np.float32 if np.issubdtype(data_arr.dtype, np.integer) else data_arr.dtype.type
153+
data_arr = data_arr * new_dtype(scale_factor) + new_dtype(add_offset)
153154
return data_arr, attrs
154155

155156
@staticmethod

satpy/tests/reader_tests/test_amsr2_l2_gaasp.py

Lines changed: 65 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,11 @@
1616
# You should have received a copy of the GNU General Public License along with
1717
# satpy. If not, see <http://www.gnu.org/licenses/>.
1818
"""Tests for the 'amsr2_l2_gaasp' reader."""
19+
from __future__ import annotations
1920

2021
import datetime as dt
2122
import os
22-
from unittest import mock
23+
from pathlib import Path
2324

2425
import dask.array as da
2526
import numpy as np
@@ -120,9 +121,10 @@ def _create_gridded_gaasp_dataset(filename):
120121
attrs={"_FillValue": -9999.0, "scale_factor": 0.5, "add_offset": 2.0},
121122
)
122123
latency_var = xr.DataArray(
123-
da.zeros((10, 10), dtype=np.timedelta64),
124+
da.zeros((10, 10), dtype=np.int32),
124125
dims=("Number_of_Y_Dimension", "Number_of_X_Dimension"),
125126
attrs={
127+
"units": "seconds",
126128
"_FillValue": -9999,
127129
},
128130
)
@@ -171,16 +173,19 @@ def _create_one_res_gaasp_dataset(filename):
171173
return xr.Dataset(ds_vars, attrs=attrs)
172174

173175

174-
def fake_open_dataset(filename, **kwargs):
176+
def _create_fake_gaasp_file(fake_path: Path, **kwargs):
175177
"""Create a Dataset similar to reading an actual file with xarray.open_dataset."""
178+
filename = fake_path.name
176179
if filename in [MBT_FILENAME, PRECIP_FILENAME, OCEAN_FILENAME]:
177-
return _create_two_res_gaasp_dataset(filename)
178-
if filename in [SEAICE_NH_FILENAME, SEAICE_SH_FILENAME]:
179-
return _create_gridded_gaasp_dataset(filename)
180-
return _create_one_res_gaasp_dataset(filename)
180+
ds = _create_two_res_gaasp_dataset(filename)
181+
elif filename in [SEAICE_NH_FILENAME, SEAICE_SH_FILENAME]:
182+
ds = _create_gridded_gaasp_dataset(filename)
183+
else:
184+
ds = _create_one_res_gaasp_dataset(filename)
185+
ds.to_netcdf(fake_path, )
181186

182187

183-
def _fake_ocean_wind_speed_dataset(filename, **kwargs):
188+
def _create_fake_ocean_wind_speed_file(filename, **kwargs):
184189
"""Create a Dataset similar to reading an actual OCEAN file with wind speed data."""
185190
ds = _create_two_res_gaasp_dataset(filename)
186191
wspd_data = da.arange(10 * 10, dtype=np.float32).reshape((10, 10))
@@ -199,7 +204,7 @@ def _fake_ocean_wind_speed_dataset(filename, **kwargs):
199204
attrs={"_FillValue": -9999, "units": "1"},
200205
)
201206
ds["WSPD_QC"] = wspd_qc_data_arr
202-
return ds
207+
ds.to_netcdf(filename)
203208

204209

205210
class TestGAASPReader:
@@ -226,18 +231,19 @@ def setup_method(self):
226231
([SOIL_FILENAME], 1),
227232
],
228233
)
229-
def test_reader_creation(self, filenames, expected_loadables):
234+
def test_reader_creation(self, tmp_path, filenames, expected_loadables):
230235
"""Test basic initialization."""
231236
from satpy.readers.core.loading import load_reader
232237

233-
with mock.patch("satpy.readers.amsr2_l2_gaasp.xr.open_dataset") as od:
234-
od.side_effect = fake_open_dataset
235-
r = load_reader(self.reader_configs)
236-
loadables = r.select_files_from_pathnames(filenames)
237-
assert len(loadables) == expected_loadables
238-
r.create_filehandlers(loadables)
239-
# make sure we have some files
240-
assert r.file_handlers
238+
filenames = [tmp_path / filename for filename in filenames]
239+
for fn in filenames:
240+
_create_fake_gaasp_file(fn)
241+
r = load_reader(self.reader_configs)
242+
loadables = r.select_files_from_pathnames(filenames)
243+
assert len(loadables) == expected_loadables
244+
r.create_filehandlers(loadables)
245+
# make sure we have some files
246+
assert r.file_handlers
241247

242248
@pytest.mark.parametrize(
243249
("filenames", "expected_datasets"),
@@ -265,19 +271,20 @@ def test_reader_creation(self, filenames, expected_loadables):
265271
([SOIL_FILENAME], ["swath_var", "swath_var_int"]),
266272
],
267273
)
268-
def test_available_datasets(self, filenames, expected_datasets):
274+
def test_available_datasets(self, tmp_path, filenames, expected_datasets):
269275
"""Test that variables are dynamically discovered."""
270276
from satpy.readers.core.loading import load_reader
271277

272-
with mock.patch("satpy.readers.amsr2_l2_gaasp.xr.open_dataset") as od:
273-
od.side_effect = fake_open_dataset
274-
r = load_reader(self.reader_configs)
275-
loadables = r.select_files_from_pathnames(filenames)
276-
r.create_filehandlers(loadables)
277-
avails = list(r.available_dataset_names)
278-
for var_name in expected_datasets:
279-
assert var_name in avails
280-
assert "not_xy_dim_var" not in expected_datasets
278+
filenames = [tmp_path / filename for filename in filenames]
279+
for fn in filenames:
280+
_create_fake_gaasp_file(fn)
281+
r = load_reader(self.reader_configs)
282+
loadables = r.select_files_from_pathnames(filenames)
283+
r.create_filehandlers(loadables)
284+
avails = list(r.available_dataset_names)
285+
for var_name in expected_datasets:
286+
assert var_name in avails
287+
assert "not_xy_dim_var" not in expected_datasets
281288

282289
@staticmethod
283290
def _check_area(data_id, data_arr):
@@ -336,41 +343,41 @@ def _check_attrs(data_arr):
336343
([SOIL_FILENAME], ["swath_var", "swath_var_int"]),
337344
],
338345
)
339-
def test_basic_load(self, filenames, loadable_ids):
346+
def test_basic_load(self, tmp_path, filenames, loadable_ids):
340347
"""Test that variables are loaded properly."""
341348
from satpy.readers.core.loading import load_reader
342349

343-
with mock.patch("satpy.readers.amsr2_l2_gaasp.xr.open_dataset") as od:
344-
od.side_effect = fake_open_dataset
345-
r = load_reader(self.reader_configs)
346-
loadables = r.select_files_from_pathnames(filenames)
347-
r.create_filehandlers(loadables)
348-
loaded_data_arrs = r.load(loadable_ids)
349-
assert loaded_data_arrs
350-
for data_id, data_arr in loaded_data_arrs.items():
351-
self._check_area(data_id, data_arr)
352-
self._check_fill(data_id, data_arr)
353-
self._check_attrs(data_arr)
350+
filenames = [tmp_path / filename for filename in filenames]
351+
for fn in filenames:
352+
_create_fake_gaasp_file(fn)
353+
r = load_reader(self.reader_configs)
354+
loadables = r.select_files_from_pathnames(filenames)
355+
r.create_filehandlers(loadables)
356+
loaded_data_arrs = r.load(loadable_ids)
357+
assert loaded_data_arrs
358+
for data_id, data_arr in loaded_data_arrs.items():
359+
self._check_area(data_id, data_arr)
360+
self._check_fill(data_id, data_arr)
361+
self._check_attrs(data_arr)
354362

355363
@pytest.mark.parametrize("filter_wspd", [False, True])
356-
def test_wind_speed_filtering(self, filter_wspd):
364+
def test_wind_speed_filtering(self, tmp_path, filter_wspd):
357365
"""Test that wind speed can be filtered."""
358366
from satpy.readers.core.loading import load_reader
359367

360-
with mock.patch("satpy.readers.amsr2_l2_gaasp.xr.open_dataset") as od:
361-
od.side_effect = _fake_ocean_wind_speed_dataset
362-
r = load_reader(self.reader_configs)
363-
loadables = r.select_files_from_pathnames([OCEAN_FILENAME])
364-
r.create_filehandlers(loadables, fh_kwargs={"filter_wind_speed": filter_wspd})
365-
loaded_data_arrs = r.load(["WSPD"])
366-
assert loaded_data_arrs
367-
data_arr = loaded_data_arrs["WSPD"]
368-
data_id = data_arr.attrs["_satpy_id"]
369-
self._check_area(data_id, data_arr)
370-
self._check_fill(data_id, data_arr)
371-
self._check_attrs(data_arr)
372-
has_nan = np.isnan(data_arr.data.compute()[-1, -1])
373-
if filter_wspd:
374-
assert has_nan
375-
else:
376-
assert not has_nan
368+
_create_fake_ocean_wind_speed_file(tmp_path / OCEAN_FILENAME)
369+
r = load_reader(self.reader_configs)
370+
loadables = r.select_files_from_pathnames([tmp_path / OCEAN_FILENAME])
371+
r.create_filehandlers(loadables, fh_kwargs={"filter_wind_speed": filter_wspd})
372+
loaded_data_arrs = r.load(["WSPD"])
373+
assert loaded_data_arrs
374+
data_arr = loaded_data_arrs["WSPD"]
375+
data_id = data_arr.attrs["_satpy_id"]
376+
self._check_area(data_id, data_arr)
377+
self._check_fill(data_id, data_arr)
378+
self._check_attrs(data_arr)
379+
has_nan = np.isnan(data_arr.data.compute()[-1, -1])
380+
if filter_wspd:
381+
assert has_nan
382+
else:
383+
assert not has_nan

0 commit comments

Comments
 (0)