Skip to content
Snippets Groups Projects

Resolve "release v1.4.0"

Merged Ghost User requested to merge release_v1.4.0 into master
3 files
+ 72
27
Compare changes
  • Side-by-side
  • Inline
Files
3
@@ -2,7 +2,8 @@ __author__ = 'Lukas Leufen'
__date__ = '2020-11-05'
from mlair.data_handler.data_handler_single_station import DataHandlerSingleStation
from mlair.data_handler.data_handler_with_filter import DataHandlerKzFilterSingleStation
from mlair.data_handler.data_handler_with_filter import DataHandlerKzFilterSingleStation, \
DataHandlerFirFilterSingleStation, DataHandlerFilterSingleStation
from mlair.data_handler import DefaultDataHandler
from mlair import helpers
from mlair.helpers import remove_items
@@ -94,8 +95,8 @@ class DataHandlerMixedSampling(DefaultDataHandler):
class DataHandlerMixedSamplingWithFilterSingleStation(DataHandlerMixedSamplingSingleStation,
DataHandlerKzFilterSingleStation):
_requirements1 = DataHandlerKzFilterSingleStation.requirements()
DataHandlerFilterSingleStation):
_requirements1 = DataHandlerFilterSingleStation.requirements()
_requirements2 = DataHandlerMixedSamplingSingleStation.requirements()
_requirements = list(set(_requirements1 + _requirements2))
@@ -107,19 +108,16 @@ class DataHandlerMixedSamplingWithFilterSingleStation(DataHandlerMixedSamplingSi
def make_input_target(self):
"""
A KZ filter is applied on the input data that has hourly resolution. Lables Y are provided as aggregated values
A FIR filter is applied on the input data that has hourly resolution. Lables Y are provided as aggregated values
with daily resolution.
"""
self._data = tuple(map(self.load_and_interpolate, [0, 1])) # load input (0) and target (1) data
self.set_inputs_and_targets()
self.apply_kz_filter()
self.apply_filter()
def estimate_filter_width(self):
"""
f = 0.5 / (len * sqrt(itr)) -> T = 1 / f
:return:
"""
return int(self.kz_filter_length[0] * np.sqrt(self.kz_filter_iter[0]) * 2)
"""Return maximum filter width."""
raise NotImplementedError
@staticmethod
def _add_time_delta(date, delta):
@@ -156,22 +154,55 @@ class DataHandlerMixedSamplingWithFilterSingleStation(DataHandlerMixedSamplingSi
return data
def _extract_lazy(self, lazy_data):
_data, self.meta, _input_data, _target_data, self.cutoff_period, self.cutoff_period_days = lazy_data
_data, self.meta, _input_data, _target_data = lazy_data
start_inp, end_inp = self.update_start_end(0)
self._data = tuple(map(lambda x: self._slice_prep(_data[x], *self.update_start_end(x)), [0, 1]))
self.input_data = self._slice_prep(_input_data, start_inp, end_inp)
self.target_data = self._slice_prep(_target_data, self.start, self.end)
class DataHandlerMixedSamplingWithFilter(DefaultDataHandler):
class DataHandlerMixedSamplingWithKzFilterSingleStation(DataHandlerMixedSamplingWithFilterSingleStation,
DataHandlerKzFilterSingleStation):
_requirements1 = DataHandlerKzFilterSingleStation.requirements()
_requirements2 = DataHandlerMixedSamplingWithFilterSingleStation.requirements()
_requirements = list(set(_requirements1 + _requirements2))
def estimate_filter_width(self):
"""
f = 0.5 / (len * sqrt(itr)) -> T = 1 / f
:return:
"""
return int(self.kz_filter_length[0] * np.sqrt(self.kz_filter_iter[0]) * 2)
def _extract_lazy(self, lazy_data):
_data, _meta, _input_data, _target_data, self.cutoff_period, self.cutoff_period_days = lazy_data
super(__class__, self)._extract_lazy((_data, _meta, _input_data, _target_data))
class DataHandlerMixedSamplingWithKzFilter(DefaultDataHandler):
"""Data handler using mixed sampling for input and target. Inputs are temporal filtered."""
data_handler = DataHandlerMixedSamplingWithFilterSingleStation
data_handler_transformation = DataHandlerMixedSamplingWithFilterSingleStation
data_handler = DataHandlerMixedSamplingWithKzFilterSingleStation
data_handler_transformation = DataHandlerMixedSamplingWithKzFilterSingleStation
_requirements = data_handler.requirements()
class DataHandlerSeparationOfScalesSingleStation(DataHandlerMixedSamplingWithFilterSingleStation):
class DataHandlerMixedSamplingWithFirFilterSingleStation(DataHandlerMixedSamplingWithFilterSingleStation,
DataHandlerFirFilterSingleStation):
_requirements1 = DataHandlerFirFilterSingleStation.requirements()
_requirements2 = DataHandlerMixedSamplingWithFilterSingleStation.requirements()
_requirements = list(set(_requirements1 + _requirements2))
def estimate_filter_width(self):
""" """
return 5 # Todo: adjust this method
def _extract_lazy(self, lazy_data):
_data, _meta, _input_data, _target_data, self.fir_coeff = lazy_data
super(__class__, self)._extract_lazy((_data, _meta, _input_data, _target_data))
class DataHandlerSeparationOfScalesSingleStation(DataHandlerMixedSamplingWithKzFilterSingleStation):
"""
Data handler using mixed sampling for input and target. Inputs are temporal filtered and depending on the
separation frequency of a filtered time series the time step delta for input data is adjusted (see image below).
@@ -181,8 +212,8 @@ class DataHandlerSeparationOfScalesSingleStation(DataHandlerMixedSamplingWithFil
"""
_requirements = DataHandlerMixedSamplingWithFilterSingleStation.requirements()
_hash = DataHandlerMixedSamplingWithFilterSingleStation._hash + ["time_delta"]
_requirements = DataHandlerMixedSamplingWithKzFilterSingleStation.requirements()
_hash = DataHandlerMixedSamplingWithKzFilterSingleStation._hash + ["time_delta"]
def __init__(self, *args, time_delta=np.sqrt, **kwargs):
assert isinstance(time_delta, Callable)
Loading