Adding a parser for parsing the output of the auto tuner
authorHamed Gorjiara <hgorjiar@uci.edu>
Thu, 27 Sep 2018 04:23:25 +0000 (21:23 -0700)
committerHamed Gorjiara <hgorjiar@uci.edu>
Thu, 27 Sep 2018 04:23:25 +0000 (21:23 -0700)
sudoku-csolver/autotunerparser.py

index 4c49cc7394c43a2e2f9655b04feb0d771b9a858b..0cb6b8dcec6d92074ea876a926ea766e08506094 100644 (file)
@@ -1,32 +1,64 @@
 import argprocessor
+import re
 
-config = {"EXECTIME": "-",
+configs = {"EXECTIME": "-",
                 "SATTIME":"-",
-                "PREPROCESS" : "ON",
-                "ELEMENTOPT" : "ON",
-                "ELEMENTOPTSETS" : "ON",
-                "PROXYVARIABLE" : "2",
-                "NODEENCODING" : "UNASSIGNED",
-                "EDGEENCODING" : "UNASSIGNED",
-                "EGRAPHFUDGEFACT" : "0.5",
-                "EGRAPHCONVERSIONFACT" : "0.5"
+                "PREPROCESS" : "-",
+                "ELEMENTOPT" : "-",
+                "ELEMENTOPTSETS" : "-",
+                "PROXYVARIABLE" : "-",
+                "#SubGraph" : "-",
+                "NODEENCODING" : "-",
+                "EDGEENCODING" : "-",
+                "NAIVEENCODER" :"-",
+                "ENCODINGGRAPHOPT" : "-"
+                }
+
+REGEXES = {"EXECTIME": "CSOLVER solve time: (.*)",
+                "SATTIME":"SAT Solving time: (.*)",
+                "PREPROCESS" : "Param PREPROCESS = (.*)range=\[0,1\]",
+                "ELEMENTOPT" : "Param ELEMENTOPT = (.*)range=\[0,1\]",
+                "ELEMENTOPTSETS" : "Param ELEMENTOPTSETS = (.*)range=\[0,1\]",
+                "PROXYVARIABLE" : "Param PROXYVARIABLE = (.*)range=\[1,5\]",
+                "#SubGraph" : "#SubGraph = (.*)",
+                "NODEENCODING" : "Param NODEENCODING = (.*)range=\[0,3\](.*)",
+                "EDGEENCODING" : "Param EDGEENCODING = (.*)range=\[0,2\](.*)",
+                "NAIVEENCODER" : "Param NAIVEENCODER = (.*)range=\[1,3\](.*)",
+                "ENCODINGGRAPHOPT" : "Param ENCODINGGRAPHOPT = (.*)range=\[0,1\]"
+                
                 }
 
 def printHeader(file):
-       file.write("""EXEC TIME, SAT TIME, PREPROCESS (on/off), ELEMENTOPT (ON/OFF), ELEMENTOPTSETS (ON/OFF),
-                       PROXYVARIABLE (1-5), NODEENCODING (BinaryIndex/Unassigned), EDGEENCODING (Match/Unmatch), FUDGEFACTOR, CONVERSIONFACTOR""")
-       file.write("""-, -, ON, ON, ON,
-                               2, UNASSIGNED, """)
+       global configs
+       mystr=""
+       for config in configs:
+                mystr+=str(config)+","
+       print >>file, mystr
+       
+def printConfig(file, data):
+       print data
+       mystr=""
+       for config in data:
+                mystr+=str(data[config])+","
+       print >> file, mystr
 
 def main():
+       global configs
        argprocess = argprocessor.AutoTunerArgParser()
        output = open("tuner.csv", "w")
        printHeader(output)
        with open(argprocess.getFileName()) as file:
                for line in file:
-                       print line
-               
-#      print argprocess.getFileName()
+                       if line.startswith("Mutating"):
+                               printConfig(output,configs)
+                       else :
+                               for regex in REGEXES:
+                                       p = re.compile(REGEXES[regex])
+                                       token = p.search(line)
+                                       if token is not None:
+                                               configs[regex] = re.findall("\d+\.?\d*", line)[0]
+               
+       print "Done with parsing " + argprocess.getFileName()
 
 if __name__ == "__main__":
        main()
\ No newline at end of file