docstr: Parameters:
  -----------
          configspace: ConfigSpace.ConfigurationSpace object
                  description of the configuration space
          fully_dimensional: bool
                  if True, a true multivariate KDE is build, otherwise it's approximated by
                  the product of one dimensional KDEs
                  
          min_bandwidth: float
                  a lower limit to the bandwidths which can insure 'uncertainty'
docstr_tok: ["Parameters",":","--","--","--","--","--","-","configspace",":","ConfigSpace.ConfigurationSpace","object","description","of","the","configuration","space","fully_dimensional",":","bool","if","True",",","a","true","multivariate","KDE","is","build",",","otherwise","it","'s","approximated","by","the","product","of","one","dimensional","KDEs","min_bandwidth",":","float","a","lower","limit","to","the","bandwidths","which","can","insure","'uncertainty","'"]
code: def __init__(
      self,
      configspace,
      fully_dimensional=True,
      min_bandwidth=1e-4,
      fix_boundary=True,
  ):
      """
      Parameters:
      -----------
              configspace: ConfigSpace.ConfigurationSpace object
                      description of the configuration space
              fully_dimensional: bool
                      if True, a true multivariate KDE is build, otherwise it's approximated by
                      the product of one dimensional KDEs
  
              min_bandwidth: float
                      a lower limit to the bandwidths which can insure 'uncertainty'
  
      """
      self.configspace = configspace
      self.types, self.num_values = self._get_types()
      self.min_bandwidth = min_bandwidth
      self.fully_dimensional = fully_dimensional
      self.fix_boundary = fix_boundary
  
      # precompute bandwidth bounds
      self.bw_bounds = []
  
      max_bw_cont = 0.5
      max_bw_cat = 0.999
  
      for t in self.types:
          if t == "C":
              self.bw_bounds.append((min_bandwidth, max_bw_cont))
          else:
              self.bw_bounds.append((min_bandwidth, max_bw_cat))
  
      self.bw_clip = np.array([bwb[1] for bwb in self.bw_bounds])
  
      # initialize other vars
      self.bandwidths = np.array([float("NaN")] * len(self.types))
      self.kernels = []
      for t, n in zip(self.types, self.num_values):
          kwargs = {"num_values": n, "fix_boundary": fix_boundary}
  
          if t == "I":
              self.kernels.append(WangRyzinInteger(**kwargs))
          if t == "C":
              self.kernels.append(Gaussian(**kwargs))
          if t == "O":
              self.kernels.append(WangRyzinOrdinal(**kwargs))
          if t == "U":
              self.kernels.append(AitchisonAitken(**kwargs))
      self.data = None
  
file_path: auptimizer/src/aup/Proposer/hpbandster/optimizers/kde/mvkde.py
imports: import numpy
  import scipy.optimize
  import ConfigSpace
  from hpbandster.optimizers.kde.kernels import Gaussian, AitchisonAitken, WangRyzinOrdinal, WangRyzinInteger
label_desc: Use image node_id 1 to create a new MultivariateKDE object from inherited base classes: object with example: obj = MultivariateKDE(configspace, fully_dimensional, min_bandwidth, fix_boundary)