in libraries/python/aggregate_classification_results.py [0:0]
def _aggregateOutputs(self, outputs):
results = {}
for one_output in outputs:
for key in one_output:
value = one_output[key]
if key not in results:
results[key] = value
else:
results[key]["values"].extend(value["values"])
pattern = re.compile(r"(\w+)_of_top(\d+)_corrects")
# finally patch up the summary
for res in results:
one_result = results[res]
one_result["type"] = one_result["type"]
values = one_result["values"]
match = pattern.match(one_result["metric"])
if not match:
continue
if match.group(1) == "number":
data = sum(values)
one_result["summary"] = {
"num_runs": len(values),
"p0": data,
"p10": data,
"p50": data,
"p90": data,
"p100": data,
"mean": data,
"std": 0,
"MAD": 0,
}
elif match.group(1) == "percent":
data = sum(values) * 100.0 / len(values)
one_result["summary"] = {
"num_runs": len(values),
"p0": data,
"p10": data,
"p50": data,
"p90": data,
"p100": data,
"mean": data,
"std": 0,
"MAD": 0,
}
one_result["metric"] = "total_" + one_result["metric"]
# there may be too many values, only keep the summary
if len(values) > 200:
del one_result["values"]
return results