From f5f0c8d6b12b45a87e3c080e0bc3bbabaf75a732 Mon Sep 17 00:00:00 2001 From: Sven Geboers Date: Thu, 2 Apr 2026 21:49:12 +0200 Subject: [PATCH] feat: add year selector for SVD components 3-10 - Add _load_mp_vectors_by_party_for_window() to load SVD vectors for specific windows - Add load_party_axis_scores_for_window() cached function - Add year selector UI for components 3-10 similar to components 1-2 - Uses get_uniform_dim_windows() to get available windows --- explorer.py | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/explorer.py b/explorer.py index a4cc97a..3a2f408 100644 --- a/explorer.py +++ b/explorer.py @@ -2931,7 +2931,33 @@ def build_svd_components_tab(db_path: str) -> None: else {} ) else: - party_scores = party_scores_default + # Components 3-10: use SVD vectors with year selection + # Get available windows from svd_vectors + available_windows = get_uniform_dim_windows(db_path) + year_windows = sorted(w for w in available_windows if w != "current_parliament") + has_current = "current_parliament" in available_windows + svd_windows = year_windows + (["current_parliament"] if has_current else []) + + def _svd_window_label(w: str) -> str: + if w == "current_parliament": + return "Huidig parlement" + return w + + with col1: + svd_window = st.selectbox( + "Jaar", + options=svd_windows, + index=len(svd_windows) - 1, # default: current_parliament + format_func=_svd_window_label, + key=f"svd_window_{comp_sel}", + ) + + # Load party scores for the selected window + if svd_window == "current_parliament": + party_scores = party_scores_default + else: + party_scores = load_party_axis_scores_for_window(db_path, svd_window) + # For components 3-10, compute MP counts from party_mp_vectors party_mp_counts = ( {p: len(v) for p, v in party_mp_vectors.items()} if party_mp_vectors else {}