Spaces:
Sleeping
Sleeping
| # Contributing to Streamlit Distribution Demo | |
| Thank you for your interest in contributing to this project! This guide will help you understand how to add new probability distributions to the application. | |
| ## Adding New Distributions | |
| The application is designed to make adding new distributions as simple as possible. You only need to create a single file for each new distribution you want to add. | |
| ### Adding a Continuous Distribution | |
| 1. Create a new Python file in the `config/continuous/` directory. | |
| 2. Name the file after your distribution (e.g., `exponential.py` for an Exponential distribution). | |
| 3. Define a constant with the uppercase name of your distribution (e.g., `EXPONENTIAL`). | |
| 4. The constant should be a dictionary with the following keys: | |
| - `params`: A lambda function that returns a dictionary of parameters using Streamlit widgets. | |
| - `dist`: A lambda function that takes the parameters and returns a PyTorch distribution. | |
| - `support`: A lambda function that returns the support of the distribution (optional). | |
| Example: | |
| ```python | |
| import streamlit as st | |
| import torch | |
| EXPONENTIAL = { | |
| "params": lambda: { | |
| "rate": st.sidebar.slider("Rate (λ)", 0.1, 5.0, 1.0, 0.1), | |
| }, | |
| "dist": lambda p: torch.distributions.Exponential(p["rate"]), | |
| "support": lambda p: (0, None), | |
| } | |
| ``` | |
| ### Adding a Discrete Distribution | |
| 1. Create a new Python file in the `config/discrete/` directory. | |
| 2. Name the file after your distribution (e.g., `geometric.py` for a Geometric distribution). | |
| 3. Define a constant with the uppercase name of your distribution (e.g., `GEOMETRIC`). | |
| 4. The constant should be a dictionary with the following keys: | |
| - `params`: A lambda function that returns a dictionary of parameters using Streamlit widgets. | |
| - `dist`: A lambda function that takes the parameters and returns a PyTorch distribution. | |
| - `support`: A lambda function that returns the support of the distribution (optional). | |
| Example: | |
| ```python | |
| import streamlit as st | |
| import torch | |
| GEOMETRIC = { | |
| "params": lambda: { | |
| "p": st.sidebar.slider("Success Probability (p)", 0.01, 0.99, 0.5, 0.01), | |
| }, | |
| "dist": lambda p: torch.distributions.Geometric(p["p"]), | |
| "support": lambda p: (0, None), | |
| } | |
| ``` | |
| ## How It Works | |
| The application automatically discovers and loads all distributions in the `config/continuous/` and `config/discrete/` directories. When you add a new file, it will be automatically included in the application without any additional changes needed. | |
| The display name of the distribution in the UI is derived from the filename. For example, a file named `negative_binomial.py` will be displayed as "NegativeBinomial" in the UI. | |
| ## Testing Your Changes | |
| After adding a new distribution, run the application to test your changes: | |
| ```bash | |
| streamlit run Home.py | |
| ``` | |
| Navigate to the appropriate page (Continuous or Discrete) and select your new distribution from the dropdown menu to verify it works correctly. |