Spaces:
Sleeping
Sleeping
File size: 4,076 Bytes
97d65c2 a9f9937 97d65c2 066e132 e3bc2d2 c26f78d e3bc2d2 6f418fd e3bc2d2 6f418fd 97d65c2 c26f78d 5dd34a8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
import gradio as gr
from cadCAD.configuration.utils import config_sim
from cadCAD.configuration import Experiment
from cadCAD.engine import ExecutionMode, ExecutionContext
from cadCAD.engine import Executor
from cadCAD import configs
import pandas as pd
import numpy as np
from seir_model import *
N = 10000 #Total Population
initial_state = {
"S": N-10,
"E": 10,
"I":0,
"R":0
}
sys_params = {
"infection_rate":[1],
"recovery_rate":[1/14],
"exposure_rate":[1/3]
}
partial_state_update_blocks = [
{
"policies":{
"expsoed_growth":p_exposed,
"infected_growth":p_infected,
"recovered_growth":p_recovered,
},
"variables":{
"S":s_susceptible,
"E":s_exposed,
"I":s_infected,
"R":s_recovered,
}
}
]
del configs[:]
timesteps = 100
sim_config = config_sim({
"N":1,
"T":range(timesteps),
"M":sys_params
})
experiment = Experiment()
experiment.append_configs(
sim_configs=sim_config,
initial_state=initial_state,
partial_state_update_blocks=partial_state_update_blocks
)
exec_context = ExecutionContext()
simulation = Executor(exec_context=exec_context, configs=experiment.configs)
css = """
.gradio-container {
font-family: 'IBM Plex Sans', sans-serif;
}
.gr-button {
color: white;
border-color: black;
background: black;
}
input[type='range'] {
accent-color: black;
}
.dark input[type='range'] {
accent-color: #dfdfdf;
}
.container {
max-width: 730px;
margin: auto;
padding-top: 1.5rem;
}
.details:hover {
text-decoration: underline;
}
.gr-button {
white-space: nowrap;
}
.gr-button:focus {
border-color: rgb(147 197 253 / var(--tw-border-opacity));
outline: none;
box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
--tw-border-opacity: 1;
--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px var(--tw-ring-offset-width)) var(--tw-ring-color);
--tw-ring-color: rgb(191 219 254 / var(--tw-ring-opacity));
--tw-ring-opacity: .5;
}
#advanced-btn {
font-size: .7rem !important;
line-height: 19px;
margin-top: 12px;
margin-bottom: 12px;
padding: 2px 8px;
border-radius: 14px !important;
}
#advanced-options {
display: none;
margin-bottom: 20px;
}
.footer {
margin-bottom: 45px;
margin-top: 35px;
text-align: center;
border-bottom: 1px solid #e5e5e5;
}
.footer>p {
font-size: .8rem;
display: inline-block;
padding: 0 10px;
transform: translateY(10px);
background: white;
}
.dark .footer {
border-color: #303030;
}
.dark .footer>p {
background: #0b0f19;
}
"""
def plot_seir(name):
raw_result, tensor_fields, sessions = simulation.execute()
result = pd.DataFrame(raw_result)
pd.options.plotting.backend = "plotly"
fig = result.plot(
kind = "line",
x = "timestep",
y= ["S","E","I", "R"])
fig.update_layout(title = name,
xaxis_title="Time (Days)",
yaxis_title="People")
return fig
with gr.Blocks(css = css) as demo:
gr.Markdown("""
## Epidemic Simulation
""")
title_input = gr.Textbox(label = 'Enter title')
simulate_btn = gr.Button('Simulation')
graph = gr.Plot()
simulate_btn.click(plot_seir, inputs = title_input, outputs = graph)
demo.launch() |