"""Display helpers for Gradio tables."""
from __future__ import annotations
import html
import pandas as pd
from src.formatting import fmt_number
def display_dataframe(df: pd.DataFrame | None) -> pd.DataFrame:
if df is None or df.empty:
return pd.DataFrame([{"—": "No data"}])
out = df.copy().astype(object)
return out.where(pd.notnull(out), "—")
def _header_cell(col: object, *, wrap: bool) -> str:
text = str(col)
if wrap and " " in text:
left, right = text.split(" ", 1)
inner = f"{html.escape(left)}
{html.escape(right)}"
else:
inner = html.escape(text)
return f"
{html.escape(empty_note)}
' headers = "".join(_header_cell(col, wrap=wrap_headers) for col in df.columns) body_rows = [] for row in df.itertuples(index=False, name=None): cells = [] for col, value in zip(df.columns, row, strict=True): text = _cell_text(value) css_class = "" if col in {"Success %", "Success"} and text not in {"—", "✓", "✗"}: css_class = ' class="wab-metric-value"' elif col in {"Tasks", "Metric", "Harness", "Input", "Model", "Class", "Task"}: css_class = ' class="wab-mono-cell"' cells.append(f"