class InterleavingMethod(object):
    '''
    Interleaving
    '''
    def interleave(self, k, a, b):
        '''
        k: the maximum length of resultant interleaving
        a: a list of document IDs
        b: a list of document IDs

        Return an instance of Ranking
        '''
        raise NotImplementedError()

    def multileave(self, k, *lists):
        '''
        k: the maximum length of resultant multileaving
        *lists: lists of document IDs

        Return an instance of Ranking
        '''
        raise NotImplementedError()

    def evaluate(self, ranking, clicks):
        '''
        ranking: an instance of Ranking generated by Balanced.interleave
        clicks: a list of indices clicked by a user

        Return one of the following tuples:
        - (1, 0): Ranking 'a' won
        - (0, 1): Ranking 'b' won
        - (0, 0): Tie
        '''
        raise NotImplementedError()


class InterleavingMethod(object):
    '''
    Interleaving
    '''
    def interleave(self, k, a, b):
        '''
        k: the maximum length of resultant interleaving
        a: a list of document IDs
        b: a list of document IDs

        Return an instance of Ranking
        '''
        raise NotImplementedError()

    def multileave(self, k, *lists):
        '''
        k: the maximum length of resultant multileaving
        *lists: lists of document IDs

        Return an instance of Ranking
        '''
        raise NotImplementedError()

    def evaluate(self, ranking, clicks):
        '''
        ranking: an instance of Ranking generated by Balanced.interleave
        clicks: a list of indices clicked by a user

        Return a list of pairs of ranker indices
        in which element (i, j) indicates i won j.

        e.g. a result [(1, 0), (2, 1), (2, 0)] indicates
        ranker 1 won ranker 0, and ranker 2 won ranker 0 as well as ranker 1.
        '''
        raise NotImplementedError()


Change the comment of InterleavingMethod.evaluate