Coverage for test_taxonomic.py: 96%

97 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2024-08-07 10:27 +0200

1import sys 

2import os 

3from io import StringIO 

4import unittest 

5import requests 

6 

7sys.path.insert(0, os.path.abspath(os.path.dirname(__file__) + '/..')) 

8 

9#from collections import namedtuple 

10from tempfile import NamedTemporaryFile 

11from treeprofiler import tree_annotate 

12from treeprofiler.src import utils 

13from ete4 import GTDBTaxa 

14 

15# GTDB_r202_url = "https://github.com/etetoolkit/ete-data/raw/main/gtdb_taxonomy/gtdb202/gtdb202dump.tar.gz" 

16 

17# def update_gtdb_r202(): 

18# gtdb = GTDBTaxa() 

19# fname = "gtdb202dump.tar.gz" 

20# #utils.download_file(GTDB_r202_url, "gtdb202dump.tar.gz") 

21# if not os.path.exists(fname): 

22# print(f'Downloading {fname} from {GTDB_r202_url} ... for testing GTDB taxonomic annotation') 

23# with open(fname, 'wb') as f: 

24# f.write(requests.get(GTDB_r202_url).content) 

25 

26# gtdb.update_taxonomy_database("gtdb202dump.tar.gz") 

27# os.remove(fname) 

28 

29# need gtdb release to be 202 

30#update_gtdb_r202() 

31 

32class TestNCBITaxonomy(unittest.TestCase): 

33 def test_annotate_taxnomic_NCBI_01(self): 

34 # taxid in the leaf name 

35 sp_delimiter = '' 

36 sp_field = '' 

37 test_tree = utils.ete4_parse("((9598, 9606), 10090);") 

38 test_tree_annotated, rank2values = tree_annotate.annotate_taxa(test_tree, db='NCBI', taxid_attr="name", sp_delimiter=sp_delimiter, sp_field=sp_field) 

39 expected_tree = "((9598:1[&&NHX:taxid=9598:sci_name=Pan troglodytes:common_name=Pan troglodytes:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146|9443|376913|314293|9526|314295|9604|207598|9596|9598:rank=species:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Primates|Catarrhini|Pan|Pan troglodytes|Hominidae|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Homininae|Euarchontoglires|Simiiformes|Hominoidea|Haplorrhini|Dipnotetrapodomorpha|Boreoeutheria],9606:1[&&NHX:taxid=9606:sci_name=Homo sapiens:common_name=Homo sapiens:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146|9443|376913|314293|9526|314295|9604|207598|9605|9606:rank=species:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Primates|Catarrhini|Hominidae|Homo|Homo sapiens|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Homininae|Euarchontoglires|Simiiformes|Hominoidea|Haplorrhini|Dipnotetrapodomorpha|Boreoeutheria]):1[&&NHX:taxid=207598:sci_name=Homininae:common_name=:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146|9443|376913|314293|9526|314295|9604|207598:rank=subfamily:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Primates|Catarrhini|Hominidae|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Homininae|Euarchontoglires|Simiiformes|Hominoidea|Haplorrhini|Dipnotetrapodomorpha|Boreoeutheria],10090:1[&&NHX:taxid=10090:sci_name=Mus musculus:common_name=Mus musculus:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146|314147|9989|1963758|337687|10066|39107|10088|862507|10090:rank=species:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Rodentia|Muridae|Mus|Mus musculus|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Murinae|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Euarchontoglires|Glires|Muroidea|Mus|Dipnotetrapodomorpha|Boreoeutheria|Myomorpha]);" 

40 props = ['taxid', 'sci_name', 'common_name', 'lineage', 'rank', 'named_lineage'] 

41 self.assertEqual(test_tree_annotated.write(props=props, parser=1), expected_tree) 

42 

43 

44 def test_annotate_taxnomic_NCBI_02(self): 

45 # taxid in the leaf name 

46 test_tree = utils.ete4_parse("((9598.abc, 9606.nca), 10090.abd);") 

47 test_tree_annotated, rank2values = tree_annotate.annotate_taxa(test_tree, db='NCBI', taxid_attr="name", sp_delimiter='.', sp_field=0) 

48 props = ['taxid', 'sci_name', 'common_name', 'lineage', 'rank', 'named_lineage'] 

49 expected_tree = "((9598.abc:1[&&NHX:taxid=9598:sci_name=Pan troglodytes:common_name=Pan troglodytes:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146|9443|376913|314293|9526|314295|9604|207598|9596|9598:rank=species:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Primates|Catarrhini|Pan|Pan troglodytes|Hominidae|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Homininae|Euarchontoglires|Simiiformes|Hominoidea|Haplorrhini|Dipnotetrapodomorpha|Boreoeutheria],9606.nca:1[&&NHX:taxid=9606:sci_name=Homo sapiens:common_name=Homo sapiens:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146|9443|376913|314293|9526|314295|9604|207598|9605|9606:rank=species:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Primates|Catarrhini|Hominidae|Homo|Homo sapiens|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Homininae|Euarchontoglires|Simiiformes|Hominoidea|Haplorrhini|Dipnotetrapodomorpha|Boreoeutheria]):1[&&NHX:taxid=207598:sci_name=Homininae:common_name=:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146|9443|376913|314293|9526|314295|9604|207598:rank=subfamily:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Primates|Catarrhini|Hominidae|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Homininae|Euarchontoglires|Simiiformes|Hominoidea|Haplorrhini|Dipnotetrapodomorpha|Boreoeutheria],10090.abd:1[&&NHX:taxid=10090:sci_name=Mus musculus:common_name=Mus musculus:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146|314147|9989|1963758|337687|10066|39107|10088|862507|10090:rank=species:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Rodentia|Muridae|Mus|Mus musculus|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Murinae|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Euarchontoglires|Glires|Muroidea|Mus|Dipnotetrapodomorpha|Boreoeutheria|Myomorpha]);" 

50 self.assertEqual(test_tree_annotated.write(props=props, parser=1), expected_tree) 

51 

52 def test_annotate_taxnomic_NCBI_03(self): 

53 # ncbi_id in the other column  

54 test_tree = utils.ete4_parse("(A:1,((B:1,D:1):1,E:1):1);") 

55 

56 with NamedTemporaryFile(suffix='.tsv') as f_annotation: 

57 f_annotation.write(b'#name\tncbi_id\nA\t7707\nB\t9606\nD\t9598\nE\t10090\n') 

58 f_annotation.flush() 

59 

60 metadata_dict, node_props, columns, prop2type = tree_annotate.parse_csv([f_annotation.name]) 

61 

62 test_tree_annotated, annotated_prop2type = tree_annotate.run_tree_annotate(test_tree, 

63 metadata_dict=metadata_dict, node_props=node_props, 

64 columns=columns, prop2type=prop2type, taxadb='NCBI', taxon_column='ncbi_id', taxon_delimiter='', taxa_field=0) 

65 

66 expected_tree_no_root = '(A:1[&&NHX:taxid=7707:ncbi_id=7707:sci_name=Dendrochirotida:rank=order:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa],((B:1[&&NHX:taxid=9606:ncbi_id=9606:sci_name=Homo sapiens:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146|9443|376913|314293|9526|314295|9604|207598|9605|9606:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Primates|Catarrhini|Hominidae|Homo|Homo sapiens|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Homininae|Euarchontoglires|Simiiformes|Hominoidea|Haplorrhini|Dipnotetrapodomorpha|Boreoeutheria],D:1[&&NHX:taxid=9598:ncbi_id=9598:sci_name=Pan troglodytes:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146|9443|376913|314293|9526|314295|9604|207598|9596|9598:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Primates|Catarrhini|Pan|Pan troglodytes|Hominidae|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Homininae|Euarchontoglires|Simiiformes|Hominoidea|Haplorrhini|Dipnotetrapodomorpha|Boreoeutheria])N3:1[&&NHX:taxid=207598:sci_name=Homininae:rank=subfamily:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146|9443|376913|314293|9526|314295|9604|207598:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Primates|Catarrhini|Hominidae|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Homininae|Euarchontoglires|Simiiformes|Hominoidea|Haplorrhini|Dipnotetrapodomorpha|Boreoeutheria],E:1[&&NHX:taxid=10090:ncbi_id=10090:sci_name=Mus musculus:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146|314147|9989|1963758|337687|10066|39107|10088|862507|10090:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Rodentia|Muridae|Mus|Mus musculus|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Murinae|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Euarchontoglires|Glires|Muroidea|Mus|Dipnotetrapodomorpha|Boreoeutheria|Myomorpha])N5:1[&&NHX:taxid=314146:sci_name=Euarchontoglires:rank=superorder:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Euarchontoglires|Dipnotetrapodomorpha|Boreoeutheria]);' 

67 expected_tree_with_root = '(A:1[&&NHX:taxid=7707:ncbi_id=7707:sci_name=Dendrochirotida:rank=order:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa],((B:1[&&NHX:taxid=9606:ncbi_id=9606:sci_name=Homo sapiens:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146|9443|376913|314293|9526|314295|9604|207598|9605|9606:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Primates|Catarrhini|Hominidae|Homo|Homo sapiens|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Homininae|Euarchontoglires|Simiiformes|Hominoidea|Haplorrhini|Dipnotetrapodomorpha|Boreoeutheria],D:1[&&NHX:taxid=9598:ncbi_id=9598:sci_name=Pan troglodytes:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146|9443|376913|314293|9526|314295|9604|207598|9596|9598:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Primates|Catarrhini|Pan|Pan troglodytes|Hominidae|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Homininae|Euarchontoglires|Simiiformes|Hominoidea|Haplorrhini|Dipnotetrapodomorpha|Boreoeutheria])N3:1[&&NHX:taxid=207598:sci_name=Homininae:rank=subfamily:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146|9443|376913|314293|9526|314295|9604|207598:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Primates|Catarrhini|Hominidae|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Homininae|Euarchontoglires|Simiiformes|Hominoidea|Haplorrhini|Dipnotetrapodomorpha|Boreoeutheria],E:1[&&NHX:taxid=10090:ncbi_id=10090:sci_name=Mus musculus:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146|314147|9989|1963758|337687|10066|39107|10088|862507|10090:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Rodentia|Muridae|Mus|Mus musculus|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Murinae|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Euarchontoglires|Glires|Muroidea|Mus|Dipnotetrapodomorpha|Boreoeutheria|Myomorpha])N5:1[&&NHX:taxid=314146:sci_name=Euarchontoglires:rank=superorder:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Euarchontoglires|Dipnotetrapodomorpha|Boreoeutheria])Root[&&NHX:taxid=33511:sci_name=Deuterostomia:rank=clade:lineage=1|131567|2759|33154|33208|6072|33213|33511:named_lineage=root|Eukaryota|Eumetazoa|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms];' 

68 

69 show_properties = ['taxid', 'ncbi_id','sci_name','rank','lineage', 'named_lineage'] 

70 self.assertEqual(test_tree_annotated.write(props=show_properties, parser=1), expected_tree_no_root) 

71 self.assertEqual(test_tree_annotated.write(props=show_properties, parser=1, format_root_node=True), expected_tree_with_root) 

72 

73 def test_annotate_taxnomic_NCBI_04(self): 

74 # ncbi_id in the other column  

75 test_tree = utils.ete4_parse("(A:1,((B:1,D:1):1,E:1):1);") 

76 

77 with NamedTemporaryFile(suffix='.tsv') as f_annotation: 

78 f_annotation.write(b'#name\tncbi_id\nA\t7707.abc\nB\t9606.acs\nD\t9598.asd\nE\t10090.sds\n') 

79 f_annotation.flush() 

80 

81 metadata_dict, node_props, columns, prop2type = tree_annotate.parse_csv([f_annotation.name]) 

82 

83 test_tree_annotated, annotated_prop2type = tree_annotate.run_tree_annotate(test_tree, 

84 metadata_dict=metadata_dict, node_props=node_props, 

85 columns=columns, prop2type=prop2type, taxadb='NCBI', taxon_column='ncbi_id', taxon_delimiter='.', taxa_field=0) 

86 

87 expected_tree_no_root = '(A:1[&&NHX:taxid=7707:ncbi_id=7707:sci_name=Dendrochirotida:rank=order:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa],((B:1[&&NHX:taxid=9606:ncbi_id=9606:sci_name=Homo sapiens:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146|9443|376913|314293|9526|314295|9604|207598|9605|9606:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Primates|Catarrhini|Hominidae|Homo|Homo sapiens|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Homininae|Euarchontoglires|Simiiformes|Hominoidea|Haplorrhini|Dipnotetrapodomorpha|Boreoeutheria],D:1[&&NHX:taxid=9598:ncbi_id=9598:sci_name=Pan troglodytes:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146|9443|376913|314293|9526|314295|9604|207598|9596|9598:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Primates|Catarrhini|Pan|Pan troglodytes|Hominidae|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Homininae|Euarchontoglires|Simiiformes|Hominoidea|Haplorrhini|Dipnotetrapodomorpha|Boreoeutheria])N3:1[&&NHX:taxid=207598:sci_name=Homininae:rank=subfamily:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146|9443|376913|314293|9526|314295|9604|207598:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Primates|Catarrhini|Hominidae|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Homininae|Euarchontoglires|Simiiformes|Hominoidea|Haplorrhini|Dipnotetrapodomorpha|Boreoeutheria],E:1[&&NHX:taxid=10090:ncbi_id=10090:sci_name=Mus musculus:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146|314147|9989|1963758|337687|10066|39107|10088|862507|10090:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Rodentia|Muridae|Mus|Mus musculus|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Murinae|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Euarchontoglires|Glires|Muroidea|Mus|Dipnotetrapodomorpha|Boreoeutheria|Myomorpha])N5:1[&&NHX:taxid=314146:sci_name=Euarchontoglires:rank=superorder:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Euarchontoglires|Dipnotetrapodomorpha|Boreoeutheria]);' 

88 expected_tree_with_root = '(A:1[&&NHX:taxid=7707:ncbi_id=7707:sci_name=Dendrochirotida:rank=order:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa],((B:1[&&NHX:taxid=9606:ncbi_id=9606:sci_name=Homo sapiens:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146|9443|376913|314293|9526|314295|9604|207598|9605|9606:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Primates|Catarrhini|Hominidae|Homo|Homo sapiens|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Homininae|Euarchontoglires|Simiiformes|Hominoidea|Haplorrhini|Dipnotetrapodomorpha|Boreoeutheria],D:1[&&NHX:taxid=9598:ncbi_id=9598:sci_name=Pan troglodytes:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146|9443|376913|314293|9526|314295|9604|207598|9596|9598:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Primates|Catarrhini|Pan|Pan troglodytes|Hominidae|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Homininae|Euarchontoglires|Simiiformes|Hominoidea|Haplorrhini|Dipnotetrapodomorpha|Boreoeutheria])N3:1[&&NHX:taxid=207598:sci_name=Homininae:rank=subfamily:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146|9443|376913|314293|9526|314295|9604|207598:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Primates|Catarrhini|Hominidae|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Homininae|Euarchontoglires|Simiiformes|Hominoidea|Haplorrhini|Dipnotetrapodomorpha|Boreoeutheria],E:1[&&NHX:taxid=10090:ncbi_id=10090:sci_name=Mus musculus:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146|314147|9989|1963758|337687|10066|39107|10088|862507|10090:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Rodentia|Muridae|Mus|Mus musculus|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Murinae|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Euarchontoglires|Glires|Muroidea|Mus|Dipnotetrapodomorpha|Boreoeutheria|Myomorpha])N5:1[&&NHX:taxid=314146:sci_name=Euarchontoglires:rank=superorder:lineage=1|131567|2759|33154|33208|6072|33213|33511|7711|89593|7742|7776|117570|117571|8287|1338369|32523|32524|40674|32525|9347|1437010|314146:named_lineage=root|Eukaryota|Eumetazoa|Chordata|Vertebrata|Gnathostomata|Sarcopterygii|Eutheria|Tetrapoda|Amniota|Theria|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Mammalia|Craniata|Teleostomi|Euteleostomi|cellular organisms|Euarchontoglires|Dipnotetrapodomorpha|Boreoeutheria])Root[&&NHX:taxid=33511:sci_name=Deuterostomia:rank=clade:lineage=1|131567|2759|33154|33208|6072|33213|33511:named_lineage=root|Eukaryota|Eumetazoa|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms];' 

89 

90 show_properties = ['taxid', 'ncbi_id','sci_name','rank','lineage', 'named_lineage'] 

91 self.assertEqual(test_tree_annotated.write(props=show_properties, parser=1), expected_tree_no_root) 

92 self.assertEqual(test_tree_annotated.write(props=show_properties, parser=1, format_root_node=True), expected_tree_with_root) 

93 

94class TestGTDBTaxonomy(unittest.TestCase): 

95 def update_taxadb(self): 

96 # download GTDB taxonomy 

97 gtdb_version = 202 

98 gtdbtaxadump = tree_annotate.get_gtdbtaxadump(gtdb_version) 

99 GTDBTaxa().update_taxonomy_database(gtdbtaxadump) 

100 

101 def test_annotate_taxnomic_GTDB_01(self): 

102 # taxid in the leaf name 

103 # (GB_GCA_011358815.1@sample1:1,(RS_GCF_000019605.1@sample2:1,(RS_GCF_003948265.1@sample3:1,GB_GCA_003344655.1@sample4:1)1:0.5)1:0.5); 

104 test_tree = utils.ete4_parse("(GB_GCA_011358815.1:1,(RS_GCF_000019605.1:1,(RS_GCF_003948265.1:1,GB_GCA_003344655.1:1):0.5):0.5);") 

105 test_tree_annotated, rank2values = tree_annotate.annotate_taxa(test_tree, db='GTDB', taxid_attr="name", sp_delimiter='', sp_field=0) 

106 

107 expected_tree_no_root = '(GB_GCA_011358815.1:1[&&NHX:taxid=GB_GCA_011358815.1:sci_name=s__Korarchaeum cryptofilum:common_name=:rank=subspecies:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum|s__Korarchaeum cryptofilum|GB_GCA_011358815.1],(RS_GCF_000019605.1:1[&&NHX:taxid=RS_GCF_000019605.1:sci_name=s__Korarchaeum cryptofilum:common_name=:rank=subspecies:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum|s__Korarchaeum cryptofilum|RS_GCF_000019605.1],(RS_GCF_003948265.1:1[&&NHX:taxid=RS_GCF_003948265.1:sci_name=s__Korarchaeum cryptofilum:common_name=:rank=subspecies:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum|s__Korarchaeum cryptofilum|RS_GCF_003948265.1],GB_GCA_003344655.1:1[&&NHX:taxid=GB_GCA_003344655.1:sci_name=s__Korarchaeum sp003344655:common_name=:rank=subspecies:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum|s__Korarchaeum sp003344655|GB_GCA_003344655.1]):0.5[&&NHX:taxid=g__Korarchaeum:sci_name=g__Korarchaeum:common_name=:rank=genus:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum]):0.5[&&NHX:taxid=g__Korarchaeum:sci_name=g__Korarchaeum:common_name=:rank=genus:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum]);' 

108 expected_tree_with_root = '(GB_GCA_011358815.1:1[&&NHX:taxid=GB_GCA_011358815.1:sci_name=s__Korarchaeum cryptofilum:common_name=:rank=subspecies:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum|s__Korarchaeum cryptofilum|GB_GCA_011358815.1],(RS_GCF_000019605.1:1[&&NHX:taxid=RS_GCF_000019605.1:sci_name=s__Korarchaeum cryptofilum:common_name=:rank=subspecies:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum|s__Korarchaeum cryptofilum|RS_GCF_000019605.1],(RS_GCF_003948265.1:1[&&NHX:taxid=RS_GCF_003948265.1:sci_name=s__Korarchaeum cryptofilum:common_name=:rank=subspecies:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum|s__Korarchaeum cryptofilum|RS_GCF_003948265.1],GB_GCA_003344655.1:1[&&NHX:taxid=GB_GCA_003344655.1:sci_name=s__Korarchaeum sp003344655:common_name=:rank=subspecies:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum|s__Korarchaeum sp003344655|GB_GCA_003344655.1]):0.5[&&NHX:taxid=g__Korarchaeum:sci_name=g__Korarchaeum:common_name=:rank=genus:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum]):0.5[&&NHX:taxid=g__Korarchaeum:sci_name=g__Korarchaeum:common_name=:rank=genus:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum])[&&NHX:taxid=g__Korarchaeum:sci_name=g__Korarchaeum:common_name=:rank=genus:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum];' 

109 

110 props = ['taxid', 'sci_name', 'common_name', 'rank', 'named_lineage'] 

111 self.assertEqual(test_tree_annotated.write(props=props, parser=1), expected_tree_no_root) 

112 self.assertEqual(test_tree_annotated.write(props=props, parser=1, format_root_node=True), expected_tree_with_root) 

113 

114 def test_annotate_taxnomic_GTDB_02(self): 

115 # taxid in the other column 

116 # (GB_GCA_011358815.1:1,(RS_GCF_000019605.1:1,(RS_GCF_003948265.1:1,GB_GCA_003344655.1:1):0.5):0.5); 

117 test_tree = utils.ete4_parse("(A:1,(B:1,(C:1,D:1):0.5):0.5);") 

118 with NamedTemporaryFile(suffix='.tsv') as f_annotation: 

119 f_annotation.write(b'#name\tgtdb_taxid\nA\tGB_GCA_011358815.1\nB\tRS_GCF_000019605.1\nC\tRS_GCF_003948265.1\nD\tGB_GCA_003344655.1\n') 

120 f_annotation.flush() 

121 

122 metadata_dict, node_props, columns, prop2type = tree_annotate.parse_csv([f_annotation.name]) 

123 

124 test_tree_annotated, annotated_prop2type = tree_annotate.run_tree_annotate(test_tree, 

125 metadata_dict=metadata_dict, node_props=node_props, 

126 columns=columns, prop2type=prop2type, taxadb='GTDB', gtdb_version=202, 

127 taxon_column='gtdb_taxid', taxon_delimiter='', taxa_field=0) 

128 

129 show_properties = ['taxid', 'gtdb_taxid','sci_name','rank', 'named_lineage'] 

130 

131 expected_tree_no_root = '(A:1[&&NHX:taxid=GB_GCA_011358815.1:gtdb_taxid=GB_GCA_011358815.1:sci_name=s__Korarchaeum cryptofilum:rank=subspecies:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum|s__Korarchaeum cryptofilum|GB_GCA_011358815.1],(B:1[&&NHX:taxid=RS_GCF_000019605.1:gtdb_taxid=RS_GCF_000019605.1:sci_name=s__Korarchaeum cryptofilum:rank=subspecies:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum|s__Korarchaeum cryptofilum|RS_GCF_000019605.1],(C:1[&&NHX:taxid=RS_GCF_003948265.1:gtdb_taxid=RS_GCF_003948265.1:sci_name=s__Korarchaeum cryptofilum:rank=subspecies:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum|s__Korarchaeum cryptofilum|RS_GCF_003948265.1],D:1[&&NHX:taxid=GB_GCA_003344655.1:gtdb_taxid=GB_GCA_003344655.1:sci_name=s__Korarchaeum sp003344655:rank=subspecies:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum|s__Korarchaeum sp003344655|GB_GCA_003344655.1])N4:0.5[&&NHX:taxid=g__Korarchaeum:sci_name=g__Korarchaeum:rank=genus:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum])N5:0.5[&&NHX:taxid=g__Korarchaeum:sci_name=g__Korarchaeum:rank=genus:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum]);' 

132 expected_tree_with_root = '(A:1[&&NHX:taxid=GB_GCA_011358815.1:gtdb_taxid=GB_GCA_011358815.1:sci_name=s__Korarchaeum cryptofilum:rank=subspecies:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum|s__Korarchaeum cryptofilum|GB_GCA_011358815.1],(B:1[&&NHX:taxid=RS_GCF_000019605.1:gtdb_taxid=RS_GCF_000019605.1:sci_name=s__Korarchaeum cryptofilum:rank=subspecies:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum|s__Korarchaeum cryptofilum|RS_GCF_000019605.1],(C:1[&&NHX:taxid=RS_GCF_003948265.1:gtdb_taxid=RS_GCF_003948265.1:sci_name=s__Korarchaeum cryptofilum:rank=subspecies:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum|s__Korarchaeum cryptofilum|RS_GCF_003948265.1],D:1[&&NHX:taxid=GB_GCA_003344655.1:gtdb_taxid=GB_GCA_003344655.1:sci_name=s__Korarchaeum sp003344655:rank=subspecies:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum|s__Korarchaeum sp003344655|GB_GCA_003344655.1])N4:0.5[&&NHX:taxid=g__Korarchaeum:sci_name=g__Korarchaeum:rank=genus:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum])N5:0.5[&&NHX:taxid=g__Korarchaeum:sci_name=g__Korarchaeum:rank=genus:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum])Root[&&NHX:taxid=g__Korarchaeum:sci_name=g__Korarchaeum:rank=genus:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum];' 

133 

134 self.assertEqual(test_tree_annotated.write(props=show_properties, parser=1), expected_tree_no_root) 

135 self.assertEqual(test_tree_annotated.write(props=show_properties, parser=1, format_root_node=True), expected_tree_with_root) 

136 

137 def test_annotate_taxnomic_GTDB_03(self): 

138 

139 # taxid in the other column 

140 # (GB_GCA_011358815.1:1,(RS_GCF_000019605.1:1,(RS_GCF_003948265.1:1,GB_GCA_003344655.1:1):0.5):0.5); 

141 test_tree = utils.ete4_parse("(A:1,(B:1,(C:1,D:1):0.5):0.5);") 

142 with NamedTemporaryFile(suffix='.tsv') as f_annotation: 

143 f_annotation.write(b'#name\tgtdb_taxid\nA\tGB_GCA_011358815.1@sample1\nB\tRS_GCF_000019605.1@sample2\nC\tRS_GCF_003948265.1@sample3\nD\tGB_GCA_003344655.1@sample4\n') 

144 f_annotation.flush() 

145 

146 metadata_dict, node_props, columns, prop2type = tree_annotate.parse_csv([f_annotation.name]) 

147 

148 test_tree_annotated, annotated_prop2type = tree_annotate.run_tree_annotate(test_tree, 

149 metadata_dict=metadata_dict, node_props=node_props, 

150 columns=columns, prop2type=prop2type, taxadb='GTDB', gtdb_version=202, 

151 taxon_column='gtdb_taxid', taxon_delimiter='@', taxa_field=0) 

152 

153 

154 show_properties = ['taxid', 'gtdb_taxid','sci_name','rank', 'named_lineage'] 

155 

156 expected_tree_no_root = '(A:1[&&NHX:taxid=GB_GCA_011358815.1:gtdb_taxid=GB_GCA_011358815.1:sci_name=s__Korarchaeum cryptofilum:rank=subspecies:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum|s__Korarchaeum cryptofilum|GB_GCA_011358815.1],(B:1[&&NHX:taxid=RS_GCF_000019605.1:gtdb_taxid=RS_GCF_000019605.1:sci_name=s__Korarchaeum cryptofilum:rank=subspecies:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum|s__Korarchaeum cryptofilum|RS_GCF_000019605.1],(C:1[&&NHX:taxid=RS_GCF_003948265.1:gtdb_taxid=RS_GCF_003948265.1:sci_name=s__Korarchaeum cryptofilum:rank=subspecies:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum|s__Korarchaeum cryptofilum|RS_GCF_003948265.1],D:1[&&NHX:taxid=GB_GCA_003344655.1:gtdb_taxid=GB_GCA_003344655.1:sci_name=s__Korarchaeum sp003344655:rank=subspecies:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum|s__Korarchaeum sp003344655|GB_GCA_003344655.1])N4:0.5[&&NHX:taxid=g__Korarchaeum:sci_name=g__Korarchaeum:rank=genus:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum])N5:0.5[&&NHX:taxid=g__Korarchaeum:sci_name=g__Korarchaeum:rank=genus:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum]);' 

157 expected_tree_with_root = '(A:1[&&NHX:taxid=GB_GCA_011358815.1:gtdb_taxid=GB_GCA_011358815.1:sci_name=s__Korarchaeum cryptofilum:rank=subspecies:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum|s__Korarchaeum cryptofilum|GB_GCA_011358815.1],(B:1[&&NHX:taxid=RS_GCF_000019605.1:gtdb_taxid=RS_GCF_000019605.1:sci_name=s__Korarchaeum cryptofilum:rank=subspecies:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum|s__Korarchaeum cryptofilum|RS_GCF_000019605.1],(C:1[&&NHX:taxid=RS_GCF_003948265.1:gtdb_taxid=RS_GCF_003948265.1:sci_name=s__Korarchaeum cryptofilum:rank=subspecies:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum|s__Korarchaeum cryptofilum|RS_GCF_003948265.1],D:1[&&NHX:taxid=GB_GCA_003344655.1:gtdb_taxid=GB_GCA_003344655.1:sci_name=s__Korarchaeum sp003344655:rank=subspecies:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum|s__Korarchaeum sp003344655|GB_GCA_003344655.1])N4:0.5[&&NHX:taxid=g__Korarchaeum:sci_name=g__Korarchaeum:rank=genus:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum])N5:0.5[&&NHX:taxid=g__Korarchaeum:sci_name=g__Korarchaeum:rank=genus:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum])Root[&&NHX:taxid=g__Korarchaeum:sci_name=g__Korarchaeum:rank=genus:named_lineage=root|d__Archaea|p__Thermoproteota|c__Korarchaeia|o__Korarchaeales|f__Korarchaeaceae|g__Korarchaeum];' 

158 

159 self.assertEqual(test_tree_annotated.write(props=show_properties, parser=1), expected_tree_no_root) 

160 self.assertEqual(test_tree_annotated.write(props=show_properties, parser=1, format_root_node=True), expected_tree_with_root) 

161 

162 def test_rank_limit(self): 

163 test_ncbitree = utils.ete4_parse("(((36324:1,42201:1,864673:1,864674:1,868587:1,2014662:1,(1769970:1,1769971:1,1783523:1)2.6225e+06:1)36323:1,(864665:1,864672:1,1902842:1,1966443:1,1902934:1)864664:1,1902863:1)36322:1,((28833:1,36326:1,40245:1,42202:1,42203:1,42204:1,42388:1,122241:1,864625:1,864626:1,869198:1,1898586:1,(1421346:1,2653558:1,2653559:1)2.62272e+06:1)28832:1,(42205:1,42212:1,42386:1,42387:1)42385:1,(206683:1,1690249:1,1902836:1)206682:1,(206685:1,2772383:1)206684:1,396326:1,(861480:1,1443624:1)861479:1,(864646:1,1633604:1)864645:1,864662:1,(864668:1,1207538:1,1633605:1,1902935:1,1633607:1)864667:1,(1633609:1,1777472:1)1.63361e+06:1,(1633611:1,1633612:1)1.63361e+06:1,(1633615:1,1633618:1,1633619:1)1.63361e+06:1,(1725248:1,2268661:1)1.72525e+06:1,(1902849:1,1980634:1,1980635:1)1.90285e+06:1,(1633614:1,1633616:1,1902875:1,1966442:1)1.90287e+06:1,(1980638:1,1980639:1,1980640:1,1980641:1,1980642:1,1980643:1)1.98064e+06:1,(864629:1,864631:1,864663:1)2.77157e+06:1,571821:1,864642:1,864661:1,864670:1,1622217:1,1690254:1,2268711:1,2528974:1,2576476:1,55632:1,1633606:1,2785017:1,2785214:1,2850318:1,1902940:1)36325:1,((42391:1,861476:1,861516:1,869196:1,1382469:1,(2172660:1,2172661:1)2.64079e+06:1)42390:1,(55631:1,1382468:1)55630:1,(869205:1,2172724:1,2268686:1,2268729:1)869204:1,(1238286:1,1238287:1,1239311:1)1.23828e+06:1,(1382473:1,2928469:1)1.38247e+06:1,(1382475:1,1690250:1,(1382678:1,1382679:1,1382680:1,1382681:1,1382682:1,1382683:1,1382684:1,1382685:1)2.62582e+06:1)1.38247e+06:1,(1382478:1,1382479:1,1382480:1,1933098:1,2172723:1,(1902937:1,2268728:1)2.6241e+06:1,2928468:1,2928470:1,2928471:1)1.38248e+06:1,(1382476:1,2810320:1)2.77157e+06:1,206687:1,1382471:1,(1382687:1,1382688:1)2.62497e+06:1,(1382690:1,1382691:1)2.62759e+06:1,(1382693:1,1382694:1)2.62909e+06:1,1690252:1)42389:1,((7710:1,2080421:1)7709:1,(42394:1,1774088:1,2172693:1,(2653564:1,2653565:1,2653566:1,2653567:1,2857184:1,2857185:1,2857186:1,2857213:1,2857318:1)2.65356e+06:1)42393:1,(2172754:1,2268677:1)2.17275e+06:1,206689:1,1902871:1,1966448:1,2033684:1)42392:1,(818303:1,818304:1,818305:1,857999:1,858000:1,858001:1,858002:1,858003:1,858004:1,858005:1,974485:1,2480094:1,2480095:1,2480096:1)734213:1,((864639:1,864640:1,1633603:1)864638:1,864654:1)864675:1,((1902853:1,2041650:1)1.90285e+06:1,1902938:1)1.90289e+06:1,1902861:1,1902877:1);") 

164 test_tree_annotated, rank2values = tree_annotate.annotate_taxa(test_ncbitree, db='NCBI', taxid_attr="name", sp_delimiter='', sp_field=0) 

165 pruned_tree = utils.taxatree_prune(test_tree_annotated, rank_limit='family') 

166 

167 expected_tree_no_root = '(Psolidae:1[&&NHX:taxid=36322:sci_name=Psolidae:common_name=:rank=family:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|36322:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Psolidae|cellular organisms|Eleutherozoa],Cucumariidae:1[&&NHX:taxid=36325:sci_name=Cucumariidae:common_name=:rank=family:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|36325:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Cucumariidae|cellular organisms|Eleutherozoa],Phyllophoridae:1[&&NHX:taxid=42389:sci_name=Phyllophoridae:common_name=:rank=family:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|42389:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Phyllophoridae|cellular organisms|Eleutherozoa],Sclerodactylidae:1[&&NHX:taxid=42392:sci_name=Sclerodactylidae:common_name=:rank=family:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|42392:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Sclerodactylidae|cellular organisms|Eleutherozoa],(818303:1[&&NHX:taxid=818303:sci_name=Dendrochirotida sp. BOLD_AAB7664:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|818303:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. BOLD_AAB7664],818304:1[&&NHX:taxid=818304:sci_name=Dendrochirotida sp. BOLD_AAC9852:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|818304:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. BOLD_AAC9852],818305:1[&&NHX:taxid=818305:sci_name=Dendrochirotida sp. BOLD_AAE3748:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|818305:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. BOLD_AAE3748],857999:1[&&NHX:taxid=857999:sci_name=Dendrochirotida sp. ECNN112-08:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|857999:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. ECNN112-08],858000:1[&&NHX:taxid=858000:sci_name=Dendrochirotida sp. ECNN113-08:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|858000:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. ECNN113-08],858001:1[&&NHX:taxid=858001:sci_name=Dendrochirotida sp. ECNN124-08:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|858001:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. ECNN124-08],858002:1[&&NHX:taxid=858002:sci_name=Dendrochirotida sp. ECNN125-08:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|858002:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. ECNN125-08],858003:1[&&NHX:taxid=858003:sci_name=Dendrochirotida sp. ECNN126-08:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|858003:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. ECNN126-08],858004:1[&&NHX:taxid=858004:sci_name=Dendrochirotida sp. ECNN127-08:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|858004:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. ECNN127-08],858005:1[&&NHX:taxid=858005:sci_name=Dendrochirotida sp. ECNN138-08:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|858005:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. ECNN138-08],974485:1[&&NHX:taxid=974485:sci_name=Dendrochirotida sp. BOLD_AAN4944:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|974485:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. BOLD_AAN4944],2480094:1[&&NHX:taxid=2480094:sci_name=Dendrochirotida sp. WMNH-INV-07:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|2480094:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. WMNH-INV-07],2480095:1[&&NHX:taxid=2480095:sci_name=Dendrochirotida sp. WMNH-INV-08:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|2480095:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. WMNH-INV-08],2480096:1[&&NHX:taxid=2480096:sci_name=Dendrochirotida sp. WMNH-INV-09:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|2480096:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. WMNH-INV-09])734213:1[&&NHX:taxid=734213:sci_name=unclassified Dendrochirotida:common_name=:rank=no rank:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida],Paracucumidae:1[&&NHX:taxid=864675:sci_name=Paracucumidae:common_name=:rank=family:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|864675:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|Paracucumidae],Ypsilothuriidae:1[&&NHX:taxid=1902891:sci_name=Ypsilothuriidae:common_name=:rank=family:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|1902891:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|Ypsilothuriidae],Heterothyonidae:1[&&NHX:taxid=1902861:sci_name=Heterothyone alba:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|1902887|1902860|1902861:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|Heterothyone|Heterothyone alba|Heterothyonidae],Placothuriidae:1[&&NHX:taxid=1902877:sci_name=Placothuria squamata:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|1902888|1902876|1902877:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|Placothuria|Placothuria squamata|Placothuriidae]);' 

168 expected_tree_with_root = '(Psolidae:1[&&NHX:taxid=36322:sci_name=Psolidae:common_name=:rank=family:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|36322:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Psolidae|cellular organisms|Eleutherozoa],Cucumariidae:1[&&NHX:taxid=36325:sci_name=Cucumariidae:common_name=:rank=family:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|36325:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Cucumariidae|cellular organisms|Eleutherozoa],Phyllophoridae:1[&&NHX:taxid=42389:sci_name=Phyllophoridae:common_name=:rank=family:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|42389:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Phyllophoridae|cellular organisms|Eleutherozoa],Sclerodactylidae:1[&&NHX:taxid=42392:sci_name=Sclerodactylidae:common_name=:rank=family:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|42392:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|Sclerodactylidae|cellular organisms|Eleutherozoa],(818303:1[&&NHX:taxid=818303:sci_name=Dendrochirotida sp. BOLD_AAB7664:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|818303:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. BOLD_AAB7664],818304:1[&&NHX:taxid=818304:sci_name=Dendrochirotida sp. BOLD_AAC9852:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|818304:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. BOLD_AAC9852],818305:1[&&NHX:taxid=818305:sci_name=Dendrochirotida sp. BOLD_AAE3748:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|818305:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. BOLD_AAE3748],857999:1[&&NHX:taxid=857999:sci_name=Dendrochirotida sp. ECNN112-08:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|857999:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. ECNN112-08],858000:1[&&NHX:taxid=858000:sci_name=Dendrochirotida sp. ECNN113-08:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|858000:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. ECNN113-08],858001:1[&&NHX:taxid=858001:sci_name=Dendrochirotida sp. ECNN124-08:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|858001:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. ECNN124-08],858002:1[&&NHX:taxid=858002:sci_name=Dendrochirotida sp. ECNN125-08:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|858002:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. ECNN125-08],858003:1[&&NHX:taxid=858003:sci_name=Dendrochirotida sp. ECNN126-08:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|858003:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. ECNN126-08],858004:1[&&NHX:taxid=858004:sci_name=Dendrochirotida sp. ECNN127-08:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|858004:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. ECNN127-08],858005:1[&&NHX:taxid=858005:sci_name=Dendrochirotida sp. ECNN138-08:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|858005:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. ECNN138-08],974485:1[&&NHX:taxid=974485:sci_name=Dendrochirotida sp. BOLD_AAN4944:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|974485:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. BOLD_AAN4944],2480094:1[&&NHX:taxid=2480094:sci_name=Dendrochirotida sp. WMNH-INV-07:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|2480094:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. WMNH-INV-07],2480095:1[&&NHX:taxid=2480095:sci_name=Dendrochirotida sp. WMNH-INV-08:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|2480095:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. WMNH-INV-08],2480096:1[&&NHX:taxid=2480096:sci_name=Dendrochirotida sp. WMNH-INV-09:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213|2480096:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida|Dendrochirotida sp. WMNH-INV-09])734213:1[&&NHX:taxid=734213:sci_name=unclassified Dendrochirotida:common_name=:rank=no rank:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|734213:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|unclassified Dendrochirotida],Paracucumidae:1[&&NHX:taxid=864675:sci_name=Paracucumidae:common_name=:rank=family:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|864675:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|Paracucumidae],Ypsilothuriidae:1[&&NHX:taxid=1902891:sci_name=Ypsilothuriidae:common_name=:rank=family:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|1902891:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|Ypsilothuriidae],Heterothyonidae:1[&&NHX:taxid=1902861:sci_name=Heterothyone alba:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|1902887|1902860|1902861:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|Heterothyone|Heterothyone alba|Heterothyonidae],Placothuriidae:1[&&NHX:taxid=1902877:sci_name=Placothuria squamata:common_name=:rank=species:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707|1902888|1902876|1902877:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa|Placothuria|Placothuria squamata|Placothuriidae])[&&NHX:taxid=7707:sci_name=Dendrochirotida:common_name=:rank=order:lineage=1|131567|2759|33154|33208|6072|33213|33511|7586|133551|7624|7705|7706|7707:named_lineage=root|Eukaryota|Eumetazoa|Echinodermata|Echinozoa|Holothuroidea|Dendrochirotacea|Dendrochirotida|Opisthokonta|Metazoa|Bilateria|Deuterostomia|cellular organisms|Eleutherozoa];' 

169 props = ['taxid', 'sci_name', 'common_name', 'rank', 'lineage', 'named_lineage'] 

170 

171 self.assertEqual(pruned_tree.write(props=props, parser=1), expected_tree_no_root) 

172 self.assertEqual(pruned_tree.write(props=props, parser=1, format_root_node=True), expected_tree_with_root) 

173 

174if __name__ == '__main__': 

175 unittest.main() 

176#pytest.main(['-v'])