@abstractmethod<EOL><INDENT>def recommend(self, userid, user_items,<EOL>N=<NUM_LIT:10>, filter_already_liked_items=True, filter_items=None, recalculate_user=False):<DEDENT>
pass<EOL>
Recommends items for a user

Calculates the N best recommendations for a user, and returns a list of itemids, score.

Parameters
----------
userid : int
    The userid to calculate recommendations for
user_items : csr_matrix
    A sparse matrix of shape (number_users, number_items). This lets us look
    up the liked items and their weights for the user. This is used to filter out
    items that have already been liked from the output, and to also potentially
    calculate the best items for this user.
N : int, optional
    The number of results to return
filter_items : sequence of ints, optional
    List of extra item ids to filter out from the output
recalculate_user : bool, optional
    When true, don't rely on stored user state and instead recalculate from the
    passed in user_items

Returns
-------
list
    List of (itemid, score) tuples