Nuskell is a compiler framework to translate formal chemical reaction networks (CRNs) into domain-level strand displacement (DSD) systems. To support the diversity of proposed CRN-to-DSD translation methods from literature, as well as potential new CRN-to-DSD translation methods that are yet to be developed, Nuskell provides a domain-specific programming language. In this language, CRN-to-DSD translations can be formulated as algorithms: so-called translation schemes. We provide a library of selected existing translation schemes that users can use without understanding the details of the Nuskell programming language.
A notion of correctness for a particular translation is established on a case-by-case basis using the domain-level reaction enumeration package Peppercorn [Badelt et al. (2020)] and the CRN verification package crnverifier, which implements the rate-independent, stochastic-level theories of pathway decomposition equivalence [Shin et al. (2019)] and/or CRN bisimulation [Johnson et al. (2019)].
Peppercorn first finds intended and potentially unintended reaction pathways, then the crnverifier checks if the implementation CRN is a correct implementation of the formal CRN. Nuskell is a first step to integrate biophysical modeling of nucleic acids with rigorous abstraction hierarchies of modern compilers to design and characterize DSD systems. For more details, see [Badelt et al. (2017)].
Nuskell must be installed directly from this repository, we recommend clining the repository and then using:
pip install .
For debugging, or if you are planning a contribution to the repository, please install the development version and make sure all tests pass:
pip install .[dev]
pytest
Upon installation, the package provides an executable nuskell
, which is the
main interface combining CRN-to-DSD translation, DSD enumeration and CRN
verification. For example, to implement the formal CRN
A + B <=> X + Y
X -> A
using the translation-scheme from Srinivas (2015), and to verify that the translation is correct with CRN bisimulation, use the command line call:
echo "A + B <=> X + Y; X -> A" | nuskell --ts srinivas2015.ts --verify crn-bisimulation
New users may also appreciate the -v
flag to get more detailed information on
the individual compilation steps, as well as the option --pilfile
to print the
DNA complexes generated in different stages of the compilation.
Detailed information about existing translation schemes can be found in the
translation schemes directory.
For more options see:
nuskell --help
A (preliminary) documentation can be found online: documentation. Most importantly, the documentation provides more details on what kind of translation schemes are supported and how to write them. Suggestions and contributions that improve the documentation are very welcome.
0.8 -- basically a complete rewrite, python>=3.8 only.
- nuskell.dsdcompiler is now a subpackage to compile from CRN to DSD.
- crnverifier is now an independent package and therefore a dependency.
- enumeration interface updated to peppercornenumerator-v1.1.
- nuskell now uses the prototype objects provided by the dsdobjects library.
- Stefan Badelt
- Seung Woo Shin
- Hope Amber Johnson
- Qing Dong
- Erik Winfree
Stefan Badelt, Seung Woo Shin, Robert F. Johnson, Qing Dong, Chris Thachuk, and Erik Winfree (2017) "A General-Purpose CRN-to-DSD Compiler with Formal Verification, Optimization, and Simulation Capabilities" [Badelt et al. (2017)].