GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug module¶
Statistical analysis of the unified JSONL retrieval debug log.
Consumes {path_results}/debug/retrieval_debug.jsonl (produced by
GUIBRUSHR/Retrieval/debug_log.py) and writes:
summary.txt— human-readable diagnosis (acceptance, mixing, convergence)plots/*.png— matplotlib figurestables/*.csv— tidy tables for further inspection
Usage¶
conda activate guibrushr_env
python scripts/analyze_retrieval_debug.py \
--log /home/francesco/Scaricati/retrieval_debug.jsonl \
--out ./analysis_latest
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.parse_jsonl(path: Path) tuple[dict[str, list[dict[str, Any]]], dict[str, int]][source]¶
Stream-parse a JSONL file, bucketing records by
eventkey.- Returns:
buckets (dict[event_name, list[record]])
stats (dict with
total_lines,ok_lines,skipped_lines,) –truncated_lines.
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.to_df(records: list[dict[str, Any]]) DataFrame[source]¶
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.analyse_init(df_done: DataFrame, df_miss: DataFrame) dict[str, Any][source]¶
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.analyse_acceptance(df_accept: DataFrame, df_step_done: DataFrame, df_chain_end: DataFrame, df_core_done: DataFrame, df_setup: DataFrame, df_end: DataFrame) dict[str, Any][source]¶
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.detect_collapse(rates: ndarray, steps: ndarray, window: int = 50) dict[str, Any] | None[source]¶
Find the largest drop in a rolling window.
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.detect_stuck_chains(df_chain_end: DataFrame, nthin: int, window: int = 50, thresh: float = 0.05) list[dict[str, Any]][source]¶
Chains whose recent-window accept_rate dropped below
thresh.
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.analyse_mixing(df_proposal: DataFrame, df_accept: DataFrame, df_setup: DataFrame) dict[str, Any][source]¶
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.analyse_convergence(df_conv_check: DataFrame, df_conv_warn: DataFrame, df_conv_update: DataFrame, df_end: DataFrame) dict[str, Any][source]¶
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.analyse_per_chain(df_chain_end: DataFrame, df_chain_init: DataFrame, df_setup: DataFrame) DataFrame[source]¶
Build a per-chain summary DataFrame.
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.analyse_rejects(df_core_done: DataFrame) dict[str, Any][source]¶
Aggregate reject_reasons / reject_params / reject_values per param.
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.analyse_rejects_per_step(df_accept: DataFrame) DataFrame[source]¶
Per-outer_step reject counts from accept events that carry reject_reason.
Returns a DataFrame with one row per outer_step and columns: outer_step, n_proposals, n_rejects_with_reason, reject_rate, rejects_by_reason (dict), rejects_by_param (dict).
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.analyse_rejects_vs_norms(df_accept: DataFrame, df_proposal: DataFrame) dict[str, Any][source]¶
Join accept (carrying reject_reason) with proposal (carrying de_norm, eps_norm, dpars_norm) on (outer_step, core, chain, sub) and compute the correlation between reject rate and proposal norms across outer_steps.
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.analyse_rejects_per_chain(df_chain_end: DataFrame, df_accept: DataFrame) DataFrame[source]¶
Chain × param reject counts.
Prefers the per-chain
reject_paramsfield from chain_end events (written by the current worker) and falls back to grouping accept-eventreject_paramby chain if chain_end is older and lacks the dict.
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.analyse_first_reject_step(df_accept: DataFrame) DataFrame[source]¶
Earliest outer_step where each param was rejected.
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.analyse_reject_correlation(df_accept: DataFrame, topk: int = 15) DataFrame[source]¶
Co-rejection co-occurrence of param pairs within the same outer_step.
For each pair (a,b) returns the Jaccard similarity over the set of outer_steps in which the param was rejected at least once.
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.analyse_reject_severity(values: dict[str, list[float]], registry: dict[str, dict[str, float]]) DataFrame[source]¶
Per-param quantiles of signed overshoot beyond the nearest bound, normalised by the prior range width.
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.analyse_reject_consistency(rejects_core: dict[str, Any], df_accept: DataFrame) dict[str, Any][source]¶
Sanity check: rejects aggregated from core_done events must match rejects counted from accept events (reject_reason column).
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.build_param_registry(buckets: dict[str, list[dict[str, Any]]]) dict[str, dict[str, float]][source]¶
Return {param_name: {range_min, range_max}} from the param_registry event.
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.analyse_errors(df_error: DataFrame, df_retry: DataFrame, df_fatal: DataFrame) dict[str, Any][source]¶
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.plot_acceptance_vs_step(df_step: DataFrame, out: Path) None[source]¶
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.plot_acceptance_per_chain(per_chain: DataFrame, out: Path) None[source]¶
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.plot_acceptance_per_core(df_core: DataFrame, out: Path) None[source]¶
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.plot_dlhood_hist(df_accept: DataFrame, out: Path) None[source]¶
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.plot_gamma_dist(df_proposal: DataFrame, out: Path) None[source]¶
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.plot_norms_evolution(df_proposal: DataFrame, out: Path) None[source]¶
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.plot_gelmanrubin(df_conv: DataFrame, out: Path) None[source]¶
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.plot_tz(df_conv: DataFrame, out: Path) None[source]¶
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.plot_lhood_trajectories(df_chain_end: DataFrame, out: Path) None[source]¶
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.plot_reject_reasons(reasons: Counter, n_proposals: int, out: Path) None[source]¶
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.plot_reject_values_grid(values: dict[str, list[float]], counts: Counter, registry: dict[str, dict[str, float]], out: Path, topk: int = 6) None[source]¶
For each of the top-K offending params, plot the histogram of proposed (rejected) values with vertical lines at range_min / range_max and an annotation showing how far outside the bounds the tail extends.
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.plot_reject_value_overshoot(values: dict[str, list[float]], counts: Counter, registry: dict[str, dict[str, float]], out: Path, topk: int = 8) None[source]¶
For each top-K offending param, plot a boxplot of the signed overshoot beyond the nearest bound, normalised by the prior range width. Positive values = overshoot above range_max; negative = undershoot below range_min. Scale: 1.0 = one full prior range past the bound.
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.plot_reject_rate_per_step(df_per_step: DataFrame, out: Path) None[source]¶
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.plot_rejects_by_reason_stacked(df_per_step: DataFrame, out: Path) None[source]¶
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.plot_rejects_by_param_stacked(df_per_step: DataFrame, top_params: list[str], out: Path) None[source]¶
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.plot_reject_vs_norm(per_step_merged: DataFrame, norm_col: str, corr: float | None, out: Path) None[source]¶
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.plot_reject_per_chain_heatmap(chain_param_df: DataFrame, out: Path, topk_params: int = 15) None[source]¶
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.plot_first_reject_step(df_first: DataFrame, out: Path, topk: int = 20) None[source]¶
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.plot_reject_correlation(df_corr: DataFrame, out: Path) None[source]¶
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.plot_reject_overshoot_quantiles(df_sev: DataFrame, out: Path, topk: int = 15) None[source]¶
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.plot_reject_params_top(params: Counter, out: Path, topk: int = 15) None[source]¶
- GUIBRUSHR.GUI.Input_Output_Panels.Input_Panels.TabPanels.Frame_Retrieval_Analysis.Tab_Analysis.FrameChainsAnalysis.analyze_retrieval_debug.plot_init_tentatives(df_init_done: DataFrame, out: Path) None[source]¶