def test_read_gptset(): gpts = mv.read(file_in_testdir('geopointset_1.gpts')) assert (mv.type(gpts) == 'geopointset') assert (mv.count(gpts) == 6) gpt1 = gpts[0] assert (mv.type(gpt1) == 'geopoints') assert (mv.count(gpt1) == 11) assert (mv.metadata(gpt1) is None) gpt2 = gpts[1] assert (mv.type(gpt2) == 'geopoints') assert (mv.count(gpt2) == 1) # check the metadata md = mv.metadata(gpt2) assert (isinstance(md, dict)) assert (md['mykey1'] == 'val1') assert (md['mykey2'] == 5) # check that it is iterable counts = [mv.count(c) for c in gpts] assert (counts == [11.0, 1.0, 44.0, 11.0, 1.0, 44.0]) # test the filtering bad_filter = mv.filter(gpts, {'badkey': 7}) assert (bad_filter is None) good_filter = mv.filter(gpts, {'mykey2': 5}) assert (mv.type(good_filter) == 'geopointset') assert (mv.count(good_filter) == 1) assert (mv.count(good_filter[0]) == 1) lats = good_filter[0].latitudes() assert (len(lats) == 1) assert (lats[0] == 60.82)
def test_class_(): # these generate warnings, but if they pass then they show that the conversion # from class_ to class is working gg = mv.read(file_in_testdir('test.grib')) c = mv.read(data=gg, class_='od') assert (mv.type(c) == 'fieldset') c = mv.read({'data': gg, 'class_': 'od'}) assert (mv.type(c) == 'fieldset') c = mv.read({'data': gg, 'class': 'od'}) assert (mv.type(c) == 'fieldset')
def test_mvl_ml2hPa(): ml_data = mv.read(file_in_testdir('ml_data.grib')) assert mv.type(ml_data) == 'fieldset' ml_t = mv.read(data=ml_data, param='t') ml_lnsp = mv.read(data=ml_data, param='lnsp') desired_pls = [1000, 900, 850, 500, 300, 100, 10, 1, 0.8, 0.5, 0.3, 0.1] pl_data = mv.mvl_ml2hPa(ml_lnsp, ml_t, desired_pls) assert mv.type(pl_data) == 'fieldset' pls = mv.grib_get_long(pl_data, 'level') lev_types = mv.grib_get_string(pl_data, 'typeOfLevel') lev_divisors = [1 if x == 'isobaricInhPa' else 100 for x in lev_types] pl_in_hpa = [a / b for a, b in zip(pls, lev_divisors)] assert (pl_in_hpa == desired_pls)
def test_obsfilter(): bufr = mv.read(file_in_testdir('obs_3day.bufr')) # test two styles of passing parameters gpt1 = mv.obsfilter({ 'data': bufr, 'parameter': '012004', 'output': "geopoints" }) gpt2 = mv.obsfilter(data=bufr, parameter='012004', output="geopoints") assert (mv.type(gpt1) == 'geopoints') assert (mv.count(gpt1) == 45) assert (mv.type(gpt2) == 'geopoints') assert (mv.count(gpt2) == 45)
def test_set_vector_float32_from_numpy_array(): if supports_float32_vectors(): r = np.arange(1, 21, dtype=np.float32) assert (mv.type(r) == 'vector') assert (mv.dtype(r) == 'float32') assert (mv.count(r) == 20) assert (mv.maxvalue(r) == 20)
def test_odb(): if mv.is_feature_available('odb') == 0: print( 'Skipping test_odb because ODB is not enabled in this Metview version' ) return db = mv.read(file_in_testdir('temp_u.odb')) assert (mv.type(db) == 'odb') # assert isinstance(db,mv.Odb) assert (mv.count(db) == 88) p_val = mv.values(db, 'p') assert (mv.count(p_val) == 88) assert (np.isclose(p_val[0], 98065.578125)) assert (np.isclose(p_val[87], 97651.2109375)) t_val = mv.values(db, 't') assert (mv.count(t_val) == 88) assert (np.isclose(t_val[0], 144700)) assert (np.isclose(t_val[87], 94700)) v_val = mv.values(db, 'val') assert (mv.count(v_val) == 88) assert (np.isclose(v_val[0], -4.62306786)) assert (np.isclose(v_val[87], -4.27525187))
def test_geopoints_equality_operator(): a = mv.read(file_in_testdir('t2m_3day.gpt')) assert (mv.type(a) == 'geopoints') v = mv.values(a) v[10] = -29 v[13] = -31 v[15] = -33 b = a.set_values(v) same = (a == b) assert (mv.type(same) == 'geopoints') vsame = same.values() assert (mv.sum(vsame) == len(vsame) - 3) # all but 3 should be the same assert (vsame[5] == 1) assert (vsame[10] == 0) assert (vsame[11] == 1) assert (vsame[12] == 1) assert (vsame[13] == 0) assert (vsame[14] == 1) assert (vsame[15] == 0)
def test_geopoints_nonequality_operator(): a = mv.read(file_in_testdir('t2m_3day.gpt')) assert (mv.type(a) == 'geopoints') v = mv.values(a) v[10] = -29 v[13] = -31 v[15] = -33 b = a.set_values(v) diff = (a != b) assert (mv.type(diff) == 'geopoints') vdiff = diff.values() assert (mv.sum(vdiff) == 3) # there should be exactly 3 differences assert (vdiff[5] == 0) assert (vdiff[10] == 1) assert (vdiff[11] == 0) assert (vdiff[12] == 0) assert (vdiff[13] == 1) assert (vdiff[14] == 0) assert (vdiff[15] == 1)
def test_cross_section_data(): grib = mv.read(os.path.join(PATH, 't_for_xs.grib')) xs_data = mv.mcross_sect( line=[59.9, -180, -13.5, 158.08], data=grib, ) # the result of this should be a netCDF variable assert mv.type(xs_data) == 'netcdf' mv.setcurrent(xs_data, 't') assert mv.dimension_names(xs_data) == ['time', 'nlev', 'lon'] assert np.isclose(mv.value(xs_data, 0), 230.39156) xs_data_x2 = xs_data * 2 assert np.isclose(mv.value(xs_data_x2, 0), 460.7831)
def test_odb_to_dataframe_2(): if mv.is_feature_available('odb') == 0: print( 'Skipping test_odb because ODB is not enabled in this Metview version' ) return db = mv.read(file_in_testdir('small_odb.odb')) assert (mv.type(db) == 'odb') df = db.to_dataframe() assert (isinstance(df, pd.DataFrame)) assert (df.shape == (273, 54)) dt1_loc = df.iloc[0]['an_depar@body'] assert (np.isclose(dt1_loc, -0.123831)) dt1_loc = df.iloc[0]['class@desc'] assert (dt1_loc.strip() == 'rd') # strings from ODB are padded with spaces dt1_loc = df.iloc[20]['expver@desc'] assert (dt1_loc.strip() == 'fgww' ) # strings from ODB are padded with spaces dt1_loc = df.iloc[20]['sensor@hdr'] # test a constant integer field assert (dt1_loc == 3)
def test_odb_to_dataframe_1(): if mv.is_feature_available('odb') == 0: print( 'Skipping test_odb because ODB is not enabled in this Metview version' ) return db = mv.read(file_in_testdir('temp_u.odb')) assert (mv.type(db) == 'odb') df = db.to_dataframe() assert (isinstance(df, pd.DataFrame)) assert (df.shape == (88, 3)) dt1_loc = df.iloc[0]['p'] assert (np.isclose(dt1_loc, 98065.6)) dt1_loc = df.iloc[5]['t'] assert (np.isclose(dt1_loc, 144700)) dt1_loc = df.iloc[50]['t'] assert (np.isclose(dt1_loc, 103200)) dt1_loc = df.iloc[29]['val'] assert (np.isclose(dt1_loc, -6.06863)) dt1_loc = df.iloc[87]['val'] assert (np.isclose(dt1_loc, -4.27525))
def test_pass_dataset_as_arg(): grib = mv.read(file_in_testdir('t_for_xs.grib')) x = grib.to_dataset() fs = mv.mean(x * 2) # *2 is done by xarray, mean is done by Metview assert (mv.type(fs) == 'fieldset') assert (len(fs) == 1)
def test_dataset_to_fieldset(): grib = mv.read(file_in_testdir('t_for_xs.grib')) x = grib.to_dataset() f = mv.dataset_to_fieldset(x) assert (mv.type(f) == 'fieldset') assert (len(f) == 6)
def test_set_vector_from_numpy_array(): r = np.arange(1, 21, dtype=np.float64) assert (mv.type(r) == 'vector') assert (mv.dtype(r) == 'float64') assert (mv.count(r) == 20) assert (mv.maxvalue(r) == 20)
def test_zero_length_vector_from_numpy(): a = np.array([]) assert (mv.type(a) == 'vector') assert (mv.count(a) == 0)
def test_type(): out = mv.type(TEST_FIELDSET) assert out == 'fieldset'
def test_geopoints_fieldset_operator(): diff = TEST_FIELDSET - TEST_GEOPOINTS assert mv.type(diff) == 'geopoints'
def test_push_nil(): n = mv.nil() assert (n is None) assert (mv.type(n) == 'nil')
def test_sqrt_geopoints(): sqrt_out = mv.sqrt(TEST_GEOPOINTS) maximum = mv.maxvalue(sqrt_out) assert mv.type(sqrt_out) == 'geopoints' assert np.isclose(maximum, MAX_SQRT_GPT)
def test_filter_gpt(): filter_out = TEST_GEOPOINTS.filter(TEST_GEOPOINTS >= 280) assert mv.type(filter_out) == 'geopoints' assert mv.count(filter_out) == 38
def test_read_gpt(): gpt = mv.read(file_in_testdir('t2m_3day.gpt')) assert (mv.type(gpt) == 'geopoints') assert (mv.count(gpt) == 45)
def test_read_bufr(): bufr = mv.read(file_in_testdir('obs_3day.bufr')) assert (mv.type(bufr) == 'observations')