def test_gridspace_overlay_element(self): items = [(0, self.view1), (1, self.view2), (2, self.view3), (3, self.view2)] grid = GridSpace(items, 'X') hline = HLine(0) overlaid_grid = grid * hline expected = GridSpace([(k, v*hline) for k, v in items], 'X') self.assertEqual(overlaid_grid, expected)
def grid(self, rows=11, cols=11, lbrt=None, situated=False, **kwargs): xdensity, ydensity = self.dest.xdensity, self.dest.ydensity l, b, r, t = self.dest.bounds.lbrt() half_x_unit = ((r-l) / xdensity) / 2. half_y_unit = ((t-b) / ydensity) / 2. if lbrt is None: l, b, r, t = (l+half_x_unit, b+half_y_unit, r-half_x_unit, t-half_y_unit) else: l, b = self.dest.closest_cell_center(lbrt[0], lbrt[1]) r, t = self.dest.closest_cell_center(lbrt[2], lbrt[3]) x, y = np.meshgrid(np.linspace(l, r, cols), np.linspace(b, t, rows)) coords = zip(x.flat, y.flat) grid_items = {} for x, y in coords: grid_items[x, y] = self.view(x, y, situated=situated, **kwargs) grid = GridSpace(grid_items, label=' '.join([self.dest.name, self.name]), group='CFs') grid.metadata = AttrDict(info=self.name, proj_src_name=self.src.name, proj_dest_name=self.dest.name, timestamp=self.src.simulation.time(), **kwargs) return grid
def test_gridspace_overlay_reverse(self): items = [(0, self.view1), (1, self.view2), (2, self.view3), (3, self.view2)] grid = GridSpace(items, 'X') hline = HLine(0) overlaid_grid = hline * grid expected = GridSpace([(k, hline*v) for k, v in items], 'X') self.assertEqual(overlaid_grid, expected)
def test_grid_index_one_axis(self): vals = [self.view1, self.view2, self.view3, self.view2] keys = [('A', 0), ('B', 1), ('C', 0), ('D', 1)] grid = GridSpace(zip(keys, vals)) self.assertEqual( grid[:, 0], GridSpace([(('A', 0), self.view1), (('C', 0), self.view3)]))
def grid(self, rows=11, cols=11, lbrt=None, situated=False, **kwargs): xdensity, ydensity = self.dest.xdensity, self.dest.ydensity l, b, r, t = self.dest.bounds.lbrt() half_x_unit = ((r - l) / xdensity) / 2. half_y_unit = ((t - b) / ydensity) / 2. if lbrt is None: l, b, r, t = (l + half_x_unit, b + half_y_unit, r - half_x_unit, t - half_y_unit) else: l, b = self.dest.closest_cell_center(lbrt[0], lbrt[1]) r, t = self.dest.closest_cell_center(lbrt[2], lbrt[3]) x, y = np.meshgrid(np.linspace(l, r, cols), np.linspace(b, t, rows)) coords = zip(x.flat, y.flat) grid_items = {} for x, y in coords: grid_items[x, y] = self.view(x, y, situated=situated, **kwargs) grid = GridSpace(grid_items, label=' '.join([self.dest.name, self.name]), group='CFs') grid.metadata = AttrDict(info=self.name, proj_src_name=self.src.name, proj_dest_name=self.dest.name, timestamp=self.src.simulation.time(), **kwargs) return grid
def _cf_grid(self, shape=None, **kwargs): "Create GridSpace with the correct metadata." grid = GridSpace({}) grid.metadata = AttrDict(timestamp=self.src.simulation.time(), info=self.name, proj_src_name=self.src.name, proj_dest_name=self.dest.name, **kwargs) return grid
def test_operation_grid(self): grid = GridSpace({i: Image(np.random.rand(10, 10)) for i in range(10)}, kdims=['X']) op_grid = operation(grid, op=lambda x, k: x.clone(x.data * 2)) doubled = grid.clone({ k: v.clone(v.data * 2, group='Operation') for k, v in grid.items() }) self.assertEqual(op_grid, doubled)
def test_gridspace_overlay_gridspace_reverse(self): items = [(0, self.view1), (1, self.view2), (2, self.view3), (3, self.view2)] grid = GridSpace(items, 'X') items2 = [(0, self.view2), (1, self.view1), (2, self.view2), (3, self.view3)] grid2 = GridSpace(items2, 'X') expected_items = [(0, self.view2*self.view1), (1, self.view1*self.view2), (2, self.view2*self.view3), (3, self.view3*self.view2)] expected = GridSpace(expected_items, 'X') self.assertEqual(grid2*grid, expected)
def test_gridspace_overlay_gridspace_partial_reverse(self): items = [(0, self.view1), (1, self.view2), (3, self.view2)] grid = GridSpace(items, 'X') items2 = [(0, self.view2), (2, self.view2), (3, self.view3)] grid2 = GridSpace(items2, 'X') expected_items = [(0, Overlay([self.view2, self.view1])), (1, Overlay([self.view2])), (2, Overlay([self.view2])), (3, Overlay([self.view3, self.view2]))] expected = GridSpace(expected_items, 'X') self.assertEqual(grid2 * grid, expected)
def test_layout_gridspaces(self): layout = (GridSpace({(i, j): Curve(range(i + j)) for i in range(1, 3) for j in range(2, 4)}) + GridSpace({(i, j): Curve(range(i + j)) for i in range(1, 3) for j in range(2, 4)}) + Curve(range(10))).cols(2) layout_plot = bokeh_renderer.get_plot(layout) plot = layout_plot.state # Unpack until getting down to two rows self.assertIsInstance(plot, Column) self.assertEqual(len(plot.children), 2) toolbar, column = plot.children self.assertIsInstance(toolbar, ToolbarBox) self.assertIsInstance(column, Column) self.assertEqual(len(column.children), 2) row1, row2 = column.children self.assertIsInstance(row1, Row) self.assertIsInstance(row2, Row) # Check the row of GridSpaces self.assertEqual(len(row1.children), 2) grid1, grid2 = row1.children self.assertIsInstance(grid1, Column) self.assertIsInstance(grid2, Column) self.assertEqual(len(grid1.children), 1) self.assertEqual(len(grid2.children), 1) grid1, grid2 = grid1.children[0], grid2.children[0] self.assertIsInstance(grid1, Column) self.assertIsInstance(grid2, Column) for grid in [grid1, grid2]: self.assertEqual(len(grid.children), 2) grow1, grow2 = grid.children self.assertIsInstance(grow1, Row) self.assertIsInstance(grow2, Row) self.assertEqual(len(grow1.children), 2) self.assertEqual(len(grow2.children), 2) ax_row, grid_row = grow1.children grow1, grow2 = grid_row.children[0].children gfig1, gfig2 = grow1.children gfig3, gfig4 = grow2.children self.assertIsInstance(gfig1, Figure) self.assertIsInstance(gfig2, Figure) self.assertIsInstance(gfig3, Figure) self.assertIsInstance(gfig4, Figure) # Check the row of Curve and a spacer self.assertEqual(len(row2.children), 2) fig, spacer = row2.children self.assertIsInstance(fig, Figure) self.assertIsInstance(spacer, Spacer)
def test_get_size_grid_plot(self): grid = GridSpace({(i, j): self.image1 for i in range(3) for j in range(3)}) plot = self.renderer.get_plot(grid) w, h = self.renderer.get_size(plot) if bokeh_version < '2.0.2': self.assertEqual((w, h), (444, 436)) else: self.assertEqual((w, h), (446, 437))
def test_grid_title(self): grid = GridSpace({ (i, j): HoloMap({a: Image(np.random.rand(10, 10)) for a in range(3)}, kdims=['X']) for i in range(2) for j in range(3) }) plot = bokeh_renderer.get_plot(grid) title = plot.handles['title'] self.assertIsInstance(title, Div) text = "<span style='font-size: 16pt'><b>X: 0</b></font>" self.assertEqual(title.text, text)
def test_grid_state(self): grid = GridSpace({(i, j): Curve([i, j]) for i in [0, 1] for j in [0, 1]}) state = self._get_plot_state(grid) self.assertEqual(state['data'][0]['y'], np.array([0, 0])) self.assertEqual(state['data'][0]['xaxis'], 'x1') self.assertEqual(state['data'][0]['yaxis'], 'y1') self.assertEqual(state['data'][1]['y'], np.array([1, 0])) self.assertEqual(state['data'][1]['xaxis'], 'x2') self.assertEqual(state['data'][1]['yaxis'], 'y1') self.assertEqual(state['data'][2]['y'], np.array([0, 1])) self.assertEqual(state['data'][2]['xaxis'], 'x1') self.assertEqual(state['data'][2]['yaxis'], 'y2') self.assertEqual(state['data'][3]['y'], np.array([1, 1])) self.assertEqual(state['data'][3]['xaxis'], 'x2') self.assertEqual(state['data'][3]['yaxis'], 'y2')
def callback(i): eltype = Image if i % 2 else Curve return GridSpace( {j: eltype([], label=str(j)) for j in range(i, i + 2)}, 'X')
def callback(i): return GridSpace({j: Curve([], label=str(j)) for j in range(i)}, 'X')
def callback(): return GridSpace({(i, j): Image(np.array([[i, j], [2, 3]])) for i in range(1, 3) for j in range(1, 3)})
def test_grid_index_strings(self): vals = [self.view1, self.view2, self.view3, self.view2] keys = [('A', 0), ('B', 1), ('C', 0), ('D', 1)] grid = GridSpace(zip(keys, vals)) self.assertEqual(grid['B', 1], self.view2)
def test_grid_index_snap(self): vals = [self.view1, self.view2, self.view3, self.view2] keys = [(0, 0), (0, 1), (1, 0), (1, 1)] grid = GridSpace(zip(keys, vals)) self.assertEqual(grid[0.1, 0.1], self.view1)
def test_grid_init(self): vals = [self.view1, self.view2, self.view3, self.view2] keys = [(0, 0), (0, 1), (1, 0), (1, 1)] grid = GridSpace(zip(keys, vals)) self.assertEqual(grid.shape, (2, 2))
def test_get_size_grid_plot(self): grid = GridSpace({(i, j): self.image1 for i in range(3) for j in range(3)}) plot = self.renderer.get_plot(grid) w, h = self.renderer.get_size(plot) self.assertEqual((w, h), (419, 413))
def test_operation_grid(self): grid = GridSpace({i: Image(np.random.rand(10, 10)) for i in range(10)}, kdims=['X']) op_grid = operation(grid, op=lambda x, k: x.clone(x.data*2)) doubled = grid.clone({k: v.clone(v.data*2, group='Operation') for k, v in grid.items()}) self.assertEqual(op_grid, doubled)