'Utility method to merge and validate the attributes ``attrs`` for the
input table columns ``cols``.
Note that ``dtype`` and ``shape`` attributes are handled specially.
These should not be passed in ``attrs`` but will always be in the
returned dict of merged attributes.
Parameters
cols : list
List of input Table column objects
metadata_conflicts : str (\'warn\'|\'error\'|\'silent\')
How to handle metadata conflicts
name : str
Output column name
attrs : list
List of attribute names to be merged
Returns
attrs : dict of merged attributes'

@staticmethod
def merge_cols_attributes(cols, metadata_conflicts, name, attrs):

    from ..table.np_utils import TableMergeError
    def warn_str_func(key, left, right):
        out = "In    merged    column    '{}'    the    '{}'    attribute    does    not    match    ({}    !=    {}).        Using    {}    for    merged    output".format(name, key, left, right, right)
        return out
    def getattrs(col):
        return {attr: getattr(col.info, attr) for attr in attrs if (getattr(col.info, attr, None) is not None)}
    out = getattrs(cols[0])
    for col in cols[1:]:
        out = metadata.merge(out, getattrs(col), metadata_conflicts=metadata_conflicts, warn_str_func=warn_str_func)
    out['dtype'] = metadata.common_dtype(cols)
    uniq_shapes = set((col.shape[1:] for col in cols))
    if (len(uniq_shapes) != 1):
        raise TableMergeError('columns    have    different    shapes')
    out['shape'] = uniq_shapes.pop()
    return out
