File size: 4,897 Bytes
65e4811
 
 
 
 
 
 
73cf0ca
65e4811
73cf0ca
65e4811
 
 
 
 
 
73cf0ca
65e4811
 
73cf0ca
65e4811
 
 
 
 
 
 
 
 
73cf0ca
65e4811
 
aaf0c71
65e4811
 
aaf0c71
 
 
 
 
 
 
65e4811
 
 
 
aaf0c71
 
65e4811
aaf0c71
65e4811
 
aaf0c71
b20457b
 
aaf0c71
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b20457b
 
 
aaf0c71
b20457b
6e0dbd3
b20457b
 
 
 
 
 
 
aaf0c71
 
b20457b
aaf0c71
b20457b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import pandas as pd
import gradio as gr
import plotly.graph_objects as go
import plotly.express as px
import numpy as np

type_emoji = {
    "RTL-Specific": "🔴",
    "General": "🟢",
    "Coding": "🔵"
}

def model_hyperlink(link, model_name):
    return f'<a target="_blank" href="{link}" style="color: var(--link-text-color); text-decoration: underline;text-decoration-style: dotted;">{model_name}</a>'

def handle_special_cases(benchmark, metric):
    if metric == 'Exact Matching (EM)':
        benchmark = 'RTL-Repo'
    elif benchmark == 'RTL-Repo':
        metric = 'Exact Matching (EM)'
    return benchmark, metric

def filter_RTLRepo(subset: pd.DataFrame) -> pd.DataFrame:
    details = subset[['Model', 'Model URL', 'Model Type', 'Params']].drop_duplicates('Model')
    filtered_df = subset[['Model', 'Score']].rename(columns={'Score': 'Exact Matching (EM)'})
    filtered_df = pd.merge(filtered_df, details, on='Model', how='left')
    filtered_df['Model'] = filtered_df.apply(lambda row: model_hyperlink(row["Model URL"], row["Model"]), axis=1)
    filtered_df['Type'] = filtered_df['Model Type'].map(lambda x: type_emoji.get(x, ""))
    filtered_df = filtered_df[['Type', 'Model', 'Params', 'Exact Matching (EM)']]
    filtered_df = filtered_df.sort_values(by='Exact Matching (EM)', ascending=False).reset_index(drop=True)
    return filtered_df

def filter_bench(subset: pd.DataFrame, df_agg=None, agg_column=None) -> pd.DataFrame:
    details = subset[['Model', 'Model URL', 'Model Type', 'Params']].drop_duplicates('Model')
    pivot_df = subset.pivot_table(index='Model', columns='Metric', values='Score', aggfunc='mean').reset_index()
    
    if df_agg is not None and agg_column is not None and agg_column in df_agg.columns:
        agg_data = df_agg[['Model', agg_column]].rename(columns={agg_column: 'Aggregated ⬆️'})
        pivot_df = pd.merge(pivot_df, agg_data, on='Model', how='left')
    else:# fallback
        pivot_df['Aggregated ⬆️'] = pivot_df.mean(axis=1, numeric_only=True).round(2)
    
    pivot_df = pd.merge(pivot_df, details, on='Model', how='left')
    pivot_df['Model'] = pivot_df.apply(lambda row: model_hyperlink(row["Model URL"], row["Model"]), axis=1)
    pivot_df['Type'] = pivot_df['Model Type'].map(lambda x: type_emoji.get(x, ""))
    pivot_df.rename(columns={'Syntax (STX)': 'STX', 'Functionality (FNC)': 'FNC', 'Synthesis (SYN)': 'SYN', 'Performance': 'Perf'}, inplace=True)
    
    columns_order = ['Type', 'Model', 'Params', 'Aggregated ⬆️', 'STX', 'FNC', 'SYN', 'Power', 'Perf', 'Area']
    pivot_df = pivot_df[[col for col in columns_order if col in pivot_df.columns]]
    pivot_df = pivot_df.sort_values(by='Aggregated ⬆️', ascending=False).reset_index(drop=True)
    return pivot_df

def filter_bench_all(subset: pd.DataFrame, df_agg=None, agg_column=None) -> pd.DataFrame:
    details = subset[['Model', 'Model URL', 'Model Type', 'Params']].drop_duplicates('Model')
    pivot_df = subset.pivot_table(index='Model', columns='Metric', values='Score', aggfunc='mean').reset_index().round(2)
    
    if df_agg is not None:
        if agg_column is not None and agg_column in df_agg.columns:
            agg_data = df_agg[['Model', agg_column]].rename(columns={agg_column: 'Aggregated ⬆️'})
            pivot_df = pd.merge(pivot_df, agg_data, on='Model', how='left')
        else:
            agg_columns = [col for col in df_agg.columns if col.startswith('Agg ')]
            if agg_columns:
                df_agg['Average_Agg'] = df_agg[agg_columns].mean(axis=1)
                agg_data = df_agg[['Model', 'Average_Agg']].rename(columns={'Average_Agg': 'Aggregated ⬆️'})
                pivot_df = pd.merge(pivot_df, agg_data, on='Model', how='left')
            else: # fallback
                pivot_df['Aggregated ⬆️'] = pivot_df.mean(axis=1, numeric_only=True).round(2)
    else: # fallback
        pivot_df['Aggregated ⬆️'] = pivot_df.mean(axis=1, numeric_only=True).round(2)
    
    pivot_df = pd.merge(pivot_df, details, on='Model', how='left')
    pivot_df['Model'] = pivot_df.apply(lambda row: model_hyperlink(row["Model URL"], row["Model"]), axis=1)
    pivot_df['Type'] = pivot_df['Model Type'].map(lambda x: type_emoji.get(x, ""))
    
    pivot_df.rename(columns={
        'Exact Matching (EM)': 'EM', 
        'Syntax (STX)': 'Avg STX', 
        'Functionality (FNC)': 'Avg FNC', 
        'Synthesis (SYN)': 'Avg SYN', 
        'Power': 'Avg Power',
        'Performance': 'Avg Perf',
        'Area': 'Avg Area',
    }, inplace=True)
    
    columns_order = ['Type', 'Model', 'Params', 'Aggregated ⬆️', 'Avg STX', 'Avg FNC', 'Avg SYN', 'Avg Power', 'Avg Perf', 'Avg Area']
    pivot_df = pivot_df[[col for col in columns_order if col in pivot_df.columns]]
    pivot_df = pivot_df.sort_values(by='Aggregated ⬆️', ascending=False).reset_index(drop=True)
    return pivot_df