def convert()

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