blob: e4fa42364323eac1e639a3b6170080616d8c86e4 [file] [log] [blame]
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +02001# Process the test results
2# Test status (like passed, or failed with error code)
3
4import argparse
5import re
6import TestScripts.NewParser as parse
7import TestScripts.CodeGen
8from collections import deque
9import os.path
10import numpy as np
11import pandas as pd
12import statsmodels.api as sm
13import statsmodels.formula.api as smf
14import csv
Christophe Favergeon37b86222019-07-17 11:49:00 +020015import TestScripts.Deprecate as d
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +020016
17def findItem(root,path):
18 """ Find a node in a tree
19
20 Args:
21 path (list) : A list of node ID
22 This list is describing a path in the tree.
23 By starting from the root and following this path,
24 we can find the node in the tree.
25 Raises:
26 Nothing
27 Returns:
28 TreeItem : A node
29 """
30 # The list is converted into a queue.
31 q = deque(path)
32 q.popleft()
33 c = root
34 while q:
35 n = q.popleft()
36 # We get the children based on its ID and continue
37 c = c[n-1]
38 return(c)
39
40
41
42NORMAL = 1
43INTEST = 2
44TESTPARAM = 3
45
46def joinit(iterable, delimiter):
47 it = iter(iterable)
48 yield next(it)
49 for x in it:
50 yield delimiter
51 yield x
52
53def formatProd(a,b):
54 if a == "Intercept":
55 return(str(b))
56 return("%s * %s" % (a,b))
57
58def summaryBenchmark(elem,path):
59 regressionPath=os.path.join(os.path.dirname(path),"regression.csv")
Christophe Favergeon37b86222019-07-17 11:49:00 +020060 print(" Generating %s" % regressionPath)
61 full=pd.read_csv(path,dtype={'OLDID': str} ,keep_default_na = False)
62 #print(full)
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +020063
64 csvheaders = []
65 with open('currentConfig.csv', 'r') as f:
66 reader = csv.reader(f)
67 csvheaders = next(reader, None)
68
69 groupList = list(set(elem.params.full) - set(elem.params.summary))
70 #grouped=full.groupby(list(elem.params.summary) + ['ID','CATEGORY']).max()
71 #grouped.reset_index(level=grouped.index.names, inplace=True)
72 #print(grouped)
73 #print(grouped.columns)
74
75
76 def reg(d):
77 m=d["CYCLES"].max()
78 results = smf.ols('CYCLES ~ ' + elem.params.formula, data=d).fit()
79 f=joinit([formatProd(a,b) for (a,b) in zip(results.params.index,results.params.values)]," + ")
80 f="".join(f)
81 f = re.sub(r':','*',f)
82 #print(results.summary())
83 return(pd.Series({'Regression':"%s" % f,'MAX' : m}))
84
Christophe Favergeon37b86222019-07-17 11:49:00 +020085 regList = ['ID','OLDID','CATEGORY','NAME'] + csvheaders + groupList
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +020086
87 regression=full.groupby(regList).apply(reg)
88 regression.reset_index(level=regression.index.names, inplace=True)
89 renamingDict = { a : b for (a,b) in zip(elem.params.full,elem.params.paramNames)}
90 regression = regression.rename(columns=renamingDict)
91 regression.to_csv(regressionPath,index=False,quoting=csv.QUOTE_NONNUMERIC)
92
93
Christophe Favergeon37b86222019-07-17 11:49:00 +020094def extractBenchmarks(benchmark,elem):
95 if not elem.data["deprecated"]:
96 if elem.params:
97 benchPath = os.path.join(benchmark,elem.fullPath(),"fullBenchmark.csv")
98 print("Processing %s" % benchPath)
99 summaryBenchmark(elem,benchPath)
100
101 for c in elem.children:
102 extractBenchmarks(benchmark,c)
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +0200103
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +0200104
105
106parser = argparse.ArgumentParser(description='Generate summary benchmarks')
107
108parser.add_argument('-f', nargs='?',type = str, default=None, help="Test description file path")
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +0200109parser.add_argument('-b', nargs='?',type = str, default="FullBenchmark", help="Full Benchmark dir path")
110parser.add_argument('-e', action='store_true', help="Embedded test")
111
Christophe Favergeon37b86222019-07-17 11:49:00 +0200112parser.add_argument('others', nargs=argparse.REMAINDER)
113
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +0200114args = parser.parse_args()
115
116if args.f is not None:
117 p = parse.Parser()
118 # Parse the test description file
119 root = p.parse(args.f)
Christophe Favergeon37b86222019-07-17 11:49:00 +0200120 d.deprecate(root,args.others)
121 extractBenchmarks(args.b,root)
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +0200122
123else:
124 parser.print_help()