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)
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