code: def test_dedup_by_vid_w_frame_mask(self):
      logits = np.array(
          [
              [[1.0, -2.0, 3.0], [1.0, -2.0, 3.0]],
              [[3.0, -2.0, 1.0], [3.0, -2.0, 1.0]],
              [[3.0, -2.0, 1.0], [3.0, -2.0, 1.0]],
          ],
          np.float32,
      )
      labels = np.array(
          [
              [[1, 0, 0], [1, 0, 0]],
              [[0, 1, 0], [0, 1, 0]],
              [[0, 1, 0], [0, 1, 0]],
          ],
          np.int32,
      )
      batch_mask = np.array([1, 1, 1], np.int32)
      frame_mask = np.array([[1, 1], [1, 0], [1, 0]], np.int32)
      vids = np.array([0, 1, 1], np.int32)
      (
          deduped_logits,
          deduped_labels,
          deduped_vids,
      ) = postprocessing_utils.dedup_by_vid(
          logits, labels, batch_mask, vids, frame_mask
      )
      self.assertAllClose(
          deduped_logits,
          [
              [1.0, -2.0, 3.0],
              [1.0, -2.0, 3.0],
              [3.0, -2.0, 1.0],
          ],
      )
      self.assertAllEqual(
          deduped_labels,
          [
              [1, 0, 0],
              [1, 0, 0],
              [0, 1, 0],
          ],
      )
      self.assertAllEqual(deduped_vids, [0, 1])
  
file_path: scenic/scenic/projects/unloc/postprocessing_utils_test.py
imports: from absl.testing import parameterized
  import ml_collections
  import numpy
  from scenic.projects.unloc import metrics
  from scenic.projects.unloc import postprocessing_utils
  import tensorflow
label_desc: Use image node_id 2 for calling the PostprocessingUtilsTest obj's underlying member method code with example usage: obj.test_dedup_by_vid_w_frame_mask() without return types