code: def _testBatchNormGradientInAllNeedConfigs(
      self, param_index, tag, err_tolerance=1e-11
  ):
      for scale_after_normalization in [True, False]:
          for shift_after_normalization in [True, False]:
              # shift_after_normalization=False is not supported in version 1.
              for v in [1, 2] if shift_after_normalization else [2]:
                  self._testBatchNormGradient(
                      param_index,
                      tag,
                      scale_after_normalization,
                      shift_after_normalization,
                      v,
                      err_tolerance,
                  )
  
imports: import numpy
  from tensorflow.python.framework import constant_op
  from tensorflow.python.framework import dtypes
  from tensorflow.python.framework import ops
  from tensorflow.python.framework import test_util
  from tensorflow.python.ops import array_ops
  from tensorflow.python.ops import gen_nn_ops
  from tensorflow.python.ops import gradient_checker
  from tensorflow.python.ops import gradients_impl
  from tensorflow.python.ops import math_ops
  from tensorflow.python.ops import nn_impl
  import tensorflow.python.ops.nn_grad
  from tensorflow.python.platform import test
label_desc: Use image node_id 8 for calling the BatchNormalizationTest obj's underlying member method code with example usage: obj._testBatchNormGradientInAllNeedConfigs(param_index, tag, err_tolerance) without return types