<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _morph_rgb(self, rgb1, rgb2, step=1):
 """ Morph an rgb value into another, yielding each step along the way. """

        pos1, pos2 = list(rgb1), list(rgb2)
        indexes = [i for i, _ in enumerate(pos1)]

        def step_value(a, b):
            """ Returns the amount to add to `a` to make it closer to `b`,
                multiplied by `step`.
            """
            if a < b:
                return step
            if a > b:
                return -step
            return 0

        steps = [step_value(pos1[x], pos2[x]) for x in indexes]
        stepcnt = 0
        while (pos1 != pos2):
            stepcnt += 1
            stop = yield tuple(pos1)
            if stop:
                break
            for x in indexes:
                if pos1[x] != pos2[x]:
                    pos1[x] += steps[x]
                    if (steps[x] < 0) and (pos1[x] < pos2[x]):
                        # Over stepped, negative.
                        pos1[x] = pos2[x]
                    if (steps[x] > 0) and (pos1[x] > pos2[x]):
                        # Over stepped, positive.
                        pos1[x] = pos2[x]
        yield tuple(pos1)