code: def _get_lasso_selection(
      self, x0dim, y0dim, x1dim, y1dim, geometry, **kwargs
  ):
      from .path import Path
  
      bbox = {
          x0dim.name: geometry[:, 0],
          y0dim.name: geometry[:, 1],
          x1dim.name: geometry[:, 0],
          y1dim.name: geometry[:, 1],
      }
      expr = dim.pipe(
          spatial_geom_select,
          x0dim,
          dim(y0dim),
          dim(x1dim),
          dim(y1dim),
          geometry=geometry,
      )
      index_cols = kwargs.get("index_cols")
      if index_cols:
          selection = self[expr.apply(self)]
          selection_expr = self._get_index_expr(index_cols, selection)
          return selection_expr, bbox, None
      return (
          expr,
          bbox,
          Path([np.concatenate([geometry, geometry[:1]])]),
      )
  
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 3 for calling the SelectionGeomExpr obj's underlying member method code with example usage: obj._get_lasso_selection(x0dim, y0dim, x1dim, y1dim, geometry) and returns: expr,  bbox,  Path, selection_expr,  bbox,  None