code: def test_Eq(self) -> None:
      config1 = OptimizationConfig(
          objective=self.objective,
          outcome_constraints=self.outcome_constraints,
          risk_measure=self.single_output_risk_measure,
      )
      config2 = OptimizationConfig(
          objective=self.objective,
          outcome_constraints=self.outcome_constraints,
          risk_measure=self.single_output_risk_measure,
      )
      self.assertEqual(config1, config2)
  
      new_outcome_constraint = OutcomeConstraint(
          metric=self.metrics["m2"], op=ComparisonOp.LEQ, bound=0.5
      )
      config3 = OptimizationConfig(
          objective=self.objective,
          outcome_constraints=[
              self.outcome_constraint,
              new_outcome_constraint,
          ],
      )
      self.assertNotEqual(config1, config3)
  
imports: from ax.core.metric import Metric
  from ax.core.objective import MultiObjective, Objective, ScalarizedObjective
  from ax.core.optimization_config import _NO_RISK_MEASURE, MultiObjectiveOptimizationConfig, OptimizationConfig
  from ax.core.outcome_constraint import ObjectiveThreshold, OutcomeConstraint, ScalarizedOutcomeConstraint
  from ax.core.risk_measures import RiskMeasure
  from ax.core.types import ComparisonOp
  from ax.exceptions.core import UserInputError
  from ax.utils.common.testutils import TestCase
label_desc: Use image node_id 3 for calling the OptimizationConfigTest obj's underlying member method code with example usage: obj.test_Eq() without return types