class_docstr: Determines whether input-weight equalization can help improve quantization for certain modules.
  
  Specifically, this list of modules includes:
      linear
      conv
  
  Determines whether input-weight equalization is recommended based on the comp stat:
      s_c = sqrt(w_c/W)/sqrt(i_c/I)
      where:
          w_c is range of weight for channel c, W is range of weight over all channels
          i_c is range of input for channel c, I is range of input over all channels
  
      if s_c >= threshold or <= 1 / threshold, recommends input-weight equalization
  
  Args:
      ratio_threshold (float): The threshold for s_c to determine if input-weight equalization is suggested
          Should be between 0 and 1 (both non-inclusive)
      ch_axis (int, optional): The channel axis being observed to determine input weight equalization
          Default: 1
  
  * :attr:`ratio_threshold`: The threshold for s_c to determine if input-weight equalization is suggested
      Should be between 0 and 1
  
  * :attr:`ch_axis`: The channel axis being observed to determine input weight equalization
  
  * :attr:`SUPPORTED_MODULES`: This specifies the modules that are supported for input-weight equalization
  
  * :attr:`DEFAULT_PRE_OBSERVER_NAME`: The name of the pre-observer to be inserted for this detector
class_docstr_tok: ["Determines","whether","input-weight","equalization","can","help","improve","quantization","for","certain","modules",".","Specifically",",","this","list","of","modules","includes",":","linear","conv","Determines","whether","input-weight","equalization","is","recommended","based","on","the","comp","stat",":","s_c","=","sqrt","(","w_c\/W",")","\/sqrt","(","i_c\/I",")","where",":","w_c","is","range","of","weight","for","channel","c",",","W","is","range","of","weight","over","all","channels","i_c","is","range","of","input","for","channel","c",",","I","is","range","of","input","over","all","channels","if","s_c",">","=","threshold","or","<","=","1","\/","threshold",",","recommends","input-weight","equalization","Args",":","ratio_threshold","(","float",")",":","The","threshold","for","s_c","to","determine","if","input-weight","equalization","is","suggested","Should","be","between","0","and","1","(","both","non-inclusive",")","ch_axis","(","int",",","optional",")",":","The","channel","axis","being","observed","to","determine","input","weight","equalization","Default",":","1","*",":","attr",":","`","ratio_threshold","`",":","The","threshold","for","s_c","to","determine","if","input-weight","equalization","is","suggested","Should","be","between","0","and","1","*",":","attr",":","`","ch_axis","`",":","The","channel","axis","being","observed","to","determine","input","weight","equalization","*",":","attr",":","`","SUPPORTED_MODULES","`",":","This","specifies","the","modules","that","are","supported","for","input-weight","equalization","*",":","attr",":","`","DEFAULT_PRE_OBSERVER_NAME","`",":","The","name","of","the","pre-observer","to","be","inserted","for","this","detector"]
docstr: Takes in a calibrated GraphModule and then finds the relevant observers.
  It then extracts the input information for each observer returns it
  
  Args
      model (GraphModule): The prepared and calibrated GraphModule with inserted ModelReportObservers
  
  Returns a dict mapping relevant module fqns (str) to a dict with keys:
      "input_activation_per_channel_max" : maps to the per_channel max values
      "input_activation_per_channel_min" : maps to the per_channel min values
      "input_activation_global_max" : maps to the global max recorded
      "input_activation_global_min" : maps to the global min recorded
docstr_tok: ["Takes","in","a","calibrated","GraphModule","and","then","finds","the","relevant","observers",".","It","then","extracts","the","input","information","for","each","observer","returns","it","Args","model","(","GraphModule",")",":","The","prepared","and","calibrated","GraphModule","with","inserted","ModelReportObservers","Returns","a","dict","mapping","relevant","module","fqns","(","str",")","to","a","dict","with","keys",":","``","input_activation_per_channel_max","''",":","maps","to","the","per_channel","max","values","``","input_activation_per_channel_min","''",":","maps","to","the","per_channel","min","values","``","input_activation_global_max","''",":","maps","to","the","global","max","recorded","``","input_activation_global_min","''",":","maps","to","the","global","min","recorded"]
code: def _extract_input_info(self, model: GraphModule) -> Dict[str, Dict]:
      r"""
      Takes in a calibrated GraphModule and then finds the relevant observers.
      It then extracts the input information for each observer returns it
  
      Args
          model (GraphModule): The prepared and calibrated GraphModule with inserted ModelReportObservers
  
      Returns a dict mapping relevant module fqns (str) to a dict with keys:
          "input_activation_per_channel_max" : maps to the per_channel max values
          "input_activation_per_channel_min" : maps to the per_channel min values
          "input_activation_global_max" : maps to the global max recorded
          "input_activation_global_min" : maps to the global min recorded
      """
  
      # return dictionary mapping observer fqns to desired info
      input_info: Dict[str, Dict] = {}
  
      for fqn, module in model.named_modules():
          # if module is supported and it has a pre-observer
          if self._is_supported(module):
              # get pre observer for the module
              pre_obs = getattr(module, self.DEFAULT_PRE_OBSERVER_NAME)
  
              input_info[fqn] = {
                  self.ACTIVATION_PREFIX
                  + self.PER_CHANNEL_MAX_KEY: pre_obs.max_val,
                  self.ACTIVATION_PREFIX
                  + self.PER_CHANNEL_MIN_KEY: pre_obs.min_val,
                  self.ACTIVATION_PREFIX
                  + self.GLOBAL_MAX_KEY: max(pre_obs.max_val),
                  self.ACTIVATION_PREFIX
                  + self.GLOBAL_MIN_KEY: min(pre_obs.min_val),
              }
  
      return input_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 6 for calling the InputWeightEqualizationDetector obj's underlying member method code with example usage: obj._extract_input_info(model) and returns: input_info