Spaces:
Sleeping
Sleeping
| import pandas as pd | |
| import gradio as gr | |
| import matplotlib.pyplot as plt | |
| # Load CSV once at startup | |
| CSV_PATH = "collated_results.csv" # Place your CSV file here | |
| df = pd.read_csv(CSV_PATH).reset_index(drop=True) | |
| # Prepare dropdown choices\ nmodel_choices = sorted(df['model_cls'].dropna().unique().tolist()) | |
| metric_choices = ["num_params_B", "flops_G", "time_plain_s", "mem_plain_GB", "time_compile_s", "mem_compile_GB"] | |
| group_choices = ["scenario"] | |
| # Analysis function using global df | |
| def analyze(analysis_type, n_rows, metric, selected_model): | |
| columns = df.columns | |
| preview_cols = [c for c in columns if c != "model_cls"] | |
| if analysis_type == "Preview Data": | |
| return df[df['model_cls'] == selected_model][preview_cols].head(n_rows), None | |
| # βββ Updated Plot Metric βββ | |
| if analysis_type == "Plot Metric": | |
| plot_df = df[df['model_cls'] == selected_model].dropna(subset=[metric]) | |
| # empty-data guard | |
| fig, ax = plt.subplots(figsize=(10, 6)) | |
| if plot_df.empty: | |
| ax.text(0.5, 0.5, 'No data for selected model', ha='center', va='center', fontsize=14) | |
| # prettify | |
| for spine in ['top','right']: | |
| ax.spines[spine].set_visible(False) | |
| ax.set_axis_off() | |
| return None, fig | |
| # prepare bars | |
| scenarios = plot_df['scenario'] | |
| values = plot_df[metric] | |
| bars = ax.barh(scenarios, values) | |
| # prettify | |
| fig.set_tight_layout(True) | |
| ax.set_xlabel(metric, fontsize=14) | |
| ax.set_ylabel('Scenario', fontsize=14) | |
| ax.set_title(f"{metric} per Scenario for {selected_model}", fontsize=16) | |
| ax.tick_params(axis='both', labelsize=12) | |
| ax.grid(axis='x', linestyle='--', alpha=0.5) | |
| for spine in ['top','right']: | |
| ax.spines[spine].set_visible(False) | |
| # data labels | |
| for bar in bars: | |
| w = bar.get_width() | |
| ax.text(w + w*0.01, bar.get_y() + bar.get_height()/2, | |
| f"{w:.3f}", va='center', fontsize=12) | |
| return None, fig | |
| # βββ Plot Times per Scenario unchanged (already prettified) βββ | |
| if analysis_type == "Plot Times per Scenario": | |
| filt = df[df['model_cls'] == selected_model] | |
| filt = filt.dropna(subset=['time_plain_s', 'time_compile_s']) | |
| fig, ax = plt.subplots(figsize=(10, 6)) | |
| if filt.empty: | |
| ax.text(0.5, 0.5, 'No data for selected model', ha='center', va='center', fontsize=14) | |
| for spine in ['top','right']: | |
| ax.spines[spine].set_visible(False) | |
| ax.set_axis_off() | |
| return None, fig | |
| scenarios = filt['scenario'] | |
| plain = filt['time_plain_s'] | |
| compile = filt['time_compile_s'] | |
| x = range(len(scenarios)) | |
| width = 0.35 | |
| bars_plain = ax.bar([i - width/2 for i in x], plain, width=width, label='Plain') | |
| bars_compile = ax.bar([i + width/2 for i in x], compile, width=width, label='Compile') | |
| ax.set_xticks(x) | |
| ax.set_xticklabels(scenarios, rotation=45, ha='right') | |
| ax.set_xlabel('Scenario', fontsize=14) | |
| ax.set_ylabel('Time (s)', fontsize=14) | |
| ax.set_title(f"Plain vs Compile Time for {selected_model}", fontsize=16) | |
| ax.tick_params(axis='both', labelsize=12) | |
| ax.legend(frameon=False) | |
| ax.grid(axis='y', linestyle='--', alpha=0.5) | |
| for spine in ['top','right']: | |
| ax.spines[spine].set_visible(False) | |
| # data labels | |
| for bar in bars_plain + bars_compile: | |
| h = bar.get_height() | |
| ax.text(bar.get_x() + bar.get_width()/2, h + h*0.01, | |
| f"{h:.3f}", ha='center', va='bottom', fontsize=12) | |
| return None, fig | |
| return None, None | |
| # Build Gradio interface | |
| demo = gr.Blocks() | |
| with demo: | |
| gr.Markdown("# CSV Data Analyzer") | |
| model_dropdown = gr.Dropdown(label="Select model_cls", choices=model_choices, value=model_choices[0]) | |
| analysis_type = gr.Radio( | |
| choices=["Preview Data", "Plot Metric", "Plot Times per Scenario"], | |
| label="Analysis Type", | |
| value="Preview Data" | |
| ) | |
| n_rows = gr.Slider(5, len(df), step=5, label="Number of rows to preview", value=10) | |
| metric = gr.Dropdown(choices=metric_choices, label="Metric to plot", value="time_plain_s") | |
| analyze_button = gr.Button("Analyze") | |
| tbl_output = gr.Dataframe(headers=None, label="Table Output") | |
| plot_output = gr.Plot(label="Plot Output") | |
| analyze_button.click( | |
| fn=analyze, | |
| inputs=[analysis_type, n_rows, metric, model_dropdown], | |
| outputs=[tbl_output, plot_output] | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() | |