Skip to main content

Fast DNA search and [host] depletion using minimizers

Project description

Deacon for Python

Python bindings for Deacon, enabling fast multithreaded DNA sequence filtering for e.g. host pangenome depletion using Python code. These bindings load an index once, allowing subsequent filtering runs with low latency. Deacon's complete functionality is currently only available using the Rust/CLI version of Deacon.

Installation

uv install deacon

Quickstart

from deacon import Index

index = Index("panhuman-1.k31w15.idx")
stats = index.filter(
    fastq_path,
    deplete=True,
    rename=True,
    output=fastq_path.replace(".fastq.gz", ".clean.fastq.gz")
)
print(stats["seqs_in"], stats["seqs_out"])

Index()

Load a minimizer index or probabilistic filter from disk. The resulting object may be reused across many filter calls.

index = Index("panhuman-1.k31w15.idx", complexity_threshold=None)

Pass complexity_threshold (0.0–1.0, e.g. 0.9) to discard low-complexity index minimizers once at load using kdust; the filtered set is then reused across all filter calls. Not supported for bff (binary fuse filter) indexes.

Index.fetch()

Download a prebuilt index, then load and return it (a static method, so Index.fetch(...) returns an Index). output is the local path to save to; when omitted it defaults to "{name}.k{k}w{w}.idx" in the working directory. The index is downloaded on every call — there is no local cache, so an existing file at that path is overwritten.

index = Index.fetch("panhuman-1", k=31, w=15, output=None, complexity_threshold=None)

Index.info()

Index.info(index_path) Returns a dict of index metadata:

Key Meaning
k k-mer length
w minimizer window size
format exact-u64, exact-u128, or bff (binary fuse filter)
count number of keys in index (fingerprint slot count for bff)

Index.filter()

Filter a FASTA/FASTQ file or file pair against the index and return a dict of summary statistics. Auto-detects .gz/.zst/.xz compression on both input and output based on file extension. The Python GIL is released while filtering meaning calls benefit from multithreading. Refer to the main Deacon readme for more detailed usage examples.

def filter(
    fastq,                   # input path (FASTA/FASTQ, optionally .gz/.zst/.xz)
    fastq2=None,             # second mate for paired reads
    interleaved=False,       # treat fastq as interleaved paired reads (cannot combine with fastq2)
    deplete=False,           # False = search (keep matches); True = deplete (remove matches)
    rename=False,            # replace read names with sequential integers
    rename_random=False,     # replace read names with random strings
    output=None,             # output path; None writes to stdout
    output2=None,            # second output path for paired reads
    abs_threshold=2,         # min absolute minimizer hits to call a match
    rel_threshold=0.01,      # min proportion of minimizers hitting to call a match
    prefix_length=0,         # only use the first N bp of each read (0 = whole read)
    output_fasta=False,      # emit FASTA instead of FASTQ
    threads=8,               # worker threads for filtering
    compression_level=2,     # output compression level
    compression_threads=0,   # threads for output compression (0 = auto)
    debug=False,             # verbose per-read debug output
    quiet=True,              # suppress progress/log output on stderr
) -> dict

Modes. With deplete=False (the default, search mode) reads that match the index are kept; with deplete=True reads that match are removed (host depletion). A read is a match only when it clears both thresholds: at least abs_threshold minimizer hits and at least rel_threshold of its minimizers hitting the index.

Output. When output is None the filtered records are written to stdout. To count without keeping the filtered sequences, pass output="/dev/null". Statistics are returned regardless.

Return value. A dict including the run configuration (version, index, input/input2, output/output2, k, w, abs_threshold, rel_threshold, prefix_length, deplete, rename, rename_random) and the results:

Key Meaning
seqs_in, seqs_out, seqs_removed sequence counts
seqs_out_proportion, seqs_removed_proportion sequence proportions
bp_in, bp_out, bp_removed base-pair counts
bp_out_proportion, bp_removed_proportion base-pair proportions
time wall-clock seconds
seqs_per_second, bp_per_second throughput (filtering only)
seqs_per_second_total, bp_per_second_total throughput (including load/IO)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

deacon-0.16.0rc4.tar.gz (3.0 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

deacon-0.16.0rc4-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.17+ x86-64

deacon-0.16.0rc4-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.9 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.17+ ARM64

deacon-0.16.0rc4-cp312-abi3-macosx_11_0_arm64.whl (2.3 MB view details)

Uploaded CPython 3.12+macOS 11.0+ ARM64

File details

Details for the file deacon-0.16.0rc4.tar.gz.

File metadata

  • Download URL: deacon-0.16.0rc4.tar.gz
  • Upload date:
  • Size: 3.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for deacon-0.16.0rc4.tar.gz
Algorithm Hash digest
SHA256 c8749462baac55f3478763404490d5d53826815a63282bed6b151b39d67c8de3
MD5 ebcd5159f045ec5400a95c65e1a0b560
BLAKE2b-256 68ef7e1227f2e7d8ec0b7bc092b2ba8b4184e4f3f15b9d4c51c77a4bf5b58935

See more details on using hashes here.

Provenance

The following attestation bundles were made for deacon-0.16.0rc4.tar.gz:

Publisher: release-pypi.yaml on bede/deacon

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file deacon-0.16.0rc4-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for deacon-0.16.0rc4-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ba5effbc9bbc5e23a1b7daba468a6fd6e1c27aeaa8b51de0ad10cc175857ab24
MD5 1aa5ea85a6b64e5a0cbb3b39e98db5e0
BLAKE2b-256 bdff520fb4951f7c7703a5cffc9a925193d83813c23880be0302f181b5eadd45

See more details on using hashes here.

Provenance

The following attestation bundles were made for deacon-0.16.0rc4-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release-pypi.yaml on bede/deacon

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file deacon-0.16.0rc4-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for deacon-0.16.0rc4-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 fe651ec84d0b0eaf0fc177f92d6941727dc822135ef60b73e43c37325d60ae2c
MD5 547b9a361390ad3758c9d313b130608f
BLAKE2b-256 1d773e08167180a085315de81b61f0401a5b5fcea3a37272ec2acbc15c23bd70

See more details on using hashes here.

Provenance

The following attestation bundles were made for deacon-0.16.0rc4-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release-pypi.yaml on bede/deacon

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file deacon-0.16.0rc4-cp312-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for deacon-0.16.0rc4-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6066dd2ff159b5630046c399cb67c62cd44bce6e8829ba18bb0b4d0195e04ff9
MD5 688a55dee3b80a91de24e2f21bc24eae
BLAKE2b-256 8ec8bb87b73674e85020e08017bb89aa12f24d7ed7c04e86ae327232309c5452

See more details on using hashes here.

Provenance

The following attestation bundles were made for deacon-0.16.0rc4-cp312-abi3-macosx_11_0_arm64.whl:

Publisher: release-pypi.yaml on bede/deacon

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page