|  | """Tool for generating a comparision CSV between multiple usage.json files. | 
|  |  | 
|  | utils/gather_usage.py should be used to generate usage.json in various | 
|  | configurations for comparision. | 
|  |  | 
|  | """ | 
|  | import argparse | 
|  | import json | 
|  | import os.path | 
|  |  | 
|  |  | 
|  | def main(): | 
|  | parser = argparse.ArgumentParser(description=__doc__) | 
|  |  | 
|  | parser.add_argument( | 
|  | 'usage_json', | 
|  | nargs='+', | 
|  | help="usage.json files generated from gather_usage.py" | 
|  | ) | 
|  |  | 
|  | args = parser.parse_args() | 
|  |  | 
|  | blocks = set() | 
|  | bases = set() | 
|  | targets = {} | 
|  |  | 
|  | for filename in args.usage_json: | 
|  | with open(filename) as f: | 
|  | _, x = os.path.split(filename) | 
|  | base, _ = os.path.splitext(x) | 
|  |  | 
|  | assert base not in bases, base | 
|  | bases.add(base) | 
|  |  | 
|  | j = json.load(f) | 
|  |  | 
|  | for target, usage in j.items(): | 
|  | if target not in targets: | 
|  | targets[target] = {} | 
|  | for block in usage['usage']: | 
|  | targets[target][block] = {} | 
|  |  | 
|  | for block in usage['usage']: | 
|  | blocks.add(block) | 
|  | targets[target][block][base] = usage['usage'][block] | 
|  |  | 
|  | for v in targets.values(): | 
|  | for block in blocks: | 
|  | if block not in v: | 
|  | v[block] = {} | 
|  |  | 
|  | row1 = [''] | 
|  | row2 = [''] | 
|  | for block in sorted(blocks): | 
|  | row1.append(block) | 
|  | for _ in range(len(bases) - 1): | 
|  | row1.append('') | 
|  |  | 
|  | for base in sorted(bases): | 
|  | row2.append(base) | 
|  |  | 
|  | print(','.join(row1)) | 
|  | print(','.join(row2)) | 
|  |  | 
|  | for target in sorted(targets): | 
|  | row = [target] | 
|  |  | 
|  | for block in sorted(blocks): | 
|  | counts = targets[target][block] | 
|  |  | 
|  | for base in sorted(bases): | 
|  | if base in counts: | 
|  | row.append(str(counts[base])) | 
|  | else: | 
|  | row.append('0') | 
|  |  | 
|  | print(','.join(row)) | 
|  |  | 
|  |  | 
|  | if __name__ == "__main__": | 
|  | main() |