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'{model_name}' 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) # filtered_df.insert(0, '', range(1, len(filtered_df) + 1)) return filtered_df def filter_bench(subset: pd.DataFrame) -> 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() pivot_df['Average ⬆️'] = 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', 'Average ⬆️', '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='Average ⬆️', ascending=False).reset_index(drop=True) # pivot_df.insert(0, '', range(1, len(pivot_df) + 1)) return pivot_df def filter_bench_all(subset: pd.DataFrame) -> 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) pivot_df['Average ⬆️'] = 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', 'Average ⬆️', 'Avg STX', 'Avg FNC', 'Avg SYN', 'Avg Power', 'Avg Perf', 'Avg Area'] columns_order = ['Type', 'Model', 'Params', 'Average ⬆️', 'Avg EM', '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='Average ⬆️', ascending=False).reset_index(drop=True) # pivot_df.insert(0, '', range(1, len(pivot_df) + 1)) return pivot_df