What’s new in ETE 2.3 — ETE Toolkit - analysis and visualization of trees

# What’s new in ETE 2.3

## Update 2.3.2

- added `NCBITaxa.get_descendant_taxa()`
- added `NCBITaxa.get_common_names()`
- ete ncbiquery: dump descendant taxa given a taxid or taxa name. new option `–descendants`_; renamed `–taxonomy`_ by `–tree`_
- fixes <misaligned branches <https://github.com/jhcepas/ete/issues/113>`_ in ultrametric tree images using vt_line_width > 0
- fixes <windows installation problem <https://github.com/jhcepas/ete/issues/114>`_

## New Modules

### tools

A collection of command line tools, implementing common tree operations has been added to the ETE core package. All tools are wrapped by the ete command, which should become available in your path after installation.

- ete build: Build phylogenetic trees using a using a number of predefined built-in gene-tree and species-tree workflows. Watch example
- ete view: visualize and generate tree images directly form the command line.
- ete compare: compare tree topologies based on any node feature (i.e. name, species name, etc) using the Robinson-Foulds distance and edge compatibility scores.
- ete ncbiquery: query the ncbi taxonomy tree directly from the database.
- ete mod: modify tree topologies directly from the command line. Allows rooting, sorting leaves, pruning and more
- ete annotate: add features to the tree nodes by combining newick and text files.
- ete generate: generate random trees, mostly for teaching and testing

### ncbi taxonomy

The new ncbi_taxonomy module provides the class `NCBITaxa`, which allows to query a locally parsed NCBI taxonomy database. It provides taxid-name translations, tree annotation tools and other handy functions. A brief tutorial and examples on how to use it is available here

## New features

News in Tree instances

- added `TreeNode.iter_edges()` and `TreeNode.get_edges()`
- added `TreeNode.compare()` function
- added `TreeNode.standardize()` utility function to quickly get rid of multifurcations, single-child nodes in a tree.
- added `TreeNode.get_topology_id()` utility function to get an unique identifier of a tree based on their content and topology.
- added `TreeNode.expand_polytomies()`
- improved `TreeNode.robinson_foulds()` function to auto expand polytomies, filter by branch support, and auto prune.
- improved `TreeNode.check_monophyly()` function now accepts unrooted trees as input
- Default node is set to blank instead of the “NoName” string, which saves memory in very large trees.
- The branch length distance of root nodes is set to 0.0 by default.
- newick export allows to control the format of branch distance and support values.
- Tree and SeqGroup instances allow now to open gzipped files transparently.

News in the treeview module

- improved SVG tree rendering
- improved `random_color()` function (a list of colors can be fetch with a single call)
- improved `SeqMotifFace`
- Added `RectFace`
- Added `StackedBarFace`

## Highlighted Bug Fixes

- Newick parser is now more strict when reading node names and branch distances, avoiding silent errors when parsing node names containing illegal symbols (i.e. ][)(,: )
- fixes several minor bugs when retrieving extra attributes in `PhyloNode.get_speciation_trees()`.
- Tree viewer crashes when redrawing after changing node properties.
- fixed installation problem using pip.
- visualizing internal tree nodes as a circular tree produce crashes
- math domain error in SequencePlotFace.
- Fix likelihood calculation bug in EvolTree
- Fix BarChartFace problem with negative numbers
- Fix problem that produced TreeStyle attributes to be ignored in PhyloTree instances.