from __future__ import absolute_import from __future__ import division from __future__ import print_function from __future__ import unicode_literals import unittest import numpy as np from random import randint from caffe2.proto import caffe2_pb2 from caffe2.python import core, workspace @unittest.skipIf(not workspace.C.use_mkldnn, "No MKLDNN support.") class CopyTest(unittest.TestCase): def _get_deep_device(self): return caffe2_pb2.DeviceOption(device_type=caffe2_pb2.IDEEP) def test_copy_to_ideep(self): op = core.CreateOperator( "CopyCPUToIDEEP", ["X"], ["X_ideep"], ) op.device_option.CopyFrom(self._get_deep_device()) n = randint(1, 128) c = randint(1, 64) h = randint(1, 128) w = randint(1, 128) X = np.random.rand(n, c, h, w).astype(np.float32) workspace.FeedBlob("X", X) workspace.RunOperatorOnce(op) X_ideep = workspace.FetchBlob("X_ideep") np.testing.assert_allclose(X, X_ideep) def test_copy_to_ideep_zero_dim(self): op = core.CreateOperator( "CopyCPUToIDEEP", ["X"], ["X_ideep"], ) op.device_option.CopyFrom(self._get_deep_device()) n = 0 c = randint(1, 128) X = np.random.rand(n, c).astype(np.float32) workspace.FeedBlob("X", X) workspace.RunOperatorOnce(op) X_ideep = workspace.FetchBlob("X_ideep") np.testing.assert_allclose(X, X_ideep) def test_copy_from_ideep(self): op = core.CreateOperator( "CopyIDEEPToCPU", ["X_ideep"], ["X"], ) op.device_option.CopyFrom(self._get_deep_device()) n = randint(1, 128) c = randint(1, 64) h = randint(1, 128) w = randint(1, 128) X = np.random.rand(n, c, h, w).astype(np.float32) workspace.FeedBlob("X_ideep", X, self._get_deep_device()) workspace.RunOperatorOnce(op) X_ideep = workspace.FetchBlob("X") np.testing.assert_allclose(X, X_ideep) def test_copy_from_ideep_zero_dim(self): op = core.CreateOperator( "CopyIDEEPToCPU", ["X_ideep"], ["X"], ) op.device_option.CopyFrom(self._get_deep_device()) n = 0 c = randint(1, 64) X = np.random.rand(n, c).astype(np.float32) workspace.FeedBlob("X_ideep", X, self._get_deep_device()) workspace.RunOperatorOnce(op) X_ideep = workspace.FetchBlob("X") np.testing.assert_allclose(X, X_ideep) def test_copy_from_ideep_fallthrough(self): op = core.CreateOperator( "CopyIDEEPToCPU", ["X_ideep"], ["X"],) op.device_option.CopyFrom(self._get_deep_device()) n = randint(1, 128) c = randint(1, 64) h = randint(1, 128) w = randint(1, 128) X = np.random.rand(n, c, h, w).astype(np.float32) workspace.FeedBlob("X_ideep", X) workspace.RunOperatorOnce(op) X_ideep = workspace.FetchBlob("X") np.testing.assert_allclose(X, X_ideep) if __name__ == "__main__": unittest.main()