code: def interpret(source, frame, should_fail=False):
      module = Interpretable(parse(source, "exec").node)
      # print "got module", module
      if isinstance(frame, types.FrameType):
          frame = py.code.Frame(frame)
      try:
          module.run(frame)
      except Failure:
          e = sys.exc_info()[1]
          return getfailure(e)
      except passthroughex:
          raise
      except:
          import traceback
  
          traceback.print_exc()
      if should_fail:
          return (
              "(assertion failed, but when it was re-run for "
              "printing intermediate values, it did not fail.  Suggestions: "
              "compute assert expression before the assert or use --nomagic)"
          )
      else:
          return None
  
imports: import py
  import sys, inspect
  from compiler import parse, ast, pycodegen
  from py._code.assertion import BuiltinAssertionError, _format_explanation
  import types
label_desc: Use image node_id 4 for calling a global function with example usage: interpret(source, frame, should_fail) and returns: str, None, getfailure