def METHOD_NAME(channel, full_well):
    """
    Redistribute charge along a channel for all pixels above full well.
    Parameters
    ----------
    channel: numpy.array of pixel values
        1D array of pixel values in units of electrons.
    full_well: int
        The pixel full well/saturation value in electrons.
    Returns
    -------
    numpy.array of pixel values: The channel of pixel data with
       bleeding applied.  This is a new object, i.e., the input
       numpy.array is unaltered.
    """
    # Find contiguous sets of pixels that lie above full well, and
    # build a list of end point pairs identifying each set.
    my_channel = channel.copy()
    # Add 0 at start and end, so saturated points are known to be all internal.
    padded = np.concatenate([[0], my_channel, [0]])
    # Find places where full well condition changes (either true to false or false to true).
    end_points, = np.diff(padded > full_well).nonzero()
    # Pairs of these are now the first saturated pixel in a run then the
    # first subsequent unsaturated pixel.  Logically, they have to alternate.
    # Reshape these into array of (start, end) pairs.
    end_points = end_points.reshape(-1,2)
    # Loop over end point pairs.
    for y0, y1 in end_points:
        excess_charge = sum(my_channel[y0:y1]) - (y1 - y0)*full_well
        my_channel[y0:y1] = full_well
        bleed_charge = BleedCharge(my_channel, excess_charge, full_well)
        for dy in range(0, max(y0, len(my_channel) - y1)):
            if bleed_charge(y0 - dy - 1) or bleed_charge(y1 + dy):
                break
    return my_channel