Deltares-research / kenmerkendewaarden

Derive indicators from waterlevel measurements
https://deltares-research.github.io/kenmerkendewaarden/
GNU General Public License v3.0
2 stars 0 forks source link

clearer error messages for slotgem #82

Closed veenstrajelmer closed 3 months ago

veenstrajelmer commented 3 months ago

The code below raises "ValueError: zero-size array to reduction operation maximum which has no identity", derive the problem and raise a clear error message.

import os
import pandas as pd
import hatyan
import kenmerkendewaarden as kw

# set logging level to INFO to get log messages
import logging
logging.getLogger("kenmerkendewaarden").setLevel(level="INFO")

tstop_dt = pd.Timestamp(2021,1,1, tz="UTC+01:00")

dir_base = r'p:\11210325-005-kenmerkende-waarden\work'
dir_meas = os.path.join(dir_base,'measurements_wl_18700101_20240101')
# TODO: move to full data folder (otherwise overschrijding and slotgemiddelde is completely wrong)
# dir_meas = os.path.join(dir_base,'measurements_wl_20101201_20220201') # when using this, we get `TypeError: 'NoneType' object is not subscriptable`

current_station = 'HANSWT'

print("loading meas")
data_pd_meas_all = kw.read_measurements(dir_output=dir_meas, station=current_station, extremes=False)
data_pd_HWLW_all = kw.read_measurements(dir_output=dir_meas, station=current_station, extremes=True)
data_pd_HWLW_all_12 = hatyan.calc_HWLW12345to12(data_pd_HWLW_all) #convert 12345 to 12 by taking minimum of 345 as 2 (laagste laagwater)

print("slotgem")
# this works
slotgemiddelden_all = kw.calc_slotgemiddelden(df_meas=data_pd_meas_all.loc[:tstop_dt], 
                                              df_ext=data_pd_HWLW_all_12.loc[:tstop_dt], 
                                              min_coverage=0, clip_physical_break=True)
# this fails with `ValueError: zero-size array to reduction operation maximum which has no identity`
slotgemiddelden_valid = kw.calc_slotgemiddelden(df_meas=data_pd_meas_all.loc[:tstop_dt], 
                                                df_ext=data_pd_HWLW_all_12.loc[:tstop_dt], 
                                                min_coverage=1, clip_physical_break=True)

The error occurred since too much yearly averages were incorrectly seen as invalid with a min_coverage of 100%, this will be picked up in a follow-up issue: https://github.com/Deltares-research/kenmerkendewaarden/issues/88