示例#1
0
 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'})
示例#2
0
 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
示例#3
0
 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.])
示例#4
0
 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)
示例#5
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
示例#6
0
 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')
示例#7
0
 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')
示例#8
0
 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)
示例#9
0
    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)
示例#10
0
 def test_gridid(self):
     file = 'tests/data/test.grib'
     assert GRIBReader.get_id(
         file, {'shortName': 'ediff'}) == '-71$M$1$1$1$lambert'