code: def linkcode_resolve(domain, info):
      """
      Determine the URL corresponding to Python object
      """
      if domain != "py":
          return None
  
      modname = info["module"]
      fullname = info["fullname"]
  
      submod = sys.modules.get(modname)
      if submod is None:
          return None
  
      obj = submod
      for part in fullname.split("."):
          try:
              obj = getattr(obj, part)
          except Exception:
              return None
  
      # strip decorators, which would resolve to the source of the decorator
      # possibly an upstream bug in getsourcefile, bpo-1764286
      try:
          unwrap = inspect.unwrap
      except AttributeError:
          pass
      else:
          obj = unwrap(obj)
  
      try:
          fn = inspect.getsourcefile(obj)
      except Exception:
          fn = None
      if not fn:
          return None
  
      try:
          source, lineno = inspect.getsourcelines(obj)
      except Exception:
          lineno = None
  
      if lineno:
          linespec = "#L%d-L%d" % (lineno, lineno + len(source) - 1)
      else:
          linespec = ""
  
      fn = relpath(fn, start=dirname(aif360.__file__))
  
      return (
          "https://github.com/Trusted-AI/AIF360/blob/master/aif360/%s%s"
          % (fn, linespec)
      )
  
file_path: AIF360/docs/source/conf.py
imports: from datetime import datetime
  import os
  import sys
  import aif360
  import fairlearn
  import inspect
  from os.path import relpath, dirname
label_desc: Use image node_id 2 for calling a global function with example usage: linkcode_resolve(domain, info) and returns: unknown, None, None, None, None