touche
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
runwrappers 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.
- Filter or convert pairs with
touche preprocess. - For real or repeated local-decay runs, build a position-only cache with
touche preprocess build-cache --no-metadata. - Use the
runwrappers for end-to-end analyses:touche local-decay run,touche apa run, andtouche background run. - Use individual subcommands such as
local-decay callorbackground countwhen 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-touchedistribution.
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.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ep_touche-0.1.2.tar.gz | 1.9 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ep_touche-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.9 MB
Release files / ep_touche-0.1.2.tar.gz
| Download URL | ep_touche-0.1.2.tar.gz |
|---|---|
| Size | 1.9 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fd72e6fcf749b8d2547af39ce9f30b385f75728f2d947056823f3da0f73278df
|
|
BLAKE2b-256 checksum How to use checksums |
fa19c85edb21fd5725d8303793977a5e5936fcfc38fedb73bdf9540229d98fcf
|
| 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 logRelease files / ep_touche-0.1.2-py3-none-any.whl
| Download URL | ep_touche-0.1.2-py3-none-any.whl |
|---|---|
| Size | 62.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
145f0889440dad2c9eb52767efbfcd77293678c3bf347972d3b8f52a846fdb17
|
|
BLAKE2b-256 checksum How to use checksums |
073c0c8b03079c6401a4652e2ea9bdb5ef61c7568118f4a4415b5882beb072c3
|
| 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