class_docstr: MKL Backend
class_docstr_tok: ["MKL","Backend"]
docstr: Backward propagate pooling layer.
  
  Arguments:
      layer (PoolLayer): The pool layer object. Different backends have
                         different pool layers.
      I (Tensor): Input (error) tensor.
      O (Tensor): Output (delta) tensor.
      argmax (Tensor): tensor to store location of the maximum
      alpha (float): linear scaling (does not work for l2 pooling)
      beta (float): accumulation value into grad_I
docstr_tok: ["Backward","propagate","pooling","layer",".","Arguments",":","layer","(","PoolLayer",")",":","The","pool","layer","object",".","Different","backends","have","different","pool","layers",".","I","(","Tensor",")",":","Input","(","error",")","tensor",".","O","(","Tensor",")",":","Output","(","delta",")","tensor",".","argmax","(","Tensor",")",":","tensor","to","store","location","of","the","maximum","alpha","(","float",")",":","linear","scaling","(","does","not","work","for","l2","pooling",")","beta","(","float",")",":","accumulation","value","into","grad_I"]
code: def bprop_pool(self, layer, I, O, argmax=None, alpha=1.0, beta=0.0):
      """
      Backward propagate pooling layer.
  
      Arguments:
          layer (PoolLayer): The pool layer object. Different backends have
                             different pool layers.
          I (Tensor): Input (error) tensor.
          O (Tensor): Output (delta) tensor.
          argmax (Tensor): tensor to store location of the maximum
          alpha (float): linear scaling (does not work for l2 pooling)
          beta (float): accumulation value into grad_I
      """
      assert layer.sizeI == O.size
      assert layer.sizeO == I.size
      if layer.op == "max":
          assert layer.sizeO == argmax.size
  
      J, T, R, S = layer.JTRS
      C, D, H, W, N = layer.dimI
      K, M, P, Q, N = layer.dimO
      pad_c, pad_d, pad_h, pad_w = layer.padding
      str_c, str_d, str_h, str_w = layer.strides
  
      # unsupported fall back to cpu
      if J > 1 or T > 1 or D > 1:
          super(NervanaMKL, self).bprop_pool(
              layer, I, O, argmax, alpha, beta
          )
          return
  
      primitives = c_longlong(layer.dnnPrimitives.ctypes.data)
      self.mklEngine.MaxPooling_bprop(
          I.get_prim(),
          O.get_prim(),
          primitives,
          layer.initOk_b,
          c_float(beta),
      )
      layer.initOk_b = 1
      O.shape5D = layer.dimI
  
imports: from __future__ import division
  from builtins import zip
  import logging
  from neon.backends import layer_mkl
  from neon.backends.util.check_mkl import get_mkl_lib
  from neon.backends.nervanacpu import CPUTensor, NervanaCPU, CustomNumpy
  import ctypes
  from cffi import FFI
  from ctypes import c_longlong, c_float, c_double, c_int
  import numpy
  from neon.backends import math_cpu
  from neon.backends.backend import OpTreeNode
  import os
  import sys
label_desc: Use image node_id 14 for calling the NervanaMKL obj's underlying member method code with example usage: obj.bprop_pool(layer, I, O, argmax, alpha, beta) without return types