From f8bffed0b31fffb4696370ffd04e7ecb0d412425 Mon Sep 17 00:00:00 2001 From: Max Schubach Date: Thu, 25 Jun 2026 14:02:49 +0200 Subject: [PATCH] fix(cli): :bug: supportig 0 alleles An error was raised because teh correct length could no be defined for the end in the bed file --- src/mpralib/cli.py | 34 +++++++++++----------------------- 1 file changed, 11 insertions(+), 23 deletions(-) diff --git a/src/mpralib/cli.py b/src/mpralib/cli.py index c52c48d..483833b 100644 --- a/src/mpralib/cli.py +++ b/src/mpralib/cli.py @@ -1004,17 +1004,6 @@ def get_reporter_variants( df["postProbEffect"] = df["B"].apply(_safe_sigmoid) df["variant_id"] = df.index - def _extract_allele_or_zero(variant_id, idx): - if pd.isna(variant_id): - return 0 - parts = str(variant_id).split(":") - if len(parts) <= idx: - return 0 - allele = parts[idx] - if pd.isna(allele) or allele == "": - return 0 - return allele - df["refAllele"] = df["variant_id"].apply(lambda x: _extract_allele_or_zero(x, 2)) df["altAllele"] = df["variant_id"].apply(lambda x: _extract_allele_or_zero(x, 3)) df["variantPos"] = df["variantPos"].astype(int) @@ -1281,21 +1270,10 @@ def get_reporter_genomic_variants( df["postProbEffect"] = df["B"].apply(_safe_sigmoid) df["variant_id"] = df.index - def _extract_allele_or_zero(variant_id, idx): - if pd.isna(variant_id): - return 0 - parts = str(variant_id).split(":") - if len(parts) <= idx: - return 0 - allele = parts[idx] - if pd.isna(allele) or allele == "": - return 0 - return allele - df["refAllele"] = df["variant_id"].apply(lambda x: _extract_allele_or_zero(x, 2)) df["altAllele"] = df["variant_id"].apply(lambda x: _extract_allele_or_zero(x, 3)) df["start"] = df["variant_id"].apply(lambda x: x.split(":")[1]).astype(int) - df["end"] = df["start"] + df["refAllele"].apply(lambda x: len(x)).astype(int) + df["end"] = df["start"] + df["refAllele"].apply(lambda x: len(str(x)) if isinstance(x, str) else 1).astype(int) map = chromosome_map() map = map[map["release"] == reference] @@ -1342,6 +1320,16 @@ def _get_chr(map: pd.DataFrame, variant_id: str, logger: logging.Logger) -> str return None +def _extract_allele_or_zero(variant_id: str, idx: int) -> str | int: + parts = variant_id.split(":") + if len(parts) <= idx: + return 0 + allele = parts[idx] + if pd.isna(allele) or allele == "": + return 0 + return allele + + @cli.group(help="Plotting functions.") def plot() -> None: pass