code: def bbox_iou(
      box1, box2, x1y1x2y2=True, GIoU=False, DIoU=False, CIoU=False
  ):
      # Returns the IoU of box1 to box2. box1 is 4, box2 is nx4
      box2 = box2.t()
  
      # Get the coordinates of bounding boxes
      if x1y1x2y2:  # x1, y1, x2, y2 = box1
          b1_x1, b1_y1, b1_x2, b1_y2 = (
              box1[0],
              box1[1],
              box1[2],
              box1[3],
          )
          b2_x1, b2_y1, b2_x2, b2_y2 = (
              box2[0],
              box2[1],
              box2[2],
              box2[3],
          )
      else:  # transform from xywh to xyxy
          b1_x1, b1_x2 = box1[0] - box1[2] / 2, box1[0] + box1[2] / 2
          b1_y1, b1_y2 = box1[1] - box1[3] / 2, box1[1] + box1[3] / 2
          b2_x1, b2_x2 = box2[0] - box2[2] / 2, box2[0] + box2[2] / 2
          b2_y1, b2_y2 = box2[1] - box2[3] / 2, box2[1] + box2[3] / 2
  
      # Intersection area
      inter = (torch.min(b1_x2, b2_x2) - torch.max(b1_x1, b2_x1)).clamp(
          0
      ) * (torch.min(b1_y2, b2_y2) - torch.max(b1_y1, b2_y1)).clamp(0)
  
      # Union Area
      w1, h1 = b1_x2 - b1_x1, b1_y2 - b1_y1
      w2, h2 = b2_x2 - b2_x1, b2_y2 - b2_y1
      union = (w1 * h1 + 1e-16) + w2 * h2 - inter
  
      iou = inter / union  # iou
      if GIoU or DIoU or CIoU:
          cw = torch.max(b1_x2, b2_x2) - torch.min(
              b1_x1, b2_x1
          )  # convex (smallest enclosing box) width
          ch = torch.max(b1_y2, b2_y2) - torch.min(
              b1_y1, b2_y1
          )  # convex height
          if (
              GIoU
          ):  # Generalized IoU https://arxiv.org/pdf/1902.09630.pdf
              c_area = cw * ch + 1e-16  # convex area
              return iou - (c_area - union) / c_area  # GIoU
          if (
              DIoU or CIoU
          ):  # Distance or Complete IoU https://arxiv.org/abs/1911.08287v1
              # convex diagonal squared
              c2 = cw**2 + ch**2 + 1e-16
              # centerpoint distance squared
              rho2 = ((b2_x1 + b2_x2) - (b1_x1 + b1_x2)) ** 2 / 4 + (
                  (b2_y1 + b2_y2) - (b1_y1 + b1_y2)
              ) ** 2 / 4
              if DIoU:
                  return iou - rho2 / c2  # DIoU
              elif (
                  CIoU
              ):  # https://github.com/Zzh-tju/DIoU-SSD-pytorch/blob/master/utils/box/box_utils.py#L47
                  v = (4 / math.pi**2) * torch.pow(
                      torch.atan(w2 / h2) - torch.atan(w1 / h1), 2
                  )
                  with torch.no_grad():
                      alpha = v / (1 - iou + v)
                  return iou - (rho2 / c2 + v * alpha)  # CIoU
  
      return iou
  
imports: import glob
  import math
  import os
  import random
  import time
  import cv2
  import matplotlib
  import numpy
  import torch
  import torch.nn
  import torchvision
  from tqdm import tqdm
  from build_utils import torch_utils
label_desc: Use image node_id 7 for calling a global function with example usage: bbox_iou(box1, box2, x1y1x2y2, GIoU, DIoU, CIoU) and returns: iou, unknown, unknown, unknown