class_docstr: Determines whether dynamic or static quantization is more appropriate for a given module.
  
  Takes advantage of the ModelReportObserver that records range information.
  Stationary distribution of data are strictly above tolerance level for the comparison statistic:
  
      S = average_batch_activation_range/epoch_activation_range
  
  Nonstationary distributions are below or at the tolerance level for this metric.
  
  If the distribution of data right after the module is non-stationary, recommend dynamic quantization
      Otherwise recommend static quantization
  
  Args:
      tolerance (float, optional): The threshold where S metric is stationary above and non-stationary otherwise. Default: 0.5
class_docstr_tok: ["Determines","whether","dynamic","or","static","quantization","is","more","appropriate","for","a","given","module",".","Takes","advantage","of","the","ModelReportObserver","that","records","range","information",".","Stationary","distribution","of","data","are","strictly","above","tolerance","level","for","the","comparison","statistic",":","S","=","average_batch_activation_range\/epoch_activation_range","Nonstationary","distributions","are","below","or","at","the","tolerance","level","for","this","metric",".","If","the","distribution","of","data","right","after","the","module","is","non-stationary",",","recommend","dynamic","quantization","Otherwise","recommend","static","quantization","Args",":","tolerance","(","float",",","optional",")",":","The","threshold","where","S","metric","is","stationary","above","and","non-stationary","otherwise",".","Default",":","0.5"]
docstr: Returns the DetectorQConfigInfo for each module_fqn relevant
  Args
      model (nn.Module or subclass): model to find observer insertion points
  
  Returns a Dict mapping from unique observer fqns (where we want to insert them) to:
      A DetectorQConfigInfo with the information to generate a QConfig for a specific module
docstr_tok: ["Returns","the","DetectorQConfigInfo","for","each","module_fqn","relevant","Args","model","(","nn.Module","or","subclass",")",":","model","to","find","observer","insertion","points","Returns","a","Dict","mapping","from","unique","observer","fqns","(","where","we","want","to","insert","them",")","to",":","A","DetectorQConfigInfo","with","the","information","to","generate","a","QConfig","for","a","specific","module"]
code: def get_qconfig_info(self, model) -> Dict[str, DetectorQConfigInfo]:
      r"""Returns the DetectorQConfigInfo for each module_fqn relevant
      Args
          model (nn.Module or subclass): model to find observer insertion points
  
      Returns a Dict mapping from unique observer fqns (where we want to insert them) to:
          A DetectorQConfigInfo with the information to generate a QConfig for a specific module
      """
      # run the helper function to populate the dictionary
      dynamic_static_info = self._generate_dict_info(model)
  
      # we actually have a qconfig info object we are populating
      module_fqn_to_detector_qconfig_info = {}
  
      for module_fqn in dynamic_static_info:
          # create a detector info instance
          detector_qconfig_info = DetectorQConfigInfo(module_fqn)
  
          # see if per channel quantization is supported
          dynamic_static_recommended: bool = dynamic_static_info[
              module_fqn
          ][self.DEFAULT_DYNAMIC_REC_KEY]
          detector_qconfig_info.is_activation_dynamic = (
              dynamic_static_recommended
          )
          module_fqn_to_detector_qconfig_info[
              module_fqn
          ] = detector_qconfig_info
  
      return module_fqn_to_detector_qconfig_info
  
imports: from typing import Any, Dict, Set, Tuple, Callable, List
  import torch
  import torch.nn
  import torch.ao.nn.qat
  from abc import ABC, abstractmethod
  from torch.ao.quantization.fake_quantize import FakeQuantize
  from torch.ao.quantization.fx.graph_module import GraphModule
  from torch.ao.quantization.fx._model_report.model_report_observer import ModelReportObserver
  from torch.ao.quantization.qconfig import QConfig, default_qconfig, _assert_valid_qconfig
  from torch.ao.quantization.observer import ObserverBase, default_dynamic_quant_observer, default_per_channel_weight_observer, default_observer, default_weight_observer
  from torch.ao.quantization.fx._equalize import default_equalization_qconfig, EqualizationQConfig
  from torch.ao.quantization.observer import _is_activation_post_process
label_desc: Use image node_id 4 for calling the DynamicStaticDetector obj's underlying member method code with example usage: obj.get_qconfig_info(model) and returns: module_fqn_to_detector_qconfig_info