sequence manipulation for DNA, RNA and protein
bioinformaticsdnarnaproteinsequence
Every published version of this deck has been yanked. Nothing here will be chosen by a new install. A lockfile that already pins one of these versions keeps working.
| Version | Status | Kind | Pin | Requires | Engines | Capabilities |
|---|---|---|---|---|---|---|
| 0.1.0 | yanked | git | 99a49292281b | - | jennifer >=0.25.0 jennifer-tiny >=0.25.0 | - |
LGPL-3.0-only
0.1.0Times a client asked this registry where to find this deck. Not downloads: the registry only stores metadata, and the code is fetched from its repository directly, so we never see an install and cannot count one. Repeated builds inflate these numbers; installs from an existing lockfile do not appear at all. Counted in UTC.
Sequence manipulation for DNA, RNA and protein, in the Jennifer language.
Transforms, composition and physical properties, pattern and feature search, FASTA and FASTQ, sequence generation, and pairwise alignment.
import "@jennifer/bioinformatics/" as bioseq;
def gene as string init bioseq.filterDna("1 atg acg tta cat gga taa");
bioseq.reverseComplement($gene); # TTATCCATGTAACGTCAT
bioseq.translate($gene); # MTLHG*
bioseq.gcContent($gene); # 33.33
bioseq.molecularWeight($gene, bioseq.DNA); # 5546.66Sequences are plain strings: no Seq type to construct, no wrapper to unwrap. The package is named for the field and the alias for what the calls act on, so bioseq.reverseComplement($s) reads better in a pipeline than bioinformatics.reverseComplement($s). Nothing in the deck depends on the name the caller gives it.
The deck runs on jennifer-tiny. Nothing under src/ opens a socket, spawns a process or touches the filesystem, so it needs no capability and [engines] lists both builds.
jennifer-language.github.io/deck-bioinformatics carries a guide per topic, a cheatsheet of the whole surface, and the design notes.
The source is docs/, built with Grimoire and published on every push to main. To read it locally:
git clone https://github.com/jennifer-language/grimoire .grimoire
jennifer run .grimoire/bin/grimoire servejennifer test src/bioinformatics_test.j # the white-box suite
jennifer run examples/compare.j # global and local alignment, distances
jennifer run examples/search.j # patterns, ORFs, CpG islands, digest
jennifer run examples/manipulate.j # random sequences, shuffle, mutate, windows
jennifer run examples/composition.j # GC, mass, Tm, pI, GRAVY, codon usage
jennifer run examples/formats.j # FASTA / FASTQ over testdata/
jennifer run examples/transforms.j # complement, transcribe, translate
jennifer run examples/tables.j # the reference data the deck carries
jennifer run examples/bench.j # the measurements behind the conventions
jennifer fmt -l src/topics/*.j # formatting check
jennifer lint src/bioinformatics.j # the module, which splices every topic
jennifer lint src/bioinformatics_test.j # the test overlay, likewise
jennifer lint examples/*.j tools/*.j
jennifer run tools/gentables.j # regenerate src/topics/tabledata.j
jennifer run tools/genenzymes.j # regenerate src/topics/enzymedata.jLint reaches every line through four compilable units. A topic file cannot be linted alone, being included rather than compiled, so the module and the test overlay are what cover it through the splice.
Two topic files are generated, see tools/. Generated data and hand-written accessors live in separate files (tabledata.j vs tables.j), so regenerating never clobbers API. The measurements in examples/bench.j settled the implementation conventions and are kept so a regression shows up as a number; the story is in Design notes.
| workflow | when | what |
|---|---|---|
test.yml | push, PR | fmt, lint, the header/overlay/cheatsheet guards, the suite, every example, the generator drift check, then every example again on jennifer-tiny |
docs.yml | push, PR | build docs/ with Grimoire; publish to Pages from main |
release.yml | version tag | re-run the gate, check deck.toml matches the tag, cut the release |
The three workflows and the tools/check-*.sh guards are shared verbatim with the other deck repositories; tools/deck-lib.sh discovers what differs between them. tools/check-extra.sh is this deck's own hook, and is what re-runs the table generators to prove the committed data still matches them.
LGPL-3.0-only, see LICENSE.