Logging#
Msprime uses the Python logging
infrastructure to help debugging complex
simulations. Messages at the INFO level are high-level information about the
state of the current simulation, such as switches in simulation model, etc.
While it is straightforward to set up logging messages using the built-in
Python methods, the daiquiri
library is a bit more convenient. For example,
import daiquiri
import msprime
daiquiri.setup(level="INFO")
ts = msprime.sim_ancestry(
10,
population_size=1000,
model=[
msprime.DiscreteTimeWrightFisher(duration=100),
msprime.StandardCoalescent(),
],
random_seed=1234
)
2024-12-12 01:34:19,778 [3037] INFO msprime.ancestry: Sampling 10 individuals with ploidy 2 in population 0 (name='pop_0') at time 0
2024-12-12 01:34:19,781 [3037] INFO msprime.ancestry: Starting replicate 0
2024-12-12 01:34:19,782 [3037] INFO msprime.ancestry: model[0] {'name': 'dtwf'} started at time=0 nodes=20 edges=0
2024-12-12 01:34:19,783 [3037] INFO msprime.ancestry: Running model {'name': 'dtwf'} until max time: 100.000000
2024-12-12 01:34:19,785 [3037] INFO msprime.ancestry: model[1] {'name': 'hudson'} started at time=100 nodes=25 edges=10
2024-12-12 01:34:19,785 [3037] INFO msprime.ancestry: Running model {'name': 'hudson'} until max time: inf
2024-12-12 01:34:19,786 [3037] INFO msprime.ancestry: Completed at time=5876.22 nodes=39 edges=38
When running larger simulations and trying to figure out when they might finish, it can be helpful to use the DEBUG logging output. For example:
daiquiri.setup(level="DEBUG")
ts = msprime.sim_ancestry(
10 ** 5,
population_size=10000,
recombination_rate=2e-8,
sequence_length=1e6,
random_seed=32
)
2024-12-12 01:34:19,792 [3037] INFO msprime.ancestry: Sampling 100000 individuals with ploidy 2 in population 0 (name='pop_0') at time 0
2024-12-12 01:34:19,886 [3037] INFO msprime.ancestry: Starting replicate 0
2024-12-12 01:34:19,893 [3037] INFO msprime.ancestry: model[0] {'name': 'hudson'} started at time=0 nodes=200000 edges=0
2024-12-12 01:34:19,894 [3037] INFO msprime.ancestry: Running model {'name': 'hudson'} until max time: inf
2024-12-12 01:34:19,931 [3037] DEBUG msprime.ancestry: time=0.0104295 ancestors=190080 ret=ExitReason.MAX_EVENTS
2024-12-12 01:34:19,957 [3037] DEBUG msprime.ancestry: time=0.0219435 ancestors=180166 ret=ExitReason.MAX_EVENTS
2024-12-12 01:34:19,981 [3037] DEBUG msprime.ancestry: time=0.0346803 ancestors=170256 ret=ExitReason.MAX_EVENTS
2024-12-12 01:34:20,007 [3037] DEBUG msprime.ancestry: time=0.0491285 ancestors=160336 ret=ExitReason.MAX_EVENTS
2024-12-12 01:34:20,035 [3037] DEBUG msprime.ancestry: time=0.0657941 ancestors=150418 ret=ExitReason.MAX_EVENTS
2024-12-12 01:34:20,064 [3037] DEBUG msprime.ancestry: time=0.0847891 ancestors=140540 ret=ExitReason.MAX_EVENTS
2024-12-12 01:34:20,098 [3037] DEBUG msprime.ancestry: time=0.106283 ancestors=130644 ret=ExitReason.MAX_EVENTS
2024-12-12 01:34:20,135 [3037] DEBUG msprime.ancestry: time=0.131827 ancestors=120740 ret=ExitReason.MAX_EVENTS
2024-12-12 01:34:20,177 [3037] DEBUG msprime.ancestry: time=0.161742 ancestors=110874 ret=ExitReason.MAX_EVENTS
2024-12-12 01:34:20,223 [3037] DEBUG msprime.ancestry: time=0.197291 ancestors=101020 ret=ExitReason.MAX_EVENTS
2024-12-12 01:34:20,273 [3037] DEBUG msprime.ancestry: time=0.240122 ancestors=91192 ret=ExitReason.MAX_EVENTS
2024-12-12 01:34:20,328 [3037] DEBUG msprime.ancestry: time=0.293227 ancestors=81390 ret=ExitReason.MAX_EVENTS
2024-12-12 01:34:20,390 [3037] DEBUG msprime.ancestry: time=0.361519 ancestors=71580 ret=ExitReason.MAX_EVENTS
2024-12-12 01:34:20,465 [3037] DEBUG msprime.ancestry: time=0.45156 ancestors=61818 ret=ExitReason.MAX_EVENTS
2024-12-12 01:34:20,543 [3037] DEBUG msprime.ancestry: time=0.573763 ancestors=52074 ret=ExitReason.MAX_EVENTS
2024-12-12 01:34:20,630 [3037] DEBUG msprime.ancestry: time=0.755864 ancestors=42402 ret=ExitReason.MAX_EVENTS
2024-12-12 01:34:20,729 [3037] DEBUG msprime.ancestry: time=1.03995 ancestors=32814 ret=ExitReason.MAX_EVENTS
2024-12-12 01:34:20,843 [3037] DEBUG msprime.ancestry: time=1.54834 ancestors=23356 ret=ExitReason.MAX_EVENTS
2024-12-12 01:34:20,982 [3037] DEBUG msprime.ancestry: time=2.72085 ancestors=14190 ret=ExitReason.MAX_EVENTS
2024-12-12 01:34:21,159 [3037] DEBUG msprime.ancestry: time=7.38436 ancestors=5736 ret=ExitReason.MAX_EVENTS
2024-12-12 01:34:21,307 [3037] DEBUG msprime.ancestry: time=150.174 ancestors=558 ret=ExitReason.MAX_EVENTS
2024-12-12 01:34:21,327 [3037] DEBUG msprime.ancestry: time=4639.98 ancestors=154 ret=ExitReason.MAX_EVENTS
2024-12-12 01:34:21,339 [3037] DEBUG msprime.ancestry: time=17020.3 ancestors=100 ret=ExitReason.MAX_EVENTS
2024-12-12 01:34:21,349 [3037] DEBUG msprime.ancestry: time=35240.4 ancestors=96 ret=ExitReason.MAX_EVENTS
2024-12-12 01:34:21,357 [3037] DEBUG msprime.ancestry: time=66125.6 ancestors=62 ret=ExitReason.MAX_EVENTS
2024-12-12 01:34:21,363 [3037] DEBUG msprime.ancestry: time=192317 ancestors=0 ret=ExitReason.COALESCENCE
2024-12-12 01:34:21,363 [3037] DEBUG msprime.ancestry: Skipping remaining 0 models
2024-12-12 01:34:21,453 [3037] INFO msprime.ancestry: Completed at time=192317 nodes=407802 edges=437129
In this example we run a reasonably large simulation and turn on the DEBUG output. This will then periodically (every 10,000 simulation events) print out the current time in the simulation, and the number of extant ancestral lineages.
Warning
The format of these logging messages is not fixed and may change arbitrarily in the future. If you need to obtain the information within them, please open an issue on GitHub so that we can provide a documented API for this.