code: def test_TransformOptimizationConfig(self) -> None:
      m1 = Metric(name="m1")
      m2 = Metric(name="m2")
      m3 = Metric(name="m3")
      m4 = Metric(name="m4")
      objective = Objective(metric=m3, minimize=False)
      cons: List[OutcomeConstraint] = [
          OutcomeConstraint(
              metric=m4, op=ComparisonOp.GEQ, bound=2.0, relative=False
          ),
      ]
  
      oc = OptimizationConfig(
          objective=objective, outcome_constraints=cons
      )
      with self.assertRaisesRegex(
          DataRequiredError,
          "`StandardizeY` transform requires constraint metric",
      ):
          oc = self.t.transform_optimization_config(oc, None, None)
      cons = [
          ScalarizedOutcomeConstraint(
              metrics=[m1, m4],
              weights=[0.5, 0.5],
              op=ComparisonOp.LEQ,
              bound=3.5,
              relative=False,
          ),
      ]
      oc = OptimizationConfig(
          objective=objective, outcome_constraints=cons
      )
      with self.assertRaisesRegex(
          DataRequiredError,
          "`StandardizeY` transform requires constraint metric",
      ):
          oc = self.t.transform_optimization_config(oc, None, None)
      cons = [
          OutcomeConstraint(
              metric=m1, op=ComparisonOp.GEQ, bound=2.0, relative=False
          ),
          OutcomeConstraint(
              metric=m2, op=ComparisonOp.LEQ, bound=3.5, relative=False
          ),
          ScalarizedOutcomeConstraint(
              metrics=[m1, m2],
              weights=[0.5, 0.5],
              op=ComparisonOp.LEQ,
              bound=3.5,
              relative=False,
          ),
      ]
      oc = OptimizationConfig(
          objective=objective, outcome_constraints=cons
      )
      oc = self.t.transform_optimization_config(oc, None, None)
      cons_t = [
          OutcomeConstraint(
              metric=m1, op=ComparisonOp.GEQ, bound=1.0, relative=False
          ),
          OutcomeConstraint(
              metric=m2,
              op=ComparisonOp.LEQ,
              bound=2.0 * sqrt(3),  # (3.5 - 1.5) / sqrt(1/3)
              relative=False,
          ),
          ScalarizedOutcomeConstraint(
              metrics=[m1, m2],
              weights=[0.5 * 1.0, 0.5 * sqrt(1 / 3)],
              op=ComparisonOp.LEQ,
              bound=2.25,  # 3.5 - (0.5 * 1.0 + 0.5 * 1.5)
              relative=False,
          ),
      ]
      self.assertTrue(oc.outcome_constraints == cons_t)
      self.assertTrue(oc.objective == objective)
  
      # Check fail with relative
      con = OutcomeConstraint(
          metric=m1, op=ComparisonOp.GEQ, bound=2.0, relative=True
      )
      oc = OptimizationConfig(
          objective=objective, outcome_constraints=[con]
      )
      with self.assertRaises(ValueError):
          oc = self.t.transform_optimization_config(oc, None, None)
  
imports: from copy import deepcopy
  from math import sqrt
  from typing import List
  import numpy
  from ax.core.metric import Metric
  from ax.core.objective import Objective
  from ax.core.observation import Observation, ObservationData, ObservationFeatures
  from ax.core.optimization_config import OptimizationConfig
  from ax.core.outcome_constraint import OutcomeConstraint, ScalarizedOutcomeConstraint
  from ax.core.types import ComparisonOp
  from ax.exceptions.core import DataRequiredError
  from ax.modelbridge.transforms.standardize_y import StandardizeY
  from ax.utils.common.testutils import TestCase
label_desc: Use image node_id 4 for calling the StandardizeYTransformTest obj's underlying member method code with example usage: obj.test_TransformOptimizationConfig() without return types