Source code for kgcnn.metrics.utils

import logging


[docs]def merge_metrics(m1, m2): """Merge two metric lists or dicts of `ks.metrics` objects.""" if m1 is None: return m2 if m2 is None: return m1 # Dict case with multiple named outputs. if isinstance(m1, dict) and isinstance(m2, dict): keys = set(list(m1.keys()) + list(m2.keys())) m = {key: [] for key in keys} for mu in [m1, m2]: for key, value in mu.items(): if value is not None: m[key] = m[key] + (list(value) if isinstance(value, (list, tuple)) else [value]) return m # Lists for single model output. m1 = [m1] if not isinstance(m1, (list, tuple)) else m1 m2 = [m2] if not isinstance(m2, (list, tuple)) else m2 if all([not isinstance(x1, (list, tuple)) for x1 in m1] + [not isinstance(x2, (list, tuple)) for x2 in m2]): return m1 + m2 # List for multiple model output with nested lists. if len(m1) == len(m2): m = [[]] * len(m1) for i in range(len(m)): for mu in [m1, m2]: if mu[i] is not None: m[i] = m[i] + (list(mu[i]) if isinstance(mu[i], (list, tuple)) else [mu[i]]) return m else: logging.error("For multiple model outputs require same length of metrics list to merge.") logging.error("Can not merge metrics '%s' and '%s'." % (m1, m2)) return None