code: def batch_normalization_backward_backward(
      grad_inputs,
      inputs,
      input_shapes,
      outputs,
      output_shapes,
      axes=(1,),
      decay_rate=0.9,
      eps=1e-05,
      batch_stat=True,
      no_scale=False,
      no_bias=False,
  ):
      """
      Args:
        grad_inputs (list of :obj:`nnabla.Variable`): Propagated grads to this backward function.
        inputs (list of :obj:`nnabla.Variable` and None): Input Variables of the forward function
            if this backward function depends on it. Otherwise, None is set instead.
        input_shapes (list of tuple of :obj:`int`): Input shapes of the forward function.
            The shapes of the inputs in which None is set can be passed.
        outputs (list of :obj:`nnabla.Variable` and None): Output Variables of the forward function
            if this backward function depends on it. Otherwise, None is set instead.
        output_shapes (list of tuple of :obj:`int`): Output shapes of the forward function.
            The shapes of the outputs in which None is set can be passed.
        kwargs (dict of arguments): Dictionary of the corresponding function arguments.
  
      Return:
        list of Variable: Return the gradients wrt inputs of the corresponding function.
      """
  
      axes = [a + inputs[0].ndim * (a < 0) for a in axes]
  
      # Align variable indices
      v_idx = 1
      if not no_bias:
          g_db0_idx = v_idx
          v_idx += 1
      if not no_scale:
          g_dg0_idx = v_idx
          v_idx += 1
  
      v_idx = 0
      dy_idx = v_idx
      v_idx += 1
      x0_idx = v_idx
      v_idx += 1
      if not no_bias:
          b0_idx = v_idx
          v_idx += 1
      if not no_scale:
          g0_idx = v_idx
          v_idx += 1
      rm_idx = v_idx
      rv_idx = rm_idx + 1
  
      # Indexing
      g_dx0 = grad_inputs[0]
      g_db0 = grad_inputs[g_db0_idx] if not no_bias else 0
      g_dg0 = grad_inputs[g_dg0_idx] if not no_scale else 0
      dy = inputs[dy_idx]
      x0 = inputs[x0_idx]
      b0 = inputs[b0_idx] if not no_bias else 0
      g0 = inputs[g0_idx] if not no_scale else 1
      rm = inputs[rm_idx]
      rv = inputs[rv_idx]
  
      double_backward = (
          double_backward_for_batch
          if batch_stat
          else double_backward_for_global
      )
      g_dy, g_x0, g_b0, g_g0 = double_backward(
          g_dx0,
          g_db0,
          g_dg0,
          dy,
          x0,
          b0,
          g0,
          rm,
          rv,
          axes,
          decay_rate,
          eps,
      )
      if not no_bias and not no_scale:
          return g_dy, g_x0, None, g_g0, None, None
  
      if no_bias and no_scale:
          return g_dy, g_x0, None, 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 4 for calling a global function with example usage: batch_normalization_backward_backward(grad_inputs, inputs, input_shapes, outputs, output_shapes, axes, decay_rate, eps, batch_stat, no_scale, no_bias) and returns: g_dy,  g_x0,  None,  g_g0,  None,  None, g_dy,  g_x0,  None,  None