def test_create_with_defaults(self): "test creating with default values" footer = widgets.Button() header = widgets.Button() center = widgets.Button() left_sidebar = widgets.Button() right_sidebar = widgets.Button() box = widgets.AppLayout(footer=footer, header=header, center=center, left_sidebar=left_sidebar, right_sidebar=right_sidebar) assert box.layout.grid_template_areas == ( '"header header header"\n' + '"left-sidebar center right-sidebar"\n' + '"footer footer footer"') assert box.footer.layout.grid_area == 'footer' assert box.header.layout.grid_area == 'header' assert box.center.layout.grid_area == 'center' assert box.left_sidebar.layout.grid_area == 'left-sidebar' assert box.right_sidebar.layout.grid_area == 'right-sidebar' assert len(box.get_state()['children']) == 5 # empty layout should produce no effects box = widgets.AppLayout() assert box.layout.grid_template_areas is None assert box.layout.grid_template_columns is None assert box.layout.grid_template_rows is None assert len(box.get_state()['children']) == 0
def build_subquery(self, qf, subquery, database): self.database = database self.subquery = subquery try: self.qf = qf.read_json(self.store_path, subquery=subquery) self.schema.value = self.qf.data["select"]["schema"] self.table.value = self.qf.data["select"]["table"] self.engine.value = self.qf.data["select"]["engine"] except KeyError: data = { "select": { "fields": {"sample_field": {"type": "dim"}}, "schema": "sample_schema", "table": "sample_table", } } self.qf = qf.read_dict(data=data) self.output = w.AppLayout( left_sidebar=w.VBox([self.schema, self.table, self.engine, self.button]), center=None, right_sidebar=None, pane_widths=[2, 3, 3], pane_heights=[1, 5, 1], ) self.button.on_click(self._btn_build_subquery_step_2) return self.output
def test_set_pane_widths_heights(self): footer = widgets.Button() header = widgets.Button() center = widgets.Button() left_sidebar = widgets.Button() right_sidebar = widgets.Button() box = widgets.AppLayout(header=header, footer=footer, left_sidebar=left_sidebar, right_sidebar=left_sidebar, center=center) with pytest.raises(traitlets.TraitError): box.pane_widths = ['1fx', '1fx', '1fx', '1fx'] with pytest.raises(traitlets.TraitError): box.pane_widths = ['1fx', '1fx'] with pytest.raises(traitlets.TraitError): box.pane_heights = ['1fx', '1fx', '1fx', '1fx'] with pytest.raises(traitlets.TraitError): box.pane_heights = ['1fx', '1fx'] assert box.layout.grid_template_rows == "1fr 3fr 1fr" assert box.layout.grid_template_columns == "1fr 2fr 1fr" box.pane_heights = ['3fr', '100px', 20] assert box.layout.grid_template_rows == "3fr 100px 20fr" assert box.layout.grid_template_columns == "1fr 2fr 1fr" box.pane_widths = [3, 3, 1] assert box.layout.grid_template_rows == "3fr 100px 20fr" assert box.layout.grid_template_columns == "3fr 3fr 1fr"
def __initApp(self): header = widgets.HTML("<h1>Melissa Dashboard</h1><hr/>", layout=widgets.Layout(height='auto')) header.style.text_align='center' self.app = widgets.AppLayout(header=header, left_sidebar=None, center=widgets.VBox([self.__plots, self.__studyInfo]), right_sidebar=self.__studyStatus, footer=self.__footerOutput)
def test_size_to_css(self): box = widgets.AppLayout() assert box._size_to_css("100px") == '100px' assert box._size_to_css("1fr") == '1fr' assert box._size_to_css("2.5fr") == '2.5fr' assert box._size_to_css('2.5') == '2.5fr' assert box._size_to_css('25%') == '25%' with pytest.raises(TypeError): box._size_to_css('this is not correct size')
def main(): configure() app_layout = widgets.AppLayout( header=get_header(), left_sidebar=get_sidebar(), center=get_center(), right_sidebar=widgets.Output(), pane_widths=[2, "1400px", 1], pane_heights=["75px", 1, "75px"], ) ip.display(app_layout)
def gen_ui(self, spatial_index=None): if self.spatial_index is None: self.spatial_index = spatial_index self.init_panelleft() self.init_map() self.marker.observe(self._on_location_changed, 'location') self.menuleft.observe(self._on_menuleft_selection_changed, names='value') leftside = iwg.VBox([self.ui_title, self.menuleft]) leftside.layout.align_items = 'center' return iwg.AppLayout(left_sidebar=leftside, center=self.mainmap)
def __init__(self, store_path): self.subquery = "" self.database = "" self.store_path = store_path self.label = w.Label('Build Your Subquery') self.btn_subquery = w.Button(description="Create Query") self.btn_subquery.on_click(self._btn_create_query) self.output = w.AppLayout(left_sidebar=w.VBox([self.btn_subquery]), center=None, right_sidebar=None, pane_widths=[2, 3, 3], pane_heights=[1, 5, 1])
def interactive_progress_graph(timespan, progress_data_func): # Para renderizar LaTeX # ce.typeset() # Se obtienen los datos originales x_data = timespan y_data = progress_data_func(x_data, 22.7, 0) def update(a): plt.figure(dpi=150) plt.title("Variación de la concentración de producto por unidad de tiempo") plt.xlabel("Tiempo (min)") plt.ylabel("Producto (uM)") # Update temp parameters MicMent_progress = np.add(np.multiply(x_data, a), 0) plt.scatter(x_data, y_data, c="r", label="a: {}".format(500), s=8.0) plt.scatter(x_data, MicMent_progress, c="b", label="a modificada: {}".format(a), s=8.0) plt.plot(x_data, y_data, c="r", lw=2.0, alpha=0.5) plt.plot(x_data, MicMent_progress, c="b", lw=2.0, alpha=0.5) plt.legend(bbox_to_anchor=(1.05, 0.5), loc='center left') a_slider = widgets.FloatSlider(value=22.7, min=0, max=100.0, step=0.5, continuous_update=True, description="a", layout=widgets.Layout(width='auto', height='auto'), style={'description_width': 'initial'}) output_graph = widgets.interactive_output(update, {'a':a_slider}) header = widgets.HTML(value="<H1><center>Gráfico Interactivo Curva Progreso - Enzimas</center></H1>", layout=widgets.Layout(width='auto', grid_area='header')) footer = widgets.HTML(value="<H1><center>A continuación se realizarán algunas actividades relacionadas con las curvas de progreso y su utilidad en la cinética enzimática</center></H1>", layout=widgets.Layout(width='auto', grid_area='header')) equation = widgets.HTMLMath(value="", layout=widgets.Layout(width='auto', grid_area='header')) sliders = widgets.VBox([a_slider]) final_output = widgets.AppLayout(header=header, left_sidebar=sliders, center=output_graph, footer=footer, right_sidebar=None, align_items='center', pane_widths=[3, 3, 1], pane_heights=[1, 5, '60px']) return final_output
def display_explanation(answer, explanation, explanation_gif): expl = widgets.HTML( value='<p style="text-align:justify;font-size:16px;margin-right:5px">' + explanation + '</p>', placeholder='', description='') expl.layout.align_content = 'center' file = open(explanation_gif, "rb") image = file.read() gif = widgets.Image(value=image, format=explanation[-3:], layout=widgets.Layout(width='auto', height='auto')) gif.layout.width = '100%' output = widgets.AppLayout(header=answer, left_sidebar=expl, center=None, right_sidebar=gif, footer=None, width="100%", pane_widths=[2, 0, 3], pane_heights=[1, 5, 0]) display(output)
def gen_ui(self, spatial_index=None, ft_params=None): if self.spatial_index is None: self.spatial_index = spatial_index if ft_params is None: self.init_ft_params() else: self.ft_params = ft_params self.init_panelleft() self.init_panelright() self.init_map() self.marker.observe(self._on_location_changed, 'location') self.menuleft.observe(self._on_menuleft_selection_changed, names='value') self.datesearch_btn.on_click(self._on_searchbutton_clicked) self.runft_btn.on_click(self._on_ftbutton_clicked) leftside = iwg.VBox([self.ui_title, self.menuleft, self.kernelselection, self.datesearch_btn]) leftside.layout.align_items = 'center' rightside = iwg.VBox([self.menuright, self.bandselection, self.runft_btn]) rightside.layout.align_items = 'center' return iwg.AppLayout(left_sidebar=leftside, center=self.mainmap, right_sidebar=rightside)
def interactive_ph_graph(ph_range, ph_data_func): # Para renderizar LaTeX # ce.typeset() # Se obtienen los datos originales ph_range = ph_range x_data = np.power(10, np.multiply(ph_range, -1)) y_data = ph_data_func(x_data, 5.3, 8.8, 500, 4.3E-3/250) def update(a, b, c, d, e, f): plt.figure(dpi=150) plt.title("Variación de la velocidad de reaccion frente a cambios en pKa") plt.xlabel("pH") plt.ylabel("Tasa de Reaccion (uM/min)") # Update pH parameters ka_e1 = 10**-a ka_e2 = 10**-b ka_ea1 = 10**-c ka_ea2 = 10**-d substrate_conc = e initial_enzyme = f ph_dependant_km_numerator = np.multiply(np.add(np.add(np.divide(x_data, ka_e1), np.divide(ka_e2, x_data)), 1), 450) ph_dependant_km_denominator = np.add(np.add(np.divide(x_data, ka_ea1), np.divide(ka_ea2, x_data)), 1) ph_dependant_km = np.divide(ph_dependant_km_numerator, ph_dependant_km_denominator) ph_dependant_vmax_numerator = 8606*(initial_enzyme) ph_dependant_vmax_denominator = np.add(np.add(np.divide(x_data, ka_ea1), np.divide(ka_ea2, x_data)), 1) ph_dependant_vmax = np.divide(ph_dependant_vmax_numerator, ph_dependant_vmax_denominator) MicMent_ph = np.multiply(np.divide(np.multiply(ph_dependant_vmax, substrate_conc), np.add(ph_dependant_km, substrate_conc)), 60) plt.scatter(ph_range, y_data, c="r", label="pKa_E 1 original: {}\npKa_E 2 original: {}\npKa_ES 1 original: {}\npKa_ES 2 original: {}\nConcentración de sustrato: {}\nConcentración de enzima: {}".format(5.3, 8.8, 6.0, 9.8, 500, 4.3E-3/250), s=8.0) plt.scatter(ph_range, MicMent_ph, c="b", label="pKa_E 1 modificado: {}\npKa_E 2 modificado: {}\npKa_ES 1 modificado: {}\npKa_ES 2 modificado: {}\nConcentración de sustrato modificada: {}\nConcentración de enzima modificada: {}".format(a, b, c, d, e, f), s=8.0) plt.plot(ph_range, y_data, c="r", lw=2.0, alpha=0.5) plt.plot(ph_range, MicMent_ph, c="b", lw=2.0, alpha=0.5) plt.legend(bbox_to_anchor=(1.05, 0.5), loc='center left') pka1_slider = widgets.FloatSlider(value=5.3, min=1.0, max=13.0, step=0.1, continuous_update=True, description="pKa enzima 1", layout=widgets.Layout(width='auto', height='auto'), style={'description_width': 'initial'}) pka2_slider = widgets.FloatSlider(value=8.8, min=1.0, max=13.0, step=0.1, continuous_update=True, description="pKa enzima 2", layout=widgets.Layout(width='auto', height='auto'), style={'description_width': 'initial'}) pka1_es_slider = widgets.FloatSlider(value=6.0, min=1.0, max=13.0, step=0.1, continuous_update=True, description="pKa enzima-sustrato 1", layout=widgets.Layout(width='auto', height='auto'), style={'description_width': 'initial'}) pka2_es_slider = widgets.FloatSlider(value=9.8, min=1.0, max=13.0, step=0.1, continuous_update=True, description="pKa enzima-sustrato 2", layout=widgets.Layout(width='auto', height='auto'), style={'description_width': 'initial'}) substrate_slider = widgets.FloatSlider(value=500, min=500.0, max=10000.0, step=100, continuous_update=True, description="Concentracion de sustrato", layout=widgets.Layout(width='auto', height='auto'), style={'description_width': 'initial'}) enzyme_dropdown = widgets.Dropdown(options=[round(num, 8) for num in list(np.concatenate((np.linspace((4.3E-3/10000), (4.3E-3/1000), 50), np.linspace((4.3E-3/1000), 4.3E-3, 50))))], value=4.3E-3/1000, description='Concentracion de enzima:', disabled=False, layout=widgets.Layout(width='auto', height='auto'), style={'description_width': 'initial'}) output_graph = widgets.interactive_output(update, {'a':pka1_slider, 'b':pka2_slider, 'c':pka1_es_slider, 'd':pka2_es_slider, 'e':substrate_slider, 'f':enzyme_dropdown}) header = widgets.HTML(value="<H1><center>Gráfico Interactivo pH - Enzimas</center></H1>", layout=widgets.Layout(width='auto', grid_area='header')) footer = widgets.HTML(value="<H1><center>A continuación se realizarán algunas actividades relacionadas con el efecto del pH en las enzimas</center></H1>", layout=widgets.Layout(width='auto', grid_area='header')) equation = widgets.HTMLMath(value="", layout=widgets.Layout(width='auto', grid_area='header')) sliders = widgets.VBox([pka1_slider, pka2_slider, pka1_es_slider, pka2_es_slider, substrate_slider, enzyme_dropdown]) final_output = widgets.AppLayout(header=header, left_sidebar=sliders, center=output_graph, footer=footer, right_sidebar=None, align_items='center', pane_widths=[3, 3, 1], pane_heights=[1, 5, '60px']) return final_output
# Withdraw tokens functionality - remains hidden until contract is finalized account_box = widgets.VBox([withdraw_account], layout = widgets.Layout(align_items='center'), width = '100%' ) withdraw_box = widgets.VBox([withdraw_key_input, withdraw_button], layout = widgets.Layout(align_items='center') ) token_balance_box = widgets.VBox([token_balance, token_balance_button], layout = widgets.Layout(align_items='center') ) after_sale_box = widgets.AppLayout( header = account_box, left_sidebar = withdraw_box, center = None, right_sidebar = token_balance_box, footer = None, width = '100%' #align_items = 'center' ) post_sale_box = widgets.VBox([after_sale_box, trading_app_dash]) post_sale_box.layout.visibility = 'hidden' coins_purchased_box = widgets.VBox([cons_coin, cons_coin_supply]) coins_box = widgets.VBox([purchase_box, coins_purchased_box])
def test_merge_empty_cells(self): "test if cells are correctly merged" footer = widgets.Button() header = widgets.Button() center = widgets.Button() left_sidebar = widgets.Button() right_sidebar = widgets.Button() # merge all if only one widget box = widgets.AppLayout(center=center) assert box.layout.grid_template_areas == ('"center center center"\n' + '"center center center"\n' + '"center center center"') assert box.center.layout.grid_area == 'center' assert len(box.get_state()['children']) == 1 box = widgets.AppLayout(left_sidebar=left_sidebar) assert box.layout.grid_template_areas == ( '"left-sidebar left-sidebar left-sidebar"\n' + '"left-sidebar left-sidebar left-sidebar"\n' + '"left-sidebar left-sidebar left-sidebar"') assert box.left_sidebar.layout.grid_area == 'left-sidebar' assert len(box.get_state()['children']) == 1 # merge left and right sidebars with center box = widgets.AppLayout(header=header, footer=footer, left_sidebar=left_sidebar, center=center) assert box.layout.grid_template_areas == ( '"header header header"\n' + '"left-sidebar center center"\n' + '"footer footer footer"') assert box.footer.layout.grid_area == 'footer' assert box.header.layout.grid_area == 'header' assert box.center.layout.grid_area == 'center' assert box.left_sidebar.layout.grid_area == 'left-sidebar' assert len(box.get_state()['children']) == 4 box = widgets.AppLayout(header=header, footer=footer, right_sidebar=right_sidebar, center=center) assert box.layout.grid_template_areas == ( '"header header header"\n' + '"center center right-sidebar"\n' + '"footer footer footer"') assert box.footer.layout.grid_area == 'footer' assert box.header.layout.grid_area == 'header' assert box.center.layout.grid_area == 'center' assert box.right_sidebar.layout.grid_area == 'right-sidebar' assert len(box.get_state()['children']) == 4 box = widgets.AppLayout(header=header, footer=footer, center=center) assert box.layout.grid_template_areas == ('"header header header"\n' + '"center center center"\n' + '"footer footer footer"') assert box.footer.layout.grid_area == 'footer' assert box.header.layout.grid_area == 'header' assert box.center.layout.grid_area == 'center' assert len(box.get_state()['children']) == 3 # if only center missing, remove it from view box = widgets.AppLayout(header=header, footer=footer, center=None, left_sidebar=left_sidebar, right_sidebar=right_sidebar) assert box.layout.grid_template_areas == ( '"header header"\n' + '"left-sidebar right-sidebar"\n' + '"footer footer"') assert box.footer.layout.grid_area == 'footer' assert box.header.layout.grid_area == 'header' assert box.left_sidebar.layout.grid_area == 'left-sidebar' assert box.right_sidebar.layout.grid_area == 'right-sidebar' assert box.center is None assert len(box.get_state()['children']) == 4 # center and one sidebar missing -> 3 row arrangement box = widgets.AppLayout(header=header, footer=footer, center=None, left_sidebar=None, right_sidebar=right_sidebar) assert box.layout.grid_template_areas == ( '"header header"\n' + '"right-sidebar right-sidebar"\n' + '"footer footer"') assert box.footer.layout.grid_area == 'footer' assert box.header.layout.grid_area == 'header' assert box.left_sidebar is None assert box.right_sidebar.layout.grid_area == 'right-sidebar' assert box.center is None assert len(box.get_state()['children']) == 3 # remove middle row is both sidebars and center missing box = widgets.AppLayout(header=header, footer=footer, center=None, left_sidebar=None, right_sidebar=None) assert box.layout.grid_template_areas == ('"header"\n' + '"footer"') assert box.footer.layout.grid_area == 'footer' assert box.header.layout.grid_area == 'header' assert box.center is None assert box.left_sidebar is None assert box.right_sidebar is None assert len(box.get_state()['children']) == 2 # do not merge if merge=False box = widgets.AppLayout(header=header, footer=footer, center=center, merge=False) assert box.layout.grid_template_areas == ( '"header header header"\n' + '"left-sidebar center right-sidebar"\n' + '"footer footer footer"') assert box.footer.layout.grid_area == 'footer' assert box.header.layout.grid_area == 'header' assert box.center.layout.grid_area == 'center' assert box.left_sidebar is None assert box.right_sidebar is None assert len(box.get_state()['children']) == 3 # merge header and footer simply removes it from view box = widgets.AppLayout(footer=footer, center=center, left_sidebar=left_sidebar, right_sidebar=right_sidebar) assert box.layout.grid_template_areas == ( '"left-sidebar center right-sidebar"\n' + '"footer footer footer"') assert box.center.layout.grid_area == 'center' assert box.left_sidebar.layout.grid_area == 'left-sidebar' assert box.right_sidebar.layout.grid_area == 'right-sidebar' assert box.footer.layout.grid_area == 'footer' assert box.header is None assert len(box.get_state()['children']) == 4 box = widgets.AppLayout(header=header, center=center, left_sidebar=left_sidebar, right_sidebar=right_sidebar) assert box.layout.grid_template_areas == ( '"header header header"\n' + '"left-sidebar center right-sidebar"') assert box.center.layout.grid_area == 'center' assert box.left_sidebar.layout.grid_area == 'left-sidebar' assert box.right_sidebar.layout.grid_area == 'right-sidebar' assert box.header.layout.grid_area == 'header' assert box.footer is None assert len(box.get_state()['children']) == 4 box = widgets.AppLayout(center=center, left_sidebar=left_sidebar, right_sidebar=right_sidebar) assert box.layout.grid_template_areas == '"left-sidebar center right-sidebar"' assert box.center.layout.grid_area == 'center' assert box.left_sidebar.layout.grid_area == 'left-sidebar' assert box.right_sidebar.layout.grid_area == 'right-sidebar' assert box.footer is None assert box.header is None assert len(box.get_state()['children']) == 3 # merge all if only one widget box = widgets.AppLayout(center=center) assert box.layout.grid_template_areas == ('"center center center"\n' + '"center center center"\n' + '"center center center"') assert box.center.layout.grid_area == 'center' assert len(box.get_state()['children']) == 1
def compare(image1, image2, link_cmap=False, link_gradient_opacity=False, **viewer_kwargs): """Compare two images by visualizing them side by side. Visualization traits, e.g. the view mode, camera, etc., are linked between the viewers. Optional trait linking can be enabled in widget's user interface. """ viewer1 = Viewer(image=image1, **viewer_kwargs) # Collapse the second viewer's user interface by default. if 'ui_collapsed' not in viewer_kwargs: viewer_kwargs['ui_collapsed'] = True viewer2 = Viewer(image=image2, **viewer_kwargs) widgets.jslink((viewer1, 'mode'), (viewer2, 'mode')) widgets.jslink((viewer1, 'camera'), (viewer2, 'camera')) widgets.jslink((viewer1, 'roi'), (viewer2, 'roi')) widgets.jslink((viewer1, 'rotate'), (viewer2, 'rotate')) widgets.jslink((viewer1, 'annotations'), (viewer2, 'annotations')) widgets.jslink((viewer1, 'x_slice'), (viewer2, 'x_slice')) widgets.jslink((viewer1, 'y_slice'), (viewer2, 'y_slice')) widgets.jslink((viewer1, 'z_slice'), (viewer2, 'z_slice')) widgets.jslink((viewer1, 'slicing_planes'), (viewer2, 'slicing_planes')) link_widgets = [] link_widgets.append(widgets.Label('Link:')) class UpdateLink(object): def __init__(self, enable, name): self.link = None self.name = name if enable: self.link = widgets.jslink((viewer1, name), (viewer2, name)) def __call__(self, change): if change.new: self.link = widgets.jslink((viewer1, self.name), (viewer2, self.name)) else: self.link.unlink() link_cmap_widget = widgets.Checkbox(description='cmap', value=link_cmap) update_cmap_link = UpdateLink(link_cmap, 'cmap') link_cmap_widget.observe(update_cmap_link, 'value') link_widgets.append(link_cmap_widget) link_gradient_opacity_widget = widgets.Checkbox( description='gradient_opacity', value=link_gradient_opacity) update_gradient_opacity_link = UpdateLink(link_gradient_opacity, 'gradient_opacity') link_gradient_opacity_widget.observe(update_gradient_opacity_link, 'value') link_widgets.append(link_gradient_opacity_widget) link_widget = widgets.HBox(link_widgets) widget = widgets.AppLayout(header=None, left_sidebar=viewer1, center=None, right_sidebar=viewer2, footer=link_widget, pane_heights=[1, 6, 1]) return widget
def interactive_conveyor_belt(conveyorBelt=None, numsys: int = 8, nbins: int = 100, steps: int = 100): """ This provides a nice widget for jupyter notebooks to play around with the conveyor belt. Parameters ---------- conveyorBelt numsys nbins steps Returns ------- """ # if none given build cvb if (isinstance(conveyorBelt, type(None))): lam = np.linspace(0, 1, nbins) ene = lam * np.sin(lam * np.pi) + lam**2 else: (cvb_traj, systrajs) = conveyorBelt.get_trajs() if (len(cvb_traj) == 0): raise IOError( "Could not find any conveyor belt simulation in conveyorbelt traj. Please simulate first." ) bins = np.zeros(nbins) dhdlbins = np.zeros(nbins) for i in systrajs: for j in range(systrajs[i].shape[0]): index = int(np.floor(systrajs[i].lam[j] / nbins)) if index == nbins: index = nbins - 1 bins[index] += 1 dhdlbins[index] += systrajs[i].dhdlam[j] for i, b in enumerate(bins): if b > 0: dhdlbins[i] /= b ene = np.cumsum(dhdlbins) / nbins lam = np.linspace(0, 1, nbins) def redraw(CapLam, M): plotEnsembler(lam, ene, CapLam=np.deg2rad(CapLam), M=M) # build layout and components player = ipywidgets.Play(value=0, min=0, max=360, step=1, description="rotate") capLam_slider = ipywidgets.IntSlider(value=0, min=0, max=360, step=1, orientation='vertical', description="Capital Lambda", continous_update=True) nReplicas_slider = ipywidgets.IntSlider(value=8, min=2, max=20, step=1, orientation='vertical', description="number of Replicas") ipywidgets.jslink((capLam_slider, 'value'), (player, 'value')) interactive_plot = ipywidgets.interactive_output(redraw, { 'CapLam': capLam_slider, 'M': nReplicas_slider }) controls = ipywidgets.VBox( [player, ipywidgets.HBox([capLam_slider, nReplicas_slider])]) app = ipywidgets.AppLayout(header=None, left_sidebar=controls, center=interactive_plot, right_sidebar=None, footer=None, align_items="center") return app """ This provides a nice widget for jupyter notebooks to play around with the conveyor belt. Parameters ---------- conveyorBelt numsys nbins steps Returns ------- """ # if none given build cvb if (isinstance(conveyorBelt, type(None))): lam = np.linspace(0, 1, nbins) ene = lam * np.sin(lam * np.pi) + lam**2 else: (cvb_traj, systrajs) = conveyorBelt.get_trajs() if (len(cvb_traj) == 0): raise IOError( "Could not find any conveyor belt simulation in conveyorbelt traj. Please simulate first." ) bins = np.zeros(nbins) dhdlbins = np.zeros(nbins) for i in systrajs: for j in range(systrajs[i].shape[0]): index = int(np.floor(systrajs[i].lam[j] / nbins)) if index == nbins: index = nbins - 1 bins[index] += 1 dhdlbins[index] += systrajs[i].dhdlam[j] for i, b in enumerate(bins): if b > 0: dhdlbins[i] /= b ene = np.cumsum(dhdlbins) / nbins lam = np.linspace(0, 1, nbins) def redraw(CapLam, M): plotEnsembler(lam, ene, CapLam=np.deg2rad(CapLam), M=M) # build layout and components player = ipywidgets.Play(value=0, min=0, max=360, step=1, description="rotate") capLam_slider = ipywidgets.IntSlider(value=0, min=0, max=360, step=1, orientation='vertical', description="Capital Lambda", continous_update=True) nReplicas_slider = ipywidgets.IntSlider(value=8, min=2, max=20, step=1, orientation='vertical', description="number of Replicas") ipywidgets.jslink((capLam_slider, 'value'), (player, 'value')) interactive_plot = ipywidgets.interactive_output(redraw, { 'CapLam': capLam_slider, 'M': nReplicas_slider }) controls = ipywidgets.VBox( [player, ipywidgets.HBox([capLam_slider, nReplicas_slider])]) app = ipywidgets.AppLayout(header=None, left_sidebar=controls, center=interactive_plot, right_sidebar=None, footer=None, align_items="center") return app
def __init__(self, tag='Turtles', name='Turtle Team', n=[0]): ## Set the widgets and display them top_header = widgets.HTML( value= '<h1 style="font-size:20px;">HeroesLounge-TeamStats Dashboard</h1>' + '<p>Enter team info and click "Check team", select seasons and click "Submit and run" button. ' + 'Wait for the data to be collected from heroeslounge.gg and then click "Display figures".</p>' + '<p>Source code is available at https://github.com/Anteb-Turtle/HeroesLounge-TeamStats</p>' ) tag_label = widgets.Label(value='Team tag:') self.team_tag = widgets.Text(tag) self.team_label = widgets.Label( value="Tag can be found in the team's URL on heroeslounge.gg") self.w_seasons = widgets.SelectMultiple( options=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], value=n, description='seasons', disabled=True) button0 = widgets.Button(description="Check team") self.button1 = widgets.Button(description="Submit and run", disabled=True) self.button2 = widgets.Button(description="Display figures", disabled=True) self.label0 = widgets.Label(value='') self.label1 = widgets.Label(value='') self.label2 = widgets.Label(value='') self.label_error = widgets.Label(value='') self.progress = widgets.IntProgress(value=0, min=0, max=10, bar_style='') self.out1, self.out2, self.out3, self.out4 = widgets.Output( ), widgets.Output(), widgets.Output(), widgets.Output() buttonlabel0 = widgets.HBox([button0, self.label0]) buttonlabel1 = widgets.HBox([self.button1, self.label1]) buttonlabel2 = widgets.HBox([self.button2, self.label2]) left_side = widgets.VBox([ tag_label, self.team_tag, self.team_label, buttonlabel0, self.w_seasons, buttonlabel1, self.progress, buttonlabel2, self.label_error ]) right_side = widgets.Tab() right_side.children = [self.out1, self.out2, self.out3, self.out4] right_side_titles = [ 'All players scatter plot', 'All maps scatter plot', 'Individual player stats', 'Individual map stats' ] for i in range(len(right_side.children)): right_side.set_title(i, right_side_titles[i]) box = widgets.AppLayout(header=top_header, left_sidebar=left_side, center=right_side, right_sidebar=None, footer=None) button0.on_click(self.instantiate) self.button1.on_click(self.submit_input) self.button2.on_click(self.plotter) display(box)
def fetch_result(jobid): command = [service_cmd, '--polljob', '--jobid', jobid] command = append_outfile(command, jobid) proc = subprocess.Popen(command, stdout=subprocess.PIPE, shell=False) (out, err) = proc.communicate() print(out.decode('UTF-8')) # Module template file overwrites this thus the final module can extend the number of checks applied. def run_checks(): return True submit.on_click(submit_job) clearOutput_button.on_click(clear_output) # Define layout mandatory_options = widgets.VBox( [mandatory_label, email_input, seq_file_input, submit, clearOutput_button]) optional_options = widgets.VBox([optional_label, output_file_name, output_dir]) center_container = widgets.HBox([mandatory_options, optional_options]) mandatory_options.layout = fixed_width_layout optional_options.layout = fixed_width_layout app_layout = widgets.AppLayout(header=app_label, left=None, center=center_container, right=None, footer=None)
def __init__(self, cflname, X=3, Y=3): # Read data self.cflname = cflname self.im = cfl.readcfl(self.cflname) self.im_unsqueeze_shape = np.where(np.array(self.im.shape) > 1)[0] self.im = self.im.squeeze() # Reorder image self.Ndims = len(self.im.shape) self.order = np.r_[:self.Ndims] self.im_ordered = self.im self.order3 = np.array([0, 1, 1]) # Slice image self.slice_num = np.zeros(self.Ndims, dtype="int") self.im_shape = self.im_ordered.shape self.im_slice = self.im_ordered[(slice(None), slice(None)) + tuple(self.slice_num[2:])] # Create figure self.fig = plt.figure(facecolor='black', figsize=(X, Y)) self.fig.subplots_adjust(left=0.0, bottom=0.0, right=1.0, top=1.0) self.fig.canvas.set_window_title(self.cflname) # Show image self.immax = np.max(abs(self.im)) self.l = plt.imshow(abs(self.im_slice), cmap="gray", vmin=0, vmax=self.immax) self.ax = plt.gca() self.asp = self.im_ordered.shape[1] / self.im_ordered.shape[0] self.aspect = 1 self.ax.set_aspect(1) plt.axis('off') radios = [] buttons = [] sliders = [] # Create Radio Buttons for X Y Dimensions dims = self.im_unsqueeze_shape[self.order].astype(str) for i in range(0, len(dims)): dims[i] = "Dim " + dims[i] up_down = widgets.RadioButtons(options=dims, description="Up/Down", disabled=False) radios.append(up_down) left_right = widgets.RadioButtons(options=dims, description="Left/Right", disabled=False) radios.append(left_right) # Create Radio buttoms for mosaic self.mosaic_valid = False mosaic = widgets.RadioButtons(options=dims, description="Mosaic", disabled=False) radios.append(mosaic) # create flip buttons self.flipx = 1 flipx_button = widgets.Button(description="Flip Up/Down") buttons.append(flipx_button) self.flipy = 1 flipy_button = widgets.Button(description="Flip Left/Right") buttons.append(flipy_button) # Create Refresh buttons refresh_button = widgets.Button(description="Refresh") buttons.append(refresh_button) # Create Save Button save_button = widgets.Button(description="Export to PNG") buttons.append(save_button) # create magnitude/phase radio button self.magnitude = True magnitude_radios = widgets.RadioButtons(options=["Mag", "Phase"]) #radios.append(magnitude_radios) # create aspect sliders aspect_slider = widgets.FloatSlider(min=0.25, max=4, step=0.05, value=1.0, description="Aspect Ratio") sliders.append(aspect_slider) # Create contrast sliders self.vmin = 0 vmin_slider = widgets.FloatSlider(min=0, max=1, step=0.01, value=0, description="Contrast Min") sliders.append(vmin_slider) self.vmax = 1 vmax_slider = widgets.FloatSlider(min=0, max=1, step=0.01, value=1, description="Contrast Max") sliders.append(vmax_slider) # Create sliders for choosing a slice dim_slider_dict = {} dim_slider_list = [] for d in np.r_[:self.Ndims]: slice_slider = widgets.IntSlider(min=0, max=self.im_shape[d]-1, step=1, \ value=self.slice_num[d], description=f'Dim {self.im_unsqueeze_shape[d]} Slice') dim_slider_dict[d] = slice_slider dim_slider_list.append(slice_slider) # Display widgets controls = radios + buttons + sliders + dim_slider_list radio_box = widgets.VBox(radios) button_box = widgets.VBox(buttons + [magnitude_radios]) slider_box = widgets.VBox(sliders + dim_slider_list) layout = widgets.AppLayout(header=None, left_sidebar=radio_box, center=slider_box, right_sidebar=button_box) display(layout) # Functionality up_down.observe(self.update_orderx, names='value') left_right.observe(self.update_ordery, names='value') mosaic.observe(self.update_mosaic, names='value') flipx_button.on_click(self.update_flipx) flipy_button.on_click(self.update_flipy) refresh_button.on_click(self.update_refresh) save_button.on_click(self.save) magnitude_radios.observe(self.update_magnitude, names='value') aspect_slider.observe(self.update_aspect, names='value') vmin_slider.observe(self.update_vmin, names='value') vmax_slider.observe(self.update_vmax, names='value') for dim_slider in dim_slider_dict: curr_slider = dim_slider_dict[dim_slider] dim = int(dim_slider) curr_slider.observe(partial(self.update_slice, dim), names='value') plt.show()
def reset_app(self): """Clear output and reset the whole application.""" self._output.clear_output() self._canvas_output.clear_output() output_height = self._canvas_height if self.dataset._widgets.time_dim is not None: # add margin + header output_height += 10 + 30 self._output.layout = widgets.Layout(height=str(output_height) + 'px') self.components['canvas'] = self._reset_canvas() self.canvas.layout = widgets.Layout( width='100%', height=str(self._canvas_height) + 'px', overflow='hidden', ) self.canvas_output.layout = widgets.Layout( width='100%', height=str(self._canvas_height) + 'px', overflow='hidden', margin='0', border='solid 1px #bbb', ) # header header_elements = [] menu_button = widgets.ToggleButton( value=True, tooltip='Show/Hide sidebar', icon='bars', layout=widgets.Layout(width='50px', height='auto', margin='0 10px 0 0'), ) header_elements.append(menu_button) if self.dataset._widgets.time_dim is not None: timestepper = TimeStepper(self.dataset, canvas_callback=self._redraw_canvas) self.components['timestepper'] = timestepper header_elements.append(timestepper.widget) # left pane accordion_elements = [] accordion_titles = [] if len(self.dataset._widgets.extra_dims): dim_explorer = DimensionExplorer(self.dataset, canvas_callback=self._redraw_canvas) self.components['dimensions'] = dim_explorer accordion_elements.append(dim_explorer.widget) accordion_titles.append('Dimensions') display_properties = self._get_display_properties() self.components.update(display_properties) display_properties_box = widgets.VBox([dp.widget for dp in display_properties.values()]) accordion_elements.append(display_properties_box) accordion_titles.append('Display properties') left_pane = widgets.Accordion(accordion_elements) for pos, title in enumerate(accordion_titles): left_pane.set_title(pos, title) left_pane.layout = widgets.Layout( width='400px', height='95%', margin='0 10px 0 0', flex='0 0 auto', ) def toggle_left_pane(change): if change['new']: left_pane.layout.display = 'block' self._resize_canvas() else: left_pane.layout.display = 'none' self._resize_canvas() menu_button.observe(toggle_left_pane, names='value') with self._canvas_output: display(self.canvas) # app app = widgets.AppLayout( header=widgets.HBox(header_elements), left_sidebar=None, right_sidebar=None, center=widgets.HBox([left_pane, self._canvas_output]), footer=None, pane_heights=['30px', str(self._canvas_height) + 'px', 0], grid_gap='10px', width='100%', overflow='hidden', ) with self._output: display(app)
def interactive_conveyor_belt(conveyorBelt=None, numsys:int=8, nbins:int=100, steps:int=100): #if none given build cvb if(isinstance(conveyorBelt, type(None))): import ensembler.potentials.OneD as pot import ensembler.system.perturbed_system as system import ensembler.ensemble.replicas_dynamic_parameters as cvb import ensembler.integrator as integ integrat = integ.stochastic.metropolisMonteCarloIntegrator() potential = pot.linearCoupledPotentials(Va=pot.harmonicOscillator(k=1.0), Vb=pot.harmonicOscillator(k=2.0)) syst = system.perturbedSystem(potential=potential , integrator=integrat) conveyorBelt=cvb.ConveyorBelt(0.0, 8, system=syst, build=False) conveyorBelt.simulate(steps) (cvb_traj, systrajs) = conveyorBelt.get_trajs() if(len(cvb_traj)==0): raise IOError("Could not find any conveyor belt simulation in conveyorbelt traj. Please simulate first.") bins=np.zeros(nbins) dhdlbins=np.zeros(nbins) for i in systrajs: for j in range(systrajs[i].shape[0]): index=int(np.floor(systrajs[i].lam[j]*nbins)) if index == nbins: index=nbins-1 bins[index]+=1 dhdlbins[index]+=systrajs[i].dhdlam[j] dhdlbins/=bins ene = np.cumsum(dhdlbins)/nbins lam = np.linspace(0, 1, nbins) nReps=conveyorBelt.nReplicas def redraw(CapLam, M): plotEnsembler(lam, ene, CapLam=np.deg2rad(CapLam), M=M) #build layout and components player = ipywidgets.Play(value=0, min=0, max=360, step=1, description="rotate") capLam_slider = ipywidgets.IntSlider(value=0, min=0, max=360, step=1, orientation='vertical', description="Capital Lambda", continous_update=True) nReplicas_slider = ipywidgets.IntSlider(value=8, min=2, max=20, step=1, orientation='vertical', description="number of Replicas") ipywidgets.jslink((capLam_slider, 'value'), (player, 'value')) interactive_plot = ipywidgets.interactive_output(redraw, {'CapLam':capLam_slider, 'M':nReplicas_slider}) controls = ipywidgets.VBox([player, ipywidgets.HBox([capLam_slider, nReplicas_slider])]) app = ipywidgets.AppLayout(header=None, left_sidebar=controls, center=interactive_plot, right_sidebar=None, footer=None, align_items="center") display(app) return app
def interactive_temp_graph(temp_range, temp_data_func): # Para renderizar LaTeX # ce.typeset() # Se obtienen los datos originales x_data = temp_range y_data = temp_data_func(x_data, 500, 450, 4.3E-3/250) def update(a, b, c, d, e, f): plt.figure(dpi=150) plt.title("Variación de la velocidad de reaccion frente a cambios en la temperatura") plt.xlabel("Temperatura (K)") plt.ylabel("Tasa de Reaccion (uM/min)") # Update temp parameters # For observed rate k_cat_observed = np.multiply(np.divide(np.multiply(1.380E-23, x_data), 6.626E-34), np.exp(-(np.divide(a, np.multiply(8.314, x_data))))) # For observed inactivation rate k_inactivation_observed = np.multiply(np.divide(np.multiply(1.380E-23, x_data), 6.626E-34), np.exp(-(np.divide(b, np.multiply(8.314, x_data))))) # Equilibrium temperature k_temp_equilibrium = np.exp(np.multiply(np.divide(c, 8.314), np.subtract(np.divide(1, d), np.divide(1, x_data)))) inactivation_parameter = np.exp(np.divide(np.multiply(np.multiply(k_temp_equilibrium, 1), k_inactivation_observed), np.add(1, k_temp_equilibrium))) # Calculation of temperature-dependant Vmax temperature_dependant_vmax = np.divide(np.multiply(np.multiply(k_cat_observed, f), inactivation_parameter), np.add(1, k_temp_equilibrium)) MicMent_temp = np.multiply(np.divide(np.multiply(temperature_dependant_vmax, e), np.add(450, e)), 60) plt.scatter(x_data, y_data, c="r", label="$\Delta G_a$: {}\n$\Delta G_i$: {}\n$\Delta H_e$: {}\nTemperatura Equilibrio: {}\nConcentracion de sustrato: {}\nConcentracion de enzima: {}".format(50000, 94000, 150000, 313, 500, 4.3E-3/250), s=8.0) plt.scatter(x_data, MicMent_temp, c="b", label="$\Delta G_a$ modificado: {}\n$\Delta G_i$ modificado: {}\n$\Delta H_e$ modificado: {}\n$T_e$ modificada: {}\nConcentracion de sustrato modificada: {}\nConcentracion de enzima modificada: {}".format(a, b, c, d, e, f), s=8.0) plt.plot(x_data, y_data, c="r", lw=2.0, alpha=0.5) plt.plot(x_data, MicMent_temp, c="b", lw=2.0, alpha=0.5) plt.legend(bbox_to_anchor=(1.05, 0.5), loc='center left') delta_g_act_slider = widgets.FloatSlider(value=50000.0, min=25000.0, max=75000.0, step=1000.0, continuous_update=True, description="dG de activacion", layout=widgets.Layout(width='auto', height='auto'), style={'description_width': 'initial'}) delta_g_inact_slider = widgets.FloatSlider(value=94000.0, min=50000.0, max=150000.0, step=1000.0, continuous_update=True, description="dG de inactivacion", layout=widgets.Layout(width='auto', height='auto'), style={'description_width': 'initial'}) delta_h_eq_slider = widgets.FloatSlider(value=150000.0, min=125000.0, max=400000.0, step=1000.0, continuous_update=True, description="dH de equilibrio", layout=widgets.Layout(width='auto', height='auto'), style={'description_width': 'initial'}) temp_eq_slider = widgets.FloatSlider(value=313.0, min=283.0, max=383.0, step=1, continuous_update=True, description="T de equilibrio", layout=widgets.Layout(width='auto', height='auto'), style={'description_width': 'initial'}) substrate_slider = widgets.FloatSlider(value=500.0, min=500.0, max=10000.0, step=100, continuous_update=True, description="Concentracion de sustrato", layout=widgets.Layout(width='auto', height='auto'), style={'description_width': 'initial'}) enzyme_dropdown = widgets.Dropdown(options=[round(num, 8) for num in list(np.concatenate((np.linspace((4.3E-3/10000), (4.3E-3/1000), 50), np.linspace((4.3E-3/1000), 4.3E-3, 50))))], value=4.3E-3/1000, description='Concentracion de enzima:', disabled=False, layout=widgets.Layout(width='auto', height='auto'), style={'description_width': 'initial'}) output_graph = widgets.interactive_output(update, {'a':delta_g_act_slider, 'b':delta_g_inact_slider, 'c':delta_h_eq_slider, 'd':temp_eq_slider, 'e':substrate_slider, 'f':enzyme_dropdown}) header = widgets.HTML(value="<H1><center>Gráfico Interactivo Temperatura - Enzimas</center></H1>", layout=widgets.Layout(width='auto', grid_area='header')) footer = widgets.HTML(value="<H1><center>A continuación se realizarán algunas actividades relacionadas con el efecto de la temperatura en las enzimas</center></H1>", layout=widgets.Layout(width='auto', grid_area='header')) equation = widgets.HTMLMath(value="", layout=widgets.Layout(width='auto', grid_area='header')) sliders = widgets.VBox([delta_g_act_slider, delta_g_inact_slider, delta_h_eq_slider, temp_eq_slider, substrate_slider, enzyme_dropdown]) final_output = widgets.AppLayout(header=header, left_sidebar=sliders, center=output_graph, footer=footer, right_sidebar=None, align_items='center', pane_widths=[3, 3, 1], pane_heights=[1, 5, '60px']) return final_output
def get_sets(spec, lookups, model_sets_file_name): """ Low-level Jupyter widget to get sets for optimisation :param Specification spec: object :param dict lookups: lookup tables :param str model_sets_file_name: filename :return: Tab widget """ # main widget tab = widgets.Tab() # sets that don't need a lookup table non_lookups = spec.user_defined_sets.keys() - lookups.keys() # lists for widget content lookup_name = list(lookups.keys()) lookup_dfr = list(lookups.values()) tab_contents = [] out_dfr = [] add_buttons = [] remove_buttons = [] out_qgs = [] in_qgs = [] # get current user data from file user_data = spec.get_default_sets() with open(model_sets_file_name) as p: user_data.update(json.load(p)) # callbacks for events def add_element(b, out_qg): current_df = out_qg.get_changed_df() # what is currently visible new_row = pd.DataFrame({'Name': [""]}) df = current_df.append(new_row, ignore_index=True) out_qg.df = df def add_element_from_lookup(b, out_qg, in_qg): df = out_qg.df.append(in_qg.get_selected_df()) out_qg.change_selection([]) out_qg.df = df def remove_element(b, out_qg): current_df = out_qg.get_changed_df() # what is currently visible rows = out_qg.get_selected_rows() if len(rows) > 0: new_df = current_df.drop(out_qg.df.index[rows]) out_qg.df = new_df def save_configuration(b): out_dict = {} for j in range(len(lookup_name)): out_dict[lookup_name[j]] = out_qgs[j].df.index.to_list() for l in non_lookups: j += 1 current_df = out_qgs[j].get_changed_df() # what is currently visible out_dict[l] = current_df['Name'].to_list() with open(model_sets_file_name, 'w') as fp: json.dump(out_dict, fp) print("Model sets saved to", model_sets_file_name, out_dict) # build tab_content for each lookup tab for i in range(len(lookup_dfr)): if lookup_name[i] in user_data: dfr = lookups[lookup_name[i]].loc[user_data[lookup_name[i]], :] out_dfr.append(dfr) else: out_dfr.append(pd.DataFrame()) add_buttons.append(widgets.Button(description='Add to set')) remove_buttons.append(widgets.Button(description='Remove from set')) out_qgs.append(qgrid.show_grid(out_dfr[i], grid_options={'maxVisibleRows': 5})) in_qgs.append(qgrid.show_grid(lookup_dfr[i], grid_options={'maxVisibleRows': 10})) tab_content = widgets.AppLayout( header=None, left_sidebar=widgets.VBox([add_buttons[i], remove_buttons[i]]), center=widgets.VBox([out_qgs[i], in_qgs[i]]), right_sidebar=None, footer=None) tab_contents.append(tab_content) # add callbacks add_buttons[i].on_click(functools.partial(add_element_from_lookup, out_qg=out_qgs[i], in_qg=in_qgs[i])) remove_buttons[i].on_click(functools.partial(remove_element, out_qg=out_qgs[i])) # set tab name tab.set_title(i, lookup_name[i]) # build tab content for non-lookup sets for k in non_lookups: i += 1 if k in user_data.keys(): df = pd.DataFrame({'Name': user_data[k]}) else: pd.DataFrame({'Name': [""]}) add_buttons.append(widgets.Button(description='Add to set')) remove_buttons.append(widgets.Button(description='Remove from set')) out_qgs.append(qgrid.show_grid(df, grid_options={'maxVisibleRows': 10})) tab_content = widgets.AppLayout( header=None, left_sidebar=widgets.VBox([add_buttons[i], remove_buttons[i]]), center=widgets.Box([out_qgs[i]]), right_sidebar=None, footer=None) tab_contents.append(tab_content) # add callbacks add_buttons[i].on_click(functools.partial(add_element, out_qg=out_qgs[i])) remove_buttons[i].on_click(functools.partial(remove_element, out_qg=out_qgs[i])) # set tab name tab.set_title(i, k) # build tab widget save_button = widgets.Button(description="Save configuration") save_button.on_click(save_configuration) v_box = widgets.VBox([save_button, tab]) tab.children = tab_contents return v_box, tab