code: def _generate_move(
              cls, char, width=None, fill_char=None,
              bounce=False, reverse=True, back_char=None):
          
          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)
              )
docs: 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`