gvhd-intel-pro / src /streamlit_app.py
Synav's picture
Update src/streamlit_app.py
110bdce verified
import altair as alt
import numpy as np
import pandas as pd
import streamlit as st
from scenario_utils import build_scenarios, rank_scenarios
"""
# Welcome to Streamlit!
Edit `/streamlit_app.py` to customize this app to your heart's desire :heart:.
If you have any questions, checkout our [documentation](https://docs.streamlit.io) and [community
forums](https://discuss.streamlit.io).
In the meantime, below is an example of what you can do with just a few lines of code:
"""
num_points = st.slider("Number of points in spiral", 1, 10000, 1100)
num_turns = st.slider("Number of turns in spiral", 1, 300, 31)
indices = np.linspace(0, 1, num_points)
theta = 2 * np.pi * num_turns * indices
radius = indices
x = radius * np.cos(theta)
y = radius * np.sin(theta)
df = pd.DataFrame({
"x": x,
"y": y,
"idx": indices,
"rand": np.random.randn(num_points),
})
st.altair_chart(alt.Chart(df, height=700, width=700)
.mark_point(filled=True)
.encode(
x=alt.X("x", axis=None),
y=alt.Y("y", axis=None),
color=alt.Color("idx", legend=None, scale=alt.Scale()),
size=alt.Size("rand", legend=None, scale=alt.Scale(range=[1, 150])),
))
st.divider()
st.subheader("Scenario Simulator (Prototype)")
enable_sim = st.checkbox("Enable scenario simulation", value=False)
if enable_sim:
st.info("Select variables and candidate values to simulate different transplant scenarios.")
# --- Choose variables (edit names to match your model inputs) ---
candidate_vars = st.multiselect(
"Variables to vary (prototype list)",
options=[
"DonorType",
"ConditioningIntensity",
"Age",
"HLA_Match"
]
)
variable_options = {}
for v in candidate_vars:
if v in ["Age"]:
vals = st.slider(f"{v} range", min_value=10, max_value=80, value=(30, 60), step=1)
variable_options[v] = list(range(vals[0], vals[1] + 1, 5)) # step of 5 years
else:
vals = st.text_input(f"{v} candidate values (comma-separated)", "")
if vals.strip():
variable_options[v] = [x.strip() for x in vals.split(",") if x.strip()]
max_scen = st.number_input("Max scenarios", min_value=50, max_value=5000, value=500, step=50)
objective = st.selectbox(
"Objective",
options=["min_gvhd", "min_gvhd_max_survival", "max_survival"],
index=1
)
if st.button("Run simulation"):
if not variable_options:
st.error("Select at least one variable and provide candidate values.")
else:
baseline_row = input_df.iloc[0] # <-- adjust to your baseline 1-row dataframe name
scenario_df = build_scenarios(baseline_row, variable_options, max_scenarios=int(max_scen))
# TODO: reuse your existing preprocess + inference calls here
st.write("Generated scenarios:", scenario_df.shape[0])
st.dataframe(scenario_df.head(20))