code: def from_dict(cls, d):
          main_memory = MainMemory()
          caches = {}
          referred_caches = set()
          for name, conf in d.items():
              caches[name] = Cache(name=name,
                                   **{k: v for k, v in conf.items()
                                      if k not in ['store_to', 'load_from', 'victims_to']})
              if 'store_to' in conf:
                  referred_caches.add(conf['store_to'])
              if 'load_from' in conf:
                  referred_caches.add(conf['load_from'])
              if 'victims_to' in conf:
                  referred_caches.add(conf['victims_to'])
          for name, conf in d.items():
              if 'store_to' in conf and conf['store_to'] is not None:
                  caches[name].set_store_to(caches[conf['store_to']])
              if 'load_from' in conf and conf['load_from'] is not None:
                  caches[name].set_load_from(caches[conf['load_from']])
              if 'victims_to' in conf and conf['victims_to'] is not None:
                  caches[name].set_victims_to(caches[conf['victims_to']])
          first_level = set(d.keys()) - referred_caches
          assert len(first_level) == 1, "Unable to find first cache level."
          first_level = caches[list(first_level)[0]]
          last_level_load = c = first_level
          while c is not None:
              last_level_load = c
              c = c.load_from
          assert last_level_load is not None, "Unable to find last cache level."
          last_level_store = c = first_level
          while c is not None:
              last_level_store = c
              c = c.store_to
          assert last_level_store is not None, "Unable to find last cache level."
          main_memory.load_to(last_level_load)
          main_memory.store_from(last_level_store)
          return cls(first_level, main_memory), caches, main_memory