Skip to main content

FastPhylo-py

Molecular sequence analysis for Python — fast pairwise distances and neighbour-joining trees for DNA, RNA, and protein sequences.

import fastphylo

aln  = fastphylo.read("sequences.fasta")          # FASTA, Stockholm, or Phylip
dm   = fastphylo.distance_matrix(aln)             # k2p for DNA, WAG for protein
tree = fastphylo.fnj(dm)
print(tree.to_newick())

Features

  • Reads FASTA, Stockholm, and Phylip files; format auto-detected from extension and content
  • DNA/RNA distances: Hamming, Jukes-Cantor, Kimura 2-parameter (default), Tamura-Nei 93 — computed by a fast C++ backend with SIMD (SSE2 / NEON)
  • Protein distances: maximum-likelihood estimation under WAG (default), LG, JTT, Dayhoff, BLOSUM62, VT, cpREV, MtREV, RtREV, HIVb, HIVw, DCMUT, JTT-DCMut, and PMB, using a Brent optimizer written in C++
  • Tree reconstruction: Neighbour-Joining, Fast NJ, and BioNJ (with branch lengths) via the FastPhylo library
  • Branch length estimation: fit_branch_lengths fits branch lengths to any tree topology by L1-minimisation against a distance matrix (requires scipy)
  • Distance matrix access: integer or taxon-name indexing, copy(), zeros() factory, NumPy and Phylip export
  • Multiple alignment: optional FAMSA integration for unaligned input
  • Pure-Python sequence types with Stockholm annotation support (organism, AC, description); edge-set Tree with to_newick() and merge()

Installation

pip install fastphylo

Optional extras:

pip install fastphylo[align]    # multiple-sequence alignment (pyfamsa)
pip install scipy               # branch length fitting (fit_branch_lengths)

Quick start

Aligned input → tree

import fastphylo

aln  = fastphylo.read("alignment.sto")            # Stockholm, FASTA, or Phylip
dm   = fastphylo.distance_matrix(aln, model="k2p")
tree = fastphylo.fnj(dm)
print(tree.to_newick())

Unaligned input → align → tree

import fastphylo

seqs = fastphylo.read("sequences.fasta")          # unaligned OK
aln  = fastphylo.align(seqs)                      # requires fastphylo[align]
dm   = fastphylo.distance_matrix(aln)
tree = fastphylo.fnj(dm)
print(tree.to_newick())

Protein sequences

import fastphylo

aln  = fastphylo.read("proteins.fasta")
dm   = fastphylo.distance_matrix(aln, model="LG")
tree = fastphylo.bionj(dm)                        # BioNJ with branch lengths
print(tree.to_newick())

Branch length fitting

NJ and FNJ return topology only (branch lengths are not computed). Use fit_branch_lengths to fit branch lengths to any tree topology by minimising the L1 deviation from the distance matrix:

import fastphylo

aln  = fastphylo.read("alignment.fasta")
dm   = fastphylo.distance_matrix(aln)
tree = fastphylo.fnj(dm)                          # fast topology, no lengths

tree = fastphylo.fit_branch_lengths(tree, dm)     # requires scipy
print(tree.to_newick())                           # now includes branch lengths

This solves a linear program: branch lengths are chosen to minimise sum |path_distance(i,j) − dm[i,j]| over all leaf pairs, subject to non-negative branch lengths.

Distance matrix access

dm = fastphylo.distance_matrix(aln)

# Integer or name-based indexing
d = dm[0, 1]
d = dm["human", "mouse"]

# Set elements
dm["human", "mouse"] = 0.15
dm["mouse", "human"] = 0.15

# Build a matrix manually
dm = fastphylo.DistanceMatrix.zeros(["human", "mouse", "rat"])
dm["human", "mouse"] = dm["mouse", "human"] = 0.15
dm["human", "rat"]   = dm["rat",   "human"] = 0.22
dm["mouse", "rat"]   = dm["rat",   "mouse"] = 0.08

# Copy, NumPy array, Phylip string
dm2  = dm.copy()
arr  = dm.to_numpy()
text = dm.to_phylip()

API overview

Function / class Description
fastphylo.read(path) Read FASTA / Stockholm / Phylip → SequenceCollection or Alignment
fastphylo.align(seqs) Align with FAMSA → Alignment
fastphylo.distance_matrix(aln, model=…) Compute pairwise distances → DistanceMatrix
evolution.nj(dm) / fnj(dm) / bionj(dm) Tree reconstruction → Tree
fastphylo.fit_branch_lengths(tree, dm) L1-optimal branch lengths for a given topology
DistanceMatrix.zeros(names) Create an all-zero matrix with taxon names
DistanceMatrix.copy() Deep copy
DistanceMatrix.to_numpy() Export as NumPy array
DistanceMatrix.to_phylip() Export as Phylip-format string
Tree.to_newick() Newick string
Tree.merge(other) Union of two edge-set trees

Distance models

Sequences Model string Notes
DNA / RNA "hamming" Raw mismatch count
DNA / RNA "jc" Jukes-Cantor
DNA / RNA "k2p" (default) Kimura 2-parameter
DNA / RNA "tn93" Tamura-Nei 93
Protein "WAG" (default) Whelan & Goldman
Protein "LG", "JTT", "Dayhoff", … 14 models total

RNA is handled transparently (U → T at the C++ boundary).

Requirements

  • Python ≥ 3.12
  • NumPy ≥ 1.24
  • A C compiler (for the bundled FastPhylo extension, built automatically by pip)

Optional:

  • pyfamsa ≥ 0.6.0 — multiple-sequence alignment (pip install fastphylo[align])
  • scipy — branch length fitting via fit_branch_lengths (pip install scipy)

License

GPLv3 — see FastPhylo for the upstream C++ library.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fastphylo-1.1.1.tar.gz (682.0 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

fastphylo-1.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.6 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

fastphylo-1.1.1-cp313-cp313-macosx_10_13_universal2.whl (601.1 kB view details)

Uploaded CPython 3.13macOS 10.13+ universal2 (ARM64, x86-64)

fastphylo-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

fastphylo-1.1.1-cp312-cp312-macosx_10_13_universal2.whl (601.0 kB view details)

Uploaded CPython 3.12macOS 10.13+ universal2 (ARM64, x86-64)

File details

Details for the file fastphylo-1.1.1.tar.gz.

File metadata

  • Download URL: fastphylo-1.1.1.tar.gz
  • Upload date:
  • Size: 682.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for fastphylo-1.1.1.tar.gz
Algorithm Hash digest
SHA256 20fbf806da264ebfc63a932321be02c18c7da1cf84f2eeac13e8819ff30cb75a
MD5 9b7118dbf6f04246c1bf7c0272286db2
BLAKE2b-256 87d9d6aaa68aacc1458d7d88ddf892f9a5cae7b272a1cd4408da57f8a7c8affa

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastphylo-1.1.1.tar.gz:

Publisher: release.yml on arvestad/fastphylo-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fastphylo-1.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fastphylo-1.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7af65e9f84f8320e3e2f8e70f725f3ae33be5b366a7ca0cbae4e8d555d1a2e79
MD5 eee3635b2de8844e0187f4070f109076
BLAKE2b-256 baa88bfe2fbd6a57f42c7109739af2d983800f9afe5b3dad3be9974cf04fbb5a

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastphylo-1.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on arvestad/fastphylo-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fastphylo-1.1.1-cp313-cp313-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for fastphylo-1.1.1-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 e29551ae9c232e91edbb6bada80aca97d63e48dceda803c163e2ad7b4189543b
MD5 241997c14adad74dffd139b1277602ca
BLAKE2b-256 a46d049bef1c251a6d8cf64ee34419b5187984747abe4259e8a29f3806335c23

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastphylo-1.1.1-cp313-cp313-macosx_10_13_universal2.whl:

Publisher: release.yml on arvestad/fastphylo-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fastphylo-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fastphylo-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 17c3b518a221a84f9a787216b5ff84f19ef2095f5d589025d07e7849fa66a0cd
MD5 2de97b6d0964fb7061996b2eba5156f7
BLAKE2b-256 36f842f836b7936f81e49a70ebee1a1fbffa477e921fc75670d2b9a3e207add4

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastphylo-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on arvestad/fastphylo-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fastphylo-1.1.1-cp312-cp312-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for fastphylo-1.1.1-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 81f8bced815d64cc729dcae111b87bf25060a498f0910476f7f555a6047b3adf
MD5 10ee6ccd965113a15e6870d3209fe53e
BLAKE2b-256 5079c272c7bf557aa378ada483475895661b9779f72f138b6e700d742caac67e

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastphylo-1.1.1-cp312-cp312-macosx_10_13_universal2.whl:

Publisher: release.yml on arvestad/fastphylo-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page