class_docstr: A model bridge for using torch-based models that fit on MapData. Most
  of the `TorchModelBridge` functionality is retained, except that this
  class should be used in the case where `model` makes use of map_key values.
  For example, the use case of fitting a joint surrogate model on
  `(parameters, map_key)`, while candidate generation is only for `parameters`.
class_docstr_tok: ["A","model","bridge","for","using","torch-based","models","that","fit","on","MapData",".","Most","of","the","`","TorchModelBridge","`","functionality","is","retained",",","except","that","this","class","should","be","used","in","the","case","where","`","model","`","makes","use","of","map_key","values",".","For","example",",","the","use","case","of","fitting","a","joint","surrogate","model","on","`","(","parameters",",","map_key",")","`",",","while","candidate","generation","is","only","for","`","parameters","`","."]
docstr: Get ranges of map_key values in observation features. Returns a dict of the
  form: {"outcome": {"map_key": (min_val, max_val)}}.
docstr_tok: ["Get","ranges","of","map_key","values","in","observation","features",".","Returns","a","dict","of","the","form",":","{","``","outcome","''",":","{","``","map_key","''",":","(","min_val",",","max_val",")","}","}","."]
code: def _get_map_key_ranges(
      self,
      observation_features: List[ObservationFeatures],
      observation_data: List[ObservationData],
      # pyre-fixme[24]: Generic type `tuple` expects at least 1 type parameter.
  ) -> Dict[str, Dict[str, Optional[Tuple]]]:
      """Get ranges of map_key values in observation features. Returns a dict of the
      form: {"outcome": {"map_key": (min_val, max_val)}}.
      """
      map_values = {
          o: {p: [] for p in self._map_key_features}
          for o in self.outcomes
      }
      for obsd, obsf in zip(observation_data, observation_features):
          for p in self._map_key_features:
              param_value = obsf.parameters[p]
              for o in obsd.metric_names:
                  map_values[o][p].append(param_value)
  
      # pyre-fixme[3]: Return type must be annotated.
      # pyre-fixme[24]: Generic type `list` expects 1 type parameter, use
      #  `typing.List` to avoid runtime subscripting errors.
      def get_range(values: List):
          return (min(values), max(values)) if len(values) > 0 else None
  
      return {
          o: {
              p: get_range(map_values[o][p])
              for p in self._map_key_features
          }
          for o in self.outcomes
      }
  
imports: from typing import Any, Dict, List, Optional, Tuple, Type
  import numpy
  import torch
  from ax.core.data import Data
  from ax.core.experiment import Experiment
  from ax.core.map_data import MapData
  from ax.core.observation import Observation, ObservationData, ObservationFeatures, observations_from_map_data, separate_observations
  from ax.core.optimization_config import OptimizationConfig
  from ax.core.search_space import SearchSpace
  from ax.core.types import TCandidateMetadata
  from ax.modelbridge.base import GenResults
  from ax.modelbridge.modelbridge_utils import array_to_observation_data, observation_features_to_array, parse_observation_features
  from ax.modelbridge.torch import FIT_MODEL_ERROR, TorchModelBridge
  from ax.modelbridge.transforms.base import Transform
  from ax.models.torch_base import TorchModel
  from ax.models.types import TConfig
  from ax.utils.common.constants import Keys
  from ax.utils.common.typeutils import not_none
label_desc: Use image node_id 11 for calling the MapTorchModelBridge obj's underlying member method code with example usage: obj._get_map_key_ranges(observation_features, observation_data) and returns: unknown, unknown