code: def test_Eq(self) -> None:
      constraint1 = OutcomeConstraint(
          metric=Metric(name="foo"),
          op=ComparisonOp.GEQ,
          bound=self.bound,
      )
      constraint2 = OutcomeConstraint(
          metric=Metric(name="foo"),
          op=ComparisonOp.GEQ,
          bound=self.bound,
      )
      self.assertEqual(constraint1, constraint2)
  
      constraint3 = OutcomeConstraint(
          metric=Metric(name="foo"),
          op=ComparisonOp.LEQ,
          bound=self.bound,
      )
      self.assertNotEqual(constraint1, constraint3)
  
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 OutcomeConstraintTest obj's underlying member method code with example usage: obj.test_Eq() without return types