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: Returns whether the given module is supported for observers
  
  Args
      module: The module to check and ensure is supported
      insert: True if this is check for observer insertion, false if for report gen
  
  Returns True if the module is supported by observer, False otherwise
docstr_tok: ["Returns","whether","the","given","module","is","supported","for","observers","Args","module",":","The","module","to","check","and","ensure","is","supported","insert",":","True","if","this","is","check","for","observer","insertion",",","false","if","for","report","gen","Returns","True","if","the","module","is","supported","by","observer",",","False","otherwise"]
code: def _is_supported(
      self, module: nn.Module, insert: bool = False
  ) -> bool:
      r"""Returns whether the given module is supported for observers
  
      Args
          module: The module to check and ensure is supported
          insert: True if this is check for observer insertion, false if for report gen
  
      Returns True if the module is supported by observer, False otherwise
      """
      # check to see if module is of a supported type
      is_supported_type = (
          sum([type(module) is x for x in self.SUPPORTED_MODULES]) > 0
      )
  
      # this is check for observer insertion
      if insert:
          return is_supported_type
      else:
          # this is for report gen and we also need to check if it contains observers
          has_obs = hasattr(module, self.DEFAULT_PRE_OBSERVER_NAME)
          return is_supported_type and has_obs
  
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 2 for calling the InputWeightEqualizationDetector obj's underlying member method code with example usage: obj._is_supported(module, insert) and returns: is_supported_type, unknown