- data.py: non-blocking load_bundle(); background watcher thread refreshes the parquet cache (5s scan, 30s min rebuild cadence); refresh()/ up_to_date()/generation() - statistics tab: one table per benchmark (vs <label>), plain column names (beta/alpha/return/vol...), selectable+reorderable stat list in settings.json - correlation tab: per-portfolio components-vs-benchmarks + all-portfolios-vs-benchmarks; numbered columns - global date range (window radio + start/end boxes) applied to all tabs; metrics.xcorr(); equity window radio gains YTD/3M/1M |
||
|---|---|---|
| .. | ||
| test_app.py | ||
| test_data.py | ||
| test_e2e_browser.py | ||