/fifteen

the library to rule all fifteen unrooted quintets

Primary LanguageRustGNU General Public License v3.0GPL-3.0

fifteen

shields.io shields.io

(DBA table_five)

Experimental library for quick quintet tallying, useful when you have a lot of quintets that somehow you don't want to count yourself.

Usage

Binary wheels are provided on PyPI for Python starting from 3.7, but note that PyPy is not supported (yet).

python3 -m pip install table-five

API

TreeSet

A treeset is an efficient (i.e., fast parsing) list of tree topologies. The construction is $O(k n \lg n)$ where $k$ is the number of trees and $n$ the number of taxa. The log factor is due to the LCA data structure initialization.

from table_five import TreeSet
trees = TreeSet("path_to_newline_delimited_newicks.tre")

Quintet Counting

The major API is tally_single_quintet returning a list of length 15 containing the empirical counts of the 15 ADR unrooted quintet topology among the tree-set in $O(k)$ time:

# get counts of the ADR unrooted quintet topologies on taxa '1','2','3','4','5'. Taxa order matters.
treeset.tally_single_quintet(('1','2','3','4','5'))
# obviously you might want to convert it to numpy arrays

# normalize by the number of genes in the tree-set
new_tree_dist = np.asarray(treeset.tally_single_quintet(q_taxa)) / len(treeset)

Development and Building

After installing the Rust toolchain and Maturin, see the following commands:

# build the library
maturin build
# installing it locally
maturin develop

See the Maturin documentation for more details.