def test_wrong_date_validation(self): temp_file = NamedTemporaryFile() with pytest.raises(ValidTimeStampError): mira.mira2nc(f"{filepath}/20210102_0000.mmclx", temp_file.name, self.site_meta, date="2021-01-03")
def test_geolocation_from_source_file(self): temp_file = NamedTemporaryFile() meta_without_geolocation = {"name": "Kumpula"} mira.mira2nc(f"{filepath}/20210102_0000.mmclx", temp_file.name, meta_without_geolocation) nc = netCDF4.Dataset(temp_file.name) for key in ("latitude", "longitude", "altitude"): assert key in nc.variables assert nc.variables[key][:] > 0 nc.close()
def test_global_attributes(self): mira.mira2nc(f'{self.file_path}/20210102_0000.mmclx', self.temp_file.name, self.site_meta) nc = netCDF4.Dataset(self.temp_file.name) assert nc.year == '2021' assert nc.month == '01' assert nc.day == '02' assert nc.Conventions == 'CF-1.7' assert nc.source == 'METEK MIRA-35' assert nc.location == 'The_station' assert nc.title == 'Radar file from The_station' assert nc.cloudnet_file_type == 'radar' nc.close()
def test_variables(self): mira.mira2nc(f'{self.file_path}/20210102_0000.mmclx', self.temp_file.name, self.site_meta) nc = netCDF4.Dataset(self.temp_file.name) vars = ('Ze', 'v', 'width', 'ldr', 'SNR', 'time', 'range', 'radar_frequency', 'nyquist_velocity', 'latitude', 'longitude', 'altitude') for var in vars: assert var in nc.variables assert nc.variables['radar_frequency'][:].data == 35.5 # Hard coded assert abs(nc.variables['latitude'][:].data - 50.9085) < 0.1 # From input file for var in ('altitude', 'longitude'): assert abs(nc.variables[var][:] - self.site_meta[var]) < 0.1 # From user time = nc.variables['time'][:] assert min(time) > 0 assert max(time) < 24 nc.close()
def test_uuid_from_user(self): uuid_from_user = '******' uuid = mira.mira2nc(f'{self.file_path}/20210102_0000.mmclx', self.temp_file.name, self.site_meta, uuid=uuid_from_user) nc = netCDF4.Dataset(self.temp_file.name) assert nc.file_uuid == uuid_from_user assert uuid == uuid_from_user nc.close()
def test_uuid_from_user(self): temp_file = NamedTemporaryFile() uuid_from_user = "******" uuid = mira.mira2nc(f"{filepath}/20210102_0000.mmclx", temp_file.name, self.site_meta, uuid=uuid_from_user) nc = netCDF4.Dataset(temp_file.name) assert nc.file_uuid == uuid_from_user assert uuid == uuid_from_user nc.close()
def test_wrong_date_validation(self): with pytest.raises(ValueError): mira.mira2nc(f'{self.file_path}/20210102_0000.mmclx', self.temp_file.name, self.site_meta, date='2021-01-03')
def test_correct_date_validation(self): mira.mira2nc(f'{self.file_path}/20210102_0000.mmclx', self.temp_file.name, self.site_meta, date='2021-01-02')
def test_processing_of_one_nc_file(self): mira.mira2nc(f'{self.file_path}/20210102_0000.mmclx', self.temp_file.name, self.site_meta) nc = netCDF4.Dataset(self.temp_file.name) assert len(nc.variables['time'][:]) == self.n_time1 nc.close()
def test_processing_of_several_nc_files(self): mira.mira2nc(self.file_path, self.temp_file.name, self.site_meta) nc = netCDF4.Dataset(self.temp_file.name) assert len(nc.variables['time'][:]) == self.n_time1 + self.n_time2 nc.close()
class TestMIRA2nc(Check): site_meta = { "name": "Punta Arenas", "latitude": 50, "longitude": 104.5, "altitude": 50 } date = "2021-01-02" n_time1 = 146 n_time2 = 145 temp_file = NamedTemporaryFile() uuid = mira.mira2nc(f"{filepath}/20210102_0000.mmclx", temp_file.name, site_meta) def test_variable_names(self): keys = { "Zh", "v", "width", "ldr", "SNR", "time", "range", "radar_frequency", "nyquist_velocity", "latitude", "longitude", "altitude", "zenith_angle", "azimuth_angle", "height", "rg0", "nave", "prf", "nfft", } assert set(self.nc.variables.keys()) == keys def test_variables(self): assert self.nc.variables[ "radar_frequency"][:].data == 35.5 # Hard coded assert np.all(self.nc.variables["zenith_angle"][:].data) == 0 def test_common_radar(self): radar_fun = RadarFun(self.nc, self.site_meta, self.date, self.uuid) for name, method in RadarFun.__dict__.items(): if "test_" in name: getattr(radar_fun, name)() def test_long_names(self): data = [ ("nfft", "Number of FFT points"), ("nave", "Number of spectral averages (not accounting for overlapping FFTs)" ), ("rg0", "Number of lowest range gates"), ("prf", "Pulse Repetition Frequency"), ("SNR", "Signal-to-noise ratio"), ] for key, expected in data: if key in self.nc.variables: value = self.nc.variables[key].long_name assert value == expected, f"{value} != {expected}" def test_processing_of_one_nc_file(self): assert len(self.nc.variables["time"][:]) == self.n_time1 def test_global_attributes(self): assert self.nc.source == "METEK MIRA-35" assert self.nc.title == f'MIRA-35 cloud radar from {self.site_meta["name"]}' def test_processing_of_several_nc_files(self): temp_file = NamedTemporaryFile() mira.mira2nc(filepath, temp_file.name, self.site_meta) nc = netCDF4.Dataset(temp_file.name) assert len(nc.variables["time"][:]) == self.n_time1 + self.n_time2 nc.close() def test_correct_date_validation(self): temp_file = NamedTemporaryFile() mira.mira2nc(f"{filepath}/20210102_0000.mmclx", temp_file.name, self.site_meta, date="2021-01-02") def test_wrong_date_validation(self): temp_file = NamedTemporaryFile() with pytest.raises(ValidTimeStampError): mira.mira2nc(f"{filepath}/20210102_0000.mmclx", temp_file.name, self.site_meta, date="2021-01-03") def test_uuid_from_user(self): temp_file = NamedTemporaryFile() uuid_from_user = "******" uuid = mira.mira2nc(f"{filepath}/20210102_0000.mmclx", temp_file.name, self.site_meta, uuid=uuid_from_user) nc = netCDF4.Dataset(temp_file.name) assert nc.file_uuid == uuid_from_user assert uuid == uuid_from_user nc.close() def test_geolocation_from_source_file(self): temp_file = NamedTemporaryFile() meta_without_geolocation = {"name": "Kumpula"} mira.mira2nc(f"{filepath}/20210102_0000.mmclx", temp_file.name, meta_without_geolocation) nc = netCDF4.Dataset(temp_file.name) for key in ("latitude", "longitude", "altitude"): assert key in nc.variables assert nc.variables[key][:] > 0 nc.close()
def test_correct_date_validation(self): temp_file = NamedTemporaryFile() mira.mira2nc(f"{filepath}/20210102_0000.mmclx", temp_file.name, self.site_meta, date="2021-01-02")
def test_processing_of_several_nc_files(self): temp_file = NamedTemporaryFile() mira.mira2nc(filepath, temp_file.name, self.site_meta) nc = netCDF4.Dataset(temp_file.name) assert len(nc.variables["time"][:]) == self.n_time1 + self.n_time2 nc.close()