code: def contains_properly(polygons, points, mode="pairwise"):
      if mode == "quadtree":
          return _quadtree_contains_properly(points, polygons)
      elif mode == "pairwise":
          return _pairwise_contains_properly(points, polygons)
      else:
          # Use stack to convert the result to the same shape as quadtree's
          # result, name the columns appropriately, and return the
          # two-column DataFrame.
          bitmask_result = _brute_force_contains_properly(
              points, polygons
          )
          bitmask_result_df = bitmask_result.stack().reset_index()
          trues = bitmask_result_df[bitmask_result_df[0]]
          trues.columns = ["point_index", "part_index", "result"]
          return trues
  
file_path: cuspatial/python/cuspatial/cuspatial/core/binpreds/contains.py
imports: from math import ceil, sqrt
  import cudf
  from cudf import DataFrame, Series
  from cudf.core.column import as_column
  import cuspatial
  from cuspatial._lib.pairwise_point_in_polygon import pairwise_point_in_polygon
  from cuspatial._lib.point_in_polygon import point_in_polygon
  from cuspatial.utils.join_utils import pip_bitmap_column_to_binary_array
label_desc: Use image node_id 4 for calling a global function with example usage: contains_properly(polygons, points, mode) and returns: _quadtree_contains_properly, _pairwise_contains_properly, trues