code: def setup_impl(self, inputs, outputs):
      # inputs:  dy, x, beta, gamma, rmean, rvar
      # outputs: dx, dbeta, dgamma
  
      inputs_fwd, outputs_fwd = self._create_fwd_inputs_outputs(
          inputs, outputs
      )
  
      self.axes = [a + inputs_fwd[0].ndim * (a < 0) for a in self.axes]
  
      self._func.setup(inputs_fwd, outputs_fwd)
      dx_shape = inputs_fwd[self.x0_idx - 1].shape
      db_shape = (
          inputs_fwd[self.b0_idx - 1].shape
          if not self.no_bias
          else None
      )
      dg_shape = (
          inputs_fwd[self.g0_idx - 1].shape
          if not self.no_scale
          else None
      )
      outputs[self.x0_idx - 1].reset_shape(dx_shape, True)
      outputs[self.b0_idx - 1].reset_shape(
          db_shape, True
      ) if not self.no_bias else None
      outputs[self.g0_idx - 1].reset_shape(
          dg_shape, True
      ) if not self.no_scale else None
  
imports: from functools import partial
  import nnabla
  import nnabla.function
  import nnabla.functions
  import numpy
  from nnabla.function import PythonFunction
  from .utils import force_tuple
label_desc: Use image node_id 9 for calling the BatchNormalizationBackward obj's underlying member method code with example usage: obj.setup_impl(inputs, outputs) without return types