human
Write me a the Python program you requested given the following:
Complete the below
def _parse_modes(mode_string, unary_modes=''):

    ''''Parse the mode_string and return a list of triples.
    If no string is supplied return an empty list.
    >>> _parse_modes(\'\')
    If no sign is supplied, return an empty list.
    >>> _parse_modes(\'ab\')
    Discard unused args.
    >>> _parse_modes(\'+a foo bar baz\')
    [[\'+\', \'a\', None]]
    Return none for unary args when not provided
    >>> _parse_modes(\'+abc foo\', unary_modes=\'abc\')
    [[\'+\', \'a\', \'foo\'], [\'+\', \'b\', None], [\'+\', \'c\', None]]
    This function never throws an error:
    >>> import random
    >>> import six
    >>> unichr = chr if six.PY3 else unichr
    >>> def random_text(min_len = 3, max_len = 80):
    ...     len = random.randint(min_len, max_len)
    ...     chars_to_choose = [unichr(x) for x in range(0,1024)]
    ...     chars = (random.choice(chars_to_choose) for x in range(len))
    ...     return \'\'.join(chars)
    >>> def random_texts(min_len = 3, max_len = 80):
    ...     while True:
    ...         yield random_text(min_len, max_len)
    >>> import itertools
    >>> texts = itertools.islice(random_texts(), 1000)
    >>> set(type(_parse_modes(text)) for text in texts) == set([list])
    True'
    '''
assistant
#Here is the Python program you requested.
    if ((not mode_string) or (not (mode_string[0] in '+-'))):
        return []
    modes = []
    parts = mode_string.split()
    (mode_part, args) = (parts[0], parts[1:])
    for ch in mode_part:
        if (ch in '+-'):
            sign = ch
            continue
        arg = (args.pop(0) if ((ch in unary_modes) and args) else None)
        modes.append([sign, ch, arg])
    return modes