Spaces:
Running
Running
| """Styling and color utilities for the leaderboard display.""" | |
| import pandas as pd | |
| def format_metric_value(value: float | None, fmt: str) -> str: | |
| """Format a metric value for display.""" | |
| if value is None or pd.isna(value): | |
| return "--" | |
| try: | |
| return fmt.format(float(value)) | |
| except Exception: | |
| return f"{value}" | |
| def hex_to_rgb(code: str) -> tuple[int, int, int]: | |
| """Convert hex color code to RGB tuple.""" | |
| code = code.lstrip("#") | |
| return tuple(int(code[i:i + 2], 16) for i in (0, 2, 4)) | |
| def rgb_to_hex(rgb: tuple[float, float, float]) -> str: | |
| """Convert RGB tuple to hex color code.""" | |
| return "#" + "".join(f"{max(0, min(255, int(round(channel)))):02x}" for channel in rgb) | |
| def interpolate_color(start_hex: str, end_hex: str, ratio: float) -> str: | |
| """Interpolate between two colors based on ratio.""" | |
| ratio = max(0.0, min(1.0, ratio)) | |
| start = hex_to_rgb(start_hex) | |
| end = hex_to_rgb(end_hex) | |
| blended = tuple(start[i] + (end[i] - start[i]) * ratio for i in range(3)) | |
| return rgb_to_hex(blended) | |
| def cell_color(value: float | None, minimum: float | None, maximum: float | None, better: str) -> str: | |
| """Get cell background color based on value and metric direction.""" | |
| if value is None or pd.isna(value) or minimum is None or maximum is None: | |
| return "#f3f4f6" | |
| if abs(maximum - minimum) < 1e-9: | |
| ratio = 0.5 | |
| else: | |
| ratio = (float(value) - minimum) / (maximum - minimum) | |
| if better == "higher": | |
| ratio = 1.0 - ratio | |
| return interpolate_color("#d9f7be", "#ffccc7", ratio) | |