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
    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.0rc3.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.0rc3-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.0rc3-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.0rc3-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.0rc3.tar.gz.

File metadata

  • Download URL: deacon-0.16.0rc3.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.0rc3.tar.gz
Algorithm Hash digest
SHA256 2388a734c13472fdff106fa51428cf105c391002c9bee7e23f2831bd44f1fa3e
MD5 fdb8bb6a3f1f91ddc5dfb00e662dadd5
BLAKE2b-256 8766023bd374f58ff87b9556d1087d76b688b344f3e7d75da427f99e9c3977d4

See more details on using hashes here.

Provenance

The following attestation bundles were made for deacon-0.16.0rc3.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.0rc3-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for deacon-0.16.0rc3-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5c32a6c96ab4da13df107fe82dcf5d794107637d424f786c3e25bdb82cf650eb
MD5 1ac6487b8e298a8e0576d763e07eb8e8
BLAKE2b-256 2a2dc89374bfe83e8c1b2e87bee1b8b6ca22d8a764adf93b1b23c0ca73e5a516

See more details on using hashes here.

Provenance

The following attestation bundles were made for deacon-0.16.0rc3-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.0rc3-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for deacon-0.16.0rc3-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 bf6f3b8cc86d8c7aeb4c22ecb1ea4f42d1d0867a0959e410991717165806de6f
MD5 25786768e0dcc2f92aa787d3c238c1e2
BLAKE2b-256 806040451cfff6ff522cb145faa256ac3c2e27cdffcbb913278545ff2ec0d58b

See more details on using hashes here.

Provenance

The following attestation bundles were made for deacon-0.16.0rc3-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.0rc3-cp312-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for deacon-0.16.0rc3-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ac0848507d78e5f537006a8756f3663f96ef89fe73b4d1faf014a1c30776b995
MD5 65dec35eb3e47f41cb213fabf59aa222
BLAKE2b-256 520ac03507eb26e30e25865db7fa9a487945742e8f06f02d3c8660f1d6380bf9

See more details on using hashes here.

Provenance

The following attestation bundles were made for deacon-0.16.0rc3-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