Skip to main content

ZOMBI2 ZOMBI2 logo

🌐 Website · Gallery · Documentation · Manual (pdf)

CI PyPI Docs License: MIT Python 3.10+

Simulating the evolution of species, genomes, sequences and traits.

ZOMBI2 simulates evolution at four levels: the species tree of lineages, the genomes that evolve along it, the sequences inside each gene, and the traits a lineage carries. Use it to generate benchmark datasets with known ground truth for phylogenetic and comparative methods.


Install

pip install zombi2

Quickstart

zombi2 species   out/ --birth 1 --death 0.3 --n-extant 20 --seed 1
zombi2 genomes   out/ --duplication 0.2 --transfer 0.1 --loss 0.25 --seed 1
zombi2 sequences out/ --model hky85 --length 1000 --divergence 0.2 --seed 1

From Python, each level is one function, and the result object carries the history:

from zombi2 import species, genomes, sequences
from zombi2.sequences.substitution_models import hky85

sp = species.simulate_species_tree(birth=1.0, death=0.3, n_extant=20, seed=1)
g  = genomes.simulate_genomes_family(sp, duplication=0.2, transfer=0.1, loss=0.25, seed=1)
s  = sequences.simulate_sequences(g, model=hky85(), length=1000, divergence=0.2, seed=1)

g.gene_trees                    # the true gene tree of every family

sp.write("out/")                # the trees, the event log and the fates
g.write("out/")                 # gene trees, the event log, profiles
s.write("out/")                 # alignments, phylograms and ancestral sequences

Levels

ZOMBI2 is organized around four levels of evolution. A genome, a sequence or a trait always evolves along a species tree, so you run whichever you need, composed into one seeded, reproducible run.

The four levels of evolution ZOMBI2 simulates: the species tree forks into genomes and traits, and sequences continue below genomes

  • Species trees — a birth–death process with rates that can shift in time, saturate with diversity or drift down the tree, plus mass extinctions, incomplete sampling and fossils.
  • Genomes — gene families under duplication, transfer, loss and origination, at three resolutions: gene families, ordered chromosomes with rearrangements, and nucleotide genomes, with real DNA along each chromosome.
  • Sequences — nucleotide (JC69, K80, HKY85, GTR) and protein substitution models run down each gene tree, with ancestral sequences at every node.
  • Traits — continuous traits that diffuse, revert to an optimum or shift at speciation, and discrete traits switching between states.

Combining levels

Levels do not have to run side by side: one can drive another. Both ways of doing it are the same mechanism, DrivenBy(source, mapping), written on any rate. See conditioning and joining.

Conditioning

A rate reads the state of a level that has already been grown. There are three parts: the driver, the level that is read; the modifier, which turns the driver's state into a factor; and the target, the rate it multiplies.

Conditioning: a habitat trait on the left drives the gene loss rate on the right through a DrivenBy modifier, which carries a multiplier for each habitat state

zombi2 species out/ --birth 1 --death 0.3 --n-extant 20 --seed 1
zombi2 traits  out/ --kind discrete --states aquatic,terrestrial --switch 0.4 --seed 1
zombi2 genomes out/ --loss "0.25 * DrivenBy('out/traits/trait_events.tsv', {'aquatic': 4.0})" --seed 1

Joining

When neither level can be grown first — because each drives the other — one run grows both. A trait that speeds up speciation is the standard case: the tree shapes the trait's history and the trait shapes the tree, so the tree is an output of the joint run rather than an input to it.

Joining: body size drives the speciation rate through a DrivenBy modifier, the rate creates the tree, and an arrow runs back from the tree to body size because the two grow at the same time

zombi2 joint out/ --birth "1.0 * DrivenBy('trait', {'small': 1.0, 'large': 3.0})" \
    --states small,large --switch 0.3 --n-extant 100 --seed 1

Performance

A species tree of a million leaves takes a few seconds. On the same gene-family task, ZOMBI2 runs about 183× faster than the legacy ZOMBI v1 — both pure Python.

ZOMBI2 performance overview: (a) species-tree simulation scaling to millions of tips; (b) genome simulation at the family, ordered and nucleotide resolutions; (c) ZOMBI2 about 183 times faster than the legacy ZOMBI 1 on one shared 1,000-tip tree

Gallery

The gallery is a page of worked examples, one figure each, with the code that produced it: species trees, genomes, sequences, traits, conditioning and joining. Every figure is drawn with Phylustrator.

Citation

A dedicated ZOMBI2 paper is in preparation. Until then, cite the original ZOMBI.

License

ZOMBI2 is released under the MIT License.

Download files

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

Source Distribution

zombi2-0.21.0.tar.gz (5.5 MB view details)

Uploaded Source

Built Distribution

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

zombi2-0.21.0-py3-none-any.whl (378.3 kB view details)

Uploaded Python 3

File details

Details for the file zombi2-0.21.0.tar.gz.

File metadata

  • Download URL: zombi2-0.21.0.tar.gz
  • Upload date:
  • Size: 5.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for zombi2-0.21.0.tar.gz
Algorithm Hash digest
SHA256 3820f654beb9cbc7fd7d07091bc8757b0342e2485924e6e91f8ac71c85b6267d
MD5 9ea6a525404f4e21099769be646742ec
BLAKE2b-256 20f0df50af66c9b78cce5f192bc2989a6d8c8fa719920214eeaa9cab7cc72a51

See more details on using hashes here.

Provenance

The following attestation bundles were made for zombi2-0.21.0.tar.gz:

Publisher: release.yml on AADavin/zombi2

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

File details

Details for the file zombi2-0.21.0-py3-none-any.whl.

File metadata

  • Download URL: zombi2-0.21.0-py3-none-any.whl
  • Upload date:
  • Size: 378.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for zombi2-0.21.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7de95a42a824a446b9c3b88d6bba2897dccdb46edd6e4e8037e436559ff7721f
MD5 02ad05e37af296bba98c812acf6a7785
BLAKE2b-256 e614a6d7d3794362d9e0e4d95ce5b05c92019a905b4a1d3c3dd3f7cc811b255f

See more details on using hashes here.

Provenance

The following attestation bundles were made for zombi2-0.21.0-py3-none-any.whl:

Publisher: release.yml on AADavin/zombi2

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

Release history Release notifications | RSS feed

0.44.0

2 files

0.43.2

2 files

0.43.1

2 files

0.43.0

2 files

0.42.2

2 files

0.42.1

2 files

0.42.0

2 files

0.41.0

2 files

0.40.0

2 files

0.39.4

2 files

0.39.3

2 files

0.39.2

2 files

0.39.1

2 files

0.39.0

2 files

0.38.0

2 files

0.37.0

2 files

0.36.0

2 files

0.35.0

2 files

0.34.0

2 files

0.33.1

2 files

0.33.0

2 files

0.32.0

2 files

0.31.0

2 files

0.30.0

2 files

0.29.0

2 files

0.28.0

2 files

0.27.0

2 files

0.26.0

2 files

0.25.0

2 files

0.24.0

2 files

0.23.0

2 files

0.22.0

2 files

This release

0.21.0 This release

2 files

0.20.0

2 files

0.19.0

2 files

0.18.0

2 files

0.17.0

2 files

0.16.0

2 files

0.15.0

2 files

0.14.0

2 files

0.13.0

2 files

0.12.0

2 files

0.11.0

2 files

0.10.0

2 files

0.9.0

2 files

0.8.0

2 files

0.7.0

2 files

0.6.0

2 files

0.5.0

2 files

0.4.0

2 files

0.3.0

2 files

0.2.0

2 files

Supported by

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