piscem
Python bindings for piscem, a fast and accurate tool for k-mer-based read mapping against a reference transcriptome or genome. piscem lets you load a pre-built index, map individual reads or read pairs, and perform low-level k-mer queries — all from Python, without running full CLI pipelines.
Installation
pip install piscem
To build from source (requires Rust and maturin):
cd crates/py-piscem
maturin develop --release
Index compatibility
Version 0.4 is built on piscem-rs 0.11, which changed the index format.
Indexes built with piscem-rs 0.10 or earlier (or piscem 0.3 and earlier from
PyPI) must be rebuilt; loading one fails with a "must be rebuilt" error.
Decoy .poison files are now written in a newer format (PPOIS02) that
older releases cannot read.
Quick start
import piscem
# Load a pre-built piscem index
index = piscem.ReferenceIndex.load("path/to/index_prefix")
print(f"k={index.k}, {index.num_refs} references, {index.num_contigs} unitigs")
Mapping reads
Create a MappingEngine from the index, then map reads one at a time. Each call returns a MappingResult containing the mapping type and a list of hits.
Single-end mapping
engine = index.mapping_engine()
result = engine.map_read(b"ACGTACGT...")
if result.is_mapped:
for hit in result.hits:
print(f"{hit.ref_name} pos={hit.pos} fw={hit.is_fw} score={hit.score}")
Paired-end mapping
result = engine.map_read_pair(read1_seq, read2_seq)
if result.mapping_type == "mapped_pair":
hit = result.hits[0]
print(f"{hit.ref_name} frag_len={hit.fragment_length}")
The mapping_type field is one of "unmapped", "single_mapped", "mapped_pair", "mapped_first_orphan", or "mapped_second_orphan".
Mapping strategy
Two strategies are available, matching the piscem CLI:
engine = index.mapping_engine(strategy="permissive") # default — faster, skips along unitigs
engine = index.mapping_engine(strategy="strict") # queries every k-mer position
You can also tune the maximum k-mer occurrence threshold and maximum mappings per read:
engine = index.mapping_engine(max_hit_occ=512, max_read_occ=5000)
Virtual colors mode (binned mapping)
For scATAC-seq and other binned genomic mapping workflows, create a virtual-color engine that accumulates hits per genomic bin:
vc_engine = index.vcolor_engine(bin_size=2000, overlap=400, thr=0.7)
result = vc_engine.map_read_pair(r1, r2)
for hit in result.hits:
print(f"bin={hit.bin_id} tid={hit.tid} pos={hit.pos}")
Streaming k-mer queries
For low-level access, a StreamingQuery slides a k-mer window across a sequence and resolves each k-mer against the index, returning unitig and reference coordinates. Consecutive k-mers on the same unitig are resolved by extension rather than a full dictionary lookup.
sq = index.streaming_query()
hits = sq.query_sequence(b"ACGTACGT...")
for i, hit in enumerate(hits):
if hit is not None:
for rp in hit.ref_positions:
print(f"kmer {i}: ref {rp.tid} pos {rp.pos} fw={rp.is_fw}")
print(f"{sq.num_searches} full lookups, {sq.num_extensions} extensions")
Index metadata
index.k # k-mer size
index.m # minimizer length
index.num_refs # number of reference sequences
index.num_contigs # number of unitigs
index.has_ec_table # equivalence class table loaded?
index.has_poison_table # poison k-mer table loaded?
index.ref_name(0) # name of the first reference
index.ref_len(0) # length of the first reference
index.ref_names() # list of all reference names
index.ref_lengths() # list of all reference lengths
Building an index
You can build a new index from cuttlefish output directly from Python:
index = piscem.ReferenceIndex.build(
"path/to/cuttlefish_prefix", # .cf_seg, .cf_seq, .json
"path/to/output_prefix", # output index files
k=31,
m=19,
threads=8,
)
To build an index with a poison k-mer table (for filtering spurious mappings near decoy boundaries), pass one or more decoy FASTA files:
index = piscem.ReferenceIndex.build(
"path/to/cuttlefish_prefix",
"path/to/output_prefix",
k=31,
m=19,
threads=8,
decoys=["path/to/decoys.fa.gz"],
)
print(f"Poison table: {index.has_poison_table}") # True
Thread safety
ReferenceIndexis immutable and can be shared freely across threads.MappingEngineandStreamingQueryhold mutable per-read state — each thread should create its own viaindex.mapping_engine()orindex.streaming_query().
from concurrent.futures import ThreadPoolExecutor
def map_batch(reads):
eng = index.mapping_engine()
return [eng.map_read(r) for r in reads]
with ThreadPoolExecutor(max_workers=4) as pool:
results = list(pool.map(map_batch, read_batches))
API reference
| Class | Description |
|---|---|
ReferenceIndex |
Load/build indices, access metadata, create engines |
MappingEngine |
Map individual reads or read pairs |
MappingResult |
Mapping output: type + list of hits |
MappingHit |
Single hit: reference ID, position, orientation, score, fragment info |
StreamingQuery |
Low-level sliding-window k-mer queries |
KmerHit |
K-mer lookup result: unitig coordinates + reference positions |
RefPos |
Position on a reference (tid, pos, orientation) |
License
BSD 3-Clause
Metadata
Release files for piscem 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| piscem-0.4.0.tar.gz | 577.9 kB | With provenance | Details for piscem-0.4.0.tar.gz |
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| piscem-0.4.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.8 | abi3 | Linux glibc 2.17+ x86-64 | Details for piscem-0.4.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
| piscem-0.4.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | CPython 3.8 | abi3 | Linux glibc 2.17+ ARM64 | Details for piscem-0.4.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
| piscem-0.4.0-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl | CPython 3.8 | abi3 | macOS 10.12+ x86-64, macOS 11.0+ ARM64, macOS 10.12+ universal2 (ARM64, x86-64) | Details for piscem-0.4.0-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl |
Total release size: 32.2 MB
Release files / piscem-0.4.0.tar.gz
| Download URL | piscem-0.4.0.tar.gz |
|---|---|
| Size | 577.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
432f605f24eb5494794f9dd760c40a84c6fd122b59dbcee8531995d4426bf70c
|
|
BLAKE2b-256 checksum How to use checksums |
5f20612de99548386c1b23ff120d1e1855c6ba2f93edba3063c81f53b951791b
|
| 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 Oct 19, 2026.
Transparency logRelease files / piscem-0.4.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | piscem-0.4.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 14.6 MB |
| Tags | CPython 3.8 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
857cf1038c33ba0e280db0798da11b45bd28d721751206cb51a9b9bfc12cda0e
|
|
BLAKE2b-256 checksum How to use checksums |
51afefee5c4363d1a2408e3b0b22b24fcee7d2feafb51defb4d41cc26a0c743a
|
| 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 Oct 19, 2026.
Transparency logRelease files / piscem-0.4.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | piscem-0.4.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 11.7 MB |
| Tags | CPython 3.8 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
7b6dbd5e7c1897ff52ca91996124253175448041b93cc8b3bda85edb652338c1
|
|
BLAKE2b-256 checksum How to use checksums |
ccd8b3b145d660fec4438628231ee6f04fe479bc5d2ab4493888cf44f847a8e1
|
| 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 Oct 19, 2026.
Transparency logRelease files / piscem-0.4.0-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
| Download URL | piscem-0.4.0-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl |
|---|---|
| Size | 5.3 MB |
| Tags | CPython 3.8 abi3 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
0d703eb6de2014b1b2f4bd37570ef2cfd8851596099208119afce47d6b1ce47e
|
|
BLAKE2b-256 checksum How to use checksums |
a0d6d7994685156616174432f44598ccfab45515caf8d6137798b34c59f446d0
|
| 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 Oct 19, 2026.
Transparency logSecurity for piscem 0.4.0
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.
Full provenance
All 4 files in this release have been uploaded with provenance metadata.
Attestation for piscem-0.4.0.tar.gz
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 Oct 19, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.