Skip to main content

TreePPL

Universal Probabilistic Programming for Phylogenetics

Why TreePPL?

Flexible modeling

Express any model of interest using a powerful programming language

Easy-to-use interfaces

Import data and analyze results using R or Python interfaces with Jupyter support

Powerful inference

Select from a range of built-in strategies or develop your own

Extensive libraries

Develop models faster using the code and model libraries

function walk(node: Tree, time:Real, lambda: Real) {
  observe 0 ~ Poisson(lambda * (time - node.age));
  if node is Node {
    observe 0.0 ~ Exponential(lambda);
    walk(node.left, node.age, lambda);
    walk(node.right, node.age, lambda);
  }
}

model function crb(tree: Tree) => Real {
  assume lambda ~ Gamma(1.0, 1.0);
  walk(tree.left, tree.age, lambda);
  walk(tree.right, tree.age, lambda);
  return lambda;
}

Funding

Funding