class_docstr: A GA Optimiser for Cartesian Product Domains. 
class_docstr_tok: ["A","GA","Optimiser","for","Cartesian","Product","Domains","."]
docstr: Constructor. 
docstr_tok: ["Constructor","."]
code: def __init__(
      self,
      func_caller,
      worker_manager=None,
      single_mutation_ops=None,
      single_crossover_ops=None,
      options=None,
      reporter=None,
      ask_tell_mode=False,
  ):
      """Constructor."""
      options = load_options(cpga_opt_args, partial_options=options)
      super(CPGAOptimiser, self).__init__(
          func_caller,
          worker_manager,
          mutation_op=self._mutation_op,
          crossover_op=self._crossover_op,
          options=options,
          reporter=reporter,
          ask_tell_mode=ask_tell_mode,
      )
      self._set_up_single_mutation_ops(single_mutation_ops)
      self._set_up_single_crossover_ops(single_crossover_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 1 to create a new CPGAOptimiser object from inherited base classes: GAOptimiser with example: obj = CPGAOptimiser(func_caller, worker_manager, single_mutation_ops, single_crossover_ops, options, reporter, ask_tell_mode)