docs: def topN(self, user, n=10, exclude_seen=True, items_pool=None):
  		"""
  		Recommend Top-N items for a user
  
  		Outputs the Top-N items according to score predicted by the model.
  		Can exclude the items for the user that were associated to her in the
  		training set, and can also recommend from only a subset of user-provided items.
  
  		Parameters
  		----------
  		user : obj
  			User for which to recommend.
  		n : int
  			Number of top items to recommend.
  		exclude_seen: bool
  			Whether to exclude items that were associated to the user in the training set.
  		items_pool: None or array
  			Items to consider for recommending to the user.
  		
  		Returns
  		-------
  		rec : array (n,)
  			Top-N recommended items.
  		"""
  		if isinstance(n, float):
  			n = int(n)
  		assert isinstance(n ,int)
  		if self.reindex:
  			if self.produce_dicts:
  				try:
  					user = self.user_dict_[user]
  				except:
  					raise ValueError("Can only predict for users who were in the training set.")
  			else:
  				user = pd.Categorical(np.array([user]), self.user_mapping_).codes[0]
  				if user == -1:
  					raise ValueError("Can only predict for users who were in the training set.")
  		if exclude_seen and not self.keep_data:
  			raise Exception("Can only exclude seen items when passing 'keep_data=True' to .fit")
  			
  		if items_pool is None:
  			allpreds = - (self.Theta[user].dot(self.Beta.T))
  			if exclude_seen:
  				n_ext = np.min([n + self._n_seen_by_user[user], self.Beta.shape[0]])
  				rec = np.argpartition(allpreds, n_ext-1)[:n_ext]
  				seen = self.seen[self._st_ix_user[user] : self._st_ix_user[user] + self._n_seen_by_user[user]]
  				rec = np.setdiff1d(rec, seen)
  				rec = rec[np.argsort(allpreds[rec])[:n]]
  				if self.reindex:
  					return self.item_mapping_[rec]
  				else:
  					return rec
  
  			else:
  				n = np.min([n, self.Beta.shape[0]])
  				rec = np.argpartition(allpreds, n-1)[:n]
  				rec = rec[np.argsort(allpreds[rec])]
  				if self.reindex:
  					return self.item_mapping_[rec]
  				else:
  					return rec
  
  		else:
  			if isinstance(items_pool, list) or isinstance(items_pool, tuple):
  				items_pool = np.array(items_pool)
  			if items_pool.__class__.__name__=='Series':
  				items_pool = items_pool.values
  			if isinstance(items_pool, np.ndarray):  
  				if len(items_pool.shape) > 1:
  					items_pool = items_pool.reshape(-1)
  				if self.reindex:
  					items_pool_reind = pd.Categorical(items_pool, self.item_mapping_).codes
  					nan_ix = (items_pool_reind == -1)
  					if nan_ix.sum() > 0:
  						items_pool_reind = items_pool_reind[~nan_ix]
  						msg = "There were " + ("%d" % int(nan_ix.sum())) + " entries from 'item_pool'"
  						msg += "that were not in the training data and will be exluded."
  						warnings.warn(msg)
  					del nan_ix
  					if items_pool_reind.shape[0] == 0:
  						raise ValueError("No items to recommend.")
  					elif items_pool_reind.shape[0] == 1:
  						raise ValueError("Only 1 item to recommend.")
  					else:
  						pass
  			else:
  				raise ValueError("'items_pool' must be an array.")
  
  			if self.reindex:
  				allpreds = - self.Theta[user].dot(self.Beta[items_pool_reind].T)
  			else:
  				allpreds = - self.Theta[user].dot(self.Beta[items_pool].T)
  			n = np.min([n, items_pool.shape[0]])
  			if exclude_seen:
  				n_ext = np.min([n + self._n_seen_by_user[user], items_pool.shape[0]])
  				rec = np.argpartition(allpreds, n_ext-1)[:n_ext]
  				seen = self.seen[self._st_ix_user[user] : self._st_ix_user[user] + self._n_seen_by_user[user]]
  				if self.reindex:
  					rec = np.setdiff1d(items_pool_reind[rec], seen)
  					allpreds = - self.Theta[user].dot(self.Beta[rec].T)
  					return self.item_mapping_[rec[np.argsort(allpreds)[:n]]]
  				else:
  					rec = np.setdiff1d(items_pool[rec], seen)
  					allpreds = - self.Theta[user].dot(self.Beta[rec].T)
  					return rec[np.argsort(allpreds)[:n]]
  			else:
  				rec = np.argpartition(allpreds, n-1)[:n]
  				return items_pool[rec[np.argsort(allpreds[rec])]]