"""The PRIMO pages, rendered as ``pm-*`` markup for ``gr.HTML`` blocks.
Gradio has no card or rich-table component, so every page here is a string of
HTML styled entirely by ``primo.css`` -- the rail, the board grid, the
leaderboard tables and the tasks table. The functions are pure: they take the
data the app already fetched (``Board`` objects, the results ``DataFrame``, the
registry) and return a string, so they unit-test without Gradio or a network.
Two rules hold everywhere:
* Every string that comes from the registry or from a submission goes through
``html.escape`` -- board names, blurbs, disease names and, above all, the
user-chosen model names that become table cells and column headers.
* The private ``hf_username`` is never rendered. It is a name-ownership lock in
the results dataset, not a public credit, so no table here carries a
"submitted by" column.
Navigation is reload-based: the rail is a column of ````
and ```` links, which costs a page load per click but buys
shareable per-board URLs and needs no JavaScript, matching how the board cards
have always worked.
"""
import math
import numbers
from html import escape
import pandas as pd
from boards import (
AREA_GROUP,
CATEGORY_GROUP,
GROUP_NOTE,
MODALITY_GROUP,
Board,
OpenBoard,
in_group,
metric_label,
modality_label,
open_in_group,
)
from leaderboard import per_task_table, ranked_table, tasks_table, top_models
SECTIONS = (MODALITY_GROUP, AREA_GROUP, CATEGORY_GROUP)
N_TOP_MODELS = 3
BRAND = (
''
'
'
"PRIMObenchmark"
)
FOOT_LINKS = (
("tasks", "Tasks"),
("submit", "Submit a model"),
("contribute", "Contribute"),
("method", "Method"),
)
NAME_COLUMNS = frozenset({"Model", "Best"})
STRONG_COLUMNS = frozenset({"Task"})
METRIC_COLUMNS = frozenset({"Metric"})
RIGHT_COLUMNS = frozenset({"Rank", "Patients"})
# --------------------------------------------------------------------- rail
def rail_html(
boards: list[Board], active_slug: str | None, active_tab: str | None
) -> str:
"""The left navigation: brand, one link per board grouped by facet, foot links.
``active_slug`` highlights the board a visitor is on; ``active_tab`` highlights
a foot link. Open boards link to Contribute, mirroring the overview cards.
"""
parts = ['
{escape(group)}
' ) for board in cards: cls = "pm-link pm-active" if board.slug == active_slug else "pm-link" parts.append( f'' f'{escape(board.name)}' f'{board.n_tasks}' ) for board in opens: parts.append( '' f'{escape(board.name)}' 'open' ) parts.append("Leading
'] if not top: parts.append( 'No ranked model yet. Be the first.
' ) return "".join(parts) for row in top: badge = ( ' baseline' if row.is_baseline else "" ) score = "n/a" if row.score is None else f"{row.score:.3f}" parts.append( f'{escape(row.name)}{badge}' f' {score}
' ) return "".join(parts) def _live_card(board: Board, df: pd.DataFrame, by_id: dict[str, dict]) -> str: top = top_models(df, by_id, board, N_TOP_MODELS) return ( f'' f"{escape(board.blurb)}
' f"{_leading(top)}" ) def _open_card(board: OpenBoard) -> str: return ( '' f"{escape(board.blurb)}
' 'Propose a cohort →
' ) def render_boards(boards: list[Board], df: pd.DataFrame, by_id: dict[str, dict]) -> str: """The Boards overview: every board as a card, grouped by facet. Live cards link to their board and teaser their leaders; open cards state a gap and link to Contribute. A section counts its open slices so the page reads as showing its own gaps, not the registry as the whole territory. """ if not boards: return ( 'The task registry is ' "unavailable right now. Please retry in a moment.
PRIMO evaluates representations of omics samples through " "drug-development-related tasks. Benchmarks are organized by data " "modality, therapeutic area, or task category.
{escape(group)}
' f'{note}{counter}
{escape(empty)}
' score_cols = _score_columns(df) bold = _bold_cells(df, score_cols, bold_axis) if bold_axis is not None else set() head = [] for index, col in enumerate(df.columns): align = ( ' style="text-align:right"' if col in score_cols or col in RIGHT_COLUMNS else "" ) head.append( f'The task registry could not be loaded. Please retry shortly.
" "Board
' f"{_board_meta(board)}
Ranked
' f'Only models that covered all {board.n_tasks} tasks are ' "ranked. Mean averages the family columns and mixes metrics; a tie-break, " "not a score.
" f"Per task
' 'Every submission, partial ones included. Read across a row.
' f"{len(df)} hidden clinical targets. One fixed linear probe reads each " "one out of your embedding; the cohorts stay anonymous, the biology does " "not.