{"name":"@jennifer/bioinformatics","description":"sequence manipulation for DNA, RNA and protein","versions":{"0.1.0":{"version":"0.1.0","kind":"git","url":"https://github.com/deckyard/deck-bioinformatics.git","ref":"0.1.0","commit":"99a49292281bbc36e9921d0ff99abb64fe802c0f","checksum":"","yanked":true,"license":"LGPL-3.0-only","requires":{},"engines":{"jennifer":"\u003e=0.25.0","jennifer-tiny":"\u003e=0.25.0"},"capabilities":[],"keywords":["bioinformatics","dna","rna","protein","sequence"],"description":"sequence manipulation for DNA, RNA and protein","publishedAt":"1793615240","repoId":1350404933,"repoOwnerId":346943577,"repoOwner":"deckyard"}},"readme":"# @jennifer/bioinformatics\n\n[![test](https://github.com/jennifer-language/deck-bioinformatics/actions/workflows/test.yml/badge.svg)](https://github.com/jennifer-language/deck-bioinformatics/actions/workflows/test.yml)\n[![Documentation](https://img.shields.io/badge/docs-github%20pages-blue)](https://jennifer-language.github.io/deck-bioinformatics/)\n[![release](https://img.shields.io/github/v/release/jennifer-language/deck-bioinformatics)](https://github.com/jennifer-language/deck-bioinformatics/releases/latest)\n\n**Sequence manipulation for DNA, RNA and protein**, in the\n[Jennifer](https://jennifer-lang.dev/) language.\n\nTransforms, composition and physical properties, pattern and feature search,\nFASTA and FASTQ, sequence generation, and pairwise alignment.\n\n```jennifer\nimport \"@jennifer/bioinformatics/\" as bioseq;\n\ndef gene as string init bioseq.filterDna(\"1 atg acg tta cat gga taa\");\n\nbioseq.reverseComplement($gene);            # TTATCCATGTAACGTCAT\nbioseq.translate($gene);                    # MTLHG*\nbioseq.gcContent($gene);                    # 33.33\nbioseq.molecularWeight($gene, bioseq.DNA);  # 5546.66\n```\n\nSequences are plain strings: no `Seq` type to construct, no wrapper to unwrap.\nThe package is named for the field and the alias for what the calls act on, so\n`bioseq.reverseComplement($s)` reads better in a pipeline than\n`bioinformatics.reverseComplement($s)`. Nothing in the deck depends on the name\nthe caller gives it.\n\nThe deck runs on `jennifer-tiny`. Nothing under `src/` opens a socket, spawns a\nprocess or touches the filesystem, so it needs no capability and `[engines]`\nlists both builds.\n\n## Documentation\n\n[**jennifer-language.github.io/deck-bioinformatics**](https://jennifer-language.github.io/deck-bioinformatics/)\ncarries a guide per topic, a cheatsheet of the whole surface, and the design\nnotes.\n\nThe source is [`docs/`](docs/), built with\n[Grimoire](https://github.com/jennifer-language/grimoire) and published on every\npush to `main`. To read it locally:\n\n```\ngit clone https://github.com/jennifer-language/grimoire .grimoire\njennifer run .grimoire/bin/grimoire serve\n```\n\n## Development\n\n```\njennifer test src/bioinformatics_test.j # the white-box suite\njennifer run examples/compare.j         # global and local alignment, distances\njennifer run examples/search.j          # patterns, ORFs, CpG islands, digest\njennifer run examples/manipulate.j      # random sequences, shuffle, mutate, windows\njennifer run examples/composition.j     # GC, mass, Tm, pI, GRAVY, codon usage\njennifer run examples/formats.j         # FASTA / FASTQ over testdata/\njennifer run examples/transforms.j      # complement, transcribe, translate\njennifer run examples/tables.j          # the reference data the deck carries\njennifer run examples/bench.j           # the measurements behind the conventions\n\njennifer fmt -l src/topics/*.j          # formatting check\njennifer lint src/bioinformatics.j      # the module, which splices every topic\njennifer lint src/bioinformatics_test.j # the test overlay, likewise\njennifer lint examples/*.j tools/*.j\n\njennifer run tools/gentables.j          # regenerate src/topics/tabledata.j\njennifer run tools/genenzymes.j         # regenerate src/topics/enzymedata.j\n```\n\nLint reaches every line through four compilable units. A topic file cannot be\nlinted alone, being `include`d rather than compiled, so the module and the test\noverlay are what cover it through the splice.\n\nTwo topic files are generated, see [`tools/`](tools/README.md). Generated data\nand hand-written accessors live in separate files (`tabledata.j` vs `tables.j`),\nso regenerating never clobbers API. The measurements in `examples/bench.j`\nsettled the implementation conventions and are kept so a regression shows up as\na number; the story is in [Design notes](docs/design.md).\n\n## Continuous integration\n\n| workflow | when | what |\n| --- | --- | --- |\n| [`test.yml`](.github/workflows/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` |\n| [`docs.yml`](.github/workflows/docs.yml) | push, PR | build `docs/` with Grimoire; publish to Pages from `main` |\n| [`release.yml`](.github/workflows/release.yml) | version tag | re-run the gate, check `deck.toml` matches the tag, cut the release |\n\nThe three workflows and the `tools/check-*.sh` guards are shared verbatim with\nthe other deck repositories; `tools/deck-lib.sh` discovers what differs between\nthem. `tools/check-extra.sh` is this deck's own hook, and is what re-runs the\ntable generators to prove the committed data still matches them.\n\n## License\n\nLGPL-3.0-only, see [LICENSE](LICENSE).\n"}