text: from itertools import product
  import numpy as np
  import os.path as osp
  
  from unittest import TestCase
  
  import datumaro.util.image as image_module
  from datumaro.util.test_utils import TestDir
  
  
  class ImageOperationsTest(TestCase):
      def setUp(self):
          self.default_backend = image_module._IMAGE_BACKEND
  
      def tearDown(self):
          image_module._IMAGE_BACKEND = self.default_backend
  
      def test_save_and_load_backends(self):
          backends = image_module._IMAGE_BACKENDS
          for save_backend, load_backend, c in product(backends, backends, [1, 3]):
              with TestDir() as test_dir:
                  if c == 1:
                      src_image = np.random.randint(0, 255 + 1, (2, 4))
                  else:
                      src_image = np.random.randint(0, 255 + 1, (2, 4, c))
                  path = osp.join(test_dir, "img.png")  # lossless
  
                  image_module._IMAGE_BACKEND = save_backend
                  image_module.save_image(path, src_image, jpeg_quality=100)
  
                  image_module._IMAGE_BACKEND = load_backend
                  dst_image = image_module.load_image(path)
  
                  self.assertTrue(
                      np.array_equal(src_image, dst_image),
                      "save: %s, load: %s" % (save_backend, load_backend),
                  )
  
      def test_encode_and_decode_backends(self):
          backends = image_module._IMAGE_BACKENDS
          for save_backend, load_backend, c in product(backends, backends, [1, 3]):
              if c == 1:
                  src_image = np.random.randint(0, 255 + 1, (2, 4))
              else:
                  src_image = np.random.randint(0, 255 + 1, (2, 4, c))
  
              image_module._IMAGE_BACKEND = save_backend
              buffer = image_module.encode_image(
                  src_image, ".png", jpeg_quality=100
              )  # lossless
  
              image_module._IMAGE_BACKEND = load_backend
              dst_image = image_module.decode_image(buffer)
  
              self.assertTrue(
                  np.array_equal(src_image, dst_image),
                  "save: %s, load: %s" % (save_backend, load_backend),
              )
  
      def test_save_image_to_inexistent_dir_raises_error(self):
          with self.assertRaises(FileNotFoundError):
              image_module.save_image(
                  "some/path.jpg", np.ones((5, 4, 3)), create_dir=False
              )
  
      def test_save_image_can_create_dir(self):
          with TestDir() as test_dir:
              path = osp.join(test_dir, "some", "path.jpg")
              image_module.save_image(path, np.ones((5, 4, 3)), create_dir=True)
              self.assertTrue(osp.isfile(path))
  