Spaces:
Sleeping
Sleeping
File size: 4,695 Bytes
97d65c2 a9f9937 97d65c2 066e132 c4f2558 e3bc2d2 c4f2558 e3bc2d2 c4f2558 e3bc2d2 c26f78d 3f37d23 c26f78d e3bc2d2 c4f2558 e3bc2d2 6f418fd 8685cda 6f418fd 97d65c2 c26f78d 5dd34a8 5ac9b51 fe6c448 e052f63 8685cda c4f2558 5dd34a8 c4f2558 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 157 158 159 160 161 162 163 164 165 |
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 *
def create_and_run_exp(population):
#Total Population : population
initial_state = {
"S": population-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)
return simulation
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: 900px;
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(population):
simulation = create_and_run_exp(population)
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 = "Population Evolution Over Time",
xaxis_title="Time (Days)",
yaxis_title="People")
return fig
with gr.Blocks(css = css) as demo:
gr.Markdown("""
## Epidemic Simulation
""")
gr.HTML('''
<p style="margin-bottom: 10px; font-size: 94%">
A cadCAD-based simulation of an outbreak of any epidemic using the SEIR compartmental model
</p>
''')
population_input = gr.Slider(1000, 100000, value=10000, label = "Population")
simulate_btn = gr.Button('Run Simulation')
graph = gr.Plot()
simulate_btn.click(plot_seir, inputs = population_input, outputs = graph)
demo.launch() |