class_docstr: Shadow module attaches the float module to its matching quantized module
  as the shadow. Then it uses Logger module to process the outputs of both
  modules.
  
  Args:
      q_module: module quantized from float_module that we want to shadow
      float_module: float module used to shadow q_module
      logger_cls: type of logger used to process the outputs of q_module and
          float_module. ShadowLogger or custom loggers can be used.
code: def __init__(self, q_module, float_module, logger_cls):
      super().__init__()
      self.orig_module = q_module
      self.shadow_module = float_module
      self.dequant = nnq.DeQuantize()
      self.logger = logger_cls()
  
imports: import torch
  import torch.nn
  import torch.ao.nn.quantized
  import torch.ao.nn.quantized.dynamic
  from torch.ao.quantization import prepare
  from typing import Dict, List, Optional, Any, Union, Callable, Set
  from torch.ao.quantization.quantization_mappings import get_default_compare_output_module_list
label_desc: Use image node_id 1 to create a new Shadow object from inherited base classes: nn with example: obj = Shadow(q_module, float_module, logger_cls)