"""Print a summary of specialization stats for all files in the default stats folders. """ import collections import os.path if os.name == "nt": DEFAULT_DIR = "c:\\temp\\py_stats\\" else: DEFAULT_DIR = "/tmp/py_stats/" TOTAL = "deferred", "hit", "miss", "unquickened" def print_stats(name, family_stats): total = sum(family_stats[kind] for kind in TOTAL) if total == 0: return print(name+":") for key in sorted(family_stats): if not key.startswith("specialization"): print(f"{key:>12}:{family_stats[key]:>12} {100*family_stats[key]/total:0.1f}%") for key in ("specialization_success", "specialization_failure"): print(f" {key}:{family_stats[key]:>12}") total_failures = family_stats["specialization_failure"] failure_kinds = [ 0 ] * 20 for key in family_stats: if not key.startswith("specialization_failure_kind"): continue _, index = key[:-1].split("[") index = int(index) failure_kinds[index] = family_stats[key] for index, value in enumerate(failure_kinds): if not value: continue print(f" kind {index:>2}: {value:>8} {100*value/total_failures:0.1f}%") def main(): stats = collections.defaultdict(collections.Counter) for filename in os.listdir(DEFAULT_DIR): for line in open(os.path.join(DEFAULT_DIR, filename)): key, value = line.split(":") key = key.strip() family, stat = key.split(".") value = int(value.strip()) stats[family][stat] += value for name in sorted(stats): print_stats(name, stats[name]) if __name__ == "__main__": main()