Pareto-front utilities used for candidate selection and merge parent choice.
The domination algorithm follows the official Python GEPA utility: a program is dominated when, for every Pareto front that contains it, another active program also appears on that front. Programs absent from every front are considered dominated/irrelevant.
Summary
Functions
@spec find_dominator_programs(GEPA.Types.pareto_fronts(), %{ required(GEPA.Types.program_idx()) => float() }) :: [GEPA.Types.program_idx()]
@spec get_all_programs(GEPA.Types.pareto_fronts()) :: [GEPA.Types.program_idx()]
@spec is_dominated?( GEPA.Types.program_idx(), [GEPA.Types.program_idx()] | MapSet.t(), GEPA.Types.pareto_fronts() ) :: boolean()
@spec remove_dominated_programs(GEPA.Types.pareto_fronts(), %{ required(GEPA.Types.program_idx()) => float() }) :: GEPA.Types.pareto_fronts()
@spec select_from_pareto_front( GEPA.Types.pareto_fronts(), %{required(GEPA.Types.program_idx()) => float()}, :rand.state() ) :: {GEPA.Types.program_idx(), :rand.state()}