Spaces:
Sleeping
Sleeping
| 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 | |
| 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. | |
| """ | |
| 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 | |
| def _convert_df_to_csv(data, **kwargs): | |
| return data.to_csv(**kwargs).encode("utf-8") | |
| 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, | |
| ) | |
| 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, | |
| ) | |