code: def test_bounds_layout(self):
      bounds1 = Bounds((0, 0, 1, 1))
      bounds2 = Bounds((0, 0, 2, 2))
      bounds3 = Bounds((0, 0, 3, 3))
      bounds4 = Bounds((0, 0, 4, 4))
  
      layout = (bounds1 + bounds2 + bounds3 + bounds4).cols(2)
  
      state = self._get_plot_state(layout)
  
      shapes = state["layout"]["shapes"]
      self.assertEqual(len(shapes), 4)
  
      # Check shapes
      self.assert_path_shape_element(
          shapes[0], bounds3, xref="x", yref="y"
      )
      self.assert_path_shape_element(
          shapes[1], bounds4, xref="x2", yref="y2"
      )
      self.assert_path_shape_element(
          shapes[2], bounds1, xref="x3", yref="y3"
      )
      self.assert_path_shape_element(
          shapes[3], bounds2, xref="x4", yref="y4"
      )
  
imports: import numpy
  from holoviews.element import Bounds, Box, HLine, Path, Rectangles, Segments, Tiles, VLine
  from .test_plot import TestPlotlyPlot
label_desc: Use image node_id 2 for calling the TestBounds obj's underlying member method code with example usage: obj.test_bounds_layout() without return types