# Buggy code
def load_json(self, fn, cs):
    """Load and runhistory in json representation from disk.

    Overwrites current runthistory!

    Parameters
    ----------
    fn : str
        file name to load from
    cs : ConfigSpace
        instance of configuration space
    """

    with open(fn) as fp:
        all_data = json.load(fp)

    self.ids_config = dict(
        [
            (int(id_), Configuration(cs, vector=numpy.array(vec)))
            for id_, vec in all_data["id_config"].items()
        ]
    )

    self.config_ids = dict(
        [
            (Configuration(cs, vector=numpy.array(vec)).__repr__(), id_)
            for id_, vec in all_data["id_config"].items()
        ]
    )
    self._n_id = len(self.config_ids)

    self.data = dict(
        [
            (
                self.RunKey(int(k[0]), k[1], int(k[2])),
                self.RunValue(float(v[0]), float(v[1]), v[2], v[3]),
            )
            for k, v in all_data["data"]
        ]
    )


# 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 load_json(self, fn, cs):
    """Load and runhistory in json representation from disk.

    Overwrites current runthistory!

    Parameters
    ----------
    fn : str
        file name to load from
    cs : ConfigSpace
        instance of configuration space
    """

    with open(fn) as fp:
        all_data = json.load(fp)

    self.ids_config = {
        int(id_): Configuration(cs, values=values)
        for id_, values in all_data["configs"].items()
    }

    self.config_ids = {
        Configuration(cs, values=values): int(id_)
        for id_, values in all_data["configs"].items()
    }

    self._n_id = len(self.config_ids)

    self.data = {
        self.RunKey(int(k[0]), k[1], int(k[2])): self.RunValue(
            float(v[0]), float(v[1]), v[2], v[3]
        )
        for k, v in all_data["data"]
    }