# Copyright (c) 2022 Satpy developers
#
# satpy is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# satpy is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with satpy. If not, see <http://www.gnu.org/licenses/>.
"""The atms_l1b_nc reader tests package."""
import datetime as dt
import numpy as np
import pytest
import xarray as xr
from satpy.readers.atms_l1b_nc import AtmsL1bNCFileHandler
# NOTE:
# The following fixtures are not defined in this file, but are used and injected by Pytest:
# - tmp_path
[docs]
@pytest.fixture
def reader(l1b_file):
"""Return reader of ATMS level1b data."""
return AtmsL1bNCFileHandler(
filename=l1b_file,
filename_info={"creation_time": dt.datetime(2020, 1, 2, 3, 4, 5)},
filetype_info={"antenna_temperature": "antenna_temp"},
)
[docs]
@pytest.fixture
def l1b_file(tmp_path, atms_fake_dataset):
"""Return file path to level1b file."""
l1b_file_path = tmp_path / "test_file_atms_l1b.nc"
atms_fake_dataset.to_netcdf(l1b_file_path)
return l1b_file_path
[docs]
@pytest.fixture
def atms_fake_dataset():
"""Return fake ATMS dataset."""
atrack = 2
xtrack = 3
channel = 22
lon = np.full((atrack, xtrack), 1.)
lat = np.full((atrack, xtrack), 2.)
sat_azi = np.full((atrack, xtrack), 3.)
antenna_temp = np.zeros((atrack, xtrack, channel))
for idx in range(channel):
antenna_temp[:, :, idx] = 100 + float(idx)
return xr.Dataset(
data_vars={
"antenna_temp": (("atrack", "xtrack", "channel"), antenna_temp),
"lon": (("atrack", "xtrack"), lon),
"lat": (("atrack", "xtrack"), lat),
"sat_azi": (("atrack", "xtrack"), sat_azi),
},
attrs={
"time_coverage_start": "2000-01-02T03:04:05Z",
"time_coverage_end": "2000-01-02T04:05:06Z",
"platform": "JPSS-1",
"instrument": "ATMS",
},
)
[docs]
class TestAtsmsL1bNCFileHandler:
"""Test the AtmsL1bNCFileHandler reader."""
[docs]
def test_start_time(self, reader):
"""Test start time."""
assert reader.start_time == dt.datetime(2000, 1, 2, 3, 4, 5)
[docs]
def test_end_time(self, reader):
"""Test end time."""
assert reader.end_time == dt.datetime(2000, 1, 2, 4, 5, 6)
[docs]
def test_sensor(self, reader):
"""Test sensor."""
assert reader.sensor == "ATMS"
[docs]
def test_antenna_temperature(self, reader, atms_fake_dataset):
"""Test antenna temperature."""
np.testing.assert_array_equal(
reader.antenna_temperature,
atms_fake_dataset.antenna_temp.values,
)
[docs]
@pytest.mark.parametrize(("param", "expect"), [
("start_time", dt.datetime(2000, 1, 2, 3, 4, 5)),
("end_time", dt.datetime(2000, 1, 2, 4, 5, 6)),
("platform_name", "JPSS-1"),
("sensor", "ATMS"),
])
def test_attrs(self, reader, param, expect):
"""Test attributes."""
assert reader.attrs[param] == expect
[docs]
@pytest.mark.parametrize("dims", [
("xtrack", "atrack"),
("x", "y"),
])
def test_standardize_dims(self, reader, dims):
"""Test standardize dims."""
data = xr.DataArray(
np.arange(6).reshape(2, 3),
dims=dims,
)
standardized = reader._standardize_dims(data)
assert standardized.dims == ("y", "x")
[docs]
def test_drop_coords(self, reader):
"""Test drop coordinates."""
coords = "dummy"
data = xr.DataArray(
np.ones(10),
dims=("y"),
coords={coords: 0},
)
assert coords in data.coords
data = reader._drop_coords(data)
assert coords not in data.coords
[docs]
@pytest.mark.parametrize(("param", "expect"), [
("start_time", dt.datetime(2000, 1, 2, 3, 4, 5)),
("end_time", dt.datetime(2000, 1, 2, 4, 5, 6)),
("platform_name", "JPSS-1"),
("sensor", "ATMS"),
("creation_time", dt.datetime(2020, 1, 2, 3, 4, 5)),
("type", "test_data"),
("name", "test"),
])
def test_merge_attributes(self, reader, param, expect):
"""Test merge attributes."""
data = xr.DataArray(
np.ones(10),
dims=("y"),
attrs={"type": "test_data"},
)
dataset_info = {"name": "test"}
data = reader._merge_attributes(data, dataset_info)
assert data.attrs[param] == expect
[docs]
@pytest.mark.parametrize(("param", "expect"), [
("1", 100.),
("sat_azi", 3.),
])
def test_select_dataset(self, reader, param, expect):
"""Test select dataset."""
np.testing.assert_array_equal(
reader._select_dataset(param),
np.full((2, 3), expect),
)
[docs]
def test_get_dataset(self, reader):
"""Test get dataset."""
dataset_id = {"name": "1"}
dataset = reader.get_dataset(dataset_id, {})
np.testing.assert_array_equal(
dataset,
np.full((2, 3), 100.),
)
assert dataset.dims == ("y", "x")
assert dataset.attrs["sensor"] == "ATMS"