CoolFace
Apppublic

freealise/Code-Generation-with-Language-Specific-LoRa-Models

sourceHugging Faceopenrailupdated 2y agoView on Hugging Face
0likes
error_analysis.py184 linesDownload Raw Back to root
1import os2import json3import numpy as np4import pandas as pd5import seaborn as sns6import streamlit as st7import matplotlib.pyplot as plt8sns.set(rc={'figure.figsize':(11.7,8.27)})9 10 11def init_page():12    st.title('Error Analysis')13 14def get_files_in_dir(dir_path, ext=None):15    """Returns a list of files in a directory, optionally filtered by extension.16    Args:17        dir_path (str): Path to directory.18        ext (str, optional): File extension to filter by. Defaults to None.19    Returns:20        list: List of file paths.21    """22    files = []23    for file in os.listdir(dir_path):24        if ext is None or file.endswith(ext):25            files.append(os.path.join(dir_path, file))26    return files27 28def load_json_file(file_path):29    """Loads a JSON file.30    Args:31        file_path (str): Path to JSON file.32    Returns:33        dict: JSON file contents.34    """35    with open(file_path, 'r') as f:36        return json.load(f)37 38def get_df_from_data(data):39    propmpt = data['prompt']40    language = data['language']41    temperature = data['temperature']42    top_p = data['top_p']43    max_new_tokens = data['max_new_tokens']44    stop_tokens = data['stop_tokens']45    results = data['results']46    program = []47    timestamp = []48    stdout = []49    stderr = []50    exit_code = []51    status = []52    for result in results:53        program.append(result['program'])54        timestamp.append(result['timestamp'])55        stdout.append(result['stdout'])56        stderr.append(result['stderr'])57        exit_code.append(result['exit_code'])58        status.append(result['status'])59    prompt = [propmpt] * len(program)60    language = [language] * len(program)61    temperature = [temperature] * len(program)62    top_p = [top_p] * len(program)63    max_new_tokens = [max_new_tokens] * len(program)64    stop_tokens = [stop_tokens] * len(program)65 66 67    df = pd.DataFrame({68        'prompt': propmpt,69        'language': language,70        'temperature': temperature,71        'top_p': top_p,72        'max_new_tokens': max_new_tokens,73        'stop_tokens': stop_tokens,74        'program': program,75        'timestamp': timestamp,76        'stdout': stdout,77        'stderr': stderr,78        'exit_code': exit_code,79        'status': status80    })81    return df82 83def concat_two_df(df1, df2):84    return pd.concat([df1, df2])85 86def get_df_from_files(files):87    df = pd.DataFrame()88    for file in files:89        data = load_json_file(file)90        df = concat_two_df(df, get_df_from_data(data))91    return df92 93def select_columns(df, columns):94    return df[columns]95 96def get_value_counts(df, column):97    return df[column].value_counts()98 99def get_folders_in_dir(dir_path):100    """Returns a list of folders in a directory.101    Args:102        dir_path (str): Path to directory.103    Returns:104        list: List of folder paths.105    """106    folders = []107    for folder in os.listdir(dir_path):108        if os.path.isdir(os.path.join(dir_path, folder)):109            folders.append(os.path.join(dir_path, folder))110    return folders111 112def find_strings_in_df(df, column, strings):113    """Finds rows in a dataframe that contain a string in a column.114    Args:115        df (pandas.DataFrame): Dataframe.116        column (str): Column to search.117        strings (list): List of strings to search for.118    Returns:119        pandas.DataFrame: Dataframe with rows that contain a string in a column.120    """121    return df[df[column].str.contains('|'.join(strings))]122 123def main():124    init_page()125    parent_dir = './temp'126    all_strings = [127        "error: ';' expected",128        " java.lang.AssertionError",129        " ArrayList<"130        ]131 132    folders = get_folders_in_dir(parent_dir)133    java_folders = [folder for folder in folders if 'java' in folder]134    135 136 137    dirs = st.multiselect('Select a folder', java_folders, default=java_folders)138    strings = st.multiselect('Select a string', all_strings, default=all_strings)139 140    counts_dict = {141        'folder': [],142        'string': [],143        'count': []144    }145 146    with st.spinner('Loading data...'):147 148        for dir in dirs:149            ext = '.results.json'150            files = get_files_in_dir(dir, ext)151            df = get_df_from_files(files)152            for string in strings:153                s = [string]154                string_df = find_strings_in_df(df, 'stderr', s)155                counts_dict['folder'].append(dir)156                counts_dict['string'].append(string)157                counts_dict['count'].append(len(string_df))158    159    counts_df = pd.DataFrame(counts_dict)160    #Create figure with a reasonable size161    fig, ax = plt.subplots(figsize=(8.7,5.27))162    sns.barplot(x='folder', y='count', hue='string', data=counts_df, ax=ax)163    plt.xticks(rotation=45)164    st.pyplot(fig)165    # sns.barplot(x='folder', y='count', hue='string', data=counts_df)166    # plt.xticks(rotation=45)167    # st.pyplot()168 169    170    target_dir = st.selectbox('Select a folder', dirs)171    ext = '.results.json'172    files = get_files_in_dir(target_dir, ext)173    df = get_df_from_files(files)174    target_strings = st.multiselect('Select a string', strings, key='target_strings')175    target_df = find_strings_in_df(df, 'stderr', target_strings)176    target_df = select_columns(target_df, ['program', 'stderr'])177    target_index = st.number_input('Select an index', min_value=0, max_value=len(target_df)-1, value=0, step=1)178    target_df = target_df.iloc[target_index]179    target_program = target_df['program']180    st.code(target_program, language='java')181    st.dataframe(target_df)182 183if __name__ == '__main__':184    main()