class_docstr: An abstraction to help with storing experiments with custom Metrics and Runners.
  
  Rather than managing registries individually, the RegistryBundle consumes custom
  metrics, runners, and configuration information and is lazily creates the storage
  registries needed for saving and loading.
  
  Args:
      metric_clss: A dictionary from Metric classes to the int their type should be
          encoded as in the associated SQAMetric. If no None is passed for the int
          a hash will be generated.
      runner_clss: A dictionary from Runner classes to the int their type should be
          encoded as in the associated SQARunner. If no None is passed for the int
          a hash will be generated.
      json_encoder_registry: A dictionary from Types to methods from an instance of
          the type to JSON.
      json_class_encoder_registry: A dictionary from Types to methods from the type's
          class to JSON.
      json_decoder_registry: A dictionary from str class labels to their associated
          Type.
      json_class_decoder_registry: A dictionary from str class labels to an
          associated method for reconstruction.
class_docstr_tok: ["An","abstraction","to","help","with","storing","experiments","with","custom","Metrics","and","Runners",".","Rather","than","managing","registries","individually",",","the","RegistryBundle","consumes","custom","metrics",",","runners",",","and","configuration","information","and","is","lazily","creates","the","storage","registries","needed","for","saving","and","loading",".","Args",":","metric_clss",":","A","dictionary","from","Metric","classes","to","the","int","their","type","should","be","encoded","as","in","the","associated","SQAMetric",".","If","no","None","is","passed","for","the","int","a","hash","will","be","generated",".","runner_clss",":","A","dictionary","from","Runner","classes","to","the","int","their","type","should","be","encoded","as","in","the","associated","SQARunner",".","If","no","None","is","passed","for","the","int","a","hash","will","be","generated",".","json_encoder_registry",":","A","dictionary","from","Types","to","methods","from","an","instance","of","the","type","to","JSON",".","json_class_encoder_registry",":","A","dictionary","from","Types","to","methods","from","the","type's","class","to","JSON",".","json_decoder_registry",":","A","dictionary","from","str","class","labels","to","their","associated","Type",".","json_class_decoder_registry",":","A","dictionary","from","str","class","labels","to","an","associated","method","for","reconstruction","."]
code: def runner_registry(self) -> Dict[Type[Runner], int]:
      return self._runner_registry
  
imports: from __future__ import annotations
  from abc import ABC, abstractproperty
  from typing import Any, Callable, ChainMap, Dict, Optional, Type
  from ax.core.metric import Metric
  from ax.core.runner import Runner
  from ax.storage.json_store.registry import CORE_CLASS_DECODER_REGISTRY, CORE_CLASS_ENCODER_REGISTRY, CORE_DECODER_REGISTRY, CORE_ENCODER_REGISTRY
  from ax.storage.metric_registry import register_metrics
  from ax.storage.runner_registry import register_runners
  from ax.storage.sqa_store.decoder import Decoder
  from ax.storage.sqa_store.encoder import Encoder
  from ax.storage.sqa_store.sqa_config import SQAConfig
label_desc: Use image node_id 3 for calling the RegistryBundleBase obj's underlying member method code with example usage: obj.runner_registry() and returns: self