code: def test_shared_multi_axes(self):
      curve1A = Curve([9, 8, 7, 6, 5], vdims="A")
      curve2B = Curve([1, 2, 3], vdims="B")
      overlay1 = (curve1A * curve2B).opts(multi_y=True)
  
      curve3A = Curve([19, 18, 17, 16, 15], vdims="A")
      curve4B = Curve([11, 12, 13], vdims="B")
      overlay2 = (curve3A * curve4B).opts(multi_y=True)
  
      plot = bokeh_renderer.get_plot(overlay1 + overlay2)
      plot = plot.subplots[(0, 1)].subplots["main"]
      y_range = plot.handles["y_range"]
      extra_y_ranges = plot.handles["extra_y_ranges"]
  
      self.assertEqual((y_range.start, y_range.end), (5, 19))
      self.assertEqual(
          (extra_y_ranges["B"].start, extra_y_ranges["B"].end), (1, 13)
      )
  
imports: from bokeh.models import LinearAxis, LinearScale, LogAxis, LogScale
  from holoviews.element import Curve
  from ...utils import LoggingComparisonTestCase
  from .test_plot import TestBokehPlot, bokeh_renderer
label_desc: Use image node_id 16 for calling the TestCurveTwinAxes obj's underlying member method code with example usage: obj.test_shared_multi_axes() without return types