code: def double_backward_for_global(
      g_dx0, g_db0, g_dg0, dy, x0, b0, g0, rm, rv, axes, decay_rate, eps
  ):
      # Prerequisite
      # axes reduced and denominator
      axes0 = [a for a in range(x0.ndim)]
      axes = list(set(axes0) - set(axes))
      # (variance + eps) * (-1/2)
      v_eps_rsqrt1 = (rv + eps) ** (-1.0 / 2.0)
  
      # wrt. x
      g_x0 = g_dg0 * dy * v_eps_rsqrt1
  
      # wrt. beta
      # zero, do nothing
  
      # wrt. gamma
      g_g0 = F.sum(g_dx0 * dy * v_eps_rsqrt1, axes, True)
  
      # no backward wrt. rm and rv
  
      # wrt. dy
      g_dy = (
          g_dx0 * g0 * v_eps_rsqrt1
          + g_dg0 * (x0 - rm) * v_eps_rsqrt1
          + g_db0
      )
  
      return g_dy, g_x0, None, g_g0
  
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 2 for calling a global function with example usage: double_backward_for_global(g_dx0, g_db0, g_dg0, dy, x0, b0, g0, rm, rv, axes, decay_rate, eps) and returns: g_dy,  g_x0,  None,  g_g0