code: def test_violin_simple(self):
      values = np.random.rand(100)
      violin = Violin(values).opts(violin_width=0.7)
      qmin, q1, q2, q3, qmax = (
          np.percentile(values, q=q) for q in range(0, 125, 25)
      )
      iqr = q3 - q1
      upper = min(q3 + 1.5 * iqr, np.nanmax(values))
      lower = max(q1 - 1.5 * iqr, np.nanmin(values))
      r1, r2 = violin.range(0)
      kde = univariate_kde(violin, cut=5)
      xs, ys = (kde.dimension_values(i) for i in range(2))
      ys = (ys / ys.max()) * (0.7 / 2.0)
      ys = [
          ("",) + (sign * y,)
          for sign, vs in ((-1, ys), (1, ys[::-1]))
          for y in vs
      ]
      kde = {"x": np.concatenate([xs, xs[::-1]]), "y": ys}
  
      plot = bokeh_renderer.get_plot(violin)
      self.assertEqual(plot.handles["x_range"].factors, [""])
      self.assertEqual(plot.handles["y_range"].start, r1)
      self.assertEqual(plot.handles["y_range"].end, r2)
      self.assertIn("scatter_1_glyph_renderer", plot.handles)
      self.assertIn("vbar_1_glyph_renderer", plot.handles)
      seg_source = plot.handles["segment_1_source"]
      self.assertEqual(seg_source.data["x"], [("", 0)])
      self.assertEqual(seg_source.data["y0"], [lower])
      self.assertEqual(seg_source.data["y1"], [upper])
      scatter_source = plot.handles["scatter_1_source"]
      self.assertEqual(scatter_source.data["x"], [("", 0)])
      self.assertEqual(scatter_source.data["y"], [q2])
      patch_source = plot.handles["patches_1_source"]
      self.assertEqual(patch_source.data["xs"], [kde["y"]])
      self.assertEqual(patch_source.data["ys"], [kde["x"]])
  
imports: from unittest import SkipTest
  import numpy
  from bokeh.models import CategoricalColorMapper, LinearColorMapper
  from holoviews.element import Violin
  from holoviews.operation.stats import univariate_kde
  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 2 for calling the TestBokehViolinPlot obj's underlying member method code with example usage: obj.test_violin_simple() without return types