Adding incremental to Java, C, and python APIs
[satune.git] / src / autotunerparser.py
1 import re
2 import argparse
3 import sys
4
5
6 class AutoTunerArgParser:
7     def __init__(self):
8         self.parser = argparse.ArgumentParser(description='Parsing the output log of the CSolver auto tuner ...')
9         self.parser.add_argument('--file', '-f', metavar='out.log', type=str, nargs=1,help='output log of running the autotuner ...')
10         self.args = self.parser.parse_args()
11         
12     def getFileName(self):
13         return self.args.file[0]
14        
15 configs = {"EXECTIME": "-",
16                 "SATTIME":"-",
17                 "TESTCASE":"-",
18                 "PREPROCESS" : "-",
19                 "ELEMENTOPT" : "-",
20                 "ELEMENTOPTSETS" : "-",
21                 "PROXYVARIABLE" : "-",
22                 "#SubGraph" : "-",
23                 "NODEENCODING" : "-",
24                 "EDGEENCODING" : "-",
25                 "NAIVEENCODER" :"-",
26                 "ENCODINGGRAPHOPT" : "-"
27                 }
28
29 REGEXES = {"EXECTIME": "CSOLVER solve time: (.*)",
30                 "SATTIME":"SAT Solving time: (.*)",
31                 "TESTCASE": "deserializing (.+) ...",
32                 "PREPROCESS" : "Param PREPROCESS = (.*)range=\[0,1\]",
33                 "ELEMENTOPT" : "Param ELEMENTOPT = (.*)range=\[0,1\]",
34                 "ELEMENTOPTSETS" : "Param ELEMENTOPTSETS = (.*)range=\[0,1\]",
35                 "PROXYVARIABLE" : "Param PROXYVARIABLE = (.*)range=\[1,5\]",
36                 "#SubGraph" : "#SubGraph = (.*)",
37                 "NODEENCODING" : "Param NODEENCODING = (.*)range=\[0,3\](.*)",
38                 "EDGEENCODING" : "Param EDGEENCODING = (.*)range=\[0,2\](.*)",
39                 "NAIVEENCODER" : "Param NAIVEENCODER = (.*)range=\[1,3\](.*)",
40                 "ENCODINGGRAPHOPT" : "Param ENCODINGGRAPHOPT = (.*)range=\[0,1\]"
41                 }
42
43 def printHeader(file):
44         global configs
45         mystr=""
46         for config in configs:
47                  mystr+=str(config)+","
48         print >>file, mystr
49         
50 def printConfig(file, data):
51         print data
52         mystr=""
53         for config in data:
54                  mystr+=str(data[config])+","
55         print >> file, mystr
56
57 def main():
58         global configs
59         argprocess = AutoTunerArgParser()
60         output = open("tuner.csv", "w")
61         printHeader(output)
62         with open(argprocess.getFileName()) as file:
63                 for line in file:
64                         if line.startswith("Mutating"):
65                                 printConfig(output,configs)
66                         elif line.startswith("Best tuner"):
67                                 printConfig(output,configs);
68                         else :
69                                 for regex in REGEXES:
70                                         p = re.compile(REGEXES[regex])
71                                         token = p.search(line)
72                                         if token is not None:
73                                                 if regex == "TESTCASE":
74                                                         configs[regex] = re.search(REGEXES[regex], line).group(1)
75                                                 else:
76                                                         configs[regex] = re.findall("\d+\.?\d*", line)[0]
77
78         configs["EXECTIME"] = "BEST TUNE:"
79         printConfig(output, configs)
80         print "Done with parsing " + argprocess.getFileName()
81
82 if __name__ == "__main__":
83         main()