class_docstr: A `UnitX` transform for map parameters in observation_features, identified
  as those that are not part of the search space. Since they are not part of the
  search space, the bounds are inferred from the set of observation features. Only
  observation features are transformed; all other objects undergo identity transform.
class_docstr_tok: ["A","`","UnitX","`","transform","for","map","parameters","in","observation_features",",","identified","as","those","that","are","not","part","of","the","search","space",".","Since","they","are","not","part","of","the","search","space",",","the","bounds","are","inferred","from","the","set","of","observation","features",".","Only","observation","features","are","transformed",";","all","other","objects","undergo","identity","transform","."]
docstr: Untransform if the parameter exists in the observation feature. Note the
  extra existence check from `UnitX.untransform_observation_features` because
  when map key features are used, they may not exist after generation or best
  point computations.
docstr_tok: ["Untransform","if","the","parameter","exists","in","the","observation","feature",".","Note","the","extra","existence","check","from","`","UnitX.untransform_observation_features","`","because","when","map","key","features","are","used",",","they","may","not","exist","after","generation","or","best","point","computations","."]
code: def untransform_observation_features(
      self, observation_features: List[ObservationFeatures]
  ) -> List[ObservationFeatures]:
      """Untransform if the parameter exists in the observation feature. Note the
      extra existence check from `UnitX.untransform_observation_features` because
      when map key features are used, they may not exist after generation or best
      point computations."""
      for obsf in observation_features:
          for p_name, (l, u) in self.bounds.items():
              if p_name in obsf.parameters:
                  param: float = obsf.parameters[
                      p_name
                  ]  # pyre-ignore[9]
                  scale_fac = (u - l) / self.target_range
                  obsf.parameters[p_name] = (
                      scale_fac * (param - self.target_lb) + l
                  )
      return observation_features
  
file_path: Ax/ax/modelbridge/transforms/map_unit_x.py
imports: from __future__ import annotations
  from collections import defaultdict
  from typing import Dict, List, Optional, Tuple, TYPE_CHECKING
  from ax.core.observation import Observation, ObservationFeatures
  from ax.core.search_space import SearchSpace
  from ax.modelbridge.transforms.unit_x import UnitX
  from ax.models.types import TConfig
label_desc: Use image node_id 4 for calling the MapUnitX obj's underlying member method code with example usage: obj.untransform_observation_features(observation_features) and returns: observation_features