<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _generate_move( cls, char, width=None, fill_char=None, bounce=False, reverse=True, back_char=None):
 """ Yields strings that simulate movement of a character from left to right. For use with `BarSet.from_char`. Arguments: char : Character to move across the progress bar. width : Width for the progress bar. Default: cls.default_width fill_char : String for empty space. Default: cls.default_fill_char bounce : Whether to move the character in both directions. reverse : Whether to start on the right side. back_char : Character to use for the bounce's backward movement. Default: `char` """

        width = width or cls.default_width
        char = str(char)
        filler = str(fill_char or cls.default_fill_char) * (width - len(char))

        rangeargs = RangeMoveArgs(
            (0, width, 1),
            (width, 0, -1),
        )
        if reverse:
            # Reverse the arguments for range to start from the right.
            # Not using swap, because the stopping point is different.
            rangeargs = RangeMoveArgs(
                (width, -1, -1),
                (0, width - 1, 1),
            )

        yield from (
            ''.join((filler[:i], char, filler[i:]))
            for i in range(*rangeargs.forward)
        )

        if bounce:
            bouncechar = char if back_char is None else back_char
            yield from (
                ''.join((filler[:i], str(bouncechar), filler[i:]))
                for i in range(*rangeargs.backward)
            )