# 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)
| File | Size | Uploaded | |
|---|---|---|---|
| rust_covpyo3-0.4.0.tar.gz | 20.7 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| 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}
|