class_docstr: Map X to [0, 1]^d for RangeParameter of type float and not log scale.
  
  Uses bounds l <= x <= u, sets x_tilde_i = (x_i - l_i) / (u_i - l_i).
  Constraints wTx <= b are converted to gTx_tilde <= h, where
  g_i = w_i (u_i - l_i) and h = b - wTl.
  
  Transform is done in-place.
class_docstr_tok: ["Map","X","to","[","0",",","1","]","^d","for","RangeParameter","of","type","float","and","not","log","scale",".","Uses","bounds","l","<","=","x","<","=","u",",","sets","x_tilde_i","=","(","x_i","-","l_i",")","\/","(","u_i","-","l_i",")",".","Constraints","wTx","<","=","b","are","converted","to","gTx_tilde","<","=","h",",","where","g_i","=","w_i","(","u_i","-","l_i",")","and","h","=","b","-","wTl",".","Transform","is","done","in-place","."]
code: def _transform_search_space(
      self, search_space: SearchSpace
  ) -> SearchSpace:
      for p_name, p in search_space.parameters.items():
          if p_name in self.bounds and isinstance(p, RangeParameter):
              p.update_range(
                  lower=self.target_lb,
                  upper=self.target_lb + self.target_range,
              )
              if p.target_value is not None:
                  p._target_value = self._normalize_value(
                      p.target_value,
                      self.bounds[p_name],  # pyre-ignore[6]
                  )
      new_constraints: List[ParameterConstraint] = []
      for c in search_space.parameter_constraints:
          constraint_dict: Dict[str, float] = {}
          bound = float(c.bound)
          for p_name, w in c.constraint_dict.items():
              # p is RangeParameter, but may not be transformed (Int or log)
              if p_name in self.bounds:
                  l, u = self.bounds[p_name]
                  new_w = w * (u - l) / self.target_range
                  constraint_dict[p_name] = new_w
                  bound += self.target_lb * new_w - w * l
              else:
                  constraint_dict[p_name] = w
          new_constraints.append(
              ParameterConstraint(
                  constraint_dict=constraint_dict, bound=bound
              )
          )
      search_space.set_parameter_constraints(new_constraints)
      return search_space
  
imports: from typing import Dict, List, Optional, Tuple, TYPE_CHECKING
  import numpy
  from ax.core.observation import Observation, ObservationFeatures
  from ax.core.parameter import ParameterType, RangeParameter
  from ax.core.parameter_constraint import ParameterConstraint
  from ax.core.parameter_distribution import ParameterDistribution
  from ax.core.search_space import RobustSearchSpace, SearchSpace
  from ax.exceptions.core import UnsupportedError, UserInputError
  from ax.modelbridge.transforms.base import Transform
  from ax.models.types import TConfig
label_desc: Use image node_id 3 for calling the UnitX obj's underlying member method code with example usage: obj._transform_search_space(search_space) and returns: search_space