@classmethod
def stripe_even(cls, n_more, more_val, n_less, less_val):
    """
        Prepare striping for an even number of rows.

        :param n_more:
            The number of rows with the value that there's more of

        :param more_val:
            The value that there's more of

        :param n_less:
            The number of rows that there's less of

        :param less_val:
            The value that there's less of

        :return:
            Returns a :class:`tuple` of striped values with appropriate buffer.
        """
    total = n_more + n_less
    if total % 2:
        msg = 'Expected an even number of values, got {} + {}'.format(n_more,
            n_less)
        raise ValueError(msg)
    assert n_more >= n_less, (n_more, n_less)
    n_l_c, n_m_c = n_less, n_more
    num_div = 0
    while True:
        n_l_c, lr = divmod(n_l_c, 2)
        n_m_c, mr = divmod(n_m_c, 2)
        if lr or mr:
            break
        num_div += 1
    n_cells = 2 ** num_div
    cell_s = total // n_cells
    cell_buff = int(cell_s % 2 == 0)
    cell_s -= cell_buff
    cell_nl = n_less // n_cells
    cell_nm = cell_s - cell_nl
    if cell_nm == 0:
        stripe_cell = less_val,
    else:
        stripe_cell = cls.stripe_odd(cell_nm, more_val, cell_nl, less_val)
    unit_cell = (more_val,) * cell_buff + stripe_cell
    if num_div == 0:
        return unit_cell
    stripe_out = unit_cell * (n_cells // 2)
    return tuple(reversed(stripe_out)) + stripe_out
