code: def evaluate_class(
      self,
      transform_class: Callable[..., Image.Image],
      fname: str,
      metadata_exclude_keys: Optional[List[str]] = None,
      check_mode: bool = True,
  ):
      metadata = []
      bboxes, bbox_format = [(0.5, 0.5, 0.25, 0.75)], "yolo"
      ref = self.get_ref_image(fname)
      dst = transform_class(
          self.img,
          metadata=metadata,
          bboxes=bboxes,
          bbox_format=bbox_format,
      )
  
      if check_mode:
          self.assertTrue(
              self.img.mode == dst.mode,
              "Expected and outputted image modes do not match",
          )
  
      self.assertTrue(
          are_equal_metadata(
              metadata, self.metadata[fname], metadata_exclude_keys
          ),
          "Expected and outputted metadata do not match",
      )
      self.assertTrue(
          are_equal_images(dst, ref),
          "Expected and outputted images do not match",
      )
  
file_path: AugLy/augly/tests/image_tests/base_unit_test.py
imports: import os
  import tempfile
  import unittest
  from typing import Any, Callable, Dict, List, Optional
  import numpy
  from augly.tests import ImageAugConfig
  from augly.utils import pathmgr, TEST_URI
  from PIL import Image
label_desc: Use image node_id 4 for calling the BaseImageUnitTest obj's underlying member method code with example usage: obj.evaluate_class(transform_class, fname, metadata_exclude_keys, check_mode) without return types