code: def default_grid(n_items, max_cols=4, min_cols=3):  # noqa: D202
      
  
      def in_bounds(val):
          return np.clip(val, min_cols, max_cols)
  
      if n_items <= max_cols:
          return 1, n_items
      ideal = in_bounds(round(n_items ** 0.5))
  
      for offset in (0, 1, -1, 2, -2):
          cols = in_bounds(ideal + offset)
          rows, extra = divmod(n_items, cols)
          if extra == 0:
              return rows, cols
      return n_items // ideal + 1, ideal
docs: Make a grid for subplots.
  
      Tries to get as close to sqrt(n_items) x sqrt(n_items) as it can,
      but allows for custom logic
  
      Parameters
      ----------
      n_items : int
          Number of panels required
      max_cols : int
          Maximum number of columns, inclusive
      min_cols : int
          Minimum number of columns, inclusive
  
      Returns
      -------
      (int, int)
          Rows and columns, so that rows * columns >= n_items