class_docstr: Bounds all real values into [0, 1] using a gaussian cumulative density function (cdf)
  Beware, cdf goes very fast to its limits.
  
  Parameters
  ----------
  lower: float
      lower bound
  upper: float
      upper bound
  eps: float
      small values to avoid hitting the bounds
  scale: float
      scaling factor of the density
  density: str
      either gaussian, or cauchy distributions
class_docstr_tok: ["Bounds","all","real","values","into","[","0",",","1","]","using","a","gaussian","cumulative","density","function","(","cdf",")","Beware",",","cdf","goes","very","fast","to","its","limits",".","Parameters","--","--","--","--","--","lower",":","float","lower","bound","upper",":","float","upper","bound","eps",":","float","small","values","to","avoid","hitting","the","bounds","scale",":","float","scaling","factor","of","the","density","density",":","str","either","gaussian",",","or","cauchy","distributions"]
code: def __init__(
      self,
      lower: float = 0.0,
      upper: float = 1.0,
      eps: float = 1e-9,
      scale: float = 1.0,
      density: str = "gaussian",
  ) -> None:
      super().__init__(a_min=lower, a_max=upper)
      self._b = lower
      self._a = upper - lower
      self._eps = eps
      self._scale = scale
      self.name = f"Cd({_f(lower)},{_f(upper)})"
      if density not in ("gaussian", "cauchy"):
          raise ValueError("Unknown density")
      if density == "gaussian":
          self._forw = stats.norm.cdf
          self._back = stats.norm.ppf
      else:
          self._forw = stats.cauchy.cdf
          self._back = stats.cauchy.ppf
  
imports: import uuid
  import itertools
  import numpy
  from scipy import stats
  import nevergrad.common.typing
  from .None import utils
label_desc: Use image node_id 1 to create a new CumulativeDensity object from inherited base classes: BoundTransform with example: obj = CumulativeDensity(lower, upper, eps, scale, density)