112 lines
3.1 KiB
Python
Executable File
112 lines
3.1 KiB
Python
Executable File
# 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
|
|
|
|
result = []
|
|
commonParams = []
|
|
|
|
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(str(b))
|
|
return("%s * %s" % (a,b))
|
|
|
|
def convert(elem,fullPath):
|
|
global commonParams
|
|
global result
|
|
regressionPath=os.path.join(os.path.dirname(fullPath),"regression.csv")
|
|
full=pd.read_csv(fullPath,dtype={'OLDID': str} ,keep_default_na = False)
|
|
reg=pd.read_csv(regressionPath,dtype={'OLDID': str} ,keep_default_na = False)
|
|
commonParams = list(joinit(elem.params.full,","))
|
|
header = ["OLDID"] + commonParams + ["CYCLES"]
|
|
|
|
r=full[header].rename(columns = {"OLDID":"TESTNB"})
|
|
r["TESTNB"] = pd.to_numeric(r["TESTNB"])
|
|
r["PASSED"]=1
|
|
result.append(r)
|
|
|
|
|
|
def extractBenchmarks(benchmark,elem):
|
|
if not elem.data["deprecated"]:
|
|
if elem.params:
|
|
benchPath = os.path.join(benchmark,elem.fullPath(),"fullBenchmark.csv")
|
|
print("Processing %s" % benchPath)
|
|
convert(elem,benchPath)
|
|
|
|
for c in elem.children:
|
|
extractBenchmarks(benchmark,c)
|
|
|
|
|
|
|
|
parser = argparse.ArgumentParser(description='Generate summary benchmarks')
|
|
|
|
parser.add_argument('-f', nargs='?',type = str, default="Output.pickle", help="Test description file path")
|
|
parser.add_argument('-b', nargs='?',type = str, default="FullBenchmark", help="Full Benchmark dir path")
|
|
parser.add_argument('-e', action='store_true', help="Embedded test")
|
|
parser.add_argument('-o', nargs='?',type = str, default="bench.csv", help="Output csv file using old format")
|
|
|
|
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)
|
|
extractBenchmarks(args.b,root)
|
|
finalResult = pd.concat(result)
|
|
cols = ['TESTNB'] + commonParams
|
|
finalResult=finalResult.sort_values(by=cols)
|
|
finalResult.to_csv(args.o,index=False,quoting=csv.QUOTE_NONNUMERIC)
|
|
|
|
else:
|
|
parser.print_help() |