docs: def max_pool(inputs, kernel_size, stride=2, padding='VALID', scope=None):
    """Adds a Max Pooling layer.
  
    It is assumed by the wrapper that the pooling is only done per image and not
    in depth or batch.
  
    Args:
      inputs: a tensor of size [batch_size, height, width, depth].
      kernel_size: a list of length 2: [kernel_height, kernel_width] of the
        pooling kernel over which the op is computed. Can be an int if both
        values are the same.
      stride: a list of length 2: [stride_height, stride_width].
        Can be an int if both strides are the same.  Note that presently
        both strides must have the same value.
      padding: the padding method, either 'VALID' or 'SAME'.
      scope: Optional scope for name_scope.
  
    Returns:
      a tensor representing the results of the pooling operation.
    Raises:
      ValueError: if 'kernel_size' is not a 2-D list
    """
    with tf.name_scope(scope, 'MaxPool', [inputs]):
      kernel_h, kernel_w = _two_element_tuple(kernel_size)
      stride_h, stride_w = _two_element_tuple(stride)
      return tf.nn.max_pool(inputs,
                            ksize=[1, kernel_h, kernel_w, 1],
                            strides=[1, stride_h, stride_w, 1],
                            padding=padding)