in benchmarking/data_converters/json_converter/json_converter.py [0:0]
def convert(self, data):
details = collections.defaultdict(lambda: collections.defaultdict(list))
for d in data:
if "type" in d and "metric" in d and "unit" in d:
# new format
key = d["type"] + " " + d["metric"]
if "info_string" in d:
if "info_string" in details[key]:
old_string = details[key]["info_string"]
new_string = d["info_string"]
if old_string != new_string:
getLogger().warning(
"info_string values "
"for {} ".format(key)
+ "do not match.\n"
+ "Current info_string: "
+ "{}\n ".format(old_string)
+ "does not match new "
+ "info_string: "
+ "{}".format(new_string)
)
else:
details[key]["info_string"] = d["info_string"]
if "value" in d:
details[key]["values"].append(float(d["value"]))
if "num_runs" in d:
details[key]["num_runs"] = d["num_runs"]
if "summary" in d:
details[key]["summary"] = d["summary"]
self._updateOneEntry(details[key], d, "type")
self._updateOneEntry(details[key], d, "metric")
self._updateOneEntry(details[key], d, "unit")
else:
# for backward compatibility purpose
# will remove after some time
for k, v in d.items():
if not isinstance(v, dict):
# prevent some data corruption
continue
for kk, vv in v.items():
key = k + " " + kk
if "info_string" in vv:
if "info_string" in details[key]:
assert (
details[key]["info_string"] == vv["info_string"]
), (
"info_string values for {} ".format(key)
+ "do not match.\n"
+ "Current info_string:\n{}\n ".format(
details[key]["info_string"]
)
+ "does not match new info_string:\n{}".format(
vv["info_string"]
)
)
else:
details[key]["info_string"] = vv["info_string"]
else:
details[key]["values"].append(float(vv["value"]))
details[key]["type"] = k
# although it is declared as list
details[key]["metric"] = kk
details[key]["unit"] = str(vv["unit"])
return details