Metadata-Version: 2.4
Name: dnakit
Version: 0.2.0
Summary: Deterministic tools for DNA sequence analysis
Author: DNAKit contributors
License-Expression: MIT AND MIT-0 AND Apache-2.0 AND CC-BY-4.0 AND AGPL-3.0-only
Project-URL: Homepage, https://github.com/mapengsen/DNAKit
Project-URL: Documentation, https://mapengsen.github.io/DNAKit/en/
Project-URL: Repository, https://github.com/mapengsen/DNAKit
Project-URL: Issues, https://github.com/mapengsen/DNAKit/issues
Project-URL: Changelog, https://mapengsen.github.io/DNAKit/en/changelog/
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Intended Audience :: Science/Research
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
Classifier: Typing :: Typed
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
License-File: DISCLAIMER.md
License-File: THIRD_PARTY_NOTICES.md
License-File: licenses/skills/agentic-science/LICENSE
License-File: licenses/skills/biomcp/CITATION.cff
License-File: licenses/skills/biomcp/LICENSE
License-File: licenses/skills/bionemo/LICENSE
License-File: licenses/skills/bionemo/LICENSE-APACHE-2.0
License-File: licenses/skills/bionemo/LICENSE-CC-BY-4.0
License-File: licenses/skills/bionemo/NOTICE
License-File: licenses/skills/bioskills/LICENSE
License-File: licenses/skills/clawbio/CITATION.cff
License-File: licenses/skills/clawbio/LICENSE
License-File: licenses/skills/damlab/LICENSE
License-File: licenses/skills/deepmind/LICENSE
License-File: licenses/skills/deepmind/README.md
License-File: licenses/skills/deepmind/SKILL_LICENSES.md
License-File: licenses/skills/encode-toolkit/CITATION.cff
License-File: licenses/skills/encode-toolkit/LICENSE
License-File: licenses/skills/feynman/LICENSE
License-File: licenses/skills/genetic-counseling/LICENSE
License-File: licenses/skills/gigwa-mcp/LICENSE
License-File: licenses/skills/gigwa-mcp/NOTICE
License-File: licenses/skills/haploqtl/CITATION.cff
License-File: licenses/skills/haploqtl/LICENSE
License-File: licenses/skills/isabl/LICENSE
License-File: licenses/skills/kdense/CITATION.cff
License-File: licenses/skills/kdense/LICENSE.md
License-File: licenses/skills/misha/LICENSE
License-File: licenses/skills/misha/LICENSE.md
License-File: licenses/skills/myriad/CITATION.cff
License-File: licenses/skills/myriad/LICENSE-APACHE-2.0.txt
License-File: licenses/skills/myriad/LICENSE-CC-BY-4.0.txt
License-File: licenses/skills/myriad/LICENSE.md
License-File: licenses/skills/myriad/NOTICE.md
License-File: licenses/skills/ngs-tertiary/LICENSE
License-File: licenses/skills/omics/LICENSE
License-File: licenses/skills/pku-metagenomics/LICENSE
License-File: licenses/skills/plant-qpcr/CITATION.cff
License-File: licenses/skills/plant-qpcr/LICENSE
License-File: licenses/skills/plant-skills/LICENSE
License-File: licenses/skills/polyploid-cloning/CITATION.cff
License-File: licenses/skills/polyploid-cloning/LICENSE
License-File: licenses/skills/research-suite/LICENSE
License-File: licenses/skills/research-suite/NOTICE
License-File: licenses/skills/sciagent/LICENSE
License-File: licenses/skills/statgen-skills/LICENSE
License-File: licenses/skills/tangermeme/LICENSE
License-File: licenses/skills/tooluniverse/LICENSE
Requires-Dist: PyYAML>=6.0
Requires-Dist: rich>=13.7
Requires-Dist: tomli>=2.0; python_version < "3.11"
Requires-Dist: typer>=0.12
Requires-Dist: requests<3,>=2.32
Requires-Dist: jsonschema<5,>=4.23
Requires-Dist: graphql-core<4,>=3.2
Requires-Dist: pydantic<3,>=2
Requires-Dist: httpx<1,>=0.27
Requires-Dist: opentelemetry-sdk<2,>=1.30
Provides-Extra: reports
Requires-Dist: reportlab<5,>=4; extra == "reports"
Provides-Extra: encode-credentials
Requires-Dist: keyring<26,>=25; extra == "encode-credentials"
Requires-Dist: cryptography>=42; extra == "encode-credentials"
Provides-Extra: bio-analysis
Requires-Dist: numpy<3,>=1.26; extra == "bio-analysis"
Requires-Dist: scipy<2,>=1.11; extra == "bio-analysis"
Requires-Dist: scikit-learn<2,>=1.5; extra == "bio-analysis"
Provides-Extra: bio-formats
Requires-Dist: biopython<2,>=1.85; extra == "bio-formats"
Provides-Extra: bio-reads
Requires-Dist: pysam<0.25,>=0.22; extra == "bio-reads"
Provides-Extra: bio-plots
Requires-Dist: matplotlib<4,>=3.8; extra == "bio-plots"
Provides-Extra: bio-assembly
Requires-Dist: pydna<6,>=5.5; extra == "bio-assembly"
Provides-Extra: bio-seqme
Requires-Dist: seqme<1,>=0.5; extra == "bio-seqme"
Provides-Extra: bio-dnachisel
Requires-Dist: dnachisel<4,>=3.2; extra == "bio-dnachisel"
Provides-Extra: bio-skibio
Requires-Dist: scikit-bio<0.8,>=0.7.3; extra == "bio-skibio"
Provides-Extra: bio-biotite
Requires-Dist: biotite<2,>=1; extra == "bio-biotite"
Provides-Extra: bio-edlib
Requires-Dist: edlib<2,>=1.3; extra == "bio-edlib"
Provides-Extra: bio-geneblocks
Requires-Dist: geneblocks<2,>=1.2; extra == "bio-geneblocks"
Requires-Dist: dna-features-viewer<4,>=3; extra == "bio-geneblocks"
Provides-Extra: bio-sourmash
Requires-Dist: sourmash<5,>=4.9; extra == "bio-sourmash"
Provides-Extra: bio-pyranges
Requires-Dist: pyranges<1,>=0.1; extra == "bio-pyranges"
Provides-Extra: bio-pyfastx
Requires-Dist: pyfastx<3,>=2; extra == "bio-pyfastx"
Provides-Extra: bio-dnaio
Requires-Dist: dnaio<2,>=1.2; extra == "bio-dnaio"
Provides-Extra: bio-mappy
Requires-Dist: mappy<3,>=2.28; extra == "bio-mappy"
Provides-Extra: bio-pybigwig
Requires-Dist: pyBigWig<1,>=0.3; extra == "bio-pybigwig"
Provides-Extra: bio-pybedtools
Requires-Dist: pybedtools<1,>=0.12; extra == "bio-pybedtools"
Provides-Extra: bio-gffutils
Requires-Dist: gffutils<1,>=0.13; extra == "bio-gffutils"
Provides-Extra: bio-pysbol3
Requires-Dist: sbol3<2,>=1; extra == "bio-pysbol3"
Provides-Extra: bio-scadnano
Requires-Dist: scadnano<1,>=0.21; extra == "bio-scadnano"
Provides-Extra: bio-polarsbio
Requires-Dist: polars-bio<1,>=0.22; extra == "bio-polarsbio"
Provides-Extra: bio-dnacauldron
Requires-Dist: dnacauldron<3,>=2; extra == "bio-dnacauldron"
Provides-Extra: bio-dna-features-viewer
Requires-Dist: dna-features-viewer<4,>=3; extra == "bio-dna-features-viewer"
Provides-Extra: bio-gtars
Requires-Dist: gtars<1,>=0.10; extra == "bio-gtars"
Provides-Extra: bio-pyfaidx
Requires-Dist: pyfaidx<1,>=0.8; extra == "bio-pyfaidx"
Provides-Extra: bio-vcfpy
Requires-Dist: vcfpy<1,>=0.14; extra == "bio-vcfpy"
Provides-Extra: bio-cyvcf2
Requires-Dist: cyvcf2<1,>=0.30; extra == "bio-cyvcf2"
Provides-Extra: bio-scikit-allel
Requires-Dist: scikit-allel<2,>=1.3; extra == "bio-scikit-allel"
Requires-Dist: scipy<2,>=1.11; extra == "bio-scikit-allel"
Provides-Extra: bio-screed
Requires-Dist: screed<2,>=1.1; extra == "bio-screed"
Provides-Extra: bio-py2bit
Requires-Dist: py2bit<2,>=1; extra == "bio-py2bit"
Provides-Extra: bio-parasail
Requires-Dist: parasail<2,>=1.3; extra == "bio-parasail"
Provides-Extra: bio-pyhmmer
Requires-Dist: pyhmmer<1,>=0.12; extra == "bio-pyhmmer"
Provides-Extra: bio-bioframe
Requires-Dist: bioframe<1,>=0.8; extra == "bio-bioframe"
Provides-Extra: bio-gtfparse
Requires-Dist: gtfparse<4,>=3; extra == "bio-gtfparse"
Provides-Extra: bio-pyranges1
Requires-Dist: pyranges1<2,>=1.4; extra == "bio-pyranges1"
Provides-Extra: bio-ncls
Requires-Dist: ncls<1,>=0.0.70; extra == "bio-ncls"
Requires-Dist: numpy<3,>=1.26; extra == "bio-ncls"
Provides-Extra: bio-genomicranges
Requires-Dist: genomicranges<1,>=0.9; extra == "bio-genomicranges"
Requires-Dist: pandas<3,>=2; extra == "bio-genomicranges"
Provides-Extra: bio-varcode
Requires-Dist: varcode<11,>=10.11; extra == "bio-varcode"
Provides-Extra: bio-hgvs
Requires-Dist: hgvs<2,>=1.5; extra == "bio-hgvs"
Requires-Dist: bioutils<1,>=0.4; extra == "bio-hgvs"
Requires-Dist: parsley; extra == "bio-hgvs"
Provides-Extra: bio-bed-reader
Requires-Dist: bed-reader<2,>=1.0; extra == "bio-bed-reader"
Provides-Extra: bio-pandas-plink
Requires-Dist: pandas-plink<3,>=2.3; extra == "bio-pandas-plink"
Requires-Dist: xarray; extra == "bio-pandas-plink"
Provides-Extra: bio-bgen-reader
Requires-Dist: bgen-reader<5,>=4; extra == "bio-bgen-reader"
Provides-Extra: bio-gget
Requires-Dist: gget<1,>=0.30; extra == "bio-gget"
Provides-Extra: bio-pyensembl
Requires-Dist: pyensembl<3,>=2.27; extra == "bio-pyensembl"
Provides-Extra: bio-genomepy
Requires-Dist: genomepy<1,>=0.16; extra == "bio-genomepy"
Provides-Extra: bio-biothings
Requires-Dist: biothings_client<1,>=0.5; extra == "bio-biothings"
Provides-Extra: bio-mygene
Requires-Dist: mygene<4,>=3.2; extra == "bio-mygene"
Provides-Extra: bio-myvariant
Requires-Dist: myvariant<2,>=1.0; extra == "bio-myvariant"
Provides-Extra: bio-pybiomart
Requires-Dist: pybiomart<1,>=0.2; extra == "bio-pybiomart"
Provides-Extra: bio-ncbi-datasets
Requires-Dist: ncbi-datasets-pylib<17,>=16.6; extra == "bio-ncbi-datasets"
Provides-Extra: bio-pyslow5
Requires-Dist: pyslow5<2,>=1.5; extra == "bio-pyslow5"
Requires-Dist: numpy<3,>=1.26; extra == "bio-pyslow5"
Provides-Extra: bio-umi-tools
Requires-Dist: umi-tools<2,>=1.1.6; extra == "bio-umi-tools"
Requires-Dist: regex>=2024; extra == "bio-umi-tools"
Requires-Dist: pysam<0.25,>=0.22; extra == "bio-umi-tools"
Requires-Dist: matplotlib<4,>=3.8; extra == "bio-umi-tools"
Requires-Dist: scipy<2,>=1.11; extra == "bio-umi-tools"
Requires-Dist: pybktree<2,>=1.1; extra == "bio-umi-tools"
Requires-Dist: pandas<3,>=2; extra == "bio-umi-tools"
Provides-Extra: bio-cooler
Requires-Dist: cooler<1,>=0.10; extra == "bio-cooler"
Provides-Extra: bio-cooltools
Requires-Dist: cooltools<1,>=0.7; extra == "bio-cooltools"
Provides-Extra: bio-pairtools
Requires-Dist: pairtools<2,>=1.1; extra == "bio-pairtools"
Provides-Extra: bio-macs3
Requires-Dist: macs3<4,>=3.0; extra == "bio-macs3"
Provides-Extra: bio-methylpy
Requires-Dist: methylpy<2,>=1.4; extra == "bio-methylpy"
Provides-Extra: bio-deeptools
Requires-Dist: deeptools<5,>=4.0; extra == "bio-deeptools"
Provides-Extra: bio-gimmemotifs
Requires-Dist: gimmemotifs<1,>=0.18; extra == "bio-gimmemotifs"
Provides-Extra: bio-snapatac2
Requires-Dist: snapatac2<3,>=2.10; extra == "bio-snapatac2"
Provides-Extra: bio-tangermeme
Requires-Dist: tangermeme<2,>=1.5; extra == "bio-tangermeme"
Requires-Dist: torch<3,>=2.5; extra == "bio-tangermeme"
Provides-Extra: bio-tskit
Requires-Dist: tskit<2,>=1.0; extra == "bio-tskit"
Provides-Extra: bio-dadi
Requires-Dist: dadi<3,>=2.4; extra == "bio-dadi"
Requires-Dist: demes<1,>=0.2; extra == "bio-dadi"
Provides-Extra: bio-dendropy
Requires-Dist: dendropy<6,>=5.1; extra == "bio-dendropy"
Provides-Extra: bio-toytree
Requires-Dist: toytree<4,>=3.0; extra == "bio-toytree"
Provides-Extra: bio-pyvolve
Requires-Dist: pyvolve<2,>=1.1; extra == "bio-pyvolve"
Provides-Extra: bio-khmer
Requires-Dist: khmer<3,>=2.1; extra == "bio-khmer"
Provides-Extra: bio-snapgene
Requires-Dist: snapgene-reader<1,>=0.1; extra == "bio-snapgene"
Provides-Extra: bio-pygenomeviz
Requires-Dist: pygenomeviz<1,>=0.4; extra == "bio-pygenomeviz"
Provides-Extra: bio-alphagenome
Requires-Dist: alphagenome<1,>=0.10; extra == "bio-alphagenome"
Provides-Extra: bio-grelu
Requires-Dist: grelu<2,>=1.1; extra == "bio-grelu"
Provides-Extra: bio-selene
Requires-Dist: selene-sdk<1,>=0.6; extra == "bio-selene"
Provides-Extra: bio-genomic-benchmarks
Requires-Dist: genomic-benchmarks<2,>=1; extra == "bio-genomic-benchmarks"
Provides-Extra: bio-kipoi
Requires-Dist: kipoi<1,>=0.8; extra == "bio-kipoi"
Provides-Extra: bio-primer3
Requires-Dist: primer3-py<3,>=2.3; extra == "bio-primer3"
Provides-Extra: bio-scanpy
Requires-Dist: scanpy<2,>=1.11; extra == "bio-scanpy"
Requires-Dist: anndata<1,>=0.12; extra == "bio-scanpy"
Provides-Extra: bio-scvi
Requires-Dist: scvi-tools<2,>=1.4; extra == "bio-scvi"
Requires-Dist: anndata<1,>=0.12; extra == "bio-scvi"
Provides-Extra: bio-muon
Requires-Dist: muon<0.2,>=0.1.9; extra == "bio-muon"
Provides-Extra: bio-wdl
Requires-Dist: miniwdl<2,>=1.15; extra == "bio-wdl"
Provides-Extra: bio-cwl
Requires-Dist: cwltool<4,>=3.1; extra == "bio-cwl"
Provides-Extra: bio-snakemake
Requires-Dist: snakemake<10,>=9.27; extra == "bio-snakemake"
Provides-Extra: bio-nf-core
Requires-Dist: nf-core<5,>=4.1; extra == "bio-nf-core"
Provides-Extra: bio-bioblend
Requires-Dist: bioblend<2,>=1.9; extra == "bio-bioblend"
Provides-Extra: bio-toil
Requires-Dist: toil<10,>=9.5; extra == "bio-toil"
Requires-Dist: biopython<2,>=1.85; extra == "bio-toil"
Provides-Extra: bio-smartapi
Requires-Dist: smartapi-mcp<1,>=0.5; extra == "bio-smartapi"
Provides-Extra: bio-biomcp
Requires-Dist: biomcp-cli<1,>=0.9; extra == "bio-biomcp"
Provides-Extra: bio-galaxy
Requires-Dist: galaxy-mcp<2,>=1.11; extra == "bio-galaxy"
Provides-Extra: bio-clawbio
Requires-Dist: clawbio<1,>=0.7; extra == "bio-clawbio"
Requires-Dist: biopython<2,>=1.85; extra == "bio-clawbio"
Provides-Extra: bio-hail
Requires-Dist: hail==0.2.139; extra == "bio-hail"
Provides-Extra: bio-cutadapt
Requires-Dist: cutadapt<6,>=5; extra == "bio-cutadapt"
Provides-Extra: bio
Requires-Dist: dnakit[bio-analysis,bio-assembly,bio-biotite,bio-cutadapt,bio-cyvcf2,bio-dna-features-viewer,bio-dnacauldron,bio-dnachisel,bio-dnaio,bio-edlib,bio-formats,bio-geneblocks,bio-gffutils,bio-gtars,bio-mappy,bio-plots,bio-polarsbio,bio-pybedtools,bio-pybigwig,bio-pyfaidx,bio-pyfastx,bio-pyranges,bio-pysbol3,bio-reads,bio-scadnano,bio-scikit-allel,bio-seqme,bio-skibio,bio-sourmash,bio-vcfpy]; extra == "bio"
Provides-Extra: bio-validation
Requires-Dist: dnakit[bio-skibio]; extra == "bio-validation"
Requires-Dist: statsmodels<1,>=0.14; extra == "bio-validation"
Provides-Extra: genomics-genes
Requires-Dist: pyrodigal<4,>=3.7; extra == "genomics-genes"
Provides-Extra: genomics
Requires-Dist: numpy<3,>=1.26; extra == "genomics"
Requires-Dist: pyrodigal<4,>=3.7; extra == "genomics"
Requires-Dist: pysam<0.25,>=0.22; extra == "genomics"
Requires-Dist: pyfastani<0.7,>=0.6.2; extra == "genomics"
Provides-Extra: dna-storage
Requires-Dist: Chamaeleo<2,>=1.34; extra == "dna-storage"
Provides-Extra: dna-nanotechnology
Requires-Dist: scadnano<1,>=0.21; extra == "dna-nanotechnology"
Provides-Extra: dev
Requires-Dist: build>=1.2; extra == "dev"
Requires-Dist: hypothesis>=6.100; extra == "dev"
Requires-Dist: mypy>=1.11; extra == "dev"
Requires-Dist: numpy<3,>=1.26; extra == "dev"
Requires-Dist: pytest>=8.0; extra == "dev"
Requires-Dist: pytest-cov>=5.0; extra == "dev"
Requires-Dist: ruff>=0.8; extra == "dev"
Requires-Dist: scikit-learn<2,>=1.5; extra == "dev"
Requires-Dist: setuptools>=77; extra == "dev"
Requires-Dist: twine>=5.0; extra == "dev"
Requires-Dist: types-PyYAML>=6.0; extra == "dev"
Requires-Dist: wheel; extra == "dev"
Provides-Extra: docs
Requires-Dist: mkdocs<2,>=1.6; extra == "docs"
Requires-Dist: mkdocs-material<10,>=9.5; extra == "docs"
Requires-Dist: mkdocs-static-i18n<2,>=1.3.1; extra == "docs"
Requires-Dist: mkdocstrings[python]<1,>=0.27; extra == "docs"
Requires-Dist: pymdown-extensions<11,>=10.2; extra == "docs"
Requires-Dist: nbmake<2,>=1.5; extra == "docs"
Provides-Extra: viz
Requires-Dist: CairoSVG<3,>=2.7; extra == "viz"
Requires-Dist: Pillow<13,>=10; extra == "viz"
Provides-Extra: io
Requires-Dist: pyarrow<26,>=19; extra == "io"
Provides-Extra: validation
Requires-Dist: biopython<2,>=1.85; extra == "validation"
Provides-Extra: external-tools
Requires-Dist: biopython<2,>=1.85; extra == "external-tools"
Provides-Extra: agent
Requires-Dist: fastmcp<4,>=3.4.5; extra == "agent"
Requires-Dist: httpx[socks]<1,>=0.27; extra == "agent"
Provides-Extra: neural
Requires-Dist: gdown<6,>=5.2; extra == "neural"
Requires-Dist: huggingface-hub<2,>=0.28; extra == "neural"
Requires-Dist: numpy<3,>=1.26; extra == "neural"
Requires-Dist: scikit-learn<2,>=1.5; extra == "neural"
Requires-Dist: torch<3,>=2.5; extra == "neural"
Requires-Dist: transformers<5,>=4.49; extra == "neural"
Provides-Extra: training
Requires-Dist: huggingface-hub<2,>=0.28; extra == "training"
Requires-Dist: numpy<3,>=1.26; extra == "training"
Requires-Dist: openpyxl<4,>=3.1; extra == "training"
Requires-Dist: pandas<4,>=2.2; extra == "training"
Requires-Dist: pyarrow<26,>=19; extra == "training"
Requires-Dist: scikit-learn<2,>=1.5; extra == "training"
Requires-Dist: torch<3,>=2.6; extra == "training"
Requires-Dist: transformers<5,>=4.49; extra == "training"
Requires-Dist: xlrd<3,>=2.0; extra == "training"
Provides-Extra: ml
Requires-Dist: numpy<3,>=1.26; extra == "ml"
Requires-Dist: scikit-learn<2,>=1.5; extra == "ml"
Requires-Dist: joblib<2,>=1.4; extra == "ml"
Requires-Dist: threadpoolctl<4,>=3.1; extra == "ml"
Requires-Dist: openpyxl<4,>=3.1; extra == "ml"
Requires-Dist: pandas<4,>=2.2; extra == "ml"
Requires-Dist: pyarrow<26,>=19; extra == "ml"
Requires-Dist: xlrd<3,>=2.0; extra == "ml"
Provides-Extra: xgboost
Requires-Dist: dnakit[ml]; extra == "xgboost"
Requires-Dist: xgboost<4,>=2.1; extra == "xgboost"
Provides-Extra: lightgbm
Requires-Dist: dnakit[ml]; extra == "lightgbm"
Requires-Dist: lightgbm<5,>=4.5; extra == "lightgbm"
Provides-Extra: catboost
Requires-Dist: dnakit[ml]; extra == "catboost"
Requires-Dist: catboost<2,>=1.2; extra == "catboost"
Provides-Extra: neural-caduceus
Requires-Dist: mamba-ssm<3,>=2.2; extra == "neural-caduceus"
Provides-Extra: neural-enformer
Requires-Dist: gdown<6,>=5.2; extra == "neural-enformer"
Requires-Dist: enformer-pytorch<1,>=0.8.11; extra == "neural-enformer"
Provides-Extra: neural-evo2
Requires-Dist: evo2<0.7,>=0.5.3; (python_version >= "3.11" and python_version < "3.13") and extra == "neural-evo2"
Dynamic: license-file

<p align="right">
  <a href="https://github.com/mapengsen/DNAKit/blob/main/README_CN.md">简体中文</a> | <strong>English</strong>
</p>

<p align="center">
  <img alt="DNAKit logo" src="https://raw.githubusercontent.com/mapengsen/DNAKit/main/docs/assets/images/DNAKit-icon.png" width="40%">
</p>

<p align="center">
  <a href="https://github.com/mapengsen/DNAKit/actions/workflows/ci.yml">
    <img src="https://github.com/mapengsen/DNAKit/actions/workflows/ci.yml/badge.svg?branch=main&event=push" alt="CI status">
  </a>
  <a href="https://mapengsen.github.io/DNAKit/en/">
    <img src="https://img.shields.io/badge/docs-GitHub%20Pages-4051b5" alt="Documentation">
  </a>
  <a href="https://www.python.org/downloads/">
    <img src="https://img.shields.io/badge/Python-3.10%2B-3776AB" alt="Python 3.10+">
  </a>
  <a href="https://github.com/mapengsen/DNAKit/blob/main/LICENSE">
    <img src="https://img.shields.io/github/license/mapengsen/DNAKit" alt="MIT license">
  </a>
</p>

<p align="center">
  <a href="https://pypi.org/project/dnakit/">
    <img src="https://img.shields.io/pypi/v/dnakit?include_prereleases=true&label=PyPI&logo=pypi&cacheSeconds=300" alt="PyPI version">
  </a>
  <a href="https://github.com/mapengsen/DNAKit/tree/main/packaging/bioconda">
    <img src="https://img.shields.io/badge/Bioconda-recipe-43B02A?logo=anaconda&logoColor=white" alt="Bioconda recipe">
  </a>
  <a href="https://github.com/mapengsen/DNAKit/tree/main/galaxy/dnakit">
    <img src="https://img.shields.io/badge/Galaxy-wrapper-2C3143?logo=galaxy&logoColor=white" alt="Galaxy wrapper">
  </a>
  <a href="https://github.com/mapengsen/DNAKit/tree/main/packaging/guix">
    <img src="https://img.shields.io/badge/GNU%20Guix-package-A42E2B?logo=gnu&logoColor=white" alt="GNU Guix package">
  </a>
</p>

<p align="center">
  <strong>DNAKit: A Comprehensive Toolkit for Efficient DNA Research</strong>
</p>

# What is DNAKit?

DNAKit is a reproducible Python toolkit for DNA sequence analysis, positioned as an "RDKit for
DNA." It covers standardization, sequence and annotation formats, basic operations, descriptors,
pattern scanning, thermodynamics, fingerprints, similarity analysis, clustering and dataset
splitting, comprehensive evaluation, molecular-biology simulation, and visualization. DNA
foundation models can optionally be used for direct property prediction or to extract
representations for k-means clustering.

# Installation and quick start

Install the current release:

```bash
pip install dnakit==0.2.0
```

Install the optional VEP, ClinVar, dbSNP, gnomAD, dN/dS, and Golden Gate
backend with `pip install "dnakit[external-tools]"`.

To expose DNAKit to an MCP-capable Agent, run `pip install "dnakit[agent]"` and configure the
`dnakit-mcp` command in the Agent client.

This source checkout's built-in `run_agent()` also supports optional tool generation, description optimization or compatible implementation repairs, local file result caching/resume, and retrieval from a user-selected knowledge directory (RAG). See the [Agent tutorial](docs/llm_tools/agent.en.md#agent-actions) for configuration and examples; generation and optimization require a writable checkout and explicit permission for side effects.

This source checkout also includes a curated DNA/genomics Skill catalog. Install the checkout
with `python -m pip install -e "."`, then search with `dnakit skills search "variant annotation"`
or install the discovery skill with `dnakit skills install dnakit --agent codex`.
See the [Skills tutorial](docs/llm_tools/skills.en.md) for Claude Code, Cursor, MCP, and citations.
DNAKit code remains MIT; bundled Skills retain their [original licenses and attribution](THIRD_PARTY_NOTICES.md).

This checkout adds [breeding, gene finding, methylation, DNA storage and nanostructure APIs](docs/api/features/38_genomics_extensions.en.md), plus [external analyses and MCP connections](docs/api/features/39_external_genomics.en.md).
Install selected extras locally, for example `python -m pip install -e ".[bio-analysis,genomics-genes,agent]"`.
Original projects, authors and remaining integration gaps are recorded in the [source FAQ](docs/faq/genomics_sources.en.md). The [335-project review](docs/faq/user_catalog.en.md) records every supplied project, duplicate, added interface and deferred dependency.

To contribute to development, clone the repository and create the complete Conda environment:

```bash
conda env create -f environment-dev.yml
conda activate dnakit-dev
```

# Documentation

The complete English documentation is available from the
[DNAKit documentation homepage](https://mapengsen.github.io/DNAKit/en/), including the
[feature tree](https://mapengsen.github.io/DNAKit/en/api/features/function_tree/) and
[FAQ](https://mapengsen.github.io/DNAKit/en/faq/).

# Support and community

**GitHub repository:**

[github.com/mapengsen/DNAKit](https://github.com/mapengsen/DNAKit)

For questions, feedback, or suggestions, see:

- [FAQ](https://mapengsen.github.io/DNAKit/en/faq/)
- [GitHub Issues](https://github.com/mapengsen/DNAKit/issues)

# Additional distribution platforms

The repository provides [Bioconda and GNU Guix recipes](https://github.com/mapengsen/DNAKit/tree/main/packaging)
and a [Galaxy Tool Shed wrapper](https://github.com/mapengsen/DNAKit/tree/main/galaxy/dnakit).
These files target `0.1.1`. Until they are reviewed and published by their respective platforms,
use the PyPI installation method above.

# Changelog

See [CHANGELOG.md](https://github.com/mapengsen/DNAKit/blob/main/CHANGELOG.md) for release notes.

# Citation

The DNAKit project paper has not yet been published. Cite the current version as:

```text
DNAKit contributors. DNAKit 0.2.0, 2026. https://github.com/mapengsen/DNAKit
```

This section will be updated with the paper citation after publication. When using specific algorithms, databases, or optional backends, cite their corresponding sources as well.

The working tree also provides native DNA encodings, generative metrics, statistics and specification-based optimization, plus optional format codecs and specialist alignment/NGS backends. Usage is organized by task in the [feature tutorials](docs/api/features/function_tree.en.md); see [bioinformatics notes](docs/faq/bioinformatics.en.md) for dependencies and implementation details. Install these with `python -m pip install -e ".[bio]"`.
