code: def test_TransformObservationFeatures(self) -> None:
      obs_ft2 = deepcopy(self.observation_features)
      obs_ft2 = self.t.transform_observation_features(obs_ft2)
      expected = [
          ObservationFeatures(
              parameters=self._construct_expected_param_dict(
                  obsf, self.t
              )
          )
          for obsf in self.observation_features
      ]
      for obsf, expected_obsf in zip(obs_ft2, expected):
          for step in ("step_1", "step_2"):
              if step in expected_obsf.parameters:
                  self.assertAlmostEqual(
                      obsf.parameters[step],
                      expected_obsf.parameters[step],
                  )
  
      obs_ft2 = self.t.untransform_observation_features(obs_ft2)
      for obsf, expected_obsf in zip(
          obs_ft2, self.observation_features
      ):
          for step in ("step_1", "step_2"):
              if step in expected_obsf.parameters:
                  self.assertAlmostEqual(
                      obsf.parameters[step],
                      expected_obsf.parameters[step],
                  )
  
file_path: Ax/ax/modelbridge/transforms/tests/test_map_unit_x_transform.py
imports: from copy import deepcopy
  import numpy
  from ax.core.observation import Observation, ObservationData, ObservationFeatures
  from ax.core.parameter import ChoiceParameter, ParameterType, RangeParameter
  from ax.core.search_space import SearchSpace
  from ax.modelbridge.transforms.map_unit_x import MapUnitX
  from ax.utils.common.testutils import TestCase
label_desc: Use image node_id 3 for calling the MapUnitXTransformTest obj's underlying member method code with example usage: obj.test_TransformObservationFeatures() without return types