code: def test_box_whisker_hover(self):
      xs, ys = np.random.randint(0, 5, 100), np.random.randn(100)
      box = BoxWhisker((xs, ys), "A").sort().opts(tools=["hover"])
      plot = bokeh_renderer.get_plot(box)
      src = plot.handles["vbar_1_source"]
      ys = box.aggregate(function=np.median).dimension_values("y")
      hover_tool = plot.handles["hover"]
      self.assertEqual(src.data["y"], ys)
      self.assertIn(
          plot.handles["vbar_1_glyph_renderer"], hover_tool.renderers
      )
      self.assertIn(
          plot.handles["vbar_2_glyph_renderer"], hover_tool.renderers
      )
      self.assertIn(
          plot.handles["circle_1_glyph_renderer"], hover_tool.renderers
      )
  
file_path: holoviews/holoviews/tests/plotting/bokeh/test_boxwhiskerplot.py
imports: import datetime
  import numpy
  from bokeh.models import CategoricalColorMapper, ColumnDataSource, LinearColorMapper
  from holoviews.element import BoxWhisker
  from holoviews.plotting.bokeh.util import property_to_dict
  from .test_plot import TestBokehPlot, bokeh_renderer
label_desc: Use image node_id 2 for calling the TestBoxWhiskerPlot obj's underlying member method code with example usage: obj.test_box_whisker_hover() without return types