from typing import Iterable import numpy as np from PIL import Image from frozendict import frozendict from image_prediction.estimator.preprocessor.utils import image_to_normalized_tensor def transform_equal(a, b): return (list(a) if isinstance(a, map) else a) == b def images_equal(im1: Image, im2: Image, **kwargs): return np.allclose(image_to_normalized_tensor(im1), image_to_normalized_tensor(im2), **kwargs) def metadata_equal(mdat1: Iterable, mdat2: Iterable): return set(map(frozendict, mdat1)) == set(map(frozendict, mdat2)) def image_sets_equal(ims1, ims2): return all(any(images_equal(im1, im2) for im2 in ims2) for im1 in ims1)