class_docstr: PoolLayer parameter object.
  This then is passed as an argument to all pooling kernels.
  
  op: max, avg, l2 pooling
  N: Number of images in mini-batch
  
  C: Number of input feature maps
  D: Depth  of input image
  H: Height of input image
  W: Width  of input image
  
  J: Size of feature map pooling window (maxout n_pieces)
  T: Depth  of pooling window
  R: Height of pooling window
  S: Width  of pooling window
  
  padding: amount of zero-padding around the given image or feature map edge
  strides: factor to step the window by in a given direction (overlap allowed)
  
  Leave spatial dimensions at 1 to allow feature map pooling in the fc layers.
code: def pool_slice(self, q, S, X, padding, strides):
      qs = q * strides - padding
      firstI = None
      for s in range(S):
          x = qs + s
          if x >= 0 and x < X:
              if firstI is None:
                  firstI = x
              lastI = x
      return (slice(firstI, lastI + 1), lastI - firstI + 1)
  
imports: from __future__ import division
  from builtins import object
  import math
  from operator import mul
  import numpy
  from functools import reduce
label_desc: Use image node_id 2 for calling the PoolLayer obj's underlying member method code with example usage: obj.pool_slice(q, S, X, padding, strides) and returns: slice,  unknown