code: def points_in_boxes_part(points, boxes):
      """Find the box in which each point is (CUDA).
  
      Args:
          points (torch.Tensor): [B, M, 3], [x, y, z] in LiDAR/DEPTH coordinate
          boxes (torch.Tensor): [B, T, 7],
              num_valid_boxes <= T, [x, y, z, x_size, y_size, z_size, rz] in
              LiDAR/DEPTH coordinate, (x, y, z) is the bottom center
  
      Returns:
          box_idxs_of_pts (torch.Tensor): (B, M), default background = -1
      """
      assert points.shape[0] == boxes.shape[0], (
          "Points and boxes should have the same batch size, "
          f"but got {points.shape[0]} and {boxes.shape[0]}"
      )
      assert boxes.shape[2] == 7, (
          "boxes dimension should be 7, "
          f"but got unexpected shape {boxes.shape[2]}"
      )
      assert points.shape[2] == 3, (
          "points dimension should be 3, "
          f"but got unexpected shape {points.shape[2]}"
      )
      batch_size, num_points, _ = points.shape
  
      box_idxs_of_pts = points.new_zeros(
          (batch_size, num_points), dtype=torch.int
      ).fill_(-1)
  
      # If manually put the tensor 'points' or 'boxes' on a device
      # which is not the current device, some temporary variables
      # will be created on the current device in the cuda op,
      # and the output will be incorrect.
      # Therefore, we force the current device to be the same
      # as the device of the tensors if it was not.
      # Please refer to https://github.com/open-mmlab/mmdetection3d/issues/305
      # for the incorrect output before the fix.
      points_device = points.get_device()
      assert (
          points_device == boxes.get_device()
      ), "Points and boxes should be put on the same device"
      if torch.cuda.current_device() != points_device:
          torch.cuda.set_device(points_device)
  
      ext_module.points_in_boxes_part_forward(
          boxes.contiguous(), points.contiguous(), box_idxs_of_pts
      )
  
      return box_idxs_of_pts
  
imports: import torch
  from ..utils import ext_loader
label_desc: Use image node_id 1 for calling a global function with example usage: points_in_boxes_part(points, boxes) and returns: box_idxs_of_pts