class_docstr: NodePathTracer is an FX tracer that, for each operation, also records the
  name of the Node from which the operation originated. A node name here is
  a `.` separated path walking the hierarchy from top level module down to
  leaf operation or leaf module. The name of the top level module is not
  included as part of the node name. For example, if we trace a module whose
  forward method applies a ReLU module, the name for that node will simply
  be 'relu'.
  
  Some notes on the specifics:
      - Nodes are recorded to `self.node_to_qualname` which is a dictionary
        mapping a given Node object to its node name.
      - Nodes are recorded in the order which they are executed during
        tracing.
      - When a duplicate node name is encountered, a suffix of the form
        _{int} is added. The counter starts from 1.
docstr: Override of `fx.Tracer.call_module`
  This override:
  1) Stores away the qualified name of the caller for restoration later
  2) Adds the qualified name of the caller to
     `current_module_qualname` for retrieval by `create_proxy`
  3) Once a leaf module is reached, calls `create_proxy`
  4) Restores the caller's qualified name into current_module_qualname
docstr_tok: ["Override","of","`","fx.Tracer.call_module","`","This","override",":","1",")","Stores","away","the","qualified","name","of","the","caller","for","restoration","later","2",")","Adds","the","qualified","name","of","the","caller","to","`","current_module_qualname","`","for","retrieval","by","`","create_proxy","`","3",")","Once","a","leaf","module","is","reached",",","calls","`","create_proxy","`","4",")","Restores","the","caller","'s","qualified","name","into","current_module_qualname"]
code: def call_module(
      self, m: torch.nn.Module, forward: Callable, args, kwargs
  ):
      """
      Override of `fx.Tracer.call_module`
      This override:
      1) Stores away the qualified name of the caller for restoration later
      2) Adds the qualified name of the caller to
         `current_module_qualname` for retrieval by `create_proxy`
      3) Once a leaf module is reached, calls `create_proxy`
      4) Restores the caller's qualified name into current_module_qualname
      """
      old_qualname = self.current_module_qualname
      try:
          module_qualname = self.path_of_module(m)
          self.current_module_qualname = module_qualname
          if not self.is_leaf_module(m, module_qualname):
              out = forward(*args, **kwargs)
              return out
          return self.create_proxy(
              "call_module", module_qualname, args, kwargs
          )
      finally:
          self.current_module_qualname = old_qualname
  
imports: import inspect
  import math
  import re
  import warnings
  from collections import OrderedDict
  from copy import deepcopy
  from itertools import chain
  from typing import Any, Callable, Dict, List, Optional, Tuple, Union
  import torch
  import torchvision
  from torch import fx, nn
  from torch.fx.graph_module import _copy_attr
label_desc: Use image node_id 2 for calling the NodePathTracer obj's underlying member method code with example usage: obj.call_module(m, forward, args, kwargs) and returns: self, out