code: def unflatten(flat_dict, separator='_'):
      
      _unflatten_asserts(flat_dict, separator)
  
      # This global dictionary is mutated and returned
      unflattened_dict = dict()
  
      def _unflatten(dic, keys, value):
          for key in keys[:-1]:
              dic = dic.setdefault(key, {})
  
          dic[keys[-1]] = value
  
      for item in flat_dict:
          _unflatten(unflattened_dict, item.split(separator), flat_dict[item])
  
      return unflattened_dict
docs: Creates a hierarchical dictionary from a flattened dictionary
      Assumes no lists are present
      :param flat_dict: a dictionary with no hierarchy
      :param separator: a string that separates keys
      :return: a dictionary with hierarchy