def select_candidate_idx(self, state: GEPAState) -> int:
assert len(state.program_full_scores_val_set) == len(state.program_candidates)
if self.rng.random() < self.epsilon:
return self.rng.randint(0, len(state.program_candidates) - 1)
else:
return idxmax(state.program_full_scores_val_set)