code: def test_transformer_FuseConvBN(
      self, size, input_channels, seed, order, epsilon
  ):
      workspace.ResetWorkspace()
      net = core.Net("net")
      c = input_channels
      h = size
      w = size
      k = 3
      net.Conv(
          ["X", "w", "b"], ["Y"], stride=1, pad=0, kernel=k, order=order
      )
      net.SpatialBN(
          ["Y", "scale", "bias", "mean", "var"],
          ["Y2"],
          is_test=True,
          order=order,
          epsilon=epsilon,
      )
  
      np.random.seed(seed)
      if order == "NCHW":
          tu.randBlobFloat32("X", 1, c, h, w)
          tu.randBlobFloat32("w", c, c, k, k)
      else:
          tu.randBlobFloat32("X", 1, h, w, c)
          tu.randBlobFloat32("w", c, k, k, c)
      tu.randBlobsFloat32(["b", "scale", "bias", "mean"], c)
  
      # This is necessary because 1/sqrt(var) is used and if var is too small
      # we get floating point artifacts that cause test failures
      tu.randBlobFloat32("var", c, offset=0.5)
      workspace.RunNetOnce(net)
      preTransformOutput = workspace.FetchBlob("Y2").flatten()
      workspace.FeedBlob("Y2", np.zeros((1, 1)))
      transformer.FuseConvBN(net)
  
      # Ensure fusion
      assert tu.numOps(net) == 1
      workspace.RunNetOnce(net)
      postTransformOutput = workspace.FetchBlob("Y2").flatten()
      # Check that there is no numerical difference
      assert np.allclose(
          preTransformOutput,
          postTransformOutput,
          rtol=5e-02,
          atol=1e-03,
      )
  
imports: from hypothesis import given
  import hypothesis.strategies
  import numpy
  import unittest
  from caffe2.python.transformations import Transformer
  from caffe2.python import core, workspace
  from caffe2.python import test_util
label_desc: Use image node_id 12 for calling the TestTransformations obj's underlying member method code with example usage: obj.test_transformer_FuseConvBN(size, input_channels, seed, order, epsilon) without return types