 Perform the same operation as Gather,
 but operating on 8bit rowwise quantized
 matrices with fused storage (where
 each row stores quantized values, and
 then the scale and offset).

 DATA needs to have rank 2 and INDICES
 needs to have rank 1.

 The Gather op accepts a DATA tensor
 of rank $r >= 1$ and INDICES tensor
 of rank $q$ as inputs.

 It then gathers entries of the outermost
 dimension of DATA, indexed by INDICES,
 and concatenate them in an output tensor
 of rank $q + (r  1)$.

 Github Links:

  https://github.com/caffe2/caffe2/blob/master/caffe2/operators/gather_op.cc

  https://github.com/caffe2/caffe2/blob/master/caffe2/operators/gather_op.h

 Given DATA tensor of rank 1, and RANGES
 tensor of rank 3, gather values corresponding
 to each range into a separate output
 tensor.

 If the optional input KEY tensor is also
 given, the output will be sorted by KEY
 for each example.

 RANGES dimensions description:

 1: represents list of examples within
 a batch

 2: represents list features

 3: two values which are start and length
 or a range (to be applied on DATA)

 Each feature has fixed lengths which
 are passed as lengths argument and a
 separate tensor will be produced for
 each feature.

 i.e. DATA.dim(1) = len(lengths) = NumOuptuts.

 Missing features (represented by empty
 ranges) filled with default_value.
