code: def unnestConfig(config):
      """
      This function creates a list of config files for evaluating parameters with different values. If a config parameter
      is of type list this list is iterated over and a config object without lists is returned. Can handle lists inside any
      number of parameters.
  
      Can handle nested (one level) configs
      """
      nestedKeys = []
      nestedVals = []
  
      for gk, gv in config.items():
          if gk != "task":
              for k, v in gv.items():
                  if isinstance(v, list):
                      if (
                          k != "layer_dims"
                      ):  # exclude layer dims, since it is already a list
                          nestedKeys.append([gk, k])
                          nestedVals.append(v)
                  elif isinstance(v, dict):
                      logger.warning(
                          "Config too deep! Working on %s" % (str(v))
                      )
  
      if len(nestedKeys) == 0:
          unnestedConfig = [config]
      else:
          logger.info(
              "Nested config at parameters: %s"
              % (", ".join(".".join(x) for x in nestedKeys))
          )
          unnestedConfig = []
          mesh = np.meshgrid(
              *nestedVals
          )  # get all combinations, each dimension corresponds to one parameter type
          # flatten mesh into shape: [num_parameters, num_combinations] so we can iterate in 2d over any paramter combinations
          mesh = [x.flatten() for x in mesh]
  
          # loop over all combinations
          for i in range(len(mesh[0])):
              tempconfig = config.copy()
              for j, k in enumerate(nestedKeys):
                  if isinstance(k, str):
                      tempconfig[k] = mesh[j][
                          i
                      ]  # get ith val of correct param value and overwrite original config
                  elif len(k) == 2:
                      tempconfig[k[0]][k[1]] = mesh[j][
                          i
                      ]  # set nested dictionary keys
                  else:
                      logger.warning(
                          "Config too deep! Working on %s" % (str(k))
                      )
              unnestedConfig.append(tempconfig)
  
      return unnestedConfig
  
imports: from __future__ import absolute_import, division, print_function, unicode_literals
  import json
  import logging
  import os
  import tempfile
  import tarfile
  import zipfile
  from functools import wraps
  from hashlib import sha256
  from io import open
  from pathlib import Path
  import boto3
  import numpy
  import requests
  from botocore.exceptions import ClientError
  from dotmap import DotMap
  from tqdm import tqdm
  from transformers.file_utils import cached_path
label_desc: Use image node_id 14 for calling a global function with example usage: unnestConfig(config) and returns: unnestedConfig