Skip to main content

mehari

Python bindings for the mehari Rust library.

Features

  • Single variants: Annotate a single variant using a format string (chr:pos:ref:alt) or keyword arguments.
  • Multiple variants (experimental): Evaluate the compound effect of multiple variants.
  • DataFrames: Process batches of variants by passing a polars.DataFrame.
  • LazyFrames: Support for polars.LazyFrame to process large datasets (like Parquet files) without loading everything into memory.

Usage

Initialize SeqvarsAnnotator with your transcript database (see mehari-data-tx) and a reference genome (FASTA, uncompressed, with index).

from mehari import SeqvarsAnnotator

annotator = SeqvarsAnnotator(
    transcript_db_paths=["path/to/txs.bin.zst"],
    reference_path="path/to/reference.fa"
)

To annotate a single variant either use colon separated format string or keyword arguments:

result1 = annotator.annotate("17:41197701:G:C")
result2 = annotator.annotate(chromosome="3", position=193332511, reference="G", alternative="T")

To annotate multiple phased variants together as a single compound event (Experimental):

Note: Mehari does not infer phasing. When using annotate_multiple, mehari assumes all provided variants are on the same chromosome, exist on the same haplotype, and do not overlap.

result1 = annotator.annotate_multiple(["1:37799635:TA:A", "1:37799639:C:CG"])

result2 = annotator.annotate_multiple([
    {"chromosome": "1", "position": 37799635, "reference": "TA", "alternative": "A"},
    {"chromosome": "1", "position": 37799639, "reference": "C", "alternative": "CG"}
])

To annotate a batch of variants, pass a polars.DataFrame or polars.LazyFrame.

import polars as pl

df = pl.DataFrame(
    {
        "chromosome": ["17", "3"],
        "position": [41197701, 193332511],
        "reference": ["G", "G"],
        "alternative": ["C", "T"],
    },
    schema={
        "chromosome": pl.Categorical, "position": pl.Int32,
        "reference": pl.String, "alternative": pl.String
    }
)

annotated_df = annotator.annotate(df)

Schemas and types

Enums

Mehari exports its internal enums to Python so you can use them for filtering or comparisons:

from mehari import ConsequenceEnum, ImpactEnum

DataFrame Schema

When annotating a DataFrame or LazyFrame, mehari appends an "annotation" column. This column is a polars List(Struct) with the following fields:

  • allele: String
  • consequences: List(ConsequenceEnum)
  • putative_impact: ImpactEnum
  • gene_symbol: String
  • gene_id: String
  • hgnc_id: String
  • feature_type: String
  • feature_id: String
  • feature_biotype: List(String)
  • feature_tags: List(String)
  • rank: Struct(ord: Int32, total: Int32)
  • cdna_pos: Struct(ord: Int32, total: Int32)
  • cds_pos: Struct(ord: Int32, total: Int32)
  • protein_pos: Struct(ord: Int32, total: Int32)
  • hgvs_g: String
  • hgvs_n: String
  • hgvs_c: String
  • hgvs_p: String
  • distance: Int32
  • strand: Int32
  • messages: List(String)

Building a transcript database

To build a transcript database, you can use the build_transcript_db function:

from mehari import build_transcript_db
build_transcript_db(
    assembly="grch38",
    annotation=["grch38.gff.gz"],
    transcript_sequences="grch38.fasta",
    transcript_source="ensembl",
    output="grch38.bin.zst"
)

This may take a while (several minutes for GRCh38 + Ensembl). Most of the time goes into compressing the database at the default compression_level=19. To show a progress bar for each step, pass a tqdm-compatible class as progress, for example progress=tqdm.auto.tqdm. To follow the steps in between, enable logging.

Logging

mehari writes its log messages to Python's logging module, under the logger mehari. By default, Python shows only warnings and errors. To also see progress messages, enable the INFO level:

import logging

logging.basicConfig(level=logging.INFO)

Configure logging before you create a SeqvarsAnnotator or call build_transcript_db. mehari caches the log levels and rereads them only when one of these two starts.

Metadata

Release files for mehari 0.48.1

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

Source distribution (sdist)

Source distribution for mehari 0.48.1
File Size Uploaded Provenance
mehari-0.48.1.tar.gz 1.8 MB Without provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for mehari 0.48.1
File Interpreter ABI Platform
mehari-0.48.1-cp313-cp313-manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64 Details
mehari-0.48.1-cp312-cp312-manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64 Details
mehari-0.48.1-cp311-cp311-manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64 Details

Total release size: 31.6 MB

Release files / mehari-0.48.1.tar.gz

Download URL mehari-0.48.1.tar.gz
Size 1.8 MB
Tags Source
SHA-256 checksum
How to use checksums
2a9af4d6eba01b211ee204117dac07218084002aed129072ce7a808dc191b5b2
BLAKE2b-256 checksum
How to use checksums
7cbc101d79ccbd850bb500de1017df9b4755b6f693b4eb074529a6b747ff7a3d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via maturin/1.15.0

Release files / mehari-0.48.1-cp313-cp313-manylinux_2_28_x86_64.whl

Download URL mehari-0.48.1-cp313-cp313-manylinux_2_28_x86_64.whl
Size 9.9 MB
Tags CPython 3.13 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
ad2f63fd2bb5b8a69303c121ca6dd3f5e5c61365b80b803bfb0179bf604ebcf0
BLAKE2b-256 checksum
How to use checksums
10492b85c68fd1b78f1817f31bec5269162bf033ac5a480b637a4f27d616d274
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via maturin/1.15.0

Release files / mehari-0.48.1-cp312-cp312-manylinux_2_28_x86_64.whl

Download URL mehari-0.48.1-cp312-cp312-manylinux_2_28_x86_64.whl
Size 9.9 MB
Tags CPython 3.12 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
db6b4956f71aeb917dc1fb4fc9c9e0386652b693a8cf9a44af038b5acdc5a85e
BLAKE2b-256 checksum
How to use checksums
3e877c9887c57ddde244b0254dccb206e3035d3ab72d9c94ab93d845d341abe6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via maturin/1.15.0

Release files / mehari-0.48.1-cp311-cp311-manylinux_2_28_x86_64.whl

Download URL mehari-0.48.1-cp311-cp311-manylinux_2_28_x86_64.whl
Size 9.9 MB
Tags CPython 3.11 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
0bab510546fc7c37386a5dbb0012a58ac24a147136e2ededf871656415c79fd9
BLAKE2b-256 checksum
How to use checksums
308336ebe0189e3c9edd7b298c1cebda59d4ca35aac1bb6cf797583e238459fe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via maturin/1.15.0

Security for mehari 0.48.1

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A 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.

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