class_docstr: Base class for representing metrics.
  
  The `fetch_trial_data` method is the essential method to override when
  subclassing, which specifies how to retrieve a Metric, for a given trial.
  
  A Metric must return a Data object, which requires (at minimum) the following:
      https://ax.dev/api/_modules/ax/core/data.html#Data.required_columns
  
  Attributes:
      lower_is_better: Flag for metrics which should be minimized.
      properties: Properties specific to a particular metric.
class_docstr_tok: ["Base","class","for","representing","metrics",".","The","`","fetch_trial_data","`","method","is","the","essential","method","to","override","when","subclassing",",","which","specifies","how","to","retrieve","a","Metric",",","for","a","given","trial",".","A","Metric","must","return","a","Data","object",",","which","requires","(","at","minimum",")","the","following",":","https",":","\/\/ax.dev\/api\/_modules\/ax\/core\/data.html","#","Data.required_columns","Attributes",":","lower_is_better",":","Flag","for","metrics","which","should","be","minimized",".","properties",":","Properties","specific","to","a","particular","metric","."]
docstr: Fetch multiple metrics data for multiple trials on an experiment, using
  instance attributes of the metrics.
  
  Returns Dict of metric_name => Result
  Default behavior calls `fetch_trial_data` for each metric.
  Subclasses should override this to trial data computation for multiple metrics.
docstr_tok: ["Fetch","multiple","metrics","data","for","multiple","trials","on","an","experiment",",","using","instance","attributes","of","the","metrics",".","Returns","Dict","of","metric_name","=",">","Result","Default","behavior","calls","`","fetch_trial_data","`","for","each","metric",".","Subclasses","should","override","this","to","trial","data","computation","for","multiple","metrics","."]
code: def bulk_fetch_experiment_data(
      self,
      experiment: core.experiment.Experiment,
      metrics: List[Metric],
      trials: Optional[List[core.base_trial.BaseTrial]] = None,
      **kwargs: Any,
  ) -> Dict[int, Dict[str, MetricFetchResult]]:
      """Fetch multiple metrics data for multiple trials on an experiment, using
      instance attributes of the metrics.
  
      Returns Dict of metric_name => Result
      Default behavior calls `fetch_trial_data` for each metric.
      Subclasses should override this to trial data computation for multiple metrics.
      """
      trials = (
          list(experiment.trials.values()) if trials is None else trials
      )
      experiment.validate_trials(trials=trials)
      return {
          trial.index: self.bulk_fetch_trial_data(
              trial=trial, metrics=metrics, **kwargs
          )
          for trial in trials
          if trial.status.expecting_data
      }
  
imports: from __future__ import annotations
  import traceback
  import warnings
  from dataclasses import dataclass
  from functools import reduce
  from logging import Logger
  from typing import Any, Dict, Iterable, List, Mapping, Optional, Tuple, Type, TYPE_CHECKING
  from ax.core.data import Data
  from ax.utils.common.base import SortableBase
  from ax.utils.common.logger import get_logger
  from ax.utils.common.result import Err, Ok, Result, UnwrapError
  from ax.utils.common.serialization import SerializationMixin
label_desc: Use image node_id 8 for calling the Metric obj's underlying member method code with example usage: obj.bulk_fetch_experiment_data(experiment, metrics, trials) and returns: unknown