code: def setup(self):
      reduced_shape = self.reduced_shape
      x_dtype = self.x_dtype
      param_dtype = self.param_dtype
      eps = self.eps
      decay = self.decay
      axis = self.axis
      contiguous = self.contiguous
  
      # - Non-contiguous running values which are updated in-place are not
      # supported by CUDA.
      # - Non-contiguous gamma and beta is not supported by CUDA.
      # TODO(hvy): Support non-contiguous gamma and beta with CUDA. Create a
      # contiguous copy in the cuDNN wrapper.
      if (
          chainerx.get_default_device().backend.name == "cuda"
          and contiguous is None
      ):
          raise unittest.SkipTest(
              "batch_norm with CUDA currently has limited support for "
              "non-contiguous inputs."
          )
  
      # BatchNorm is unstable for fp16 for both native and CUDA.
      # TODO(hvy): Fix backward and double backward for fp16.
      if x_dtype == "float16" and param_dtype == "float16":
          self.skip_backward_test = True
          self.skip_double_backward_test = True
  
      self.running_mean = numpy.random.uniform(
          -1, 1, reduced_shape
      ).astype(param_dtype)
      self.running_var = numpy.random.uniform(
          0.1, 1, reduced_shape
      ).astype(param_dtype)
  
      optional_args = {}
      if eps is not None:
          optional_args["eps"] = eps
      if decay is not None:
          optional_args["decay"] = decay
      if axis is not None:
          optional_args["axis"] = axis
      self.optional_args = optional_args
  
      # TODO(hvy): Fix forward, backward and double backward for fp16.
      if x_dtype == "float16" or param_dtype == "float16":
          self.check_forward_options.update(
              {"rtol": 1e-1, "atol": 1e-1}
          )
          self.check_backward_options.update(
              {"rtol": 1e-1, "atol": 1e-1}
          )
          self.check_double_backward_options.update(
              {"rtol": 1e-1, "atol": 1e-1}
          )
      else:
          self.check_forward_options.update(
              {"rtol": 1e-6, "atol": 1e-5}
          )
          self.check_backward_options.update(
              {"rtol": 5e-3, "atol": 5e-4}
          )
          self.check_double_backward_options.update(
              {"rtol": 5e-2, "atol": 5e-3}
          )
  
      # Running values that are recorded in forward for similarity checks.
      self.running_mean_chx = None
      self.running_var_chx = None
      self.running_mean_ch = None
      self.running_var_ch = None
  
imports: import unittest
  import chainer
  import numpy
  import pytest
  import chainerx
  import chainerx.testing
  from chainerx_tests import array_utils
  from chainerx_tests import op_utils
label_desc: Use image node_id 1 for calling the TestBatchNorm obj's underlying member method code with example usage: obj.setup() without return types