code: def batched_nms_rotated(
      boxes: torch.Tensor,
      scores: torch.Tensor,
      idxs: torch.Tensor,
      iou_threshold: float,
  ):
      """
      Performs non-maximum suppression in a batched fashion.
  
      Each index value correspond to a category, and NMS
      will not be applied between elements of different categories.
  
      Args:
          boxes (Tensor[N, 5]):
             boxes where NMS will be performed. They
             are expected to be in (x_ctr, y_ctr, width, height, angle_degrees) format
          scores (Tensor[N]):
             scores for each one of the boxes
          idxs (Tensor[N]):
             indices of the categories for each one of the boxes.
          iou_threshold (float):
             discards all overlapping boxes
             with IoU < iou_threshold
  
      Returns:
          Tensor:
              int64 tensor with the indices of the elements that have been kept
              by NMS, sorted in decreasing order of scores
      """
      assert boxes.shape[-1] == 5
  
      if boxes.numel() == 0:
          return torch.empty(
              (0,), dtype=torch.int64, device=boxes.device
          )
      boxes = (
          boxes.float()
      )  # fp16 does not have enough range for batched NMS
      # Strategy: in order to perform NMS independently per class,
      # we add an offset to all the boxes. The offset is dependent
      # only on the class idx, and is large enough so that boxes
      # from different classes do not overlap
  
      # Note that batched_nms in torchvision/ops/boxes.py only uses max_coordinate,
      # which won't handle negative coordinates correctly.
      # Here by using min_coordinate we can make sure the negative coordinates are
      # correctly handled.
      max_coordinate = (
          torch.max(boxes[:, 0], boxes[:, 1])
          + torch.max(boxes[:, 2], boxes[:, 3]) / 2
      ).max()
      min_coordinate = (
          torch.min(boxes[:, 0], boxes[:, 1])
          - torch.max(boxes[:, 2], boxes[:, 3]) / 2
      ).min()
      offsets = idxs.to(boxes) * (max_coordinate - min_coordinate + 1)
      boxes_for_nms = (
          boxes.clone()
      )  # avoid modifying the original values in boxes
      boxes_for_nms[:, :2] += offsets[:, None]
      keep = nms_rotated(boxes_for_nms, scores, iou_threshold)
      return keep
  
imports: import torch
  from torchvision.ops import boxes
  from torchvision.ops import nms
label_desc: Use image node_id 3 for calling a global function with example usage: batched_nms_rotated(boxes, scores, idxs, iou_threshold) and returns: keep, torch