Commit 1013616b authored by TYAGIRIS's avatar TYAGIRIS
Browse files

add initial version of pytest parsing script to get MLD stats

parent 885d16e8
Loading
Loading
Loading
Loading

parse_pytest_json2.py

0 → 100644
+97 −0
Original line number Diff line number Diff line
import argparse
from pathlib import Path
import os
import uuid
import requests
import pandas as pd
from glob import glob
import subprocess
import re
import platform
import numpy as np
import shutil
import matplotlib.pyplot as pplt
import json
import math

def parse_pytest_json(filename):

    mld_thresh = 1.0
    ssnr_thresh = 50.0

    num_tests = 0
    mld_bel_th = 0
    ssnr_above_th = 0
    all_mld = np.empty(0)
    all_ssnr = np.empty(0)

    with open(filename) as jd:
        data = json.load(jd)
        df = pd.DataFrame(data['tests'])
        #breakpoint()
        df1 = pd.DataFrame(df['user_properties'])
        dt = df1['user_properties']
        for i in range(0, len(dt)):
            ent = dt[i]
            if isinstance(ent, float) == False:
                for i in range(0, len(ent)):
                    val = ent[i]
                    if 'MLD' in val:
                        num_tests = num_tests + 1
                        mld = val['MLD']
                        all_mld = np.append(all_mld, float(mld))
                    if 'MIN_SSNR' in val:
                        ssnr = val['MIN_SSNR']                  
                        if ssnr != 'inf' and ssnr != 'nan':
                            all_ssnr = np.append(all_ssnr, float(ssnr))
                        else:
                            ssnr_above_th = ssnr_above_th + 1
                            all_ssnr = np.append(all_ssnr, 1000.0)
    

    print('MAX MLD is ', str(np.max(all_mld)))        
    print('MIN SSNR is ', str(np.min(all_ssnr))) 
    
    ##  print MLD stats
    mld_th = np.array([1.0, 2.0, 3.0, 4.0, 5.0])
    mld_hist = np.empty(0)    
    for i in range(0, mld_th.size):
       all_mld_1 = all_mld[all_mld < mld_th[i]]
       mld_hist = np.append(mld_hist, all_mld_1.size)

    mld_perc = 100*mld_hist/num_tests
    print(mld_hist)
    print(mld_perc)
    
    ##  print SSNR stats
    ssnr_th = np.array([50.0, 55.0, 60.0, 65.0, 70.0])
    ssnr_hist = np.empty(0)    
    for i in range(0, ssnr_th.size):
       all_ssnr_1 = all_ssnr[all_ssnr > ssnr_th[i]]
       ssnr_hist = np.append(ssnr_hist, all_ssnr_1.size)

    ssnr_perc = 100*ssnr_hist/num_tests
    print(ssnr_hist)
    print(ssnr_perc)    
    
    # Save to CSV
    filename2 = os.path.basename(filename)
    idx2 = filename2.find('.json');
    csv_file = filename2[:idx2] + '_mld_stats' + '.csv';  
    mld_perc = np.append(mld_perc, np.max(all_mld))
    np.savetxt(csv_file, mld_perc.T, delimiter=",", fmt="%f", header=', '.join(map(str, mld_th)), comments="")

    csv_file = filename2[:idx2] + '_ssnr_stats' + '.csv'; 
    ssnr_perc = np.append(ssnr_perc, np.max(np.min(all_ssnr)))
    np.savetxt(csv_file, ssnr_perc.T, delimiter=",", fmt="%f", header=', '.join(map(str, ssnr_th)), comments="")    


if __name__ == "__main__":
    parser = argparse.ArgumentParser("Parse pytests json script")
    parser.add_argument("--filename", type=Path, required=True, help=".json file with pytest output. ")
 
    args = parser.parse_args()
    filename:Path = args.filename
    parse_pytest_json(args.filename)