Note: This is an early-stage project, which has not reached any stable release yet. Frequent changes to the API (and possibly bugs) are expected.
tl;dr: BlackJAX for trees modeling cancer evolution.
Background: There exist many models aiming at the reconstruction of a phylogenetic tree from observational data sequenced at the single-cell level (e.g., SCITE, SCICoNE, COMPASS, PYggdrasil).
They usually consist of proposing a likelihood function, connecting the tree to the observed data, and a method for optimizing the likelihood or sampling it using Markov chain Monte Carlo algorithms.
This package aims at providing an ecosystem such that:
- It allows easy development of new models, thanks to orthogonal abstractions built around sampling on tree spaces.
- Does not only include Markov chain Monte Carlo samplers, but als Sequential Monte Carlo samplers.
- Is fast and supports multithreading.
- Although the main sampling part is implemented in Rust, it integrates well with Python and Snakemake thanks to Maturin.
This is an early-stage experimental project and it may be later abandoned due to the lack of time, computational issue which have not been anticipated, or unforeseen reasons. We welcome contributions, but at the same time we suggest to not rely on this package at this stage.
There are several alternatives we have considered:
- BlackJAX would be our preferred choice due to a great ecosystem of different samplers. However, we found working with combinatorial structures, such as trees with variable number of nodes, not very convenient in JAX (which is however excellent for working with array-like objects).
- Blang, which is a full probabilistic programming language, but does not seem to support models for cancer phylogeny inference.
- Julia has an excellent ecosystem consisting of Pigeons.jl and Turing.jl. However, Rust has better capabilities for integration with Python and static compilation.