import json import pathlib TASK_CATEGORIES: dict[str, list[str]] = { "histone_marks": [ "h2afz", "h3k27ac", "h3k27me3", "h3k36me3", "h3k4me1", "h3k4me2", "h3k4me3", "h3k9ac", "h3k9me3", "h4k20me1", ], "promoter": ["promoter_all", "promoter_tata", "promoter_no_tata"], "enhancer": ["enhancers", "enhancers_types"], "splice_site": ["splice_sites_all", "splice_sites_donors", "splice_sites_acceptors"], "variant_effect": [ "variant_effect_pathogenic_clinvar", "variant_effect_pathogenic_omim", "variant_effect_causal_eqtl", ], "rna_expression": ["bulk_rna_expression"], } # Inverse map: task_name -> category label TASK_TO_CATEGORY: dict[str, str] = { task: cat for cat, tasks in TASK_CATEGORIES.items() for task in tasks } # Mean sequence lengths in bp per task, populated by tools/compute_seq_lengths.py _SEQ_LEN_PATH = pathlib.Path(__file__).parent.parent / "tools" / "task_seq_lengths.json" TASK_SEQ_LENGTHS: dict[str, int] = ( json.loads(_SEQ_LEN_PATH.read_text()) if _SEQ_LEN_PATH.exists() else {} ) CLASSIFICATION_METRICS: dict[str, str] = { "mcc_test": "MCC", "accuracy_test": "Accuracy", "weighted_f1_test": "Weighted F1", "macro_f1_test": "Macro F1", "auprc_test": "AUPRC", } CATEGORY_DISPLAY_NAMES: dict[str, str] = { "histone_marks": "Histone Marks", "promoter": "Promoter", "enhancer": "Enhancer", "splice_site": "Splice Site", "variant_effect": "Variant Effect", "rna_expression": "RNA Expression", "other": "Other", } # One color per task category — Loka-brand-anchored categorical palette, validated # for CVD-safe adjacency (see dataviz skill / src/plots.py LOKA_PALETTE). Fixed # hue order, never cycled — distinct from _MODEL_PALETTE ordering in plots.py. CATEGORY_COLORS: dict[str, str] = { "histone_marks": "#1877F2", # blue (Loka brand) "promoter": "#EB6834", # orange "enhancer": "#0AA88F", # teal (Loka brand green, re-stepped for chroma/lightness) "splice_site": "#D9A61F", # yellow (Loka brand, darkened for contrast) "variant_effect": "#E87BA4", # magenta "rna_expression": "#008300", # green "other": "#4A3AA7", # violet }