docstr: Paint the given stream_items in to visualizer. If visualizer is dirty then return False else True.
          
docstr_tok: ["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."""
  
      vals = self._extract_vals(stream_items)
      if not len(vals):
          return True  # not dirty
  
      line = stream_vis.ax.get_lines()[-1]
      if not self.is_3d:
          xdata, ydata = line.get_data()
          zdata = []
      else:
          (
              xdata,
              ydata,
              zdata,
          ) = (
              line._verts3d
          )  # in future use get_data_3d(), these are numpy arrays
          xdata, ydata, zdata = list(xdata), list(ydata), list(zdata)
      anndata, txtdata, clrdata = [], [], []
      lows, highs = [], []  # confidence interval
  
      unpacker = lambda a0=None, a1=None, a2=None, a3=None, a4=None, a5=None, a6=None, a7=None, *_: (
          a0,
          a1,
          a2,
          a3,
          a4,
          a5,
          a6,
          a7,
      )
  
      # add each value in trace data
      # each value is of the form:
      # 2D graphs:
      #   y
      #   x [, y [,low, [, high [,annotation [, text [, color]]]]]]
      #   y
      #   x [, y [, z, [,low, [, high [annotation [, text [, color]]]]]
      for val in vals:
          # set defaults
          x, y, z = len(xdata), None, None
          low, high = None, None
          ann, txt, clr = None, None, None
  
          # if val turns out to be array-like, extract x,y
          val_l = utils.is_scaler_array(val)
          if val_l >= 0:
              if self.is_3d:
                  x, y, z, low, high, ann, txt, clr = unpacker(*val)
              else:
                  x, y, low, high, ann, txt, clr, _ = unpacker(*val)
          elif isinstance(val, PointData):
              x, y, z, low, high, ann, txt, clr = (
                  val.x,
                  val.y,
                  val.z,
                  val.low,
                  val.high,
                  val.annotation,
                  val.text,
                  val.color,
              )
          else:
              y = val
  
          if ann is not None:
              ann = str(ann)
          if txt is not None:
              txt = str(txt)
  
          xdata.append(x)
          ydata.append(y)
          zdata.append(z)
          if low is not None:
              lows.append(low)
          if high is not None:
              highs.append(high)
          if txt is not None:
              txtdata.append(txt)
          if clr is not None:
              clrdata.append(clr)
          if ann:  # TODO: yref should be y2 for different y axis
              anndata.append(
                  dict(
                      x=x,
                      y=y,
                      xref="x",
                      yref="y",
                      text=ann,
                      showarrow=False,
                  )
              )
  
      if not self.is_3d:
          line.set_data(xdata, ydata)
      else:
          # in future use set_data_3d
          line._verts3d = (xdata, ydata, zdata)
          line.stale = True
  
      if stream_vis.fill_between_col is not None:
          stream_vis.fill_between_col.remove()
      if len(lows) > 0 and len(highs) > 0:
          stream_vis.ax.fill_between(
              xdata, highs, lows, color=stream_vis.color, alpha=0.2
          )
      for ann in anndata:
          stream_vis.xylabel_refs.append(
              stream_vis.ax.text(ann["x"], ann["y"], ann["text"])
          )
  
      stream_vis.ax.relim()
      stream_vis.ax.autoscale_view(True, True, True)
  
      return False
  
file_path: tensorwatch/tensorwatch/mpl/line_plot.py
imports: from .base_mpl_plot import BaseMplPlot
  from ..None import image_utils
  from ..None import utils
  import numpy
  from ..lv_types import PointData
label_desc: Use image node_id 4 for calling the LinePlot obj's underlying member method code with example usage: obj._show_stream_items(stream_vis, stream_items) and returns: False, True