@@ -68,12 +68,13 @@ REFTIMES = _reftimes()
6868
6969
7070def collect_all_runs ():
71- """Collect all runs defined in the configuration."""
71+ """Collect all runs defined in the configuration, including secondary runs ."""
7272 runs = {}
7373 for run_entry in copy .deepcopy (config ["runs" ]):
7474 model_type = next (iter (run_entry ))
7575 run_config = run_entry [model_type ]
7676 run_config ["model_type" ] = model_type
77+ run_config ["is_candidate" ] = True
7778 run_id = run_config ["mlflow_id" ][0 :9 ]
7879
7980 if model_type == "interpolator" :
@@ -84,6 +85,7 @@ def collect_all_runs():
8485 # Ensure a proper 'forecaster' entry exists with model_type
8586 fore_cfg = copy .deepcopy (run_config ["forecaster" ])
8687 fore_cfg ["model_type" ] = "forecaster"
88+ fore_cfg ["is_candidate" ] = False # exclude from outputs
8789 runs [tail_id ] = fore_cfg
8890 run_id = f"{ run_id } -{ tail_id } "
8991
@@ -92,6 +94,16 @@ def collect_all_runs():
9294 return runs
9395
9496
97+ def collect_all_candidates ():
98+ """Collect participating runs ('candidates') only."""
99+ runs = collect_all_runs ()
100+ candidates = {}
101+ for run_id , run_config in runs .items ():
102+ if run_config .get ("is_candidate" , False ):
103+ candidates [run_id ] = run_config
104+ return candidates
105+
106+
95107def collect_all_baselines ():
96108 """Collect all baselines defined in the configuration."""
97109 baselines = {}
@@ -108,7 +120,8 @@ def collect_experiment_participants():
108120 for base in BASELINE_CONFIGS .keys ():
109121 participants [base ] = OUT_ROOT / f"data/baselines/{ base } /verif_aggregated.nc"
110122 for exp in RUN_CONFIGS .keys ():
111- participants [exp ] = OUT_ROOT / f"data/runs/{ exp } /verif_aggregated.nc"
123+ if RUN_CONFIGS [exp ].get ("is_candidate" , False ):
124+ participants [exp ] = OUT_ROOT / f"data/runs/{ exp } /verif_aggregated.nc"
112125 return participants
113126
114127
0 commit comments