<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_slice_info(slice_times):
 """ Extract slice order from slice timing info. TODO: Be more specific with slice orders. Currently anything where there's some kind of skipping is interpreted as interleaved of some kind. Parameters slice_times : array-like A list of slice times in seconds or milliseconds or whatever. Returns ------- slice_order_name : :obj:`str` The name of the slice order sequence. """

    # Slice order
    slice_times = remove_duplicates(slice_times)
    slice_order = sorted(range(len(slice_times)), key=lambda k: slice_times[k])
    if slice_order == range(len(slice_order)):
        slice_order_name = 'sequential ascending'
    elif slice_order == reversed(range(len(slice_order))):
        slice_order_name = 'sequential descending'
    elif slice_order[0] < slice_order[1]:
        # We're allowing some wiggle room on interleaved.
        slice_order_name = 'interleaved ascending'
    elif slice_order[0] > slice_order[1]:
        slice_order_name = 'interleaved descending'
    else:
        slice_order = [str(s) for s in slice_order]
        raise Exception('Unknown slice order: [{0}]'.format(', '.join(slice_order)))

    return slice_order_name