code: def _get_bounds_selection(self, x0dim, y0dim, x1dim, y1dim, **kwargs):
      from .geom import Rectangles
  
      (x0, x1), xcats, (y0, y1), ycats = self._get_selection(**kwargs)
      xsel = xcats or (x0, x1)
      ysel = ycats or (y0, y1)
  
      bbox = {
          x0dim.name: xsel,
          y0dim.name: ysel,
          x1dim.name: xsel,
          y1dim.name: ysel,
      }
      index_cols = kwargs.get("index_cols")
      if index_cols:
          selection = self.dataset.clone(
              datatype=["dataframe", "dictionary"]
          ).select(**bbox)
          selection_expr = self._get_index_expr(index_cols, selection)
          region_element = None
      else:
          x0expr = (dim(x0dim) >= x0) & (dim(x0dim) <= x1)
          y0expr = (dim(y0dim) >= y0) & (dim(y0dim) <= y1)
          x1expr = (dim(x1dim) >= x0) & (dim(x1dim) <= x1)
          y1expr = (dim(y1dim) >= y0) & (dim(y1dim) <= y1)
          selection_expr = x0expr & y0expr & x1expr & y1expr
          region_element = Rectangles([(x0, y0, x1, y1)])
      return selection_expr, bbox, region_element
  
imports: import sys
  import numpy
  import pandas
  from ..core import Dataset, NdOverlay, util
  from ..streams import Lasso, Selection1D, SelectionXY
  from ..util.transform import dim
  from .annotation import HSpan, VSpan
label_desc: Use image node_id 2 for calling the SelectionGeomExpr obj's underlying member method code with example usage: obj._get_bounds_selection(x0dim, y0dim, x1dim, y1dim) and returns: selection_expr,  bbox,  region_element