RMUL2025/lib/cmsis_5/CMSIS/DSP/Testing/convertToOld.py

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()