Groups the given columns by the corresponding grouping column
    value, and aggregate by summing values.

    Args:
        columns (List<WeldObject>): List of columns as WeldObjects
        column_tys (List<str>): List of each column data ty
        grouping_column (WeldObject): Column to group rest of columns by

    Returns:
          A WeldObject representing this computation

def grouped_slice(expr, type, start, size):
    """
    Groups the given columns by the corresponding grouping column
    value, and aggregate by summing values.

    Args:
        columns (List<WeldObject>): List of columns as WeldObjects
        column_tys (List<str>): List of each column data ty
        grouping_column (WeldObject): Column to group rest of columns by

    Returns:
          A WeldObject representing this computation
    """
    weld_obj = WeldObject(encoder_, decoder_)
    weld_obj.update(expr)
    weld_template = """
       map(
           %(vec)s,
           |b: %(type)s| {b.$0, slice(b.$1, i64(%(start)s), i64(%(size)s))}
         )
    """

    weld_obj.weld_code = weld_template % {"vec": expr.weld_code,
                                          "type": type,
                                          "start": str(start),
                                          "size": str(size)}
    return weld_obj