Skip to main content

prs-ui

PyPI version

Reusable Reflex UI components for Polygenic Risk Score (PRS) computation using the PGS Catalog.

Built on top of just-prs for the computation engine and reflex-mui-datagrid for data grid display.

Installation

pip install prs-ui

Running the Standalone App

uv run start

The launcher reads .env, resolves both the Reflex frontend port (PRS_UI_PORT, default 3000) and backend port (PRS_UI_BACKEND_PORT, default 8000), and passes the resolved pair explicitly to Reflex so another running Reflex app cannot shift only one side. Runtime uploads go under PRS_UI_DATA_DIR/input/ (default: ./data/input/ from the directory where the launcher was invoked), which keeps uvx runs from writing into the installed package.

Quick Start

import polars as pl
import reflex as rx
from reflex_mui_datagrid import LazyFrameGridMixin
from prs_ui import PRSComputeStateMixin, prs_section


class MyAppState(rx.State):
    genome_build: str = "GRCh38"
    cache_dir: str = ""
    status_message: str = ""


class PRSState(PRSComputeStateMixin, LazyFrameGridMixin, MyAppState):
    def load_genotypes(self, parquet_path: str) -> None:
        lf = pl.scan_parquet(parquet_path)
        self.set_prs_genotypes_lf(lf)  # preferred: provide a LazyFrame
        self.prs_genotypes_path = parquet_path


def prs_page() -> rx.Component:
    return prs_section(PRSState)

Components

Component Description
prs_workbench(source_section, prs_state, trait_state, mode_state, trait_selector, ...) Unified single-tab layout: one shared genotype source + Select by PRS / Select by Trait sub-tabs, per-mode controls, compute button, and per-mode results
vcf_source_section(source_state) Reference detachable genotype source: compact VCF upload + build detection + collapsed normalized preview. Swap it for your own source in a host app
prs_shared_build_bar(source_state) Single genome-build selector that fans the build out to all consumer states
prs_section(state) Older single-state section: build selector + score grid + compute button + progress + results
prs_build_selector(state) Genome build dropdown (GRCh37/GRCh38)
prs_scores_selector(state) MUI DataGrid for score selection. Selection (checkboxes + Select/Clear) is read-only and dimmed until genotypes are loaded, with an "upload a VCF" callout
prs_compute_button(state) Compute button with disclaimer callout
prs_progress_section(state) Progress bar and status text during computation
prs_results_table(state) Results table with quality badges, interpretation cards, and CSV download

The genotype source is loosely coupled to the PRS logic: a source pushes a normalized genotypes parquet into each consumer via the additive load_genotypes(path) hook (and optionally set_genome_build(build)), so a host app can replace vcf_source_section / GenomicGridState with its own source (public genome, consumer-array file, pre-normalized parquet) without touching PRSComputeStateMixin. VCF normalization (not upload) is the slow step; it is content-aware cached (a fresh normalized parquet is reused) and shown via an indeterminate progress bar.

State Mixin

PRSComputeStateMixin provides all PRS computation logic as a Reflex state mixin. Mix it into your concrete state class alongside LazyFrameGridMixin to get the full PRS workflow.

The preferred input method is a polars LazyFrame via set_prs_genotypes_lf() -- memory-efficient and avoids re-reading VCF files on each computation. A parquet path (prs_genotypes_path) is supported as a fallback.

Documentation

See the just-prs documentation for the full Python API, CLI reference, and integration guide.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

prs_ui-0.3.5.tar.gz (124.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

prs_ui-0.3.5-py3-none-any.whl (65.7 kB view details)

Uploaded Python 3

File details

Details for the file prs_ui-0.3.5.tar.gz.

File metadata

  • Download URL: prs_ui-0.3.5.tar.gz
  • Upload date:
  • Size: 124.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.17 {"installer":{"name":"uv","version":"0.9.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for prs_ui-0.3.5.tar.gz
Algorithm Hash digest
SHA256 e0a11b1e5097c714a2b49f7b2c8f56243cc9c715095b746a6cf5a1741a729a42
MD5 64d55f2c993b68241287b8b98408b845
BLAKE2b-256 09f598821b4db7853bcdce4ba38cdc8d7bffb303ec6508d038c0840ae107391d

See more details on using hashes here.

File details

Details for the file prs_ui-0.3.5-py3-none-any.whl.

File metadata

  • Download URL: prs_ui-0.3.5-py3-none-any.whl
  • Upload date:
  • Size: 65.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.17 {"installer":{"name":"uv","version":"0.9.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for prs_ui-0.3.5-py3-none-any.whl
Algorithm Hash digest
SHA256 bebc44475ffb504e0408084e68bba9fdec95f1eb2d8de06f55294230d29fa809
MD5 968c0aa7dac1250aaaf7cf3862733769
BLAKE2b-256 35c2f96a54588691b84845fd6bd86d49901b854ff290ce2f13e2e93d94394ed8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page