예제 #1
0
    def report(self, show=False, **kwargs):
        '''
        Generates a PANEL object of interesting Model Stats and Data Info

        can be saved as HTML, PDF

        '''
        def get_df_info(df):
            import io
            buffer = io.StringIO()
            df.info(buf=buffer)
            s = buffer.getvalue()
            return s

        X = self.X
        app = pn.template.BootstrapTemplate(title="Model Report")
        pn.config.sizing_mode = "stretch_width"

        # Header
        app.header.header_background = 'blue'
        # app.header.append(pn.pane.Markdown("# Report"))
        # Side Bar

        #inputs = {f"{col}" : pnw.FloatSlider(name=col,start=X[col].min(), end=max(1,X[col].max()), value=X[col].median()) for col in X.columns}
        # for input in inputs:
        #    app.sidebar.append(inputs[input])

        # Main
        summary_df = self.summary().T

        preds = pd.DataFrame({
            "Actual": self.y.values.ravel(),
            "Predicted": self.predict(X=self.X).ravel()
        })
        act_vs_pred = preds.hvplot(x='Predicted',
                                   y='Actual',
                                   kind='scatter',
                                   title='Actual vs Predicted') * hv.Slope(
                                       1, 0).opts(color='red')
        summary = pn.Row(
            pn.Card(summary_df, title='Summary Statistics', height=500),
            pn.Card(act_vs_pred, title="Actual Vs Predicted", height=500))

        raw_data_page = pn.Row(
            pn.Card(pn.pane.Markdown(get_df_info(self.df)),
                    title='Data Info',
                    height=500),
            pn.Card(self.df.describe(), title='Data Stats', height=500))

        pages = pn.Tabs(('Summary', summary),
                        ('Raw Data Stats', raw_data_page),
                        ('Feature Importance', pn.panel("in work")))

        app.main.append(pages)
        if show:
            server = app.show("KJ's Model Anlaysis report", threaded=True)
            return (app, server)
        else:
            return app
예제 #2
0
def test_vanilla_with_sidebar():
    """Returns an app that uses the vanilla template in various ways.

Inspect the app and verify that the issues of [Issue 1641]\
(https://github.com/holoviz/panel/issues/1641) have been solved

- Navbar is "sticky"/ fixed to the top
- Navbar supports adding header items to left, center and right
- There is a nice padding/ margin everywhere
- Independent scroll for sidebar and main
- Only vertical scrollbars
"""
    vanilla = pn.template.VanillaTemplate(
        title="Vanilla Template",
        logo=LOGO,
    )

    pn.config.sizing_mode = "stretch_width"

    xs = np.linspace(0, np.pi)
    freq = pn.widgets.FloatSlider(name="Frequency", start=0, end=10, value=2)
    phase = pn.widgets.FloatSlider(name="Phase", start=0, end=np.pi)

    @pn.depends(freq=freq, phase=phase)
    def sine(freq, phase):
        return hv.Curve((xs, np.sin(xs * freq + phase))).opts(responsive=True,
                                                              min_height=400)

    @pn.depends(freq=freq, phase=phase)
    def cosine(freq, phase):
        return hv.Curve((xs, np.cos(xs * freq + phase))).opts(responsive=True,
                                                              min_height=400)

    vanilla.sidebar.append(freq)
    vanilla.sidebar.append(phase)
    vanilla.sidebar.append(pn.pane.Markdown(test_vanilla_with_sidebar.__doc__))
    vanilla.sidebar.append(pn.pane.Markdown("## Sidebar Item\n" * 50))

    vanilla.main.append(
        pn.Row(
            pn.Card(hv.DynamicMap(sine), title="Sine"),
            pn.Card(hv.DynamicMap(cosine), title="Cosine"),
        ))
    vanilla.main.append(
        pn.Row(
            pn.Card(hv.DynamicMap(sine), title="Sine"),
            pn.Card(hv.DynamicMap(cosine), title="Cosine"),
        ))
    vanilla.header[:] = [
        pn.Row(
            pn.widgets.Button(name="Left", sizing_mode="fixed", width=50),
            pn.layout.HSpacer(),
            pn.widgets.Button(name="Center", sizing_mode="fixed", width=50),
            pn.layout.HSpacer(),
            pn.widgets.Button(name="Right", sizing_mode="fixed", width=50),
        )
    ]
    vanilla.main_max_width = "600px"
    return vanilla
예제 #3
0
    def panel(self):
        result = bootstrap
        price_slider = pn.widgets.RangeSlider.from_param(
            self.param.price_slider, step=10000, format='0.0a')
        result.sidebar.append(price_slider)
        result.sidebar.append(self.param.rooms_slider)
        result.sidebar.append(self.param.bathrooms_slider)
        result.sidebar.append(self.param.type)
        result.sidebar.append(self.param.transit_time)

        image_format = r'<div> <img src="<%= value %>" height="70" alt="<%= value %>" width="70" style="float: left; margin: 0px 15px 15px 0px;" border="2" ></img> </div>'
        tabulator_formatters = {
            'price': NumberFormatter(format='$0,0'),
            'size': NumberFormatter(format='0,0 sqft'),
            'photo': HTMLTemplateFormatter(template=image_format)
        }

        df_widget = pn.widgets.Tabulator(self.filter_df(),
                                         pagination='remote',
                                         page_size=10,
                                         formatters=tabulator_formatters,
                                         sizing_mode='scale_both')
        df_widget.add_filter(self.param.price_slider, 'price')
        df_widget.add_filter(self.param.rooms_slider, 'bedrooms')

        # df_pins = pn.widgets.Tabulator(self.distance_df(), pagination='remote', page_size=10, sizing_mode='scale_both')

        layout = pn.Row(
            pn.Card(pn.bind(self.location,
                            x=self.stream.param.x,
                            y=self.stream.param.y),
                    title="Map",
                    sizing_mode='stretch_height'),
            pn.Column(
                pn.Card(df_widget,
                        title="Properties",
                        sizing_mode='scale_both')))

        result.sidebar.append(
            pn.Card(pn.bind(self.distance_df,
                            x=self.stream.param.x,
                            y=self.stream.param.y),
                    title="Pins",
                    sizing_mode='scale_both'))

        bootstrap.main.append(layout)
        bootstrap.main.append(pn.Card(self.details_area, title='Details'))

        return result
예제 #4
0
    def environment_variables_view(self):
        self.environment_variables.pop('', None)  # Clear blank key if there is one
        self.env_names = list()
        self.env_values = list()
        self.env_browsers = list()
        self.env_delete_buttons = list()

        for i, (k, v) in enumerate(self.environment_variables.items()):
            name_widget = self.env_var_widget(val=k, tag=f'env_key_{i}')
            val_widget = self.env_var_widget(val=str(v), tag=f'env_val_{i}')
            browser_widget = self.env_file_browser_widget(tag=f'env_browser_{i}')
            delete_btn = self.env_delete_btn(tag=f'env_del_{i}')
            self.env_names.append(name_widget)
            self.env_values.append(val_widget)
            self.env_browsers.append(browser_widget)
            self.env_delete_buttons.append(delete_btn)

        self.env_names.append(self.env_var_widget(val=None, tag='env_key_-1', placeholder='NEW_ENV_VAR'))
        self.env_values.append(self.env_var_widget(val=None, tag='env_val_-1', disabled=True))

        self.env_names[0].name = 'Name'
        self.env_values[0].name = 'Value'

        return pn.Card(
            *[pn.Row(k, v, b, d, sizing_mode='stretch_width') for k, v, b, d in
              zip_longest(self.env_names, self.env_values, self.env_browsers, self.env_delete_buttons)],
            self.file_browser_col,
            title='Environment Variables',
            sizing_mode='stretch_width',
        )
예제 #5
0
    def panel(self):
        """Render the current view.

        Returns
        -------
        row : Panel Row
            The panel is housed in a row which can then be rendered by the
            parent Dashboard.

        """

        self.row[0] = pn.Card(
            pn.Row(self.plot, sizing_mode="stretch_both"),
            header=pn.Row(
                pn.Spacer(width=25, sizing_mode="fixed"),
                self.close_button,
                pn.Row(self.param.X_variable, max_width=100),
                pn.Row(self.param.Y_variable, max_width=100),
                max_width=400,
                sizing_mode="fixed",
            ),
            collapsible=False,
            sizing_mode="stretch_both",
        )

        return self.row
예제 #6
0
파일: target.py 프로젝트: yougis/lumen
 def _construct_card(self, title, views):
     kwargs = dict(self.kwargs)
     layout = self.layout
     if isinstance(layout, list):
         item = pn.Column(sizing_mode='stretch_both')
         for row_spec in layout:
             row = pn.Row(sizing_mode='stretch_width')
             for index in row_spec:
                 if isinstance(index, int):
                     view = views[index].panel
                 else:
                     matches = [
                         view for view in views if view.name == index
                     ]
                     if matches:
                         view = matches[0].panel
                     else:
                         raise KeyError("Target could not find named "
                                        f"view '{index}'.")
                 row.append(view)
             item.append(row)
     else:
         if isinstance(layout, dict):
             layout_kwargs = dict(layout)
             layout = layout_kwargs.pop('type')
             kwargs.update(layout_kwargs)
         if layout == 'grid' and 'ncols' not in kwargs:
             kwargs['ncols'] = 2
         layout_type = _LAYOUTS[layout]
         item = layout_type(*(view.panel for view in views), **kwargs)
     params = {k: v for k, v in self.kwargs.items() if k in pn.Card.param}
     return pn.Card(item, title=title, name=title, **params)
예제 #7
0
 def panel(self):
     layout = pn.Card(sizing_mode='stretch_width',
                      title="Parametres",
                      collapsed=True)
     layout.append(
         pn.Param(
             self.param,
             widgets={
                 # 'logo': pn.widgets.FileInput(accept='.jpg,.png,.ico,.gif',name="Logo"),
                 'specfile':
                 pn.widgets.FileInput(accept='.yaml,.yml',
                                      name="Specification File")
             },
             show_name=False,
             expand_button=False,
             expand=False,
             sizing_mode="stretch_width"), )
     if self.config:
         layout.append(
             pn.Param(
                 self.config.param,
                 show_name=False,
                 expand_button=False,
                 expand=False,
                 sizing_mode="stretch_width",
             ))
     return layout
예제 #8
0
def addFigure():
    if buttonValue:
        try:
            bootstrap.main[0][2].pop(1)
        except:
            pass
        finally:
            bootstrap.main[0][2].append(
                pn.Card(plotGraph)
            )
    else:
        try:
            bootstrap.main[0][2].pop(1)
        except:
            pass
        finally:
            bootstrap.main[0][2].append(
                pn.Card(createTable)
            )
예제 #9
0
def division_slider(
    building_block_type,
    label,
    params,
    param_1,
    param_2,
    param_3=None,
    ignore_param=None,
    popup_label=None,
):
    """Create a slider used to divide the range 0-100 into 2 or 3 parts"""
    colors = config.app.style.colors
    color = colors.get(building_block_type.lower().replace(" ", "_"),
                       colors.default)

    if param_3 is None:
        spinners, slider = _division_slider_with_2_params(
            params, param_1, param_2)
    else:
        spinners, slider = _division_slider_with_3_params(
            params, param_1, param_2, param_3)

    widget = pn.Card(
        pn.Row(pn.layout.HSpacer(), *spinners, pn.layout.HSpacer()),
        pn.Row(slider),
        title=f"{building_block_type}: {label}",
        header_background=color,
        active_header_background=color,
        background="white",
        sizing_mode="stretch_width",
    )

    if ignore_param is not None:
        var_ignore = getattr(params, ignore_param)
        widget.append(
            pn.Row(
                pn.layout.HSpacer(),
                pn.widgets.Checkbox.from_param(var_ignore, width_policy="min"),
                pn.layout.HSpacer(),
            ))

        @param.depends(widget.param.collapsed, watch=True)
        def update_ignore_param(collapsed):
            """Set ignore parameter when card is collapsed"""
            params.set_param(**{ignore_param: collapsed})

        @param.depends(var_ignore, watch=True)
        def collapse_card(var_ignore):
            """Collapse card when parameter is ignored"""
            widget.collapsed = var_ignore

    if popup_label is not None:
        widget[-1].append(popup(label=popup_label))

    return widget
예제 #10
0
    def report(self, show=False, **kwargs):
        #X = self.X
        app = pn.template.BootstrapTemplate(title="Model Report")
        pn.config.sizing_mode = "stretch_width"

        # Header
        app.header.header_background = 'blue'

        # Side Bar
        # inputs = dict()
        # for col in self.db.Features[1]:
        #     if self.df[col].dtype == 'object':
        #         inputs[col] = pn.widgets.Select(
        #             name=col, value=self.df[col][0], options=self.df[col].unique().tolist())
        #     else:
        #         inputs[col] = pn.widgets.FloatSlider(
        #             name=col, value=self.df[col].median())

        # widgets = pn.WidgetBox("# Model Inputs", *[inputs[w] for w in inputs])
        # app.sidebar.append(widgets)

        # Main
        db = self.db.drop('Model', axis=1)
        summary_df = self.summary()
        #summary_df.columns = summary_df.loc[0]
        #summary_df = summary_df.loc[1:]
        #preds =pd.DataFrame({"Actual" : self.df[self.Target[0]], "Predicted" : self.predict()})
        #act_vs_pred = preds.hvplot(x='Predicted', y='Actual',kind='scatter', title='Actual vs Predicted') * hv.Slope(1,0).opts(color='red')
        summary = pn.Row(
            pn.Card(db, title='Available Models', height=500),
            pn.Card(summary_df, title='Summary Statistics', height=500)
            #pn.Card(act_vs_pred, title= "Actual Vs Predicted" , height=500)
        )
        pages = pn.Tabs(('Summary', summary),
                        ('Feature Importance', pn.panel("in work")))

        app.main.append(pages)
        if show:
            server = app.show("KJ's Model Anlaysis report", threaded=True)
            return (app, server)
        else:
            return app
예제 #11
0
def main():
    global series_viewer
    series_viewer = SeriesViewer(
    )  # model_path=sm.output()[0], sim_run=sm.output()[1], locality=sm.output()[2])
    button = pnw.Button(name='Refresh', button_type='primary')
    button.on_click(refresh)
    # Assembling the panel
    material.sidebar.append(pn.Param(series_viewer, name='Control Panel'))
    # material.sidebar.append(button)
    material.sidebar.append(pn.layout.Divider())
    material.sidebar.append(series_viewer.view_meta)
    # material.sidebar.append(pn.Row(save_fname, save_button))
    # material.sidebar.append(pn.widgets.StaticText(sm.simulation_run.path))
    material.main.append(
        pn.Column(
            pn.Row(pn.Card(series_viewer.view_map, title='Final State')),
            pn.Row(pn.Card(series_viewer.view_network, title='Network')),
            pn.Row(pn.Card(series_viewer.view_series, title='Time Map')),
            pn.Row(pn.Card(series_viewer.altair_series, title='Time Series')),
        ))
    return material, series_viewer
예제 #12
0
    def panel(self):
        """Render the current view.

        Returns
        -------
        row : Panel Row
            The panel is housed in a row which can then be rendered by the
            parent Dashboard.

        """
        self.row[0] = pn.Card(self.al_tabs, collapsible=False)
        return self.row
예제 #13
0
 def advanced_options_view(self):
     return pn.Column(
         self.environment_variables_view,
         pn.Card(
             '<h3>Modules to Load</h3>',
             pn.widgets.CrossSelector.from_param(self.param.modules_to_load, width=700),
             '<h3>Modules to Unload</h3>',
             pn.widgets.CrossSelector.from_param(self.param.modules_to_unload, width=700),
             title='Modules',
             sizing_mode='stretch_width',
             collapsed=True,
         ),
         name='Environment',
     )
예제 #14
0
    def panel(self):
        """Render the current view.

        Returns
        -------
        row : Panel Row
            The panel is housed in a row which can then be rendered by the
            parent Dashboard.

        """

        if not self.pipeline_initialised:
            self.row[0] = self.create_mode_selection_menu()
            return self.row

        else:

            if self.pipeline["Active Learning Settings"].is_complete():
                self._close_settings_button.disabled = False

            self.row[0] = pn.Card(
                pn.Column(
                    pn.Row(self.pipeline.stage),
                    pn.Row(
                        pn.layout.HSpacer(),
                        pn.layout.HSpacer(),
                        self.pipeline.buttons[1],
                        max_height=50,
                        # max_width=500,
                    ),
                ),
                header=pn.Row(
                    pn.widgets.StaticText(
                        name="Settings Panel",
                        value=
                        "Please choose the appropriate settings for your data",
                    ),
                    pn.pane.Markdown(
                        "### " +
                        list(self.pipeline._stages)[self._pipeline_stage], ),
                    self._close_settings_button,
                ),
                collapsible=False,
            )

            return self.row
예제 #15
0
    def panel(self):
        """Render the current view.

        Returns
        -------
        row : Panel Row
            The panel contents is housed in a row which can then be
            rendered by the Panel layout.

        """
        if hasattr(self.panel_contents, "panel"):
            self.row[0] = self.panel_contents.panel()
        else:
            self.row[0] = pn.Card(
                self.panel_contents,
                header=pn.Row(self._close_button),
                collapsible=False,
            )

        return self.row
예제 #16
0
파일: monitor.py 프로젝트: slac-lcls/ami
    async def plot_checked(self, event):
        async with self.lock:
            names = self.enabled_plots.value

            for name in names:
                metadata = self.plot_metadata[name]

                if name in self.plots:
                    continue

                if metadata['type'] not in globals():
                    print("UNSUPPORTED PLOT TYPE:", metadata['type'])
                    continue

                row, col = (0, 0)
                for key, column in self.layout_widgets.items():
                    if len(column) != 0:
                        continue

                    row, col = key
                    widget = globals()[metadata['type']]
                    widget = widget(topics=metadata['topics'],
                                    terms=metadata['terms'],
                                    addr=self.graphmgr_addr,
                                    name=name,
                                    idx=(row, col),
                                    ctx=self.ctx)
                    self.plots[name] = widget
                    column.append(
                        pn.Card(widget.plot,
                                title=name,
                                min_height=300,
                                min_width=300))
                    self.latency_lbls.append(widget.latency)
                    self.tasks[name] = asyncio.create_task(widget.update())
                    break

            removed_plots = set(self.plots.keys()).difference(names)
            for name in removed_plots:
                self.remove_plot(name)
예제 #17
0
    def create_mode_selection_menu(self):
        layout = pn.Card(
            pn.Row(
                pn.Column(
                    pn.pane.PNG(
                        "images/classification.png",
                        width=250,
                        height=250,
                        margin=(0, 0, 0, 50),
                    ),
                    pn.Row(self.select_labelling_mode_button, max_height=30),
                ),
                pn.Column(
                    pn.pane.PNG(
                        "images/cluster.png",
                        width=250,
                        height=250,
                        margin=(0, 0, 0, 50),
                    ),
                    pn.Row(self.select_AL_mode_button, max_height=30),
                ),
            ))

        return layout
예제 #18
0
 def __init__(self, *args, **kwargs):
     super().__init__(*args, **kwargs)
     self.overwrite_request = None
     self.cb = None
     self.progress_bar = pn.widgets.misc.Progress(width=250,
                                                  active=False,
                                                  css_classes=["hidden"])
     self.alert = pn.pane.Alert(css_classes=['hidden'])
     self.no_version_profiles_alert = pn.pane.Alert(
         'No profiles have been created for the selected version',
         alert_type='warning',
         css_classes=['hidden'],
         margin=(0, 5, 20, 5))
     self.profile_management_card = pn.Card(
         self.profile_management_panel,
         title='Manage Profiles',
         collapsed=False,
         sizing_mode='stretch_width',
     )
     self.revert_btn = pn.widgets.Button(name='Revert',
                                         button_type='primary',
                                         width=100)
     self.revert_btn.on_click(self.revert)
     self.profile_panel = pn.Column()
예제 #19
0
def test_template_with_no_sidebar(template_class=pn.template.VanillaTemplate, theme=pn.template.DefaultTheme):
    """Returns an app that uses the vanilla template in various ways.

Inspect the app and verify that the issues of [Issue 1641]\
(https://github.com/holoviz/panel/issues/1641) have been solved

- Navbar is "sticky"/ fixed to the top
- Navbar supports adding header items to left, center and right
- There is a nice padding/ margin everywhere
- Independent scroll for sidebar and main
- Only vertical scrollbars
"""
    vanilla = template_class(
        title="Vanilla Template",
        logo=LOGO,
        favicon="https://raw.githubusercontent.com/MarcSkovMadsen/awesome-panel/2781d86d4ed141889d633748879a120d7d8e777a/assets/images/favicon.ico",
        theme=theme
    )
    vanilla.main_max_width="1100px"

    xs = np.linspace(0, np.pi)
    freq = pn.widgets.FloatSlider(name="Frequency", start=0, end=10, value=2)
    phase = pn.widgets.FloatSlider(name="Phase", start=0, end=np.pi)

    @pn.depends(freq=freq, phase=phase)
    def sine(freq, phase):
        return hv.Curve((xs, np.sin(xs * freq + phase))).opts(responsive=True, min_height=400)

    @pn.depends(freq=freq, phase=phase)
    def cosine(freq, phase):
        return hv.Curve((xs, np.cos(xs * freq + phase))).opts(responsive=True, min_height=400)

    markdown = pn.pane.Markdown(test_template_with_no_sidebar.__doc__)
    row1 = pn.Row(
        pn.Card(hv.DynamicMap(sine), title="Sine"),
        pn.Card(hv.DynamicMap(cosine), title="Cosine"),
    )
    row2 = pn.Row(
        pn.Card(hv.DynamicMap(sine), title="Sine"),
        pn.Card(hv.DynamicMap(cosine), title="Cosine"),
    )
    if issubclass(template_class, pn.template.ReactTemplate):
        vanilla.main[0, :] = freq
        vanilla.main[1, :] = phase
        vanilla.main[2, :] = markdown
        vanilla.main[3:5, :] = row1
        vanilla.main[5:7, :] = row2
    else:
        vanilla.main.append(freq)
        vanilla.main.append(phase)
        vanilla.main.append(markdown)
        vanilla.main.append(row1)
        vanilla.main.append(row2)

    vanilla.header[:] = [
        pn.Row(
            pn.widgets.Button(name="Left", sizing_mode="fixed", width=50),
            pn.layout.HSpacer(),
            pn.widgets.Button(name="Center", sizing_mode="fixed", width=50),
            pn.layout.HSpacer(),
            pn.widgets.Button(name="Right", sizing_mode="fixed", width=50),
        )
    ]
    return vanilla
예제 #20
0
def test_template_with_sidebar(template_class=pn.template.VanillaTemplate, theme=pn.template.DefaultTheme):
    """Returns an app that uses the vanilla template in various ways.

Inspect the app and verify that the issues of [Issue 1641]\
(https://github.com/holoviz/panel/issues/1641) have been solved

- Navbar is "sticky"/ fixed to the top
- Navbar supports adding header items to left, center and right
- There is a nice padding/ margin everywhere
- Independent scroll for sidebar and main
- Only vertical scrollbars
"""
    vanilla = template_class(
        title=template_class.__name__,
        logo=LOGO,
        theme=theme
    )
    vanilla.site="My Site"


    xs = np.linspace(0, np.pi)
    freq = pn.widgets.FloatSlider(name="Frequency", start=0, end=10, value=2,
                                  sizing_mode='stretch_width')
    phase = pn.widgets.FloatSlider(name="Phase", start=0, end=np.pi,
                                   sizing_mode='stretch_width')

    @pn.depends(freq=freq, phase=phase)
    def sine(freq, phase):
        return hv.Curve((xs, np.sin(xs * freq + phase))).opts(
            responsive=True, min_height=150, max_height=450)

    @pn.depends(freq=freq, phase=phase)
    def cosine(freq, phase):
        return hv.Curve((xs, np.cos(xs * freq + phase))).opts(
            responsive=True, min_height=150, max_height=450)

    vanilla.sidebar.append(freq)
    vanilla.sidebar.append(phase)
    vanilla.sidebar.append(pn.pane.Markdown(test_template_with_sidebar.__doc__, height=280,
                                            sizing_mode='stretch_width'))
    vanilla.sidebar.append(pn.pane.Markdown("## Sidebar Item\n" * 50))

    row1 = pn.Row(
        pn.Card(hv.DynamicMap(sine), title="Sine"),
        pn.Card(hv.DynamicMap(cosine), title="Cosine"),
    )
    row2 = pn.Row(
        pn.Card(hv.DynamicMap(sine), title="Sine"),
        pn.Card(hv.DynamicMap(cosine), title="Cosine"),
    )
    row3 = pn.Row(
        pn.Card(hv.DynamicMap(sine), title="Sine"),
        pn.Card(hv.DynamicMap(cosine), title="Cosine"),
    )
    if issubclass(template_class, pn.template.ReactTemplate):
        vanilla.main[0:2, :] = row1
        vanilla.main[2:4, :] = row2
        vanilla.main[4:6, :] = row3
    else:
        vanilla.main.append(row1)
        vanilla.main.append(row2)

    vanilla.header[:] = [
        pn.Row(
            pn.widgets.Button(name="Left", sizing_mode="fixed", width=50),
            pn.layout.HSpacer(),
            pn.widgets.Button(name="Center", sizing_mode="fixed", width=50),
            pn.layout.HSpacer(),
            pn.widgets.Button(name="Right", sizing_mode="fixed", width=50),
        )
    ]
    return vanilla
예제 #21
0
    def panel(self):
        """Render the current view.

        Returns
        -------
        row : Panel Row
            The panel is housed in a row which can then be rendered by the
            parent Dashboard.

        """

        df_pane = hv.Table(
            self.region_criteria_df).opts(hooks=[self._apply_format])

        buttons_row = pn.Row(
            self.assign_label_group,
            pn.Row(
                self.assign_label_button,
                max_height=30,
            ),
            max_height=30,
            max_width=600,
        )

        plot = pn.Row(self.plot, height=400, width=500, sizing_mode="fixed")
        total = len(self.labels.keys())

        index = self.get_current_index_in_labelled_data()

        self._reset_index_buttons()

        if (index == 0) or (total == 0):
            self.first_labelled_button.disabled = True
            self.prev_labelled_button.disabled = True

        if index >= (total - 1):
            self.next_labelled_button.disabled = True

        if len(self.sample_region) == 0:
            self.new_labelled_button.disabled = True

        if self.src.data[config.settings["id_col"]][0] in list(
                self.labels.keys()):

            raw_label = self.labels[self.src.data[config.settings["id_col"]]
                                    [0]]

            label = config.settings["labels_to_strings"][f"{raw_label}"]

            previous_label = pn.widgets.StaticText(
                name="Current Label",
                value=f"{label}",
            )
        else:
            previous_label = pn.widgets.StaticText(
                name="Current Label",
                value=f"Unlabelled",
            )

        dataset_raw_label = self.src.data[config.settings["label_col"]][0]
        dataset_label = config.settings["labels_to_strings"][
            f"{dataset_raw_label}"]

        if (index + 1) > total:
            index_tally = f"NEW ({total} Labelled)"
        else:
            index_tally = f"{index+1}/{total}"

        labelling_info_col = pn.Column(
            pn.Column(
                pn.Row(self.region_message, max_height=50),
                pn.Row(df_pane,
                       max_height=130,
                       sizing_mode="stretch_width",
                       scroll=True),
                max_height=100,
                margin=(0, 0, 50, 0),
                max_width=400,
            ),
            pn.Row(
                self.column_dropdown,
                self.operation_dropdown,
                self.input_value,
            ),
            self.add_sample_criteria_button,
            self.remove_sample_selection_dropdown,
            self.remove_sample_criteria_button,
            pn.widgets.StaticText(name="Labelled Point", value=index_tally),
            pn.widgets.StaticText(
                name="Source ID",
                value=f"{self.src.data[config.settings['id_col']][0]}"),
            pn.widgets.StaticText(
                name="Original Dataset Label",
                value=f"{dataset_label}",
            ),
            pn.Row(previous_label, max_height=25),
            pn.Row(
                self.first_labelled_button,
                self.prev_labelled_button,
                self.next_labelled_button,
                self.new_labelled_button,
            ),
        )

        self.assign_label_button.disabled = False

        self.row[0] = pn.Card(
            pn.Row(
                plot,
                labelling_info_col,
                margin=(0, 20),
            ),
            buttons_row,
            header=pn.Row(
                pn.Spacer(width=25, sizing_mode="fixed"),
                pn.Row(self.param.X_variable, max_width=100),
                pn.Row(self.param.Y_variable, max_width=100),
                max_width=100,
                sizing_mode="fixed",
            ),
            collapsible=False,
            sizing_mode="stretch_both",
        )

        return self.row
예제 #22
0
    def panel(self):
        """Render the current view.

        Returns
        -------
        row : Panel Row
            The panel is housed in a row which can then be rendered by the
            parent Dashboard.

        """
        # CHANGED :: Remove need to rerender with increases + decreases

        selected = self._check_valid_selected()

        if selected:

            self._add_selected_to_history()

            button_row = pn.Row()

            if self.check_required_column("ra_dec"):
                button_row.append(self.zoom_increase)
                button_row.append(self.zoom_decrease)

            self.deselect_buttton = pn.widgets.Button(name="Deselect")
            self.deselect_buttton.on_click(self._deselect_source_cb)

            extra_data_list = [
                ["Source ID", self.src.data[config.settings["id_col"]][0]]
            ]

            for i, col in enumerate(config.settings["extra_info_cols"]):

                extra_data_list.append([col, self.src.data[f"{col}"][0]])

            extra_data_df = pd.DataFrame(extra_data_list, columns=["Column", "Value"])
            extra_data_pn = pn.widgets.DataFrame(
                extra_data_df, show_index=False, autosize_mode="fit_viewport"
            )
            self.row[0] = pn.Card(
                pn.Column(
                    pn.Row(
                        pn.Column(
                            button_row,
                            pn.Row(
                                pn.Row(self.optical_image),
                                self.radio_image,
                            ),
                        ),
                        pn.Row(extra_data_pn, max_height=250, max_width=300),
                    ),
                    self._create_image_tab(),
                ),
                collapsible=False,
                header=pn.Row(self.close_button, self.deselect_buttton, max_width=300),
            )

            if not self._image_updated:
                self._image_updated = True
                Process(target=self._update_default_images).start()

        else:
            self.row[0] = pn.Card(
                pn.Column(
                    self.search_id,
                    self._search_status,
                    pn.Row(
                        pn.widgets.DataFrame(
                            pd.DataFrame(
                                self.selected_history, columns=["Selected IDs"]
                            ),
                            show_index=False,
                        ),
                        max_width=300,
                    ),
                ),
                header=pn.Row(self.close_button, max_width=300),
            )

        return self.row
예제 #23
0
파일: test_app.py 프로젝트: rogervs/tec-lab
react = pn.template.ReactTemplate(title='React Template')

pn.config.sizing_mode = 'stretch_both'

xs = np.linspace(0, np.pi)
freq = pn.widgets.FloatSlider(name="Frequency", start=0, end=10, value=2)
phase = pn.widgets.FloatSlider(name="Phase", start=0, end=np.pi)


@pn.depends(freq=freq, phase=phase)
def sine(freq, phase):
    return hv.Curve((xs, np.sin(xs * freq + phase))).opts(responsive=True,
                                                          min_height=400)


@pn.depends(freq=freq, phase=phase)
def cosine(freq, phase):
    return hv.Curve((xs, np.cos(xs * freq + phase))).opts(responsive=True,
                                                          min_height=400)


react.sidebar.append(freq)
react.sidebar.append(phase)

# Unlike other templates the `ReactTemplate.main` area acts like a GridSpec
react.main[:4, :6] = pn.Card(hv.DynamicMap(sine), title='Sine')
react.main[:4, 6:] = pn.Card(hv.DynamicMap(cosine), title='Cosine')

react.servable()