code: def prod_discrete_numeric_exp_mutation(
      x, list_of_list_of_items, uniform_prob=0.2
  ):
      """Makes a change depending on the numerical values."""
      diff_vals = [
          np.abs(loi - x[idx])
          for idx, loi in enumerate(list_of_list_of_items)
      ]
      # Exponentiate and normalise to get the probabilities.
      unnorm_diff_probs = [np.exp(-elem) for elem in diff_vals]
      sample_diff_probs = [
          elem / elem.sum() for elem in unnorm_diff_probs
      ]
      # Now change the distribution so that we pick one randomly with prob uniform_prob.
      sample_probs = [
          (1 - uniform_prob) * elem
          + uniform_prob * np.ones((len(elem),)) / float(len(elem))
          for elem in sample_diff_probs
      ]
      # Now draw the samples
      ret = [
          np.random.choice(loi, p=p)
          for (loi, p) in zip(list_of_list_of_items, sample_probs)
      ]
      return ret
  
imports: from copy import copy
  import numpy
  from scipy.spatial.distance import cdist
  from ..exd.cp_domain_utils import get_processed_func_from_raw_func_for_cp_domain, load_cp_domain_from_config_file
  from ..exd.experiment_caller import ExperimentCaller, CPFunctionCaller
  from ..exd.worker_manager import SyntheticWorkerManager
  from ..exd.exd_utils import get_cp_domain_initial_qinfos
  from .ga_optimiser import GAOptimiser, ga_opt_args
  from ..utils.general_utils import project_to_bounds
  from ..utils.option_handler import load_options
label_desc: Use image node_id 8 for calling a global function with example usage: prod_discrete_numeric_exp_mutation(x, list_of_list_of_items, uniform_prob) and returns: ret