code: def points_in_boxes_all(points, boxes):
      """Find all boxes 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],
              (x, y, z) is the bottom center.
  
      Returns:
          box_idxs_of_pts (torch.Tensor): (B, M, T), default background = 0.
      """
      assert boxes.shape[0] == points.shape[0], (
          "Points and boxes should have the same batch size, "
          f"but got {boxes.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
      num_boxes = boxes.shape[1]
  
      box_idxs_of_pts = points.new_zeros(
          (batch_size, num_points, num_boxes), dtype=torch.int
      ).fill_(0)
  
      # Same reason as line 25-32
      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_all_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 3 for calling a global function with example usage: points_in_boxes_all(points, boxes) and returns: box_idxs_of_pts