def __construct_tree_dict(in_file, in_id, merge_tree_dict): in_fp = bp.FileParser(in_file) for in_items in in_fp.iter(): in_fp.print_prog() cur_chr = in_items[0][3:] cur_pos = int(in_items[1]) cur_tag = in_items[-1] if "V" in cur_tag: type_tag = "pc_ind" if "ind" in cur_tag else "pc_snv" elif "refhom" in cur_tag: type_tag = "nc_low" else: type_tag = "nc_ind" if "ind" in cur_tag else "nc_snv" af = round(float(in_items[5]), FLOAT_PREC) cur_info = f"{in_id}_{'_'.join(in_items[2:5])}_{af}_{'_'.join(in_items[6:8])}" if type_tag not in merge_tree_dict: merge_tree_dict[type_tag] = dict() if cur_chr not in merge_tree_dict[type_tag]: merge_tree_dict[type_tag][cur_chr] = tree.RBTree() prev_info = merge_tree_dict[type_tag][cur_chr].search(cur_pos) if prev_info: if prev_info.split(";")[0] != cur_tag: print("WARNING: Inconsistent tag for locus") cur_info = f"{prev_info};{cur_info}" else: cur_info = f"{cur_tag};{cur_info}" merge_tree_dict[type_tag][cur_chr].insert(cur_pos, cur_info) return
def test_delete_leaf(self): t = tree.RBTree() for i in range(10): t.insert(i) self.assertTrue(t.delete(9)) ct = grow() ct.root.right.right.right.right = tree.Node(None, ct.root.right.right.right) self.assertTrue(tree_compare(t.root, ct.root))
def test_delete_many(self): t = tree.RBTree() for i in range(10): t.insert(i) for i in range(5, 10): self.assertTrue(t.delete(i)) ct = grow() ct.root.right = tree.Node(4, ct.root) self.assertTrue(tree_compare(t.root, ct.root))
def test_find_many(self): t = tree.RBTree() for i in range(0, 100, 3): t.insert(i) for i in range(1, 100, 3): t.insert(i) for i in range(2, 100, 3): t.insert(i) for i in range(10): self.assertTrue(t.find(i))
def test_delete_wonder2(self): t = tree.RBTree() random.seed(0) vals = [0] * 100 for i in range(len(vals)): k = random.randint(0, 99) vals[k] = 1 t.insert(k) for i in range(len(vals) - 1, -1, -1): if vals[i] == 1: self.assertTrue(t.delete(i))
def grow(): ct = tree.RBTree() ct.root = tree.Node(3) ct.root.left = tree.Node(1, ct.root) ct.root.right = tree.Node(5, ct.root) ct.root.left.left = tree.Node(0, ct.root.left) ct.root.left.right = tree.Node(2, ct.root.left) ct.root.right.left = tree.Node(4, ct.root.right) ct.root.right.right = tree.Node(7, ct.root.right) ct.root.right.right.left = tree.Node(6, ct.root.right.right) ct.root.right.right.right = tree.Node(8, ct.root.right.right) ct.root.right.right.right.right = tree.Node(9, ct.root.right.right.right) return ct
def test_find_many2(self): t = tree.RBTree() for i in range(10, 0, -1): t.insert(i) for i in range(1, 11): self.assertTrue(t.find(i))
def test_insert_many(self): t = tree.RBTree() for i in range(10): t.insert(i) ct = grow() self.assertTrue(tree_compare(t.root, ct.root))
def test_find_none_big(self): t = tree.RBTree() t.insert(2) self.assertFalse(t.find(3))
def test_find_none_small(self): t = tree.RBTree() t.insert(2) self.assertFalse(t.find(1))
def test_delete_not_exist_big(self): t = tree.RBTree() t.insert(1) self.assertFalse(t.delete(2))
def test_delete_root(self): t = tree.RBTree() t.insert(1) self.assertTrue(t.delete(1)) self.assertEqual(t.root, None)
def test_insert_one(self): t = tree.RBTree() t.insert(2) self.assertEqual(t.root.key, 2)
def test_creation(self): t = tree.RBTree() self.assertNotEqual(t, None)
def test_delete_many3(self): t = tree.RBTree() for i in range(10): t.insert(i) self.assertTrue(t.delete(3)) self.assertTrue(t.delete(4))
def test_delete_many2(self): t = tree.RBTree() for i in range(10): t.insert(i) for i in range(0, 6): self.assertTrue(t.delete(i))
def test_delete_none(self): t = tree.RBTree() self.assertFalse(t.delete(2))
def test_find_one(self): t = tree.RBTree() t.insert(2) self.assertTrue(t.find(2))
def test_find_none(self): t = tree.RBTree() self.assertFalse(t.find(2))
def test_delete_not_exist_small(self): t = tree.RBTree() t.insert(1) self.assertFalse(t.delete(-1))