code: def test_depthwise_convolution(self, batch_size, gc, dc):
      op = core.CreateOperator(
          "Conv",
          ["X", "w", "b"],
          ["Y"],
          stride=1,
          pad=0,
          kernel=1,
          group=4,
          device_option=dc[0],
      )
      op1 = core.CreateOperator(
          "Conv",
          ["X", "w", "b"],
          ["Y"],
          stride=1,
          pad=0,
          kernel=1,
          group=4,
          device_option=dc[1],
      )
      X = np.random.rand(batch_size, 544, 14, 14).astype(np.float32)
      w = np.random.rand(544, 136, 1, 1).astype(np.float32)
      b = np.random.rand(544).astype(np.float32)
  
      workspace.SwitchWorkspace("_device_check_", True)
      workspace.FeedBlob("X", X, dc[0])
      workspace.FeedBlob("w", w, dc[0])
      workspace.FeedBlob("b", b, dc[0])
      workspace.RunOperatorOnce(op)
      Y0 = workspace.FetchBlob("Y")
  
      workspace.ResetWorkspace()
      workspace.FeedBlob("X", X, dc[1])
      workspace.FeedBlob("w", w, dc[1])
      workspace.FeedBlob("b", b, dc[1])
      net = core.Net("net")
      old_net = caffe2_pb2.NetDef()
      old_net.op.extend([op1])
      net.Proto().CopyFrom(old_net)
      optimizeForMKLDNN(net)
      workspace.RunOperatorOnce(net.Proto().op[0])
      Y1 = workspace.FetchBlob("Y")
  
      if not np.allclose(Y0, Y1, atol=0.01, rtol=0.01):
          print(Y1.flatten())
          print(Y0.flatten())
          print(np.max(np.abs(Y1 - Y0)))
          self.assertTrue(False)
  
      workspace.ResetWorkspace()
      workspace.FeedBlob("X", X, dc[1])
      workspace.FeedBlob("w", w, dc[1])
      workspace.FeedBlob("b", b, dc[1])
      workspace.RunOperatorOnce(op1)
      Y2 = workspace.FetchBlob("Y")
  
      if not np.allclose(Y0, Y2, atol=0.01, rtol=0.01):
          print(Y2.flatten())
          print(Y0.flatten())
          print(np.max(np.abs(Y2 - Y0)))
          self.assertTrue(False)
  
file_path: pytorch/caffe2/python/ideep/conv_op_test.py
imports: import unittest
  import hypothesis.strategies
  from hypothesis import given, settings
  import numpy
  from caffe2.proto import caffe2_pb2
  from caffe2.python import core, workspace
  from caffe2.python.transformations import optimizeForMKLDNN
  import caffe2.python.hypothesis_test_util
  import caffe2.python.ideep_test_util
label_desc: Use image node_id 3 for calling the ConvTest obj's underlying member method code with example usage: obj.test_depthwise_convolution(batch_size, gc, dc) without return types