Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

leech

[!WARNING] leech is alpha quality and under active development. APIs, CLI flags, and output formats may change without notice, and bugs are expected. Validate results before relying on it for anything important.

Learning Enhanced Electrical Classifiers from Hanopore signals

CI Python 3.12+ License: MIT

Leech classifies aminoacylation state and amino acid identity from Oxford Nanopore tRNA sequencing data. It extracts dwell time features from move tables (the BAM mv tag) and feeds them alongside raw signal and sequence context into a multi-branch neural network, giving it information that signal-only tools like Remora discard.

Installation

Requires Python 3.12+

uv add "leech[rust]"     # or: pip install "leech[rust]"

The rust extra pulls leech-core, the compiled accelerator for data preparation and inference. leech runs without it — every accelerated path has a pure-Python fallback — so plain uv add leech is fine if no wheel matches your platform (wheels are built for manylinux x86_64 and aarch64).

To work on leech itself:

# Install uv if you don't have it
curl -LsSf https://astral.sh/uv/install.sh | sh

# Clone and install
git clone https://github.com/rnabioco/leech.git
cd leech
uv sync

Quick start

1. Prepare training data

uv run leech data prepare \
  --pod5 reads.pod5 \
  --bam alignments.bam \
  --output-dir chunks/ \
  --motif CCAGGC --motif-offset 2 \
  --label 1 --workers 8

2. Train a model

uv run leech model train \
  --train-data chunks/train.json \
  --val-data chunks/val.json \
  --model ConvLSTMDwell \
  --output-dir models/

3. Evaluate

uv run leech eval test \
  --model models/model_best.pt \
  --test-data chunks/test.json \
  --output metrics.json

4. Run inference

uv run leech predict \
  --model models/ \
  --pod5 new_reads.pod5 \
  --bam new_alignments.bam \
  --output predictions.bam

5. Bundle and deploy pairwise models

Package multiple pairwise models into a single file and run aggregated inference:

# Bundle all pairwise models
uv run leech model bundle \
  --model-dir results/models/pairwise/ \
  --output bundle.pt --version 1.0.0

# Inspect bundle contents
uv run leech model bundle-info --bundle bundle.pt

# Run all models (aggregated amino acid prediction)
uv run leech predict \
  --bundle bundle.pt --all \
  --pod5 reads.pod5 --bam alignments.bam \
  --output predictions.bam

CLI overview

Group Commands Purpose
leech data prepare, merge Extract features, merge and split datasets
leech model train, optimize, bundle, bundle-info, calibrate, export Train, tune, calibrate, and package models
leech eval test, compare, importance, ablation Evaluate and analyze models
leech predict Run inference (single model or bundle)

Model architectures

20 architectures across 5 families, all supporting multi-channel signal input (signal_in_channels):

Family Models Description
ConvLSTM ConvLSTMDwell (recommended), ConvLSTMBase Conv-LSTM with 3 branches (signal, sequence, dwell/level features)
ConvLSTM variants +BN, +Attn, +BNAttn, +GNAttn, +LNAttn Batch/group/layer normalization and attention pooling
Remora-compat ConvLSTMRemora, ConvLSTMRemoraBase Remora-compatible architecture for direct comparison
Transformer TransformerDwell, TransformerDwellResidual Multi-head self-attention; Residual variant uses 2-channel signal (raw + kmer residual)
TCN TCNDwell, +GN, +LN, +Residual Temporal Convolutional Network with dilated convolutions
Other ResNetDwell, ConvOnly Residual network; pure CNN with multi-scale convolutions

Training features

  • Loss functions: BCE, focal loss (for class imbalance), and cross-entropy
  • Regularization: weight decay, gradient clipping, dropout
  • LR scheduling: reduce-on-plateau, cosine annealing with warmup
  • Data augmentation: mixup (signal jitter + random scaling)
  • Mixed precision: FP16 training on CUDA; TF32 matmul on Ampere+
  • Performance: torch.compile support, Rust-accelerated signal statistics (217x)
  • Class balancing: automatic class weight computation
  • Balance-groups sampling: equal contribution per source group per epoch
  • K-fold cross-validation: stratified read-level k-fold splits
  • Platt calibration: post-hoc Platt scaling for probability calibration
  • Signal map refinement: Viterbi-based kmer level table refinement (matches Remora)
  • Kmer residual features: expected level, signed/unsigned deviation from kmer table
  • Multi-channel signal: 2-channel input (raw + kmer residual) for Residual model variants
  • Aggregation: naive, confidence-weighted, and tournament pairwise aggregation
  • Composable config: dataclass-based configuration shared between prep and inference
  • TorchScript export: standalone model export for deployment without leech

Snakemake pipeline

For production workloads, leech includes a Snakemake pipeline supporting:

  • Charged vs. uncharged classification
  • Pairwise amino acid discrimination
  • Grid search optimization
  • Multi-architecture comparison
  • HPC clusters (SLURM/LSF)

See pipeline/ for configuration and usage.

Development

uv sync --all-extras      # Install with dev tools
uv run pytest              # Run tests
uv run ruff check .        # Lint
uv run ruff format .       # Format
uv run ty check src/leech/ # Type check

Citation

If you use leech, please cite:

  • This work (publication pending)
  • Remora (underlying training framework)

License

MIT License - see LICENSE for details.

Download files

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

Source Distribution

leech-0.6.7rc1.tar.gz (8.7 MB view details)

Uploaded Source

Built Distribution

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

leech-0.6.7rc1-py3-none-any.whl (3.4 MB view details)

Uploaded Python 3

File details

Details for the file leech-0.6.7rc1.tar.gz.

File metadata

  • Download URL: leech-0.6.7rc1.tar.gz
  • Upload date:
  • Size: 8.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for leech-0.6.7rc1.tar.gz
Algorithm Hash digest
SHA256 350d1fd4447304d7fd7034514f2487407fdc9e8292fee6b3cba64979a8b6d13c
MD5 31e6dc323ef6dc63791b12c73ef89795
BLAKE2b-256 055bbf7720dbf01f469b8f9afc601ea24930dc9c4efeeefc8f33fe999f699ca9

See more details on using hashes here.

Provenance

The following attestation bundles were made for leech-0.6.7rc1.tar.gz:

Publisher: release.yml on rnabioco/leech

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

File details

Details for the file leech-0.6.7rc1-py3-none-any.whl.

File metadata

  • Download URL: leech-0.6.7rc1-py3-none-any.whl
  • Upload date:
  • Size: 3.4 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for leech-0.6.7rc1-py3-none-any.whl
Algorithm Hash digest
SHA256 22fe91cf3d147d0b8a32377f6b49798ec6c8ee41f4d78927f0195937049bea23
MD5 bd720351083781bb9e59dbb0cd21d183
BLAKE2b-256 683b5be7b0f7b66968c6589ae37926ac9eec43b69d3bc3e533e063fcadea324e

See more details on using hashes here.

Provenance

The following attestation bundles were made for leech-0.6.7rc1-py3-none-any.whl:

Publisher: release.yml on rnabioco/leech

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

Release history Release notifications | RSS feed

0.9.0

2 files

0.8.0

2 files

0.7.0

2 files

0.6.7

2 files

This release

0.6.7rc1 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page