Ludvig
Adds zoom and greyscale toggle to result viewer
9c2558f
raw
history blame
3.65 kB
import json
import pathlib
import pandas as pd
import streamlit as st
from utils import call_subprocess
from components import add_toggle_vertical
def read_data(data):
if data is not None:
df = pd.read_csv(data)
return df
else:
return None
@st.cache_data
def read_data_cached(data):
return read_data(data)
def generate_data(out_path, num_classes, num_observations, seed) -> None:
call_subprocess(
f"Rscript generate_data.R --out_path {out_path} --num_classes {num_classes} --num_observations {num_observations} --seed {seed}",
message="Data generation script",
return_output=True,
encoding="UTF-8",
)
class DownloadHeader:
"""
Class for showing header and download button (for an image file) in the same row.
"""
@staticmethod
def slider_and_image_download(
filepath,
slider_label,
toggle_label,
download_label="Download",
slider_min=0.0,
slider_max=2.0,
slider_value=1.0,
slider_step=0.1,
slider_help=None,
toggle_value=False,
toggle_cols=[2, 5],
download_help="Download plot",
key=None,
) -> int:
col1, col2, col3, col4 = st.columns([2, 6, 3, 3])
with col2:
# Image viewing size slider
image_col_size = st.slider(
slider_label,
min_value=slider_min,
max_value=slider_max,
value=slider_value,
step=slider_step,
help=slider_help,
key=key + "_slider" if key is not None else key,
)
with col3:
toggle_state = add_toggle_vertical(
label=toggle_label,
key=key + "_toggle" if key is not None else key,
default=toggle_value,
cols=toggle_cols,
)
with col4:
st.write("")
with open(filepath, "rb") as img:
st.download_button(
label=download_label,
data=img,
file_name=pathlib.Path(filepath).name,
mime="image/png",
key=key + "_download" if key is not None else key,
help=download_help,
)
return image_col_size, toggle_state
@staticmethod
def _convert_df_to_csv(data, **kwargs):
return data.to_csv(**kwargs).encode("utf-8")
@staticmethod
def header_and_data_download(
header,
data,
file_name,
col_sizes=[9, 2],
key=None,
label="Download",
help="Download data",
):
col1, col2 = st.columns(col_sizes)
with col1:
st.subheader(header)
with col2:
st.write("")
st.download_button(
label=label,
data=DownloadHeader._convert_df_to_csv(data, index=False),
file_name=file_name,
key=key,
help=help,
)
@staticmethod
def centered_json_download(
data: dict,
file_name,
download_col_size=5,
key=None,
label="Download",
help="Download json file",
):
col1, col2, col1 = st.columns([5, download_col_size, 5])
with col2:
data_json = json.dumps(data)
st.download_button(
label=label,
data=data_json,
file_name=file_name,
key=key,
mime="application/json",
help=help,
)