code: def _rainbow_rgb_chars(self, s, freq=0.1, spread=3.0, offset=0):
          
          return (
              (c, self._rainbow_rgb(freq, offset + i / spread))
              for i, c in enumerate(s)
          )
docs: Iterate over characters in a string to build data needed for a
              rainbow effect.
              Yields tuples of (char, (r, g, b)).
              Arguments:
                  s      : String to colorize.
                  freq   : Frequency/"tightness" of colors in the rainbow.
                           Best results when in the range 0.0-1.0.
                           Default: 0.1
                  spread : Spread/width of colors.
                           Default: 3.0
                  offset : Offset for start of rainbow.
                           Default: 0