Neighbor-Joining phylogenetic tree inference library.
Data flow
[FASTA / Python dict / JS object]
│
▼
NJConfig (config.rs)
│
▼
detect_alphabet() ──► Alphabet::DNA | Alphabet::Protein
│
▼
MSA<DNA|Protein> (msa.rs)
├── bootstrap() ──► bootstrap_clade_counts()
└── into_dist::<Model>()
│
▼
DistMat (dist.rs)
│
▼
neighbor_joining() ──► NJState::run() (nj.rs)
│
▼
TreeNode (tree.rs)
│
▼
to_newick() ──► Newick String
Public API
The single public entry point is [nj], which accepts an [NJConfig] and
returns a Newick string. Everything else is internal implementation detail
exposed only to the Python and WASM wrapper crates.
Model–alphabet compatibility
| Model | DNA | Protein |
|---|---|---|
PDiff |
✓ | ✓ |
JukesCantor |
✓ | — |
Kimura2P |
✓ | — |
Poisson |
— | ✓ |
Providing an incompatible model returns an Err from [nj].