SyPet end-to-end evaluation
[Benchmarks_CSolver.git] / sypet-non-incremental / endtoendeval / endtoend.py
diff --git a/sypet-non-incremental/endtoendeval/endtoend.py b/sypet-non-incremental/endtoendeval/endtoend.py
new file mode 100644 (file)
index 0000000..e775b89
--- /dev/null
@@ -0,0 +1,74 @@
+import os
+import sys
+import random
+import re
+
+import os
+
+path = './output/'
+def getFilesList():
+       files = []
+       for r, d, f in os.walk(path):
+               for file in f:
+                       if '.log' in file:
+                               files.append(os.path.join(r, file))
+       return files
+
+def analyzeExecution():
+       endtoend = [0, 0, 0, 0]
+       serial = [0, 0, 0, 0]
+       solver = [0, 0, 0, 0]
+       petri = [0, 0, 0, 0]
+       testcases = ['math', 'geometry', 'joda', 'xml']
+       index = 100;
+       counter = 0;
+       for myfile in getFilesList():
+               print(myfile)
+               for i, bench in enumerate(testcases):
+                       if bench in myfile:
+                               index = i;
+                               break;
+               with open(myfile, "r") as f:
+                       line = f.readline()
+                       crashed = True;
+                       while line:
+                               if 'Original Encoding Solving Time' in line:
+                                       time =re.findall("\d+\.\d+", line)
+                                       solver[index] = solver[index] + float(time[0]);
+                                       if float(time[0]) > 10:
+                                               print(line);
+                               elif 'Satune Serialization Time' in line:
+                                       time =re.findall("\d+\.\d+", line);
+                                       serial[index] = serial[index] + float(time[0]);
+                               elif 'ENDTOEND TIME' in line:
+                                       crashed = False;
+                                       time =re.findall("\d+\.\d+", line);
+                                       if not time:
+                                               time = re.findall("\d+", line);
+                                       endtoend[index] = endtoend[index] + float(time[0]);
+                               elif 'Path Solving Time' in line:
+                                       time =re.findall("\d+\.\d+", line);
+                                       if float(time[0]) > 5000:
+                                               print(line);
+                                       petri[index] = petri[index] + float(time[0]);
+                                       counter += 1;
+
+                               line = f.readline()
+               if crashed:
+                       endtoend[index] += 600000;
+
+       for i, testcase in enumerate(testcases):
+               print(testcase);
+               print('End-to-End time (s): ' + str(endtoend[i]/1000));
+               print('Baseline Solver time (s): ' + str(solver[i]/1000));
+               print('Satune Serialization time (s): ' + str(serial[i]/1000));
+               print('Petri time (s) : ' + str(petri[i]/1000) );
+       
+       print("Counter: " + str(counter));
+
+def main():
+       analyzeExecution()
+
+if __name__ == "__main__":
+    main()
+