def test_undo_redo( brush_shape, brush_size, mode, selected_label, preserve_labels, n_dimensional, ): blobs = data.binary_blobs(length=64, volume_fraction=0.3, n_dim=3) layer = Labels(blobs) data_history = [blobs.copy()] layer.brush_shape = brush_shape layer.brush_size = brush_size layer.mode = mode layer.selected_label = selected_label layer.preserve_labels = preserve_labels layer.n_dimensional = n_dimensional coord = np.random.random((3, )) * (np.array(blobs.shape) - 1) while layer.data[tuple(coord.astype(int))] == 0 and np.any(layer.data): coord = np.random.random((3, )) * (np.array(blobs.shape) - 1) if layer.mode == 'fill': layer.fill(coord, layer.selected_label) if layer.mode == 'erase': layer.paint(coord, 0) if layer.mode == 'paint': layer.paint(coord, layer.selected_label) data_history.append(np.copy(layer.data)) layer.undo() np.testing.assert_array_equal(layer.data, data_history[0]) layer.redo() np.testing.assert_array_equal(layer.data, data_history[1])
def test_n_dimensional(): """Test changing n_dimensional.""" np.random.seed(0) data = np.random.randint(20, size=(10, 15)) layer = Labels(data) assert layer.n_dimensional is False layer.n_dimensional = True assert layer.n_dimensional is True
def test_paint_3d(brush_shape, expected_sum): """Test painting labels with circle/square brush on 3D image.""" data = np.zeros((30, 40, 40)) layer = Labels(data) layer.brush_size = 12 layer.brush_shape = brush_shape layer.mode = 'paint' # Paint in 2D layer.paint((10, 10, 10), 3) # Paint in 3D layer.n_dimensional = True layer.paint((10, 25, 10), 4) # Paint in 3D, preserve labels layer.n_dimensional = True layer.preserve_labels = True layer.paint((10, 15, 15), 5) assert np.sum(layer.data[4:17, 4:17, 4:17] == 3) == expected_sum[0] assert np.sum(layer.data[4:17, 19:32, 4:17] == 4) == expected_sum[1] assert np.sum(layer.data[4:17, 9:32, 9:32] == 5) == expected_sum[2]
def test_fill_nD_all(Event): """Test filling label nD.""" data = np.ones((20, 20, 20)) data[:5, :5, :5] = 2 data[0, 8:10, 8:10] = 2 data[-5:, -5:, -5:] = 3 layer = Labels(data) assert np.unique(layer.data[:5, :5, :5]) == 2 assert np.unique(layer.data[-5:, -5:, -5:]) == 3 assert np.unique(layer.data[:5, -5:, -5:]) == 1 assert np.unique(layer.data[-5:, :5, -5:]) == 1 assert np.unique(layer.data[0, 8:10, 8:10]) == 2 layer.n_dimensional = True layer.mode = 'fill' layer.position = (0, 0) layer.selected_label = 4 # Simulate click event = ReadOnlyWrapper(Event(type='mouse_press', is_dragging=False)) mouse_press_callbacks(layer, event) assert np.unique(layer.data[:5, :5, :5]) == 4 assert np.unique(layer.data[-5:, -5:, -5:]) == 3 assert np.unique(layer.data[:5, -5:, -5:]) == 1 assert np.unique(layer.data[-5:, :5, -5:]) == 1 assert np.unique(layer.data[0, 8:10, 8:10]) == 2 layer.position = (19, 19) layer.selected_label = 5 # Simulate click event = ReadOnlyWrapper(Event(type='mouse_press', is_dragging=False)) mouse_press_callbacks(layer, event) assert np.unique(layer.data[:5, :5, :5]) == 4 assert np.unique(layer.data[-5:, -5:, -5:]) == 3 assert np.unique(layer.data[:5, -5:, -5:]) == 5 assert np.unique(layer.data[-5:, :5, -5:]) == 5 assert np.unique(layer.data[0, 8:10, 8:10]) == 2