code: def setUp(self) -> None:
      self.obsd1 = ObservationData(
          metric_names=["m1", "m2", "m3"],
          means=np.array([0.5, 1.0, 1.0]),
          covariance=np.diag(np.array([1.0, 1.0, np.exp(1) - 1])),
      )
      self.obsd2 = ObservationData(
          metric_names=["m1", "m1", "m2", "m2"],
          means=np.array([1.0, 1.0, 2.0, 1.0]),
          covariance=np.array(
              [
                  [1.0, 0.0, 0.0, 0.0],
                  [0.0, 1.0, 0.2, 0.4],
                  [0.0, 0.2, 2.0, 0.8],
                  [0.0, 0.4, 0.8, 3.0],
              ]
          ),
      )
      self.observations = [
          Observation(features=ObservationFeatures({}), data=obsd)
          for obsd in [self.obsd1, self.obsd2]
      ]
  
imports: import math
  from copy import deepcopy
  import numpy
  from ax.core.metric import Metric
  from ax.core.objective import MultiObjective, Objective
  from ax.core.observation import Observation, ObservationData, ObservationFeatures
  from ax.core.optimization_config import MultiObjectiveOptimizationConfig, OptimizationConfig
  from ax.core.outcome_constraint import ObjectiveThreshold, OutcomeConstraint
  from ax.core.types import ComparisonOp
  from ax.modelbridge.transforms.log_y import lognorm_to_norm, LogY, match_ci_width, norm_to_lognorm
  from ax.utils.common.testutils import TestCase
label_desc: Use image node_id 1 for calling the LogYTransformTest obj's underlying member method code with example usage: obj.setUp() without return types