示例#1
0
    def test_eniminate_transitive(self):
        algo = Bernstein()
        fds = FDList()
        fds.add_fd(FD(frozenset(['X1', 'X2']), frozenset(['A', 'D'])))
        fds.add_fd(FD(frozenset(['C', 'D']), frozenset(['X1', 'X2'])))
        fds.add_fd(FD(frozenset(['A', 'X1']), frozenset(['B'])))
        fds.add_fd(FD(frozenset(['B', 'X2']), frozenset(['C'])))
        fds.add_fd(FD(frozenset(['C']), frozenset(['A'])))

        algo.compute(fds)

        final = algo.get_final_fds_lists()

        expexted1 = FDList()
        expexted1.add_fd(FD(frozenset(['X1', 'X2']), frozenset(['C'])))
        expexted1.add_fd(FD(frozenset(['X1', 'X2']), frozenset(['D'])))
        expexted1.add_fd(FD(frozenset(['C', 'D']), frozenset(['X2'])))
        expexted1.add_fd(FD(frozenset(['C', 'D']), frozenset(['X1'])))
        expexted2 = FDList()
        expexted2.add_fd(FD(frozenset(['A', 'X1']), frozenset(['B'])))
        expexted3 = FDList()
        expexted3.add_fd(FD(frozenset(['B', 'X2']), frozenset(['C'])))
        expexted4 = FDList()
        expexted4.add_fd(FD(frozenset(['C']), frozenset(['A'])))

        self.assertEqual(4, len(final))
        self.assertEqual(expexted1.__str__(), final[0].__str__())
        self.assertEqual(expexted2.__str__(), final[1].__str__())
        self.assertEqual(expexted3.__str__(), final[2].__str__())
        self.assertEqual(expexted4.__str__(), final[3].__str__())
示例#2
0
    def test_eniminate_transitive(self):
        algo = Bernstein()
        fds = FDList()
        fds.add_fd(FD(frozenset(['X1', 'X2']), frozenset(['A', 'D'])))
        fds.add_fd(FD(frozenset(['C', 'D']), frozenset(['X1', 'X2'])))
        fds.add_fd(FD(frozenset(['A', 'X1']), frozenset(['B'])))
        fds.add_fd(FD(frozenset(['B', 'X2']), frozenset(['C'])))
        fds.add_fd(FD(frozenset(['C']), frozenset(['A'])))

        algo.compute(fds)

        final = algo.get_final_fds_lists()

        expexted1 = FDList()
        expexted1.add_fd(FD(frozenset(['X1', 'X2']), frozenset(['C'])))
        expexted1.add_fd(FD(frozenset(['X1', 'X2']), frozenset(['D'])))
        expexted1.add_fd(FD(frozenset(['C', 'D']), frozenset(['X2'])))
        expexted1.add_fd(FD(frozenset(['C', 'D']), frozenset(['X1'])))
        expexted2 = FDList()
        expexted2.add_fd(FD(frozenset(['A', 'X1']), frozenset(['B'])))
        expexted3 = FDList()
        expexted3.add_fd(FD(frozenset(['B', 'X2']), frozenset(['C'])))
        expexted4 = FDList()
        expexted4.add_fd(FD(frozenset(['C']), frozenset(['A'])))

        self.assertEqual(4, len(final))
        self.assertEqual(expexted1.__str__(), final[0].__str__())
        self.assertEqual(expexted2.__str__(), final[1].__str__())
        self.assertEqual(expexted3.__str__(), final[2].__str__())
        self.assertEqual(expexted4.__str__(), final[3].__str__())
示例#3
0
    def test_merge_key2(self):
        algo = Bernstein()
        fds = FDList()
        fds.add_fd(FD(frozenset(['X1', 'X2']), frozenset(['A', 'D'])))
        fds.add_fd(FD(frozenset(['C', 'D']), frozenset(['X1', 'X2'])))
        fds.add_fd(FD(frozenset(['A', 'X1']), frozenset(['B'])))
        fds.add_fd(FD(frozenset(['B', 'X2']), frozenset(['C'])))
        fds.add_fd(FD(frozenset(['C']), frozenset(['A'])))

        algo.compute(fds)

        merged_list = algo.get_merged_fd_lists()

        expexted1 = FDList()
        expexted1.add_fd(FD(frozenset(['X1', 'X2']), frozenset(['A'])))
        expexted2 = FDList()
        expexted2.add_fd(FD(frozenset(['A', 'X1']), frozenset(['B'])))
        expexted3 = FDList()
        expexted3.add_fd(FD(frozenset(['B', 'X2']), frozenset(['C'])))
        expexted4 = FDList()
        expexted4.add_fd(FD(frozenset(['C']), frozenset(['A'])))

        result_tuple = merged_list[0]

        self.assertEqual(4, len(merged_list))
        self.assertEqual(expexted1.__str__(), result_tuple[0].__str__())
        self.assertEqual(expexted2.__str__(), merged_list[1].__str__())
        self.assertEqual(expexted3.__str__(), merged_list[2].__str__())
        self.assertEqual(expexted4.__str__(), merged_list[3].__str__())
示例#4
0
    def test_build_lossy_table_2(self):
        algo = Bernstein()
        fds = FDList()
        fds.add_fd(FD(frozenset(['A', 'B']), frozenset(['C', 'D'])))
        fds.add_fd(FD(frozenset(['A']), frozenset(['C', 'D'])))

        algo.compute(fds)

        attr, table = algo.build_lossy_table(algo.get_relations(), fds)
        is_lossless, info = algo.check_print_lossy_table(attr, table)
        if not is_lossless:
            print 'The table below is not lossless'
        else:
            print 'The table below is lossless'
        print info

        if not is_lossless:
            new_relations = deepcopy(algo.get_relations())
            first_key = algo.get_all_keys()[0]
            new_rel = {'key':first_key, 'attr':set([])}
            new_relations.append(new_rel)

        attr, table = algo.build_lossy_table(new_relations, fds)
        is_lossless, info = algo.check_print_lossy_table(attr, table)
        if not is_lossless:
            print 'The table below is not lossless'
        else:
            print 'The table below is lossless'
        print info
示例#5
0
    def test_merge_key2(self):
        algo = Bernstein()
        fds = FDList()
        fds.add_fd(FD(frozenset(['X1', 'X2']), frozenset(['A', 'D'])))
        fds.add_fd(FD(frozenset(['C', 'D']), frozenset(['X1', 'X2'])))
        fds.add_fd(FD(frozenset(['A', 'X1']), frozenset(['B'])))
        fds.add_fd(FD(frozenset(['B', 'X2']), frozenset(['C'])))
        fds.add_fd(FD(frozenset(['C']), frozenset(['A'])))

        algo.compute(fds)

        merged_list = algo.get_merged_fd_lists()

        expexted1 = FDList()
        expexted1.add_fd(FD(frozenset(['X1', 'X2']), frozenset(['A'])))
        expexted2 = FDList()
        expexted2.add_fd(FD(frozenset(['A', 'X1']), frozenset(['B'])))
        expexted3 = FDList()
        expexted3.add_fd(FD(frozenset(['B', 'X2']), frozenset(['C'])))
        expexted4 = FDList()
        expexted4.add_fd(FD(frozenset(['C']), frozenset(['A'])))

        result_tuple = merged_list[0]

        self.assertEqual(4, len(merged_list))
        self.assertEqual(expexted1.__str__(), result_tuple[0].__str__())
        self.assertEqual(expexted2.__str__(), merged_list[1].__str__())
        self.assertEqual(expexted3.__str__(), merged_list[2].__str__())
        self.assertEqual(expexted4.__str__(), merged_list[3].__str__())
示例#6
0
    def test_construct_relations_2(self):
        algo = Bernstein()
        fds = FDList()
        fds.add_fd(FD(frozenset(['A', 'B']), frozenset(['C', 'D'])))
        fds.add_fd(FD(frozenset(['A']), frozenset(['C', 'D'])))

        algo.compute(fds)

        relations = algo.get_relations()

        print Bernstein.get_print_relations_info(relations)

        self.assertEqual(1, len(relations))
示例#7
0
    def test_construct_relations_2(self):
        algo = Bernstein()
        fds = FDList()
        fds.add_fd(FD(frozenset(['A', 'B']), frozenset(['C', 'D'])))
        fds.add_fd(FD(frozenset(['A']), frozenset(['C', 'D'])))

        algo.compute(fds)

        relations = algo.get_relations()

        print Bernstein.get_print_relations_info(relations)

        self.assertEqual(1, len(relations))
示例#8
0
    def test_find_all_keys_based_on_prime_table2(self):
        algo = Bernstein()
        fds = FDList()
        fds.add_fd(FD(frozenset(['A', 'B']), frozenset(['C', 'D'])))
        fds.add_fd(FD(frozenset(['C']), frozenset(['B'])))

        algo.compute(fds)

        print algo.get_print_all_keys_info(algo.get_all_keys())
示例#9
0
    def test_print_n_np_table(self):
        algo = Bernstein()
        fds = FDList()
        fds.add_fd(FD(frozenset(['X1', 'X2']), frozenset(['A', 'D'])))
        fds.add_fd(FD(frozenset(['C', 'D']), frozenset(['X1', 'X2'])))
        fds.add_fd(FD(frozenset(['A', 'X1']), frozenset(['B'])))
        fds.add_fd(FD(frozenset(['B', 'X2']), frozenset(['C'])))
        fds.add_fd(FD(frozenset(['C']), frozenset(['A'])))

        algo.compute(fds)
        print algo.get_print_n_np_table_info(algo.get_p_np_table())
示例#10
0
    def test_find_all_keys_based_on_prime_table2(self):
        algo = Bernstein()
        fds = FDList()
        fds.add_fd(FD(frozenset(['A', 'B']), frozenset(['C', 'D'])))
        fds.add_fd(FD(frozenset(['C']), frozenset(['B'])))

        algo.compute(fds)

        print algo.get_print_all_keys_info(algo.get_all_keys())
示例#11
0
    def test_shortcomming_4(self):
        algo = Bernstein()
        fds = FDList()
        fds.add_fd(FD(frozenset(['A', 'D']), frozenset(['B'])))
        fds.add_fd(FD(frozenset(['B']), frozenset(['C'])))
        fds.add_fd(FD(frozenset(['C']), frozenset(['D'])))
        fds.add_fd(FD(frozenset(['A', 'B']), frozenset(['E'])))
        fds.add_fd(FD(frozenset(['A', 'C']), frozenset(['F'])))
        fds.add_fd(FD(frozenset(['A', 'D']), frozenset(['F'])))
        fds.add_fd(FD(frozenset(['A', 'C']), frozenset(['E'])))

        algo.compute(fds)

        print algo.get_print_relations_info(algo.get_relations())
示例#12
0
    def test_print_n_np_table(self):
        algo = Bernstein()
        fds = FDList()
        fds.add_fd(FD(frozenset(['X1', 'X2']), frozenset(['A', 'D'])))
        fds.add_fd(FD(frozenset(['C', 'D']), frozenset(['X1', 'X2'])))
        fds.add_fd(FD(frozenset(['A', 'X1']), frozenset(['B'])))
        fds.add_fd(FD(frozenset(['B', 'X2']), frozenset(['C'])))
        fds.add_fd(FD(frozenset(['C']), frozenset(['A'])))

        algo.compute(fds)
        print algo.get_print_n_np_table_info(algo.get_p_np_table())
示例#13
0
    def test_build_lossy_table(self):
        algo = Bernstein()
        fds = FDList()
        fds.add_fd(FD(frozenset(['X1', 'X2']), frozenset(['A', 'D'])))
        fds.add_fd(FD(frozenset(['C', 'D']), frozenset(['X1', 'X2'])))
        fds.add_fd(FD(frozenset(['A', 'X1']), frozenset(['B'])))
        fds.add_fd(FD(frozenset(['B', 'X2']), frozenset(['C'])))
        fds.add_fd(FD(frozenset(['C']), frozenset(['A'])))

        algo.compute(fds)

        attr, table = algo.build_lossy_table(algo.get_relations(), fds)

        is_lossless, info = algo.check_print_lossy_table(attr, table)
        print info
示例#14
0
    def test_shortcomming_4(self):
        algo = Bernstein()
        fds = FDList()
        fds.add_fd(FD(frozenset(['A', 'D']), frozenset(['B'])))
        fds.add_fd(FD(frozenset(['B']), frozenset(['C'])))
        fds.add_fd(FD(frozenset(['C']), frozenset(['D'])))
        fds.add_fd(FD(frozenset(['A', 'B']), frozenset(['E'])))
        fds.add_fd(FD(frozenset(['A', 'C']), frozenset(['F'])))
        fds.add_fd(FD(frozenset(['A', 'D']), frozenset(['F'])))
        fds.add_fd(FD(frozenset(['A', 'C']), frozenset(['E'])))

        algo.compute(fds)

        print algo.get_print_relations_info(algo.get_relations())
示例#15
0
    def test_build_lossy_table(self):
        algo = Bernstein()
        fds = FDList()
        fds.add_fd(FD(frozenset(['X1', 'X2']), frozenset(['A', 'D'])))
        fds.add_fd(FD(frozenset(['C', 'D']), frozenset(['X1', 'X2'])))
        fds.add_fd(FD(frozenset(['A', 'X1']), frozenset(['B'])))
        fds.add_fd(FD(frozenset(['B', 'X2']), frozenset(['C'])))
        fds.add_fd(FD(frozenset(['C']), frozenset(['A'])))

        algo.compute(fds)

        attr, table = algo.build_lossy_table(algo.get_relations(), fds)

        is_lossless, info = algo.check_print_lossy_table(attr, table)
        print info
示例#16
0
    def test_build_lossy_table_2(self):
        algo = Bernstein()
        fds = FDList()
        fds.add_fd(FD(frozenset(['A', 'B']), frozenset(['C', 'D'])))
        fds.add_fd(FD(frozenset(['A']), frozenset(['C', 'D'])))

        algo.compute(fds)

        attr, table = algo.build_lossy_table(algo.get_relations(), fds)
        is_lossless, info = algo.check_print_lossy_table(attr, table)
        if not is_lossless:
            print 'The table below is not lossless'
        else:
            print 'The table below is lossless'
        print info

        if not is_lossless:
            new_relations = deepcopy(algo.get_relations())
            first_key = algo.get_all_keys()[0]
            new_rel = {'key': first_key, 'attr': set([])}
            new_relations.append(new_rel)

        attr, table = algo.build_lossy_table(new_relations, fds)
        is_lossless, info = algo.check_print_lossy_table(attr, table)
        if not is_lossless:
            print 'The table below is not lossless'
        else:
            print 'The table below is lossless'
        print info