Adding a parser for parsing the output of the auto tuner
[Benchmarks_CSolver.git] / sudoku-csolver / autotunerparser.py
1 import argprocessor
2 import re
3
4 configs = {"EXECTIME": "-",
5                  "SATTIME":"-",
6                  "PREPROCESS" : "-",
7                  "ELEMENTOPT" : "-",
8                  "ELEMENTOPTSETS" : "-",
9                  "PROXYVARIABLE" : "-",
10                  "#SubGraph" : "-",
11                  "NODEENCODING" : "-",
12                  "EDGEENCODING" : "-",
13                  "NAIVEENCODER" :"-",
14                  "ENCODINGGRAPHOPT" : "-"
15                  }
16
17 REGEXES = {"EXECTIME": "CSOLVER solve time: (.*)",
18                  "SATTIME":"SAT Solving time: (.*)",
19                  "PREPROCESS" : "Param PREPROCESS = (.*)range=\[0,1\]",
20                  "ELEMENTOPT" : "Param ELEMENTOPT = (.*)range=\[0,1\]",
21                  "ELEMENTOPTSETS" : "Param ELEMENTOPTSETS = (.*)range=\[0,1\]",
22                  "PROXYVARIABLE" : "Param PROXYVARIABLE = (.*)range=\[1,5\]",
23                  "#SubGraph" : "#SubGraph = (.*)",
24                  "NODEENCODING" : "Param NODEENCODING = (.*)range=\[0,3\](.*)",
25                  "EDGEENCODING" : "Param EDGEENCODING = (.*)range=\[0,2\](.*)",
26                  "NAIVEENCODER" : "Param NAIVEENCODER = (.*)range=\[1,3\](.*)",
27                  "ENCODINGGRAPHOPT" : "Param ENCODINGGRAPHOPT = (.*)range=\[0,1\]"
28                  
29                  }
30
31 def printHeader(file):
32         global configs
33         mystr=""
34         for config in configs:
35                  mystr+=str(config)+","
36         print >>file, mystr
37         
38 def printConfig(file, data):
39         print data
40         mystr=""
41         for config in data:
42                  mystr+=str(data[config])+","
43         print >> file, mystr
44
45 def main():
46         global configs
47         argprocess = argprocessor.AutoTunerArgParser()
48         output = open("tuner.csv", "w")
49         printHeader(output)
50         with open(argprocess.getFileName()) as file:
51                 for line in file:
52                         if line.startswith("Mutating"):
53                                 printConfig(output,configs)
54                         else :
55                                 for regex in REGEXES:
56                                         p = re.compile(REGEXES[regex])
57                                         token = p.search(line)
58                                         if token is not None:
59                                                 configs[regex] = re.findall("\d+\.?\d*", line)[0]
60                 
61         print "Done with parsing " + argprocess.getFileName()
62
63 if __name__ == "__main__":
64         main()