Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2,495 changes: 1,375 additions & 1,120 deletions fmskill/comparison.py

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion fmskill/connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ def plot_observation_positions(self, figsize=None):
@staticmethod
def _comparer_or_None(comparer, warn=True):
"""If comparer is empty issue warning and return None."""
if len(comparer.df) == 0:
if len(comparer.data) == 0:
if warn:
name = comparer.observation.name
warnings.warn(f"No overlapping data was found for {name}!")
Expand Down
4 changes: 2 additions & 2 deletions fmskill/model/abstract.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import pandas as pd
import mikeio

from ..comparison import BaseComparer
from ..comparison import SingleObsComparer


def _parse_itemInfo(itemInfo):
Expand Down Expand Up @@ -30,7 +30,7 @@ def item_name(self):
pass

@abstractmethod
def extract_observation(self, observation) -> BaseComparer:
def extract_observation(self, observation) -> SingleObsComparer:
pass

def __repr__(self):
Expand Down
19 changes: 12 additions & 7 deletions fmskill/model/dfs.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,12 @@

import mikeio
from ..observation import Observation, PointObservation, TrackObservation
from ..comparison import PointComparer, TrackComparer, ComparerCollection, BaseComparer
from ..comparison import (
PointComparer,
TrackComparer,
ComparerCollection,
SingleObsComparer,
)
from ..utils import make_unique_index
from .abstract import ModelResultInterface

Expand Down Expand Up @@ -231,7 +236,7 @@ def _extract_track(self, observation: TrackObservation) -> pd.DataFrame:

def extract_observation(
self, observation: Union[PointObservation, TrackObservation], validate=True
) -> BaseComparer:
) -> SingleObsComparer:
"""Extract ModelResult at observation for comparison

Parameters
Expand All @@ -244,7 +249,7 @@ def extract_observation(

Returns
-------
<fmskill.BaseComparer>
<fmskill.SingleObsComparer>
A comparer object for further analysis or plotting
"""

Expand All @@ -264,7 +269,7 @@ def extract_observation(
else:
raise ValueError("Only point and track observation are supported!")

if len(comparer.df) == 0:
if len(comparer.data) == 0:
warnings.warn(f"No overlapping data in found for obs '{observation.name}'!")
comparer = None

Expand Down Expand Up @@ -319,7 +324,7 @@ def extract_observation(
observation: Union[PointObservation, TrackObservation],
validate=True,
**kwargs,
) -> BaseComparer:
) -> SingleObsComparer:
"""Extract ModelResult at observation for comparison

Parameters
Expand All @@ -332,7 +337,7 @@ def extract_observation(

Returns
-------
<fmskill.BaseComparer>
<fmskill.SingleObsComparer>
A comparer object for further analysis or plotting
"""
# if item is None:
Expand All @@ -356,7 +361,7 @@ def extract_observation(
else:
raise ValueError("Only point and track observation are supported!")

if len(comparer.df) == 0:
if len(comparer.data) == 0:
warnings.warn(f"No overlapping data in found for obs '{observation.name}'!")
comparer = None

Expand Down
4 changes: 2 additions & 2 deletions fmskill/model/pandas.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ def extract_observation(
else:
raise ValueError("Only point observation are supported!")

if len(comparer.df) == 0:
if len(comparer.data) == 0:
warnings.warn(f"No overlapping data in found for obs '{observation.name}'!")
comparer = None

Expand Down Expand Up @@ -256,7 +256,7 @@ def extract_observation(
else:
raise ValueError("Only track observation are supported!")

if len(comparer.df) == 0:
if len(comparer.data) == 0:
warnings.warn(f"No overlapping data in found for obs '{observation.name}'!")
comparer = None

Expand Down
2 changes: 1 addition & 1 deletion fmskill/model/xarray.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ def extract_observation(
else:
raise ValueError("Only point and track observation are supported!")

if len(comparer.df) == 0:
if len(comparer.data) == 0:
warnings.warn(f"No overlapping data in found for obs '{observation.name}'!")
comparer = None

Expand Down
155 changes: 95 additions & 60 deletions notebooks/Track_comparison.ipynb

Large diffs are not rendered by default.

132 changes: 46 additions & 86 deletions notebooks/Track_comparison_global_waves.ipynb

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion tests/test_combine_comparers.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ def test_concat_same_model(o123, mrmike):
# if we add the same model multiple times it has no effect
cc12 = cc1 + cc2
assert cc12.n_points == cc1.n_points
assert cc12[0].df.index.is_unique
assert cc12[0].data.index.is_unique
assert cc1.score() == cc12.score()


Expand Down
22 changes: 11 additions & 11 deletions tests/test_connector.py
Original file line number Diff line number Diff line change
Expand Up @@ -269,36 +269,36 @@ def test_extract_gaps2(o2_gaps, mr12_gaps):
con12 = Connector(o2_gaps, [mr1, mr2])

cc = con12.extract() # no max gap argument
assert cc[0].df["mr1"].count() == 66
assert cc[0].df["mr2"].count() == 66
assert cc[0].data["mr1"].count() == 66
assert cc[0].data["mr2"].count() == 66

# no gap in mr1
cc = con1.extract(max_model_gap=7200)
assert cc[0].df["mr1"].count() == 66
assert cc[0].data["mr1"].count() == 66

# one day gap in mr2
cc = con2.extract(max_model_gap=7200)
assert cc[0].df["mr2"].count() == 42 # 66 - 24
assert cc[0].df.loc["2017-10-28", "mr2"].count() == 0
assert cc[0].data["mr2"].count() == 42 # 66 - 24
assert cc[0].data.loc["2017-10-28", "mr2"].count() == 0

# will syncronize the two models,
# so gap in one will remove points from the other
cc = con12.extract(max_model_gap=7200)
assert cc[0].df["mr1"].count() == 42
assert cc[0].df["mr2"].count() == 42
assert cc[0].data["mr1"].count() == 42
assert cc[0].data["mr2"].count() == 42

# the 24 hour gap (86400 seconds) in the file cannot be filled
# with the max_model_gap=27200
cc = con2.extract(max_model_gap=27200)
assert cc[0].df["mr2"].count() == 42
assert cc[0].df.loc["2017-10-28", "mr2"].count() == 0
assert cc[0].data["mr2"].count() == 42
assert cc[0].data.loc["2017-10-28", "mr2"].count() == 0


def test_extract_gaps_big(o2_gaps, mr12_gaps):
_, mr2 = mr12_gaps
con2 = Connector(o2_gaps, mr2)
cc = con2.extract(max_model_gap=86401) # 24 hours + 1 second
assert cc[0].df["mr2"].count() == 66 # no data removed
assert cc[0].data["mr2"].count() == 66 # no data removed


def test_extract_gaps_small(o2_gaps, mr12_gaps):
Expand Down Expand Up @@ -329,4 +329,4 @@ def test_extract_gaps_types(o2_gaps, mr12_gaps):
]
for gap in gaps:
cc = con2.extract(max_model_gap=gap)
assert cc[0].df["mr1"].count() == 42
assert cc[0].data["mr1"].count() == 42
4 changes: 2 additions & 2 deletions tests/test_model_xarray.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ def test_XArrayModelResultItem_validate_point(mf_modelresult, pointobs_epl_hm0):

def test_XArrayModelResultItem_extract_point(mr_ERA5_swh, pointobs_epl_hm0):
pc = mr_ERA5_swh.extract_observation(pointobs_epl_hm0)
df = pc.df
df = pc.data

assert isinstance(pc, PointComparer)
assert pc.start == datetime(2017, 10, 27, 0, 0, 0)
Expand Down Expand Up @@ -207,7 +207,7 @@ def test_XArrayModelResultItem_extract_point_wrongitem(mr_ERA5_pp1d, pointobs_ep
def test_XArrayModelResultItem_extract_track(mr_ERA5_pp1d, trackobs_c2_hm0):
mri = mr_ERA5_pp1d
tc = mri.extract_observation(trackobs_c2_hm0)
df = tc.df
df = tc.data

assert isinstance(tc, TrackComparer)
assert tc.start.replace(microsecond=0) == datetime(2017, 10, 27, 12, 52, 52)
Expand Down
5 changes: 3 additions & 2 deletions tests/test_modelresult.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from fmskill.model import DfsModelResultItem, DataArrayModelResultItem
from fmskill.observation import PointObservation, TrackObservation


@pytest.fixture
def klagshamn():
fn = "tests/testdata/smhi_2095_klagshamn.dfs0"
Expand Down Expand Up @@ -189,7 +190,7 @@ def test_dataarray_extract_point(sw_dutch_coast, Hm0_EPL):
c2 = mr2.extract_observation(Hm0_EPL.copy())
assert isinstance(c1, PointComparer)
assert isinstance(c2, PointComparer)
assert np.all(c1.df == c2.df)
assert np.all(c1.data == c2.data)
c1.observation.itemInfo == Hm0_EPL.itemInfo
assert len(c1.observation.data.index.difference(Hm0_EPL.data.index)) == 0

Expand All @@ -211,7 +212,7 @@ def test_dataarray_extract_track(sw_dutch_coast, Hm0_C2):
c2 = mr2.extract_observation(Hm0_C2.copy())
assert isinstance(c1, TrackComparer)
assert isinstance(c2, TrackComparer)
assert np.all(c1.df == c2.df)
assert np.all(c1.data == c2.data)
c1.observation.itemInfo == Hm0_C2.itemInfo
assert len(c1.observation.data.index.difference(Hm0_C2.data.index)) == 0

Expand Down
2 changes: 1 addition & 1 deletion tests/test_trackcompare.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ def test_extract_no_spatial_overlap_dfs0(modelresult, observation_df):
cc = con.extract()

assert cc.n_comparers == 0
assert len(cc.all_df) == 0
assert cc.n_points == 0


# def test_extract_no_spatial_overlap_dfsu(observation_df):
Expand Down