Beispiel #1
0
def range_column_filter(colname, stepsize, title=None):
    """Create a column filter, if the column exists and contains at least one\
    not-None value.  Creates the slider for the filter and returns a getter\
    for the slider's current range"""
    if colname in entries[0]:
        column_data = [entry[colname] for entry in entries]
        if validate_column(column_data, colname):
            top = stepUp(max((val for val in column_data if val is not None)), stepsize)
            col_filter = RangeSlider(
                title = cols[colname] if title is None else title,
                range=(0, top),
                start = 0,
                end = top,
                step=stepsize
            )
            getter = lambda :col_filter.range
            col_filter.on_change(
                'range',
                lambda a,r,g: debounce(
                    update,
                    getter,
                    150,
                    curdoc()
                )
            )
            widgets.append(col_filter)
            return getter
Beispiel #2
0
    def __init__(self, analyser):
        """
        Creates and manages the Gui for RangeAnalysis
        """
        self.analyser = analyser

        self.fig = self.make_fig()

        init_start = self.analyser.x.min() * 1.1
        init_end = self.analyser.x.max() * 0.9

        span_kwargs = dict(dimension='height', line_dash='dashed', line_width=3)
        self.start_span = Span(location=init_start, line_color='green', **span_kwargs)
        self.end_span = Span(location=init_end, line_color='red', **span_kwargs)

        self.range_slide = RangeSlider(start=self.analyser.x.min(), end=self.analyser.x.max(), step=self.analyser.dx,
                                       value=(init_start, init_end),
                                       width=self.fig.plot_width)

        self.start_connected = widgets.Button(label="start", button_type='success')
        self.end_connected = widgets.Button(label="end", button_type='success')

        self.setup_callbacks()

        self.app = self.make_app()
        self.doc = None
Beispiel #3
0
	def __init__(self):
		sel_vals = ['All', 'Shot']

		self._data = OffsetData(r'fb_on_Shots_4TEST_FB_v2.csv',
							   r'Shots_4TEST_FB_part.pickle')
		self._offset = None

		# self._div_debug = Div(text='Debug: <br>', width=1000)
		self._sel_type = Select(title="Slice type:", value=sel_vals[0], options=sel_vals)
		self._sld_slice = RangeSlider(start=0, end=10, value=(0,100), step=1, title="Slice Num")
		self._set_slider()
		self._sld_slice.on_change('value', self._update_all)
		self._sel_type.on_change('value', self.change_type)

		self._plot_image = figure(plot_width=800, plot_height=600,title='Offset')
	  
		self._set_index()
		self._breaks = self._data.get_breaks()
		self._ds_offset = ColumnDataSource(data=self._get_offset())
		colormap = plt.cm.seismic
		create_colors = [colormap(i) for i in np.arange(0,self._data._shots.max()+1,1)]
		colors = [None]*self._data._breaks.size
		
		for i in range(self._data._breaks.size):
			colors[i]=matplotlib.colors.to_hex(create_colors[self._data._shots[i]])
		mapper = LinearColorMapper(palette=colors, low=self._data._shots.min(), high=self._data._shots.max())
		self._plot_image.scatter(x='x', y='y', source=self._ds_offset, line_color=None, fill_color=transform('shot', mapper), size=2)
Beispiel #4
0
def range_column_filter(colname, stepsize, title=None):
    """Create a column filter, if the column exists and contains at least one\
    not-None value.  Creates the slider for the filter and returns a getter\
    for the slider's current range"""
    if colname in entries[0]:
        column_data = [entry[colname] for entry in entries]
        if validate_column(column_data, colname):
            top = stepUp(max((val for val in column_data if val is not None)), stepsize)
            col_filter = RangeSlider(
                title = cols[colname] if title is None else title,
                value=(0, top),
                start = 0,
                end = top,
                step=stepsize
            )
            getter = lambda :col_filter.value
            col_filter.on_change(
                'value',
                lambda a,r,g: debounce(
                    update,
                    getter,
                    150,
                    curdoc()
                )
            )
            widgets.append(col_filter)
            return getter
    def setupChunkTimeWindow(self):
        #subtool to control the chunk size distribution
        self.grainSizeSlider = RangeSlider(
            start=0,
            end=300,
            value=[0, 20],
            step=1,
            title="Chunk Time Bounds",
            width=self.sliderWidth)  #, callback=timeSliderCallback)
        self.grainSizeSlider.on_change("value", self.grainSizeSliderCallback)

        maxSamplePlot = figure(height=self.subplotSize,
                               x_range=(0, 300),
                               y_range=(0, 1.1),
                               width=self.subplotSize,
                               toolbar_location=None,
                               title="Grain Size PDF",
                               tools="")  #x_range = (0,len(movedSignal)))
        maxSamplePlot.yaxis.visible = False
        maxSamplePlot.grid.visible = False

        numPoints = 10
        chunkSizes = np.linspace(self.minGrainSz, self.maxGrainSz, numPoints)
        probs = np.linspace(0, 1, int(numPoints / 2))
        probs = np.append(probs, probs[::-1])

        maxSamplePlot.line(chunkSizes, probs, name="sampleSizePDF")
        # maxSampleWindow = column(maxSamplePlot,grainSizeSlider)
        return maxSamplePlot
 def modify_doc(doc):
     plot = Plot(plot_height=400, plot_width=400, x_range=Range1d(0, 1), y_range=Range1d(0, 1), min_border=0)
     slider = RangeSlider(start=0, end=10, value=(1, 5), title="bar", css_classes=["foo"], width=300)
     def cb(attr, old, new):
         slider.bar_color = "rgba(255, 255, 0, 1)"
     slider.on_change('value', cb)
     doc.add_root(column(slider, plot))
Beispiel #7
0
    def test_js_on_change_executes(self, bokeh_model_page) -> None:
        slider = RangeSlider(start=0,
                             end=10,
                             value=(1, 5),
                             title="bar",
                             css_classes=["foo"],
                             width=300)
        slider.js_on_change('value',
                            CustomJS(code=RECORD("value", "cb_obj.value")))

        page = bokeh_model_page(slider)

        drag_range_slider(page.driver, ".foo", "lower", 150)

        results = page.results
        assert float(results['value'][0]) > 1
        assert float(results['value'][1]) == 5

        drag_range_slider(page.driver, ".foo", "lower", 150)

        results = page.results
        assert float(results['value'][0]) > 1
        assert float(results['value'][1]) > 5

        assert page.has_no_console_errors()
Beispiel #8
0
class OffsetPage(object):
	def __init__(self):
		sel_vals = ['All', 'Shot']

		self._data = OffsetData(r'fb_on_Shots_4TEST_FB_v2.csv',
							   r'Shots_4TEST_FB_part.pickle')
		self._offset = None

		# self._div_debug = Div(text='Debug: <br>', width=1000)
		self._sel_type = Select(title="Slice type:", value=sel_vals[0], options=sel_vals)
		self._sld_slice = RangeSlider(start=0, end=10, value=(0,100), step=1, title="Slice Num")
		self._set_slider()
		self._sld_slice.on_change('value', self._update_all)
		self._sel_type.on_change('value', self.change_type)

		self._plot_image = figure(plot_width=800, plot_height=600,title='Offset')
	  
		self._set_index()
		self._breaks = self._data.get_breaks()
		self._ds_offset = ColumnDataSource(data=self._get_offset())
		colormap = plt.cm.seismic
		create_colors = [colormap(i) for i in np.arange(0,self._data._shots.max()+1,1)]
		colors = [None]*self._data._breaks.size
		
		for i in range(self._data._breaks.size):
			colors[i]=matplotlib.colors.to_hex(create_colors[self._data._shots[i]])
		mapper = LinearColorMapper(palette=colors, low=self._data._shots.min(), high=self._data._shots.max())
		self._plot_image.scatter(x='x', y='y', source=self._ds_offset, line_color=None, fill_color=transform('shot', mapper), size=2)

	def _get_offset(self):
		self._offset = self._data.get_offset()
		xs = self._offset
		ys = self._breaks
	
		return {'x': xs, 'y': ys}
	def _set_index(self):
		self._data.set_indices_offset(self._sel_type.value, self._sld_slice.value[0], self._sld_slice.value[1])
	def _set_slider(self):
		min_val, max_val = self._data.get_minmax(self._sel_type.value)
		self._sld_slice.start = min_val
		self._sld_slice.end = max_val
		self._sld_slice.value = (0,min_val + (max_val - min_val) // 2)
	def change_type(self, attr, old, new):
		min_val, max_val = self._data.get_minmax(self._sel_type.value)
		self._sld_slice.value = (0,min_val + (max_val - min_val) // 2)
		self._sld_slice.start = min_val
		self._sld_slice.end = max_val
		_update_all
	def _update_all(self, attr, old, new):
		self._set_index()
		self._ds_offset.data = self._get_offset()

	def get_layout(self):
		wbox = widgetbox(self._sel_type, self._sld_slice)
		plots = row(self._plot_image)

		# return [wbox, plots, self._div_debug]
		return [column(wbox, plots)]
Beispiel #9
0
        def modify_doc(doc):
            plot = Plot(plot_height=400, plot_width=400, x_range=Range1d(0, 1), y_range=Range1d(0, 1), min_border=0)
            slider = RangeSlider(start=0, end=10, value=(1, 5), title="bar", css_classes=["foo"], width=300)

            def cb(attr, old, new):
                slider.bar_color = "rgba(255, 255, 0, 1)"

            slider.on_change('value', cb)
            doc.add_root(column(slider, plot))
 def modify_doc(doc):
     source = ColumnDataSource(dict(x=[1, 2], y=[1, 1], val=["a", "b"]))
     plot = Plot(plot_height=400, plot_width=400, x_range=Range1d(0, 1), y_range=Range1d(0, 1), min_border=0)
     plot.add_glyph(source, Circle(x='x', y='y', size=20))
     plot.add_tools(CustomAction(callback=CustomJS(args=dict(s=source), code=RECORD("data", "s.data"))))
     slider = RangeSlider(start=0, end=10, value=(1, 5), title="bar", css_classes=["foo"], width=300)
     def cb(attr, old, new):
         source.data['val'] = [old, new]
     slider.on_change('value', cb)
     doc.add_root(column(slider, plot))
def generate_frame_plot(frame):
    sparse_data = json.loads(frame.frame_data)

    img = np.array(sparse_to_dense(sparse_data))
    source = ColumnDataSource(data={'data': img.flatten()})
    plot = figure(x_range=(0, 256),
                  y_range=(0, 256),
                  width=750,
                  height=750,
                  tools='hover,box_zoom,crosshair,reset,save',
                  tooltips=[("x", "$x"), ("y", "$y"), ("value", "@image")],
                  title="Frame {}".format(frame.id))
    im = plot.image(image=[img], x=0, y=0, dw=256, dh=256, palette="Viridis11")

    range_slider_callback = CustomJS(args=dict(source=source, im=im),
                                     code="""
                var image_source = im.data_source;
                var d = image_source.data['image'][0];
                var f = slider.value


                for (var i = 0; i < d.length; i++) {

                        if( source.data['data'][i] >= f[1]){
                            d[i] = f[1];
                        }else if(source.data['data'][i] <= f[0]){
                            d[i] = f[0];
                        } 
                        else{
                            d[i] = source.data['data'][i];
                        }

                }
                image_source.change.emit();
            """)

    for i, cluster in enumerate(frame.clusters):
        bbox = json.loads(cluster.bbox)
        label = Label(x=bbox[3],
                      y=bbox[2],
                      text=str(i + 1),
                      text_color='red',
                      text_font_size="8pt")
        plot.add_layout(label)
    slider = RangeSlider(start=1,
                         end=np.max(img) + 2,
                         step=1,
                         title="View Window",
                         value=(1, np.max(img)))
    slider.js_on_change('value', range_slider_callback)
    range_slider_callback.args['slider'] = slider
    plot.toolbar.logo = None
    layout = Column(slider, plot)

    return layout
def generate_cluster_plot(cluster):
    data = json.loads(cluster.intensity_image)
    bbox = json.loads(cluster.bbox)
    length = bbox[2] - bbox[0]
    width = bbox[3] - bbox[1]

    img = np.array(data)
    source = ColumnDataSource(data={'data': img.flatten()})

    plot = figure(match_aspect=True,
                  width=350,
                  height=350,
                  tools='hover,box_zoom,crosshair,reset,save',
                  tooltips=[("x", "$x"), ("y", "$y"), ("value", "@image")],
                  title="Cluster View")
    im = plot.image(image=[img],
                    x=0,
                    y=0,
                    dw=width,
                    dh=length,
                    palette="Inferno11")

    range_slider_callback = CustomJS(args=dict(source=source, im=im),
                                     code="""
                var image_source = im.data_source;
                var d = image_source.data['image'][0];
                var f = slider.value


                for (var i = 0; i < d.length; i++) {

                        if( source.data['data'][i] >= f[1]){
                            d[i] = f[1];
                        }else if(source.data['data'][i] <= f[0]){
                            d[i] = f[0];
                        } 
                        else{
                            d[i] = source.data['data'][i];
                        }

                }
                image_source.change.emit();
            """)

    # plot.sizing_mode = "fixed"
    plot.toolbar.logo = None
    slider = RangeSlider(start=1,
                         end=np.max(img) + 2,
                         step=1,
                         title="View Window",
                         value=(1, np.max(img)))
    slider.js_on_change('value', range_slider_callback)
    range_slider_callback.args['slider'] = slider

    return Column(slider, plot)
Beispiel #13
0
def compare_tab():
    panel_title = Div(text="[Corridor Comparison]", css_classes = ["panel-title","text-center"])
    panel_text = Div(text="""Lorem Ipsum is simply dummy text of the printing and typesetting industry.
           Lorem Ipsum has been the industry's standard dummy text ever since the 1500s,
           when an unknown printer took a galley of type and scrambled it to make a type
           specimen book.""", css_classes = ["panel-content"])

    #Date Range
    date_range = Div(text="Data References:<br>MMDDYYYY - MMDDYYYY",
                     css_classes = ["panel-content","text-center"])


    #Panel Buttons
    year_text = Div(text="<b>Year:", height=10)
    year_v1 = RangeSlider(start = 2015, end= 2017,step=1, value=(2015, 2017), height=25,
                            bar_color="black",title = "View 1")
    year_v2 = RangeSlider(start = 2015, end= 2017,step=1, value=(2015, 2017), height=25,
                            bar_color="black",title = "View 2")

    season_text = Div(text="<b>Season</b><br> (1=Winter, 2=Fall, 3=Spring, 4=Summer):", height=25)
    season_v1 = RangeSlider(start = 1, end= 4,step=1, value=(1, 2), height=25,
                            bar_color="black",title = "View 1")
    season_v2 = RangeSlider(start = 1, end= 4,step=1, value=(1, 2), height=25,
                            bar_color="black",title = "View 2")

    month_text = Div(text="<b>Month:", height=10)
    month_v1 = RangeSlider(start = 1, end= 12,step=1, value=(1, 2), height=25,
                            bar_color="black",title = "View 1")
    month_v2 = RangeSlider(start = 1, end= 12,step=1, value=(1, 2), height=25,
                            bar_color="black",title = "View 2")

    week_text = Div(text="<b>Day of Week:", height=10)
    week_v1 = RangeSlider(start = 1, end= 5,step=1, value=(1, 5), height=25,
                            bar_color="black",title = "View 1")
    week_v2 = RangeSlider(start = 1, end= 5,step=1, value=(1, 5), height=25,
                            bar_color="black",title = "View 2")

    time_of_day_text = Div(text="<b>Time of Day:", height=10)
    time_of_day_v1 = RangeSlider(start = 1, end= 24,step=1, value=(1, 7),
                       bar_color="black", height=25)
    time_of_day_v2 = RangeSlider(start = 1, end= 24,step=1, value=(1, 7),
                        bar_color="black", height=25)

    l1 = Div(text="test", css_classes = ["text-center"])

    return row(column(panel_title, panel_text, date_range,
                              year_text, year_v1, year_v2, Spacer(height=25),
                              season_text, season_v1, season_v2, Spacer(height=25),
                              month_text, month_v1, month_v2, Spacer(height=25),
                              week_text, week_v1, week_v2, Spacer(height=25),
                              time_of_day_text, time_of_day_v1, time_of_day_v2,
                             height = 1000, css_classes = ["panel","col-lg-4"]),
                      column(l1,css_classes = ["container-fluid","col-lg-8"]),
                      css_classes = ["container-fluid","col-lg-12"])
Beispiel #14
0
def create_slider(plot, startYear, endYear):
    callback = CustomJS(args=dict(plot=plot), code="""
    var a = cb_obj.value;
    plot.x_range.start = a[0];
    plot.x_range.end = a[1];
    """)

    range_slider = RangeSlider(start=startYear, end=endYear,value=(startYear, endYear), step=1, width= 440, title="Year Range")
    range_slider.js_on_change('value', callback)

    layout = column(plot,column(range_slider))
    return layout
Beispiel #15
0
        def modify_doc(doc):
            source = ColumnDataSource(dict(x=[1, 2], y=[1, 1], val=["a", "b"]))
            plot = Plot(plot_height=400, plot_width=400, x_range=Range1d(0, 1), y_range=Range1d(0, 1), min_border=0)
            plot.add_glyph(source, Circle(x='x', y='y', size=20))
            plot.add_tools(CustomAction(callback=CustomJS(args=dict(s=source), code=RECORD("data", "s.data"))))
            slider = RangeSlider(start=0, end=10, value=(1, 9), title="bar", css_classes=["foo"], width=300)

            def cb(attr, old, new):
                source.data['val'] = [old, new]

            slider.on_change('value', cb)
            doc.add_root(column(slider, plot))
Beispiel #16
0
def update_map(attr, old, new):
    global selection, vizual, gvplot, hvplot, heatmap, feats, points, world_map, range_slider, controls3, max_cur_feature, min_cur_feature, temp_feats
    max_cur_feature = temp_feats[choice.value].max()
    min_cur_feature = temp_feats[choice.value].min()
    range_slider = RangeSlider(start=min_cur_feature,
                               end=max_cur_feature,
                               value=(min_cur_feature, max_cur_feature),
                               step=(max_cur_feature - min_cur_feature) / 20,
                               title="Feature_range")
    range_slider.on_change('value', update_map_val)
    controls3 = widgetbox([range_slider], width=250)
    new_loc_feats = temp_feats.loc[
        (temp_feats[choice.value] < range_slider.value[1])
        & (temp_feats[choice.value] > range_slider.value[0])]
    feats = gv.Dataset(new_loc_feats, kdims=['Longitude', 'Latitude', new])
    points = feats.to(gv.Points, ['Longitude', 'Latitude'], [new])
    if len(new_loc_feats) <= 20000:
        world_map = gv.Overlay(tiles * points).options(
            'Points',
            size=5,
            cmap='viridis',
            colorbar=True,
            tools=TOOLS,
            color_index=2,
            width=900,
            height=800,
            global_extent=True,
            colorbar_opts={'scale_alpha': 0.5},
            fill_alpha=0.5,
            line_alpha=0.5)
    else:
        world_map = decimate(gv.Points(points), max_samples=20000).options(
            'Points',
            size=5,
            cmap='viridis',
            colorbar=True,
            tools=TOOLS,
            color_index=2,
            width=900,
            height=800,
            global_extent=True,
            colorbar_opts={'scale_alpha': 0.5},
            fill_alpha=0.5,
            line_alpha=0.5)
    selection = hv.streams.Selection1D(source=world_map)
    heatmap = hv.DynamicMap(selected_points, streams=[selection])
    zoom = hv.DynamicMap(test_bounds, streams=[box])
    hvplot = renderer.get_plot(heatmap, curdoc())
    gvplot = renderer.get_plot(world_map, curdoc())
    bvplot = renderer.get_plot(zoom, curdoc())
    vizual.children[1].children = [gvplot.state, hvplot.state, bvplot.state]
Beispiel #17
0
def _histogram_widgets(col, y, n_bins, col_max, col_min, callback):
    if col_max is None:
        col_max = col.max()
    if col_min is None:
        col_min = col.min()

    slider = Slider(start=1, end=100, value=n_bins, step=1, title="Bins")
    slider.on_change('value', callback)

    range_select = RangeSlider(start=col.min(),
                               end=col.max(),
                               value=(col_min, col_max),
                               step=5,
                               title='Histogram Range')
    range_select.on_change('value', callback)
    return slider, range_select
Beispiel #18
0
def analytics_tab():
    panel_title = Div(text="Highway Performance",
                      css_classes=["panel-title", "text-center"])
    panel_text = Div(
        text=
        """Lorem Ipsum is simply dummy text of the printing and typesetting industry.
           Lorem Ipsum has been the industry's standard dummy text ever since the 1500s,
           when an unknown printer took a galley of type and scrambled it to make a type
           specimen book.""",
        css_classes=["panel-content"])

    #Date Range
    date_range = Div(text="Data References:<br>MMDDYYYY - MMDDYYYY",
                     css_classes=["panel-content", "text-center"])

    #Panel Buttons
    period_select = Select(options=['test 1', 'test 2', 'test 3'],
                           title='Time Period:',
                           height=60)

    date_picker_start = DatePicker(min_date=date(2015, 1, 1),
                                   max_date=date(2017, 12, 31),
                                   css_classes=["panel-content", "col-lg-4"],
                                   title="Start Date:",
                                   height=60)

    month = Select(options=[
        "January", "February", "March", "April", "May", "June", "July",
        "August", "September", "October", "November", "December"
    ],
                   title="Month:",
                   css_classes=["panel-content", "col-lg-4"],
                   height=60)

    day_of_week = Select(
        options=["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
        title="Day of Week:",
        height=60)

    time_of_day = RangeSlider(start=1,
                              end=24,
                              step=1,
                              value=(1, 7),
                              title="Time of Day:",
                              bar_color="black",
                              height=60)

    l1 = Div(text="test", css_classes=["text-center"])

    return row(column(panel_title,
                      panel_text,
                      date_range,
                      period_select,
                      month,
                      day_of_week,
                      time_of_day,
                      height=700,
                      css_classes=["panel", "col-lg-4"]),
               column(l1, css_classes=["container-fluid", "col-lg-8"]),
               css_classes=["container-fluid", "col-lg-12"])
Beispiel #19
0
    def test_server_bar_color_updates(
            self, bokeh_server_page: BokehServerPage) -> None:
        slider = RangeSlider(start=0,
                             end=10,
                             value=(1, 5),
                             title="bar",
                             width=300)

        def modify_doc(doc):
            plot = Plot(height=400,
                        width=400,
                        x_range=Range1d(0, 1),
                        y_range=Range1d(0, 1),
                        min_border=0)

            def cb(attr, old, new):
                slider.bar_color = "rgba(255, 255, 0, 1)"

            slider.on_change('value', cb)
            doc.add_root(column(slider, plot))

        page = bokeh_server_page(modify_doc)

        drag_range_slider(page.driver, slider, "lower", 150)

        sleep(1)  # noUiSlider does a transition that takes some time

        assert get_slider_bar_color(page.driver,
                                    slider) == "rgba(255, 255, 0, 1)"
Beispiel #20
0
    def test_title_updates(self, bokeh_model_page) -> None:
        slider = RangeSlider(start=0,
                             end=10,
                             value=(1, 9),
                             title="bar",
                             css_classes=["foo"],
                             width=300)

        page = bokeh_model_page(slider)

        assert get_slider_title_value(page.driver, ".foo") == "1 .. 9"

        drag_range_slider(page.driver, ".foo", "lower", 50)
        value = get_slider_title_value(page.driver, ".foo").split()[0]
        assert float(value) > 1
        assert float(value) == int(value)  # integral step size

        # don't go past upper handle
        drag_range_slider(page.driver, ".foo", "lower", 50)
        value = get_slider_title_value(page.driver, ".foo").split()[0]
        assert float(value) > 2

        drag_range_slider(page.driver, ".foo", "lower", -135)
        value = get_slider_title_value(page.driver, ".foo").split()[0]
        assert float(value) == 0

        assert page.has_no_console_errors()
Beispiel #21
0
    def test_displays_title_scientific(self, bokeh_model_page) -> None:
        slider = RangeSlider(start=0,
                             end=10e-6,
                             step=1e-6,
                             value=(1e-6, 8e-6),
                             title="bar",
                             format=BasicTickFormatter(precision=2),
                             css_classes=["foo"],
                             width=300)

        page = bokeh_model_page(slider)

        el = page.driver.find_element_by_css_selector('.foo')
        assert len(
            el.find_elements_by_css_selector('div.bk-input-group > div')) == 2

        # XXX: WebElement.text returns undecoded UTF-8 byte strings as str (!) (not bytes)
        def decode(s: str) -> str:
            return bytes(map(ord, s)).decode("utf-8")

        t0 = decode(get_slider_title_text(page.driver, ".foo"))
        t1 = decode(get_slider_title_value(page.driver, ".foo"))

        assert t0 == "bar: 1.00e\u22126 .. 8.00e\u22126"
        assert t1 == "1.00e\u22126 .. 8.00e\u22126"

        assert page.has_no_console_errors()
Beispiel #22
0
    def document(doc):
        sliders = []
        pre = PreText(text='something')
        select = MultiSelect(title='Select the columns',
                             options=list(df.columns))
        button = Button(label='Update')
        for col in cols:
            MIN, MAX = df[col].min(), df[col].max()
            STEP = (MAX - MIN) / 100
            slider = RangeSlider(start=MIN,
                                 end=MAX,
                                 step=STEP,
                                 value=(MIN, MAX),
                                 title=col)
            sliders.append(slider)

        def update():
            values = []
            txt = '({col} > {low}) & ({col} < {high})'
            for slider in sliders:
                low, high = slider.value
                low, high = float(low), float(high)
                formula = txt.format(col=slider.title, low=low, high=high)
                values.append(formula)
            q = '&'.join(values)
            summary_cols = select.value
            text = df.query(q)[summary_cols].describe()
            pre.text = str(text)

        button.on_click(update)

        l = layout([column(sliders), [select, button]], pre)
        doc.add_root(l)
    def make_extrema_slider(absolute_min, absolute_max, extrema_values, step,
                            label, environment_callback):
        slider = RangeSlider(start=absolute_min,
                             end=absolute_max,
                             value=(extrema_values["minimum"],
                                    extrema_values["maximum"]),
                             step=step,
                             title=label)

        def update_extrema_callback(new_min, new_max):
            extrema_values["minimum"] = new_min
            extrema_values["maximum"] = new_max
            environment_callback()

        slider.on_change(
            "value", lambda _attr, _old, new_value: update_extrema_callback(
                new_value[0], new_value[1]))
        return slider
Beispiel #24
0
    def test_display(self, bokeh_model_page: BokehModelPage) -> None:
        slider = RangeSlider(start=0, end=10, value=(1, 5), width=300)
        page = bokeh_model_page(slider)

        children = find_elements_for(page.driver, slider,
                                     "div.bk-input-group > div")
        assert len(children) == 2

        assert page.has_no_console_errors()
    def test_js_on_change_executes(self, bokeh_model_page):
        slider = RangeSlider(start=0, end=10, value=(1, 5), title="bar", css_classes=["foo"], width=300)
        slider.js_on_change('value', CustomJS(code=RECORD("value", "cb_obj.value")))

        page = bokeh_model_page(slider)

        drag_slider(page.driver, ".foo",  "lower", 150)

        results = page.results
        assert float(results['value'][0]) > 1
        assert float(results['value'][1]) == 5

        drag_slider(page.driver, ".foo",  "lower", 150)

        results = page.results
        assert float(results['value'][0]) > 1
        assert float(results['value'][1]) > 5

        assert page.has_no_console_errors()
Beispiel #26
0
    def test_display(self, bokeh_model_page) -> None:
        slider = RangeSlider(start=0, end=10, value=(1, 5), css_classes=["foo"], width=300)

        page = bokeh_model_page(slider)

        el = page.driver.find_element_by_css_selector('.foo')
        children = el.find_elements_by_css_selector('div.bk-input-group > div')
        assert len(children) == 2

        assert page.has_no_console_errors()
Beispiel #27
0
    def __init__(self, renderer):
        self.file_input = Dropdown(label="Select dataset", menu=[])
        for dataset_name in SQLDBInformer(DbConn({})).get_all_schemas():
            if dataset_name in set(["information_schema", "performance_schema", "sys", "defaultDB", "mysql"]):
                continue
            if dataset_name[:3] == "pg_":
                continue
            self.file_input.menu.append(dataset_name)
        self.run_id_dropdown = Dropdown(label="select run id here", menu=[])
        self.ground_truth_id_dropdown = Dropdown(label="select ground truth id here", menu=[])
        self.score_slider = RangeSlider(start=0, end=1, value=(0, 1), step=.1, callback_policy='mouseup',
                                        title="score range")
        self.max_elements_slider = Slider(start=1000, end=100000, value=10000, step=1000,
                                          callback_policy='mouseup', title="max render")
        self.range_link_radio = RadioGroup(labels=["Link read plot to x-range", "Link read plot to y-range"],
                                           active=0, orientation="horizontal")
        self.full_render_button = Button(label="render without limit")
        self.render_mems_button = Button(label="render MEMs")
        self.delete_button = Button(label="Delete Dataset")
        self.force_read_id = TextInput(value="", title="Render reads with ids (comma seperated list):")

        self.file_input.on_change("value", lambda x,y,z: self.file_input_change(renderer))
        self.run_id_dropdown.on_change("value", lambda x,y,z: self.run_id_change(renderer))
        self.ground_truth_id_dropdown.on_change("value", lambda x,y,z: self.ground_id_change(renderer))
        self.score_slider.on_change("value_throttled", lambda x,y,z: self.slider_change(renderer))
        self.max_elements_slider.on_change("value_throttled", lambda x,y,z: self.slider_change(renderer))

        self.full_render_button.on_event(ButtonClick, lambda x: self.full_render(renderer))
        self.render_mems_button.on_event(ButtonClick, lambda x: self.render_mems_button_event(renderer))
        self.delete_button.on_event(ButtonClick, lambda x: self.delete_button_event(renderer))
        self.force_read_id.on_change("value", lambda x,y,z: self.forced_read_ids_change(renderer))

        self.spinner_div = Div(text=html_file("spinner"), sizing_mode="scale_both", visible=False)
        self.condition = threading.Condition()

        self.subset_buttons = CheckboxButtonGroup(labels=["Render false-positives", "Render false-negatives",
                                                          "Render true-positives", "Compute Stats"],
                                                          active=[0, 1, 2])
        self.subset_buttons.on_click(lambda x: self.forced_read_ids_change(renderer))
        self.blur_slider = Slider(start=0, end=500, value=100, step=1, callback_policy='mouseup',
                                        title="Blur")
        self.blur_slider.on_change("value_throttled", lambda x,y,z: self.slider_change(renderer))
Beispiel #28
0
    def test_displays_bar_color(self, bokeh_model_page) -> None:
        slider = RangeSlider(start=0, end=10, value=(1, 5), title="bar", css_classes=["foo"], width=300, bar_color="red")

        page = bokeh_model_page(slider)

        el = page.driver.find_element_by_css_selector('.foo')
        assert len(el.find_elements_by_css_selector('div.bk-input-group > div')) == 2

        assert get_bar_color(page.driver, ".foo") == "rgba(255, 0, 0, 1)"

        assert page.has_no_console_errors()
Beispiel #29
0
    def test_displays_title_scientific(self, bokeh_model_page) -> None:
        slider = RangeSlider(start=0, end=10e-6, step=1e-6, value=(1e-6, 8e-6), title="bar",
            format=BasicTickFormatter(precision=2), css_classes=["foo"], width=300)

        page = bokeh_model_page(slider)

        el = page.driver.find_element_by_css_selector('.foo')
        assert len(el.find_elements_by_css_selector('div.bk-input-group > div')) == 2

        assert get_title_text(page.driver, ".foo") == "bar: 1.00e-6 .. 8.00e-6"
        assert get_title_value(page.driver, ".foo") == "1.00e-6 .. 8.00e-6"

        assert page.has_no_console_errors()
Beispiel #30
0
    def test_server_on_change_round_trip(
            self, bokeh_server_page: BokehServerPage) -> None:
        slider = RangeSlider(start=0,
                             end=10,
                             value=(1, 9),
                             title="bar",
                             width=300)

        def modify_doc(doc):
            source = ColumnDataSource(dict(x=[1, 2], y=[1, 1], val=["a", "b"]))
            plot = Plot(height=400,
                        width=400,
                        x_range=Range1d(0, 1),
                        y_range=Range1d(0, 1),
                        min_border=0)
            plot.add_glyph(source, Circle(x='x', y='y', size=20))
            plot.tags.append(
                CustomJS(name="custom-action",
                         args=dict(s=source),
                         code=RECORD("data", "s.data")))

            def cb(attr, old, new):
                source.data['val'] = [old, new]

            slider.on_change('value', cb)
            doc.add_root(column(slider, plot))

        page = bokeh_server_page(modify_doc)

        drag_range_slider(page.driver, slider, "lower", 50)

        page.eval_custom_action()
        results = page.results
        old, new = results['data']['val']
        assert float(old[0]) == 1
        assert float(new[0]) > 1

        drag_range_slider(page.driver, slider, "lower", 50)

        page.eval_custom_action()
        results = page.results
        old, new = results['data']['val']
        assert float(new[0]) > 2

        drag_range_slider(page.driver, slider, "lower", -135)

        page.eval_custom_action()
        results = page.results
        old, new = results['data']['val']
        assert float(new[0]) == 0
    def cb(attr, old, new):
        ## load experiment ie in plot p1 and p2
        ie = new['value'][0]
        fid = polymer.getfid(ie)
        #print(fid)
        #source_fid = ColumnDataSource.from_df(data=fid)
        source_fid.data = ColumnDataSource.from_df(fid)
        #print(source_fid)
        try:
            tau = get_x_axis(polymer.getparameter(ie))
            #print(tau)
            try:
                startpoint = polymer.getparvalue(ie, 'fid_amp_start')
                endpoint = polymer.getparvalue(ie, 'fid_amp_stop')
            except:
                startpoint = int(0.05 * polymer.getparvalue(ie, 'BS'))
                endpoint = int(0.1 * polymer.getparvalue(ie, 'BS'))
            phi = get_mag_amplitude(fid, startpoint, endpoint,
                                    polymer.getparvalue(ie, 'NBLK'),
                                    polymer.getparvalue(ie, 'BS'))
            df = pd.DataFrame(data=np.c_[tau, phi], columns=['tau', 'phi'])
            df['phi_normalized'] = (df['phi'] - df['phi'].iloc[0]) / (
                df['phi'].iloc[-1] - df['phi'].iloc[1])
            polymer.addparameter(ie, 'df_magnetization', df)
            fit_option = 2  #mono exponential, 3 parameter fit
            p0 = [1.0, polymer.getparvalue(ie, 'T1MX')**-1 * 2, 0]
            df, popt = magnetization_fit(df, p0, fit_option)
            source_df.data = ColumnDataSource.from_df(df)

            polymer.addparameter(ie, 'popt(mono_exp)', popt)
            print(popt)

            #print(df)
            print(polymer.getparvalue(ie, 'df_magnetization'))
            fid_slider = RangeSlider(start=1,
                                     end=polymer.getparvalue(ie, 'BS'),
                                     range=(startpoint, endpoint),
                                     step=1,
                                     callback_policy='mouseup')
            layout_p1.children[2] = fid_slider

        except KeyError:
            print('no relaxation experiment found')
            tau = np.zeros(1)
            phi = np.zeros(1)
            df = pd.DataFrame(data=np.c_[tau, phi], columns=['tau', 'phi'])
            df['phi_normalized'] = np.zeros(1)
            df['fit_phi'] = np.zeros(1)
            source_df.data = ColumnDataSource.from_df(df)
def update_dataset(attr, old, new):
    selected_dataset = dataset.value
    rank_slice.end = data_manager.get_size(selected_dataset)
    rank_slice.update(value=(1, data_manager.get_size(selected_dataset)))

    metadata_type = data_manager.get_metadata_type(selected_dataset)
    metadata_domain = data_manager.get_metadata_domain(selected_dataset)

    while len(metadata_filters) > 0:
        metadata_filters.pop()
    for attribute in metadata_type:
        m_type = metadata_type[attribute]
        m_domain = metadata_domain[attribute]
        if m_type == 'boolean':
            filter = Select(title=attribute,
                            value="Any",
                            options=["Any", "True", "False"])
        elif m_type == 'numerical':
            filter = RangeSlider(start=m_domain[0],
                                 end=m_domain[1],
                                 value=m_domain,
                                 step=1,
                                 title=attribute)
        elif m_type == 'categorical':
            categories = sorted(list(metadata_domain[attribute]))
            filter = MultiSelect(title=attribute,
                                 value=categories,
                                 options=categories)
        elif m_type == 'set':
            categories = sorted(list(metadata_domain[attribute]))
            filter = MultiSelect(title=attribute,
                                 value=categories,
                                 options=categories)
        else:
            raise ValueError(
                'Unsupported attribute type {} in metadata'.format(m_type))
        metadata_filters.append(filter)

    for control in metadata_filters:
        if hasattr(control, 'value'):
            control.on_change('value', update)
        if hasattr(control, 'active'):
            control.on_change('active', update)

    inputs.children = build_controls()

    update(attr, old, new)
Beispiel #33
0
 def create_range_slider(range: Range1d, title: str,
                         step: float) -> RangeSlider:
     slider = RangeSlider(
         start=range.start,
         end=range.end,
         step=step,
         value=(range.bounds[0], range.bounds[1]),
         title=title,
     )
     slider.js_link("value", range, "start", attr_selector=0)
     slider.js_link("value", range, "end", attr_selector=1)
     return slider
Beispiel #34
0
    def test_keypress_event(self, bokeh_model_page: BokehModelPage) -> None:
        slider = RangeSlider(start=0,
                             end=10,
                             value=(1, 5),
                             title="bar",
                             width=300)
        page = bokeh_model_page(slider)

        handle_lower = find_element_for(page.driver, slider,
                                        ".noUi-handle-lower")
        handle_upper = find_element_for(page.driver, slider,
                                        ".noUi-handle-upper")

        select_element_and_press_key(page.driver,
                                     handle_lower,
                                     Keys.ARROW_RIGHT,
                                     press_number=1)
        assert get_slider_title_value(page.driver, slider) == "2 .. 5"
        select_element_and_press_key(page.driver,
                                     handle_lower,
                                     Keys.ARROW_LEFT,
                                     press_number=5)
        assert get_slider_title_value(page.driver, slider) == "0 .. 5"
        select_element_and_press_key(page.driver,
                                     handle_lower,
                                     Keys.ARROW_RIGHT,
                                     press_number=11)
        assert get_slider_title_value(page.driver, slider) == "5 .. 5"
        select_element_and_press_key(page.driver,
                                     handle_upper,
                                     Keys.ARROW_RIGHT,
                                     press_number=1)
        assert get_slider_title_value(page.driver, slider) == "5 .. 6"
        select_element_and_press_key(page.driver,
                                     handle_upper,
                                     Keys.ARROW_LEFT,
                                     press_number=2)
        assert get_slider_title_value(page.driver, slider) == "5 .. 5"
        select_element_and_press_key(page.driver,
                                     handle_upper,
                                     Keys.ARROW_RIGHT,
                                     press_number=6)
        assert get_slider_title_value(page.driver, slider) == "5 .. 10"

        assert page.has_no_console_errors()