Ejemplo n.º 1
0
def test_new_shapes(qtbot):
    """Test adding new shapes layer."""
    # Add labels to empty viewer
    viewer = ViewerModel()
    view = QtViewer(viewer)
    qtbot.addWidget(view)

    viewer.add_shapes()
    assert len(viewer.layers[0].data) == 0
    assert len(viewer.layers) == 1
    assert view.layers.vbox_layout.count() == 2 * len(viewer.layers) + 2

    assert viewer.dims.ndim == 2
    assert view.dims.nsliders == viewer.dims.ndim
    assert np.sum(view.dims._displayed_sliders) == 0

    # Add points with image already present
    viewer = ViewerModel()
    view = QtViewer(viewer)
    qtbot.addWidget(view)

    np.random.seed(0)
    data = np.random.random((10, 15))
    viewer.add_image(data)
    viewer.add_shapes()
    assert len(viewer.layers[1].data) == 0
    assert len(viewer.layers) == 2
    assert view.layers.vbox_layout.count() == 2 * len(viewer.layers) + 2

    assert viewer.dims.ndim == 2
    assert view.dims.nsliders == viewer.dims.ndim
    assert np.sum(view.dims._displayed_sliders) == 0
Ejemplo n.º 2
0
def test_screenshot(qtbot):
    "Test taking a screenshot"
    viewer = ViewerModel()
    view = QtViewer(viewer)
    qtbot.addWidget(view)

    np.random.seed(0)
    # Add image
    data = np.random.random((10, 15))
    viewer.add_image(data)

    # Add labels
    data = np.random.randint(20, size=(10, 15))
    viewer.add_labels(data)

    # Add points
    data = 20 * np.random.random((10, 2))
    viewer.add_points(data)

    # Add vectors
    data = 20 * np.random.random((10, 2, 2))
    viewer.add_vectors(data)

    # Add shapes
    data = 20 * np.random.random((10, 4, 2))
    viewer.add_shapes(data)

    # Take screenshot
    screenshot = view.screenshot()
    assert screenshot.ndim == 3
Ejemplo n.º 3
0
def test_add_layer(qtbot, layer_class, data, ndim):
    viewer = ViewerModel(ndisplay=ndim)
    view = QtViewer(viewer)
    qtbot.addWidget(view)

    add_layer_by_type(viewer, layer_class, data)
    check_viewer_functioning(viewer, view, data, ndim)
    view.shutdown()
Ejemplo n.º 4
0
def view(qtbot):
    """basic viewer with data that we will use a few times"""
    viewer = ViewerModel()
    view = QtViewer(viewer)
    qtbot.addWidget(view)

    np.random.seed(0)
    data = np.random.random((10, 10, 15))
    viewer.add_image(data)

    yield view  # Adding teardown code for fixture
    print("shutting down QtViewer")
    view.shutdown()
    return view
Ejemplo n.º 5
0
def test_qt_viewer(qtbot):
    """Test instantiating viewer."""
    viewer = ViewerModel()
    view = QtViewer(viewer)
    qtbot.addWidget(view)

    assert viewer.title == 'napari'
    assert view.viewer == viewer

    assert len(viewer.layers) == 0
    assert view.layers.vbox_layout.count() == 2

    assert viewer.dims.ndim == 2
    assert view.dims.nsliders == viewer.dims.ndim
    assert np.sum(view.dims._displayed_sliders) == 0
    view.shutdown()
Ejemplo n.º 6
0
def view(qtbot):
    """basic viewer with data that we will use a few times"""
    viewer = ViewerModel()
    view = QtViewer(viewer)
    qtbot.addWidget(view)

    np.random.seed(0)
    data = np.random.random((10, 10, 15))
    viewer.add_image(data)
    return view
Ejemplo n.º 7
0
def test_qt_viewer_data_integrity(qtbot, dtype):
    """Test that the viewer doesn't change the underlying array."""

    image = np.random.rand(10, 32, 32)
    image *= 200 if dtype.endswith('8') else 2**14
    image = image.astype(dtype)
    imean = image.mean()

    viewer = ViewerModel()
    view = QtViewer(viewer)
    qtbot.addWidget(view)

    viewer.add_image(image.copy())
    datamean = viewer.layers[0].data.mean()
    assert datamean == imean
    # toggle dimensions
    viewer.dims.ndisplay = 3
    datamean = viewer.layers[0].data.mean()
    assert datamean == imean
    # back to 2D
    viewer.dims.ndisplay = 2
    datamean = viewer.layers[0].data.mean()
    assert datamean == imean
    view.shutdown()
Ejemplo n.º 8
0
def test_add_labels(qtbot):
    """Test adding labels image."""
    viewer = ViewerModel()
    view = QtViewer(viewer)
    qtbot.addWidget(view)

    np.random.seed(0)
    data = np.random.randint(20, size=(10, 15))
    viewer.add_labels(data)
    assert np.all(viewer.layers[0].data == data)

    assert len(viewer.layers) == 1
    assert view.layers.vbox_layout.count() == 2 * len(viewer.layers) + 2

    assert viewer.dims.ndim == 2
    assert view.dims.nsliders == viewer.dims.ndim
    assert np.sum(view.dims._displayed_sliders) == 0
Ejemplo n.º 9
0
def test_add_volume(qtbot):
    """Test adding volume."""
    viewer = ViewerModel(ndisplay=3)
    view = QtViewer(viewer)
    qtbot.addWidget(view)

    np.random.seed(0)
    data = np.random.random((10, 15, 20))
    viewer.add_image(data)
    assert np.all(viewer.layers[0].data == data)

    assert len(viewer.layers) == 1
    assert view.layers.vbox_layout.count() == 2 * len(viewer.layers) + 2

    assert viewer.dims.ndim == 3
    assert view.dims.nsliders == viewer.dims.ndim
    assert np.sum(view.dims._displayed_sliders) == 0
Ejemplo n.º 10
0
def test_add_shapes(qtbot):
    """Test adding vectors."""
    viewer = ViewerModel()
    view = QtViewer(viewer)
    qtbot.addWidget(view)

    np.random.seed(0)
    data = 20 * np.random.random((10, 4, 2))
    viewer.add_shapes(data)
    assert np.all(viewer.layers[0].data == data)

    assert len(viewer.layers) == 1
    assert view.layers.vbox_layout.count() == 2 * len(viewer.layers) + 2

    assert viewer.dims.ndim == 2
    assert view.dims.nsliders == viewer.dims.ndim
    assert np.sum(view.dims._displayed_sliders) == 0
Ejemplo n.º 11
0
def test_add_pyramid(qtbot):
    """Test adding image pyramid."""
    viewer = ViewerModel()
    view = QtViewer(viewer)
    qtbot.addWidget(view)

    shapes = [(40, 20), (20, 10), (10, 5)]
    np.random.seed(0)
    data = [np.random.random(s) for s in shapes]
    viewer.add_image(data, is_pyramid=True)
    assert np.all(viewer.layers[0].data == data)

    assert len(viewer.layers) == 1
    assert view.layers.vbox_layout.count() == 2 * len(viewer.layers) + 2

    assert viewer.dims.ndim == 2
    assert view.dims.nsliders == viewer.dims.ndim
    assert np.sum(view.dims._displayed_sliders) == 0
Ejemplo n.º 12
0
def test_slice_labels(qtbot):
    viewer = ViewerModel()
    view = QtViewer(viewer)
    qtbot.addWidget(view)
    np.random.seed(0)
    data = np.random.random((20, 10, 10))
    viewer.add_image(data)

    # make sure the totslice_label is showing the correct number
    assert int(view.dims.slider_widgets[0].totslice_label.text()) == 19

    # make sure setting the dims.point updates the slice label
    label_edit = view.dims.slider_widgets[0].curslice_label
    viewer.dims.set_point(0, 15)
    assert int(label_edit.text()) == 15

    # make sure setting the current slice label updates the model
    label_edit.setText(str(8))
    label_edit.editingFinished.emit()
    assert viewer.dims.point[0] == 8
Ejemplo n.º 13
0
    def loadImage(self, index: QModelIndex) -> None:
        index = index.row()
        self.isBusy = True

        viewerWidget = self.splitter.widget(1)
        if isinstance(viewerWidget, QLabel):
            adjustWidget = self._createAdjustWidget(3)

            # need to load napari viewer here
            viewerModel = self.napariViewerModel = NapariViewerModel()
            viewerModel.theme = "light"

            napariViewer = QtViewer(viewerModel)
            napariViewer.setWindowFlags(Qt.Widget)
            self.napariViewer = napariViewer

            # create image viewer here
            imageViewer = QSplitter()
            imageViewer.setOrientation(Qt.Horizontal)
            imageViewer.setHandleWidth(12)
            imageViewer.addWidget(adjustWidget)
            imageViewer.addWidget(napariViewer)
            self.imageViewer = imageViewer

            self.splitter.replaceWidget(1, imageViewer)
            self.splitter.setSizes([200, 300])

        image: Image = self.model.state.images[index]

        # set up block diagram editor
        blockName = image.block_name
        block = next(
            (block
             for block in self.model.state.blocks if block.name == blockName),
            None,
        )
        if block is None:
            return
        blockDiagramEditorView = BlockDiagramEditorView(
            block, self.model.state.devices)
        blockDiagramEditorView.diagramWidget.setEnabled(False)
        if self.imageTableSplitter.count() == 1:
            self.imageTableSplitter.addWidget(blockDiagramEditorView)
        else:
            self.imageTableSplitter.replaceWidget(1, blockDiagramEditorView)
        self.imageTableSplitter.setSizes([200, 300])

        # remove all layers; can't do directly
        layers = self.napariViewerModel.layers
        layers.select_all()
        layers.remove_selected()

        # unset all other images; TODO: does this actually help with memory usage?
        for im in self.model.state.images:
            im.pixels = None

        image.load(self.model.path)

        # add image
        name = image.relpath.name
        pixels = image.pixels
        pyramids = pixels.pyramids + ([pixels.background]
                                      if pixels.background else [])
        for pyramid in pyramids:
            scale = pyramid.mpp
            scale = (scale.y, scale.x)

            translate = pyramid.offset
            translate = (translate.y, translate.x)

            if pixels.file_format == "scn" and pixels.axes != "YXS":
                scale = (1, ) + scale
                translate = (0, ) + translate

            self.napariViewerModel.add_image(data=pyramid.layers,
                                             name=name,
                                             scale=scale,
                                             translate=translate)

        self.isBusy = False