## SplitP

Python package which implements split- and rank-based tools for inferring phylogenies, such as flattenings and subflattenings.

### Installation

`pip install splitp`

### Examples

Import `splitp` and the associated helper functions

``````import splitp as sp
from splitp import tree_helper_functions as hf
``````

Define trees and work with splits

``````splits = list(hf.all_splits(4))     # [01|23, 02|13, 03|12]
tree = sp.NXTree('((0,1),(2,3));')
true_splits = tree.true_splits()    # 01|23
``````

Let site patterns evolve under any submodel of the general markov model.

``````JC_subs_matrix = tree.build_JC_matrix(branch_length:=0.05)
tree.reassign_all_transition_matrices(JC_subs_matrix)
pattern_probs = tree.get_pattern_probabilities()
``````
``````>             0         1
0    AAAA  0.185844
1    AAAC  0.003262
..    ...       ...
254  TTTG  0.003262
255  TTTT  0.185844
``````

Simulate sequence alignments from pattern distributions

``````pattern_frequencies = tree.draw_from_multinomial(pattern_probs, 100)
``````
``````>         0    1
0  AAAA  0.22
1  AAAC  0.01
..  ...   ...
2  CCGC  0.03
3  TTTT  0.14
``````

Reconstruct trees using split based methods including flattenings:

``````F1 = tree.flattening('01|23', pattern_frequencies)
F2 = tree.flattening('02|13', pattern_frequencies)
print(tree.split_score(F1) < tree.split_score(F2))    # True
``````

Or subflattenings:

``````SF = tree.signed_sum_subflattening('01|23', pattern_probs)
print(tree.split_score(SF))   # 0.0
``````

For more functionality please see the documentation at splitp.joshuastevenson.me.

Please see `CONTRIBUTING.md` for information on contributing to this project.