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.49.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 mehari 0.49.0
File Size Uploaded Provenance
mehari-0.49.0.tar.gz 1.8 MB Without provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for mehari 0.49.0
File Interpreter ABI Platform
mehari-0.49.0-cp313-cp313-manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64 Details
mehari-0.49.0-cp312-cp312-manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64 Details
mehari-0.49.0-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.49.0.tar.gz

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

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

Download URL mehari-0.49.0-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
46108a01906fc9d7fb42bc03a1941ed30e0f6a0efe1b3d31b4f18324681016cc
BLAKE2b-256 checksum
How to use checksums
a311908d6657aeb44e84ae5859e84b4982f845a54c94447ca1934a28db0671f8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via maturin/1.15.0

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

Download URL mehari-0.49.0-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
04a9a843c60fb83e2b1caa0670a73e383fe4719ab329baa2e60cbff5641eabdb
BLAKE2b-256 checksum
How to use checksums
ecd1fc48c1cd35fcd5974058d4e38c6129f30dd1b9db00a2e531a1304f7e7fbe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via maturin/1.15.0

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

Download URL mehari-0.49.0-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
e8cf6e164b4605061361dd90f22924f95b4f25bc6f51ec4e5650db732047d36e
BLAKE2b-256 checksum
How to use checksums
abda279693f4e47b06eadaf129f6d170df44f70d3d4e51319370fd6f7ea506a3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via maturin/1.15.0

Security for mehari 0.49.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.

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