Spaces:
Sleeping
Sleeping
| def build_data_alerts_html(tn_ratio, n_fragile): | |
| data_alerts_html = "" | |
| if tn_ratio is not None and tn_ratio < 10: | |
| sev_c = "#f85149" if tn_ratio < 5 else "#d29922" | |
| sev_l = "Critical" if tn_ratio < 5 else "Warning" | |
| data_alerts_html += ( | |
| f'<div style="background:#161b22;border:1px solid {sev_c};border-radius:8px;' | |
| f'padding:10px 14px;margin-bottom:12px;font-size:.8rem;color:{sev_c}">' | |
| f'<strong>⚠ Spurious Correlation {sev_l}</strong> — ' | |
| f'T/N={tn_ratio:.1f}x. Need ≥10× observations vs assets.</div>' | |
| ) | |
| if n_fragile > 0: | |
| data_alerts_html += ( | |
| f'<div style="background:#161b22;border:1px solid #d29922;border-radius:8px;' | |
| f'padding:10px 14px;margin-bottom:12px;font-size:.8rem;color:#e3b341">' | |
| f'<strong>⚠ Fragile Allocations</strong> — {n_fragile} asset(s) had ' | |
| f'weight swings >15 pp under ±10% return noise. Stability penalty applied.</div>' | |
| ) | |
| return data_alerts_html | |
| def build_warnings_html(diags): | |
| warn_html = "" | |
| if diags: | |
| items = "".join(f'<li style="color:#f85149">{d}</li>' for d in diags) | |
| warn_html = ( | |
| '<div style="background:#2d1114;border:1px solid #f85149;border-radius:8px;' | |
| 'padding:14px;margin-bottom:16px">' | |
| '<p style="color:#f85149;font-weight:700;margin-bottom:8px">⚠ Behavioral Diagnostics</p>' | |
| f'<ul style="padding-left:18px">{items}</ul></div>' | |
| ) | |
| return warn_html | |
| def build_constraint_diag_html(model_info): | |
| relax_log = model_info.get("relaxation_log", []) | |
| binding_cons = model_info.get("display_constraints", []) | |
| _cd_inner = "" | |
| if binding_cons: | |
| _bc_items = "".join(f'<li style="color:#e3b341;margin-bottom:4px">{c}</li>' for c in binding_cons) | |
| _cd_inner += ( | |
| '<p style="color:#e3b341;font-weight:700;margin:0 0 5px">Binding Constraints</p>' | |
| '<p style="color:#8b949e;font-size:.8rem;margin:0 0 8px">' | |
| 'These rules actively limited the optimizer — relaxing them may improve returns:</p>' | |
| f'<ul style="padding-left:18px;margin:0 0 12px">{_bc_items}</ul>' | |
| ) | |
| if relax_log: | |
| _rl_items = "".join(f'<li style="color:#f0883e;margin-bottom:4px">{r}</li>' for r in relax_log) | |
| _cd_inner += ( | |
| '<p style="color:#f0883e;font-weight:700;margin:0 0 5px">Constraint Relaxation History</p>' | |
| '<p style="color:#8b949e;font-size:.8rem;margin:0 0 8px">' | |
| 'Initial constraints were infeasible — the engine auto-relaxed these rules to find a solution:</p>' | |
| f'<ul style="padding-left:18px;margin:0">{_rl_items}</ul>' | |
| ) | |
| elif not binding_cons: | |
| _cd_inner = ( | |
| '<p style="color:#3fb950;font-weight:700;margin:0 0 4px">All Constraints Satisfied</p>' | |
| '<p style="color:#8b949e;font-size:.8rem;margin:0">' | |
| 'No binding constraints or relaxations required. The optimizer found a clean solution.</p>' | |
| ) | |
| return ( | |
| '<div style="background:#161b22;border:1px solid #30363d;border-radius:8px;' | |
| 'padding:16px;margin-bottom:16px">' | |
| '<p style="color:#58a6ff;font-weight:700;margin:0 0 12px;font-size:.9rem">' | |
| 'Constraint Diagnostics</p>' | |
| f'{_cd_inner}</div>' | |
| ) | |