code: def get_parse_error(code):
      """
      Checks code for ambiguous tabs or other basic parsing issues.
  
      :param code: a string containing a file's worth of Python code
      :returns: a string containing a description of the first parse error encountered,
                or None if the code is ok
      """
      # note that this uses non-public elements from stdlib's tabnanny, because tabnanny
      # is (very frustratingly) written only to be used as a script, but using it that way
      # in this context requires writing temporarily files, running subprocesses, blah blah blah
      code_buffer = StringIO(code)
      try:
          tabnanny.process_tokens(
              tokenize.generate_tokens(code_buffer.readline)
          )
      except tokenize.TokenError as err:
          return "Could not parse code: %s" % err
      except IndentationError as err:
          return "Indentation error: %s" % err
      except tabnanny.NannyNag as err:
          return "Ambiguous tab at line %d; line is '%s'." % (
              err.get_lineno(),
              err.get_line(),
          )
      return None
  
imports: from __future__ import absolute_import, print_function, division
  import difflib
  import operator
  import os
  import string
  from subprocess import Popen, PIPE
  import sys
  import tabnanny
  import tokenize
  import reindent
  from six import StringIO
label_desc: Use image node_id 1 for calling a global function with example usage: get_parse_error(code) and returns: None, unknown, unknown, unknown