def test_load_tree(self): # test to load a given tree-file tree = LoadTree(test_data('phylogeny.tre')) taxa = sorted(["Beijing", "Changsha", "Chengdu", "Fuzhou", "Guangzhou", "Guiyang", "Haerbin", "Haikou", "Hangzhou", "Hefei", "Huhehaote", "Jian\u2019ou", "Jinan", "Kunming", "Lanzhou", "Meixian", "Nanchang", "Nanjing", "Nanning", "Pingyao", "Qingdao", "Shanghai", "Shantou", "Shexian", "Suzhou", "Taibei", "Taiyuan", "Taoyuan", "Tianjin", "Tunxi", "Wenzhou", "Wuhan", "Wulumuqi", "Xi\u2019an", "Xiamen", "Xianggang", "Xiangtan", "Xining", "Yinchuan", "Zhengzhou"]) for a, b in zip(sorted(tree.taxa), taxa): assert a == b tree = LoadTree("((((((((Taiyuan,Pingyao,Huhehaote)," "((((Xi’an,Xining,Zhengzhou),(Lanzhou,Yinchuan," "Wulumuqi))," "(((Tianjin,Jinan),Qingdao),Beijing,Haerbin))," "(((Guiyang,Kunming),Chengdu,Wuhan),(Nanjing,Hefei))))," "(Xiangtan,Changsha)),Nanchang),(Shexian,Tunxi))," "((Shanghai,Suzhou,Hangzhou),Wenzhou))," "(((Xianggang,Guangzhou),Nanning),(Meixian,Taoyuan)))," "((((Xiamen,Taibei),Shantou,Haikou),Fuzhou),Jian’ou));") for a, b in zip(sorted(tree.taxa), taxa): assert a == b
def test_load_tree(test_data): # test to load a given tree-file tree = LoadTree(str(test_data / 'phylogeny.tre')) assert tree.compareByPartitions(tree) == 0 taxa = sorted([ "Beijing", "Changsha", "Chengdu", "Fuzhou", "Guangzhou", "Guiyang", "Haerbin", "Haikou", "Hangzhou", "Hefei", "Huhehaote", "Jian\u2019ou", "Jinan", "Kunming", "Lanzhou", "Meixian", "Nanchang", "Nanjing", "Nanning", "Pingyao", "Qingdao", "Shanghai", "Shantou", "Shexian", "Suzhou", "Taibei", "Taiyuan", "Taoyuan", "Tianjin", "Tunxi", "Wenzhou", "Wuhan", "Wulumuqi", "Xi\u2019an", "Xiamen", "Xianggang", "Xiangtan", "Xining", "Yinchuan", "Zhengzhou" ]) assert len(tree.getConnectingEdges('Beijing', 'Xiangtan')) == 8 for a, b in zip(sorted(tree.taxa), taxa): assert a == b tree.removeNode('Beijing') tree.prune() tree = LoadTree(tip_names=['Beijing', 'Changsha']) assert len(tree.taxa) == 2 tree = LoadTree("((((((((Taiyuan,Pingyao,Huhehaote)," "((((Xi’an,Xining,Zhengzhou),(Lanzhou,Yinchuan," "Wulumuqi))," "(((Tianjin,Jinan),Qingdao),Beijing,Haerbin))," "(((Guiyang,Kunming),Chengdu,Wuhan),(Nanjing,Hefei))))," "(Xiangtan,Changsha)),Nanchang),(Shexian,Tunxi))," "((Shanghai,Suzhou,Hangzhou),Wenzhou))," "(((Xianggang,Guangzhou),Nanning),(Meixian,Taoyuan)))," "((((Xiamen,Taibei),Shantou,Haikou),Fuzhou),Jian’ou));") for a, b in zip(sorted(tree.taxa), taxa): assert a == b
def test_more_trees(): tree = LoadTree('((a:1,b:1):2,(c:3,d:4):5);') tree2 = LoadTree('((a,b),(c,d));') assert tree.sameShape(tree) tree.tipToTipDistances() tree.getMaxTipTipDistance() tree.maxTipTipDistance() tree.getSubTree(['a', 'b', 'c']) assert tree.compareName(tree2) == 0 assert tree.compareName(tree) == 0 assert tree.compareName('(a,b),(c,d));') != 0 tree.descendantArray() tree.nameUnnamedNodes() tree.makeTreeArray() tree.getNewickRecursive(with_distances=True, semicolon=False, escape_name=False) assert 'a' in tree.getNodesDict() assert 'b' in tree.taxa assert tree.getDistances()['a', 'b'] == 2 assert tree.getMaxTipTipDistance()[0] == 12 assert tree.maxTipTipDistance()[0] == 12 tree.scaleBranchLengths(ultrametric=True) assert tree.getDistances()['a', 'b'] == pytest.approx(22.0) ntree = tree.copyRecursive() ntree2 = tree2.copy() assert ntree.sameShape(ntree2) assert 'a' in tree.getNodeNames() with pytest.raises(TreeParseError): LoadTree('(a,b;') with pytest.raises(TreeParseError): LoadTree(treestring="(a,b'") with pytest.raises(TreeParseError): LoadTree(treestring="(a,'b'") with pytest.raises(TreeParseError): LoadTree(treestring="(a,'b'\n") with pytest.raises(TreeParseError): LoadTree(treestring="(a,'b-c'") with pytest.raises(TreeParseError): LoadTree("(a,b),('c_d',e);") new_tree = LoadTree("((a,b),('',e));") new_tree.nameUnnamedNodes()
def __init__(self, tree, **keywords): # this is an absolutely nasty hack, but it helps us to maintain # lingpy-specific aspects of cogent's trees and allows us to include # them in our documentation if type(tree) == str: if tree[-4:] not in ['.nwk', '.txt']: tmp = LoadTree(treestring=tree) else: tmp = LoadTree(tree) else: if type(tree) == list: tmp = LoadTree(treestring=random_tree(tree, **keywords)) else: tmp = LoadTree(tree) for key, val in tmp.__dict__.items(): self.__dict__[key] = val self._edge_len = len(self.getNodeNames()) - 1
def __init__(self, tree, **keywords): # this is an absolutely nasty hack, but it helps us to maintain # lingpy-specific aspects of cogent's trees and allows us to include # them in our documentation if type(tree) == str: if not os.path.isfile(tree): tmp = LoadTree(treestring=tree) else: tmp = LoadTree(tree) else: if type(tree) == list: tmp = LoadTree(treestring=random_tree(tree, **keywords)) else: # pragma: no cover # last ditch attempt to try load tmp = LoadTree(tree) for key, val in tmp.__dict__.items(): self.__dict__[key] = val self._edge_len = len(self.getNodeNames()) - 1