code: def test_stream_bad_data(self) -> None:
      ds = bms.ColumnDataSource(data=dict(a=[10], b=[20]))
      with pytest.raises(
          ValueError,
          match=r"Must stream updates to all existing columns \(missing: a, b\)",
      ):
          ds.stream(dict())
      with pytest.raises(
          ValueError,
          match=r"Must stream updates to all existing columns \(missing: b\)",
      ):
          ds.stream(dict(a=[10]))
      with pytest.raises(
          ValueError,
          match=r"Must stream updates to all existing columns \(extra: x\)",
      ):
          ds.stream(dict(a=[10], b=[10], x=[10]))
      with pytest.raises(
          ValueError,
          match=r"Must stream updates to all existing columns \(missing: b, extra: x\)",
      ):
          ds.stream(dict(a=[10], x=[10]))
      with pytest.raises(
          ValueError,
          match=r"All streaming column updates must be the same length",
      ):
          ds.stream(dict(a=[10], b=[10, 20]))
  
      with pytest.raises(
          ValueError,
          match=r"stream\(...\) only supports 1d sequences, got ndarray with size \(.*",
      ):
          ds.stream(dict(a=[10], b=np.ones((1, 1))))
  
imports: from __future__ import annotations
  import pytest
  import datetime
  import io
  import numpy
  import pandas
  from bokeh.models import Selection
  from bokeh.util.serialization import convert_datetime_array
  from bokeh.util.warnings import BokehDeprecationWarning
  import bokeh.models.sources
label_desc: Use image node_id 26 for calling the TestColumnDataSource obj's underlying member method code with example usage: obj.test_stream_bad_data() without return types