code: def test_TransformObservationsDifferentLowerUpper(self) -> None:
      observation_data = self.t5._transform_observation_data(
          [deepcopy(self.obsd2)]
      )[0]
      self.assertEqual(self.t5.cutoffs["m1"], (-float("inf"), 1.0))
      self.assertEqual(self.t5.cutoffs["m2"], (1.0, float("inf")))
      self.assertEqual(
          self.t5.cutoffs["m3"], (-float("inf"), float("inf"))
      )
      self.assertListEqual(
          list(observation_data.means), [1.0, 1.0, 2.0, 1.0]
      )
      # Nothing should happen to m3
      observation_data = self.t5.transform_observations(
          [deepcopy(self.obs3)]
      )[0].data
      self.assertListEqual(
          list(observation_data.means), [0.0, 1.0, 5.0, 3.0]
      )
      # With percentile_bounds
      observation_data = self.t6._transform_observation_data(
          [deepcopy(self.obsd2)]
      )[0]
      self.assertEqual(self.t6.cutoffs["m1"], (-float("inf"), 1.0))
      self.assertEqual(self.t6.cutoffs["m2"], (0.0, float("inf")))
      self.assertListEqual(
          list(observation_data.means), [1.0, 1.0, 2.0, 1.0]
      )
  
file_path: Ax/ax/modelbridge/transforms/tests/test_winsorize_legacy_transform.py
imports: import warnings
  from copy import deepcopy
  import numpy
  from ax.core.observation import Observation, ObservationData, ObservationFeatures
  from ax.exceptions.core import DataRequiredError
  from ax.modelbridge.transforms.winsorize import Winsorize
  from ax.utils.common.testutils import TestCase
label_desc: Use image node_id 8 for calling the WinsorizeTransformTestLegacy obj's underlying member method code with example usage: obj.test_TransformObservationsDifferentLowerUpper() without return types