code: def getargspec(fn):
      """
      Similar to Python 2's :py:func:`inspect.getargspec` but:
      - In Python 3 uses ``getfullargspec`` to avoid ``DeprecationWarning``.
      - For builtin functions like ``torch.matmul`` or ``numpy.matmul``, falls back to
        attempting to parse the function docstring, assuming torch-style or numpy-style.
      """
      assert callable(fn)
      try:
          (
              args,
              vargs,
              kwargs,
              defaults,
              _,
              _,
              _,
          ) = inspect.getfullargspec(fn)
      except TypeError:
          # Fall back to attempting to parse a PyTorch/NumPy-style docstring.
          match = re.match(
              r"\s*{}\(([^)]*)\)".format(fn.__name__), fn.__doc__
          )
          if match is None:
              raise
          parts = re.sub(r"[\[\]]", "", match.group(1)).split(", ")
          args = [a.split("=")[0] for a in parts if a not in ["/", "*"]]
          if not all(re.match(r"^[^\d\W]\w*\Z", arg) for arg in args):
              raise
          vargs = None
          kwargs = None
          defaults = ()  # Ignore defaults.
      return args, vargs, kwargs, defaults
  
imports: import functools
  import inspect
  import pprint
  import re
  import sys
  import numpy
label_desc: Use image node_id 1 for calling a global function with example usage: getargspec(fn) and returns: args,  vargs,  kwargs,  defaults