code: def test_chord_edges_categorically_colormapped(self):
      g = self.chord.opts(
          edge_color_index="start", edge_cmap=["#FFFFFF", "#000000"]
      )
      plot = bokeh_renderer.get_plot(g)
      cmapper = plot.handles["edge_colormapper"]
      edge_source = plot.handles["multi_line_1_source"]
      glyph = plot.handles["multi_line_1_glyph"]
      self.assertIsInstance(cmapper, CategoricalColorMapper)
      self.assertEqual(
          cmapper.palette, ["#FFFFFF", "#000000", "#FFFFFF"]
      )
      self.assertEqual(cmapper.factors, ["0", "1", "2"])
      self.assertEqual(edge_source.data["start_str__"], ["0", "0", "1"])
      self.assertEqual(
          property_to_dict(glyph.line_color),
          {"field": "start_str__", "transform": cmapper},
      )
  
imports: import numpy
  from bokeh.models import EdgesAndLinkedNodes, NodesAndLinkedEdges, NodesOnly, Patches
  from bokeh.models.mappers import CategoricalColorMapper, LinearColorMapper
  from holoviews.core.data import Dataset
  from holoviews.element import Chord, Graph, Nodes, TriMesh, VLine, circular_layout
  from holoviews.plotting.bokeh.util import property_to_dict
  from holoviews.util.transform import dim
  from .test_plot import TestBokehPlot, bokeh_renderer
label_desc: Use image node_id 8 for calling the TestBokehChordPlot obj's underlying member method code with example usage: obj.test_chord_edges_categorically_colormapped() without return types