# Buggy code
def _runtime(config, run_history, instance_seed_pairs=None):
    """Return array of all runtimes for the given config for further calculations.

    Parameters
    ----------
    config : Configuration
        configuration to calculate objective for
    run_history : RunHistory
        RunHistory object from which the objective value is computed.
    instance_seed_pairs : list, optional (default=None)
        list of tuples of instance-seeds pairs. If None, the run_history is
        queried for all runs of the given configuration.

    Returns
    ----------
    list
    """
    try:
        id_ = run_history.config_ids[config.__repr__()]
    except KeyError:  # challenger was not running so far
        return []

    if instance_seed_pairs is None:
        instance_seed_pairs = run_history.get_runs_for_config(config)

    runtimes = []
    for i, r in instance_seed_pairs:
        k = run_history.RunKey(id_, i, r)
        runtimes.append(run_history.data[k].time)
    return runtimes


# Traceback (KeyError)
KeyError                                  Traceback (most recent call last)
<ipython-input-10-a9f6024df581> in <module>()
38 smbo = SMBO(scenario=scenario, rng=1, tae_runner=taf)
39 Stats.scenario = scenario
---> 40 smbo.run(max_iters=100)
41
42 print("Final Incumbent: %s" % (smbo.incumbent))

/home/feurerm/virtualenvs/ml2016/local/lib/python2.7/site-packages/smac/smbo/smbo.pyc in run(self, max_iters)
291                 run_history=self.runhistory,
292                 objective=self.objective,
--> 293                 time_bound=max(0.01, time_spend))
294
295             # TODO: Write run history into database

/home/feurerm/virtualenvs/ml2016/local/lib/python2.7/site-packages/smac/smbo/intensification.pyc in intensify(self, challengers, incumbent, run_history, objective, time_bound)
226                 chall_inst_seeds = set(map(lambda x: (
227                     x.instance, x.seed), run_history.get_runs_for_config(challenger)))
--> 228                 chal_perf = objective(challenger, run_history, chall_inst_seeds)
229                 run_history.update_cost(challenger, chal_perf)
230

/home/feurerm/virtualenvs/ml2016/local/lib/python2.7/site-packages/smac/smbo/objective.pyc in average_cost(config, run_history, instance_seed_pairs)
116     float
117     """
--> 118     return np.mean(_cost(config, run_history, instance_seed_pairs))
119
120 def sum_cost(config, run_history, instance_seed_pairs=None):

/home/feurerm/virtualenvs/ml2016/local/lib/python2.7/site-packages/smac/smbo/objective.pyc in _cost(config, run_history, instance_seed_pairs)
93     for i, r in instance_seed_pairs:
94         k = run_history.RunKey(id_, i, r)
---> 95         costs.append(run_history.data[k].cost)
96     return costs
97

KeyError: RunKey(config_id=36, instance_id='2', seed=931243971)

# Fixed code
def _runtime(config, run_history, instance_seed_pairs=None):
    """Return array of all runtimes for the given config for further calculations.

    Parameters
    ----------
    config : Configuration
        configuration to calculate objective for
    run_history : RunHistory
        RunHistory object from which the objective value is computed.
    instance_seed_pairs : list, optional (default=None)
        list of tuples of instance-seeds pairs. If None, the run_history is
        queried for all runs of the given configuration.

    Returns
    ----------
    list
    """
    try:
        id_ = run_history.config_ids[config]
    except KeyError:  # challenger was not running so far
        return []

    if instance_seed_pairs is None:
        instance_seed_pairs = run_history.get_runs_for_config(config)

    runtimes = []
    for i, r in instance_seed_pairs:
        k = run_history.RunKey(id_, i, r)
        runtimes.append(run_history.data[k].time)
    return runtimes