code: def compute_max_ious(
      sample_collection,
      label_field,
      other_field=None,
      iou_attr="max_iou",
      id_attr=None,
      **kwargs,
  ):
      """Populates an attribute on each label in the given spatial field(s) that
      records the max IoU between the object and another object in the same
      sample/frame.
  
      If ``other_field`` is provided, IoUs are computed between objects in
      ``label_field`` and ``other_field``.
  
      If no ``other_field`` is provided, IoUs are computed between objects in
      ``label_field`` alone, excluding the object itself.
  
      Args:
          sample_collection: a
              :class:`fiftyone.core.collections.SampleCollection`
          label_field: a label field of type
              :class:`fiftyone.core.labels.Detections`,
              :class:`fiftyone.core.labels.Polylines`, or
              :class:`fiftyone.core.labels.Keypoints`
          other_field (None): another label field of type
              :class:`fiftyone.core.labels.Detections`,
              :class:`fiftyone.core.labels.Polylines`, or
              :class:`fiftyone.core.labels.Keypoints`
          iou_attr ("max_iou"): the label attribute in which to store the max IoU
          id_attr (None): an optional attribute in which to store the label ID of
              the maximum overlapping label
          **kwargs: optional keyword arguments for :func:`compute_ious`
      """
      if other_field is None:
          other_field = label_field
  
      fov.validate_collection_label_fields(
          sample_collection,
          (label_field, other_field),
          (fol.Detections, fol.Polylines, fol.Keypoints),
          same_type=True,
      )
  
      (
          _label_field,
          is_frame_field,
      ) = sample_collection._handle_frame_field(label_field)
      _other_field, _ = sample_collection._handle_frame_field(
          other_field
      )
  
      if other_field != label_field:
          view = sample_collection.select_fields(
              [label_field, other_field]
          )
      else:
          view = sample_collection.select_fields(label_field)
  
      max_ious1 = []
      max_ious2 = []
      label_ids1 = []
      label_ids2 = []
  
      for sample in view.iter_samples(progress=True):
          if is_frame_field:
              _max_ious1 = []
              _max_ious2 = []
              _label_ids1 = []
              _label_ids2 = []
              for frame in sample.frames.values():
                  iou1, iou2, id1, id2 = _compute_max_ious(
                      frame, _label_field, _other_field, **kwargs
                  )
                  _max_ious1.append(iou1)
                  _max_ious2.append(iou2)
                  _label_ids1.append(id1)
                  _label_ids2.append(id2)
  
              max_ious1.append(_max_ious1)
              max_ious2.append(_max_ious2)
              label_ids1.append(_label_ids1)
              label_ids2.append(_label_ids2)
          else:
              iou1, iou2, id1, id2 = _compute_max_ious(
                  sample, _label_field, _other_field, **kwargs
              )
              max_ious1.append(iou1)
              max_ious2.append(iou2)
              label_ids1.append(id1)
              label_ids2.append(id2)
  
      _, iou_path1 = sample_collection._get_label_field_path(
          label_field, iou_attr
      )
  
      sample_collection.set_values(iou_path1, max_ious1)
  
      if id_attr is not None:
          _, id_path1 = sample_collection._get_label_field_path(
              label_field, id_attr
          )
  
          sample_collection.set_values(id_path1, label_ids1)
  
      if other_field != label_field:
          _, iou_path2 = sample_collection._get_label_field_path(
              other_field, iou_attr
          )
  
          sample_collection.set_values(iou_path2, max_ious2)
  
          if id_attr is not None:
              _, id_path2 = sample_collection._get_label_field_path(
                  other_field, id_attr
              )
  
              sample_collection.set_values(id_path2, label_ids2)
  
imports: import contextlib
  import itertools
  import logging
  import numpy
  import scipy.spatial
  import eta.core.numutils
  import eta.core.utils
  import fiftyone.core.labels
  import fiftyone.core.utils
  import fiftyone.core.validation
  from .utils3d import compute_cuboid_iou
label_desc: Use image node_id 3 for calling a global function with example usage: compute_max_ious(sample_collection, label_field, other_field, iou_attr, id_attr) without return types