def recommend_users(probID, SVDNeighbourhood=False):
	if SVDNeighbourhood:
		svd2 = SVDNeighbourhood()
		svd2.load_model(os.path.join(utils.get_add_dir(), 'ratings_neigh'))
	else:
		svd2 = SVD()
		svd2.load_model(os.path.join(utils.get_add_dir(), 'ratings'))
	return svd2.recommend(probID)
def predict_rating(probID, userID, MIN_RATING, MAX_RATING, SVDNeighbourhood=False):
	if SVDNeighbourhood:
		svd2 = SVDNeighbourhood()
		svd2.load_model(os.path.join(utils.get_add_dir(), 'ratings_neigh'))
	else:
		svd2 = SVD()
		svd2.load_model(os.path.join(utils.get_add_dir(), 'ratings'))
	return svd2.predict(probID, userID, MIN_RATING, MAX_RATING)
def get_similar_problems(probID, SVDNeighbourhood=False):
	if SVDNeighbourhood:
		svd2 = SVDNeighbourhood()
		svd2.load_model(os.path.join(utils.get_add_dir(), 'ratings_neigh'))
	else:
		svd2 = SVD()
		svd2.load_model(os.path.join(utils.get_add_dir(), 'ratings'))
	return svd2.similar(probID)
def recommend_problems(userID, SVDNeighbourhood=False):
	if SVDNeighbourhood:
		svd2 = SVDNeighbourhood()
		svd2.load_model(os.path.join(utils.get_add_dir(), 'ratings_neigh'))
	else:
		svd2 = SVD()
		svd2.load_model(os.path.join(utils.get_add_dir(), 'ratings'))
	problems = svd2.recommend(userID, n=20, only_unknowns=False, is_row=False)
	ret = []
	data = load_data()
	for problem in problems:	
		found = False
		for t in data:
			# print t, problem
			if t[1] == problem[0] and t[2] == 45:
				found = True
				break
		if not found:		
			# print problem
			ret.append(problem)

	return ret