def test_extract_items(tmpdir): infile = "tests/testdata/oresund_vertical_slice.dfsu" outfile = os.path.join(tmpdir.dirname, "extracted_vertical_slice.dfsu") extract(infile, outfile, items="Temperature") extracted = mikeio.read(outfile) assert extracted.n_items == 1 extract(infile, outfile, items=[0, 2]) extracted = mikeio.read(outfile) assert extracted.n_items == 2 extract(infile, outfile, items=["Salinity", 1]) extracted = mikeio.read(outfile) assert extracted.n_items == 2 with pytest.raises(Exception): # must be unique extract(infile, outfile, items=["Salinity", 2]) with pytest.raises(Exception): # no negative numbers extract(infile, outfile, items=[0, 2, -1]) with pytest.raises(Exception): extract(infile, outfile, items=[0, "not_an_item"])
def test_extract_non_equidistant(tmpdir): infile = "tests/testdata/da_diagnostic.dfs0" outfile = os.path.join(tmpdir.dirname, "diagnostic_subset.dfs0") extract(infile, outfile, start="2017-10-27 01:58", end="2017-10-27 04:32") extracted = mikeio.read(outfile) assert extracted.n_timesteps == 16 assert extracted.time[0].hour == 2 extract(infile, outfile, end=3600.0) extracted = mikeio.read(outfile) assert extracted.n_timesteps == 7 assert extracted.time[0].hour == 0 assert extracted.time[-1].minute == 0 extract(infile, outfile, start=1800.0, end=237981231.232) extracted = mikeio.read(outfile) assert extracted.n_timesteps > 0 extract(infile, outfile, "2017-10-27,2017-10-28") extracted = mikeio.read(outfile) assert extracted.n_timesteps > 0 with pytest.raises(Exception): extract(infile, outfile, start=7200.0, end=1800.0)
def test_extract_equidistant(tmpdir): infile = "tests/testdata/waves.dfs2" outfile = os.path.join(tmpdir.dirname, "waves_subset.dfs2") extract(infile, outfile, start=1, end=-1) orig = mikeio.read(infile) extracted = mikeio.read(outfile) assert extracted.n_timesteps == orig.n_timesteps - 1 assert extracted.time[0] == orig.time[1]
def test_write_xyz(tmpdir): outfilename = tmpdir.join("foo.xyz") filename = "tests/testdata/positions.xyz" df1 = mikeio.read(filename) df1.to_xyz(outfilename) df2 = mikeio.read(outfilename) assert df1.shape == df2.shape
def test_dfs2_to_dfs1_x_direction(tmpdir): dfs2file = "tests/testdata/eq.dfs2" ds2 = mikeio.read(dfs2file) assert ds2.data[0].shape == (25, 10, 20) dfs1file1 = os.path.join(tmpdir.dirname, "eq_ax_x.dfs1") dfs2todfs1(dfs2file, dfs1file1, axis=2) ds1 = mikeio.read(dfs1file1) assert ds1.data[0].shape == (25, 10)
def test_diff_dfsu(tmpdir): infilename_a = "tests/testdata/HD2D.dfsu" infilename_b = "tests/testdata/HD2D.dfsu" outfilename = os.path.join(tmpdir.dirname, "diff.dfsu") mikeio.generic.diff(infilename_a, infilename_b, outfilename) org = mikeio.read(infilename_a) diffed = mikeio.read(outfilename) expected = 0.0 scaledvalue = diffed.data[0][0] assert scaledvalue == pytest.approx(expected)
def test_multiply_constant(tmpdir): infilename = "tests/testdata/random.dfs0" outfilename = os.path.join(tmpdir.dirname, "mult.dfs0") scale(infilename, outfilename, factor=1.5) org = mikeio.read(infilename) scaled = mikeio.read(outfilename) orgvalue = org.data[0][0] expected = orgvalue * 1.5 scaledvalue = scaled.data[0][0] assert scaledvalue == pytest.approx(expected)
def test_add_constant(tmpdir): infilename = "tests/testdata/random.dfs0" outfilename = os.path.join(tmpdir.dirname, "add.dfs0") scale(infilename, outfilename, offset=100.0) org = mikeio.read(infilename) scaled = mikeio.read(outfilename) orgvalue = org.data[0][0] expected = orgvalue + 100.0 scaledvalue = scaled.data[0][0] assert scaledvalue == pytest.approx(expected)
def test_dfs2_to_dfs1_y_direction(tmpdir): dfs2file = "tests/testdata/eq.dfs2" ds2 = mikeio.read(dfs2file) assert ds2.data[0].shape == (25, 10, 20) # t, y, x dfs1file1 = os.path.join(tmpdir.dirname, "eq_ax_y.dfs1") dfs2todfs1(dfs2file, dfs1file1) # default aggregation is over y axis ds1 = mikeio.read(dfs1file1) assert ds1.data[0].shape == (25, 20)
def test_dfsu_to_dfs0(tmpdir): dfsufile = "tests/testdata/HD2D.dfsu" ds_in = mikeio.read(dfsufile) assert ds_in.data[0].shape == (9, 884) dfs0file1 = os.path.join(tmpdir.dirname, "HD2D_mean.dfs0") dfstodfs0(dfsufile, dfs0file1) ds0 = mikeio.read(dfs0file1) assert ds0.data[0].shape == (9, )
def test_linear_transform_dfsu(tmpdir): infilename = "tests/testdata/HD2D.dfsu" outfilename = os.path.join(tmpdir.dirname, "linear.dfsu") scale(infilename, outfilename, offset=-20.0, factor=1.5) org = mikeio.read(infilename) scaled = mikeio.read(outfilename) orgvalue = org.data[0][0] expected = orgvalue * 1.5 - 20.0 scaledvalue = scaled.data[0][0] assert scaledvalue == pytest.approx(expected)
def test_extract_non_equidistant(tmpdir): infile = "tests/testdata/da_diagnostic.dfs0" outfile = os.path.join(tmpdir.dirname, "diagnostic_subset.dfs0") extract(infile, outfile, start="2017-10-27 01:58", end="2017-10-27 04:32") extracted = mikeio.read(outfile) assert extracted.n_timesteps == 16 assert extracted.time[0].hour == 2 extract(infile, outfile, end=3600.0) extracted = mikeio.read(outfile) assert extracted.n_timesteps == 7 assert extracted.time[0].hour == 0 assert extracted.time[-1].minute == 0
def test_sum_dfsu(tmpdir): infilename_a = "tests/testdata/HD2D.dfsu" infilename_b = "tests/testdata/HD2D.dfsu" outfilename = os.path.join(tmpdir.dirname, "sum.dfsu") mikeio.generic.sum(infilename_a, infilename_b, outfilename) org = mikeio.read(infilename_a) summed = mikeio.read(outfilename) orgvalue = org.data[0][0] expected = orgvalue * 2 scaledvalue = summed.data[0][0] assert scaledvalue == pytest.approx(expected)
def test_sum_itself(tmpdir): infilename_1 = "tests/testdata/gebco_sound.dfs2" infilename_2 = "tests/testdata/gebco_sound.dfs2" outfilename = os.path.join(tmpdir.dirname, "diff.dfs2") sum(infilename_1, infilename_2, outfilename) org = mikeio.read(infilename_1) assert np.isnan(org["Elevation"][0][0,-1]) summed = mikeio.read(outfilename) assert np.isnan(summed["Elevation"][0][0,-1])
def test_write_from_data_frame_different_types(tmpdir): df = pd.read_csv( "tests/testdata/co2-mm-mlo.csv", parse_dates=True, index_col="Date", na_values=-99.99, ) df = df[["Average", "Trend"]] filename = os.path.join(tmpdir.dirname, "dataframe.dfs0") items = [ ItemInfo("Average", EUMType.Concentration, EUMUnit.gram_per_meter_pow_3), ItemInfo("Trend", EUMType.Undefined), ] Dfs0.from_dataframe(df, filename, items=items) ds = mikeio.read(filename) assert len(ds.items) == 2 assert ds.items[0].type == EUMType.Concentration assert ds.items[0].unit == EUMUnit.gram_per_meter_pow_3 assert ds.items[1].type == EUMType.Undefined assert ds.items[1].unit == EUMUnit.undefined
def test_read_dfs1_generic_read(): filename = r"tests/testdata/random.dfs1" res = mikeio.read(filename) data = res.data[0] assert data.shape == (100, 3) # time, x
def test_read_dfsu_generic_read(): filename = "tests/testdata/HD2D.dfsu" ds = mikeio.read(filename) assert len(ds) == 4
def test_read_dfsu_generic_read_single_item_number(): filename = "tests/testdata/HD2D.dfsu" ds = mikeio.read(filename, item_numbers=[1]) assert len(ds) == 1
def test_write_from_data_frame_monkey_patched_data_value_not_default(tmpdir): df = pd.read_csv( "tests/testdata/co2-mm-mlo.csv", parse_dates=True, index_col="Date", na_values=-99.99, ) filename = os.path.join(tmpdir.dirname, "dataframe.dfs0") items = [] for col in df.columns: items.append( ItemInfo(col, EUMType.Concentration, EUMUnit.gram_per_meter_pow_3, data_value_type="MeanStepBackward")) df.to_dfs0(filename, items=items) ds = mikeio.read(filename) assert len(ds.items) == 5 assert ds.items[0].type == EUMType.Concentration assert ds.items[0].unit == EUMUnit.gram_per_meter_pow_3 assert np.isnan(ds["Average"][3]) assert ds.time[0].year == 1958 assert ds.items[0].data_value_type == 3
def test_diff_itself(tmpdir): infilename_1 = "tests/testdata/gebco_sound.dfs2" infilename_2 = "tests/testdata/gebco_sound.dfs2" outfilename = os.path.join(tmpdir.dirname, "diff.dfs2") diff(infilename_1, infilename_2, outfilename) org = mikeio.read(infilename_1) assert np.isnan(org["Elevation"][0][0,-1]) diffed = mikeio.read(outfilename) diffedvalue = diffed["Elevation"][0, 0, 0] assert diffedvalue == pytest.approx(0.0) assert np.isnan(diffed["Elevation"][0][0,-1])
def test_read_dfs0_generic_read(): filename = r"tests/testdata/random.dfs0" res = mikeio.read(filename) data = res.data assert len(data) == 2
def test_read_dfs2_generic_read(): filename = r"tests/testdata/random.dfs2" res = mikeio.read(filename, item_names=["testing water level"]) data = res.data[0] assert data[0, 11, 0] == 0 assert data.shape == (3, 100, 2) # time, y, x
def test_read_dfsu_generic_read(): filename = "tests/testdata/HD2D.dfsu" (data, t, names) = mikeio.read(filename) assert len(data) == 4 assert len(names) == 4
def test_concat_overlapping(tmpdir): infilename_a = "tests/testdata/tide1.dfs1" infilename_b = "tests/testdata/tide2.dfs1" outfilename = os.path.join(tmpdir.dirname, "concat.dfs1") mikeio.generic.concat([infilename_a, infilename_b], outfilename) ds = mikeio.read(outfilename) assert len(ds.time) == 145
def test_multiply_constant_single_item_name(tmpdir): infilename = "tests/testdata/wind_north_sea.dfsu" outfilename = os.path.join(tmpdir.dirname, "multname.dfsu") scale(infilename, outfilename, factor=1.5, items=["Wind speed"]) org = mikeio.read(infilename) scaled = mikeio.read(outfilename) orgvalue_speed = org["Wind speed"][0, 0] expected_speed = orgvalue_speed * 1.5 scaledvalue_speed = scaled["Wind speed"][0, 0] assert scaledvalue_speed == pytest.approx(expected_speed) orgvalue_dir = org["Wind direction"][0, 0] expected_dir = orgvalue_dir scaledvalue_dir = scaled["Wind direction"][0, 0] assert scaledvalue_dir == pytest.approx(expected_dir)
def test_multiply_constant_single_item_number(tmpdir): infilename = "tests/testdata/wind_north_sea.dfsu" outfilename = os.path.join(tmpdir.dirname, "mult.dfsu") scale(infilename, outfilename, factor=1.5, item_numbers=[0]) org = mikeio.read(infilename) scaled = mikeio.read(outfilename) orgvalue_speed = org.data[0][0][0] expected_speed = orgvalue_speed * 1.5 scaledvalue_speed = scaled.data[0][0][0] assert scaledvalue_speed == pytest.approx(expected_speed) orgvalue_dir = org.data[1][0][0] expected_dir = orgvalue_dir scaledvalue_dir = scaled.data[1][0][0] assert scaledvalue_dir == pytest.approx(expected_dir)
def test_add_constant_delete_values_unchanged(tmpdir): infilename = "tests/testdata/gebco_sound.dfs2" outfilename = os.path.join(tmpdir.dirname, "adj.dfs2") scale(infilename, outfilename, offset=-2.1, items=["Elevation"]) org = mikeio.read(infilename) scaled = mikeio.read(outfilename) orgvalue = org["Elevation"][0, 0, 0] scaledvalue = scaled["Elevation"][0, 0, 0] assert scaledvalue == pytest.approx(orgvalue - 2.1) orgvalue = org["Elevation"][0, 100, 0] assert np.isnan(orgvalue) scaledvalue = scaled["Elevation"][0, 100, 0] assert np.isnan(scaledvalue)
def test_concat_three_files(tmpdir): infiles = [ "tests/testdata/tide1.dfs1", "tests/testdata/tide2.dfs1", "tests/testdata/tide4.dfs1", ] outfilename = os.path.join(tmpdir.dirname, "concat.dfs1") mikeio.generic.concat(infiles, outfilename) ds = mikeio.read(outfilename) assert len(ds.time) == (5 * 48 + 1)
def test_multiply_constant_delete_values_unchanged_2(tmpdir): infilename = "tests/testdata/random_two_item.dfs2" outfilename = os.path.join(tmpdir.dirname, "adj.dfs2") item_name = "testing water level" scale(infilename, outfilename, factor=1000.0, items=[item_name]) org = mikeio.read(infilename) scaled = mikeio.read(outfilename) orgvalue = org[item_name][0, 0, 0] scaledvalue = scaled[item_name][0, 0, 0] assert scaledvalue == pytest.approx(orgvalue * 1000.0) orgvalue = org[item_name][0, 10, 0] assert np.isnan(orgvalue) scaledvalue = scaled[item_name][0, 10, 0] assert np.isnan(scaledvalue)
def test_create_from_data_frame(tmpdir): df = pd.read_csv( "tests/testdata/co2-mm-mlo.csv", parse_dates=True, index_col="Date", na_values=-99.99, ) filename = os.path.join(tmpdir.dirname, "dataframe.dfs0") Dfs0.from_dataframe( df, filename, itemtype=EUMType.Concentration, unit=EUMUnit.gram_per_meter_pow_3 ) # Could not find better type ds = mikeio.read(filename) assert len(ds.items) == 5 assert ds.items[0].type == EUMType.Concentration assert ds.items[0].unit == EUMUnit.gram_per_meter_pow_3