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

Built distributions (wheels)

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

Release files / mehari-0.48.0.tar.gz

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

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

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

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

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

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

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

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