Skip to main content

touche

PyPI Tests PyPI Downloads

Python API and CLI tools for analyzing enhancer-promoter contacts (touches) from high-resolution chromatin contact data, refactored from the Danko Lab E-P_contacts reference workflows.

touche starts from processed pairs files. Raw FASTQ processing, alignment, deduplication, and cooler generation should be handled by an external workflow such as distiller-nf.

Status

The current implementation includes CLI tools+API for:

  • Micro-C pairs conversion, filtering, QC, and chromosome-sharded NPZ caches
  • local-decay contact calling, pair-type assignment, and plotting
  • Aggregated peak analysis (APA) aggregation and inter-sample APA comparison
  • enhancer/promoter local-background counting and treatment comparison
  • pipeline run wrappers that preserve intermediate outputs and write JSON manifests

Installation

Install with pip from PyPI (package name is ep-touche):

pip install ep-touche
touche --help

uv can also install and run the package:

uv add ep-touche
uv run touche --help

Or if you just want the CLI:

uv tool install ep-touche
touche --help

local-decay also supports a statsmodels-backed LOWESS path (lowess_backend="statsmodels") for exact reference comparisons (at the cost of being much slower than our custom implementation). Install the optional legacy extra only if you need that backend:

pip install ep-touche[legacy]
# or: uv sync --extra legacy

Older CPUs and Rosetta

Polars publishes an lts-cpu wheel for older CPUs and for x86-64 Python on Apple Silicon under Rosetta. Because polars-lts-cpu provides the same import polars module but is a different Python distribution, it does not automatically satisfy ep-touche's normal polars>=1.0 dependency. If the standard Polars wheel does not run on your machine, install ep-touche, then replace Polars in that environment:

pip install ep-touche
pip uninstall polars
pip install "polars-lts-cpu>=1.0"

CLI Overview

touche preprocess --help
touche local-decay --help
touche apa --help
touche background --help

Available command groups:

  • touche preprocess: convert/filter pairs, write QC summaries, and build NPZ caches.
  • touche local-decay: call observed/expected contacts, assign pair types, plot distributions, or run the full local-decay workflow.
  • touche apa: aggregate APA matrices, compare treatment/control APAs, or run a paired APA workflow.
  • touche background: count EP/background contacts, compare treatment ratios, or run the full EP/background workflow.

See the CLI reference for examples, common options, and expected outputs.

Typical workflow

Start from analysis-ready .pairs or .pairs.gz files produced by distiller-nf or an equivalent workflow.

  1. Filter or convert pairs with touche preprocess.
  2. For real or repeated local-decay runs, build a position-only cache with touche preprocess build-cache --no-metadata.
  3. Use the run wrappers for end-to-end analyses: touche local-decay run, touche apa run, and touche background run.
  4. Use individual subcommands such as local-decay call or background count when debugging or replacing one stage.

Many of the computation-heavy steps use numba acceleration and parallelism. Set NUMBA_NUM_THREADS before running to control CPU usage (default is to use all threads on machine):

NUMBA_NUM_THREADS=8 touche background run ...

Python API

For notebooks and custom scripts, import the provisional API surface:

import touche.api as tt

indexes = tt.build_contact_indexes("sample.nodups_30_intra.pairs.gz", source="touche")

The API is organized around reading pairs and anchors once, running in-memory compute functions such as compute_apa, compute_local_decay, and compute_ep_and_background, then displaying or saving returned Matplotlib figures as needed. Long-running CLI and API calls support optional progress bars and lightweight profiling. See the API guide for examples.

Documentation

Detailed usage notes live under docs/:

  • Docs index: human-facing guides and documentation conventions.
  • CLI reference: command groups, common options, examples, outputs, and run-wrapper manifests.
  • Micro-C preprocessing: distiller-nf boundary, pairs format expectations, filtering, QC, and cache building.
  • API: provisional in-memory APIs for notebooks, interactive analyses, and custom scripts.
  • Reproducing reference plots: end-to-end commands for the reference local-decay, APA, and EP/background plots.
  • Testing and publishing: CI, local checks, and PyPI release workflow for the ep-touche distribution.

Implementation plans, experiment logs, and agent-facing notes belong in notes/.

Development

Development is managed with uv.

git clone https://github.com/adamyhe/touche.git
cd touche/
uv sync --dev
uv run touche --help
uv run pytest

Metadata

Release files for ep-touche 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ep-touche 0.1.3
File Size Uploaded
ep_touche-0.1.3.tar.gz 1.9 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for ep-touche 0.1.3
File Interpreter ABI Platform
ep_touche-0.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 1.9 MB

Release files / ep_touche-0.1.3.tar.gz

Download URL ep_touche-0.1.3.tar.gz
Size 1.9 MB
Tags Source
SHA-256 checksum
How to use checksums
d767f340a550f6aff004f1c21b09b8c471e392da31d204a166fc592dfc2da507
BLAKE2b-256 checksum
How to use checksums
df0279cb38324f78d7fc8bec5172fcbe3d0b75821d12773bbb5a810282a94e78
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 31, 2026.

Transparency log

Release files / ep_touche-0.1.3-py3-none-any.whl

Download URL ep_touche-0.1.3-py3-none-any.whl
Size 62.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3137a4437301dbb73f10bd733ec3024d777844bb7ed454d3267c437d2772f615
BLAKE2b-256 checksum
How to use checksums
df6104c506605be3f8afe233095b495a7e11598ef0c8fe65fe9ed363c0a51136
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 31, 2026.

Transparency log

Release history Release notifications | RSS feed

0.1.4

2 release files

This release

0.1.3 This release

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release 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