class_docstr: A GA Optimiser for Cartesian Product Domains. 
class_docstr_tok: ["A","GA","Optimiser","for","Cartesian","Product","Domains","."]
docstr: Set up mutation operations. 
docstr_tok: ["Set","up","mutation","operations","."]
code: def _set_up_single_mutation_ops(self, single_mutation_ops):
      """Set up mutation operations."""
      if single_mutation_ops is None:
          single_mutation_ops = [None] * self.domain.num_domains
      for idx, dom in enumerate(self.domain.list_of_domains):
          if single_mutation_ops[idx] is None:
              single_mutation_ops[idx] = get_default_mutation_op(dom)
      self.single_mutation_ops = single_mutation_ops
  
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 2 for calling the CPGAOptimiser obj's underlying member method code with example usage: obj._set_up_single_mutation_ops(single_mutation_ops) without return types