code: def lookup(obj):
      if not hashable(obj):
          return None
      # Custom allow/disallow in graph takes precedence over the `torch_name_rule_map`.
      if callable(obj) and is_callable_disallowed(obj):
          return SkipFilesVariable
      if callable(obj) and is_callable_allowed(obj):
          return TorchInGraphFunctionVariable
      # Unwrap if the function is wrapped by functools.lru_cache or functools.wraps.
      if isinstance(obj, functools._lru_cache_wrapper) or (
          is_function(obj) and hasattr(obj, "__wrapped__")
      ):
          # TODO: Weird case, should not unwrap if it's wrapped as _VariableFunctionsClass.
          if not (
              hasattr(obj, "__qualname__")
              and str(obj.__qualname__).startswith(
                  "_VariableFunctionsClass"
              )
          ):
              obj = obj.__wrapped__
      rule = get_torch_obj_rule_map().get(obj, None)
      if rule is None and is_aten_op_or_tensor_method(obj):
          return TorchInGraphFunctionVariable
      else:
          return rule
  
imports: import builtins
  import copy
  import functools
  import importlib
  import itertools
  import operator
  import sys
  import types
  from collections import defaultdict
  from typing import Any, Callable, cast, Dict, List, Optional, Set, Union
  import torch
  from .utils import hashable, is_function, NP_SUPPORTED_MODULES
  from .variables import SkipFilesVariable, TorchCtxManagerClassVariable, TorchInGraphFunctionVariable
  from .variables.base import VariableTracker
label_desc: Use image node_id 19 for calling a global function with example usage: lookup(obj) and returns: None, SkipFilesVariable, TorchInGraphFunctionVariable, TorchInGraphFunctionVariable, rule