code: def _slice(self, start, stop):
          
          handle = NDArrayHandle()
          start, stop, _ = _get_index_range(start, stop, self.shape[0])
  
          check_call(_LIB.MXNDArraySlice(
              self.handle, mx_uint(start), mx_uint(stop), ctypes.byref(handle)))
          return NDArray(handle=handle, writable=self.writable)
docs: 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)