diff options
author | Daniel Friesel <daniel.friesel@uos.de> | 2021-03-08 14:20:42 +0100 |
---|---|---|
committer | Daniel Friesel <daniel.friesel@uos.de> | 2021-03-08 14:20:42 +0100 |
commit | 4f763f85e9f572b56e3465ccd47641c71cdb8bbf (patch) | |
tree | afe598fa0c21876047ef4d3517d1835084b48763 /lib | |
parent | 3865ca8f08181fa18d14aa924a0a1388cd5f54ee (diff) |
add dataref export
Diffstat (limited to 'lib')
-rw-r--r-- | lib/loader.py | 10 | ||||
-rw-r--r-- | lib/model.py | 42 | ||||
-rw-r--r-- | lib/parameters.py | 4 |
3 files changed, 56 insertions, 0 deletions
diff --git a/lib/loader.py b/lib/loader.py index c0aa105..f5c6306 100644 --- a/lib/loader.py +++ b/lib/loader.py @@ -372,6 +372,16 @@ class RawData: } json.dump(cache_data, f) + def to_dref(self) -> dict: + return { + "raw measurements/valid": self.preprocessing_stats["num_valid"], + "raw measurements/total": self.preprocessing_stats["num_runs"], + "static state duration/mean": ( + np.mean(list(map(lambda x: x["state_duration"], self.setup_by_fileno))), + r"\milli\second", + ), + } + def _state_is_too_short(self, online, offline, state_duration, next_transition): # We cannot control when an interrupt causes a state to be left if next_transition["plan"]["level"] == "epilogue": diff --git a/lib/model.py b/lib/model.py index 527a19e..85cda71 100644 --- a/lib/model.py +++ b/lib/model.py @@ -311,6 +311,48 @@ class AnalyticModel: return {"by_name": detailed_results} + def to_dref(self, static_quality, lut_quality, model_quality) -> dict: + ret = dict() + for name in self.names: + for attr_name, attr in self.attr_by_name[name].items(): + e_static = static_quality["by_name"][name][attr_name] + e_lut = lut_quality["by_name"][name][attr_name] + e_model = model_quality["by_name"][name][attr_name] + unit = None + if "power" in attr.attr: + unit = r"\micro\watt" + elif "energy" in attr.attr: + unit = r"\pico\joule" + elif attr.attr == "duration": + unit = r"\micro\second" + for k, v in attr.to_dref(unit).items(): + ret[f"data/{name}/{attr_name}/{k}"] = v + ret[f"error/static/{name}/{attr_name}/mae"] = (e_static["mae"], unit) + ret[f"error/lut/{name}/{attr_name}/mae"] = (e_lut["mae"], unit) + ret[f"error/model/{name}/{attr_name}/mae"] = (e_model["mae"], unit) + ret[f"error/static/{name}/{attr_name}/smape"] = ( + e_static["smape"], + r"\percent", + ) + ret[f"error/lut/{name}/{attr_name}/smape"] = ( + e_lut["smape"], + r"\percent", + ) + ret[f"error/model/{name}/{attr_name}/smape"] = ( + e_model["smape"], + r"\percent", + ) + ret[f"error/static/{name}/{attr_name}/mape"] = ( + e_static["mape"], + r"\percent", + ) + ret[f"error/lut/{name}/{attr_name}/mape"] = (e_lut["mape"], r"\percent") + ret[f"error/model/{name}/{attr_name}/mape"] = ( + e_model["mape"], + r"\percent", + ) + return ret + def to_json(self) -> dict: """ Return JSON encoding of this AnalyticModel. diff --git a/lib/parameters.py b/lib/parameters.py index 5fd44c3..ac67c2a 100644 --- a/lib/parameters.py +++ b/lib/parameters.py @@ -616,6 +616,10 @@ class ModelAttribute: } return ret + def to_dref(self, unit=None): + ret = {"mean": (self.mean, unit), "median": (self.median, unit)} + return ret + @staticmethod def from_json(cls, name, attr, data): param_names = data["paramNames"] |