code: def getfslineno(obj):
      """Return source location (path, lineno) for the given object.
      If the source cannot be determined return ("", -1).
  
      The line number is 0-based.
      """
      from .code import Code
  
      try:
          code = Code(obj)
      except TypeError:
          try:
              fn = inspect.getsourcefile(obj) or inspect.getfile(obj)
          except TypeError:
              return "", -1
  
          fspath = fn and py.path.local(fn) or None
          lineno = -1
          if fspath:
              try:
                  _, lineno = findsource(obj)
              except IOError:
                  pass
      else:
          fspath = code.path
          lineno = code.firstlineno
      assert isinstance(lineno, int)
      return fspath, lineno
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import ast
  import inspect
  import linecache
  import sys
  import textwrap
  import tokenize
  import warnings
  from ast import PyCF_ONLY_AST
  from bisect import bisect_right
  import py
  import six
label_desc: Use image node_id 2 for calling a global function with example usage: getfslineno(obj) and returns: fspath,  lineno, str,  unknown