docstr: Computes an empty grid to position the plots on by expanding
  any AdjointLayouts into multiple rows and columns.
code: def _compute_grid(self):
      """
      Computes an empty grid to position the plots on by expanding
      any AdjointLayouts into multiple rows and columns.
      """
      widths = []
      for c in range(self.cols):
          c_widths = []
          for r in range(self.rows):
              subplot = self.subplots.get((r, c), None)
              nsubplots = 1 if subplot is None else len(subplot.layout)
              c_widths.append(2 if nsubplots > 1 else 1)
          widths.append(max(c_widths))
  
      heights = []
      for r in range(self.rows):
          r_heights = []
          for c in range(self.cols):
              subplot = self.subplots.get((r, c), None)
              nsubplots = 1 if subplot is None else len(subplot.layout)
              r_heights.append(2 if nsubplots > 2 else 1)
          heights.append(max(r_heights))
  
      # Generate empty grid
      rows = sum(heights)
      cols = sum(widths)
      grid = [[None] * cols for _ in range(rows)]
  
      return grid
  
imports: from collections import defaultdict
  from itertools import groupby
  import numpy
  import param
  from bokeh.layouts import gridplot
  from bokeh.models import Axis, ColorBar, Column, ColumnDataSource, Div, Legend, Row, Title
  from bokeh.models.layouts import TabPanel, Tabs
  from ...core import AdjointLayout, Element, Empty, GridSpace, HoloMap, Layout, NdLayout, Store
  from ...core.options import SkipRendering
  from ...core.util import _STANDARD_CALENDARS, cftime_to_timestamp, cftime_types, get_method_owner, is_param_method, unique_iterator, wrap_tuple, wrap_tuple_streams
  from ...selection import NoOpSelectionDisplay
  from ..links import Link
  from ..plot import CallbackPlot, DimensionedPlot, GenericAdjointLayoutPlot, GenericCompositePlot, GenericElementPlot, GenericLayoutPlot, GenericOverlayPlot
  from ..util import attach_streams, collate, displayable
  from .links import LinkCallback
  from .util import cds_column_replace, decode_bytes, empty_plot, filter_toolboxes, get_default, make_axis, merge_tools, select_legends, sync_legends, theme_attr_json, update_shared_sources
label_desc: Use image node_id 5 for calling the LayoutPlot obj's underlying member method code with example usage: obj._compute_grid() and returns: grid