WebWorld / app.py
kupkasmale's picture
Upload app.py
e0c4dd6 verified
from webworld_lib import *
pn.extension("tabulator")
ACCENT = "indigo"
styles = {
"box-shadow": "rgba(50, 50, 93, 0.25) 0px 6px 12px -2px, rgba(0, 0, 0, 0.3) 0px 3px 7px -3px",
"border-radius": "4px",
"padding": "10px",
}
CSS = """
div.card-margin:nth-child(1) {
max-height: 280px;
}
}
"""
fixed_data = fixed_parameters()
global Nt, SN;
Nt =0.0; Tn = 0.0
MS = fixed_data[0]
R = fixed_data[1]
c= fixed_data[2]
ld = fixed_data[3]
Ng = fixed_data[4]
L = fixed_data[5]
K = fixed_data[6]
b = fixed_data[7]
Running = False
# Parameter Values
t_comp = pn.widgets.FloatSlider(value= c ,start=0.1,
end=0.9, step=0.1,
name='Competition')
t_res = pn.widgets.FloatSlider(value= R ,start=1e4,
end=1e6, step=1e4,
name='Resources')
figa = (
pd.DataFrame([],columns=['SN'])
).hvplot(
title="Number of Species",
ylabel="Number of Species",
xlabel="Evolutionary event",
#xlim=(0, Ng),
autorange = "y",
color=ACCENT,
)
#print(figa)
FW = nx.DiGraph()
figb = hvnx.draw(FW, with_labels=True)
pr1 = pn.pane.Str(
'Static parameters (K,L):'+str(K)+' '+str(L)
)
pr2 = pn.pane.Str('Max number of allowed species: '+str(MS))
pr3 = pn.pane.Str('Number of evolutionary steps: '+str(Ng))
pr4 = pn.pane.Str('b: '+str(b))
#pr3 = pn.pane.Str('Ready')
button = pn.widgets.Button(name='\u25b6',description='Run')
#print(button.name)
# Display Data
indicators = pn.FlexBox(
pn.indicators.Number(
value=t_res, name="External Resources",
format="{value:,.1E}",
font_size = "5",
title_size = "6",
styles=styles
),
pn.indicators.Number(
value=t_comp,
name="Competition parameter",
format="{value:,.1f}",
font_size = "5",
title_size = "6",
styles=styles,
),
pn.indicators.Number(
value=Tn,
name="Time",
format="{value:,.1f}",
font_size = "5",
title_size = "6",
styles=styles,
),
pn.indicators.Number(
value=Nt,
name="Number of Species",
font_size = "5",
title_size = "6",
format="{value:,.1f}",
styles=styles,
),
)
Pt = np.array([MS,t_res.value,t_comp.value,ld,Ng,L,K,b,indicators[3],indicators[2]])
plotns = pn.pane.HoloViews(figa, sizing_mode="stretch_both", name="PlotNS")
plotfw = pn.pane.HoloViews(figb, sizing_mode="stretch_both", name="PlotFW")
tabs = pn.Tabs(
plotns, plotfw, styles=styles, sizing_mode="stretch_width", height=500, margin=10
)
ly1 = pn.Column(pr1, pr2, pr3, pr4,t_comp,t_res, button, sizing_mode="stretch_both")
ly2 = pn.Column(indicators, tabs, sizing_mode="stretch_both")
button.on_click(partial(start_sim,Pt,[t_res,t_comp],button,tabs))
pn.template.FastListTemplate(
title="Webworld Model Demo",
main=[ly1,ly2],
main_layout=None,
accent=ACCENT,
raw_css=[CSS]
).servable()