Beispiel #1
0
    def controls(self):
        get_supercell = ToggleButton(
            value=False,
            description='Get supercell',
            disabled=False,
            button_style='',
            tooltip='Click to show supercell'
        )
        get_supercell.observe(self.supercell_callback, 'value')

        run_command = Button(
            description='Run Command',
            disabled=False
        )
        run_command.on_click(self.run_cmd_callback)

        self.command_text = Text(
            value='spin on',
            placeholder='spin on',
            description='Command:',
            disabled=False
        )

        data_filter_vbox = VBox(
            [HBox([get_supercell]), HBox([self.command_text, run_command])])

        return data_filter_vbox
Beispiel #2
0
    def __init__(self, viewer_state):

        self.state = viewer_state

        self.widget_show_axes = Checkbox(value=True, description="Show axes")
        link((self.widget_show_axes, 'value'), (self.state, 'show_axes'))

        self.button_normalize = ToggleButton(value=False,
                                             description='normalize',
                                             tooltip='Normalize histogram')
        link((self.button_normalize, 'value'), (self.state, 'normalize'))

        self.button_cumulative = ToggleButton(value=False,
                                              description='cumulative',
                                              tooltip='Cumulative histogram')
        link((self.button_cumulative, 'value'), (self.state, 'cumulative'))

        self.widget_x_axis = LinkedDropdown(self.state,
                                            'x_att',
                                            label='x axis')

        super().__init__([
            self.widget_x_axis, self.button_normalize, self.button_cumulative,
            self.widget_show_axes
        ])
Beispiel #3
0
    def _make_selection_repr_buttons(self):
        vbox = VBox()
        children = []

        rep_names = REPR_NAMES[:]
        excluded_names = ['ball+stick', 'distance']
        for name in excluded_names:
            rep_names.remove(name)

        for index, name in enumerate(rep_names):
            button = ToggleButton(description=name)

            def make_func():
                def on_toggle_button_value_change(change, button=button):
                    new = change['new']  # True/False
                    if new:
                        self._view.add_representation(button.description)
                    else:
                        self._view._remove_representations_by_name(
                            button.description)

                return on_toggle_button_value_change

            button.observe(make_func(), names='value')
            children.append(button)

        boxes = []
        for index, arr in enumerate(np.array_split(children, 4)):
            box = HBox([child for child in arr])
            boxes.append(box)
        vbox.children = boxes
        return vbox
    def __init__(self,
                 token_selector: TokensSelector,
                 update_handler: Callable = None):
        self.token_selector: TokensSelector = token_selector
        self.update_handler: Callable = update_handler

        self._page_size = IntSlider(
            description="Count",
            min=0,
            max=100,
            step=1,
            value=3,
            continuous_update=False,
            layout=Layout(width="300px"),
        )
        self._forward = Button(
            description=">>",
            button_style="Success",
            layout=Layout(width="40px", color="green"),
        )
        self._back = Button(
            description="<<",
            button_style="Success",
            layout=Layout(width="40px", color="green"),
        )
        self._split = ToggleButton(description="Split",
                                   layout=Layout(width="80px", color="green"))
        self._output = Output(layout=Layout(width="80%"))
Beispiel #5
0
def start_demo():
    images_widget = ImageSelector(IMAGES, max_width=450)
    images_box = VBox(
        children=[HTML('<h1>Select Image</h1>'), images_widget.widget])
    styles_widget = ImageSelector(STYLES, max_width=450)
    styles_box = VBox(
        children=[HTML('<h1>Select Style</h1>'), styles_widget.widget])
    selectors = HBox(children=[images_box, styles_box],
                     layout=Layout(justify_content="space-between"))

    confirm_button = ToggleButton(value=False,
                                  description='Stylise',
                                  disabled=False,
                                  button_style='success',
                                  tooltip='Description',
                                  icon='check')

    confirm_box = HBox(children=[confirm_button],
                       layout=Layout(justify_content='space-around'))

    def on_click(change):
        stylised_img = stylise(image=images_widget.image,
                               style=styles_widget.image)
        stylised_widget = Image(value=to_binary(stylised_img),
                                width=stylised_img.size[0],
                                height=stylised_img.size[1],
                                format='png')
        stylised_box = HBox(children=[stylised_widget],
                            layout=Layout(justify_content='space-around'))
        full_display.children = [selectors, confirm_box, stylised_box]

    confirm_button.observe(on_click, 'value')
    full_display = VBox(children=[selectors, confirm_box])
    return full_display
Beispiel #6
0
 def __init__(self, querier, worklist, force=False, debug=False, index=0, rules=None):
     reload()
     self.rules = rules or config.BIBTEX_TO_INFO
     self.worklist = worklist
     self.force = force
     self.querier = querier
     self.next_page_widget = Button(description="Next Work", icon="fa-arrow-right")
     self.reload_widget = Button(description="Reload", icon="fa-refresh")
     self.previous_page_widget = Button(description="Previous Work", icon="fa-arrow-left")
     self.debug_widget = ToggleButton(value=debug, description="Debug")
     self.textarea_widget = ToggleButton(value=False, description="TextArea")
     self.page_number_widget = Label(value="")
     self.output_widget = Output()
     self.next_page_widget.on_click(self.next_page)
     self.reload_widget.on_click(self.reload)
     self.previous_page_widget.on_click(self.previous_page)
     self.textarea_widget.observe(self.show)
     self.runner_widget = RunWidget() if config.RUN_WIDGET else ReplaceCellWidget()
     self.view = VBox([
         HBox([
             self.previous_page_widget,
             self.reload_widget,
             self.next_page_widget,
             self.debug_widget,
             self.textarea_widget,
             self.page_number_widget
         ]),
         self.output_widget,
         self.runner_widget.view,
     ])
     self.index = index
     self.varname = ""
     self.work = None
     self.articles = []
     self.reload(show=False)
Beispiel #7
0
    def create_highlight_toggle(self,
                                tag,
                                stats=None):  #TODO move constants out
        if stats is None:
            stats = self.get_stats(tag)

        tooltip = self.tag_tooltip(tag, stats)
        toggle_btn = ToggleButton(
            value=False,
            description='',
            disabled=False,
            button_style='',  # 'success', 'info', 'warning', 'danger' or ''
            tooltip='Press to toggle highlighting of the tag region.',
            icon='binoculars',  # (FontAwesome names without the `fa-` prefix)
            layout=Layout(height='35px',
                          width='35px',
                          borders='none',
                          align_items='center'))

        def highlight(toggle_value):
            self.model.plot.backend.highlight_selection(
                float(tag.access[0]),
                float(tag.access[1]) + 1, float(tag.address[0]),
                float(tag.address[1]) + 1, toggle_value, tag)

        toggle_btn.observe(highlight, 'value')

        return toggle_btn, tooltip
Beispiel #8
0
 def __init__(self, querier, worklist, force=False, debug=False, index=0):
     reload()
     self.worklist = worklist
     self.force = force
     self.querier = querier
     self.next_page_widget = Button(description='Next Work', icon='fa-arrow-right')
     self.reload_widget = Button(description='Reload', icon='fa-refresh')
     self.previous_page_widget = Button(description='Previous Work', icon='fa-arrow-left')
     self.debug_widget = ToggleButton(value=debug, description="Debug")
     self.textarea_widget = ToggleButton(value=False, description="TextArea")
     self.page_number_widget = Label(value="")
     self.output_widget = Output()
     self.next_page_widget.on_click(self.next_page)
     self.reload_widget.on_click(self.reload)
     self.previous_page_widget.on_click(self.previous_page)
     self.textarea_widget.observe(self.show)
     self.view = VBox([
         HBox([
             self.previous_page_widget,
             self.reload_widget,
             self.next_page_widget,
             self.debug_widget,
             self.textarea_widget,
             self.page_number_widget
         ]),
         self.output_widget
     ])
     self.index = index
     self.varname = ""
     self.work = None
     self.articles = []
     self.reload(show=False)
Beispiel #9
0
 def create_interactive_widgets(self, start_handler, stop_handler):
     """
     This method will create the necessary ipywidget objects and return the final Box to display.
     :return:
     """
     self.start_streaming_button = ToggleButton(
         description='Start Streaming',
         value=False,
         disabled=False,
         button_style='',
         tooltip='Start Streaming',
         icon='play'  # (FontAwesome names without the `fa-` prefix)
     )
     self.stop_streaming_button = ToggleButton(
         description='Stop Streaming',
         value=True,
         disabled=False,
         button_style='',
         tooltip='Stop Streaming',
         icon='stop'  # (FontAwesome names without the `fa-` prefix)
     )
     self.output_area = Output()
     self.start_handler = start_handler
     self.stop_handler = stop_handler
     self.start_streaming_button.observe(
         self.start_streaming_button_handler)
     self.stop_streaming_button.observe(self.stop_streaming_button_handler)
     self.display_holder = VBox([
         HBox([self.start_streaming_button, self.stop_streaming_button]),
         self.output_area
     ])
     return self.display_holder
Beispiel #10
0
def _default_toolbar(figure):
    pz = panzoom(figure.marks)
    normal_btn = ToggleButton(icon='fa-circle-o', tooltip='Normal', value=True)
    pz_btn = ToggleButton(icon='fa-arrows',
                          tooltip='Pan and Zoom',
                          value=False)
    snapshot_btn = Button(icon='fa-thumb-tack', tooltip='Snapshot View')
    reset_btn = Button(icon='fa-refresh', tooltip='Reset View')
    save_btn = Button(icon='fa-save', tooltip='Save as .png Image')

    def tog(btn, *args):
        # Traitlets closure
        def cb():
            for other in args:
                other.value = not btn.value

        return cb

    def overl(btn, value):
        # Traitlets closure
        def cb():
            if btn.value:
                figure.interaction = value

        return cb

    def snapshot(_):
        pz.snapshot()

    def reset(_):
        pz.reset()

    def save(_):
        figure.save()

    pz_btn.on_trait_change(tog(pz_btn, normal_btn))
    pz_btn.on_trait_change(overl(pz_btn, pz))

    normal_btn.on_trait_change(tog(normal_btn, pz_btn))
    normal_btn.on_trait_change(overl(normal_btn, None))

    snapshot_btn.on_click(snapshot)
    reset_btn.on_click(reset)
    save_btn.on_click(save)
    figure.interaction = None

    button_group = HBox(
        [normal_btn, pz_btn, snapshot_btn, reset_btn, save_btn])
    button_group._dom_classes = list(button_group._dom_classes) + ['btn-group']
    return button_group
Beispiel #11
0
    def _make_repr_playground(self):
        vbox = VBox()
        children = []

        rep_names = REPRESENTATION_NAMES[:]
        excluded_names = ['ball+stick', 'distance']
        for name in excluded_names:
            rep_names.remove(name)

        repr_selection = Text(value='*')
        repr_selection.layout.width = default.DEFAULT_TEXT_WIDTH
        repr_selection_box = HBox([Label('selection'), repr_selection])
        setattr(repr_selection_box, 'value', repr_selection.value)

        for index, name in enumerate(rep_names):
            button = ToggleButton(description=name)

            def make_func():
                def on_toggle_button_value_change(change, button=button):
                    selection = repr_selection.value
                    new = change['new']  # True/False
                    if new:
                        self._view.add_representation(button.description,
                                                      selection=selection)
                    else:
                        self._view._remove_representations_by_name(
                            button.description)

                return on_toggle_button_value_change

            button.observe(make_func(), names='value')
            children.append(button)

        button_clear = Button(description='clear',
                              button_style='info',
                              icon='fa-eraser')

        @button_clear.on_click
        def on_clear(button_clear):
            self._view.clear()
            for kid in children:
                # unselect
                kid.value = False

        vbox.children = children + [repr_selection, button_clear]
        _make_autofit(vbox)
        self.widget_quick_repr = vbox
        return self.widget_quick_repr
Beispiel #12
0
    def __init__(self, querier, citation_var, citation_file=None, debug=False, start=None, load=True):
        from .selenium_scholar import URLQuery
        reload()
        self.querier = querier
        work = work_by_varname(citation_var)
        citation_file = citation_file or getattr(work, "citation_file", citation_var)
        self.navigator = ArticleNavigator(citation_var, citation_file, backward=False, force_citation_file=False)
        self.query = URLQuery(self.navigator.work.scholar, start)
        self.next_page_widget = Button(description='Next Page', icon='fa-arrow-right')
        self.reload_widget = Button(description='Reload', icon='fa-refresh')
        self.previous_page_widget = Button(description='Previous Page', icon='fa-arrow-left')
        self.debug_widget = ToggleButton(value=debug, description="Debug")
        self.page_number_widget = Label(value="")
        self.next_page_widget.on_click(self.next_page)
        self.reload_widget.on_click(self.reload)
        self.previous_page_widget.on_click(self.previous_page)

        self.view = Tab([
            VBox([
                HBox([
                    self.previous_page_widget,
                    self.reload_widget,
                    self.next_page_widget,
                    self.debug_widget,
                    self.page_number_widget
                ]),
                self.navigator.output_widget,
            ]),
            self.navigator.view
        ])
        self.view.set_title(0, "Page")
        self.view.set_title(1, "Article")
        if load:
            self.reload(None)
    def __init__(self, viewer_state):

        self.state = viewer_state

        self.widget_show_axes = Checkbox(value=True, description="Show axes")
        link((self.widget_show_axes, 'value'), (self.state, 'show_axes'))

        self.widget_reference_data = LinkedDropdown(self.state,
                                                    'reference_data',
                                                    label='reference')
        self.widget_axis_x = LinkedDropdown(self.state,
                                            'x_att',
                                            label='x axis')
        self.widget_function = LinkedDropdown(self.state,
                                              'function',
                                              label='function')

        self.button_normalize = ToggleButton(value=False,
                                             description='normalize',
                                             tooltip='Normalize profiles')
        link((self.button_normalize, 'value'), (self.state, 'normalize'))

        super().__init__([
            self.widget_reference_data, self.widget_axis_x,
            self.widget_function, self.button_normalize, self.widget_show_axes
        ])
    def __init__(self, viewer_state):

        self.state = viewer_state

        self.widget_show_axes = Checkbox(value=False, description="Show axes")
        link((self.state, 'visible_axes'), (self.widget_show_axes, 'value'))

        self.widgets_axis = []
        for i, axis_name in enumerate('xyz'):
            widget_axis = LinkedDropdown(self.state,
                                         axis_name + '_att',
                                         label=axis_name + ' axis')
            self.widgets_axis.append(widget_axis)

        super().__init__([self.widget_show_axes] + self.widgets_axis)

        if hasattr(self.state, 'figure'):
            self.widget_show_movie_maker = ToggleButton(
                value=False, description="Show movie maker")
            self.movie_maker = ipv.moviemaker.MovieMaker(
                self.state.figure, self.state.figure.camera)
            dlink((self.widget_show_movie_maker, 'value'),
                  (self.movie_maker.widget_main.layout, 'display'),
                  lambda value: None if value else 'none')
            self.children += (self.widget_show_movie_maker,
                              self.movie_maker.widget_main)
Beispiel #15
0
 def _active_folder(self):
     """Folder that houses the controls for active scenes."""
     active = Button(icon='bars', description=' Active Scenes')
     opts = _ListDict([(str(i), ToggleButton(description=str(i),
                                             value=True))
                       for i, scn in enumerate(self.scenes)])
     for obj in opts.values():
         obj.observe(self._update_active, names='value')
     return Folder(active, opts)
Beispiel #16
0
    def _make_repr_playground(self):
        vbox = VBox()
        children = []

        rep_names = REPRESENTATION_NAMES[:]
        excluded_names = ['ball+stick', 'distance']
        for name in excluded_names:
            rep_names.remove(name)

        repr_selection = Text(value='*')
        repr_selection.layout.width = default.DEFAULT_TEXT_WIDTH
        repr_selection_box  = HBox([Label('selection'), repr_selection])
        setattr(repr_selection_box, 'value', repr_selection.value)

        for index, name in enumerate(rep_names):
            button = ToggleButton(description=name)

            def make_func():
                def on_toggle_button_value_change(change, button=button):
                    selection = repr_selection.value
                    new = change['new'] # True/False
                    if new:
                        self._view.add_representation(button.description, selection=selection)
                    else:
                        self._view._remove_representations_by_name(button.description)
                return on_toggle_button_value_change

            button.observe(make_func(), names='value')
            children.append(button)

        button_clear = Button(description='clear', button_style='info',
                icon='fa-eraser')

        @button_clear.on_click
        def on_clear(button_clear):
            self._view.clear()
            for kid in children:
                # unselect
                kid.value = False

        vbox.children = children + [repr_selection, button_clear]
        _make_autofit(vbox)
        self.widget_quick_repr = vbox
        return self.widget_quick_repr
Beispiel #17
0
    def __init__(self, *, default_folder: str, **defaults):
        """GUI base for PoS token count statistics."""
        super().__init__()
        self.default_folder: str = default_folder
        self.document_index: pd.DataFrame = None
        self.data: pd.DataFrame = None
        self.defaults: dict = defaults
        self.PoS_tag_groups: pd.DataFrame = pu.PD_PoS_tag_groups
        self._source_folder: FileChooserExt2 = None

        self._normalize: ToggleButton = ToggleButton(
            description="Normalize",
            icon='check',
            value=defaults.get('normalize', False),
            layout=Layout(width='140px'))
        self._smooth: ToggleButton = ToggleButton(description="Smooth",
                                                  icon='check',
                                                  value=defaults.get(
                                                      'smooth', False),
                                                  layout=Layout(width='140px'))
        self._temporal_key: Dropdown = Dropdown(
            options=TEMPORAL_GROUP_BY,
            value=defaults.get('temporal_key', 'decade'),
            description='',
            disabled=False,
            layout=Layout(width='90px'),
        )
        self._status: HTML = HTML(
            layout=Layout(width='50%', border="0px transparent white"))
        self._pos_groups: SelectMultiple = SelectMultiple(
            options=['Total'] + [
                x
                for x in self.PoS_tag_groups.index.tolist() if x != "Delimiter"
            ],
            value=['Total'],
            rows=10,
            layout=Layout(width='120px'),
        )

        self._tab: OutputsTabExt = OutputsTabExt(["Table", "Line", "Bar"],
                                                 layout={'width': '98%'})
        self._widgets_placeholder: HBox = HBox(children=[])
        self._sidebar_placeholder: HBox = HBox(children=[])
Beispiel #18
0
def gen_widget(anim):
    viewer = AnimationViewer(anim)
    clear_output(True)
    anim_widget = AnimationWidget()
    anim_widget.loop = True
    button = ToggleButton(description="run", default=False)
    link((button, 'value'), (anim_widget, 'run'))
    display(anim_widget)
    display(viewer.image)
    display(button)
    anim_widget.observe(lambda value: viewer.update(value["new"]),
                        names="value")
Beispiel #19
0
    def on_selector_change(self, change):
        if self.image_selector.value in self.image_dict:
            self.change_image(self.image_dict[self.image_selector.value])
            self.widget.children = [self.selector_box, self.display_box]
        else:
            self.upload_widget = FileUpload(accept='image/*', multiple=False)
            self.name_widget = Text(description='<b>Image Name</b>', style={'description_width': 'initial'})
            self.ok_widget = ToggleButton(
                            value=False,
                            description='Add',
                            disabled=False,
                            button_style='success',
                            tooltip='Description',
                            icon='check')

            self.add_widget = HBox(children=[self.upload_widget, self.name_widget, self.ok_widget],
                                   layout=Layout(justify_content='space-around'))

            self.widget.children = [self.selector_box, self.add_widget]
            self.upload_widget.observe(self.on_upload, 'value')
            self.ok_widget.observe(self.on_add, 'value')
    def __init__(self, data, dimensions, **kwargs):
        self.data = data
        self.options = {}
        self.margins = {}
        self.dimensions = dimensions
        self.debug = kwargs.get('debug', None)
        self.modal = kwargs.get('modal', True)
        self.only_subsets = kwargs.get('only_subsets', False)
        self.output_cont = Output()
        self.output_cont.layout.width = '100%'
        self.options_cont = Output()
        self.margins_cont = Output()

        self.option_tab = Tab()
        self.option_tab.children = [self.options_cont, self.margins_cont]
        self.option_tab.set_title(0, "Plot")
        self.option_tab.set_title(1, "Layout")
        self.option_tab.layout.display = 'none'

        self.options_check = ToggleButton(value=False,
                                          description="Options",
                                          icon='cog')
        self.options_check.observe(lambda v: self.showWidget(v["new"]),
                                   names='value')

        self.tab = HBox()
        self.tab.children = [self.option_tab, self.output_cont]
        init_notebook_mode(connected=True)
        if (self.window == None):
            if (self.modal == True):
                title = kwargs.get('title', "")
                mode = kwargs.get('mode', "")
                self.window = Floatview(title=title, mode=mode)
            else:
                self.window = Output()
                display(self.window)
        self.DefaultMargins()
        self.displayWindow()
Beispiel #21
0
def generatePara(templateFile):
    items = []
    with open(templateFile, 'r') as fd:
        for line in fd.readlines():
            g = re.search(r'[\w:]*\s*.*=*\s*\${(.*)}',line)
            if g:
                label_value = ''
                isTB = False
                for match in re.findall(r'(\w+)=("[^"]*"|\'[^\']*|[^,\n]*)', g.group(1)):
                    if match[0] == 'label':
                        lbs = match[1].split('/')
                        label_value = lbs[0]
                        if len(lbs) == 2:
                            isTB = True
                    if match[0] == 'option':
                        ops = match[1].split('/')
                        # if the first element of options is 'CO', remove it's label name.
                        if ops[0] == 'CO':
                            label = Label(layout = Layout(width = "150px"))
                            if not isTB:
                                togBtns = ToggleButtons(options = ops[1:])
                            else:
                                togBtns = ToggleButton(description = ops[1], value = True)
                        else:
                            label = Label(value = label_value, layout = Layout(width = "150px"))
                            if not isTB:
                                togBtns = ToggleButtons(options = ops)
                            else:
                                togBtns = ToggleButton(description = ops[0], value = True)
                        box = Box([label, togBtns], layout = Layout(width = '100%', justify_content = 'flex-start'))
                        items.append(box)
                    if match[0] == 'value':
                        label = Label(value = label_value, layout = Layout(width = "150px"))
                        text = Text(value = match[1])
                        box = Box([label, text], layout = Layout(width = '100%', justify_content = 'flex-start'))
                        items.append(box)
    fd.close()
    return items
Beispiel #22
0
    def _make_general_box(self):
        if self.widget_general is None:
            step_slide = IntSlider(value=self.step,
                                   min=-100,
                                   max=100,
                                   description='step')
            delay_text = IntSlider(value=self.delay,
                                   min=10,
                                   max=1000,
                                   description='delay')
            toggle_button_interpolate = ToggleButton(
                self.interpolate,
                description='Smoothing',
                tooltip='smoothing trajectory')
            link((toggle_button_interpolate, 'value'), (self, 'interpolate'))

            background_color_picker = ColorPicker(value='white',
                                                  description='background')
            camera_type = Dropdown(value=self.camera,
                                   options=['perspective', 'orthographic'],
                                   description='camera')

            link((step_slide, 'value'), (self, 'step'))
            link((delay_text, 'value'), (self, 'delay'))
            link((toggle_button_interpolate, 'value'), (self, 'interpolate'))
            link((camera_type, 'value'), (self, 'camera'))
            link((background_color_picker, 'value'),
                 (self._view, 'background'))

            center_button = self._make_button_center()
            render_button = self._show_download_image()
            center_render_hbox = _make_autofit(
                HBox([
                    toggle_button_interpolate,
                    center_button,
                    render_button,
                ]))

            v0_left = VBox([
                step_slide,
                delay_text,
                background_color_picker,
                camera_type,
                center_render_hbox,
            ])

            v0_left = _relayout_master(v0_left, width='100%')
            self.widget_general = v0_left
        return self.widget_general
Beispiel #23
0
def _default_toolbar(figure):
    pz = panzoom(figure.marks)
    normal_btn = ToggleButton(icon='fa-circle-o', tooltip='Normal', value=True)
    pz_btn = ToggleButton(icon='fa-arrows', tooltip='Pan and Zoom', value=False)
    snapshot_btn = Button(icon='fa-thumb-tack', tooltip='Snapshot View')
    reset_btn = Button(icon='fa-refresh', tooltip='Reset View')
    save_btn = Button(icon='fa-save', tooltip='Save as .png Image')

    def tog(btn, *args):
        # Traitlets closure
        def cb():
            for other in args:
                other.value = not btn.value
        return cb

    def overl(btn, value):
        # Traitlets closure
        def cb():
            if btn.value:
                figure.interaction = value
        return cb

    def snapshot(_):
        pz.snapshot()

    def reset(_):
        pz.reset()

    def save(_):
        figure.save()

    pz_btn.on_trait_change(tog(pz_btn, normal_btn))
    pz_btn.on_trait_change(overl(pz_btn, pz))

    normal_btn.on_trait_change(tog(normal_btn, pz_btn))
    normal_btn.on_trait_change(overl(normal_btn, None))

    snapshot_btn.on_click(snapshot)
    reset_btn.on_click(reset)
    save_btn.on_click(save)
    figure.interaction = None

    button_group = HBox([normal_btn, pz_btn, snapshot_btn, reset_btn, save_btn])
    button_group._dom_classes = list(button_group._dom_classes) + ['btn-group']
    return button_group
Beispiel #24
0
        def _(*_):
            self.buttons = [
                ToggleButton(description=label,
                             layout=Layout(margin='1', width='auto'))
                for label in self._selection_obj._options_labels
            ]
            self.label = Label(
                self.description,
                layout=Layout(
                    width=self.style.get('description_width', '100px')))
            self.children = [self.label] + self.buttons

            @observer(self.buttons, 'value')
            def _(*_):
                self.value = tuple(value for btn, value in zip(
                    self.buttons, self._selection_obj._options_values)
                                   if btn.value)
Beispiel #25
0
    def __init__(self, querier, debug=False):
        from snowballing.selenium_scholar import URLQuery
        reload()
        self.querier = querier

        self.query = None
        self.search_text_widget = Text(value="", layout=Layout(width="99%"))
        self.do_search_widget = Button(description="Search", icon="fa-search")

        self.navigator = ArticleNavigator(force_citation_file=False)
        self.next_page_widget = Button(description="Next Page", icon="fa-arrow-right")
        self.reload_widget = Button(description="Reload", icon="fa-refresh")
        self.previous_page_widget = Button(description="Previous Page", icon="fa-arrow-left")
        self.debug_widget = ToggleButton(value=debug, description="Debug")
        self.page_number_widget = Label(value="")
        self.next_page_widget.on_click(self.next_page)
        self.reload_widget.on_click(self.reload)
        self.previous_page_widget.on_click(self.previous_page)
        self.do_search_widget.on_click(self.search)
        self.search_text_widget.on_submit(self.search)


        self.tab_widget = Tab([
            VBox([
                HBox([
                    self.previous_page_widget,
                    self.reload_widget,
                    self.next_page_widget,
                    self.debug_widget,
                    self.page_number_widget
                ]),
                self.navigator.output_widget,

            ]),
            self.navigator.view
        ])
        self.view = VBox([
            self.search_text_widget,
            self.do_search_widget,
            self.tab_widget
        ])

        self.tab_widget.set_title(0, "Page")
        self.tab_widget.set_title(1, "Article")
Beispiel #26
0
    def __init__(self, name: str = "Network", **opts):
        super().__init__(name=name, **opts)
        self.network: ipycytoscape.CytoscapeWidget = None

        self._view: Output = Output()

        self._node_spacing: IntSlider = IntSlider(description='', min=3, max=500, value=50, layout={'width': '200px'})
        self._edge_length_val: IntSlider = IntSlider(
            description='', min=3, max=500, value=50, layout={'width': '200px'}
        )
        self._padding: IntSlider = IntSlider(description='', min=3, max=500, value=50, layout={'width': '200px'})
        self._label: HTML = HTML(value='&nbsp;', layout={'width': '200px'})
        self._network_layout = Dropdown(
            description='',
            options=['cola', 'klay', 'circle', 'concentric'],
            value='cola',
            layout={'width': '115px'},
        )
        self._relayout = Button(
            description="Continue", button_style='Info', layout=Layout(width='115px', background_color='blue')
        )
        self._animate: Checkbox = ToggleButton(
            description="Animate",
            icon='check',
            value=True,
            layout={'width': '115px'},
        )
        self._curve_style = Dropdown(
            description='',
            options=[
                ('Straight line', 'haystack'),
                ('Curve, Bezier', 'bezier'),
                ('Curve, Bezier*', 'unbundled-bezier'),
            ],
            value='haystack',
            layout={'width': '115px'},
        )

        self._custom_styles: dict = None

        self._buzy: bool = False
def interact_gravity_sphere():
    Q = interactive(
        drawfunction,
        delta_rho=FloatSlider(
            description=r"$\Delta\rho$",
            min=-5.0,
            max=5.0,
            step=0.1,
            value=1.0,
            continuous_update=False,
        ),
        a=FloatSlider(min=0.1,
                      max=4.0,
                      step=0.1,
                      value=1.0,
                      continuous_update=False),
        z=FloatSlider(min=0.1,
                      max=5.0,
                      step=0.1,
                      value=1.0,
                      continuous_update=False),
        stationSpacing=FloatSlider(
            description="Step",
            min=0.005,
            max=0.1,
            step=0.005,
            value=0.01,
            continuous_update=False,
            readout_format=".3f",
        ),
        B=ToggleButton(
            value=True,
            description="keep previous plots",
            disabled=False,
            button_style="",
            tooltip="Click me",
            layout=Layout(width="20%"),
        ),
    )
    return Q
Beispiel #28
0
    def create_category(self, name, attr, value, color, font_color):
        """Create category widget"""
        VIS = ["none", ""]
        widget = self.toggle_widgets[attr] = ToggleButton(value=value,
                                                          description=name)
        wcolor = self.color_widgets[attr] = ColorPicker(value=color,
                                                        description=name,
                                                        width="180px")
        wfont_color = self.font_color_widgets[attr] = ColorPicker(
            value=font_color, width="110px")

        def visibility(*args):
            """" Toggles visibility of category """
            self._display_stack += 1
            wcolor.layout.display = VIS[int(widget.value)]
            wfont_color.layout.display = VIS[int(widget.value)]
            self.display()

        widget.observe(visibility, "value")
        wcolor.observe(self.update_widget, "value")
        wfont_color.observe(self.update_widget, "value")
        visibility()
Beispiel #29
0
    def create_tab(self):

        def change(visible):
            with self.figure:
                if visible:
                    ipv.style.axes_on()
                    ipv.style.box_on()
                else:
                    ipv.style.axes_off()
                    ipv.style.box_off()
        self.state.add_callback('visible_axes', change)

        self.widget_show_movie_maker = ToggleButton(value=False, description="Show movie maker")
        self.movie_maker = ipv.moviemaker.MovieMaker(self.figure, self.figure.camera)
        dlink((self.widget_show_movie_maker, 'value'), (self.movie_maker.widget_main.layout, 'display'), lambda value: None if value else 'none')

        self.tab_general = VBox([])
        self.tab_general.children += self._options_cls(self.state).children
        self.tab_general.children += (self.widget_show_movie_maker, self.movie_maker.widget_main)
        children = [self.tab_general]
        self.tab = Tab(children)
        self.tab.set_title(0, "General")
        self.tab.set_title(1, "Axes")
Beispiel #30
0
        def _(*_):
            self.buttons = []
            for label in self._selection_obj._options_labels:
                short_label = short_label_map.get(label, label)
                self.buttons.append(
                    ToggleButton(
                        description=short_label
                        if len(short_label) < 15 else short_label[:12] + "…",
                        tooltip=label,
                        layout=Layout(
                            margin='1',
                            width='auto',
                        ),
                    ))
            if self.description:
                self.label = Label(
                    self.description,
                    layout=Layout(
                        width=self.style.get('description_width', '100px')))
            else:
                self.label = Label(
                    self.description,
                    layout=Layout(
                        width=self.style.get('description_width', '0px')))
            self.children = [self.label] + self.buttons

            @observer(self.buttons, 'value')
            def _(*_):
                proposed_value = tuple(value for btn, value in zip(
                    self.buttons, self._selection_obj._options_values)
                                       if btn.value)
                # When nothing is selected, treat as if everything is selected.
                if len(proposed_value) == 0:
                    proposed_value = tuple(value for btn, value in zip(
                        self.buttons, self._selection_obj._options_values))
                self.value = proposed_value
Beispiel #31
0
    def __init__(self,
                 *,
                 bundle: Bundle,
                 default_token_filter: str = None,
                 **kwargs):
        global CURRENT_BUNDLE
        CURRENT_BUNDLE = bundle
        """Alternative implementation that uses VectorizedCorpus"""
        self.bundle: Bundle = bundle
        self.co_occurrences: pd.DataFrame = None
        self.pivot_column_name: str = 'time_period'

        if not isinstance(bundle.token2id, Token2Id):
            raise ValueError(
                f"Expected Token2Id, found {type(bundle.token2id)}")

        if not isinstance(bundle.compute_options, dict):
            raise ValueError(
                "Expected Compute Options in bundle but found no such thing.")
        """Current processed corpus"""
        self.corpus: VectorizedCorpus = bundle.corpus
        """Properties that changes current corpus"""
        self._pivot: Dropdown = Dropdown(
            options=["year", "lustrum", "decade"],
            value="decade",
            placeholder='Group by',
            layout=Layout(width='auto'),
        )
        """"Keyness source"""
        self._keyness_source: Dropdown = Dropdown(
            options={
                "Full corpus": KeynessMetricSource.Full,
                "Concept corpus": KeynessMetricSource.Concept,
                "Weighed corpus": KeynessMetricSource.Weighed,
            } if bundle.concept_corpus is not None else {
                "Full corpus": KeynessMetricSource.Full,
            },
            value=KeynessMetricSource.Weighed
            if bundle.concept_corpus is not None else KeynessMetricSource.Full,
            layout=Layout(width='auto'),
        )
        """Properties that changes current corpus"""
        self._keyness: Dropdown = Dropdown(
            options={
                "TF": KeynessMetric.TF,
                "TF (norm)": KeynessMetric.TF_normalized,
                "TF-IDF": KeynessMetric.TF_IDF,
                "HAL CWR": KeynessMetric.HAL_cwr,
                "PPMI": KeynessMetric.PPMI,
                "LLR": KeynessMetric.LLR,
                "LLR(Z)": KeynessMetric.LLR_Z,
                "LLR(N)": KeynessMetric.LLR_N,
                "DICE": KeynessMetric.DICE,
            },
            value=KeynessMetric.TF,
            layout=Layout(width='auto'),
        )
        """Properties that don't change current corpus"""
        self._token_filter: Text = Text(value=default_token_filter,
                                        placeholder='token match',
                                        layout=Layout(width='auto'))
        self._global_threshold_filter: Dropdown = Dropdown(
            options={
                f'>= {i}': i
                for i in (1, 2, 3, 4, 5, 10, 25, 50, 100, 250, 500)
            },
            value=5,
            layout=Layout(width='auto'),
        )
        self.concepts: Set[str] = set(self.bundle.context_opts.concept or [])
        self._largest: Dropdown = Dropdown(
            options=[10**i for i in range(0, 7)],
            value=10000,
            layout=Layout(width='auto'),
        )
        self._show_concept = ToggleButton(
            description='Show concept',
            value=False,
            icon='',
            layout=Layout(width='auto'),
        )
        self._message: HTML = HTML()
        self._compute: Button = Button(description="Compute",
                                       button_style='success',
                                       layout=Layout(width='auto'))
        self._save = Button(description='Save', layout=Layout(width='auto'))
        self._download = Button(description='Download',
                                layout=Layout(width='auto'))
        self._download_output: Output = Output()
        self._table_view = TableViewerClass(data=empty_data())

        self._button_bar = HBox(
            children=[
                VBox([HTML("<b>Token match</b>"), self._token_filter]),
                VBox([HTML("<b>Source</b>"), self._keyness_source]),
                VBox([HTML("<b>Keyness</b>"), self._keyness]),
                VBox([HTML("🙂"), self._show_concept]),
                VBox([HTML("<b>Group by</b>"), self._pivot]),
                VBox([HTML("<b>Threshold</b>"),
                      self._global_threshold_filter]),
                VBox([HTML("<b>Group limit</b>"), self._largest]),
                VBox([self._save, self._download]),
                VBox([self._compute, self._message]),
                self._download_output,
            ],
            layout=Layout(width='auto'),
        )
        super().__init__(
            children=[self._button_bar, self._table_view.container],
            layout=Layout(width='auto'),
            **kwargs)

        self._save.on_click(self.save)
        self._download.on_click(self.download)

        self.start_observe()
Beispiel #32
0
class TabularCoOccurrenceGUI(GridBox):  # pylint: disable=too-many-ancestors
    def __init__(self,
                 *,
                 bundle: Bundle,
                 default_token_filter: str = None,
                 **kwargs):
        global CURRENT_BUNDLE
        CURRENT_BUNDLE = bundle
        """Alternative implementation that uses VectorizedCorpus"""
        self.bundle: Bundle = bundle
        self.co_occurrences: pd.DataFrame = None
        self.pivot_column_name: str = 'time_period'

        if not isinstance(bundle.token2id, Token2Id):
            raise ValueError(
                f"Expected Token2Id, found {type(bundle.token2id)}")

        if not isinstance(bundle.compute_options, dict):
            raise ValueError(
                "Expected Compute Options in bundle but found no such thing.")
        """Current processed corpus"""
        self.corpus: VectorizedCorpus = bundle.corpus
        """Properties that changes current corpus"""
        self._pivot: Dropdown = Dropdown(
            options=["year", "lustrum", "decade"],
            value="decade",
            placeholder='Group by',
            layout=Layout(width='auto'),
        )
        """"Keyness source"""
        self._keyness_source: Dropdown = Dropdown(
            options={
                "Full corpus": KeynessMetricSource.Full,
                "Concept corpus": KeynessMetricSource.Concept,
                "Weighed corpus": KeynessMetricSource.Weighed,
            } if bundle.concept_corpus is not None else {
                "Full corpus": KeynessMetricSource.Full,
            },
            value=KeynessMetricSource.Weighed
            if bundle.concept_corpus is not None else KeynessMetricSource.Full,
            layout=Layout(width='auto'),
        )
        """Properties that changes current corpus"""
        self._keyness: Dropdown = Dropdown(
            options={
                "TF": KeynessMetric.TF,
                "TF (norm)": KeynessMetric.TF_normalized,
                "TF-IDF": KeynessMetric.TF_IDF,
                "HAL CWR": KeynessMetric.HAL_cwr,
                "PPMI": KeynessMetric.PPMI,
                "LLR": KeynessMetric.LLR,
                "LLR(Z)": KeynessMetric.LLR_Z,
                "LLR(N)": KeynessMetric.LLR_N,
                "DICE": KeynessMetric.DICE,
            },
            value=KeynessMetric.TF,
            layout=Layout(width='auto'),
        )
        """Properties that don't change current corpus"""
        self._token_filter: Text = Text(value=default_token_filter,
                                        placeholder='token match',
                                        layout=Layout(width='auto'))
        self._global_threshold_filter: Dropdown = Dropdown(
            options={
                f'>= {i}': i
                for i in (1, 2, 3, 4, 5, 10, 25, 50, 100, 250, 500)
            },
            value=5,
            layout=Layout(width='auto'),
        )
        self.concepts: Set[str] = set(self.bundle.context_opts.concept or [])
        self._largest: Dropdown = Dropdown(
            options=[10**i for i in range(0, 7)],
            value=10000,
            layout=Layout(width='auto'),
        )
        self._show_concept = ToggleButton(
            description='Show concept',
            value=False,
            icon='',
            layout=Layout(width='auto'),
        )
        self._message: HTML = HTML()
        self._compute: Button = Button(description="Compute",
                                       button_style='success',
                                       layout=Layout(width='auto'))
        self._save = Button(description='Save', layout=Layout(width='auto'))
        self._download = Button(description='Download',
                                layout=Layout(width='auto'))
        self._download_output: Output = Output()
        self._table_view = TableViewerClass(data=empty_data())

        self._button_bar = HBox(
            children=[
                VBox([HTML("<b>Token match</b>"), self._token_filter]),
                VBox([HTML("<b>Source</b>"), self._keyness_source]),
                VBox([HTML("<b>Keyness</b>"), self._keyness]),
                VBox([HTML("🙂"), self._show_concept]),
                VBox([HTML("<b>Group by</b>"), self._pivot]),
                VBox([HTML("<b>Threshold</b>"),
                      self._global_threshold_filter]),
                VBox([HTML("<b>Group limit</b>"), self._largest]),
                VBox([self._save, self._download]),
                VBox([self._compute, self._message]),
                self._download_output,
            ],
            layout=Layout(width='auto'),
        )
        super().__init__(
            children=[self._button_bar, self._table_view.container],
            layout=Layout(width='auto'),
            **kwargs)

        self._save.on_click(self.save)
        self._download.on_click(self.download)

        self.start_observe()

    def _compute_handler(self, *_):
        try:
            self.set_buzy(True, "Computing...")

            self.update_corpus()
            self.update_co_occurrences()

            self.set_buzy(False, "✔")

        except ValueError as ex:
            self.alert(str(ex))
        except Exception as ex:
            logger.exception(ex)
            self.alert(str(ex))
            raise

        self.set_buzy(False)

    def set_buzy(self, is_buzy: bool = True, message: str = None):

        if message:
            self.alert(message)

        self._keyness.disabled = is_buzy
        self._keyness_source.disabled = is_buzy
        self._show_concept.disabled = is_buzy or self.bundle.concept_corpus is None
        self._pivot.disabled = is_buzy
        self._global_threshold_filter.disabled = is_buzy
        self._token_filter.disabled = is_buzy
        self._save.disabled = is_buzy
        self._download.disabled = is_buzy
        self._largest.disabled = is_buzy

    def start_observe(self):

        self.stop_observe()

        self._compute.on_click(self._compute_handler)

        self._show_concept.observe(self.update_co_occurrences, 'value')
        self._largest.observe(self.update_co_occurrences, 'value')
        self._show_concept.observe(self._update_toggle_icon, 'value')
        self._token_filter.observe(self._filter_co_occurrences, 'value')

        return self

    def stop_observe(self):

        with contextlib.suppress(Exception):

            self._show_concept.unobserve(self.update_co_occurrences, 'value')
            self._largest.unobserve(self.update_co_occurrences, 'value')
            self._token_filter.unobserve(self._filter_co_occurrences, 'value')
            self._show_concept.unobserve(self._update_toggle_icon, 'value')

    def alert(self, message: str) -> None:
        self._message.value = f"<span style='color: red; font-weight: bold;'>{message}</span>"

    def info(self, message: str) -> None:
        self._message.value = f"<span style='color: green; font-weight: bold;'>{message}</span>"

    def update_corpus(self, *_):

        self.set_buzy(True, "⌛ Computing...")
        self.corpus = self.to_corpus()
        self.set_buzy(False, "✔")

    def update_co_occurrences(self, *_) -> pd.DataFrame:

        self.set_buzy(True, "⌛ Preparing data...")
        self.co_occurrences = self.to_co_occurrences()
        self.set_buzy(False, "✔")

        self.set_buzy(True, "⌛ Loading table...")
        self._table_view.update(self.co_occurrences[DISPLAY_COLUMNS])
        self.set_buzy(False, "✔")

        self.info(f"Data size: {len(self.co_occurrences)}")

    def _filter_co_occurrences(self, *_) -> pd.DataFrame:

        co_occurrences: pd.DataFrame = self.to_filtered_co_occurrences()

        self._table_view.update(co_occurrences[DISPLAY_COLUMNS])

        self.info(f"Data size: {len(co_occurrences)}")

    def _update_toggle_icon(self, event: dict) -> None:
        with contextlib.suppress(Exception):
            event['owner'].icon = 'check' if event['new'] else ''

    @property
    def ignores(self) -> List[str]:

        if self.show_concept or not self.concepts:
            return set()

        if isinstance(self.concepts, Iterable):
            return set(self.concepts)

        return {self.concepts}

    @property
    def show_concept(self) -> bool:
        return self._show_concept.value

    @show_concept.setter
    def show_concept(self, value: bool):
        self._show_concept.value = value

    @property
    def keyness(self) -> KeynessMetric:
        return self._keyness.value

    @keyness.setter
    def keyness(self, value: KeynessMetric):
        self._keyness.value = value

    @property
    def keyness_source(self) -> KeynessMetricSource:
        return self._keyness_source.value

    @keyness_source.setter
    def keyness_source(self, value: KeynessMetricSource):
        self._keyness_source.value = value

    @property
    def global_threshold(self) -> int:
        return self._global_threshold_filter.value

    @global_threshold.setter
    def global_threshold(self, value: int):
        self._global_threshold_filter.value = value

    @property
    def largest(self) -> int:
        return self._largest.value

    @largest.setter
    def largest(self, value: int):
        self._largest.value = value

    @property
    def token_filter(self) -> List[str]:
        return self._token_filter.value.strip().split()

    @token_filter.setter
    def token_filter(self, value: List[str]):
        self._token_filter.value = ' '.join(value) if isinstance(
            value, list) else value

    @property
    def pivot(self) -> str:
        return self._pivot.value

    @pivot.setter
    def pivot(self, value: str):
        self._pivot.value = value

    def save(self, *_b):
        store_co_occurrences(
            filename=path_add_timestamp('co_occurrence_data.csv'),
            co_occurrences=self.co_occurrences,
            store_feather=False,
        )

    def download(self, *_):
        self._button_bar.disabled = True

        with contextlib.suppress(Exception):
            js_download = create_js_download(self.co_occurrences, index=True)
            if js_download is not None:
                with self._download_output:
                    IPython_display.display(js_download)

        self._button_bar.disabled = False

    def to_co_occurrences(self) -> pd.DataFrame:

        self.set_buzy(True, "⌛ Preparing co-occurrences...")

        try:

            if self.pivot_column_name not in self.corpus.document_index.columns:
                raise ValueError(
                    f"expected '{self.pivot_column_name}' but not found in {', '.join(self.corpus.document_index.columns)}"
                )

            co_occurrences: pd.DataFrame = (CoOccurrenceHelper(
                corpus=self.corpus,
                source_token2id=self.bundle.token2id,
                pivot_keys=self.pivot_column_name,
            ).exclude(self.ignores).largest(self.largest)).value

            self.set_buzy(False, None)
            self.alert("✔")
        except Exception as ex:
            self.set_buzy(False)
            self.alert(f"😢 {str(ex)}")
            raise

        return co_occurrences

    def to_filtered_co_occurrences(self) -> pd.DataFrame:

        if not self.token_filter:
            return self.co_occurrences

        co_occurrences: pd.DataFrame = self.co_occurrences

        re_filters: List[str] = [
            fnmatch.translate(s) for s in self.token_filter
        ]

        for re_filter in re_filters:
            co_occurrences = co_occurrences[co_occurrences.token.astype(
                str).str.contains(pat=re_filter, case=False, na="")]

        return co_occurrences

    def to_corpus(self) -> VectorizedCorpus:
        """Returns a grouped, optionally TF-IDF, corpus filtered by token & threshold."""
        self.set_buzy(True, "⌛ updating corpus...")

        try:
            corpus: VectorizedCorpus = self.bundle.keyness_transform(
                opts=self.compute_opts())
            self.set_buzy(False, None)
            self.alert("✔")
        except Exception as ex:
            self.set_buzy(False)
            self.alert(f"😢 {str(ex)}")
            raise

        return corpus

    def setup(self) -> "TabularCoOccurrenceGUI":
        self.update_corpus()
        return self

    def compute_opts(self) -> ComputeKeynessOpts:
        return ComputeKeynessOpts(
            period_pivot=self.pivot,
            keyness_source=self.keyness_source,
            keyness=self.keyness,
            tf_threshold=self.global_threshold,
            pivot_column_name=self.pivot_column_name,
            normalize=False,
        )