Skip to content

Commit a0e2e40

Browse files
authored
Merge pull request #714 from srwater/main
Fixing copying of data_value_type in from_pandas
2 parents d758659 + 13bcacb commit a0e2e40

File tree

3 files changed

+30
-9
lines changed

3 files changed

+30
-9
lines changed

mikeio/dataset/_dataset.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2047,15 +2047,16 @@ def _parse_items(
20472047
elif isinstance(items, ItemInfo):
20482048
eum_type = items.type
20492049
eum_unit = items.unit
2050-
item_list = [ItemInfo(name, eum_type, eum_unit) for name in column_names]
2050+
eum_data_value_type = items.data_value_type
2051+
item_list = [ItemInfo(name, eum_type, eum_unit, eum_data_value_type) for name in column_names]
20512052

20522053
elif isinstance(items, Mapping):
20532054
item_list = [
2054-
ItemInfo(name, items[name].type, items[name].unit) for name in column_names
2055+
ItemInfo(name, items[name].type, items[name].unit, items[name].data_value_type) for name in column_names
20552056
]
20562057
elif isinstance(items, Sequence):
20572058
item_list = [
2058-
ItemInfo(col, item.type, item.unit)
2059+
ItemInfo(col, item.type, item.unit, item.data_value_type)
20592060
for col, item in zip(column_names, items)
20602061
]
20612062
else:

mikeio/eum/_eum.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1432,7 +1432,7 @@ def __init__(
14321432
itemtype: EUMType | EUMUnit | None = None,
14331433
unit: EUMUnit | None = None,
14341434
data_value_type: Literal[
1435-
"Instantaneous", "Accumulated", "StepAccumulated", "MeanStepBackWard"
1435+
"Instantaneous", "Accumulated", "StepAccumulated", "MeanStepBackward"
14361436
] = "Instantaneous",
14371437
) -> None:
14381438

tests/test_dfs0.py

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import pandas as pd
44
import mikeio
55
from mikeio import Dfs0, EUMType, EUMUnit, ItemInfo
6+
from mikecore.DfsFile import DataValueType
67

78

89
import pytest
@@ -274,23 +275,31 @@ def test_from_pandas_mapping_eum_types() -> None:
274275
time = pd.DatetimeIndex(["2001-01-01", "2001-01-01 01:00", "2001-01-01 01:10"])
275276

276277
df = pd.DataFrame(
277-
{"flow": np.array([1, np.nan, 2]), "level": np.array([2, 3.0, -1.3])}
278+
{"flow": np.array([1, np.nan, 2]), "rain": np.array([2, 3.0, -1.3])}
278279
)
279280
df.index = time
280281

281282
dfr = df.resample("5min").mean().fillna(0.0) # .interpolate()
282283

284+
item_with_dvt = mikeio.ItemInfo(
285+
itemtype=mikeio.EUMType.Rainfall,
286+
unit=mikeio.EUMUnit.centimeter,
287+
data_value_type="StepAccumulated",
288+
)
283289
ds = mikeio.from_pandas(
284290
dfr,
285291
items={
286292
"flow": mikeio.ItemInfo(itemtype=mikeio.EUMType.Discharge),
287-
"level": mikeio.ItemInfo(itemtype=mikeio.EUMType.Water_Level),
293+
"rain": item_with_dvt,
288294
},
289295
)
296+
item_with_dvt.name = "rain"
290297

291298
assert ds.n_timesteps == 15
292299
assert ds[0].type == mikeio.EUMType.Discharge
293-
assert ds[1].type == mikeio.EUMType.Water_Level
300+
assert ds[1].type == mikeio.EUMType.Rainfall
301+
assert ds[1].item is not item_with_dvt
302+
assert ds[1].item == item_with_dvt
294303
assert len(ds) == 2
295304
assert ds.end_time == dfr.index[-1]
296305
assert ds.is_equidistant
@@ -304,10 +313,14 @@ def test_from_pandas_same_eum_type() -> None:
304313
index=pd.date_range("2001-01-01", periods=3, freq="H"),
305314
)
306315

307-
ds = mikeio.from_pandas(df, items=ItemInfo(EUMType.Water_Level))
316+
ds = mikeio.from_pandas(
317+
df,
318+
items=ItemInfo(EUMType.Water_Level, data_value_type=DataValueType.Accumulated),
319+
)
308320

309321
assert ds.n_timesteps == 3
310322
assert ds[0].type == EUMType.Water_Level
323+
assert ds[0].item.data_value_type == DataValueType.Accumulated
311324
assert ds["station_b"].item.name == "station_b"
312325

313326

@@ -325,13 +338,20 @@ def test_from_pandas_sequence_eum_types() -> None:
325338
dfr,
326339
items=[
327340
mikeio.ItemInfo("Ignored", itemtype=mikeio.EUMType.Discharge),
328-
mikeio.ItemInfo("Also Ignored", itemtype=mikeio.EUMType.Water_Level),
341+
mikeio.ItemInfo(
342+
"Also Ignored",
343+
itemtype=mikeio.EUMType.Water_Level,
344+
unit=mikeio.EUMUnit.millimeter,
345+
data_value_type=DataValueType.Accumulated,
346+
),
329347
],
330348
)
331349

332350
assert ds.n_timesteps == 15
333351
assert ds[0].type == mikeio.EUMType.Discharge
334352
assert ds[1].type == mikeio.EUMType.Water_Level
353+
assert ds[1].item.unit == mikeio.EUMUnit.millimeter
354+
assert ds[1].item.data_value_type == DataValueType.Accumulated
335355
assert ds["level"].item.name == "level"
336356

337357

0 commit comments

Comments
 (0)