code: def _process_sequence_literals(
      glyphclass, kwargs, source, is_user_source
  ):
      incompatible_literal_spec_values = []
      dataspecs = glyphclass.dataspecs()
      for var, val in kwargs.items():
          # ignore things that are not iterable
          if not isinstance(val, Iterable):
              continue
  
          # pass dicts (i.e., values or fields) on as-is
          if isinstance(val, dict):
              continue
  
          # let any non-dataspecs do their own validation (e.g., line_dash properties)
          if var not in dataspecs:
              continue
  
          # strings sequences are handled by the dataspec as-is
          if isinstance(val, str):
              continue
  
          # similarly colorspecs handle color tuple sequences as-is
          if isinstance(dataspecs[var], ColorSpec) and dataspecs[
              var
          ].is_color_tuple_shape(val):
              continue
  
          if isinstance(val, np.ndarray):
              if isinstance(dataspecs[var], ColorSpec):
                  if (
                      val.dtype == "uint32" and val.ndim == 1
                  ):  # 0xRRGGBBAA
                      pass  # TODO: handle byteorder
                  elif val.dtype == "uint8" and val.ndim == 1:  # greys
                      pass
                  elif (
                      val.dtype.kind == "U" and val.ndim == 1
                  ):  # CSS strings
                      pass  # TODO: currently this gets converted to list[str] in the serializer
                  elif (
                      (val.dtype == "uint8" or val.dtype.kind == "f")
                      and val.ndim == 2
                      and val.shape[1] in (3, 4)
                  ):  # RGB/RGBA
                      pass
                  else:
                      raise RuntimeError(
                          "Color columns need to be of type uint32[N], uint8[N] or uint8/float[N, {3, 4}]"
                          f" ({var} is {val.dtype}[{', '.join(map(str, val.shape))}]"
                      )
              elif val.ndim != 1:
                  raise RuntimeError(
                      f"Columns need to be 1D ({var} is not)"
                  )
  
          if is_user_source:
              incompatible_literal_spec_values.append(var)
          else:
              source.add(val, name=var)
              kwargs[var] = var
  
      return incompatible_literal_spec_values
  
file_path: bokeh/src/bokeh/plotting/_renderer.py
imports: from __future__ import annotations
  import logging
  import sys
  from collections.abc import Iterable
  import numpy
  from ..core.properties import ColorSpec
  from ..models import ColumnarDataSource, ColumnDataSource, GlyphRenderer
  from ..util.strings import nice_join
  from ._legends import pop_legend_kwarg, update_legend
label_desc: Use image node_id 7 for calling a global function with example usage: _process_sequence_literals(glyphclass, kwargs, source, is_user_source) and returns: incompatible_literal_spec_values