Unit testing

The refactored model is being thoroughly tested thanks to unit testing, integration testing and (intelligent) type checking.

To test, from either the root folder or within tests/ run:


To enable coverage reporting, run:

pytest --cov=slim/ --cov-config=.coveragerc  --cov-report html --cov-context=test

The last two parameters generate a human-friendly report.

Type checking

For type checking, install pytype and run (from the root folder):

pytype --config pytype.cfg


This project relies on cProfile for profiling. To profile an execution pass the –profile option.

To visualise the final profiling artifact (released as {output_folder}/profile_{sim_name}) one could use snakeviz or any other tooling of choice.

Note that cProfile does not provide line coverage. For that purpose line-profiler is available. Unfortunately it requires manual annotation of the source code.


It is recommended to minimise any I/O operation while profiling. Thus avoid using options like --save-rate.

Assertion failures

Sometimes the simulation crashes due to some invariants being broken. If you believe that it shouldn’t be concerning you could pass the -O option to the interpreter to ignore the assertion failures. That said, assertion failures are good indicators of simulation bug. Please report them via Github.