diff --git a/CHANGELOG.md b/CHANGELOG.md index a6f39923c..8119e9492 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * Added an error console which displays errors in the browser's UI. This is enabled by default when running applications locally, and can be disabled with `shiny run --no-dev-mode`. It is not enabled for applications that are deployed to a server. (#1060) +* `shiny create` was updated to include some additional templates as well as an option to choose from the new [templates website](https://shiny.posit.co/py/templates/). (#1273, #1277, #1274) + ### Bug fixes * On Windows, Shiny Express app files are now read in as UTF-8. (#1203) diff --git a/shiny/_main.py b/shiny/_main.py index 7e9c86c41..17cc1c8dc 100644 --- a/shiny/_main.py +++ b/shiny/_main.py @@ -479,10 +479,12 @@ def try_import_module(module: str) -> Optional[types.ModuleType]: # directory. The process for adding new ones is to add your app folder to # that directory, and then add another entry to this dictionary. app_template_choices = { - "Basic App": "basic-app", - "Dashboard": "dashboard", - "Multi-page app with modules": "multi-page", - "Custom JavaScript Component": "js-component", + "Basic app": "basic-app", + "Sidebar layout": "basic-sidebar", + "Basic dashboard": "dashboard", + "Intermediate dashboard": "dashboard-tips", + "Navigating multiple pages/panels": "basic-navigation", + "Custom JavaScript component ...": "js-component", "Choose from the Shiny Templates website": "external-gallery", } diff --git a/shiny/templates/app-templates/basic-navigation/app-core.py b/shiny/templates/app-templates/basic-navigation/app-core.py new file mode 100644 index 000000000..93092577f --- /dev/null +++ b/shiny/templates/app-templates/basic-navigation/app-core.py @@ -0,0 +1,37 @@ +import seaborn as sns + +# Import data from shared.py +from shared import df + +from shiny import App, render, ui + +# The contents of the first 'page' is a navset with two 'panels'. +page1 = ui.navset_card_underline( + ui.nav_panel("Plot", ui.output_plot("hist")), + ui.nav_panel("Table", ui.output_data_frame("data")), + footer=ui.input_select( + "var", "Select variable", choices=["bill_length_mm", "body_mass_g"] + ), + title="Penguins data", +) + +app_ui = ui.page_navbar( + ui.nav_spacer(), # Push the navbar items to the right + ui.nav_panel("Page 1", page1), + ui.nav_panel("Page 2", "This is the second 'page'."), + title="Shiny navigation components", +) + + +def server(input, output, session): + @render.plot + def hist(): + p = sns.histplot(df, x=input.var(), facecolor="#007bc2", edgecolor="white") + return p.set(xlabel=None) + + @render.data_frame + def data(): + return df[["species", "island", input.var()]] + + +app = App(app_ui, server) diff --git a/shiny/templates/app-templates/basic-navigation/app-express.py b/shiny/templates/app-templates/basic-navigation/app-express.py new file mode 100644 index 000000000..d71f349eb --- /dev/null +++ b/shiny/templates/app-templates/basic-navigation/app-express.py @@ -0,0 +1,35 @@ +import seaborn as sns + +# Import data from shared.py +from shared import df + +from shiny.express import input, render, ui + +ui.page_opts(title="Shiny navigation components") + +ui.nav_spacer() # Push the navbar items to the right + +footer = ui.input_select( + "var", "Select variable", choices=["bill_length_mm", "body_mass_g"] +) + +with ui.nav_panel("Page 1"): + with ui.navset_card_underline(title="Penguins data", footer=footer): + with ui.nav_panel("Plot"): + + @render.plot + def hist(): + p = sns.histplot( + df, x=input.var(), facecolor="#007bc2", edgecolor="white" + ) + return p.set(xlabel=None) + + with ui.nav_panel("Table"): + + @render.data_frame + def data(): + return df[["species", "island", input.var()]] + + +with ui.nav_panel("Page 2"): + "This is the second 'page'." diff --git a/shiny/templates/app-templates/basic-navigation/penguins.csv b/shiny/templates/app-templates/basic-navigation/penguins.csv new file mode 100644 index 000000000..a2fb5ca55 --- /dev/null +++ b/shiny/templates/app-templates/basic-navigation/penguins.csv @@ -0,0 +1,345 @@ +species,island,bill_length_mm,bill_depth_mm,flipper_length_mm,body_mass_g,sex +Adelie,Torgersen,39.1,18.7,181.0,3750.0,Male +Adelie,Torgersen,39.5,17.4,186.0,3800.0,Female +Adelie,Torgersen,40.3,18.0,195.0,3250.0,Female +Adelie,Torgersen,,,,, +Adelie,Torgersen,36.7,19.3,193.0,3450.0,Female +Adelie,Torgersen,39.3,20.6,190.0,3650.0,Male +Adelie,Torgersen,38.9,17.8,181.0,3625.0,Female +Adelie,Torgersen,39.2,19.6,195.0,4675.0,Male +Adelie,Torgersen,34.1,18.1,193.0,3475.0, +Adelie,Torgersen,42.0,20.2,190.0,4250.0, +Adelie,Torgersen,37.8,17.1,186.0,3300.0, +Adelie,Torgersen,37.8,17.3,180.0,3700.0, +Adelie,Torgersen,41.1,17.6,182.0,3200.0,Female +Adelie,Torgersen,38.6,21.2,191.0,3800.0,Male +Adelie,Torgersen,34.6,21.1,198.0,4400.0,Male +Adelie,Torgersen,36.6,17.8,185.0,3700.0,Female +Adelie,Torgersen,38.7,19.0,195.0,3450.0,Female +Adelie,Torgersen,42.5,20.7,197.0,4500.0,Male +Adelie,Torgersen,34.4,18.4,184.0,3325.0,Female +Adelie,Torgersen,46.0,21.5,194.0,4200.0,Male +Adelie,Biscoe,37.8,18.3,174.0,3400.0,Female +Adelie,Biscoe,37.7,18.7,180.0,3600.0,Male +Adelie,Biscoe,35.9,19.2,189.0,3800.0,Female +Adelie,Biscoe,38.2,18.1,185.0,3950.0,Male +Adelie,Biscoe,38.8,17.2,180.0,3800.0,Male +Adelie,Biscoe,35.3,18.9,187.0,3800.0,Female +Adelie,Biscoe,40.6,18.6,183.0,3550.0,Male +Adelie,Biscoe,40.5,17.9,187.0,3200.0,Female +Adelie,Biscoe,37.9,18.6,172.0,3150.0,Female +Adelie,Biscoe,40.5,18.9,180.0,3950.0,Male +Adelie,Dream,39.5,16.7,178.0,3250.0,Female +Adelie,Dream,37.2,18.1,178.0,3900.0,Male +Adelie,Dream,39.5,17.8,188.0,3300.0,Female +Adelie,Dream,40.9,18.9,184.0,3900.0,Male +Adelie,Dream,36.4,17.0,195.0,3325.0,Female +Adelie,Dream,39.2,21.1,196.0,4150.0,Male +Adelie,Dream,38.8,20.0,190.0,3950.0,Male +Adelie,Dream,42.2,18.5,180.0,3550.0,Female +Adelie,Dream,37.6,19.3,181.0,3300.0,Female +Adelie,Dream,39.8,19.1,184.0,4650.0,Male +Adelie,Dream,36.5,18.0,182.0,3150.0,Female +Adelie,Dream,40.8,18.4,195.0,3900.0,Male +Adelie,Dream,36.0,18.5,186.0,3100.0,Female +Adelie,Dream,44.1,19.7,196.0,4400.0,Male +Adelie,Dream,37.0,16.9,185.0,3000.0,Female +Adelie,Dream,39.6,18.8,190.0,4600.0,Male +Adelie,Dream,41.1,19.0,182.0,3425.0,Male +Adelie,Dream,37.5,18.9,179.0,2975.0, +Adelie,Dream,36.0,17.9,190.0,3450.0,Female +Adelie,Dream,42.3,21.2,191.0,4150.0,Male +Adelie,Biscoe,39.6,17.7,186.0,3500.0,Female +Adelie,Biscoe,40.1,18.9,188.0,4300.0,Male +Adelie,Biscoe,35.0,17.9,190.0,3450.0,Female +Adelie,Biscoe,42.0,19.5,200.0,4050.0,Male +Adelie,Biscoe,34.5,18.1,187.0,2900.0,Female +Adelie,Biscoe,41.4,18.6,191.0,3700.0,Male +Adelie,Biscoe,39.0,17.5,186.0,3550.0,Female +Adelie,Biscoe,40.6,18.8,193.0,3800.0,Male +Adelie,Biscoe,36.5,16.6,181.0,2850.0,Female +Adelie,Biscoe,37.6,19.1,194.0,3750.0,Male +Adelie,Biscoe,35.7,16.9,185.0,3150.0,Female +Adelie,Biscoe,41.3,21.1,195.0,4400.0,Male +Adelie,Biscoe,37.6,17.0,185.0,3600.0,Female +Adelie,Biscoe,41.1,18.2,192.0,4050.0,Male +Adelie,Biscoe,36.4,17.1,184.0,2850.0,Female +Adelie,Biscoe,41.6,18.0,192.0,3950.0,Male +Adelie,Biscoe,35.5,16.2,195.0,3350.0,Female +Adelie,Biscoe,41.1,19.1,188.0,4100.0,Male +Adelie,Torgersen,35.9,16.6,190.0,3050.0,Female +Adelie,Torgersen,41.8,19.4,198.0,4450.0,Male +Adelie,Torgersen,33.5,19.0,190.0,3600.0,Female +Adelie,Torgersen,39.7,18.4,190.0,3900.0,Male +Adelie,Torgersen,39.6,17.2,196.0,3550.0,Female +Adelie,Torgersen,45.8,18.9,197.0,4150.0,Male +Adelie,Torgersen,35.5,17.5,190.0,3700.0,Female +Adelie,Torgersen,42.8,18.5,195.0,4250.0,Male +Adelie,Torgersen,40.9,16.8,191.0,3700.0,Female +Adelie,Torgersen,37.2,19.4,184.0,3900.0,Male +Adelie,Torgersen,36.2,16.1,187.0,3550.0,Female +Adelie,Torgersen,42.1,19.1,195.0,4000.0,Male +Adelie,Torgersen,34.6,17.2,189.0,3200.0,Female +Adelie,Torgersen,42.9,17.6,196.0,4700.0,Male +Adelie,Torgersen,36.7,18.8,187.0,3800.0,Female +Adelie,Torgersen,35.1,19.4,193.0,4200.0,Male +Adelie,Dream,37.3,17.8,191.0,3350.0,Female +Adelie,Dream,41.3,20.3,194.0,3550.0,Male +Adelie,Dream,36.3,19.5,190.0,3800.0,Male +Adelie,Dream,36.9,18.6,189.0,3500.0,Female +Adelie,Dream,38.3,19.2,189.0,3950.0,Male +Adelie,Dream,38.9,18.8,190.0,3600.0,Female +Adelie,Dream,35.7,18.0,202.0,3550.0,Female +Adelie,Dream,41.1,18.1,205.0,4300.0,Male +Adelie,Dream,34.0,17.1,185.0,3400.0,Female +Adelie,Dream,39.6,18.1,186.0,4450.0,Male +Adelie,Dream,36.2,17.3,187.0,3300.0,Female +Adelie,Dream,40.8,18.9,208.0,4300.0,Male +Adelie,Dream,38.1,18.6,190.0,3700.0,Female +Adelie,Dream,40.3,18.5,196.0,4350.0,Male +Adelie,Dream,33.1,16.1,178.0,2900.0,Female +Adelie,Dream,43.2,18.5,192.0,4100.0,Male +Adelie,Biscoe,35.0,17.9,192.0,3725.0,Female +Adelie,Biscoe,41.0,20.0,203.0,4725.0,Male +Adelie,Biscoe,37.7,16.0,183.0,3075.0,Female +Adelie,Biscoe,37.8,20.0,190.0,4250.0,Male +Adelie,Biscoe,37.9,18.6,193.0,2925.0,Female +Adelie,Biscoe,39.7,18.9,184.0,3550.0,Male +Adelie,Biscoe,38.6,17.2,199.0,3750.0,Female +Adelie,Biscoe,38.2,20.0,190.0,3900.0,Male +Adelie,Biscoe,38.1,17.0,181.0,3175.0,Female +Adelie,Biscoe,43.2,19.0,197.0,4775.0,Male +Adelie,Biscoe,38.1,16.5,198.0,3825.0,Female +Adelie,Biscoe,45.6,20.3,191.0,4600.0,Male +Adelie,Biscoe,39.7,17.7,193.0,3200.0,Female +Adelie,Biscoe,42.2,19.5,197.0,4275.0,Male +Adelie,Biscoe,39.6,20.7,191.0,3900.0,Female +Adelie,Biscoe,42.7,18.3,196.0,4075.0,Male +Adelie,Torgersen,38.6,17.0,188.0,2900.0,Female +Adelie,Torgersen,37.3,20.5,199.0,3775.0,Male +Adelie,Torgersen,35.7,17.0,189.0,3350.0,Female +Adelie,Torgersen,41.1,18.6,189.0,3325.0,Male +Adelie,Torgersen,36.2,17.2,187.0,3150.0,Female +Adelie,Torgersen,37.7,19.8,198.0,3500.0,Male +Adelie,Torgersen,40.2,17.0,176.0,3450.0,Female +Adelie,Torgersen,41.4,18.5,202.0,3875.0,Male +Adelie,Torgersen,35.2,15.9,186.0,3050.0,Female +Adelie,Torgersen,40.6,19.0,199.0,4000.0,Male +Adelie,Torgersen,38.8,17.6,191.0,3275.0,Female +Adelie,Torgersen,41.5,18.3,195.0,4300.0,Male +Adelie,Torgersen,39.0,17.1,191.0,3050.0,Female +Adelie,Torgersen,44.1,18.0,210.0,4000.0,Male +Adelie,Torgersen,38.5,17.9,190.0,3325.0,Female +Adelie,Torgersen,43.1,19.2,197.0,3500.0,Male +Adelie,Dream,36.8,18.5,193.0,3500.0,Female +Adelie,Dream,37.5,18.5,199.0,4475.0,Male +Adelie,Dream,38.1,17.6,187.0,3425.0,Female +Adelie,Dream,41.1,17.5,190.0,3900.0,Male +Adelie,Dream,35.6,17.5,191.0,3175.0,Female +Adelie,Dream,40.2,20.1,200.0,3975.0,Male +Adelie,Dream,37.0,16.5,185.0,3400.0,Female +Adelie,Dream,39.7,17.9,193.0,4250.0,Male +Adelie,Dream,40.2,17.1,193.0,3400.0,Female +Adelie,Dream,40.6,17.2,187.0,3475.0,Male +Adelie,Dream,32.1,15.5,188.0,3050.0,Female +Adelie,Dream,40.7,17.0,190.0,3725.0,Male +Adelie,Dream,37.3,16.8,192.0,3000.0,Female +Adelie,Dream,39.0,18.7,185.0,3650.0,Male +Adelie,Dream,39.2,18.6,190.0,4250.0,Male +Adelie,Dream,36.6,18.4,184.0,3475.0,Female +Adelie,Dream,36.0,17.8,195.0,3450.0,Female +Adelie,Dream,37.8,18.1,193.0,3750.0,Male +Adelie,Dream,36.0,17.1,187.0,3700.0,Female +Adelie,Dream,41.5,18.5,201.0,4000.0,Male +Chinstrap,Dream,46.5,17.9,192.0,3500.0,Female +Chinstrap,Dream,50.0,19.5,196.0,3900.0,Male +Chinstrap,Dream,51.3,19.2,193.0,3650.0,Male +Chinstrap,Dream,45.4,18.7,188.0,3525.0,Female +Chinstrap,Dream,52.7,19.8,197.0,3725.0,Male +Chinstrap,Dream,45.2,17.8,198.0,3950.0,Female +Chinstrap,Dream,46.1,18.2,178.0,3250.0,Female +Chinstrap,Dream,51.3,18.2,197.0,3750.0,Male +Chinstrap,Dream,46.0,18.9,195.0,4150.0,Female +Chinstrap,Dream,51.3,19.9,198.0,3700.0,Male +Chinstrap,Dream,46.6,17.8,193.0,3800.0,Female +Chinstrap,Dream,51.7,20.3,194.0,3775.0,Male +Chinstrap,Dream,47.0,17.3,185.0,3700.0,Female +Chinstrap,Dream,52.0,18.1,201.0,4050.0,Male +Chinstrap,Dream,45.9,17.1,190.0,3575.0,Female +Chinstrap,Dream,50.5,19.6,201.0,4050.0,Male +Chinstrap,Dream,50.3,20.0,197.0,3300.0,Male +Chinstrap,Dream,58.0,17.8,181.0,3700.0,Female +Chinstrap,Dream,46.4,18.6,190.0,3450.0,Female +Chinstrap,Dream,49.2,18.2,195.0,4400.0,Male +Chinstrap,Dream,42.4,17.3,181.0,3600.0,Female +Chinstrap,Dream,48.5,17.5,191.0,3400.0,Male +Chinstrap,Dream,43.2,16.6,187.0,2900.0,Female +Chinstrap,Dream,50.6,19.4,193.0,3800.0,Male +Chinstrap,Dream,46.7,17.9,195.0,3300.0,Female +Chinstrap,Dream,52.0,19.0,197.0,4150.0,Male +Chinstrap,Dream,50.5,18.4,200.0,3400.0,Female +Chinstrap,Dream,49.5,19.0,200.0,3800.0,Male +Chinstrap,Dream,46.4,17.8,191.0,3700.0,Female +Chinstrap,Dream,52.8,20.0,205.0,4550.0,Male +Chinstrap,Dream,40.9,16.6,187.0,3200.0,Female +Chinstrap,Dream,54.2,20.8,201.0,4300.0,Male +Chinstrap,Dream,42.5,16.7,187.0,3350.0,Female +Chinstrap,Dream,51.0,18.8,203.0,4100.0,Male +Chinstrap,Dream,49.7,18.6,195.0,3600.0,Male +Chinstrap,Dream,47.5,16.8,199.0,3900.0,Female +Chinstrap,Dream,47.6,18.3,195.0,3850.0,Female +Chinstrap,Dream,52.0,20.7,210.0,4800.0,Male +Chinstrap,Dream,46.9,16.6,192.0,2700.0,Female +Chinstrap,Dream,53.5,19.9,205.0,4500.0,Male +Chinstrap,Dream,49.0,19.5,210.0,3950.0,Male +Chinstrap,Dream,46.2,17.5,187.0,3650.0,Female +Chinstrap,Dream,50.9,19.1,196.0,3550.0,Male +Chinstrap,Dream,45.5,17.0,196.0,3500.0,Female +Chinstrap,Dream,50.9,17.9,196.0,3675.0,Female +Chinstrap,Dream,50.8,18.5,201.0,4450.0,Male +Chinstrap,Dream,50.1,17.9,190.0,3400.0,Female +Chinstrap,Dream,49.0,19.6,212.0,4300.0,Male +Chinstrap,Dream,51.5,18.7,187.0,3250.0,Male +Chinstrap,Dream,49.8,17.3,198.0,3675.0,Female +Chinstrap,Dream,48.1,16.4,199.0,3325.0,Female +Chinstrap,Dream,51.4,19.0,201.0,3950.0,Male +Chinstrap,Dream,45.7,17.3,193.0,3600.0,Female +Chinstrap,Dream,50.7,19.7,203.0,4050.0,Male +Chinstrap,Dream,42.5,17.3,187.0,3350.0,Female +Chinstrap,Dream,52.2,18.8,197.0,3450.0,Male +Chinstrap,Dream,45.2,16.6,191.0,3250.0,Female +Chinstrap,Dream,49.3,19.9,203.0,4050.0,Male +Chinstrap,Dream,50.2,18.8,202.0,3800.0,Male +Chinstrap,Dream,45.6,19.4,194.0,3525.0,Female +Chinstrap,Dream,51.9,19.5,206.0,3950.0,Male +Chinstrap,Dream,46.8,16.5,189.0,3650.0,Female +Chinstrap,Dream,45.7,17.0,195.0,3650.0,Female +Chinstrap,Dream,55.8,19.8,207.0,4000.0,Male +Chinstrap,Dream,43.5,18.1,202.0,3400.0,Female +Chinstrap,Dream,49.6,18.2,193.0,3775.0,Male +Chinstrap,Dream,50.8,19.0,210.0,4100.0,Male +Chinstrap,Dream,50.2,18.7,198.0,3775.0,Female +Gentoo,Biscoe,46.1,13.2,211.0,4500.0,Female +Gentoo,Biscoe,50.0,16.3,230.0,5700.0,Male +Gentoo,Biscoe,48.7,14.1,210.0,4450.0,Female +Gentoo,Biscoe,50.0,15.2,218.0,5700.0,Male +Gentoo,Biscoe,47.6,14.5,215.0,5400.0,Male +Gentoo,Biscoe,46.5,13.5,210.0,4550.0,Female +Gentoo,Biscoe,45.4,14.6,211.0,4800.0,Female +Gentoo,Biscoe,46.7,15.3,219.0,5200.0,Male +Gentoo,Biscoe,43.3,13.4,209.0,4400.0,Female +Gentoo,Biscoe,46.8,15.4,215.0,5150.0,Male +Gentoo,Biscoe,40.9,13.7,214.0,4650.0,Female +Gentoo,Biscoe,49.0,16.1,216.0,5550.0,Male +Gentoo,Biscoe,45.5,13.7,214.0,4650.0,Female +Gentoo,Biscoe,48.4,14.6,213.0,5850.0,Male +Gentoo,Biscoe,45.8,14.6,210.0,4200.0,Female +Gentoo,Biscoe,49.3,15.7,217.0,5850.0,Male +Gentoo,Biscoe,42.0,13.5,210.0,4150.0,Female +Gentoo,Biscoe,49.2,15.2,221.0,6300.0,Male +Gentoo,Biscoe,46.2,14.5,209.0,4800.0,Female +Gentoo,Biscoe,48.7,15.1,222.0,5350.0,Male +Gentoo,Biscoe,50.2,14.3,218.0,5700.0,Male +Gentoo,Biscoe,45.1,14.5,215.0,5000.0,Female +Gentoo,Biscoe,46.5,14.5,213.0,4400.0,Female +Gentoo,Biscoe,46.3,15.8,215.0,5050.0,Male +Gentoo,Biscoe,42.9,13.1,215.0,5000.0,Female +Gentoo,Biscoe,46.1,15.1,215.0,5100.0,Male +Gentoo,Biscoe,44.5,14.3,216.0,4100.0, +Gentoo,Biscoe,47.8,15.0,215.0,5650.0,Male +Gentoo,Biscoe,48.2,14.3,210.0,4600.0,Female +Gentoo,Biscoe,50.0,15.3,220.0,5550.0,Male +Gentoo,Biscoe,47.3,15.3,222.0,5250.0,Male +Gentoo,Biscoe,42.8,14.2,209.0,4700.0,Female +Gentoo,Biscoe,45.1,14.5,207.0,5050.0,Female +Gentoo,Biscoe,59.6,17.0,230.0,6050.0,Male +Gentoo,Biscoe,49.1,14.8,220.0,5150.0,Female +Gentoo,Biscoe,48.4,16.3,220.0,5400.0,Male +Gentoo,Biscoe,42.6,13.7,213.0,4950.0,Female +Gentoo,Biscoe,44.4,17.3,219.0,5250.0,Male +Gentoo,Biscoe,44.0,13.6,208.0,4350.0,Female +Gentoo,Biscoe,48.7,15.7,208.0,5350.0,Male +Gentoo,Biscoe,42.7,13.7,208.0,3950.0,Female +Gentoo,Biscoe,49.6,16.0,225.0,5700.0,Male +Gentoo,Biscoe,45.3,13.7,210.0,4300.0,Female +Gentoo,Biscoe,49.6,15.0,216.0,4750.0,Male +Gentoo,Biscoe,50.5,15.9,222.0,5550.0,Male +Gentoo,Biscoe,43.6,13.9,217.0,4900.0,Female +Gentoo,Biscoe,45.5,13.9,210.0,4200.0,Female +Gentoo,Biscoe,50.5,15.9,225.0,5400.0,Male +Gentoo,Biscoe,44.9,13.3,213.0,5100.0,Female +Gentoo,Biscoe,45.2,15.8,215.0,5300.0,Male +Gentoo,Biscoe,46.6,14.2,210.0,4850.0,Female +Gentoo,Biscoe,48.5,14.1,220.0,5300.0,Male +Gentoo,Biscoe,45.1,14.4,210.0,4400.0,Female +Gentoo,Biscoe,50.1,15.0,225.0,5000.0,Male +Gentoo,Biscoe,46.5,14.4,217.0,4900.0,Female +Gentoo,Biscoe,45.0,15.4,220.0,5050.0,Male +Gentoo,Biscoe,43.8,13.9,208.0,4300.0,Female +Gentoo,Biscoe,45.5,15.0,220.0,5000.0,Male +Gentoo,Biscoe,43.2,14.5,208.0,4450.0,Female +Gentoo,Biscoe,50.4,15.3,224.0,5550.0,Male +Gentoo,Biscoe,45.3,13.8,208.0,4200.0,Female +Gentoo,Biscoe,46.2,14.9,221.0,5300.0,Male +Gentoo,Biscoe,45.7,13.9,214.0,4400.0,Female +Gentoo,Biscoe,54.3,15.7,231.0,5650.0,Male +Gentoo,Biscoe,45.8,14.2,219.0,4700.0,Female +Gentoo,Biscoe,49.8,16.8,230.0,5700.0,Male +Gentoo,Biscoe,46.2,14.4,214.0,4650.0, +Gentoo,Biscoe,49.5,16.2,229.0,5800.0,Male +Gentoo,Biscoe,43.5,14.2,220.0,4700.0,Female +Gentoo,Biscoe,50.7,15.0,223.0,5550.0,Male +Gentoo,Biscoe,47.7,15.0,216.0,4750.0,Female +Gentoo,Biscoe,46.4,15.6,221.0,5000.0,Male +Gentoo,Biscoe,48.2,15.6,221.0,5100.0,Male +Gentoo,Biscoe,46.5,14.8,217.0,5200.0,Female +Gentoo,Biscoe,46.4,15.0,216.0,4700.0,Female +Gentoo,Biscoe,48.6,16.0,230.0,5800.0,Male +Gentoo,Biscoe,47.5,14.2,209.0,4600.0,Female +Gentoo,Biscoe,51.1,16.3,220.0,6000.0,Male +Gentoo,Biscoe,45.2,13.8,215.0,4750.0,Female +Gentoo,Biscoe,45.2,16.4,223.0,5950.0,Male +Gentoo,Biscoe,49.1,14.5,212.0,4625.0,Female +Gentoo,Biscoe,52.5,15.6,221.0,5450.0,Male +Gentoo,Biscoe,47.4,14.6,212.0,4725.0,Female +Gentoo,Biscoe,50.0,15.9,224.0,5350.0,Male +Gentoo,Biscoe,44.9,13.8,212.0,4750.0,Female +Gentoo,Biscoe,50.8,17.3,228.0,5600.0,Male +Gentoo,Biscoe,43.4,14.4,218.0,4600.0,Female +Gentoo,Biscoe,51.3,14.2,218.0,5300.0,Male +Gentoo,Biscoe,47.5,14.0,212.0,4875.0,Female +Gentoo,Biscoe,52.1,17.0,230.0,5550.0,Male +Gentoo,Biscoe,47.5,15.0,218.0,4950.0,Female +Gentoo,Biscoe,52.2,17.1,228.0,5400.0,Male +Gentoo,Biscoe,45.5,14.5,212.0,4750.0,Female +Gentoo,Biscoe,49.5,16.1,224.0,5650.0,Male +Gentoo,Biscoe,44.5,14.7,214.0,4850.0,Female +Gentoo,Biscoe,50.8,15.7,226.0,5200.0,Male +Gentoo,Biscoe,49.4,15.8,216.0,4925.0,Male +Gentoo,Biscoe,46.9,14.6,222.0,4875.0,Female +Gentoo,Biscoe,48.4,14.4,203.0,4625.0,Female +Gentoo,Biscoe,51.1,16.5,225.0,5250.0,Male +Gentoo,Biscoe,48.5,15.0,219.0,4850.0,Female +Gentoo,Biscoe,55.9,17.0,228.0,5600.0,Male +Gentoo,Biscoe,47.2,15.5,215.0,4975.0,Female +Gentoo,Biscoe,49.1,15.0,228.0,5500.0,Male +Gentoo,Biscoe,47.3,13.8,216.0,4725.0, +Gentoo,Biscoe,46.8,16.1,215.0,5500.0,Male +Gentoo,Biscoe,41.7,14.7,210.0,4700.0,Female +Gentoo,Biscoe,53.4,15.8,219.0,5500.0,Male +Gentoo,Biscoe,43.3,14.0,208.0,4575.0,Female +Gentoo,Biscoe,48.1,15.1,209.0,5500.0,Male +Gentoo,Biscoe,50.5,15.2,216.0,5000.0,Female +Gentoo,Biscoe,49.8,15.9,229.0,5950.0,Male +Gentoo,Biscoe,43.5,15.2,213.0,4650.0,Female +Gentoo,Biscoe,51.5,16.3,230.0,5500.0,Male +Gentoo,Biscoe,46.2,14.1,217.0,4375.0,Female +Gentoo,Biscoe,55.1,16.0,230.0,5850.0,Male +Gentoo,Biscoe,44.5,15.7,217.0,4875.0, +Gentoo,Biscoe,48.8,16.2,222.0,6000.0,Male +Gentoo,Biscoe,47.2,13.7,214.0,4925.0,Female +Gentoo,Biscoe,,,,, +Gentoo,Biscoe,46.8,14.3,215.0,4850.0,Female +Gentoo,Biscoe,50.4,15.7,222.0,5750.0,Male +Gentoo,Biscoe,45.2,14.8,212.0,5200.0,Female +Gentoo,Biscoe,49.9,16.1,213.0,5400.0,Male diff --git a/shiny/templates/app-templates/basic-navigation/requirements.txt b/shiny/templates/app-templates/basic-navigation/requirements.txt new file mode 100644 index 000000000..80c021bcd --- /dev/null +++ b/shiny/templates/app-templates/basic-navigation/requirements.txt @@ -0,0 +1,3 @@ +shiny +seaborn +pandas \ No newline at end of file diff --git a/shiny/templates/app-templates/basic-navigation/shared.py b/shiny/templates/app-templates/basic-navigation/shared.py new file mode 100644 index 000000000..c27d395ed --- /dev/null +++ b/shiny/templates/app-templates/basic-navigation/shared.py @@ -0,0 +1,6 @@ +from pathlib import Path + +import pandas as pd + +app_dir = Path(__file__).parent +df = pd.read_csv(app_dir / "penguins.csv") diff --git a/shiny/templates/app-templates/basic-sidebar/app-core.py b/shiny/templates/app-templates/basic-sidebar/app-core.py new file mode 100644 index 000000000..5c00a8f65 --- /dev/null +++ b/shiny/templates/app-templates/basic-sidebar/app-core.py @@ -0,0 +1,30 @@ +import seaborn as sns + +# Import data from shared.py +from shared import df + +from shiny import App, render, ui + +app_ui = ui.page_sidebar( + ui.sidebar( + ui.input_select( + "var", "Select variable", choices=["bill_length_mm", "body_mass_g"] + ), + ui.input_switch("species", "Group by species", value=True), + ui.input_switch("show_rug", "Show Rug", value=True), + ), + ui.output_plot("hist"), + title="Hello sidebar!", +) + + +def server(input, output, session): + @render.plot + def hist(): + hue = "species" if input.species() else None + sns.kdeplot(df, x=input.var(), hue=hue) + if input.show_rug(): + sns.rugplot(df, x=input.var(), hue=hue, color="black", alpha=0.25) + + +app = App(app_ui, server) diff --git a/shiny/templates/app-templates/basic-sidebar/app-express.py b/shiny/templates/app-templates/basic-sidebar/app-express.py new file mode 100644 index 000000000..94b4ead45 --- /dev/null +++ b/shiny/templates/app-templates/basic-sidebar/app-express.py @@ -0,0 +1,21 @@ +import seaborn as sns + +# Import data from shared.py +from shared import df + +from shiny.express import input, render, ui + +ui.page_opts(title="Hello sidebar!") + +with ui.sidebar(): + ui.input_select("var", "Select variable", choices=["bill_length_mm", "body_mass_g"]) + ui.input_switch("species", "Group by species", value=True) + ui.input_switch("show_rug", "Show Rug", value=True) + + +@render.plot +def hist(): + hue = "species" if input.species() else None + sns.kdeplot(df, x=input.var(), hue=hue) + if input.show_rug(): + sns.rugplot(df, x=input.var(), hue=hue, color="black", alpha=0.25) diff --git a/shiny/templates/app-templates/basic-sidebar/penguins.csv b/shiny/templates/app-templates/basic-sidebar/penguins.csv new file mode 100644 index 000000000..a2fb5ca55 --- /dev/null +++ b/shiny/templates/app-templates/basic-sidebar/penguins.csv @@ -0,0 +1,345 @@ +species,island,bill_length_mm,bill_depth_mm,flipper_length_mm,body_mass_g,sex +Adelie,Torgersen,39.1,18.7,181.0,3750.0,Male +Adelie,Torgersen,39.5,17.4,186.0,3800.0,Female +Adelie,Torgersen,40.3,18.0,195.0,3250.0,Female +Adelie,Torgersen,,,,, +Adelie,Torgersen,36.7,19.3,193.0,3450.0,Female +Adelie,Torgersen,39.3,20.6,190.0,3650.0,Male +Adelie,Torgersen,38.9,17.8,181.0,3625.0,Female +Adelie,Torgersen,39.2,19.6,195.0,4675.0,Male +Adelie,Torgersen,34.1,18.1,193.0,3475.0, +Adelie,Torgersen,42.0,20.2,190.0,4250.0, +Adelie,Torgersen,37.8,17.1,186.0,3300.0, +Adelie,Torgersen,37.8,17.3,180.0,3700.0, +Adelie,Torgersen,41.1,17.6,182.0,3200.0,Female +Adelie,Torgersen,38.6,21.2,191.0,3800.0,Male +Adelie,Torgersen,34.6,21.1,198.0,4400.0,Male +Adelie,Torgersen,36.6,17.8,185.0,3700.0,Female +Adelie,Torgersen,38.7,19.0,195.0,3450.0,Female +Adelie,Torgersen,42.5,20.7,197.0,4500.0,Male +Adelie,Torgersen,34.4,18.4,184.0,3325.0,Female +Adelie,Torgersen,46.0,21.5,194.0,4200.0,Male +Adelie,Biscoe,37.8,18.3,174.0,3400.0,Female +Adelie,Biscoe,37.7,18.7,180.0,3600.0,Male +Adelie,Biscoe,35.9,19.2,189.0,3800.0,Female +Adelie,Biscoe,38.2,18.1,185.0,3950.0,Male +Adelie,Biscoe,38.8,17.2,180.0,3800.0,Male +Adelie,Biscoe,35.3,18.9,187.0,3800.0,Female +Adelie,Biscoe,40.6,18.6,183.0,3550.0,Male +Adelie,Biscoe,40.5,17.9,187.0,3200.0,Female +Adelie,Biscoe,37.9,18.6,172.0,3150.0,Female +Adelie,Biscoe,40.5,18.9,180.0,3950.0,Male +Adelie,Dream,39.5,16.7,178.0,3250.0,Female +Adelie,Dream,37.2,18.1,178.0,3900.0,Male +Adelie,Dream,39.5,17.8,188.0,3300.0,Female +Adelie,Dream,40.9,18.9,184.0,3900.0,Male +Adelie,Dream,36.4,17.0,195.0,3325.0,Female +Adelie,Dream,39.2,21.1,196.0,4150.0,Male +Adelie,Dream,38.8,20.0,190.0,3950.0,Male +Adelie,Dream,42.2,18.5,180.0,3550.0,Female +Adelie,Dream,37.6,19.3,181.0,3300.0,Female +Adelie,Dream,39.8,19.1,184.0,4650.0,Male +Adelie,Dream,36.5,18.0,182.0,3150.0,Female +Adelie,Dream,40.8,18.4,195.0,3900.0,Male +Adelie,Dream,36.0,18.5,186.0,3100.0,Female +Adelie,Dream,44.1,19.7,196.0,4400.0,Male +Adelie,Dream,37.0,16.9,185.0,3000.0,Female +Adelie,Dream,39.6,18.8,190.0,4600.0,Male +Adelie,Dream,41.1,19.0,182.0,3425.0,Male +Adelie,Dream,37.5,18.9,179.0,2975.0, +Adelie,Dream,36.0,17.9,190.0,3450.0,Female +Adelie,Dream,42.3,21.2,191.0,4150.0,Male +Adelie,Biscoe,39.6,17.7,186.0,3500.0,Female +Adelie,Biscoe,40.1,18.9,188.0,4300.0,Male +Adelie,Biscoe,35.0,17.9,190.0,3450.0,Female +Adelie,Biscoe,42.0,19.5,200.0,4050.0,Male +Adelie,Biscoe,34.5,18.1,187.0,2900.0,Female +Adelie,Biscoe,41.4,18.6,191.0,3700.0,Male +Adelie,Biscoe,39.0,17.5,186.0,3550.0,Female +Adelie,Biscoe,40.6,18.8,193.0,3800.0,Male +Adelie,Biscoe,36.5,16.6,181.0,2850.0,Female +Adelie,Biscoe,37.6,19.1,194.0,3750.0,Male +Adelie,Biscoe,35.7,16.9,185.0,3150.0,Female +Adelie,Biscoe,41.3,21.1,195.0,4400.0,Male +Adelie,Biscoe,37.6,17.0,185.0,3600.0,Female +Adelie,Biscoe,41.1,18.2,192.0,4050.0,Male +Adelie,Biscoe,36.4,17.1,184.0,2850.0,Female +Adelie,Biscoe,41.6,18.0,192.0,3950.0,Male +Adelie,Biscoe,35.5,16.2,195.0,3350.0,Female +Adelie,Biscoe,41.1,19.1,188.0,4100.0,Male +Adelie,Torgersen,35.9,16.6,190.0,3050.0,Female +Adelie,Torgersen,41.8,19.4,198.0,4450.0,Male +Adelie,Torgersen,33.5,19.0,190.0,3600.0,Female +Adelie,Torgersen,39.7,18.4,190.0,3900.0,Male +Adelie,Torgersen,39.6,17.2,196.0,3550.0,Female +Adelie,Torgersen,45.8,18.9,197.0,4150.0,Male +Adelie,Torgersen,35.5,17.5,190.0,3700.0,Female +Adelie,Torgersen,42.8,18.5,195.0,4250.0,Male +Adelie,Torgersen,40.9,16.8,191.0,3700.0,Female +Adelie,Torgersen,37.2,19.4,184.0,3900.0,Male +Adelie,Torgersen,36.2,16.1,187.0,3550.0,Female +Adelie,Torgersen,42.1,19.1,195.0,4000.0,Male +Adelie,Torgersen,34.6,17.2,189.0,3200.0,Female +Adelie,Torgersen,42.9,17.6,196.0,4700.0,Male +Adelie,Torgersen,36.7,18.8,187.0,3800.0,Female +Adelie,Torgersen,35.1,19.4,193.0,4200.0,Male +Adelie,Dream,37.3,17.8,191.0,3350.0,Female +Adelie,Dream,41.3,20.3,194.0,3550.0,Male +Adelie,Dream,36.3,19.5,190.0,3800.0,Male +Adelie,Dream,36.9,18.6,189.0,3500.0,Female +Adelie,Dream,38.3,19.2,189.0,3950.0,Male +Adelie,Dream,38.9,18.8,190.0,3600.0,Female +Adelie,Dream,35.7,18.0,202.0,3550.0,Female +Adelie,Dream,41.1,18.1,205.0,4300.0,Male +Adelie,Dream,34.0,17.1,185.0,3400.0,Female +Adelie,Dream,39.6,18.1,186.0,4450.0,Male +Adelie,Dream,36.2,17.3,187.0,3300.0,Female +Adelie,Dream,40.8,18.9,208.0,4300.0,Male +Adelie,Dream,38.1,18.6,190.0,3700.0,Female +Adelie,Dream,40.3,18.5,196.0,4350.0,Male +Adelie,Dream,33.1,16.1,178.0,2900.0,Female +Adelie,Dream,43.2,18.5,192.0,4100.0,Male +Adelie,Biscoe,35.0,17.9,192.0,3725.0,Female +Adelie,Biscoe,41.0,20.0,203.0,4725.0,Male +Adelie,Biscoe,37.7,16.0,183.0,3075.0,Female +Adelie,Biscoe,37.8,20.0,190.0,4250.0,Male +Adelie,Biscoe,37.9,18.6,193.0,2925.0,Female +Adelie,Biscoe,39.7,18.9,184.0,3550.0,Male +Adelie,Biscoe,38.6,17.2,199.0,3750.0,Female +Adelie,Biscoe,38.2,20.0,190.0,3900.0,Male +Adelie,Biscoe,38.1,17.0,181.0,3175.0,Female +Adelie,Biscoe,43.2,19.0,197.0,4775.0,Male +Adelie,Biscoe,38.1,16.5,198.0,3825.0,Female +Adelie,Biscoe,45.6,20.3,191.0,4600.0,Male +Adelie,Biscoe,39.7,17.7,193.0,3200.0,Female +Adelie,Biscoe,42.2,19.5,197.0,4275.0,Male +Adelie,Biscoe,39.6,20.7,191.0,3900.0,Female +Adelie,Biscoe,42.7,18.3,196.0,4075.0,Male +Adelie,Torgersen,38.6,17.0,188.0,2900.0,Female +Adelie,Torgersen,37.3,20.5,199.0,3775.0,Male +Adelie,Torgersen,35.7,17.0,189.0,3350.0,Female +Adelie,Torgersen,41.1,18.6,189.0,3325.0,Male +Adelie,Torgersen,36.2,17.2,187.0,3150.0,Female +Adelie,Torgersen,37.7,19.8,198.0,3500.0,Male +Adelie,Torgersen,40.2,17.0,176.0,3450.0,Female +Adelie,Torgersen,41.4,18.5,202.0,3875.0,Male +Adelie,Torgersen,35.2,15.9,186.0,3050.0,Female +Adelie,Torgersen,40.6,19.0,199.0,4000.0,Male +Adelie,Torgersen,38.8,17.6,191.0,3275.0,Female +Adelie,Torgersen,41.5,18.3,195.0,4300.0,Male +Adelie,Torgersen,39.0,17.1,191.0,3050.0,Female +Adelie,Torgersen,44.1,18.0,210.0,4000.0,Male +Adelie,Torgersen,38.5,17.9,190.0,3325.0,Female +Adelie,Torgersen,43.1,19.2,197.0,3500.0,Male +Adelie,Dream,36.8,18.5,193.0,3500.0,Female +Adelie,Dream,37.5,18.5,199.0,4475.0,Male +Adelie,Dream,38.1,17.6,187.0,3425.0,Female +Adelie,Dream,41.1,17.5,190.0,3900.0,Male +Adelie,Dream,35.6,17.5,191.0,3175.0,Female +Adelie,Dream,40.2,20.1,200.0,3975.0,Male +Adelie,Dream,37.0,16.5,185.0,3400.0,Female +Adelie,Dream,39.7,17.9,193.0,4250.0,Male +Adelie,Dream,40.2,17.1,193.0,3400.0,Female +Adelie,Dream,40.6,17.2,187.0,3475.0,Male +Adelie,Dream,32.1,15.5,188.0,3050.0,Female +Adelie,Dream,40.7,17.0,190.0,3725.0,Male +Adelie,Dream,37.3,16.8,192.0,3000.0,Female +Adelie,Dream,39.0,18.7,185.0,3650.0,Male +Adelie,Dream,39.2,18.6,190.0,4250.0,Male +Adelie,Dream,36.6,18.4,184.0,3475.0,Female +Adelie,Dream,36.0,17.8,195.0,3450.0,Female +Adelie,Dream,37.8,18.1,193.0,3750.0,Male +Adelie,Dream,36.0,17.1,187.0,3700.0,Female +Adelie,Dream,41.5,18.5,201.0,4000.0,Male +Chinstrap,Dream,46.5,17.9,192.0,3500.0,Female +Chinstrap,Dream,50.0,19.5,196.0,3900.0,Male +Chinstrap,Dream,51.3,19.2,193.0,3650.0,Male +Chinstrap,Dream,45.4,18.7,188.0,3525.0,Female +Chinstrap,Dream,52.7,19.8,197.0,3725.0,Male +Chinstrap,Dream,45.2,17.8,198.0,3950.0,Female +Chinstrap,Dream,46.1,18.2,178.0,3250.0,Female +Chinstrap,Dream,51.3,18.2,197.0,3750.0,Male +Chinstrap,Dream,46.0,18.9,195.0,4150.0,Female +Chinstrap,Dream,51.3,19.9,198.0,3700.0,Male +Chinstrap,Dream,46.6,17.8,193.0,3800.0,Female +Chinstrap,Dream,51.7,20.3,194.0,3775.0,Male +Chinstrap,Dream,47.0,17.3,185.0,3700.0,Female +Chinstrap,Dream,52.0,18.1,201.0,4050.0,Male +Chinstrap,Dream,45.9,17.1,190.0,3575.0,Female +Chinstrap,Dream,50.5,19.6,201.0,4050.0,Male +Chinstrap,Dream,50.3,20.0,197.0,3300.0,Male +Chinstrap,Dream,58.0,17.8,181.0,3700.0,Female +Chinstrap,Dream,46.4,18.6,190.0,3450.0,Female +Chinstrap,Dream,49.2,18.2,195.0,4400.0,Male +Chinstrap,Dream,42.4,17.3,181.0,3600.0,Female +Chinstrap,Dream,48.5,17.5,191.0,3400.0,Male +Chinstrap,Dream,43.2,16.6,187.0,2900.0,Female +Chinstrap,Dream,50.6,19.4,193.0,3800.0,Male +Chinstrap,Dream,46.7,17.9,195.0,3300.0,Female +Chinstrap,Dream,52.0,19.0,197.0,4150.0,Male +Chinstrap,Dream,50.5,18.4,200.0,3400.0,Female +Chinstrap,Dream,49.5,19.0,200.0,3800.0,Male +Chinstrap,Dream,46.4,17.8,191.0,3700.0,Female +Chinstrap,Dream,52.8,20.0,205.0,4550.0,Male +Chinstrap,Dream,40.9,16.6,187.0,3200.0,Female +Chinstrap,Dream,54.2,20.8,201.0,4300.0,Male +Chinstrap,Dream,42.5,16.7,187.0,3350.0,Female +Chinstrap,Dream,51.0,18.8,203.0,4100.0,Male +Chinstrap,Dream,49.7,18.6,195.0,3600.0,Male +Chinstrap,Dream,47.5,16.8,199.0,3900.0,Female +Chinstrap,Dream,47.6,18.3,195.0,3850.0,Female +Chinstrap,Dream,52.0,20.7,210.0,4800.0,Male +Chinstrap,Dream,46.9,16.6,192.0,2700.0,Female +Chinstrap,Dream,53.5,19.9,205.0,4500.0,Male +Chinstrap,Dream,49.0,19.5,210.0,3950.0,Male +Chinstrap,Dream,46.2,17.5,187.0,3650.0,Female +Chinstrap,Dream,50.9,19.1,196.0,3550.0,Male +Chinstrap,Dream,45.5,17.0,196.0,3500.0,Female +Chinstrap,Dream,50.9,17.9,196.0,3675.0,Female +Chinstrap,Dream,50.8,18.5,201.0,4450.0,Male +Chinstrap,Dream,50.1,17.9,190.0,3400.0,Female +Chinstrap,Dream,49.0,19.6,212.0,4300.0,Male +Chinstrap,Dream,51.5,18.7,187.0,3250.0,Male +Chinstrap,Dream,49.8,17.3,198.0,3675.0,Female +Chinstrap,Dream,48.1,16.4,199.0,3325.0,Female +Chinstrap,Dream,51.4,19.0,201.0,3950.0,Male +Chinstrap,Dream,45.7,17.3,193.0,3600.0,Female +Chinstrap,Dream,50.7,19.7,203.0,4050.0,Male +Chinstrap,Dream,42.5,17.3,187.0,3350.0,Female +Chinstrap,Dream,52.2,18.8,197.0,3450.0,Male +Chinstrap,Dream,45.2,16.6,191.0,3250.0,Female +Chinstrap,Dream,49.3,19.9,203.0,4050.0,Male +Chinstrap,Dream,50.2,18.8,202.0,3800.0,Male +Chinstrap,Dream,45.6,19.4,194.0,3525.0,Female +Chinstrap,Dream,51.9,19.5,206.0,3950.0,Male +Chinstrap,Dream,46.8,16.5,189.0,3650.0,Female +Chinstrap,Dream,45.7,17.0,195.0,3650.0,Female +Chinstrap,Dream,55.8,19.8,207.0,4000.0,Male +Chinstrap,Dream,43.5,18.1,202.0,3400.0,Female +Chinstrap,Dream,49.6,18.2,193.0,3775.0,Male +Chinstrap,Dream,50.8,19.0,210.0,4100.0,Male +Chinstrap,Dream,50.2,18.7,198.0,3775.0,Female +Gentoo,Biscoe,46.1,13.2,211.0,4500.0,Female +Gentoo,Biscoe,50.0,16.3,230.0,5700.0,Male +Gentoo,Biscoe,48.7,14.1,210.0,4450.0,Female +Gentoo,Biscoe,50.0,15.2,218.0,5700.0,Male +Gentoo,Biscoe,47.6,14.5,215.0,5400.0,Male +Gentoo,Biscoe,46.5,13.5,210.0,4550.0,Female +Gentoo,Biscoe,45.4,14.6,211.0,4800.0,Female +Gentoo,Biscoe,46.7,15.3,219.0,5200.0,Male +Gentoo,Biscoe,43.3,13.4,209.0,4400.0,Female +Gentoo,Biscoe,46.8,15.4,215.0,5150.0,Male +Gentoo,Biscoe,40.9,13.7,214.0,4650.0,Female +Gentoo,Biscoe,49.0,16.1,216.0,5550.0,Male +Gentoo,Biscoe,45.5,13.7,214.0,4650.0,Female +Gentoo,Biscoe,48.4,14.6,213.0,5850.0,Male +Gentoo,Biscoe,45.8,14.6,210.0,4200.0,Female +Gentoo,Biscoe,49.3,15.7,217.0,5850.0,Male +Gentoo,Biscoe,42.0,13.5,210.0,4150.0,Female +Gentoo,Biscoe,49.2,15.2,221.0,6300.0,Male +Gentoo,Biscoe,46.2,14.5,209.0,4800.0,Female +Gentoo,Biscoe,48.7,15.1,222.0,5350.0,Male +Gentoo,Biscoe,50.2,14.3,218.0,5700.0,Male +Gentoo,Biscoe,45.1,14.5,215.0,5000.0,Female +Gentoo,Biscoe,46.5,14.5,213.0,4400.0,Female +Gentoo,Biscoe,46.3,15.8,215.0,5050.0,Male +Gentoo,Biscoe,42.9,13.1,215.0,5000.0,Female +Gentoo,Biscoe,46.1,15.1,215.0,5100.0,Male +Gentoo,Biscoe,44.5,14.3,216.0,4100.0, +Gentoo,Biscoe,47.8,15.0,215.0,5650.0,Male +Gentoo,Biscoe,48.2,14.3,210.0,4600.0,Female +Gentoo,Biscoe,50.0,15.3,220.0,5550.0,Male +Gentoo,Biscoe,47.3,15.3,222.0,5250.0,Male +Gentoo,Biscoe,42.8,14.2,209.0,4700.0,Female +Gentoo,Biscoe,45.1,14.5,207.0,5050.0,Female +Gentoo,Biscoe,59.6,17.0,230.0,6050.0,Male +Gentoo,Biscoe,49.1,14.8,220.0,5150.0,Female +Gentoo,Biscoe,48.4,16.3,220.0,5400.0,Male +Gentoo,Biscoe,42.6,13.7,213.0,4950.0,Female +Gentoo,Biscoe,44.4,17.3,219.0,5250.0,Male +Gentoo,Biscoe,44.0,13.6,208.0,4350.0,Female +Gentoo,Biscoe,48.7,15.7,208.0,5350.0,Male +Gentoo,Biscoe,42.7,13.7,208.0,3950.0,Female +Gentoo,Biscoe,49.6,16.0,225.0,5700.0,Male +Gentoo,Biscoe,45.3,13.7,210.0,4300.0,Female +Gentoo,Biscoe,49.6,15.0,216.0,4750.0,Male +Gentoo,Biscoe,50.5,15.9,222.0,5550.0,Male +Gentoo,Biscoe,43.6,13.9,217.0,4900.0,Female +Gentoo,Biscoe,45.5,13.9,210.0,4200.0,Female +Gentoo,Biscoe,50.5,15.9,225.0,5400.0,Male +Gentoo,Biscoe,44.9,13.3,213.0,5100.0,Female +Gentoo,Biscoe,45.2,15.8,215.0,5300.0,Male +Gentoo,Biscoe,46.6,14.2,210.0,4850.0,Female +Gentoo,Biscoe,48.5,14.1,220.0,5300.0,Male +Gentoo,Biscoe,45.1,14.4,210.0,4400.0,Female +Gentoo,Biscoe,50.1,15.0,225.0,5000.0,Male +Gentoo,Biscoe,46.5,14.4,217.0,4900.0,Female +Gentoo,Biscoe,45.0,15.4,220.0,5050.0,Male +Gentoo,Biscoe,43.8,13.9,208.0,4300.0,Female +Gentoo,Biscoe,45.5,15.0,220.0,5000.0,Male +Gentoo,Biscoe,43.2,14.5,208.0,4450.0,Female +Gentoo,Biscoe,50.4,15.3,224.0,5550.0,Male +Gentoo,Biscoe,45.3,13.8,208.0,4200.0,Female +Gentoo,Biscoe,46.2,14.9,221.0,5300.0,Male +Gentoo,Biscoe,45.7,13.9,214.0,4400.0,Female +Gentoo,Biscoe,54.3,15.7,231.0,5650.0,Male +Gentoo,Biscoe,45.8,14.2,219.0,4700.0,Female +Gentoo,Biscoe,49.8,16.8,230.0,5700.0,Male +Gentoo,Biscoe,46.2,14.4,214.0,4650.0, +Gentoo,Biscoe,49.5,16.2,229.0,5800.0,Male +Gentoo,Biscoe,43.5,14.2,220.0,4700.0,Female +Gentoo,Biscoe,50.7,15.0,223.0,5550.0,Male +Gentoo,Biscoe,47.7,15.0,216.0,4750.0,Female +Gentoo,Biscoe,46.4,15.6,221.0,5000.0,Male +Gentoo,Biscoe,48.2,15.6,221.0,5100.0,Male +Gentoo,Biscoe,46.5,14.8,217.0,5200.0,Female +Gentoo,Biscoe,46.4,15.0,216.0,4700.0,Female +Gentoo,Biscoe,48.6,16.0,230.0,5800.0,Male +Gentoo,Biscoe,47.5,14.2,209.0,4600.0,Female +Gentoo,Biscoe,51.1,16.3,220.0,6000.0,Male +Gentoo,Biscoe,45.2,13.8,215.0,4750.0,Female +Gentoo,Biscoe,45.2,16.4,223.0,5950.0,Male +Gentoo,Biscoe,49.1,14.5,212.0,4625.0,Female +Gentoo,Biscoe,52.5,15.6,221.0,5450.0,Male +Gentoo,Biscoe,47.4,14.6,212.0,4725.0,Female +Gentoo,Biscoe,50.0,15.9,224.0,5350.0,Male +Gentoo,Biscoe,44.9,13.8,212.0,4750.0,Female +Gentoo,Biscoe,50.8,17.3,228.0,5600.0,Male +Gentoo,Biscoe,43.4,14.4,218.0,4600.0,Female +Gentoo,Biscoe,51.3,14.2,218.0,5300.0,Male +Gentoo,Biscoe,47.5,14.0,212.0,4875.0,Female +Gentoo,Biscoe,52.1,17.0,230.0,5550.0,Male +Gentoo,Biscoe,47.5,15.0,218.0,4950.0,Female +Gentoo,Biscoe,52.2,17.1,228.0,5400.0,Male +Gentoo,Biscoe,45.5,14.5,212.0,4750.0,Female +Gentoo,Biscoe,49.5,16.1,224.0,5650.0,Male +Gentoo,Biscoe,44.5,14.7,214.0,4850.0,Female +Gentoo,Biscoe,50.8,15.7,226.0,5200.0,Male +Gentoo,Biscoe,49.4,15.8,216.0,4925.0,Male +Gentoo,Biscoe,46.9,14.6,222.0,4875.0,Female +Gentoo,Biscoe,48.4,14.4,203.0,4625.0,Female +Gentoo,Biscoe,51.1,16.5,225.0,5250.0,Male +Gentoo,Biscoe,48.5,15.0,219.0,4850.0,Female +Gentoo,Biscoe,55.9,17.0,228.0,5600.0,Male +Gentoo,Biscoe,47.2,15.5,215.0,4975.0,Female +Gentoo,Biscoe,49.1,15.0,228.0,5500.0,Male +Gentoo,Biscoe,47.3,13.8,216.0,4725.0, +Gentoo,Biscoe,46.8,16.1,215.0,5500.0,Male +Gentoo,Biscoe,41.7,14.7,210.0,4700.0,Female +Gentoo,Biscoe,53.4,15.8,219.0,5500.0,Male +Gentoo,Biscoe,43.3,14.0,208.0,4575.0,Female +Gentoo,Biscoe,48.1,15.1,209.0,5500.0,Male +Gentoo,Biscoe,50.5,15.2,216.0,5000.0,Female +Gentoo,Biscoe,49.8,15.9,229.0,5950.0,Male +Gentoo,Biscoe,43.5,15.2,213.0,4650.0,Female +Gentoo,Biscoe,51.5,16.3,230.0,5500.0,Male +Gentoo,Biscoe,46.2,14.1,217.0,4375.0,Female +Gentoo,Biscoe,55.1,16.0,230.0,5850.0,Male +Gentoo,Biscoe,44.5,15.7,217.0,4875.0, +Gentoo,Biscoe,48.8,16.2,222.0,6000.0,Male +Gentoo,Biscoe,47.2,13.7,214.0,4925.0,Female +Gentoo,Biscoe,,,,, +Gentoo,Biscoe,46.8,14.3,215.0,4850.0,Female +Gentoo,Biscoe,50.4,15.7,222.0,5750.0,Male +Gentoo,Biscoe,45.2,14.8,212.0,5200.0,Female +Gentoo,Biscoe,49.9,16.1,213.0,5400.0,Male diff --git a/shiny/templates/app-templates/basic-sidebar/requirements.txt b/shiny/templates/app-templates/basic-sidebar/requirements.txt new file mode 100644 index 000000000..80c021bcd --- /dev/null +++ b/shiny/templates/app-templates/basic-sidebar/requirements.txt @@ -0,0 +1,3 @@ +shiny +seaborn +pandas \ No newline at end of file diff --git a/shiny/templates/app-templates/basic-sidebar/shared.py b/shiny/templates/app-templates/basic-sidebar/shared.py new file mode 100644 index 000000000..c27d395ed --- /dev/null +++ b/shiny/templates/app-templates/basic-sidebar/shared.py @@ -0,0 +1,6 @@ +from pathlib import Path + +import pandas as pd + +app_dir = Path(__file__).parent +df = pd.read_csv(app_dir / "penguins.csv") diff --git a/shiny/templates/app-templates/dashboard-tips/README.md b/shiny/templates/app-templates/dashboard-tips/README.md new file mode 100644 index 000000000..0db0a99dd --- /dev/null +++ b/shiny/templates/app-templates/dashboard-tips/README.md @@ -0,0 +1 @@ +This template gives you a more "complete" dashboard for exploring the tips dataset. For an overview of what's here, visit [this article](https://shiny.posit.co/py/docs/user-interfaces.html). \ No newline at end of file diff --git a/shiny/templates/app-templates/dashboard-tips/app-core.py b/shiny/templates/app-templates/dashboard-tips/app-core.py new file mode 100644 index 000000000..809d96812 --- /dev/null +++ b/shiny/templates/app-templates/dashboard-tips/app-core.py @@ -0,0 +1,180 @@ +import faicons as fa +import plotly.express as px + +# Load data and compute static values +from shared import app_dir, tips +from shinywidgets import output_widget, render_plotly + +from shiny import App, reactive, render, ui + +bill_rng = (min(tips.total_bill), max(tips.total_bill)) + + +ICONS = { + "user": fa.icon_svg("user", "regular"), + "wallet": fa.icon_svg("wallet"), + "currency-dollar": fa.icon_svg("dollar-sign"), + "ellipsis": fa.icon_svg("ellipsis"), +} + +# Add page title and sidebar +app_ui = ui.page_sidebar( + ui.sidebar( + ui.input_slider( + "total_bill", + "Bill amount", + min=bill_rng[0], + max=bill_rng[1], + value=bill_rng, + pre="$", + ), + ui.input_checkbox_group( + "time", + "Food service", + ["Lunch", "Dinner"], + selected=["Lunch", "Dinner"], + inline=True, + ), + ui.input_action_button("reset", "Reset filter"), + open="desktop", + ), + ui.layout_columns( + ui.value_box( + "Total tippers", ui.output_ui("total_tippers"), showcase=ICONS["user"] + ), + ui.value_box( + "Average tip", ui.output_ui("average_tip"), showcase=ICONS["wallet"] + ), + ui.value_box( + "Average bill", + ui.output_ui("average_bill"), + showcase=ICONS["currency-dollar"], + ), + fill=False, + ), + ui.layout_columns( + ui.card( + ui.card_header("Tips data"), ui.output_data_frame("table"), full_screen=True + ), + ui.card( + ui.card_header( + "Total bill vs tip", + ui.popover( + ICONS["ellipsis"], + ui.input_radio_buttons( + "scatter_color", + None, + ["none", "sex", "smoker", "day", "time"], + inline=True, + ), + title="Add a color variable", + placement="top", + ), + class_="d-flex justify-content-between align-items-center", + ), + output_widget("scatterplot"), + full_screen=True, + ), + ui.card( + ui.card_header( + "Tip percentages", + ui.popover( + ICONS["ellipsis"], + ui.input_radio_buttons( + "tip_perc_y", + "Split by:", + ["sex", "smoker", "day", "time"], + selected="day", + inline=True, + ), + title="Add a color variable", + ), + class_="d-flex justify-content-between align-items-center", + ), + output_widget("tip_perc"), + full_screen=True, + ), + col_widths=[6, 6, 12], + ), + ui.include_css(app_dir / "styles.css"), + title="Restaurant tipping", + fillable=True, +) + + +def server(input, output, session): + @reactive.calc + def tips_data(): + bill = input.total_bill() + idx1 = tips.total_bill.between(bill[0], bill[1]) + idx2 = tips.time.isin(input.time()) + return tips[idx1 & idx2] + + @render.ui + def total_tippers(): + return tips_data().shape[0] + + @render.ui + def average_tip(): + d = tips_data() + if d.shape[0] > 0: + perc = d.tip / d.total_bill + return f"{perc.mean():.1%}" + + @render.ui + def average_bill(): + d = tips_data() + if d.shape[0] > 0: + bill = d.total_bill.mean() + return f"${bill:.2f}" + + @render.data_frame + def table(): + return render.DataGrid(tips_data()) + + @render_plotly + def scatterplot(): + color = input.scatter_color() + return px.scatter( + tips_data(), + x="total_bill", + y="tip", + color=None if color == "none" else color, + trendline="lowess", + ) + + @render_plotly + def tip_perc(): + from ridgeplot import ridgeplot + + dat = tips_data() + dat["percent"] = dat.tip / dat.total_bill + yvar = input.tip_perc_y() + uvals = dat[yvar].unique() + + samples = [[dat.percent[dat[yvar] == val]] for val in uvals] + + plt = ridgeplot( + samples=samples, + labels=uvals, + bandwidth=0.01, + colorscale="viridis", + colormode="row-index", + ) + + plt.update_layout( + legend=dict( + orientation="h", yanchor="bottom", y=1.02, xanchor="center", x=0.5 + ) + ) + + return plt + + @reactive.effect + @reactive.event(input.reset) + def _(): + ui.update_slider("total_bill", value=bill_rng) + ui.update_checkbox_group("time", selected=["Lunch", "Dinner"]) + + +app = App(app_ui, server) diff --git a/shiny/templates/app-templates/dashboard-tips/app-express.py b/shiny/templates/app-templates/dashboard-tips/app-express.py new file mode 100644 index 000000000..9c7fd9e07 --- /dev/null +++ b/shiny/templates/app-templates/dashboard-tips/app-express.py @@ -0,0 +1,162 @@ +import faicons as fa +import plotly.express as px + +# Load data and compute static values +from shared import app_dir, tips +from shinywidgets import render_plotly + +from shiny import reactive, render +from shiny.express import input, ui + +bill_rng = (min(tips.total_bill), max(tips.total_bill)) + +# Add page title and sidebar +ui.page_opts(title="Restaurant tipping", fillable=True) + +with ui.sidebar(open="desktop"): + ui.input_slider( + "total_bill", + "Bill amount", + min=bill_rng[0], + max=bill_rng[1], + value=bill_rng, + pre="$", + ) + ui.input_checkbox_group( + "time", + "Food service", + ["Lunch", "Dinner"], + selected=["Lunch", "Dinner"], + inline=True, + ) + ui.input_action_button("reset", "Reset filter") + +# Add main content +ICONS = { + "user": fa.icon_svg("user", "regular"), + "wallet": fa.icon_svg("wallet"), + "currency-dollar": fa.icon_svg("dollar-sign"), + "ellipsis": fa.icon_svg("ellipsis"), +} + +with ui.layout_columns(fill=False): + with ui.value_box(showcase=ICONS["user"]): + "Total tippers" + + @render.express + def total_tippers(): + tips_data().shape[0] + + with ui.value_box(showcase=ICONS["wallet"]): + "Average tip" + + @render.express + def average_tip(): + d = tips_data() + if d.shape[0] > 0: + perc = d.tip / d.total_bill + f"{perc.mean():.1%}" + + with ui.value_box(showcase=ICONS["currency-dollar"]): + "Average bill" + + @render.express + def average_bill(): + d = tips_data() + if d.shape[0] > 0: + bill = d.total_bill.mean() + f"${bill:.2f}" + + +with ui.layout_columns(col_widths=[6, 6, 12]): + with ui.card(full_screen=True): + ui.card_header("Tips data") + + @render.data_frame + def table(): + return render.DataGrid(tips_data()) + + with ui.card(full_screen=True): + with ui.card_header(class_="d-flex justify-content-between align-items-center"): + "Total bill vs tip" + with ui.popover(title="Add a color variable", placement="top"): + ICONS["ellipsis"] + ui.input_radio_buttons( + "scatter_color", + None, + ["none", "sex", "smoker", "day", "time"], + inline=True, + ) + + @render_plotly + def scatterplot(): + color = input.scatter_color() + return px.scatter( + tips_data(), + x="total_bill", + y="tip", + color=None if color == "none" else color, + trendline="lowess", + ) + + with ui.card(full_screen=True): + with ui.card_header(class_="d-flex justify-content-between align-items-center"): + "Tip percentages" + with ui.popover(title="Add a color variable"): + ICONS["ellipsis"] + ui.input_radio_buttons( + "tip_perc_y", + "Split by:", + ["sex", "smoker", "day", "time"], + selected="day", + inline=True, + ) + + @render_plotly + def tip_perc(): + from ridgeplot import ridgeplot + + dat = tips_data() + dat["percent"] = dat.tip / dat.total_bill + yvar = input.tip_perc_y() + uvals = dat[yvar].unique() + + samples = [[dat.percent[dat[yvar] == val]] for val in uvals] + + plt = ridgeplot( + samples=samples, + labels=uvals, + bandwidth=0.01, + colorscale="viridis", + colormode="row-index", + ) + + plt.update_layout( + legend=dict( + orientation="h", yanchor="bottom", y=1.02, xanchor="center", x=0.5 + ) + ) + + return plt + + +ui.include_css(app_dir / "styles.css") + +# -------------------------------------------------------- +# Reactive calculations and effects +# -------------------------------------------------------- + + +@reactive.calc +def tips_data(): + bill = input.total_bill() + idx1 = tips.total_bill.between(bill[0], bill[1]) + idx2 = tips.time.isin(input.time()) + return tips[idx1 & idx2] + + +@reactive.effect +@reactive.event(input.reset) +def _(): + ui.update_slider("total_bill", value=bill_rng) + ui.update_checkbox_group("time", selected=["Lunch", "Dinner"]) diff --git a/shiny/templates/app-templates/dashboard-tips/requirements.txt b/shiny/templates/app-templates/dashboard-tips/requirements.txt new file mode 100644 index 000000000..078cc86c5 --- /dev/null +++ b/shiny/templates/app-templates/dashboard-tips/requirements.txt @@ -0,0 +1,6 @@ +faicons +shiny +shinywidgets +plotly +pandas +ridgeplot diff --git a/shiny/templates/app-templates/dashboard-tips/shared.py b/shiny/templates/app-templates/dashboard-tips/shared.py new file mode 100644 index 000000000..b7581a317 --- /dev/null +++ b/shiny/templates/app-templates/dashboard-tips/shared.py @@ -0,0 +1,6 @@ +from pathlib import Path + +import pandas as pd + +app_dir = Path(__file__).parent +tips = pd.read_csv(app_dir / "tips.csv") diff --git a/shiny/templates/app-templates/dashboard-tips/styles.css b/shiny/templates/app-templates/dashboard-tips/styles.css new file mode 100644 index 000000000..0745089ac --- /dev/null +++ b/shiny/templates/app-templates/dashboard-tips/styles.css @@ -0,0 +1,12 @@ +:root { + --bslib-sidebar-main-bg: #f8f8f8; +} + +.popover { + --bs-popover-header-bg: #222; + --bs-popover-header-color: #fff; +} + +.popover .btn-close { + filter: var(--bs-btn-close-white-filter); +} \ No newline at end of file diff --git a/shiny/templates/app-templates/dashboard-tips/tips.csv b/shiny/templates/app-templates/dashboard-tips/tips.csv new file mode 100644 index 000000000..856a65a69 --- /dev/null +++ b/shiny/templates/app-templates/dashboard-tips/tips.csv @@ -0,0 +1,245 @@ +total_bill,tip,sex,smoker,day,time,size +16.99,1.01,Female,No,Sun,Dinner,2 +10.34,1.66,Male,No,Sun,Dinner,3 +21.01,3.5,Male,No,Sun,Dinner,3 +23.68,3.31,Male,No,Sun,Dinner,2 +24.59,3.61,Female,No,Sun,Dinner,4 +25.29,4.71,Male,No,Sun,Dinner,4 +8.77,2.0,Male,No,Sun,Dinner,2 +26.88,3.12,Male,No,Sun,Dinner,4 +15.04,1.96,Male,No,Sun,Dinner,2 +14.78,3.23,Male,No,Sun,Dinner,2 +10.27,1.71,Male,No,Sun,Dinner,2 +35.26,5.0,Female,No,Sun,Dinner,4 +15.42,1.57,Male,No,Sun,Dinner,2 +18.43,3.0,Male,No,Sun,Dinner,4 +14.83,3.02,Female,No,Sun,Dinner,2 +21.58,3.92,Male,No,Sun,Dinner,2 +10.33,1.67,Female,No,Sun,Dinner,3 +16.29,3.71,Male,No,Sun,Dinner,3 +16.97,3.5,Female,No,Sun,Dinner,3 +20.65,3.35,Male,No,Sat,Dinner,3 +17.92,4.08,Male,No,Sat,Dinner,2 +20.29,2.75,Female,No,Sat,Dinner,2 +15.77,2.23,Female,No,Sat,Dinner,2 +39.42,7.58,Male,No,Sat,Dinner,4 +19.82,3.18,Male,No,Sat,Dinner,2 +17.81,2.34,Male,No,Sat,Dinner,4 +13.37,2.0,Male,No,Sat,Dinner,2 +12.69,2.0,Male,No,Sat,Dinner,2 +21.7,4.3,Male,No,Sat,Dinner,2 +19.65,3.0,Female,No,Sat,Dinner,2 +9.55,1.45,Male,No,Sat,Dinner,2 +18.35,2.5,Male,No,Sat,Dinner,4 +15.06,3.0,Female,No,Sat,Dinner,2 +20.69,2.45,Female,No,Sat,Dinner,4 +17.78,3.27,Male,No,Sat,Dinner,2 +24.06,3.6,Male,No,Sat,Dinner,3 +16.31,2.0,Male,No,Sat,Dinner,3 +16.93,3.07,Female,No,Sat,Dinner,3 +18.69,2.31,Male,No,Sat,Dinner,3 +31.27,5.0,Male,No,Sat,Dinner,3 +16.04,2.24,Male,No,Sat,Dinner,3 +17.46,2.54,Male,No,Sun,Dinner,2 +13.94,3.06,Male,No,Sun,Dinner,2 +9.68,1.32,Male,No,Sun,Dinner,2 +30.4,5.6,Male,No,Sun,Dinner,4 +18.29,3.0,Male,No,Sun,Dinner,2 +22.23,5.0,Male,No,Sun,Dinner,2 +32.4,6.0,Male,No,Sun,Dinner,4 +28.55,2.05,Male,No,Sun,Dinner,3 +18.04,3.0,Male,No,Sun,Dinner,2 +12.54,2.5,Male,No,Sun,Dinner,2 +10.29,2.6,Female,No,Sun,Dinner,2 +34.81,5.2,Female,No,Sun,Dinner,4 +9.94,1.56,Male,No,Sun,Dinner,2 +25.56,4.34,Male,No,Sun,Dinner,4 +19.49,3.51,Male,No,Sun,Dinner,2 +38.01,3.0,Male,Yes,Sat,Dinner,4 +26.41,1.5,Female,No,Sat,Dinner,2 +11.24,1.76,Male,Yes,Sat,Dinner,2 +48.27,6.73,Male,No,Sat,Dinner,4 +20.29,3.21,Male,Yes,Sat,Dinner,2 +13.81,2.0,Male,Yes,Sat,Dinner,2 +11.02,1.98,Male,Yes,Sat,Dinner,2 +18.29,3.76,Male,Yes,Sat,Dinner,4 +17.59,2.64,Male,No,Sat,Dinner,3 +20.08,3.15,Male,No,Sat,Dinner,3 +16.45,2.47,Female,No,Sat,Dinner,2 +3.07,1.0,Female,Yes,Sat,Dinner,1 +20.23,2.01,Male,No,Sat,Dinner,2 +15.01,2.09,Male,Yes,Sat,Dinner,2 +12.02,1.97,Male,No,Sat,Dinner,2 +17.07,3.0,Female,No,Sat,Dinner,3 +26.86,3.14,Female,Yes,Sat,Dinner,2 +25.28,5.0,Female,Yes,Sat,Dinner,2 +14.73,2.2,Female,No,Sat,Dinner,2 +10.51,1.25,Male,No,Sat,Dinner,2 +17.92,3.08,Male,Yes,Sat,Dinner,2 +27.2,4.0,Male,No,Thur,Lunch,4 +22.76,3.0,Male,No,Thur,Lunch,2 +17.29,2.71,Male,No,Thur,Lunch,2 +19.44,3.0,Male,Yes,Thur,Lunch,2 +16.66,3.4,Male,No,Thur,Lunch,2 +10.07,1.83,Female,No,Thur,Lunch,1 +32.68,5.0,Male,Yes,Thur,Lunch,2 +15.98,2.03,Male,No,Thur,Lunch,2 +34.83,5.17,Female,No,Thur,Lunch,4 +13.03,2.0,Male,No,Thur,Lunch,2 +18.28,4.0,Male,No,Thur,Lunch,2 +24.71,5.85,Male,No,Thur,Lunch,2 +21.16,3.0,Male,No,Thur,Lunch,2 +28.97,3.0,Male,Yes,Fri,Dinner,2 +22.49,3.5,Male,No,Fri,Dinner,2 +5.75,1.0,Female,Yes,Fri,Dinner,2 +16.32,4.3,Female,Yes,Fri,Dinner,2 +22.75,3.25,Female,No,Fri,Dinner,2 +40.17,4.73,Male,Yes,Fri,Dinner,4 +27.28,4.0,Male,Yes,Fri,Dinner,2 +12.03,1.5,Male,Yes,Fri,Dinner,2 +21.01,3.0,Male,Yes,Fri,Dinner,2 +12.46,1.5,Male,No,Fri,Dinner,2 +11.35,2.5,Female,Yes,Fri,Dinner,2 +15.38,3.0,Female,Yes,Fri,Dinner,2 +44.3,2.5,Female,Yes,Sat,Dinner,3 +22.42,3.48,Female,Yes,Sat,Dinner,2 +20.92,4.08,Female,No,Sat,Dinner,2 +15.36,1.64,Male,Yes,Sat,Dinner,2 +20.49,4.06,Male,Yes,Sat,Dinner,2 +25.21,4.29,Male,Yes,Sat,Dinner,2 +18.24,3.76,Male,No,Sat,Dinner,2 +14.31,4.0,Female,Yes,Sat,Dinner,2 +14.0,3.0,Male,No,Sat,Dinner,2 +7.25,1.0,Female,No,Sat,Dinner,1 +38.07,4.0,Male,No,Sun,Dinner,3 +23.95,2.55,Male,No,Sun,Dinner,2 +25.71,4.0,Female,No,Sun,Dinner,3 +17.31,3.5,Female,No,Sun,Dinner,2 +29.93,5.07,Male,No,Sun,Dinner,4 +10.65,1.5,Female,No,Thur,Lunch,2 +12.43,1.8,Female,No,Thur,Lunch,2 +24.08,2.92,Female,No,Thur,Lunch,4 +11.69,2.31,Male,No,Thur,Lunch,2 +13.42,1.68,Female,No,Thur,Lunch,2 +14.26,2.5,Male,No,Thur,Lunch,2 +15.95,2.0,Male,No,Thur,Lunch,2 +12.48,2.52,Female,No,Thur,Lunch,2 +29.8,4.2,Female,No,Thur,Lunch,6 +8.52,1.48,Male,No,Thur,Lunch,2 +14.52,2.0,Female,No,Thur,Lunch,2 +11.38,2.0,Female,No,Thur,Lunch,2 +22.82,2.18,Male,No,Thur,Lunch,3 +19.08,1.5,Male,No,Thur,Lunch,2 +20.27,2.83,Female,No,Thur,Lunch,2 +11.17,1.5,Female,No,Thur,Lunch,2 +12.26,2.0,Female,No,Thur,Lunch,2 +18.26,3.25,Female,No,Thur,Lunch,2 +8.51,1.25,Female,No,Thur,Lunch,2 +10.33,2.0,Female,No,Thur,Lunch,2 +14.15,2.0,Female,No,Thur,Lunch,2 +16.0,2.0,Male,Yes,Thur,Lunch,2 +13.16,2.75,Female,No,Thur,Lunch,2 +17.47,3.5,Female,No,Thur,Lunch,2 +34.3,6.7,Male,No,Thur,Lunch,6 +41.19,5.0,Male,No,Thur,Lunch,5 +27.05,5.0,Female,No,Thur,Lunch,6 +16.43,2.3,Female,No,Thur,Lunch,2 +8.35,1.5,Female,No,Thur,Lunch,2 +18.64,1.36,Female,No,Thur,Lunch,3 +11.87,1.63,Female,No,Thur,Lunch,2 +9.78,1.73,Male,No,Thur,Lunch,2 +7.51,2.0,Male,No,Thur,Lunch,2 +14.07,2.5,Male,No,Sun,Dinner,2 +13.13,2.0,Male,No,Sun,Dinner,2 +17.26,2.74,Male,No,Sun,Dinner,3 +24.55,2.0,Male,No,Sun,Dinner,4 +19.77,2.0,Male,No,Sun,Dinner,4 +29.85,5.14,Female,No,Sun,Dinner,5 +48.17,5.0,Male,No,Sun,Dinner,6 +25.0,3.75,Female,No,Sun,Dinner,4 +13.39,2.61,Female,No,Sun,Dinner,2 +16.49,2.0,Male,No,Sun,Dinner,4 +21.5,3.5,Male,No,Sun,Dinner,4 +12.66,2.5,Male,No,Sun,Dinner,2 +16.21,2.0,Female,No,Sun,Dinner,3 +13.81,2.0,Male,No,Sun,Dinner,2 +17.51,3.0,Female,Yes,Sun,Dinner,2 +24.52,3.48,Male,No,Sun,Dinner,3 +20.76,2.24,Male,No,Sun,Dinner,2 +31.71,4.5,Male,No,Sun,Dinner,4 +10.59,1.61,Female,Yes,Sat,Dinner,2 +10.63,2.0,Female,Yes,Sat,Dinner,2 +50.81,10.0,Male,Yes,Sat,Dinner,3 +15.81,3.16,Male,Yes,Sat,Dinner,2 +7.25,5.15,Male,Yes,Sun,Dinner,2 +31.85,3.18,Male,Yes,Sun,Dinner,2 +16.82,4.0,Male,Yes,Sun,Dinner,2 +32.9,3.11,Male,Yes,Sun,Dinner,2 +17.89,2.0,Male,Yes,Sun,Dinner,2 +14.48,2.0,Male,Yes,Sun,Dinner,2 +9.6,4.0,Female,Yes,Sun,Dinner,2 +34.63,3.55,Male,Yes,Sun,Dinner,2 +34.65,3.68,Male,Yes,Sun,Dinner,4 +23.33,5.65,Male,Yes,Sun,Dinner,2 +45.35,3.5,Male,Yes,Sun,Dinner,3 +23.17,6.5,Male,Yes,Sun,Dinner,4 +40.55,3.0,Male,Yes,Sun,Dinner,2 +20.69,5.0,Male,No,Sun,Dinner,5 +20.9,3.5,Female,Yes,Sun,Dinner,3 +30.46,2.0,Male,Yes,Sun,Dinner,5 +18.15,3.5,Female,Yes,Sun,Dinner,3 +23.1,4.0,Male,Yes,Sun,Dinner,3 +15.69,1.5,Male,Yes,Sun,Dinner,2 +19.81,4.19,Female,Yes,Thur,Lunch,2 +28.44,2.56,Male,Yes,Thur,Lunch,2 +15.48,2.02,Male,Yes,Thur,Lunch,2 +16.58,4.0,Male,Yes,Thur,Lunch,2 +7.56,1.44,Male,No,Thur,Lunch,2 +10.34,2.0,Male,Yes,Thur,Lunch,2 +43.11,5.0,Female,Yes,Thur,Lunch,4 +13.0,2.0,Female,Yes,Thur,Lunch,2 +13.51,2.0,Male,Yes,Thur,Lunch,2 +18.71,4.0,Male,Yes,Thur,Lunch,3 +12.74,2.01,Female,Yes,Thur,Lunch,2 +13.0,2.0,Female,Yes,Thur,Lunch,2 +16.4,2.5,Female,Yes,Thur,Lunch,2 +20.53,4.0,Male,Yes,Thur,Lunch,4 +16.47,3.23,Female,Yes,Thur,Lunch,3 +26.59,3.41,Male,Yes,Sat,Dinner,3 +38.73,3.0,Male,Yes,Sat,Dinner,4 +24.27,2.03,Male,Yes,Sat,Dinner,2 +12.76,2.23,Female,Yes,Sat,Dinner,2 +30.06,2.0,Male,Yes,Sat,Dinner,3 +25.89,5.16,Male,Yes,Sat,Dinner,4 +48.33,9.0,Male,No,Sat,Dinner,4 +13.27,2.5,Female,Yes,Sat,Dinner,2 +28.17,6.5,Female,Yes,Sat,Dinner,3 +12.9,1.1,Female,Yes,Sat,Dinner,2 +28.15,3.0,Male,Yes,Sat,Dinner,5 +11.59,1.5,Male,Yes,Sat,Dinner,2 +7.74,1.44,Male,Yes,Sat,Dinner,2 +30.14,3.09,Female,Yes,Sat,Dinner,4 +12.16,2.2,Male,Yes,Fri,Lunch,2 +13.42,3.48,Female,Yes,Fri,Lunch,2 +8.58,1.92,Male,Yes,Fri,Lunch,1 +15.98,3.0,Female,No,Fri,Lunch,3 +13.42,1.58,Male,Yes,Fri,Lunch,2 +16.27,2.5,Female,Yes,Fri,Lunch,2 +10.09,2.0,Female,Yes,Fri,Lunch,2 +20.45,3.0,Male,No,Sat,Dinner,4 +13.28,2.72,Male,No,Sat,Dinner,2 +22.12,2.88,Female,Yes,Sat,Dinner,2 +24.01,2.0,Male,Yes,Sat,Dinner,4 +15.69,3.0,Male,Yes,Sat,Dinner,3 +11.61,3.39,Male,No,Sat,Dinner,2 +10.77,1.47,Male,No,Sat,Dinner,2 +15.53,3.0,Male,Yes,Sat,Dinner,2 +10.07,1.25,Male,No,Sat,Dinner,2 +12.6,1.0,Male,Yes,Sat,Dinner,2 +32.83,1.17,Male,Yes,Sat,Dinner,2 +35.83,4.67,Female,No,Sat,Dinner,3 +29.03,5.92,Male,No,Sat,Dinner,3 +27.18,2.0,Female,Yes,Sat,Dinner,2 +22.67,2.0,Male,Yes,Sat,Dinner,2 +17.82,1.75,Male,No,Sat,Dinner,2 +18.78,3.0,Female,No,Thur,Dinner,2 diff --git a/shiny/templates/app-templates/multi-page/README.md b/shiny/templates/app-templates/multi-page/README.md deleted file mode 100644 index 8b56ff44a..000000000 --- a/shiny/templates/app-templates/multi-page/README.md +++ /dev/null @@ -1,12 +0,0 @@ - -This template provides an example of how large, production-level apps should be built. -There are a few things to note about this code: - -1) Most of the functionality is implemented using [modules](https://shiny.posit.co/py/docs/workflow-modules.html). -Which are extremely important for breaking your application into small blocks which can be predictably assembled into larger applications. - -2) We pass a `reactive.Calc` down to the modules, and call it within the module to return the data frame. -This is an example of [module communication](https://shiny.posit.co/py/docs/workflow-module-communication.html) which is how you can share reactive objects betwene modules and the main application context. - -3) The app uses a css file to implement custom styling. -Shiny apps can be fully styled with CSS and you can learn more about the options [here](https://shiny.posit.co/py/docs/ui-styling.html). diff --git a/shiny/templates/app-templates/multi-page/app-core.py b/shiny/templates/app-templates/multi-page/app-core.py deleted file mode 100644 index 01beb0d2f..000000000 --- a/shiny/templates/app-templates/multi-page/app-core.py +++ /dev/null @@ -1,43 +0,0 @@ -from pathlib import Path - -import pandas as pd -from modules import data_view_server, data_view_ui, training_server, training_ui - -from shiny import App, Inputs, Outputs, Session, reactive, ui - -df = pd.read_csv(Path(__file__).parent / "scores.csv") - - -app_ui = ui.page_navbar( - training_ui("tab1"), - data_view_ui("tab2"), - sidebar=ui.sidebar( - ui.input_select( - "account", - "Account", - choices=[ - "Berge & Berge", - "Fritsch & Fritsch", - "Hintz & Hintz", - "Mosciski and Sons", - "Wolff Ltd", - ], - ), - width="300px", - ), - header=ui.include_css(Path(__file__).parent / "styles.css"), - id="tabs", - title="Monitoring", -) - - -def server(input: Inputs, output: Outputs, session: Session): - @reactive.calc() - def filtered_data() -> pd.DataFrame: - return df.loc[df["account"] == input.account()] - - training_server(id="tab1", df=filtered_data) - data_view_server(id="tab2", df=filtered_data) - - -app = App(app_ui, server) diff --git a/shiny/templates/app-templates/multi-page/modules.py b/shiny/templates/app-templates/multi-page/modules.py deleted file mode 100644 index 3b9081bc3..000000000 --- a/shiny/templates/app-templates/multi-page/modules.py +++ /dev/null @@ -1,88 +0,0 @@ -from typing import Callable - -import pandas as pd -from plots import plot_auc_curve, plot_precision_recall_curve, plot_score_distribution - -from shiny import Inputs, Outputs, Session, module, render, ui - - -@module.ui -def training_ui(): - return ui.nav_panel( - "Training Dashboard", - ui.layout_columns( - ui.card( - ui.card_header("Model Metrics"), - ui.output_plot("metric"), - ui.input_select( - "metric", - "Metric", - choices=["ROC Curve", "Precision-Recall"], - ), - ), - ui.card( - ui.card_header("Training Scores"), - ui.output_plot("score_dist"), - ), - ), - ) - - -@module.server -def training_server( - input: Inputs, - output: Outputs, - session: Session, - df: Callable[[], pd.DataFrame], -): - @render.plot - def score_dist(): - return plot_score_distribution(df()) - - @render.plot - def metric(): - if input.metric() == "ROC Curve": - return plot_auc_curve(df(), "is_electronics", "training_score") - else: - return plot_precision_recall_curve(df(), "is_electronics", "training_score") - - -@module.ui -def data_view_ui(): - return ui.nav_panel( - "View Data", - ui.layout_columns( - ui.value_box( - title="Row count", - value=ui.output_text("row_count"), - theme="primary", - ), - ui.value_box( - title="Mean score", - value=ui.output_text("mean_score"), - theme="bg-green", - ), - gap="20px", - ), - ui.layout_columns( - ui.card(ui.output_data_frame("data")), - style="margin-top: 20px;", - ), - ) - - -@module.server -def data_view_server( - input: Inputs, output: Outputs, session: Session, df: Callable[[], pd.DataFrame] -): - @render.text - def row_count(): - return df().shape[0] - - @render.text - def mean_score(): - return round(df()["training_score"].mean(), 2) - - @render.data_frame - def data(): - return df() diff --git a/shiny/templates/app-templates/multi-page/plots.py b/shiny/templates/app-templates/multi-page/plots.py deleted file mode 100644 index 89725942c..000000000 --- a/shiny/templates/app-templates/multi-page/plots.py +++ /dev/null @@ -1,62 +0,0 @@ -from pandas import DataFrame -from plotnine import ( - aes, - geom_abline, - geom_density, - geom_line, - ggplot, - labs, - theme_minimal, -) -from sklearn.metrics import auc, precision_recall_curve, roc_curve - - -def plot_score_distribution(df: DataFrame): - plot = ( - ggplot(df, aes(x="training_score")) - + geom_density(fill="blue", alpha=0.3) - + theme_minimal() - + labs(title="Model scores", x="Score") - ) - return plot - - -def plot_auc_curve(df: DataFrame, true_col: str, pred_col: str): - fpr, tpr, _ = roc_curve(df[true_col], df[pred_col]) - roc_auc = auc(fpr, tpr) - - roc_df = DataFrame({"fpr": fpr, "tpr": tpr}) - - plot = ( - ggplot(roc_df, aes(x="fpr", y="tpr")) - + geom_line(color="darkorange", size=1.5, show_legend=True, linetype="solid") - + geom_abline(intercept=0, slope=1, color="navy", linetype="dashed") - + labs( - title="Receiver Operating Characteristic (ROC)", - subtitle=f"AUC: {roc_auc.round(2)}", - x="False Positive Rate", - y="True Positive Rate", - ) - + theme_minimal() - ) - - return plot - - -def plot_precision_recall_curve(df: DataFrame, true_col: str, pred_col: str): - precision, recall, _ = precision_recall_curve(df[true_col], df[pred_col]) - - pr_df = DataFrame({"precision": precision, "recall": recall}) - - plot = ( - ggplot(pr_df, aes(x="recall", y="precision")) - + geom_line(color="darkorange", size=1.5, show_legend=True, linetype="solid") - + labs( - title="Precision-Recall Curve", - x="Recall", - y="Precision", - ) - + theme_minimal() - ) - - return plot diff --git a/shiny/templates/app-templates/multi-page/requirements.txt b/shiny/templates/app-templates/multi-page/requirements.txt deleted file mode 100644 index 2d342883d..000000000 --- a/shiny/templates/app-templates/multi-page/requirements.txt +++ /dev/null @@ -1,5 +0,0 @@ -numpy -pandas -plotnine -scikit-learn -shiny diff --git a/shiny/templates/app-templates/multi-page/scores.csv b/shiny/templates/app-templates/multi-page/scores.csv deleted file mode 100644 index 735d32bea..000000000 --- a/shiny/templates/app-templates/multi-page/scores.csv +++ /dev/null @@ -1,501 +0,0 @@ -id,account,date,is_electronics,training_score,training_auc,prod_score -197,Berge & Berge,2023-03-22,0,3.8569316e-4,0.706,1.2184013625090797 -147,Berge & Berge,2023-03-04,0,0.059454158,0.706,1.0458517996515018 -151,Berge & Berge,2023-02-26,1,0.43344864,0.706,1.0899208432188952 -191,Berge & Berge,2023-02-05,0,0.07182422,0.706,0.1166857347716988 -97,Berge & Berge,2023-03-20,0,0.036536578,0.706,0.1122427067173862 -42,Berge & Berge,2023-02-24,0,7.8474486e-4,0.706,1.134496258677401 -162,Berge & Berge,2023-03-18,0,0.0021639657,0.706,0.0911876468541704 -86,Berge & Berge,2023-01-31,0,0.0043587093,0.706,0.1072100007045478 -185,Berge & Berge,2023-01-29,0,0.0037410355,0.706,1.0629598986580249 -195,Berge & Berge,2023-03-09,1,0.0064030294,0.706,0.1163625609796782 -65,Berge & Berge,2023-01-12,0,0.01680326,0.706,1.1117144598925008 -0,Berge & Berge,2023-02-17,1,0.16943726,0.706,1.1618205506162425 -153,Berge & Berge,2023-01-17,0,0.009950074,0.706,1.0548759269150825 -7,Berge & Berge,2023-02-24,1,0.07434944,0.706,1.1549266491020864 -108,Berge & Berge,2023-01-16,0,0.0011474524,0.706,0.2033384586903546 -46,Berge & Berge,2023-03-30,1,0.8862941,0.706,1.128921393965052 -78,Berge & Berge,2023-01-03,0,0.10584876,0.706,1.1458269113570143 -133,Berge & Berge,2023-03-08,0,0.010757598,0.706,1.1434908567274518 -39,Berge & Berge,2023-01-31,0,0.0041037435,0.706,1.102184667768606 -50,Berge & Berge,2023-02-09,0,4.3265644e-4,0.706,0.1307080249504367 -134,Berge & Berge,2023-03-26,0,0.026536584,0.706,1.060611614694643 -14,Berge & Berge,2023-01-03,1,0.9737248,0.706,0.0482518688678079 -105,Berge & Berge,2023-02-06,0,0.2176104,0.706,1.1731506131766771 -171,Berge & Berge,2023-03-01,1,0.640394,0.706,0.0344893088752213 -56,Berge & Berge,2023-01-02,1,0.50905395,0.706,1.1379332748001638 -180,Berge & Berge,2023-03-14,0,0.0642861,0.706,1.1407096495166118 -66,Berge & Berge,2023-03-07,1,0.83971083,0.706,1.0837485612427225 -150,Berge & Berge,2023-03-04,0,0.0035049587,0.706,1.1011918088070027 -155,Berge & Berge,2023-02-15,1,0.032146282,0.706,1.120811408972631 -117,Berge & Berge,2023-01-30,1,0.020795507,0.706,0.1429895261825527 -115,Berge & Berge,2023-03-27,0,0.19586882,0.706,0.0559595407746099 -141,Berge & Berge,2023-01-30,0,0.006336129,0.706,0.0278086785772974 -135,Berge & Berge,2023-02-14,0,0.030219903,0.706,0.1026964751058112 -146,Berge & Berge,2023-02-07,0,0.6306924,0.706,0.096962911436626 -126,Berge & Berge,2023-02-11,0,0.0047198967,0.706,1.0245361267752373 -93,Berge & Berge,2023-02-01,0,0.02713681,0.706,0.1579912873196112 -33,Berge & Berge,2023-03-19,0,0.013932462,0.706,0.0321096202157411 -18,Berge & Berge,2023-02-09,0,0.0016045833,0.706,0.9290365950652846 -118,Berge & Berge,2023-03-13,0,8.186491e-4,0.706,1.171047420916767 -121,Berge & Berge,2023-03-28,0,0.042930435,0.706,0.0182820762909576 -3,Berge & Berge,2023-02-16,0,6.695764e-5,0.706,1.0702198663587448 -101,Berge & Berge,2023-03-27,1,0.596601,0.706,0.0354858430405799 -49,Berge & Berge,2023-03-04,0,0.0026418588,0.706,0.135275069008277 -25,Berge & Berge,2023-03-15,0,0.002401195,0.706,1.0803649357719638 -114,Berge & Berge,2023-03-20,0,0.004930519,0.706,0.0529895890406713 -83,Berge & Berge,2023-01-31,0,0.28393862,0.706,1.178427193769903 -26,Berge & Berge,2023-02-19,0,0.0013338907,0.706,0.0790943397275872 -8,Berge & Berge,2023-02-09,1,0.53028095,0.706,1.0790892070448892 -82,Berge & Berge,2023-02-04,0,0.07508605,0.706,1.0792260606504211 -144,Berge & Berge,2023-02-22,1,0.007376648,0.706,0.0159388925203865 -47,Berge & Berge,2023-01-09,0,0.5997613,0.706,0.1503643390126841 -158,Berge & Berge,2023-02-26,0,2.6945552e-4,0.706,0.0789026735194982 -125,Berge & Berge,2023-02-05,0,0.0020228848,0.706,0.0990200427437474 -182,Berge & Berge,2023-01-28,0,0.25345734,0.706,0.0795373098515089 -172,Berge & Berge,2023-02-14,1,0.02713681,0.706,1.114272275398885 -59,Berge & Berge,2023-02-26,0,5.998765e-4,0.706,0.1952806158676867 -106,Berge & Berge,2023-03-28,0,0.4591681,0.706,0.0333539700019854 -178,Berge & Berge,2023-03-19,0,0.0082185855,0.706,1.0660816173986911 -87,Berge & Berge,2023-01-10,1,0.0102780815,0.706,0.0648974711738842 -129,Berge & Berge,2023-01-09,0,0.08157975,0.706,1.1024817266914324 -76,Berge & Berge,2023-02-17,0,0.9813013,0.706,1.0437485590218905 -152,Berge & Berge,2023-04-01,0,0.02713681,0.706,1.0658221905441567 -10,Berge & Berge,2023-03-22,1,0.0018194998,0.706,1.162316179068009 -81,Berge & Berge,2023-02-20,0,0.0040970254,0.706,0.1344352359121208 -21,Berge & Berge,2023-01-30,0,0.17966346,0.706,0.0611759823953039 -188,Berge & Berge,2023-01-23,0,5.169117e-4,0.706,0.0605163725785426 -91,Berge & Berge,2023-01-20,0,0.012792897,0.706,1.1745493364442443 -168,Berge & Berge,2023-02-06,1,0.13991953,0.706,0.0733946355292885 -103,Berge & Berge,2023-01-11,0,0.004973566,0.706,1.0696554116486614 -73,Berge & Berge,2023-02-06,0,0.0031296157,0.706,0.196424055291592 -99,Berge & Berge,2023-03-19,1,0.8845187,0.706,1.0950902714355684 -130,Berge & Berge,2023-03-29,0,0.8360748,0.706,0.1109771893645958 -143,Berge & Berge,2023-02-12,0,0.02713681,0.706,0.0953839965711691 -31,Berge & Berge,2023-03-03,0,0.005173868,0.706,1.0095134249839255 -167,Berge & Berge,2023-02-28,0,0.024421345,0.706,1.185489811661379 -68,Berge & Berge,2023-02-08,0,0.013632686,0.706,0.1176918009270848 -102,Berge & Berge,2023-03-19,0,1.5559672e-4,0.706,1.065979804935678 -84,Berge & Berge,2023-03-29,0,0.02713681,0.706,1.1773390305290543 -32,Berge & Berge,2023-01-24,0,0.4591681,0.706,1.1071007317674466 -160,Berge & Berge,2023-01-09,0,0.006623661,0.706,0.1152776457328768 -164,Berge & Berge,2023-02-22,0,0.28222394,0.706,1.1356251790637168 -89,Berge & Berge,2023-02-03,0,0.03192866,0.706,1.0644034733853214 -94,Berge & Berge,2023-01-28,0,0.0071903053,0.706,0.1056048701372983 -45,Berge & Berge,2023-01-12,0,0.0042942734,0.706,0.1082480366955144 -24,Berge & Berge,2023-03-19,0,0.019535521,0.706,1.0433825213672572 -166,Berge & Berge,2023-02-26,0,0.0060619935,0.706,0.0564479161802195 -77,Berge & Berge,2023-01-31,0,0.0011749135,0.706,1.087268528455399 -95,Berge & Berge,2023-03-03,0,0.08239752,0.706,0.0533042139694344 -58,Berge & Berge,2023-02-12,1,0.041278575,0.706,1.0085201689574197 -148,Berge & Berge,2023-02-26,0,0.0024912758,0.706,1.1628297802769785 -72,Berge & Berge,2023-01-29,0,0.002776768,0.706,1.1740788046681194 -154,Berge & Berge,2023-01-25,0,0.05633103,0.706,1.075950784146292 -54,Berge & Berge,2023-03-23,0,1.5559672e-4,0.706,1.1088940882230371 -174,Berge & Berge,2023-01-15,0,0.0024278944,0.706,0.0508260666041443 -60,Berge & Berge,2023-03-23,0,0.07136285,0.706,0.1123962378606316 -165,Berge & Berge,2023-02-06,0,0.26181462,0.706,1.048973603249126 -161,Berge & Berge,2023-02-24,0,0.0015807872,0.706,1.0699741196609214 -184,Berge & Berge,2023-02-22,0,0.02713681,0.706,-0.0167169970518766 -40,Berge & Berge,2023-03-29,1,0.86764634,0.706,0.1325794389828509 -44,Berge & Berge,2023-03-12,0,0.007022531,0.706,0.11879110789460991 -237,Fritsch & Fritsch,2023-01-14,0,2.358206e-4,0.727,1.0956762144637295 -372,Fritsch & Fritsch,2023-01-30,0,0.0137081025,0.727,0.0451347495536708 -281,Fritsch & Fritsch,2023-03-08,0,0.009095548,0.727,0.1078499667525478 -201,Fritsch & Fritsch,2023-03-25,0,3.8113075e-4,0.727,1.0832891563613951 -377,Fritsch & Fritsch,2023-02-26,0,0.015281866,0.727,0.1219644374830517 -287,Fritsch & Fritsch,2023-03-03,0,1.2389862e-4,0.727,0.1180714382195422 -211,Fritsch & Fritsch,2023-03-31,1,0.11702571,0.727,0.0875116987282002 -366,Fritsch & Fritsch,2023-02-06,0,0.048854023,0.727,1.1479159358438384 -336,Fritsch & Fritsch,2023-01-13,0,0.053801402,0.727,1.0920391641713827 -210,Fritsch & Fritsch,2023-02-15,0,0.0062982617,0.727,0.0189330179328656 -378,Fritsch & Fritsch,2023-01-29,0,6.596002e-4,0.727,1.1219390194293912 -294,Fritsch & Fritsch,2023-03-21,0,0.85546285,0.727,1.1038427721060056 -248,Fritsch & Fritsch,2023-03-27,0,0.03374543,0.727,0.079659192091873 -334,Fritsch & Fritsch,2023-02-27,0,0.010514908,0.727,0.0664022783020107 -228,Fritsch & Fritsch,2023-03-19,1,0.026538111,0.727,1.1274705818285398 -250,Fritsch & Fritsch,2023-01-24,0,0.5458885,0.727,1.1070096701184933 -314,Fritsch & Fritsch,2023-02-27,0,2.562467e-4,0.727,1.1565316534314074 -341,Fritsch & Fritsch,2023-02-27,0,0.005878947,0.727,1.0750012447802877 -286,Fritsch & Fritsch,2023-02-14,0,0.18391743,0.727,1.151114538064511 -361,Fritsch & Fritsch,2023-01-01,0,0.057021406,0.727,0.0389095880586878 -244,Fritsch & Fritsch,2023-03-27,0,5.844329e-4,0.727,0.1628508218939803 -279,Fritsch & Fritsch,2023-02-17,0,0.101148106,0.727,0.098055841370775 -302,Fritsch & Fritsch,2023-01-05,0,0.008378361,0.727,1.1056681855338812 -296,Fritsch & Fritsch,2023-03-03,1,0.9737248,0.727,1.2940866046734034 -215,Fritsch & Fritsch,2023-03-23,1,0.44451058,0.727,0.1485946888358069 -264,Fritsch & Fritsch,2023-01-17,0,0.011026854000000001,0.727,1.0971973746858978 -263,Fritsch & Fritsch,2023-03-01,0,0.017002124,0.727,0.0652936212357286 -349,Fritsch & Fritsch,2023-03-07,0,0.052240945,0.727,1.1494782553396878 -339,Fritsch & Fritsch,2023-04-01,1,0.82110965,0.727,0.1658443904376221 -301,Fritsch & Fritsch,2023-01-16,0,0.051902127,0.727,0.1013863483700123 -259,Fritsch & Fritsch,2023-01-25,0,0.011026854000000001,0.727,1.166177513433963 -300,Fritsch & Fritsch,2023-01-29,0,4.531328e-4,0.727,0.1410733625721101 -236,Fritsch & Fritsch,2023-01-30,0,0.03192866,0.727,0.1969263375585029 -291,Fritsch & Fritsch,2023-02-17,0,0.21523075,0.727,1.1371311510740738 -221,Fritsch & Fritsch,2023-03-10,0,0.47267234,0.727,0.051463165243258203 -391,Fritsch & Fritsch,2023-01-19,0,0.0038934741,0.727,1.0637377195385729 -320,Fritsch & Fritsch,2023-01-30,0,0.0037223082,0.727,1.050446994947837 -297,Fritsch & Fritsch,2023-03-04,0,0.021917637,0.727,1.1814927128062764 -254,Fritsch & Fritsch,2023-02-15,0,0.0057278997,0.727,0.139348971846723 -295,Fritsch & Fritsch,2023-02-28,0,0.094302475,0.727,1.0195612826238587 -266,Fritsch & Fritsch,2023-02-02,0,0.02713681,0.727,1.1567571642740544 -280,Fritsch & Fritsch,2023-01-02,1,0.28761825,0.727,1.1666757772021707 -397,Fritsch & Fritsch,2023-01-01,0,8.14293e-4,0.727,1.2023825884127286 -203,Fritsch & Fritsch,2023-01-23,1,0.015067808,0.727,1.117227979569394 -396,Fritsch & Fritsch,2023-03-10,0,0.26286763,0.727,0.0472016017529595 -289,Fritsch & Fritsch,2023-01-30,0,0.003978128,0.727,1.1127618378000312 -258,Fritsch & Fritsch,2023-01-06,0,2.3396911e-4,0.727,0.129483999651832 -230,Fritsch & Fritsch,2023-03-25,0,0.007413884,0.727,1.0790157307607944 -232,Fritsch & Fritsch,2023-03-22,1,0.39736626,0.727,1.045809472269621 -309,Fritsch & Fritsch,2023-03-31,1,0.0646534,0.727,1.142513464846696 -257,Fritsch & Fritsch,2023-02-05,0,4.2030227e-4,0.727,0.1721043219147598 -390,Fritsch & Fritsch,2023-03-07,0,0.18442275,0.727,0.0294220988525324 -388,Fritsch & Fritsch,2023-03-24,1,0.7637683,0.727,0.1303454445493918 -380,Fritsch & Fritsch,2023-01-06,1,0.5033501,0.727,0.0947911901784009 -331,Fritsch & Fritsch,2023-02-04,0,0.018333044,0.727,0.0810985180871314 -311,Fritsch & Fritsch,2023-02-20,0,0.40999982,0.727,0.1024602493146951 -209,Fritsch & Fritsch,2023-02-12,0,0.022420665,0.727,0.1970011502481187 -222,Fritsch & Fritsch,2023-01-31,0,0.17173569,0.727,1.0968446501834528 -223,Fritsch & Fritsch,2023-01-18,0,0.30898094,0.727,0.0518436169871427 -285,Fritsch & Fritsch,2023-01-13,0,0.13098921,0.727,1.1155843033928434 -398,Fritsch & Fritsch,2023-01-02,0,0.044065084,0.727,1.121770815435699 -204,Fritsch & Fritsch,2023-03-11,0,3.1946754e-4,0.727,1.079832501957774 -272,Fritsch & Fritsch,2023-03-13,0,0.14330977,0.727,1.040274436123384 -269,Fritsch & Fritsch,2023-01-12,0,1.6662259e-4,0.727,0.1559544665610497 -326,Fritsch & Fritsch,2023-01-14,1,0.032594856,0.727,0.1580775229894702 -384,Fritsch & Fritsch,2023-01-05,0,0.01407777,0.727,1.0922793525778989 -205,Fritsch & Fritsch,2023-03-04,0,0.0039401073,0.727,1.0394201743300855 -220,Fritsch & Fritsch,2023-01-01,1,0.01722058,0.727,1.1304432242651643 -328,Fritsch & Fritsch,2023-02-01,1,0.1263778,0.727,0.0689098306734142 -365,Fritsch & Fritsch,2023-02-16,1,0.055628844,0.727,1.1045521682924666 -324,Fritsch & Fritsch,2023-03-11,0,0.8320204,0.727,0.1759290575850101 -308,Fritsch & Fritsch,2023-01-07,0,0.0060746167,0.727,0.1107005170577313 -354,Fritsch & Fritsch,2023-02-24,1,0.025668005,0.727,0.1203832188132277 -219,Fritsch & Fritsch,2023-03-15,0,0.0011474524,0.727,1.087878682539265 -242,Fritsch & Fritsch,2023-02-05,0,0.0038046008,0.727,1.1380690977378072 -212,Fritsch & Fritsch,2023-03-25,0,0.008506459,0.727,0.1134653067802029 -261,Fritsch & Fritsch,2023-03-23,0,0.035150588,0.727,1.1247590897600812 -202,Fritsch & Fritsch,2023-02-11,0,0.007411905,0.727,1.0427256365351536 -292,Fritsch & Fritsch,2023-01-01,0,0.20810522,0.727,0.1147893082208852 -252,Fritsch & Fritsch,2023-03-25,0,0.026536584,0.727,1.0523276552272216 -357,Fritsch & Fritsch,2023-01-23,1,0.124237865,0.727,1.085033131848418 -370,Fritsch & Fritsch,2023-02-19,1,0.7714718,0.727,0.0910457374281693 -327,Fritsch & Fritsch,2023-02-05,0,0.14883229,0.727,1.0835013890515015 -226,Fritsch & Fritsch,2023-03-18,0,0.0850883,0.727,0.1675372381895208 -217,Fritsch & Fritsch,2023-01-22,0,0.008597593,0.727,0.1185780133793893 -387,Fritsch & Fritsch,2023-01-31,0,0.08615121,0.727,0.057082354870273 -283,Fritsch & Fritsch,2023-01-13,0,8.573997e-4,0.727,1.1201189700314946 -318,Fritsch & Fritsch,2023-01-20,0,0.021570161,0.727,0.1110699740834348 -234,Fritsch & Fritsch,2023-02-23,0,0.0011474524,0.727,1.0929293036804897 -231,Fritsch & Fritsch,2023-03-01,0,0.02713681,0.727,1.0895114694218777 -325,Fritsch & Fritsch,2023-01-28,1,0.640394,0.727,1.1344822135861288 -395,Fritsch & Fritsch,2023-02-12,0,2.562467e-4,0.727,0.072384901076557 -352,Fritsch & Fritsch,2023-03-18,0,0.020198904,0.727,0.0771729244660083 -362,Fritsch & Fritsch,2023-02-12,0,0.021032954,0.727,1.08181651904278 -246,Fritsch & Fritsch,2023-02-06,0,0.0477094,0.727,0.0680249288179094 -356,Fritsch & Fritsch,2023-02-02,0,0.04010874,0.727,0.0768282452841528 -375,Fritsch & Fritsch,2023-01-30,1,0.25526205,0.727,0.081957682968991 -359,Fritsch & Fritsch,2023-04-01,1,0.027723527,0.727,1.1274603051731444 -315,Fritsch & Fritsch,2023-01-16,0,0.89041793,0.727,0.0593836947517993 -214,Fritsch & Fritsch,2023-01-03,0,0.0061433944,0.727,0.1931007138527479 -450,Hintz & Hintz,2023-03-09,0,0.1701673,0.934,1.1068552243842018 -538,Hintz & Hintz,2023-02-01,1,0.8598257,0.934,0.1044032735979264 -443,Hintz & Hintz,2023-01-28,1,0.06102638,0.934,1.126421115181424 -490,Hintz & Hintz,2023-03-03,1,0.0244589,0.934,1.1846717309580177 -564,Hintz & Hintz,2023-01-20,0,6.792998e-4,0.934,0.1230877877855508 -589,Hintz & Hintz,2023-01-13,0,0.044336256,0.934,0.955499082470552 -458,Hintz & Hintz,2023-02-22,1,0.95590156,0.934,1.1031464584348014 -578,Hintz & Hintz,2023-01-15,1,0.07901703,0.934,1.0937359258937789 -426,Hintz & Hintz,2023-03-13,1,0.2623574,0.934,0.1728583190721533 -563,Hintz & Hintz,2023-02-01,0,0.06882919,0.934,1.1771324857029042 -480,Hintz & Hintz,2023-03-21,0,0.06367789,0.934,1.108782934831115 -471,Hintz & Hintz,2023-03-07,0,0.06850347,0.934,1.1948685870458229 -547,Hintz & Hintz,2023-01-26,1,0.01722058,0.934,0.0312985160112934 -454,Hintz & Hintz,2023-01-28,0,0.03110653,0.934,1.1161153062243407 -587,Hintz & Hintz,2023-02-10,1,0.19495015,0.934,0.174837639078212 -409,Hintz & Hintz,2023-02-06,0,0.003525351,0.934,1.062705988474564 -542,Hintz & Hintz,2023-03-25,0,5.5642764e-4,0.934,0.0311436021264635 -548,Hintz & Hintz,2023-02-14,1,0.14660004,0.934,0.1563855280240541 -456,Hintz & Hintz,2023-03-05,1,0.5646388,0.934,1.122043722588777 -586,Hintz & Hintz,2023-01-02,0,0.0016085407,0.934,1.0388789699491705 -427,Hintz & Hintz,2023-01-09,0,4.366419e-4,0.934,1.1433223524247005 -522,Hintz & Hintz,2023-01-21,0,0.040729154,0.934,0.0256051623402911 -449,Hintz & Hintz,2023-03-01,0,0.05801831,0.934,0.1600088488465246 -474,Hintz & Hintz,2023-02-05,0,0.034921747,0.934,1.167358199984491 -445,Hintz & Hintz,2023-01-23,0,0.014691184,0.934,1.133676497730964 -505,Hintz & Hintz,2023-03-24,1,0.8621201,0.934,0.1337478543164452 -410,Hintz & Hintz,2023-03-31,1,0.88824934,0.934,1.1323931258191502 -462,Hintz & Hintz,2023-03-31,0,0.02151093,0.934,0.1062821403410974 -557,Hintz & Hintz,2023-02-14,0,0.03179885,0.934,1.049720145250293 -401,Hintz & Hintz,2023-02-15,0,0.0012305528,0.934,1.053233198138479 -574,Hintz & Hintz,2023-01-26,0,0.5919985,0.934,0.0683046099830677 -517,Hintz & Hintz,2023-03-20,1,0.18926267,0.934,0.1716475392570836 -477,Hintz & Hintz,2023-03-17,0,0.0073302207,0.934,1.127131891662609 -579,Hintz & Hintz,2023-01-02,0,0.016731959,0.934,1.0654368002494965 -432,Hintz & Hintz,2023-02-09,0,0.02713681,0.934,1.1380909910930856 -524,Hintz & Hintz,2023-03-23,0,0.004010897,0.934,1.1202351027992503 -455,Hintz & Hintz,2023-02-13,0,0.002227653,0.934,1.0829340975382702 -561,Hintz & Hintz,2023-01-19,1,0.09165248,0.934,0.1037107972905217 -554,Hintz & Hintz,2023-02-24,0,0.0013029911,0.934,1.0779649551105308 -541,Hintz & Hintz,2023-03-26,0,0.0062745274,0.934,0.0326063299728535 -512,Hintz & Hintz,2023-02-12,0,0.02713681,0.934,1.165237482938431 -453,Hintz & Hintz,2023-02-28,0,0.0105454875,0.934,0.0742547872610601 -599,Hintz & Hintz,2023-03-10,0,0.022691585,0.934,1.078117422744088 -504,Hintz & Hintz,2023-01-14,0,0.0012587371,0.934,0.1577060457590473 -581,Hintz & Hintz,2023-04-01,0,0.0074251355,0.934,0.9917618788478576 -519,Hintz & Hintz,2023-01-24,0,0.41233888,0.934,0.0560391794333758 -435,Hintz & Hintz,2023-01-06,0,7.100313e-4,0.934,1.1219129034161246 -478,Hintz & Hintz,2023-03-25,0,0.12977844,0.934,0.0990493307054747 -543,Hintz & Hintz,2023-03-31,0,0.014825128,0.934,1.0504157172366018 -416,Hintz & Hintz,2023-01-09,1,0.31836855,0.934,1.134545952022915 -452,Hintz & Hintz,2023-01-17,0,0.02713681,0.934,1.1540804647565972 -509,Hintz & Hintz,2023-04-01,0,3.8566397e-4,0.934,0.1071000524414627 -595,Hintz & Hintz,2023-01-22,0,0.05322563,0.934,1.1061557953119374 -493,Hintz & Hintz,2023-03-08,0,0.0027624562,0.934,0.1244750210565094 -511,Hintz & Hintz,2023-02-04,0,2.8499114e-4,0.934,1.1541611607030258 -546,Hintz & Hintz,2023-01-14,0,0.0016689355,0.934,0.1539256340391158 -415,Hintz & Hintz,2023-01-25,0,0.0030429794,0.934,0.0890199978786554 -555,Hintz & Hintz,2023-02-28,0,0.8396749,0.934,1.0932462456408627 -417,Hintz & Hintz,2023-03-20,0,0.20999487,0.934,0.1072377732395115 -532,Hintz & Hintz,2023-04-01,0,0.0035428032,0.934,0.1882874038866111 -413,Hintz & Hintz,2023-01-03,0,0.02713681,0.934,1.0791669209733907 -534,Hintz & Hintz,2023-01-18,0,0.01722058,0.934,0.0726831353010628 -444,Hintz & Hintz,2023-02-09,0,0.003961715,0.934,1.0281795685345705 -568,Hintz & Hintz,2023-03-11,0,0.011916836,0.934,0.148138560058259 -442,Hintz & Hintz,2023-01-19,1,0.016262366,0.934,0.1278908670435503 -482,Hintz & Hintz,2023-01-17,0,0.0075225546,0.934,1.0951944177968274 -420,Hintz & Hintz,2023-03-01,0,0.014386703,0.934,0.0596753877944121 -500,Hintz & Hintz,2023-03-26,0,9.4913295e-4,0.934,0.1878545592540821 -489,Hintz & Hintz,2023-03-11,0,0.009899498,0.934,0.0507569225199717 -566,Hintz & Hintz,2023-02-21,1,0.32672116,0.934,1.1168607644113324 -418,Hintz & Hintz,2023-03-30,0,0.035792656,0.934,0.0793191031104142 -464,Hintz & Hintz,2023-03-09,0,0.001030728,0.934,1.2176073646160606 -488,Hintz & Hintz,2023-01-01,0,0.0019740025,0.934,1.07045941125935 -560,Hintz & Hintz,2023-02-19,1,0.87406754,0.934,1.1840352414983952 -508,Hintz & Hintz,2023-03-29,0,0.0059008,0.934,1.0041977643989333 -562,Hintz & Hintz,2023-01-28,0,0.25797996,0.934,0.1130850266731972 -446,Hintz & Hintz,2023-01-30,1,0.3901382,0.934,1.1247395253124084 -487,Hintz & Hintz,2023-03-17,1,0.050020643,0.934,0.10501316691808 -486,Hintz & Hintz,2023-02-28,0,0.52094424,0.934,0.0442753829011319 -507,Hintz & Hintz,2023-01-03,0,0.006595796,0.934,1.0438526458466548 -551,Hintz & Hintz,2023-01-25,1,0.14365149,0.934,0.9934708856639304 -535,Hintz & Hintz,2023-01-13,0,0.0069284798,0.934,0.0693340868442309 -597,Hintz & Hintz,2023-03-15,0,5.4465205e-4,0.934,0.0293831628491591 -553,Hintz & Hintz,2023-04-01,0,0.0011474524,0.934,0.089332540325546 -501,Hintz & Hintz,2023-01-31,1,0.96700424,0.934,0.1421078480165114 -514,Hintz & Hintz,2023-03-07,0,0.0023783434,0.934,0.1932806491927614 -526,Hintz & Hintz,2023-02-24,1,0.9467816,0.934,1.0392284145694073 -565,Hintz & Hintz,2023-03-19,1,0.98436683,0.934,0.1623319127713567 -544,Hintz & Hintz,2023-01-11,1,0.0013307774,0.934,1.1208364847296046 -400,Hintz & Hintz,2023-02-13,1,0.23045018,0.934,1.1005934567176343 -422,Hintz & Hintz,2023-02-12,0,8.499933e-4,0.934,0.0990542898044073 -523,Hintz & Hintz,2023-01-26,0,0.02713681,0.934,0.1006112038224418 -583,Hintz & Hintz,2023-03-09,1,0.9309046,0.934,0.020886765584435 -481,Hintz & Hintz,2023-02-04,0,0.016241034,0.934,0.0476784537561671 -499,Hintz & Hintz,2023-01-31,0,0.02713681,0.934,1.118459299537331 -573,Hintz & Hintz,2023-02-18,0,0.64166915,0.934,0.0722461706948132 -407,Hintz & Hintz,2023-02-02,0,0.008933006,0.934,1.107735797143414 -533,Hintz & Hintz,2023-03-28,1,0.0011969404,0.934,1.0584957994495785 -582,Hintz & Hintz,2023-03-13,0,0.039883167,0.934,0.1430526701467971 -591,Hintz & Hintz,2023-03-18,0,1.21852885e-4,0.934,1.1563141957899683 -731,Mosciski and Sons,2023-03-26,1,0.0013307774,0.8879999999999999,1.185076311722786 -647,Mosciski and Sons,2023-03-13,0,0.10936674,0.8879999999999999,1.0674774200149009 -729,Mosciski and Sons,2023-02-11,0,1.9797268e-4,0.8879999999999999,1.1154570969083917 -727,Mosciski and Sons,2023-02-02,0,0.003229611,0.8879999999999999,0.0727039108340473 -612,Mosciski and Sons,2023-01-19,1,0.04316289,0.8879999999999999,0.1048574129070726 -614,Mosciski and Sons,2023-01-27,0,5.958507e-4,0.8879999999999999,0.0830258933963685 -621,Mosciski and Sons,2023-01-23,1,0.86696565,0.8879999999999999,1.1018535819282855 -693,Mosciski and Sons,2023-03-26,0,0.5202152,0.8879999999999999,0.1065532567252535 -681,Mosciski and Sons,2023-02-11,1,0.51045996,0.8879999999999999,1.129195399923456 -676,Mosciski and Sons,2023-02-05,0,0.0010871114,0.8879999999999999,0.1450376910946741 -707,Mosciski and Sons,2023-02-14,0,0.008150931,0.8879999999999999,0.1251337710289197 -713,Mosciski and Sons,2023-01-26,0,5.2595546e-4,0.8879999999999999,1.0856008079683452 -789,Mosciski and Sons,2023-03-21,0,0.5256873,0.8879999999999999,0.0592039749503366 -654,Mosciski and Sons,2023-02-15,0,0.049613122,0.8879999999999999,1.123088731753324 -660,Mosciski and Sons,2023-01-03,0,0.018622428,0.8879999999999999,0.1009149431519532 -701,Mosciski and Sons,2023-03-30,0,0.03476548,0.8879999999999999,0.1138782460352903 -611,Mosciski and Sons,2023-03-27,0,0.0038235756,0.8879999999999999,1.0502349884156992 -629,Mosciski and Sons,2023-01-04,0,0.0642861,0.8879999999999999,0.0382192519484954 -625,Mosciski and Sons,2023-03-23,0,0.012245923,0.8879999999999999,0.1516688115062547 -708,Mosciski and Sons,2023-01-06,0,0.006585475,0.8879999999999999,0.1655924444801469 -636,Mosciski and Sons,2023-01-24,1,0.10234994,0.8879999999999999,1.0051543185081244 -615,Mosciski and Sons,2023-03-14,1,0.858326,0.8879999999999999,0.1184317770696613 -640,Mosciski and Sons,2023-03-28,0,0.0021567128,0.8879999999999999,0.0868200979628904 -649,Mosciski and Sons,2023-03-28,0,0.4418892,0.8879999999999999,0.1015527753588054 -628,Mosciski and Sons,2023-02-17,0,0.12762818,0.8879999999999999,0.1245685942081463 -769,Mosciski and Sons,2023-03-02,1,0.009295199,0.8879999999999999,1.108677468175114 -736,Mosciski and Sons,2023-03-27,1,0.92429477,0.8879999999999999,1.139441270614971 -627,Mosciski and Sons,2023-04-01,0,4.3627844e-4,0.8879999999999999,0.1225426942810387 -743,Mosciski and Sons,2023-03-19,0,0.054935087,0.8879999999999999,-0.0014822862969038 -623,Mosciski and Sons,2023-02-23,1,0.9066716,0.8879999999999999,1.1814889973721443 -784,Mosciski and Sons,2023-01-30,0,0.09775246,0.8879999999999999,0.1894654289692666 -600,Mosciski and Sons,2023-01-14,0,0.003571191,0.8879999999999999,0.1922671661845837 -724,Mosciski and Sons,2023-02-01,0,0.0035205702,0.8879999999999999,1.153591280835914 -639,Mosciski and Sons,2023-01-15,0,0.056981664,0.8879999999999999,0.1269815934052153 -702,Mosciski and Sons,2023-01-07,0,0.0053847716,0.8879999999999999,0.0710617869061485 -786,Mosciski and Sons,2023-01-18,0,1.6935471e-4,0.8879999999999999,0.999113216845917 -648,Mosciski and Sons,2023-03-17,0,0.021917637,0.8879999999999999,1.002083290141563 -692,Mosciski and Sons,2023-03-07,0,0.038905066,0.8879999999999999,1.1346642504097424 -711,Mosciski and Sons,2023-02-21,0,0.7472271,0.8879999999999999,0.1158662295984764 -766,Mosciski and Sons,2023-03-03,0,0.010710109,0.8879999999999999,0.0681001621204367 -616,Mosciski and Sons,2023-02-23,1,0.25494322,0.8879999999999999,0.1360742873157363 -667,Mosciski and Sons,2023-03-30,1,0.95203143,0.8879999999999999,1.1705365402619838 -675,Mosciski and Sons,2023-02-23,0,0.023900347,0.8879999999999999,0.1058727373167783 -617,Mosciski and Sons,2023-02-23,0,0.933767,0.8879999999999999,1.0887264457146264 -687,Mosciski and Sons,2023-03-23,0,0.016035909,0.8879999999999999,1.0806470003952202 -775,Mosciski and Sons,2023-01-18,0,0.0061433944,0.8879999999999999,0.0841596130038128 -682,Mosciski and Sons,2023-01-26,0,0.0843278,0.8879999999999999,1.0584093469214324 -688,Mosciski and Sons,2023-02-17,0,4.8195766e-4,0.8879999999999999,1.0052444421266116 -655,Mosciski and Sons,2023-03-04,0,0.15788873,0.8879999999999999,1.1227909935025977 -646,Mosciski and Sons,2023-02-01,0,0.02713681,0.8879999999999999,0.1372362240201376 -673,Mosciski and Sons,2023-03-06,0,2.0417472e-4,0.8879999999999999,1.0514170086462458 -689,Mosciski and Sons,2023-02-17,0,0.02713681,0.8879999999999999,1.0991564354531485 -694,Mosciski and Sons,2023-01-26,0,0.077929676,0.8879999999999999,0.0732293649370238 -755,Mosciski and Sons,2023-01-22,0,0.0018567637,0.8879999999999999,1.069649564472707 -773,Mosciski and Sons,2023-02-19,0,0.01319327,0.8879999999999999,0.0652957553599793 -796,Mosciski and Sons,2023-02-14,1,0.5423872,0.8879999999999999,1.1260448497925255 -754,Mosciski and Sons,2023-04-01,0,0.02713681,0.8879999999999999,1.092222782785492 -795,Mosciski and Sons,2023-01-13,0,0.0642861,0.8879999999999999,1.0782431349221615 -777,Mosciski and Sons,2023-01-14,0,0.003410091,0.8879999999999999,0.1235515440442039 -748,Mosciski and Sons,2023-02-25,0,0.014180996,0.8879999999999999,0.058369806591113 -791,Mosciski and Sons,2023-01-23,0,0.11277599,0.8879999999999999,0.1522006628542877 -738,Mosciski and Sons,2023-03-23,0,2.1690133e-4,0.8879999999999999,0.207276174108371 -774,Mosciski and Sons,2023-01-25,0,0.19778694,0.8879999999999999,0.0340935652796324 -792,Mosciski and Sons,2023-03-08,1,0.9268653,0.8879999999999999,0.1117071715622744 -793,Mosciski and Sons,2023-01-25,0,0.3713521,0.8879999999999999,1.0595568794809826 -691,Mosciski and Sons,2023-01-10,0,0.003035573,0.8879999999999999,0.1097194484226117 -604,Mosciski and Sons,2023-02-24,0,0.91099197,0.8879999999999999,1.157739494394615 -618,Mosciski and Sons,2023-01-19,1,0.06289425,0.8879999999999999,1.019638173073521 -757,Mosciski and Sons,2023-03-05,0,0.003167176,0.8879999999999999,1.0827029639442531 -620,Mosciski and Sons,2023-01-01,1,0.98540074,0.8879999999999999,1.1415314160425178 -630,Mosciski and Sons,2023-01-03,0,0.81901187,0.8879999999999999,1.1038088417094063 -715,Mosciski and Sons,2023-01-12,1,0.9535631,0.8879999999999999,1.0107181258409408 -679,Mosciski and Sons,2023-03-27,0,0.13858669,0.8879999999999999,0.0986381004135453 -669,Mosciski and Sons,2023-01-05,1,0.9289174,0.8879999999999999,0.1281639269376895 -767,Mosciski and Sons,2023-02-15,0,0.05920328,0.8879999999999999,1.160854106332284 -732,Mosciski and Sons,2023-02-14,0,0.02713681,0.8879999999999999,1.082592800477486 -690,Mosciski and Sons,2023-03-07,1,0.005718609,0.8879999999999999,1.1361694677257084 -734,Mosciski and Sons,2023-03-19,0,0.0642861,0.8879999999999999,1.0892647025438311 -772,Mosciski and Sons,2023-02-03,1,0.009995974,0.8879999999999999,0.0727606859252713 -607,Mosciski and Sons,2023-03-28,0,0.9004678,0.8879999999999999,1.0280517606392372 -765,Mosciski and Sons,2023-01-11,0,0.016281936,0.8879999999999999,1.1349394300608822 -685,Mosciski and Sons,2023-01-25,0,0.013594767,0.8879999999999999,1.0738504711377068 -741,Mosciski and Sons,2023-03-01,0,0.010847072,0.8879999999999999,1.11725468708371 -721,Mosciski and Sons,2023-01-17,1,0.92699265,0.8879999999999999,1.0671492159044886 -787,Mosciski and Sons,2023-02-22,0,0.004928262,0.8879999999999999,1.1141644612043462 -619,Mosciski and Sons,2023-02-06,0,1.6374596e-4,0.8879999999999999,0.002592094407338 -776,Mosciski and Sons,2023-03-19,0,0.02713681,0.8879999999999999,0.1030663456404976 -780,Mosciski and Sons,2023-02-19,0,0.8177334,0.8879999999999999,1.0564186831794762 -703,Mosciski and Sons,2023-03-31,0,0.0046089096,0.8879999999999999,1.1129694972848172 -601,Mosciski and Sons,2023-03-03,0,0.005612415,0.8879999999999999,0.0743810749090334 -762,Mosciski and Sons,2023-02-11,0,0.010868683,0.8879999999999999,-0.0079396866725947 -656,Mosciski and Sons,2023-02-27,0,0.016419558,0.8879999999999999,1.0635699540448271 -752,Mosciski and Sons,2023-01-29,0,0.02713681,0.8879999999999999,0.0681084715573242 -680,Mosciski and Sons,2023-01-17,0,0.039191496,0.8879999999999999,0.0939338477458055 -760,Mosciski and Sons,2023-03-01,0,0.0014032405,0.8879999999999999,1.0660642438654897 -666,Mosciski and Sons,2023-01-24,0,0.010427132,0.8879999999999999,1.099002169980558 -790,Mosciski and Sons,2023-02-20,0,0.51385003,0.8879999999999999,1.1702777876683037 -699,Mosciski and Sons,2023-01-06,1,0.004392893,0.8879999999999999,1.1790449354653538 -643,Mosciski and Sons,2023-02-11,0,0.4886055,0.8879999999999999,0.0130214920562096 -728,Mosciski and Sons,2023-03-14,0,0.02713681,0.8879999999999999,1.0923704911045589 -901,Wolff Ltd,2023-03-21,0,0.0015656011,0.726,1.1073800884366118 -873,Wolff Ltd,2023-01-01,0,0.02713681,0.726,1.1100978329479614 -837,Wolff Ltd,2023-01-09,1,0.014136449,0.726,0.1290009155954002 -914,Wolff Ltd,2023-03-12,0,0.02455339,0.726,1.1501850410239252 -967,Wolff Ltd,2023-02-14,0,0.007698572,0.726,1.1341592164877596 -822,Wolff Ltd,2023-03-10,1,0.9264066,0.726,0.073899914275038 -831,Wolff Ltd,2023-03-09,0,0.019275283,0.726,0.0376105785869047 -989,Wolff Ltd,2023-03-27,0,0.024350211,0.726,1.1158046999184683 -959,Wolff Ltd,2023-01-20,0,9.1150746e-4,0.726,0.1292121514075647 -894,Wolff Ltd,2023-01-10,1,0.20550598,0.726,0.0597702756159074 -860,Wolff Ltd,2023-01-30,0,0.0016855258,0.726,0.1182546013805456 -982,Wolff Ltd,2023-01-27,1,0.7256641,0.726,1.1000028156503965 -868,Wolff Ltd,2023-02-16,0,0.021917637,0.726,1.1287680953090804 -910,Wolff Ltd,2023-03-02,0,2.0253863e-4,0.726,0.0714257898478195 -848,Wolff Ltd,2023-01-08,0,0.23963508,0.726,1.036054449524078 -877,Wolff Ltd,2023-01-04,0,0.05022146,0.726,1.101235670699939 -813,Wolff Ltd,2023-02-09,0,7.453233e-4,0.726,0.1547157813235877 -948,Wolff Ltd,2023-02-05,0,0.0037316016,0.726,1.0802703915559262 -969,Wolff Ltd,2023-03-19,1,0.51019555,0.726,0.0552505468881667 -817,Wolff Ltd,2023-02-28,0,0.017986858,0.726,0.0623583218467312 -980,Wolff Ltd,2023-03-21,0,0.06911792,0.726,1.0609929597275138 -900,Wolff Ltd,2023-02-18,0,0.0023566363,0.726,1.107596958094453 -903,Wolff Ltd,2023-01-19,0,0.023743665,0.726,0.0336200123711356 -869,Wolff Ltd,2023-03-07,0,0.006336129,0.726,1.1350904913945827 -979,Wolff Ltd,2023-01-18,0,0.1267301,0.726,1.0659414564172136 -818,Wolff Ltd,2023-01-12,0,0.045687977,0.726,0.0794832560707618 -867,Wolff Ltd,2023-03-12,0,0.002391879,0.726,0.0888979294066529 -821,Wolff Ltd,2023-03-13,0,0.02713681,0.726,1.1043172196605493 -960,Wolff Ltd,2023-01-09,0,7.173031e-4,0.726,1.0849204359218412 -843,Wolff Ltd,2023-02-02,1,0.91909254,0.726,1.151552812209392 -957,Wolff Ltd,2023-01-04,0,0.005344911,0.726,1.1648272738887036 -908,Wolff Ltd,2023-02-06,0,0.01743073,0.726,1.0560925622372286 -966,Wolff Ltd,2023-01-21,0,0.0038639638,0.726,0.0614188235887227 -986,Wolff Ltd,2023-03-15,0,0.004426663,0.726,0.1166540480987674 -928,Wolff Ltd,2023-03-24,0,0.02713681,0.726,1.0918009708604162 -942,Wolff Ltd,2023-02-15,0,0.040216736,0.726,1.0593747529470676 -815,Wolff Ltd,2023-02-04,0,0.0403938,0.726,0.1523745209221236 -922,Wolff Ltd,2023-03-03,0,0.01288958,0.726,1.107810063713731 -855,Wolff Ltd,2023-04-01,0,0.0061369,0.726,0.0448008972256167 -809,Wolff Ltd,2023-01-12,0,0.0023616517,0.726,1.0452024196334224 -941,Wolff Ltd,2023-03-09,0,0.006880349,0.726,0.1362693366395884 -896,Wolff Ltd,2023-03-28,0,0.0018684408,0.726,1.0806545643494854 -998,Wolff Ltd,2023-01-24,0,0.017293109,0.726,1.11101882511548 -872,Wolff Ltd,2023-02-26,0,9.82973e-4,0.726,0.1075373780762863 -937,Wolff Ltd,2023-02-21,1,0.118713334,0.726,-0.011430135510996 -830,Wolff Ltd,2023-03-15,1,0.11616709,0.726,0.0936397242412064 -828,Wolff Ltd,2023-02-15,1,0.02713681,0.726,1.1535389877837574 -968,Wolff Ltd,2023-02-25,0,8.127345e-4,0.726,1.1149767903621486 -904,Wolff Ltd,2023-03-10,0,3.250132e-4,0.726,1.039221638197544 -933,Wolff Ltd,2023-02-08,0,0.022062326,0.726,0.1643461712587002 -920,Wolff Ltd,2023-02-10,0,0.0034829043,0.726,0.0579344410805292 -893,Wolff Ltd,2023-03-30,0,0.02752766,0.726,0.1629244283184082 -826,Wolff Ltd,2023-01-27,0,0.11980678,0.726,0.1118239832708646 -906,Wolff Ltd,2023-01-19,0,8.691524e-4,0.726,1.128437553245591 -975,Wolff Ltd,2023-01-30,0,1.7651406e-4,0.726,0.1755410023823818 -853,Wolff Ltd,2023-03-26,0,0.007967289,0.726,1.1269821828927462 -835,Wolff Ltd,2023-02-16,0,4.5773044e-4,0.726,1.1060996641675185 -946,Wolff Ltd,2023-03-25,1,0.86469084,0.726,0.1672439279654513 -981,Wolff Ltd,2023-02-21,0,4.864218e-4,0.726,0.1095329066380471 -841,Wolff Ltd,2023-02-20,1,0.02275583,0.726,1.12709901198154 -802,Wolff Ltd,2023-03-11,0,0.4858842,0.726,1.140492954062058 -911,Wolff Ltd,2023-03-18,1,0.62254745,0.726,1.085189388452215 -935,Wolff Ltd,2023-03-21,0,0.16649412,0.726,1.1998543236356578 -944,Wolff Ltd,2023-02-25,0,0.03679726,0.726,1.003765139053014 -995,Wolff Ltd,2023-01-03,0,2.8293038e-4,0.726,0.2172049291363578 -970,Wolff Ltd,2023-02-11,0,0.029361194,0.726,1.078402608626916 -806,Wolff Ltd,2023-01-08,1,0.0014967432,0.726,0.1497141870460403 -929,Wolff Ltd,2023-01-20,1,0.8817406,0.726,0.1831868727346051 -887,Wolff Ltd,2023-01-10,0,0.76013565,0.726,1.1218262359527982 -846,Wolff Ltd,2023-01-02,0,0.0012982454,0.726,0.0755934329404263 -845,Wolff Ltd,2023-03-02,1,0.051907055,0.726,1.0987321457560757 -878,Wolff Ltd,2023-02-27,0,0.0025967034,0.726,1.1357745302276168 -800,Wolff Ltd,2023-03-11,0,0.0037018147,0.726,1.1165651784532804 -861,Wolff Ltd,2023-01-14,0,0.023446035,0.726,1.1253782280901723 -832,Wolff Ltd,2023-01-08,0,0.008602106,0.726,0.0986691249831899 -842,Wolff Ltd,2023-03-02,0,0.024421345,0.726,0.1556148454573195 -996,Wolff Ltd,2023-01-05,0,0.01090797,0.726,0.1609416639801347 -923,Wolff Ltd,2023-01-09,0,0.0021788233,0.726,1.0080521776814624 -895,Wolff Ltd,2023-02-10,0,1.9449965e-4,0.726,1.0505377461102858 -892,Wolff Ltd,2023-02-10,0,8.517721e-4,0.726,1.044545389222387 -983,Wolff Ltd,2023-02-05,0,0.48974505,0.726,0.047923620649441 -833,Wolff Ltd,2023-02-08,0,4.977726e-4,0.726,0.1091870598062626 -876,Wolff Ltd,2023-01-25,0,0.023232227,0.726,1.0703266457867644 -956,Wolff Ltd,2023-02-01,1,0.04625162,0.726,0.0929863318694679 -819,Wolff Ltd,2023-02-14,1,0.0045832526,0.726,0.1361688761801263 -859,Wolff Ltd,2023-03-26,1,0.92760354,0.726,0.0365125788061349 -839,Wolff Ltd,2023-03-28,0,0.0071243895,0.726,1.0592236691019097 -858,Wolff Ltd,2023-01-08,0,6.880531e-4,0.726,0.0322609777718254 -950,Wolff Ltd,2023-01-28,1,0.027723527,0.726,1.167413665699018 -999,Wolff Ltd,2023-01-26,0,0.33065912,0.726,1.0886532899948944 -840,Wolff Ltd,2023-02-14,0,0.051401,0.726,1.0764428334716791 -851,Wolff Ltd,2023-01-15,0,0.007764892,0.726,1.201769837091461 -976,Wolff Ltd,2023-03-01,0,0.021917637,0.726,0.1131520476646788 -936,Wolff Ltd,2023-02-02,0,2.2685772e-4,0.726,1.0256144618089478 -916,Wolff Ltd,2023-03-08,0,0.31157422,0.726,0.0939590448960927 -955,Wolff Ltd,2023-01-29,0,5.5734755e-4,0.726,0.1260804716414843 -823,Wolff Ltd,2023-03-24,1,0.9944839,0.726,0.1389054009709788 -808,Wolff Ltd,2023-01-15,0,1.507717e-4,0.726,1.0603164175116029 -811,Wolff Ltd,2023-02-08,0,0.47511867,0.726,0.0449847506183881 -814,Wolff Ltd,2023-03-17,1,0.025192128,0.726,1.057791747326691 diff --git a/shiny/templates/app-templates/multi-page/styles.css b/shiny/templates/app-templates/multi-page/styles.css deleted file mode 100644 index 033ce12c5..000000000 --- a/shiny/templates/app-templates/multi-page/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -.card { - border: 1px solid rgb(158, 158, 158); -} - diff --git a/tests/playwright/examples/test_shiny_create.py b/tests/playwright/examples/test_shiny_create.py index 7571c0971..83da63850 100644 --- a/tests/playwright/examples/test_shiny_create.py +++ b/tests/playwright/examples/test_shiny_create.py @@ -6,6 +6,8 @@ from example_apps import get_apps, reruns, reruns_delay, validate_example from playwright.sync_api import Page +from shiny._main import app_template_choices + def subprocess_create( app_template: str, @@ -47,8 +49,14 @@ def test_template_examples(page: Page, ex_app_path: str) -> None: validate_example(page, ex_app_path) +app_templates = list(app_template_choices.values()) +app_templates.remove("external-gallery") # Not actually a template +app_templates.remove("js-component") # Several templates that can't be easily tested +assert len(app_templates) > 0 + + @pytest.mark.flaky(reruns=reruns, reruns_delay=reruns_delay) -@pytest.mark.parametrize("app_template", ["basic-app", "dashboard", "multi-page"]) +@pytest.mark.parametrize("app_template", app_templates) def test_create_core(app_template: str, page: Page): with tempfile.TemporaryDirectory("example_apps") as tmpdir: subprocess_create(app_template, dest_dir=tmpdir)