'Returns a sliced NDArray that shares memory with the current one.
This is called through ``x[start:stop]``.
Parameters
start : int
Starting inclusive index of slice in the first dim.
stop : int
Finishing exclusive index of slice in the first dim.
Returns
`NDArray` sharing the memory with the current one sliced from
start to stop in the first dim.
Examples:
>>> a = mx.nd.array([[1,2], [3, 4], [5, 6], [7, 8]])
>>> a[1:2].asnumpy()
array([[ 3.,  4.]], dtype=float32)
>>> a[1:1].asnumpy()
array([], shape=(0, 2), dtype=float32)'

def _slice(self, start, stop):

    handle = NDArrayHandle()
    start = (mx_uint(start) if start else mx_uint(0))
    stop = (mx_uint(stop) if stop else mx_uint(self.shape[0]))
    check_call(_LIB.MXNDArraySlice(self.handle, start, stop, ctypes.byref(handle)))
    return NDArray(handle=handle, writable=self.writable)
