class_docstr: Fits a cartesian product GP by tuning the hyper-parameters. 
class_docstr_tok: ["Fits","a","cartesian","product","GP","by","tuning","the","hyper-parameters","."]
docstr: Builds a Domain product GP. 
docstr_tok: ["Builds","a","Domain","product","GP","."]
code: def _child_build_gp(
      self,
      mean_func,
      noise_var,
      gp_cts_hps,
      gp_dscr_hps,
      other_gp_params=None,
      *args,
      **kwargs,
  ):
      """Builds a Domain product GP."""
      kernel_scale = np.exp(gp_cts_hps[0])
      gp_cts_hps = gp_cts_hps[1:]
      cp_kernel, gp_cts_hps, gp_dscr_hps = _build_kernel_for_domain(
          self.domain,
          "dom",
          kernel_scale,
          gp_cts_hps,
          gp_dscr_hps,
          other_gp_params,
          self.options,
          self.domain_kernel_ordering,
          self.domain_kernel_params_for_each_domain,
      )
      ret_gp = CPGP(
          self.X,
          self.Y,
          cp_kernel,
          mean_func,
          noise_var,
          domain_lists_of_dists=self.domain_lists_of_dists,
          *args,
          **kwargs,
      )
      return ret_gp, gp_cts_hps, gp_dscr_hps
  
imports: from __future__ import print_function
  from argparse import Namespace
  import numpy
  from ..exd import domains
  from ..exd.cp_domain_utils import load_cp_domain_from_config_file
  from .None import gp_core, mf_gp
  from .euclidean_gp import get_euclidean_integral_gp_kernel_with_scale, prep_euclidean_integral_kernel_hyperparams
  from .kernel import CartesianProductKernel, HammingKernel
  from ..utils.general_utils import get_idxs_from_list_of_lists
  from ..utils.option_handler import get_option_specs, load_options
  from ..utils.reporters import get_reporter
label_desc: Use image node_id 3 for calling the CPGPFitter obj's underlying member method code with example usage: obj._child_build_gp(mean_func, noise_var, gp_cts_hps, gp_dscr_hps, other_gp_params) and returns: ret_gp,  gp_cts_hps,  gp_dscr_hps