code: 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
docs: 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.