def test_curve_style_mapping_constant_value_dimensions(self): vdims = ['y', 'num', 'cat'] ndoverlay = NdOverlay({ 0: Curve([(0, 1, 0, 'A'), (1, 0, 0, 'A')], vdims=vdims), 1: Curve([(0, 1, 0, 'B'), (1, 1, 0, 'B')], vdims=vdims), 2: Curve([(0, 1, 1, 'A'), (1, 2, 1, 'A')], vdims=vdims), 3: Curve([(0, 1, 1, 'B'), (1, 3, 1, 'B')], vdims=vdims)} ).opts({ 'Curve': dict( color=dim('num').categorize({0: 'red', 1: 'blue'}), linestyle=dim('cat').categorize({'A': '-.', 'B': '-'}) ) }) plot = mpl_renderer.get_plot(ndoverlay) for k, sp in plot.subplots.items(): artist = sp.handles['artist'] color = artist.get_color() if ndoverlay[k].iloc[0, 2] == 0: self.assertEqual(color, 'red') else: self.assertEqual(color, 'blue') linestyle = artist.get_linestyle() if ndoverlay[k].iloc[0, 3] == 'A': self.assertEqual(linestyle, '-.') else: self.assertEqual(linestyle, '-')
def test_curve_style_mapping_constant_value_dimensions(self): vdims = ['y', 'num', 'cat'] ndoverlay = NdOverlay({ 0: Curve([(0, 1, 0, 'A'), (1, 0, 0, 'A')], vdims=vdims), 1: Curve([(0, 1, 0, 'B'), (1, 1, 0, 'B')], vdims=vdims), 2: Curve([(0, 1, 1, 'A'), (1, 2, 1, 'A')], vdims=vdims), 3: Curve([(0, 1, 1, 'B'), (1, 3, 1, 'B')], vdims=vdims)} ).opts({ 'Curve': dict( color=dim('num').categorize({0: 'red', 1: 'blue'}), line_dash=dim('cat').categorize({'A': 'solid', 'B': 'dashed'}) ) }) plot = bokeh_renderer.get_plot(ndoverlay) for k, sp in plot.subplots.items(): glyph = sp.handles['glyph'] color = glyph.line_color if ndoverlay[k].iloc[0, 2] == 0: self.assertEqual(color, 'red') else: self.assertEqual(color, 'blue') linestyle = glyph.line_dash if ndoverlay[k].iloc[0, 3] == 'A': self.assertEqual(linestyle, []) else: self.assertEqual(linestyle, [6])
def test_chord_edge_color_style_mapping(self): g = self.chord.opts(style=dict(edge_color=dim('start').astype(str), edge_cmap=['#FFFFFF', '#000000'])) plot = bokeh_renderer.get_plot(g) cmapper = plot.handles['edge_color_color_mapper'] edge_source = plot.handles['multi_line_1_source'] glyph = plot.handles['multi_line_1_glyph'] self.assertIsInstance(cmapper, CategoricalColorMapper) self.assertEqual(cmapper.palette, ['#FFFFFF', '#000000', '#FFFFFF']) self.assertEqual(cmapper.factors, ['0', '1', '2']) self.assertEqual(edge_source.data['edge_color'], np.array(['0', '0', '1'])) self.assertEqual(glyph.line_color, {'field': 'edge_color', 'transform': cmapper})
def test_chord_edge_color_style_mapping_update(self): hmap = HoloMap({0: self.make_chord(0), 1: self.make_chord(1)}).options( edge_color=dim('weight').categorize({1: 'red', 2: 'green', 3: 'blue', 4: 'black'}) ) plot = mpl_renderer.get_plot(hmap) edges = plot.handles['edges'] self.assertEqual(edges.get_edgecolors(), np.array([ [1, 0, 0, 1], [0, 0.501961, 0, 1], [0, 0, 1, 1] ])) plot.update((1,)) self.assertEqual(edges.get_edgecolors(), np.array([ [0, 0.501961, 0, 1], [0, 0, 1, 1], [0, 0, 0, 1] ]))
def test_curve_style_mapping_ndoverlay_dimensions(self): ndoverlay = NdOverlay({ (0, 'A'): Curve([1, 2, 0]), (0, 'B'): Curve([1, 2, 1]), (1, 'A'): Curve([1, 2, 2]), (1, 'B'): Curve([1, 2, 3])}, ['num', 'cat'] ).opts({ 'Curve': dict( color=dim('num').categorize({0: 'red', 1: 'blue'}), linestyle=dim('cat').categorize({'A': '-.', 'B': '-'}) ) }) plot = mpl_renderer.get_plot(ndoverlay) for (num, cat), sp in plot.subplots.items(): artist = sp.handles['artist'] color = artist.get_color() if num == 0: self.assertEqual(color, 'red') else: self.assertEqual(color, 'blue') linestyle = artist.get_linestyle() if cat == 'A': self.assertEqual(linestyle, '-.') else: self.assertEqual(linestyle, '-')
def test_curve_style_mapping_ndoverlay_dimensions(self): ndoverlay = NdOverlay({ (0, 'A'): Curve([1, 2, 0]), (0, 'B'): Curve([1, 2, 1]), (1, 'A'): Curve([1, 2, 2]), (1, 'B'): Curve([1, 2, 3])}, ['num', 'cat'] ).opts({ 'Curve': dict( color=dim('num').categorize({0: 'red', 1: 'blue'}), line_dash=dim('cat').categorize({'A': 'solid', 'B': 'dashed'}) ) }) plot = bokeh_renderer.get_plot(ndoverlay) for (num, cat), sp in plot.subplots.items(): glyph = sp.handles['glyph'] color = glyph.line_color if num == 0: self.assertEqual(color, 'red') else: self.assertEqual(color, 'blue') linestyle = glyph.line_dash if cat == 'A': self.assertEqual(linestyle, []) else: self.assertEqual(linestyle, [6])
def test_chord_node_color_style_mapping_update(self): hmap = HoloMap({0: self.make_chord(0), 1: self.make_chord(1)}).options( node_color=dim('Label').categorize({0: 'red', 1: 'green', 2: 'blue', 3: 'black'}) ) plot = mpl_renderer.get_plot(hmap) arcs = plot.handles['arcs'] nodes = plot.handles['nodes'] colors = np.array([ [1, 0, 0, 1], [0, 0.501961, 0, 1], [0, 0, 1, 1] ]) self.assertEqual(arcs.get_edgecolors(), colors) self.assertEqual(nodes.get_facecolors(), colors) plot.update((1,)) colors = np.array([ [0, 0.501961, 0, 1], [0, 0, 1, 1], [0, 0, 0, 1] ]) self.assertEqual(arcs.get_edgecolors(), colors) self.assertEqual(nodes.get_facecolors(), colors)
def test_multi_dim_expression_not_applies(self): self.assertEqual((dim('foo')-dim('bar')).applies(self.dataset), False)
def test_sub_transform(self): self.assertEqual((dim('int')-10).apply(self.dataset), self.linear_ints-10)
def test_min_transform(self): self.assertEqual(dim('float').min().apply(self.dataset), self.linear_floats.min())
def test_rsub_transform(self): self.assertEqual((10-dim('int')).apply(self.dataset), 10-self.linear_ints)
def test_rdiv_transform(self): self.assertEqual((10./dim('int')).apply(self.dataset), 10./self.linear_ints)
def test_mod_transform(self): self.assertEqual((dim('int')%2).apply(self.dataset), self.linear_ints%2)
def test_rmul_transform(self): self.assertEqual((10.*dim('float')).apply(self.dataset), self.linear_ints)
def test_rmod_transform(self): self.assertEqual((2%dim('int')).apply(self.dataset), 2%self.linear_ints)
def test_rfloor_div_transform(self): self.assertEqual((2//dim('int')).apply(self.dataset), 2//self.linear_ints)
def test_radd_transform(self): self.assertEqual((1+dim('float')).apply(self.dataset), 1+self.linear_floats)
def test_neg_transform(self): self.assertEqual(-dim('negative').apply(self.dataset), self.linear_floats)
def test_div_transform(self): self.assertEqual((dim('int')/10.).apply(self.dataset), self.linear_floats)
def test_ufunc_transform(self): self.assertEqual(np.sin(dim('float')).apply(self.dataset), np.sin(self.linear_floats))
def test_astype_transform(self): self.assertEqual(dim('int').astype(str).apply(self.dataset), self.linear_ints.astype(str))
def test_cumsum_transform(self): self.assertEqual(dim('float').cumsum().apply(self.dataset), self.linear_floats.cumsum())
def test_chord_edge_color_style_mapping(self): g = self.chord.opts(style=dict(edge_color=dim('start').astype(str), edge_cmap=['#FFFFFF', '#000000'])) plot = mpl_renderer.get_plot(g) edges = plot.handles['edges'] self.assertEqual(edges.get_array(), np.array([0, 0, 1])) self.assertEqual(edges.get_clim(), (0, 2))
def test_round_transform(self): self.assertEqual(dim('float').round().apply(self.dataset), self.linear_floats.round())
def test_abs_transform(self): expr = abs(dim('negative')) self.check_apply(expr, self.linear_floats)
def test_neg_transform(self): expr = -dim('negative') self.check_apply(expr, self.linear_floats)
def test_multi_dim_expression_applies(self): self.assertEqual((dim('int')-dim('float')).applies(self.dataset), True)
def test_add_transform(self): expr = dim('float') + 1 self.check_apply(expr, self.linear_floats+1)
def test_multi_dim_expression_partial_applies(self): self.assertEqual((dim('int')-dim('bar')).applies(self.dataset), False)
def test_div_transform(self): expr = dim('int') / 10. self.check_apply(expr, self.linear_floats)
def test_add_transform(self): self.assertEqual((dim('float')+1).apply(self.dataset), self.linear_floats+1)
def test_floor_div_transform(self): expr = dim('int') // 2 self.check_apply(expr, self.linear_ints//2)
def test_floor_div_transform(self): self.assertEqual((dim('int')//2).apply(self.dataset), self.linear_ints//2)
def test_mod_transform(self): expr = dim('int') % 2 self.check_apply(expr, self.linear_ints % 2)
def test_pow_transform(self): self.assertEqual((dim('int')**2).apply(self.dataset), self.linear_ints**2)
def test_mul_transform(self): expr = dim('float') * 10. self.check_apply(expr, self.linear_ints.astype('float64'))
def test_pow_transform(self): expr = dim('int') ** 2 self.check_apply(expr, self.linear_ints ** 2)
def test_sub_transform(self): expr = dim('int') - 10 self.check_apply(expr, self.linear_ints - 10)
def test_radd_transform(self): expr = 1 + dim('float') self.check_apply(expr, 1 + self.linear_floats)
def test_rdiv_transform(self): expr = 10. / dim('int') self.check_apply(expr, 10. / self.linear_ints)
def test_rfloor_div_transform(self): expr = 2 // dim('int') self.check_apply(expr, 2 // self.linear_ints)
def test_multi_operator_expression_repr(self): self.assertEqual(repr(((dim('float')-2)*3)**2), "((dim('float')-2)*3)**2")