def test_nomessages(self): file = 'tests/data/test.grib' reader = GRIBReader(file) with pytest.raises( ApplicationException, match="No Messages found - using {'shortName': 'xxx'}"): reader.select_messages(**{'shortName': 'xxx'})
def test_read_shortnames(self): file = 'tests/data/test.grib' reader = GRIBReader(file) messages = reader.select_messages(**{'shortName': 'ediff'}) assert len(messages) == 4 messages = reader.select_messages(**{ 'shortName': 'ediff', 'level': 100 }) assert len(messages) == 1
def test_aux(self): file = 'tests/data/test.grib' reader = GRIBReader(file) # get_gids_for_grib_intertable works after call to select_messages _ = reader.select_messages(**{'shortName': 'ediff'}) gid_main_res, val, gid_ext_res, val2 = reader.get_gids_for_grib_intertable( ) assert int(str(gid_main_res)) == gid_main_res assert gid_ext_res is None assert val2 is None assert val == np.array([100.])
def test_gribinfo(self): file = 'tests/data/test.grib' reader = GRIBReader(file) gribinfo = reader.get_grib_info({'shortName': 'ediff'}) assert gribinfo == GRIBInfo(input_step=0, input_step2=-1, change_step_at='', type_of_param='instant', start=0, end=0, mv=9999.0)
def test_interpolation_use_scipy_nearest(self): file = config_dict['input.file'] reader = GRIBReader(file) messages = reader.select_messages(shortName='2t') grid_id = messages.grid_id missing = messages.missing_value ctx = MockedExecutionContext(config_dict, False) interpolator = Interpolator(ctx, missing) values_in = messages.values_first_or_single_res[messages.first_step_range] lats, lons = messages.latlons values_resampled = interpolator.interpolate_scipy(lats, lons, values_in, grid_id, messages.grid_details) shape_target = PCRasterReader(config_dict['interpolation.latMap']).values.shape assert shape_target == values_resampled.shape
def test_interpolation_create_eccodes_nearest(self): d = deepcopy(config_dict) d['interpolation.create'] = True d['interpolation.parallel'] = True d['interpolation.mode'] = 'grib_nearest' file = d['input.file'] reader = GRIBReader(file) messages = reader.select_messages(shortName='2t') grid_id = messages.grid_id missing = messages.missing_value ctx = MockedExecutionContext(d, True) interpolator = Interpolator(ctx, missing) values_in = messages.values_first_or_single_res[messages.first_step_range] values_resampled = interpolator.interpolate_grib(values_in, reader._selected_grbs[0], grid_id) shape_target = PCRasterReader(d['interpolation.latMap']).values.shape assert shape_target == values_resampled.shape os.unlink('tests/data/tbl_cos2t_550800_grib_nearest.npy.gz')
def test_interpolation_create_scipy_invdist(self): d = deepcopy(config_dict) d['interpolation.create'] = True d['interpolation.parallel'] = True d['interpolation.mode'] = 'invdist' file = d['input.file'] reader = GRIBReader(file) messages = reader.select_messages(shortName='2t') grid_id = messages.grid_id missing = messages.missing_value ctx = MockedExecutionContext(d, False) interpolator = Interpolator(ctx, missing) values_in = messages.values_first_or_single_res[messages.first_step_range] lats, lons = messages.latlons values_resampled = interpolator.interpolate_scipy(lats, lons, values_in, grid_id, messages.grid_details) shape_target = PCRasterReader(d['interpolation.latMap']).values.shape assert shape_target == values_resampled.shape os.unlink('tests/data/tbl_pf10tp_550800_scipy_invdist.npy.gz')
def test_average(self): ctx = MockedExecutionContext(config_dict, False) grib_reader = GRIBReader(ctx.get('input.file')) grib_info = grib_reader.get_grib_info({'shortName': '2t'}) aggregator = Aggregator(aggr_step=24, aggr_type=AVERAGE, input_step=grib_info.input_step, step_type=grib_info.type_of_param, start_step=0, mv_grib=grib_info.mv, end_step=24, unit_time=24, force_zero_array=False) messages = grib_reader.select_messages(shortName='2t') values_orig = messages.first_resolution_values() values = aggregator.do_manipulation(values_orig) assert len(values) == 1 keys_res = list(values.keys()) assert keys_res[0] == Step(0, 24, 415, 24, 2)
def test_correction(self): file = 'tests/data/input.grib' reader = GRIBReader(file) messages = reader.select_messages(shortName='2t') grid_id = messages.grid_id missing = messages.missing_value demmap = PCRasterReader('tests/data/dem.map') dem = demmap.values dem_mv = demmap.mv d = { 'interpolation.dirs': {'user': os.path.abspath('tests/data/'), 'global': os.path.abspath('tests/data/')}, 'geopotential.dirs': {'user': os.path.abspath('tests/data/'), 'global': os.path.abspath('tests/data/')}, 'interpolation.lonMap': 'tests/data/lon.map', 'interpolation.latMap': 'tests/data/lat.map', 'interpolation.mode': 'nearest', 'input.file': 'tests/data/input.grib', 'correction.demMap': 'tests/data/dem.map', 'correction.formula': 'p+gem-dem*0.0065', 'correction.gemFormula': '(z/9.81)*0.0065', } ctx = MockedExecutionContext(d, False) corrector = Corrector(ctx, grid_id, geo_file='tests/data/geopotential.grib') values_in = messages.values_first_or_single_res[messages.first_step_range] lats, lons = messages.latlons interpolator = Interpolator(ctx, missing) values_resampled = interpolator.interpolate_scipy(lats, lons, values_in, grid_id, messages.grid_details) values_out = corrector.correct(values_resampled) reader_geopotential = GRIBReader('tests/data/geopotential.grib') geopotential = reader_geopotential.select_messages(shortName=GeopotentialsConfiguration.short_names) z = geopotential.values_first_or_single_res[geopotential.first_step_range] grid_id_geopotential = geopotential.grid_id mv_geopotential = geopotential.missing_value gem = np.where(z != mv_geopotential, (z / 9.81) * 0.0065, mv_geopotential) gem_resampled = interpolator.interpolate_scipy(lats, lons, gem, grid_id_geopotential, geopotential.grid_details) reference = np.where((dem != dem_mv) & (values_resampled != dem_mv) & (gem_resampled != dem_mv), values_resampled + gem_resampled - dem * 0.0065, dem_mv) assert np.allclose(values_out, reference)
def test_gridid(self): file = 'tests/data/test.grib' assert GRIBReader.get_id( file, {'shortName': 'ediff'}) == '-71$M$1$1$1$lambert'