code: def test_Eq(self) -> None:
      exp2 = get_multi_type_experiment()
  
      # Should be equal to start
      self.assertTrue(self.experiment == exp2)
  
      self.experiment.add_tracking_metric(
          BraninMetric("m3", ["x2", "x1"]),
          trial_type="type1",
          canonical_name="m4",
      )
  
      # Test different set of metrics
      self.assertFalse(self.experiment == exp2)
  
      exp2.add_tracking_metric(
          BraninMetric("m3", ["x2", "x1"]),
          trial_type="type1",
          canonical_name="m5",
      )
  
      # Test different metric definitions
      self.assertFalse(self.experiment == exp2)
  
      exp2.update_tracking_metric(
          BraninMetric("m3", ["x2", "x1"]),
          trial_type="type1",
          canonical_name="m4",
      )
  
      # Should be the same
      self.assertTrue(self.experiment == exp2)
  
      exp2.remove_tracking_metric("m3")
      self.assertFalse(self.experiment == exp2)
  
file_path: Ax/ax/core/tests/test_multi_type_experiment.py
imports: from ax.metrics.branin import BraninMetric
  from ax.runners.synthetic import SyntheticRunner
  from ax.utils.common.testutils import TestCase
  from ax.utils.testing.core_stubs import get_branin_arms, get_multi_type_experiment
label_desc: Use image node_id 4 for calling the MultiTypeExperimentTest obj's underlying member method code with example usage: obj.test_Eq() without return types