'Get the sliced shapes for the i-th executor.
Parameters
shapes : list of (str, tuple)
The original (name, shape) pairs.
i : int
Which executor we are dealing with.'

def _sliced_shape(self, shapes, i, major_axis):

    sliced_shapes = []
    for (desc, axis) in zip(shapes, major_axis):
        shape = list(desc.shape)
        if (axis >= 0):
            shape[axis] = (self.slices[i].stop - self.slices[i].start)
        sliced_shapes.append(DataDesc(desc.name, tuple(shape), desc.dtype, desc.layout))
    return sliced_shapes
