def calc_get_item(func, in_data, **kwargs):
    """[GetItem](https://docs.chainer.org/en/v4.3.0/reference/generated/chainer.functions.get_item.html)

    Extract part of an array. This operation is zero FLOPs.
    Most of tensor libraries have view feature, which doesn't actually create
    a new array unless necessary, but this is not considered in
    chainer-computational-cost.
    Memory read runs only for the necessary elements, so both memory
    read and write are same as the size of output tensor.

    | Item   | Value |
    |:-------|:------|
    | FLOPs  | $$ 0 $$ |
    | mread  | $$ \| y \| $$ |
    | mwrite | $$ \| y \| $$ |
    | params | `slices`: list of slices, a slice is an int or a tuple with 3 elements |
    """     # NOQA
    x, = in_data
    y = x[func.slices]
    slices = [(s.start, s.stop, s.step) if type(s) is slice else s
              for s in func.slices]
    return (0, y.size, y.size, {'slices': slices})