class_docstr: Class for experiment with multiple trial types.
  
  A canonical use case for this is tuning a large production system
  with limited evaluation budget and a simulator which approximates
  evaluations on the main system. Trial deployment and data fetching
  is separate for the two systems, but the final data is combined and
  fed into multi-task models.
  
  See the Multi-Task Modeling tutorial for more details.
  
  Attributes:
      name: Name of the experiment.
      description: Description of the experiment.
class_docstr_tok: ["Class","for","experiment","with","multiple","trial","types",".","A","canonical","use","case","for","this","is","tuning","a","large","production","system","with","limited","evaluation","budget","and","a","simulator","which","approximates","evaluations","on","the","main","system",".","Trial","deployment","and","data","fetching","is","separate","for","the","two","systems",",","but","the","final","data","is","combined","and","fed","into","multi-task","models",".","See","the","Multi-Task","Modeling","tutorial","for","more","details",".","Attributes",":","name",":","Name","of","the","experiment",".","description",":","Description","of","the","experiment","."]
docstr: Add a new metric to the experiment.
  
  Args:
      metric: The metric to add.
      trial_type: The trial type for which this metric is used.
      canonical_name: The default metric for which this metric is a proxy.
docstr_tok: ["Add","a","new","metric","to","the","experiment",".","Args",":","metric",":","The","metric","to","add",".","trial_type",":","The","trial","type","for","which","this","metric","is","used",".","canonical_name",":","The","default","metric","for","which","this","metric","is","a","proxy","."]
code: def add_tracking_metric(
      self,
      metric: Metric,
      trial_type: str,
      canonical_name: Optional[str] = None,
  ) -> "MultiTypeExperiment":
      """Add a new metric to the experiment.
  
      Args:
          metric: The metric to add.
          trial_type: The trial type for which this metric is used.
          canonical_name: The default metric for which this metric is a proxy.
      """
      if not self.supports_trial_type(trial_type):
          raise ValueError(
              f"`{trial_type}` is not a supported trial type."
          )
  
      super(MultiTypeExperiment, self).add_tracking_metric(metric)
      self._metric_to_trial_type[metric.name] = trial_type
      if canonical_name is not None:
          self._metric_to_canonical_name[metric.name] = canonical_name
      return self
  
imports: import logging
  from typing import Any, Dict, List, Optional, Set
  from ax.core.arm import Arm
  from ax.core.base_trial import BaseTrial
  from ax.core.data import Data
  from ax.core.experiment import DataType, Experiment
  from ax.core.metric import Metric, MetricFetchResult
  from ax.core.optimization_config import OptimizationConfig
  from ax.core.runner import Runner
  from ax.core.search_space import SearchSpace
  from ax.utils.common.docutils import copy_doc
  from ax.utils.common.logger import get_logger
label_desc: Use image node_id 4 for calling the MultiTypeExperiment obj's underlying member method code with example usage: obj.add_tracking_metric(metric, trial_type, canonical_name) and returns: self