def test_interleave(self):
        self.interleave(il.TeamDraft, [[1, 2], [2, 3]], 2, [(1, 2), (2, 1)])
        self.interleave(il.TeamDraft, [[1, 2], [2, 3]], 3, [(1, 2, 3), (2, 1, 3)])
        self.interleave(il.TeamDraft, [[1, 2], [2, 3]], 4, [(1, 2, 3), (2, 1, 3)])
        self.interleave(il.TeamDraft, [[1, 2], [3, 4]], 2, [(1, 3), (3, 1)])
        self.interleave(il.TeamDraft, [[1, 2], [3, 4]], 3,
            [(1, 3, 2), (1, 3, 4), (3, 1, 2), (3, 1, 4)])

        # check teams
        td = il.TeamDraft([[1, 2], [2, 3]])
        res = td.interleave()
        assert set(res.teams[0]) == set([1])
        assert set(res.teams[1]) == set([2])

        td = il.TeamDraft([[1, 2], [3, 4]])
        res = td.interleave()
        assert set(res.teams[0]) == set([1])
        assert set(res.teams[1]) == set([3])
 def test_dump(self, tmpdir):
     tmpfile = str(tmpdir) + '/team_draft.json'
     td = il.TeamDraft([[1, 2, 3], [2, 3, 1]], sample_num=100)
     td.dump_rankings(tmpfile)
     with open(tmpfile, 'r') as f:
         obj = json.load(f)
     # Test keys
     s = {str(hash(r)) for r in td._rankings}
     assert s == set(obj.keys())
     # Test rankings
     l1 = sorted(td._rankings)
     l2 = sorted([v['ranking']['ranking_list'] for v in obj.values()])
     assert l1 == l2
     # Test teams
     f = lambda d: {str(k): sorted(list(s)) for k, s in d.items()}
     l1 = [sorted(f(r.teams).items()) for r in td._rankings]
     l2 = [sorted(v['ranking']['teams'].items()) for v in obj.values()]
     assert sorted(l1) == sorted(l2)
Beispiel #3
0
def interleave(recs_a, recs_b, method="teamdraft"):
	"""
		This function returns a tuple containing:
		 * a list of ids which corresponds to the interleaved list (from 2 rec lists)
		 * a serialized object (bytes) that can be stored in MongoDB (an `interleaving.ranking.TeamRanking` object).
	
		The TeamDraft method already randomize the order of systems.
		So we don't need to shuffle recsys.
		It also handle recommendation list with different length...

		Requirements:
		import interleaving
	"""
	if method == "teamdraft":
		method = interleaving.TeamDraft([recs_a, recs_b])
		ranking = method.interleave()
		print("aaaaaa")
		print(type(ranking))
		print(ranking)
		print("bbbb")
		return (list(ranking), pickle.dumps(ranking))
	else:
		raise Exception("Unknown method")
 def test_team_draft_ranking(self):
     td = il.TeamDraft([[1, 2, 3], [2, 3, 1]], sample_num=100)
     rankings, distributions = zip(*td.ranking_distribution)
     assert len(rankings) == 4