def testScaleAndTranslateDown(self, dtype, method, antialias): image_shape = [1, 6, 7, 1] target_shape = [1, 3, 3, 1] data = [ 51, 38, 32, 89, 41, 21, 97, 51, 33, 87, 89, 34, 21, 97, 43, 25, 25, 92, 41, 11, 84, 11, 55, 111, 23, 99, 50, 83, 13, 92, 52, 43, 90, 43, 14, 89, 71, 32, 23, 23, 35, 93 ] if antialias: expected_data = {} expected_data["linear"] = [ 43.5372, 59.3694, 53.6907, 49.3221, 56.8168, 55.4849, 0, 0, 0 ] expected_data["lanczos3"] = [ 43.2884, 57.9091, 54.6439, 48.5856, 58.2427, 53.7551, 0, 0, 0 ] expected_data["lanczos5"] = [ 43.9209, 57.6360, 54.9575, 48.9272, 58.1865, 53.1948, 0, 0, 0 ] expected_data["cubic"] = [ 42.9935, 59.1687, 54.2138, 48.2640, 58.2678, 54.4088, 0, 0, 0 ] else: expected_data = {} expected_data["linear"] = [ 43.6071, 89, 59, 37.1785, 27.2857, 58.3571, 0, 0, 0 ] expected_data["lanczos3"] = [ 44.1390, 87.8786, 63.3111, 25.1161, 20.8795, 53.6165, 0, 0, 0 ] expected_data["lanczos5"] = [ 44.8835, 85.5896, 66.7231, 16.9983, 19.8891, 47.1446, 0, 0, 0 ] expected_data["cubic"] = [ 43.6426, 88.8854, 60.6638, 31.4685, 22.1204, 58.3457, 0, 0, 0 ] x = np.array(data, dtype=dtype).reshape(image_shape) expected = np.array( expected_data[method], dtype=dtype).reshape(target_shape) scale_a = jnp.array([1.0, 0.35, 0.4, 1.0], dtype=jnp.float32) translation_a = jnp.array([0.0, 0.2, 0.1, 0.0], dtype=jnp.float32) output = image.scale_and_translate( x, target_shape, (0,1,2,3), scale_a, translation_a, method, antialias=antialias) self.assertAllClose(output, expected, atol=2e-03) # Tests that running with just a subset of dimensions that have non-trivial # scale and translation. output = image.scale_and_translate( x, target_shape, (1,2), scale_a[1:3], translation_a[1:3], method, antialias=antialias) self.assertAllClose(output, expected, atol=2e-03)
def testScaleAndTranslateUp(self, dtype, image_shape, target_shape, scale, translation, method): data = [64, 32, 32, 64, 50, 100] # Note zeros occur in the output because the sampling location is outside # the boundaries of the input image. expected_data = {} expected_data["linear"] = [ 0.0, 0.0, 0.0, 0.0, 56.0, 40.0, 32.0, 0.0, 52.0, 44.0, 40.0, 0.0, 44.0, 52.0, 56.0, 0.0, 45.625, 63.875, 73.0, 0.0, 56.875, 79.625, 91.0, 0.0 ] expected_data["lanczos3"] = [ 0.0, 0.0, 0.0, 0.0, 59.6281, 38.4313, 22.23, 0.0, 52.0037, 40.6454, 31.964, 0.0, 41.0779, 47.9383, 53.1818, 0.0, 43.0769, 67.1244, 85.5045, 0.0, 56.4713, 83.5243, 104.2017, 0.0 ] expected_data["lanczos5"] = [ 0.0, 0.0, 0.0, 0.0, 60.0223, 40.6694, 23.1219, 0.0, 51.2369, 39.5593, 28.9709, 0.0, 40.8875, 46.5604, 51.7041, 0.0, 43.5299, 67.7223, 89.658, 0.0, 56.784, 83.984, 108.6467, 0.0 ] expected_data["cubic"] = [ 0.0, 0.0, 0.0, 0.0, 59.0252, 36.9748, 25.8547, 0.0, 53.3386, 41.4789, 35.4981, 0.0, 41.285, 51.0051, 55.9071, 0.0, 42.151, 65.8032, 77.731, 0.0, 55.823, 83.9288, 98.1026, 0.0 ] x = np.array(data, dtype=dtype).reshape(image_shape) # Should we test different float types here? scale_a = jnp.array(scale, dtype=jnp.float32) translation_a = jnp.array(translation, dtype=jnp.float32) output = image.scale_and_translate(x, target_shape, range(len(image_shape)), scale_a, translation_a, method) expected = np.array(expected_data[method], dtype=dtype).reshape(target_shape) self.assertAllClose(output, expected, atol=2e-03)