Coverage for test_taxonomic.py: 96%
97 statements
« prev ^ index » next coverage.py v7.2.7, created at 2024-08-07 10:27 +0200
« 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
7sys.path.insert(0, os.path.abspath(os.path.dirname(__file__) + '/..'))
9#from collections import namedtuple
10from tempfile import NamedTemporaryFile
11from treeprofiler import tree_annotate
12from treeprofiler.src import utils
13from ete4 import GTDBTaxa
15# GTDB_r202_url = "https://github.com/etetoolkit/ete-data/raw/main/gtdb_taxonomy/gtdb202/gtdb202dump.tar.gz"
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)
26# gtdb.update_taxonomy_database("gtdb202dump.tar.gz")
27# os.remove(fname)
29# need gtdb release to be 202
30#update_gtdb_r202()
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)
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)
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);")
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()
60 metadata_dict, node_props, columns, prop2type = tree_annotate.parse_csv([f_annotation.name])
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)
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];'
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)
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);")
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()
81 metadata_dict, node_props, columns, prop2type = tree_annotate.parse_csv([f_annotation.name])
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)
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];'
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)
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)
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)
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];'
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)
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()
122 metadata_dict, node_props, columns, prop2type = tree_annotate.parse_csv([f_annotation.name])
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)
129 show_properties = ['taxid', 'gtdb_taxid','sci_name','rank', 'named_lineage']
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];'
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)
137 def test_annotate_taxnomic_GTDB_03(self):
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()
146 metadata_dict, node_props, columns, prop2type = tree_annotate.parse_csv([f_annotation.name])
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)
154 show_properties = ['taxid', 'gtdb_taxid','sci_name','rank', 'named_lineage']
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];'
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)
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')
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']
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)
174if __name__ == '__main__':
175 unittest.main()
176#pytest.main(['-v'])