Skip to main content
# Rust_covpyo3

A fast, Rust-backed Python library for computing per-base coverage over genomic regions from BAM files.

---

## Installation

### From PyPI

```bash
pip install Rust_covpyo3
```

### Local build

If no prebuilt wheel is available for your platform, or you want to build from source, you'll need to compile the Rust backend yourself.

**1. Install Python dependencies**

```bash
pip install maturin numpy
```

**2. Install a recent Rust toolchain**

Follow the official instructions at https://www.rust-lang.org/tools/install — usually a single command pasted into your terminal.

**3. Build and install the wheel**

```bash
git clone https://github.com/rLannes/Rust_covpyo3
cd Rust_covpyo3
maturin build --release
python -m pip install -U target/wheels/*.whl
```

The build can take 30 seconds to a few minutes depending on your internet connection.

> 💡 If you build multiple times, clear `target/wheels/` first so `pip` only sees one wheel to install.

> 💡 If you're working in a virtual environment and want hot-reloading during development, use `maturin develop` instead of `maturin build`. See the [maturin documentation](https://github.com/PyO3/maturin) for details.


## Usage

All coverage functions require an **indexed** BAM file (a `.bai` next to the `.bam`).

### `get_coverage_algo2`

Computes per-base coverage over a single genomic region using an interval-based algorithm. Rather than piling up base-by-base, it parses each read's CIGAR string to determine the reference positions it covers, then increments a coverage array for those positions. This makes it efficient for sparse regions and gives you fine-grained control over which reads to include.

```python
from Rust_covpyo3 import get_coverage_algo2

coverage = get_coverage_algo2(
start=10000,
end=20000,
chrom="chr1",
strand="+",
bam_path="sample.bam",
lib="frFirstStrand",
mapq_thr=10,
flag_in=0,
flag_exclude=256,
)
# coverage is a list of ints, one per position from start to end
```

#### Parameters

| Parameter | Type | Description |
|---|---|---|
| `start` | `int` | Start of the region (0-based, inclusive) |
| `end` | `int` | End of the region (0-based, exclusive). Must be strictly greater than `start` |
| `chrom` | `str` | Chromosome / sequence name, as it appears in the BAM header |
| `strand` | `str` | `"+"`, `"-"`, or `"."` (unstranded) |
| `bam_path` | `str` | Path to an indexed BAM file |
| `lib` | `str` | Library type — accepted values: `frFirstStrand` (TruSeq stranded), `frSecondStrand`, `fFirstStrand`, `fSecondStrand`, `ffFirstStrand`, `ffSecondStrand`, `rfFirstStrand`, `rfSecondStrand`, `rFirstStrand`, `rSecondStrand`. See [BAMstrandSpecifier](https://github.com/rLannes/BAMstrandSpecifier) |
| `mapq_thr` | `int` | Minimum mapping quality. Set to `0` to disable filtering |
| `flag_in` | `int` | SAM flags that **must** be set (bitwise). Use `0` for no requirement |
| `flag_exclude` | `int` | SAM flags that **must not** be set (bitwise). e.g. `256` to exclude secondary alignments |

#### Returns

A `list[int]` of length `end - start`, where each element is the read depth at that position.

#### Errors

Raises `RuntimeError` if:
- the BAM file or its index cannot be opened
- `start` is not strictly lower than `end`
- the region cannot be fetched (e.g. `chrom` is not in the BAM header)
- a record or its CIGAR string cannot be read

### `get_coverage_batch`

Same computation and filtering as `get_coverage_algo2`, applied to many regions of the same BAM file at once. Use it instead of calling `get_coverage_algo2` in a loop: the BAM file is opened only once, which is much faster when you have many regions.

```python
from Rust_covpyo3 import get_coverage_batch

regions = [
(10000, 20000, "chr1", "+"),
(50000, 55000, "chr1", "-"),
(3000, 4000, "chr2", "."),
]

coverage = get_coverage_batch(
regions,
bam_path="sample.bam",
lib="frFirstStrand",
mapq_thr=10,
flag_in=0,
flag_exclude=256,
)

coverage[(10000, 20000, "chr1", "+")] # list of 10000 ints
```

#### Parameters

| Parameter | Type | Description |
|---|---|---|
| `batch` | `list[tuple[int, int, str, str]]` | Regions as `(start, end, chrom, strand)` tuples, with the same meaning as in `get_coverage_algo2`. Regions can be given in any order |
| `bam_path`, `lib`, `mapq_thr`, `flag_in`, `flag_exclude` | | Same as `get_coverage_algo2`, applied to every region |

#### Returns

A `dict` mapping each `(start, end, chrom, strand)` tuple to its coverage `list[int]`. A region listed more than once appears once in the output.

#### Errors

Raises `RuntimeError` under the same conditions as `get_coverage_algo2`. If any region fails, the whole batch fails and no result is returned.

### How the coverage is computed

1. All reads overlapping the `[start, end)` region are fetched from the BAM index.
2. Each read is filtered by `flag_in` / `flag_exclude` and mapping quality.
3. For strand-specific libraries, the read's strand is inferred from its flags and the library type. Only reads matching the requested `strand` are kept. For unstranded libraries, all passing reads are counted.
4. The read's CIGAR string is parsed to extract the intervals on the reference that the read actually covers (skipping deletions and spliced regions).
5. Those intervals are intersected with `[start, end)` and the corresponding positions in the output array are incremented.

### Other functions

#### `get_header(bam_path)`

Returns the list of sequence (chromosome) names defined in the BAM header.

```python
from Rust_covpyo3 import get_header

get_header("sample.bam") # ["chr1", "chr2", ...]
```

#### `get_mapped_reads(bam_path)`

Returns a list of `(chrom, n_mapped_reads)` tuples read from the BAM index, plus one extra entry for unmapped reads. Requires an indexed BAM file.

```python
from Rust_covpyo3 import get_mapped_reads

get_mapped_reads("sample.bam") # [("chr1", 123456), ("chr2", 98765), ...]
```

Release files for Rust_covpyo3 0.4.0

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

Source distribution (sdist)

Source distribution for Rust_covpyo3 0.4.0
File Size Uploaded
rust_covpyo3-0.4.0.tar.gz 20.7 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for Rust_covpyo3 0.4.0
File
rust_covpyo3-0.4.0-cp39-abi3-manylinux_2_28_x86_64.whl CPython 3.9 abi3 Linux glibc 2.28+ x86-64 Details
rust_covpyo3-0.4.0-cp39-abi3-manylinux_2_28_aarch64.whl CPython 3.9 abi3 Linux glibc 2.28+ ARM64 Details
rust_covpyo3-0.4.0-cp39-abi3-macosx_11_0_arm64.whl CPython 3.9 abi3 macOS 11.0+ ARM64 Details
rust_covpyo3-0.4.0-cp39-abi3-macosx_10_12_x86_64.whl CPython 3.9 abi3 macOS 10.12+ x86-64 Details

Total release size: 15.8 MB

Release files / rust_covpyo3-0.4.0.tar.gz

Download URL rust_covpyo3-0.4.0.tar.gz
Size 20.7 kB
Tags Source
SHA-256 checksum
How to use checksums
8636b5cc0d926d75483d90053c20e9ab2b78fda709688ca3e8b370c1a581f581
BLAKE2b-256 checksum
How to use checksums
beda9521ba1451d45bf35dd836462f1f016a996b5727b5837c02d4db584ba48c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / rust_covpyo3-0.4.0-cp39-abi3-manylinux_2_28_x86_64.whl

Download URL rust_covpyo3-0.4.0-cp39-abi3-manylinux_2_28_x86_64.whl
Size 4.1 MB
Tags CPython 3.9 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
ca1adb6034d892605f9a554d9a892536c07cfe08f850ea218cd3e5f0fad0ad8b
BLAKE2b-256 checksum
How to use checksums
03dfd1929c294276f67f74f3433189bd2a5cbe9bbc1daf71d4fc98d19f805312
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / rust_covpyo3-0.4.0-cp39-abi3-manylinux_2_28_aarch64.whl

Download URL rust_covpyo3-0.4.0-cp39-abi3-manylinux_2_28_aarch64.whl
Size 4.5 MB
Tags CPython 3.9 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
21f8924e24ff0c15e8c01b708c126b74c48ddbe88d2b11d035da1fa157135a00
BLAKE2b-256 checksum
How to use checksums
61a983862be5099436b90a26198de02cd651e71c632142dc0f748692b34f6f95
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / rust_covpyo3-0.4.0-cp39-abi3-macosx_11_0_arm64.whl

Download URL rust_covpyo3-0.4.0-cp39-abi3-macosx_11_0_arm64.whl
Size 3.7 MB
Tags CPython 3.9 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
f994b06d5eeb28cfef24ab13d52120f5a40232d994a20c664a292ca3f0600706
BLAKE2b-256 checksum
How to use checksums
80e15e38a5ebfdc41a5b091c9b054b3992cdf2f8a8e1e4464fcc3164312cda28
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / rust_covpyo3-0.4.0-cp39-abi3-macosx_10_12_x86_64.whl

Download URL rust_covpyo3-0.4.0-cp39-abi3-macosx_10_12_x86_64.whl
Size 3.5 MB
Tags CPython 3.9 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
41aff8f6695d258e2501f056d943bcde5e42c926872c45ad3366b8d3a23fcab4
BLAKE2b-256 checksum
How to use checksums
f187c311574ba0271fc94627b1874ef4b6473d5db7f715d22e5b0830c54a93bc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.4.0 This release

5 release files

0.3.1

2 release files

0.3.0

7 release files

0.2.8

5 release files

0.2.4

6 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