code: def test_Init(self) -> None:
      self.assertListEqual(self.constraint.metrics, self.metrics)
      self.assertListEqual(self.constraint.weights, self.weights)
      self.assertEqual(
          len(list(self.constraint.metric_weights)), len(self.metrics)
      )
      self.assertEqual(
          str(self.constraint),
          (
              "ScalarizedOutcomeConstraint(metric_names=['m1', 'm2', 'm3'], "
              "weights=[0.1, 0.3, 0.6], >= 0%)"
          ),
      )
      # check that weights are set uniformly by default
      con = ScalarizedOutcomeConstraint(
          metrics=[
              Metric(name="m1", lower_is_better=True),
              Metric(name="m2", lower_is_better=True),
          ],
          op=ComparisonOp.LEQ,
          bound=self.bound,
      )
      self.assertListEqual(con.weights, [0.5, 0.5])
  
imports: from unittest import mock
  from ax.core.metric import Metric
  from ax.core.outcome_constraint import CONSTRAINT_WARNING_MESSAGE, LOWER_BOUND_MISMATCH, ObjectiveThreshold, OutcomeConstraint, ScalarizedOutcomeConstraint, UPPER_BOUND_MISMATCH
  from ax.core.types import ComparisonOp
  from ax.utils.common.testutils import TestCase
label_desc: Use image node_id 2 for calling the ScalarizedOutcomeConstraintTest obj's underlying member method code with example usage: obj.test_Init() without return types