open Core_kernel open Phylogenetics type condition = [`Ancestral | `Convergent] type branch_info = { condition : condition ; length : float ; } type t = (unit, string, branch_info) Tree.t val of_newick_tree : Newick.tree -> (t, [> `Msg of string]) result val to_newick_tree : t -> Newick.tree val from_file : string -> (t, [> `Msg of string]) result val leaves : t -> (string * condition) list val infer_binary_condition_on_branches : ?gain_relative_cost:float -> Newick.tree -> convergent_leaves:String.Set.t -> Newick.tree val reset_transitions : Newick.tree -> Newick.tree val remove_nodes_with_single_child : Newick.tree -> Newick.tree val alignment_counts_map : t -> Alignment.t -> (int Amino_acid.table -> int Amino_acid.table -> 'a) -> 'a list