code: def __unpack_solution(self, solution):
      # print solution
      new_hyperparameters = []
      for h in self.hyperparameters:
          h = copy.copy(h)
          if h.array_length is None:
              h.values = solution[h.index]
          else:
              h.values = solution[h.index : h.index + h.array_length]
          if not h.unbounded:
              h.values = np.clip(h.values, h.min_range, h.max_range)
          # if h.max_range - h.min_range < EPSILON:
          #     h.values = unscale_var(h.values, h.min_range, h.max_range)
          if h.is_log:
              h.values = np.exp(h.values)
          if h.array_length is None:
              h.values = float(h.values)
          new_hyperparameters.append(h)
      return new_hyperparameters
  
imports: import cma
  import random
  import copy
  import pickle
  import os
  import pprint
  import time
  import six
  import numpy
  from opt_util import EPSILON
label_desc: Use image node_id 3 for calling the Optimizer obj's underlying member method code with example usage: obj.__unpack_solution(solution) and returns: new_hyperparameters