code: def test_multi_axis_rangexy(page, port):
      c1 = Curve(np.arange(100).cumsum(), vdims="y")
      c2 = Curve(-np.arange(100).cumsum(), vdims="y2")
      s1 = RangeXY(source=c1)
      s2 = RangeXY(source=c2)
  
      overlay = (c1 * c2).opts(multi_y=True)
  
      pn_scatter = HoloViews(overlay)
  
      serve_and_wait(pn_scatter, port=port)
      page.goto(f"http://localhost:{port}")
  
      hv_plot = page.locator(".bk-events")
  
      expect(hv_plot).to_have_count(1)
  
      bbox = hv_plot.bounding_box()
      hv_plot.click()
  
      page.mouse.move(bbox["x"] + 100, bbox["y"] + 100)
      page.mouse.down()
      page.mouse.move(bbox["x"] + 150, bbox["y"] + 150, steps=5)
      page.mouse.up()
  
      expected_xrange = (-35.1063829787234, 63.89361702127659)
      expected_yrange1 = (717.2448979591848, 6657.244897959185)
      expected_yrange2 = (-4232.7551020408155, 1707.2448979591848)
      wait_until(
          lambda: (
              s1.x_range == expected_xrange
              and s1.y_range == expected_yrange1
              and s2.y_range == expected_yrange2
          ),
          page,
      )
  
file_path: holoviews/holoviews/tests/ui/bokeh/test_callback.py
imports: import time
  import numpy
  import pytest
  import panel
  from panel.pane.holoviews import HoloViews
  from panel.tests.util import serve_and_wait, wait_until
  import holoviews
  from holoviews import Curve, DynamicMap, Scatter
  from holoviews.streams import BoundsXY, Lasso, RangeXY
label_desc: Use image node_id 4 for calling a global function with example usage: test_multi_axis_rangexy(page, port) without return types