class_docstr: Graphical interface for auditing image comparison tests.
code: def test(self, im1, im2, message):
      self.show()
      self.console.write("------------------")
      self.console.write(message)
      if im2 is None:
          self.console.write(
              "Image1: %s %s   Image2: [no standard]"
              % (im1.shape, im1.dtype)
          )
          im2 = np.zeros((1, 1, 3), dtype=np.ubyte)
      else:
          self.console.write(
              "Image1: %s %s   Image2: %s %s"
              % (im1.shape, im1.dtype, im2.shape, im2.dtype)
          )
      self.console.write("(P)ass or (F)ail this test?")
      self.views[0].image.set_data(im1)
      self.views[1].image.set_data(im2)
      diff = make_diff_image(im1, im2)
  
      self.views[2].image.set_data(diff)
      self.views[0].camera.set_range()
  
      while True:
          self.app.process_events()
          if self.last_key is None:
              pass
          elif self.last_key.lower() == "p":
              self.console.write("PASS")
              break
          elif self.last_key.lower() in ("f", "esc"):
              self.console.write("FAIL")
              raise Exception("User rejected test result.")
          time.sleep(0.03)
  
      for v in self.views:
          v.image.set_data(np.zeros((1, 1, 3), dtype=np.ubyte))
  
imports: import time
  import os
  import sys
  import inspect
  import base64
  from subprocess import check_call, CalledProcessError
  import numpy
  from http.client import HTTPConnection
  from urllib.parse import urlencode
  from ..None import scene, config
  from ..io import read_png, write_png
  from ..gloo.util import _screenshot
  from ..util import run_subprocess
  from .None import IS_CI
label_desc: Use image node_id 2 for calling the ImageTester obj's underlying member method code with example usage: obj.test(im1, im2, message) without return types