61 lines
1.7 KiB
Python
61 lines
1.7 KiB
Python
import json
|
|
import argparse
|
|
class LineParser:
|
|
def __init__(self) -> None:
|
|
self.data = {}
|
|
|
|
def parse(self, line):
|
|
def startswith(line, lst):
|
|
for ele in lst:
|
|
if line.startswith(ele):
|
|
return True
|
|
return False
|
|
|
|
if not startswith(line, ['1', '2', '3', '4', '5', '6', '7', '8', '9']):
|
|
return
|
|
|
|
eles = line.strip().split()
|
|
key = eles[0]
|
|
if key not in self.data:
|
|
self.data[key] = []
|
|
|
|
self.data[key].append([eles[1], float(eles[2])])
|
|
|
|
def sort(self):
|
|
for k, v in self.data.items():
|
|
nv = sorted(v, key=lambda x: x[1])
|
|
self.data[k] = nv
|
|
|
|
def display_best(self):
|
|
for k, v in self.data.items():
|
|
print(f'{k} \t {v[0][0]} \t {v[0][1]:.4f} \t {v[1][0]} \t {v[1][1]:.4f}')
|
|
|
|
def display_best_python(self, output):
|
|
res = {}
|
|
def parse(spec):
|
|
d_stride = int(spec.split('/')[0])
|
|
thread = int(spec.split('/')[1].split('(')[0])
|
|
m = int(spec.split('(')[1].split(')')[0])
|
|
return d_stride, thread, m
|
|
|
|
for k, v in self.data.items():
|
|
res[k] = parse(v[0][0])
|
|
|
|
with open(output, "w") as f:
|
|
json.dump(res, f, indent=4)
|
|
|
|
if __name__ == '__main__':
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('--input', type=str)
|
|
parser.add_argument('--output', type=str)
|
|
args = parser.parse_args()
|
|
|
|
with open(args.input) as f:
|
|
lines = f.readlines()
|
|
|
|
lineparser = LineParser()
|
|
for line in lines:
|
|
lineparser.parse(line)
|
|
lineparser.sort()
|
|
lineparser.display_best()
|
|
lineparser.display_best_python(args.output) |