| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- # Process the test results
- # Test status (like passed, or failed with error code)
- import argparse
- import re
- import TestScripts.NewParser as parse
- import TestScripts.CodeGen
- from collections import deque
- import os.path
- import numpy as np
- import pandas as pd
- import statsmodels.api as sm
- import statsmodels.formula.api as smf
- import csv
- import TestScripts.Deprecate as d
- def findItem(root,path):
- """ Find a node in a tree
-
- Args:
- path (list) : A list of node ID
- This list is describing a path in the tree.
- By starting from the root and following this path,
- we can find the node in the tree.
- Raises:
- Nothing
- Returns:
- TreeItem : A node
- """
- # The list is converted into a queue.
- q = deque(path)
- q.popleft()
- c = root
- while q:
- n = q.popleft()
- # We get the children based on its ID and continue
- c = c[n-1]
- return(c)
- NORMAL = 1
- INTEST = 2
- TESTPARAM = 3
- def joinit(iterable, delimiter):
- it = iter(iterable)
- yield next(it)
- for x in it:
- yield delimiter
- yield x
- def formatProd(a,b):
- if a == "Intercept":
- return("%.3f" % b)
- return("%s * %.3f" % (a,b))
- def log2(x):
- return(np.log2(x))
- def log(x):
- return(np.log(x))
- def summaryBenchmark(resultPath,elem,path):
- regressionPath=os.path.join(os.path.dirname(path),"regression.csv")
- if os.path.isfile(path):
- print(" Generating %s" % regressionPath)
- full=pd.read_csv(path,dtype={'OLDID': str} ,keep_default_na = False)
- #print(full)
-
- csvheaders = []
- with open(os.path.join(resultPath,'currentConfig.csv'), 'r') as f:
- reader = csv.reader(f)
- csvheaders = next(reader, None)
-
- groupList = list(set(elem.params.full) - set(elem.params.summary))
- #grouped=full.groupby(list(elem.params.summary) + ['ID','CATEGORY']).max()
- #grouped.reset_index(level=grouped.index.names, inplace=True)
- #print(grouped)
- #print(grouped.columns)
-
- def reg(d):
- m=d["CYCLES"].max()
- #print( elem.params.formula)
-
- results = smf.ols('CYCLES ~ ' + elem.params.formula, data=d).fit()
- f=joinit([formatProd(a,b) for (a,b) in zip(results.params.index,results.params.values)]," + ")
- f="".join(f)
- f = re.sub(r':','*',f)
- #print(results.summary())
- return(pd.Series({'Regression':"%s" % f,'MAX' : m,'MAXREGCOEF' : results.params.values[-1]}))
-
- regList = ['ID','OLDID','CATEGORY','TESTNAME','NAME'] + csvheaders + groupList
-
- regression=full.groupby(regList).apply(reg)
- regression.reset_index(level=regression.index.names, inplace=True)
- renamingDict = { a : b for (a,b) in zip(elem.params.full,elem.params.paramNames)}
- regression = regression.rename(columns=renamingDict)
- regression.to_csv(regressionPath,index=False,quoting=csv.QUOTE_NONNUMERIC)
- def extractBenchmarks(resultPath,benchmark,elem):
- if not elem.data["deprecated"]:
- if elem.params:
- benchPath = os.path.join(benchmark,elem.fullPath(),"fullBenchmark.csv")
- print("Processing %s" % benchPath)
- summaryBenchmark(resultPath,elem,benchPath)
-
- for c in elem.children:
- extractBenchmarks(resultPath,benchmark,c)
- parser = argparse.ArgumentParser(description='Generate summary benchmarks')
- parser.add_argument('-f', nargs='?',type = str, default="Output.pickle", help="Test description cache")
- parser.add_argument('-b', nargs='?',type = str, default="FullBenchmark", help="Full Benchmark dir path")
- # Needed to find the currentConfig.csv and know the headers
- parser.add_argument('-r', nargs='?',type = str, default=None, help="Result file path")
- parser.add_argument('others', nargs=argparse.REMAINDER)
- args = parser.parse_args()
- if args.f is not None:
- #p = parse.Parser()
- # Parse the test description file
- #root = p.parse(args.f)
- root=parse.loadRoot(args.f)
- d.deprecate(root,args.others)
- resultPath=os.path.dirname(args.r)
- extractBenchmarks(resultPath,args.b,root)
-
- else:
- parser.print_help()
|