code: def _reduce_helper(input_shape,
                     output_shape,
                     input_tensor_layout,
                     reduction_fn_string="SUM"):
    
    reduce_dims_indices = [
        i for i, d in enumerate(input_shape.dims) if d not in output_shape.dims]
    reduced_input_shape = Shape([
        d for d in input_shape.dims if d in output_shape.dims])
    perm = [reduced_input_shape.dims.index(d) for d in output_shape.dims]
    def reduce_slice_fn(xslice):
      ret = xslice
      if reduce_dims_indices:
        ret = reduction_fn(reduction_fn_string)(xslice, reduce_dims_indices)
      if perm != list(xrange(len(perm))):
        ret = tf.transpose(ret, perm)
      return ret
    reduced_mesh_axes = []
    for i in reduce_dims_indices:
      mesh_axis = input_tensor_layout[i]
      if mesh_axis is not None:
        reduced_mesh_axes.append(mesh_axis)
    return reduce_slice_fn, reduced_mesh_axes
docs: Returns slicewise function and reduced mesh dimensions.
  
    Args:
      input_shape: a Shape
      output_shape: a Shape
      input_tensor_layout: a TensorLayout
      reduction_fn_string: "SUM" or "MAX"
    Returns:
      reduce_slice_fn: a function from tf.Tensor to tf.Tensor
      reduced_mesh_axes: a list of integers