class_docstr: MKL Backend
class_docstr_tok: ["MKL","Backend"]
docstr: Forward propagate pooling layer.
  
  Arguments:
      layer (PoolLayer): The pool layer object, different backends have
                         different pool layers.
      I (Tensor): Input tensor.
      O (Tensor): output tensor.
      argmax (Tensor): tensor to store location of the maximum
docstr_tok: ["Forward","propagate","pooling","layer",".","Arguments",":","layer","(","PoolLayer",")",":","The","pool","layer","object",",","different","backends","have","different","pool","layers",".","I","(","Tensor",")",":","Input","tensor",".","O","(","Tensor",")",":","output","tensor",".","argmax","(","Tensor",")",":","tensor","to","store","location","of","the","maximum"]
code: def fprop_pool(self, layer, I, O, argmax=None, beta=0.0):
      """
      Forward propagate pooling layer.
  
      Arguments:
          layer (PoolLayer): The pool layer object, different backends have
                             different pool layers.
          I (Tensor): Input tensor.
          O (Tensor): output tensor.
          argmax (Tensor): tensor to store location of the maximum
      """
      assert layer.sizeI == I.size
      assert layer.sizeO == O.size
      assert layer.op == "max" or layer.op == "avg"
      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).fprop_pool(layer, I, O, argmax, beta)
          return
  
      if layer.op == "max":
          bMax = 1
      elif layer.op == "avg":
          bMax = 0
      if self.check_caffe_compat():
          bCeil = 1
      else:
          bCeil = 0
  
      primitives = c_longlong(layer.dnnPrimitives.ctypes.data)
      self.mklEngine.MaxPooling_fprop(
          I.get_prim(),
          O.get_prim(),
          primitives,
          layer.initOk_f,
          bMax,
          N,
          C,
          H,
          W,
          R,
          S,
          str_h,
          str_w,
          pad_h,
          pad_w,
          K,
          P,
          Q,
          bCeil,
      )
      layer.initOk_f = 1
      O.shape5D = layer.dimO
  
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 13 for calling the NervanaMKL obj's underlying member method code with example usage: obj.fprop_pool(layer, I, O, argmax, beta) without return types