Example #1
0
    def evaluate(self, history: List[Pairs], members: Members) -> List[Pairs]:
        if not history:
            return PairTree.possible_pairs(members.combinations())

        filtered_pair_trees = self.pair_must_have_only_either_member_of_last_pair(
            history[-1], members.combinations())

        if not filtered_pair_trees:
            filtered_pair_trees = members.combinations()

        possible_pairs: List[Pairs] = PairTree.possible_pairs(
            filtered_pair_trees)

        possible_pairs = self.member_is_must_not_in_same_position_at_three_times(
            history, possible_pairs)

        good_pairs = possible_pairs
        for i in range(1, len(history) + 1):
            tmp = self.pair_should_not_exist_same_pair_in_near_history(
                history[-i:], possible_pairs)
            if not tmp:
                break
            else:
                good_pairs = tmp

        return good_pairs
Example #2
0
 def test_filter_and_empty(self):
     members = Members([Member('a'), Member('b')])
     tree = members.combinations()
     filtered = EvaluationService(
     ).pair_must_have_only_either_member_of_last_pair(
         Pairs([Pair(Member('a'), Member('b'))]), tree)
     self.assertEqual(filtered, [])
Example #3
0
class MembersTest(TestCase):
    def setUp(self):
        self.members = Members([Member('a'), Member('b'), Member('c')])
        self.single_members = Members([Member('a')])

    def test_select_first_pairs(self):
        self.assertEqual(
            self.members.select_first_pairs(),
            [(Pair(Member('a'), Member('b')), Members([Member('c')])),
             (Pair(Member('a'), Member('c')), Members([Member('b')])),
             (Pair(Member('b'), Member('c')), Members([Member('a')]))])

    def test_select_first_pairs_with_single_members(self):
        self.assertEqual(self.single_members.select_first_pairs(),
                         [(Pair(Member('a'), None), Members([]))])

    def test_combinations(self):
        self.assertEqual(self.members.combinations(), [
            PairTree(Pair(Member('a'), Member('b')),
                     [PairTree(Pair(Member('c'), None), [])]),
            PairTree(Pair(Member('a'), Member('c')),
                     [PairTree(Pair(Member('b'), None), [])]),
            PairTree(Pair(Member('b'), Member('c')),
                     [PairTree(Pair(Member('a'), None), [])])
        ])

    def test_possible_pair(self):
        pass
Example #4
0
 def test_evaluate_three_times(self):
     history = [
         Pairs([
             Pair(Member('a'), Member('b')),
             Pair(Member('c'), Member('d')),
             Pair(Member('e'), None)
         ]),
         Pairs([
             Pair(Member('a'), Member('c')),
             Pair(Member('d'), Member('e')),
             Pair(Member('b'), None)
         ]),
         Pairs([
             Pair(Member('c'), Member('d')),
             Pair(Member('b'), Member('e')),
             Pair(Member('a'), None)
         ])
     ]
     members = Members(
         [Member('a'),
          Member('b'),
          Member('c'),
          Member('d'),
          Member('e')])
     pairs = EvaluationService().evaluate(history, members)
     self.assertEqual(pairs, [
         Pairs([
             Pair(Member('d'), Member('e')),
             Pair(Member('a'), Member('b')),
             Pair(Member('c'), None)
         ])
     ])
Example #5
0
    def setUp(self):
        self.last_pairs3 = Pairs(
            [Pair(Member('a'), Member('b')),
             Pair(Member('c'), None)])
        self.members3 = Members([Member('a'), Member('b'), Member('c')])

        self.last_pairs5 = Pairs([
            Pair(Member('a'), Member('b')),
            Pair(Member('c'), Member('d')),
            Pair(Member('e'), None)
        ])
        self.members5 = Members(
            [Member('a'),
             Member('b'),
             Member('c'),
             Member('d'),
             Member('e')])
Example #6
0
 def test_evaluate(self):
     last_pairs = Pairs([
         Pair(Member('a'), Member('b')),
         Pair(Member('c'), Member('d')),
         Pair(Member('e'), None)
     ])
     members = Members(
         [Member('a'),
          Member('b'),
          Member('c'),
          Member('d'),
          Member('e')])
     pairs = EvaluationService().evaluate([last_pairs], members)
     self.assertEqual(pairs, [
         Pairs([
             Pair(Member('a'), Member('c')),
             Pair(Member('d'), Member('e')),
             Pair(Member('b'), None)
         ]),
         Pairs([
             Pair(Member('a'), Member('d')),
             Pair(Member('c'), Member('e')),
             Pair(Member('b'), None)
         ]),
         Pairs([
             Pair(Member('a'), Member('e')),
             Pair(Member('b'), Member('c')),
             Pair(Member('d'), None)
         ]),
         Pairs([
             Pair(Member('a'), Member('e')),
             Pair(Member('b'), Member('d')),
             Pair(Member('c'), None)
         ]),
         Pairs([
             Pair(Member('b'), Member('c')),
             Pair(Member('d'), Member('e')),
             Pair(Member('a'), None)
         ]),
         Pairs([
             Pair(Member('b'), Member('d')),
             Pair(Member('c'), Member('e')),
             Pair(Member('a'), None)
         ]),
         Pairs([
             Pair(Member('b'), Member('e')),
             Pair(Member('a'), Member('c')),
             Pair(Member('d'), None)
         ]),
         Pairs([
             Pair(Member('b'), Member('e')),
             Pair(Member('a'), Member('d')),
             Pair(Member('c'), None)
         ]),
     ])
Example #7
0
 def test_run(self):
     pairs_list = self.use_case.run(
         Members([Member('a'), Member('b'),
                  Member('c')]))
     self.assertEqual(pairs_list, [
         Pairs([Pair(Member('a'), Member('b')),
                Pair(Member('c'), None)]),
         Pairs([Pair(Member('a'), Member('c')),
                Pair(Member('b'), None)]),
         Pairs([Pair(Member('b'), Member('c')),
                Pair(Member('a'), None)])
     ])
Example #8
0
    def test_run_with_history(self):
        self.repository.save(
            PairsHistory(
                PairsHistoryId('id'),
                Pairs(
                    [Pair(Member('a'), Member('b')),
                     Pair(Member('c'), None)])))

        pairs_list = self.use_case.run(
            Members([Member('a'), Member('b'),
                     Member('c')]))
        self.assertEqual(pairs_list, [
            Pairs([Pair(Member('a'), Member('c')),
                   Pair(Member('b'), None)]),
            Pairs([Pair(Member('b'), Member('c')),
                   Pair(Member('a'), None)])
        ])
Example #9
0
 def load_members(self, message: pair_pb2.Members) -> Members:
     return Members([self.load_member(m) for m in message.members])
Example #10
0
    def next(self, *members) -> List[Pairs]:
        """e.g. pairpair.py next test1 test2 test3"""

        pairs_list = next_pairs_by_history().run(
            Members.from_list(list(members)))
        return pairs_list
Example #11
0
 def test_select_first_pairs(self):
     self.assertEqual(
         self.members.select_first_pairs(),
         [(Pair(Member('a'), Member('b')), Members([Member('c')])),
          (Pair(Member('a'), Member('c')), Members([Member('b')])),
          (Pair(Member('b'), Member('c')), Members([Member('a')]))])
Example #12
0
 def setUp(self):
     self.members = Members([Member('a'), Member('b'), Member('c')])
     self.single_members = Members([Member('a')])
Example #13
0
class EvaluationServiceTest(TestCase):
    def setUp(self):
        self.last_pairs3 = Pairs(
            [Pair(Member('a'), Member('b')),
             Pair(Member('c'), None)])
        self.members3 = Members([Member('a'), Member('b'), Member('c')])

        self.last_pairs5 = Pairs([
            Pair(Member('a'), Member('b')),
            Pair(Member('c'), Member('d')),
            Pair(Member('e'), None)
        ])
        self.members5 = Members(
            [Member('a'),
             Member('b'),
             Member('c'),
             Member('d'),
             Member('e')])

    def test_filter(self):
        tree = self.members3.combinations()
        filtered_tree = EvaluationService(
        ).pair_must_have_only_either_member_of_last_pair(
            self.last_pairs3, tree)
        self.assertEqual(filtered_tree, [
            PairTree(Pair(Member('a'), Member('c')),
                     [PairTree(Pair(Member('b'), None), [])]),
            PairTree(Pair(Member('b'), Member('c')),
                     [PairTree(Pair(Member('a'), None), [])])
        ])

    def test_filter2(self):
        tree = self.members5.combinations()
        filtered_tree = EvaluationService(
        ).pair_must_have_only_either_member_of_last_pair(
            self.last_pairs5, tree)
        self.assertEqual(filtered_tree, [
            PairTree(Pair(Member('a'), Member('c')), [
                PairTree(Pair(Member('d'), Member('e')),
                         [PairTree(Pair(Member('b'), None), [])])
            ]),
            PairTree(Pair(Member('a'), Member('d')), [
                PairTree(Pair(Member('c'), Member('e')),
                         [PairTree(Pair(Member('b'), None), [])])
            ]),
            PairTree(Pair(Member('a'), Member('e')), [
                PairTree(Pair(Member('b'), Member('c')),
                         [PairTree(Pair(Member('d'), None), [])]),
                PairTree(Pair(Member('b'), Member('d')),
                         [PairTree(Pair(Member('c'), None), [])])
            ]),
            PairTree(Pair(Member('b'), Member('c')), [
                PairTree(Pair(Member('d'), Member('e')),
                         [PairTree(Pair(Member('a'), None), [])])
            ]),
            PairTree(Pair(Member('b'), Member('d')), [
                PairTree(Pair(Member('c'), Member('e')),
                         [PairTree(Pair(Member('a'), None), [])])
            ]),
            PairTree(Pair(Member('b'), Member('e')), [
                PairTree(Pair(Member('a'), Member('c')),
                         [PairTree(Pair(Member('d'), None), [])]),
                PairTree(Pair(Member('a'), Member('d')),
                         [PairTree(Pair(Member('c'), None), [])])
            ])
        ])

    def test_filter_and_empty(self):
        members = Members([Member('a'), Member('b')])
        tree = members.combinations()
        filtered = EvaluationService(
        ).pair_must_have_only_either_member_of_last_pair(
            Pairs([Pair(Member('a'), Member('b'))]), tree)
        self.assertEqual(filtered, [])

    def test_position_filter(self):
        history = [
            Pairs([Pair(Member('a'), Member('b')),
                   Pair(Member('c'), None)]),
            Pairs([Pair(Member('a'), Member('c')),
                   Pair(Member('b'), None)])
        ]
        tree = self.members3.combinations()
        possible_pairs = PairTree.possible_pairs(tree)
        filtered_tree = EvaluationService(
        ).member_is_must_not_in_same_position_at_three_times(
            history, possible_pairs)
        self.assertEqual(
            filtered_tree,
            [Pairs([Pair(Member('b'), Member('c')),
                    Pair(Member('a'), None)])])

    def test_filter_same_pair(self):
        history = [
            Pairs([Pair(Member('a'), Member('b')),
                   Pair(Member('c'), None)])
        ]
        pairs = PairTree.possible_pairs(self.members3.combinations())
        filtered_pairs = EvaluationService(
        ).pair_should_not_exist_same_pair_in_near_history(history, pairs)
        self.assertEqual(filtered_pairs, [
            Pairs([Pair(Member('a'), Member('c')),
                   Pair(Member('b'), None)]),
            Pairs([Pair(Member('b'), Member('c')),
                   Pair(Member('a'), None)])
        ])

    def test_filter_same_pair2(self):
        history = [
            Pairs([Pair(Member('a'), Member('b')),
                   Pair(Member('c'), None)]),
            Pairs([Pair(Member('a'), Member('c')),
                   Pair(Member('b'), None)])
        ]
        pairs = PairTree.possible_pairs(self.members3.combinations())
        filtered_pairs = EvaluationService(
        ).pair_should_not_exist_same_pair_in_near_history(history, pairs)
        self.assertEqual(
            filtered_pairs,
            [Pairs([Pair(Member('b'), Member('c')),
                    Pair(Member('a'), None)])])

    def test_filter_same_pair3(self):
        history = [
            Pairs([
                Pair(Member('a'), Member('c')),
                Pair(Member('d'), Member('e')),
                Pair(Member('b'), None)
            ]),
            Pairs([
                Pair(Member('a'), Member('b')),
                Pair(Member('c'), Member('d')),
                Pair(Member('e'), None)
            ])
        ]
        tree = self.members5.combinations()
        s = EvaluationService()
        filtered_pairs = s.pair_should_not_exist_same_pair_in_near_history(
            history,
            PairTree.possible_pairs(
                s.pair_must_have_only_either_member_of_last_pair(
                    history[-1], tree)))
        self.assertEqual(filtered_pairs, [
            Pairs([
                Pair(Member('a'), Member('e')),
                Pair(Member('b'), Member('c')),
                Pair(Member('d'), None)
            ]),
            Pairs([
                Pair(Member('a'), Member('e')),
                Pair(Member('b'), Member('d')),
                Pair(Member('c'), None)
            ]),
            Pairs([
                Pair(Member('b'), Member('d')),
                Pair(Member('c'), Member('e')),
                Pair(Member('a'), None)
            ]),
            Pairs([
                Pair(Member('b'), Member('e')),
                Pair(Member('a'), Member('c')),
                Pair(Member('d'), None)
            ]),
            Pairs([
                Pair(Member('b'), Member('e')),
                Pair(Member('a'), Member('d')),
                Pair(Member('c'), None)
            ])
        ])

    def test_evaluate(self):
        last_pairs = Pairs([
            Pair(Member('a'), Member('b')),
            Pair(Member('c'), Member('d')),
            Pair(Member('e'), None)
        ])
        members = Members(
            [Member('a'),
             Member('b'),
             Member('c'),
             Member('d'),
             Member('e')])
        pairs = EvaluationService().evaluate([last_pairs], members)
        self.assertEqual(pairs, [
            Pairs([
                Pair(Member('a'), Member('c')),
                Pair(Member('d'), Member('e')),
                Pair(Member('b'), None)
            ]),
            Pairs([
                Pair(Member('a'), Member('d')),
                Pair(Member('c'), Member('e')),
                Pair(Member('b'), None)
            ]),
            Pairs([
                Pair(Member('a'), Member('e')),
                Pair(Member('b'), Member('c')),
                Pair(Member('d'), None)
            ]),
            Pairs([
                Pair(Member('a'), Member('e')),
                Pair(Member('b'), Member('d')),
                Pair(Member('c'), None)
            ]),
            Pairs([
                Pair(Member('b'), Member('c')),
                Pair(Member('d'), Member('e')),
                Pair(Member('a'), None)
            ]),
            Pairs([
                Pair(Member('b'), Member('d')),
                Pair(Member('c'), Member('e')),
                Pair(Member('a'), None)
            ]),
            Pairs([
                Pair(Member('b'), Member('e')),
                Pair(Member('a'), Member('c')),
                Pair(Member('d'), None)
            ]),
            Pairs([
                Pair(Member('b'), Member('e')),
                Pair(Member('a'), Member('d')),
                Pair(Member('c'), None)
            ]),
        ])

    def test_evaluate_twice(self):
        history = [
            Pairs([
                Pair(Member('a'), Member('b')),
                Pair(Member('c'), Member('d')),
                Pair(Member('e'), None)
            ]),
            Pairs([
                Pair(Member('a'), Member('c')),
                Pair(Member('d'), Member('e')),
                Pair(Member('b'), None)
            ])
        ]
        members = Members(
            [Member('a'),
             Member('b'),
             Member('c'),
             Member('d'),
             Member('e')])
        pairs = EvaluationService().evaluate(history, members)
        self.assertEqual(pairs, [
            Pairs([
                Pair(Member('b'), Member('c')),
                Pair(Member('a'), Member('e')),
                Pair(Member('d'), None)
            ]),
            Pairs([
                Pair(Member('c'), Member('d')),
                Pair(Member('b'), Member('e')),
                Pair(Member('a'), None)
            ])
        ])

    def test_evaluate_three_times(self):
        history = [
            Pairs([
                Pair(Member('a'), Member('b')),
                Pair(Member('c'), Member('d')),
                Pair(Member('e'), None)
            ]),
            Pairs([
                Pair(Member('a'), Member('c')),
                Pair(Member('d'), Member('e')),
                Pair(Member('b'), None)
            ]),
            Pairs([
                Pair(Member('c'), Member('d')),
                Pair(Member('b'), Member('e')),
                Pair(Member('a'), None)
            ])
        ]
        members = Members(
            [Member('a'),
             Member('b'),
             Member('c'),
             Member('d'),
             Member('e')])
        pairs = EvaluationService().evaluate(history, members)
        self.assertEqual(pairs, [
            Pairs([
                Pair(Member('d'), Member('e')),
                Pair(Member('a'), Member('b')),
                Pair(Member('c'), None)
            ])
        ])

    def test_evaluate_four_times(self):
        history = [
            Pairs([
                Pair(Member('a'), Member('b')),
                Pair(Member('c'), Member('d')),
                Pair(Member('e'), None)
            ]),
            Pairs([
                Pair(Member('a'), Member('c')),
                Pair(Member('d'), Member('e')),
                Pair(Member('b'), None)
            ]),
            Pairs([
                Pair(Member('c'), Member('d')),
                Pair(Member('b'), Member('e')),
                Pair(Member('a'), None)
            ]),
            Pairs([
                Pair(Member('d'), Member('e')),
                Pair(Member('a'), Member('b')),
                Pair(Member('c'), None)
            ])
        ]
        members = Members(
            [Member('a'),
             Member('b'),
             Member('c'),
             Member('d'),
             Member('e')])
        pairs = EvaluationService().evaluate(history, members)
        self.assertEqual(pairs, [
            Pairs([
                Pair(Member('b'), Member('e')),
                Pair(Member('a'), Member('c')),
                Pair(Member('d'), None)
            ])
        ])

    def test_evaluate_five_times(self):
        history = [
            Pairs([
                Pair(Member('a'), Member('b')),
                Pair(Member('c'), Member('d')),
                Pair(Member('e'), None)
            ]),
            Pairs([
                Pair(Member('a'), Member('c')),
                Pair(Member('d'), Member('e')),
                Pair(Member('b'), None)
            ]),
            Pairs([
                Pair(Member('c'), Member('d')),
                Pair(Member('b'), Member('e')),
                Pair(Member('a'), None)
            ]),
            Pairs([
                Pair(Member('d'), Member('e')),
                Pair(Member('a'), Member('b')),
                Pair(Member('c'), None)
            ]),
            Pairs([
                Pair(Member('b'), Member('e')),
                Pair(Member('a'), Member('c')),
                Pair(Member('d'), None)
            ])
        ]
        members = Members(
            [Member('a'),
             Member('b'),
             Member('c'),
             Member('d'),
             Member('e')])
        pairs = EvaluationService().evaluate(history, members)
        self.assertEqual(pairs, [
            Pairs([
                Pair(Member('a'), Member('b')),
                Pair(Member('c'), Member('d')),
                Pair(Member('e'), None)
            ])
        ])
Example #14
0
 def test_select_first_pairs_with_single_members(self):
     self.assertEqual(self.single_members.select_first_pairs(),
                      [(Pair(Member('a'), None), Members([]))])