docstr: Paint the given stream_items in to visualizer. If visualizer is dirty then return False else True.
          
code: def _show_stream_items(self, stream_vis, stream_items):
      """Paint the given stream_items in to visualizer. If visualizer is dirty then return False else True."""
  
      # as we repaint each image plot, select last if multiple events were pending
      stream_item = None
      for er in reversed(stream_items):
          if not (er.ended or er.value is None):
              stream_item = er
              break
      if stream_item is None:
          return True
  
      row, col, i = 0, 0, 0
      dirty = False
      # stream_item.value is expected to be ImagePlotItems
      for image_list in stream_item.value:
          # convert to imshow compatible, stitch images
          images = [
              image_utils.to_imshow_array(
                  img, stream_vis.img_width, stream_vis.img_height
              )
              for img in image_list.images
              if img is not None
          ]
          img_viz = image_utils.stitch_horizontal(images, width_dim=1)
  
          # resize if requested
          if stream_vis.viz_img_scale is not None:
              import skimage.transform  # expensive import done on demand
  
              if isinstance(img_viz, np.ndarray) and np.issubdtype(
                  img_viz.dtype, np.floating
              ):
                  img_viz = img_viz.clip(
                      -1, 1
                  )  # some MNIST images have out of range values causing exception in sklearn
              img_viz = skimage.transform.rescale(
                  img_viz,
                  (stream_vis.viz_img_scale, stream_vis.viz_img_scale),
                  mode="reflect",
                  preserve_range=False,
              )
  
          # create subplot if it doesn't exist
          ax = stream_vis.axs[row][col]
          if ax is None:
              ax = stream_vis.axs[row][col] = self.figure.add_subplot(
                  stream_vis.rows, stream_vis.cols, i + 1
              )
              ax.set_xticks([])
              ax.set_yticks([])
  
          cmap = image_list.cmap or (
              "Greys"
              if stream_vis.colormap is None and len(img_viz.shape) == 2
              else stream_vis.colormap
          )
  
          stream_vis.ax_imgs[row][col] = ax.imshow(
              img_viz,
              interpolation="none",
              cmap=cmap,
              alpha=image_list.alpha,
          )
          dirty = True
  
          # set title
          title = image_list.title
          if len(title) > 12:  # wordwrap if too long
              title = (
                  utils.wrap_string(title) if len(title) > 24 else title
              )
              fontsize = 8
          else:
              fontsize = 12
          ax.set_title(title, fontsize=fontsize)  #'fontweight': 'light'
  
          # ax.autoscale_view() # not needed
          col = col + 1
          if col >= stream_vis.cols:
              col = 0
              row = row + 1
              if row >= stream_vis.rows:
                  break
          i += 1
  
      return not dirty
  
file_path: tensorwatch/tensorwatch/mpl/image_plot.py
imports: from .base_mpl_plot import BaseMplPlot
  from ..None import utils, image_utils
  import numpy
label_desc: Use image node_id 3 for calling the ImagePlot obj's underlying member method code with example usage: obj._show_stream_items(stream_vis, stream_items) and returns: unknown, True