def convert_list_to_numeric_ranges_str(source_list, range_sep=':', sep=', '):
    """
    Consolidate a list of values into a user-friendly string list that consolidates contiguous (generally int) ranges
    separated by 1 into a user-readable format of ranges. This is the opposite operation of `parse_numeric_ranges`.

    :param source_list: list of values e.g. [1,2,3,4,5,6,10,11,12,13]
    :param range_sep: the string to place separating a range
    :param sep: the string to place between ranges
    :return: a user-readable range str, e.g. "1:6, 10:13"
    """
    if not source_list:
        return ''
    data = sorted(set(source_list))

    result = []
    range_start = -1
    for i in range(len(data)):
        if 0 <= i < len(data) - 1 and range_start == -1 and data[i + 1] - data[i] == 1:  # range start
            range_start = i
        if range_start != -1 and ((i == len(data) - 1 and data[i] - data[i - 1] == 1) or
                                  (i < len(data) - 1 and data[i + 1] - data[i] != 1)):  # range end
            result.append('%s%s%s' % (data[range_start], range_sep, data[i]))
            range_start = -1
        elif range_start == -1:  # not a range
            result.append('%s' % data[i])

    return sep.join(result)