7 class AutoTunerArgParser:
9 self.parser = argparse.ArgumentParser(description='Parsing the output log of the CSolver auto tuner ...')
10 self.parser.add_argument('--folder', '-f', metavar='bin', type=str, nargs=1,help='output log of running the autotuner ...')
11 self.parser.add_argument('--number', '-n', metavar='122', type=int, nargs=1,help='Number of runs ...')
12 self.args = self.parser.parse_args()
15 return self.args.folder[0]
17 def getRunNumber(self):
18 return self.args.number[0]
20 TUNABLEHEADER = ["DECOMPOSEORDER", "MUSTREACHGLOBAL", "MUSTREACHLOCAL", "MUSTREACHPRUNE", "OPTIMIZEORDERSTRUCTURE",
21 "ORDERINTEGERENCODING", "PREPROCESS", "NODEENCODING", "EDGEENCODING", "MUSTEDGEPRUNE", "ELEMENTOPT",
22 "ENCODINGGRAPHOPT", "ELEMENTOPTSETS", "PROXYVARIABLE", "MUSTVALUE", "NAIVEENCODER", "VARIABLEORDER",
23 "PROBLEM","SATTIME", "EXECTIME"]
25 configs = {"EXECTIME": "-",
30 "ELEMENTOPTSETS" : "-",
31 "PROXYVARIABLE" : "-",
36 "ENCODINGGRAPHOPT" : "-"
39 REGEXES = {"EXECTIME": "CSOLVER solve time: (.*)",
40 "SATTIME":"SAT Solving time: (.*)",
41 "TESTCASE": "deserializing (.+) ...",
42 "PREPROCESS" : "Param PREPROCESS = (.*)range=\[0,1\]",
43 "ELEMENTOPT" : "Param ELEMENTOPT = (.*)range=\[0,1\]",
44 "ELEMENTOPTSETS" : "Param ELEMENTOPTSETS = (.*)range=\[0,1\]",
45 "PROXYVARIABLE" : "Param PROXYVARIABLE = (.*)range=\[1,5\]",
46 "#SubGraph" : "#SubGraph = (.*)",
47 "NODEENCODING" : "Param NODEENCODING = (.*)range=\[0,3\](.*)",
48 "EDGEENCODING" : "Param EDGEENCODING = (.*)range=\[0,2\](.*)",
49 "NAIVEENCODER" : "Param NAIVEENCODER = (.*)range=\[1,3\](.*)",
50 "ENCODINGGRAPHOPT" : "Param ENCODINGGRAPHOPT = (.*)range=\[0,1\]"
53 def printHeader(file):
56 for header in TUNABLEHEADER:
57 mystr+=str(header)+","
63 for i in range(len(TUNABLEHEADER)):
64 mystr += row[TUNABLEHEADER[i]]+ ","
65 print "mystr is:"+ mystr
68 def loadTunerInfo(row, filename):
69 with open(filename) as f:
71 numbers = re.findall('\d+',line)
72 numbers = map(int,numbers)
73 row[TUNABLEHEADER[numbers[3]]] = row[TUNABLEHEADER[numbers[3]]] + str(numbers[7])
75 def loadSolverTime(row, filename):
78 with open(filename) as f:
81 p = re.compile(REGEXES[regex])
82 token = p.search(line)
84 if regex == "TESTCASE":
85 configs[regex] = re.search(REGEXES[regex], line).group(1)
87 configs[regex] = re.findall("\d+\.?\d*", line)[0]
88 row["SATTIME"] = configs["SATTIME"]
89 row["EXECTIME"] = configs["EXECTIME"]
91 def loadProblemName(row,filename):
92 with open(filename) as f:
93 row["PROBLEM"] = f.readline().replace("\n","")
97 argprocess = AutoTunerArgParser()
98 file = open("tuner.csv", "w")
100 for i in range(argprocess.getRunNumber()):
101 row = {"DECOMPOSEORDER" : "",
102 "MUSTREACHGLOBAL" : "",
103 "MUSTREACHLOCAL" : "",
104 "MUSTREACHPRUNE" : "",
105 "OPTIMIZEORDERSTRUCTURE" : "",
106 "ORDERINTEGERENCODING" : "",
110 "MUSTEDGEPRUNE" : "",
112 "ENCODINGGRAPHOPT" : "",
113 "ELEMENTOPTSETS" : "",
114 "PROXYVARIABLE" : "",
117 "VARIABLEORDER" : "",
122 loadTunerInfo(row, argprocess.getFolder()+"/tuner"+str(i)+"used")
123 loadSolverTime(row, argprocess.getFolder()+"/log"+str(i))
124 loadProblemName(row, argprocess.getFolder()+"/problem"+str(i))
129 if __name__ == "__main__":