Esempio n. 1
0
def test_laser_graphics_zoom(qtbot: QtBot):
    graphics = LaserGraphicsView(GraphicsOptions())
    qtbot.addWidget(graphics)

    x = np.random.random((10, 10))
    graphics.drawImage(x, QtCore.QRectF(0, 0, 100, 100), "x")

    qtbot.waitExposed(graphics)

    graphics.zoomStart()

    event = QtGui.QMouseEvent(
        QtCore.QEvent.MouseButtonPress,
        graphics.mapFromScene(QtCore.QPointF(20, 20)),
        QtCore.Qt.LeftButton,
        QtCore.Qt.LeftButton,
        QtCore.Qt.NoModifier,
    )

    graphics.mousePressEvent(event)
    event.setLocalPos(graphics.mapFromScene(QtCore.QPointF(40, 40)))
    graphics.mouseMoveEvent(event)
    graphics.mouseReleaseEvent(event)

    rect = graphics.mapToScene(graphics.viewport().rect()).boundingRect()
    assert 29.5 < rect.center().x() < 30.5
    assert 29.5 < rect.center().y() < 30.5
    assert 19.5 < rect.width() < 20.5 or 19.5 < rect.height() < 20.5
Esempio n. 2
0
def test_image_slice_item(qtbot: QtBot):
    window = QtWidgets.QMainWindow()
    qtbot.addWidget(window)

    scene = QtWidgets.QGraphicsScene(0, 0, 100, 100)
    view = QtWidgets.QGraphicsView(scene)
    window.setCentralWidget(view)

    array = np.random.random((10, 10))
    img = ScaledImageItem.fromArray(array, QtCore.QRectF(0, 0, 100, 100))
    item = ImageSliceWidgetItem(img, array)
    scene.addItem(item)

    item.mousePressEvent(
        FakeSceneMouseEvent(QtCore.Qt.LeftButton, QtCore.QPointF(1, 1)))
    item.mouseMoveEvent(
        FakeSceneMouseEvent(QtCore.Qt.LeftButton, QtCore.QPointF(1, 99)))
    item.mouseReleaseEvent(
        FakeSceneMouseEvent(QtCore.Qt.LeftButton, QtCore.QPointF(1, 99)))

    assert item.sliced.size == 10
    assert np.all(item.sliced == array[:, 0])

    item.actionCopyToClipboard()
    item.shape()  # For redraw

    # Draw everything
    window.show()
    qtbot.waitExposed(window)
Esempio n. 3
0
def test_wizard_import_config(qtbot: QtBot):
    wiz = ImportWizard(path.joinpath("agilent", "test_ms.b"))
    qtbot.addWidget(wiz)
    wiz.show()
    qtbot.waitExposed(wiz)

    wiz.next()
    wiz.next()

    page = wiz.currentPage()
    assert page.isComplete()
    assert page.getNames() == ("P31", "Eu153", "W182")
    assert page.lineedit_aspect.text() == "2.00"

    page.lineedit_scantime.setText("0")
    assert not page.isComplete()
    assert page.lineedit_aspect.text() == "0.00"

    page.lineedit_speed.setText("0")
    assert not page.isComplete()

    page.lineedit_spotsize.setText("0")
    assert not page.isComplete()
    assert page.lineedit_aspect.text() == ""

    dlg = page.buttonNamesPressed()
    dlg.close()

    page.updateNames({"P31": "31P", "Eu153": "Eu153"})
    assert page.getNames() == ("31P", "Eu153")
Esempio n. 4
0
def test_tool_filter(qtbot: QtBot):
    viewspace = LaserViewSpace()
    qtbot.addWidget(viewspace)
    viewspace.show()
    view = viewspace.activeView()
    widget = view.addLaser(Laser(linear_data(["a", "b", "c"])))
    tool = DriftTool(view.activeWidget())
    view.addTab("Tool", tool)
    qtbot.waitExposed(tool)

    tool.combo_element.setCurrentText("a")
    tool.combo_element.activated.emit(0)

    tool.spinbox_degree.setValue(1)
    tool.apply()

    assert np.all(np.isclose(widget.laser.data["a"], widget.laser.data["a"][0][0]))

    tool.combo_element.setCurrentText("b")
    tool.combo_element.activated.emit(0)

    assert not np.all(np.isclose(widget.laser.data["b"], widget.laser.data["c"][0][0]))

    tool.check_apply_all.setChecked(True)
    tool.apply()

    assert np.all(np.isclose(widget.laser.data["b"], widget.laser.data["c"][0][0]))
Esempio n. 5
0
def test_standards_tool(qtbot: QtBot):
    viewspace = LaserViewSpace()
    qtbot.addWidget(viewspace)
    viewspace.show()
    view = viewspace.activeView()
    data = linear_data(["A1", "B2"])
    data["B2"][6] = 1.0
    view.addLaser(Laser(data))
    tool = StandardsTool(view.activeWidget())
    view.addTab("Tool", tool)
    qtbot.waitExposed(tool)

    # Units
    tool.lineedit_units.setText("unit")
    tool.lineedit_units.editingFinished.emit()
    tool.combo_weighting.setCurrentIndex(2)

    # Table
    tool.spinbox_levels.setValue(5)

    assert not tool.isComplete()
    assert not tool.button_plot.isEnabled()
    for i in range(0, tool.table.model().rowCount()):
        index = tool.table.model().index(i, 0)
        tool.table.model().setData(index, i)

    # Change element, check weighting
    tool.combo_element.setCurrentIndex(1)
    assert not tool.table.isComplete()
    for i in range(0, tool.table.model().rowCount()):
        index = tool.table.model().index(i, 0)
        tool.table.model().setData(index, i)
    assert tool.isComplete()
    assert tool.button_plot.isEnabled()

    assert tool.combo_weighting.currentIndex() == 0
    assert tool.lineedit_units.text() == ""
    tool.lineedit_units.setText("none")
    assert tool.calibration["B2"].gradient == 1.75

    # Check weighting updates results
    tool.combo_weighting.setCurrentText("y")
    assert tool.calibration["B2"].weighting == "y"
    assert np.isclose(tool.calibration["B2"].gradient, 1.954022988)

    # Change element back, check weighting, unit, table restored
    tool.combo_element.setCurrentIndex(0)
    assert tool.isComplete()
    assert tool.lineedit_units.text() == "unit"
    assert tool.combo_weighting.currentIndex() == 2

    # Test SD weighting
    tool.combo_weighting.setCurrentIndex(1)
    assert np.all(tool.calibration["A1"].weights == 4.0)

    tool.combo_element.setCurrentIndex(1)
    dlg = tool.showCurve()
    qtbot.waitExposed(dlg)
    dlg.close()
Esempio n. 6
0
def test_tool_calculator(qtbot: QtBot):
    viewspace = LaserViewSpace()
    qtbot.addWidget(viewspace)
    viewspace.show()

    view = viewspace.activeView()
    widget = view.addLaser(Laser(rand_data(["a", "b"])))
    tool = CalculatorTool(view.activeWidget())
    view.addTab("Tool", tool)
    qtbot.waitExposed(tool)

    assert tool.lineedit_name.text() == "calc0"
    tool.apply()
    assert "calc0" in widget.laser.elements
    assert tool.lineedit_name.text() == "calc1"

    # overwrite
    tool.lineedit_name.setText("a")
    tool.apply()
    assert len(widget.laser.elements) == 3

    # Inserters
    assert tool.formula.toPlainText() == "a"
    tool.insertFunction(1)
    assert tool.formula.toPlainText() == "abs(a"
    tool.insertVariable(2)
    assert tool.formula.toPlainText() == "abs(ba"

    # Test output of previewData and output lineedit
    x = np.array(np.random.random((10, 10)), dtype=[("a", float)])

    tool.formula.setPlainText("mean(a)")
    assert tool.previewData(x) is None
    assert tool.output.text() == f"{np.mean(x['a']):.10g}"

    # Array access in output
    tool.formula.setPlainText("a[0]")
    assert tool.previewData(x) is None
    assert tool.output.text() == f"{list(map('{:.4g}'.format, x['a'][0]))}"

    # Simple op
    tool.formula.setPlainText("a + 1.0")
    assert np.all(tool.previewData(x) == x["a"] + 1.0)
    assert tool.isComplete()

    # Invalid input
    tool.formula.setPlainText("fail")
    assert tool.previewData(x) is None
    assert not tool.isComplete()
Esempio n. 7
0
def test_calibration_chart(qtbot: QtBot):
    chart = CalibrationChart("Calibration")
    qtbot.addWidget(chart)
    points = np.stack((np.arange(5), np.arange(1, 6)),
                      axis=1).astype(np.float64)
    chart.setPoints(points)
    chart.setLine(0.0, 6.0, 1.0, 1.0)
    chart.setText("Text")

    chart.show()
    qtbot.waitExposed(chart)

    assert not chart.label_series.isVisible()
    chart.showPointPosition(QtCore.QPointF(0.0, 1.0), True)
    assert chart.label_series.isVisible()
Esempio n. 8
0
def test_laser_view(qtbot: QtBot):
    viewspace = LaserViewSpace()
    qtbot.addWidget(viewspace)
    viewspace.show()
    view = viewspace.activeView()
    laser = view.addLaser(Laser(rand_data(["A1", "B2", "C3"])))
    qtbot.waitExposed(laser)

    view.tabs.setTabText(0, "newname")
    assert view.stack.widget(0).laserName() == "newname"

    view.contextMenuEvent(
        QtGui.QContextMenuEvent(QtGui.QContextMenuEvent.Mouse,
                                QtCore.QPoint(0, 0)))

    # Drop event
    drag_mime = QtCore.QMimeData()
    path = Path(__file__).parent.joinpath("data", "io", "npz", "test.npz")
    drag_mime.setUrls([QtCore.QUrl.fromLocalFile(str(path.resolve()))])
    drag_event = QtGui.QDragEnterEvent(
        QtCore.QPoint(0, 0),
        QtCore.Qt.CopyAction,
        drag_mime,
        QtCore.Qt.LeftButton,
        QtCore.Qt.NoModifier,
    )
    view.dragEnterEvent(drag_event)
    assert drag_event.isAccepted()
    drop_event = QtGui.QDropEvent(
        QtCore.QPoint(0, 0),
        QtCore.Qt.CopyAction,
        drag_mime,
        QtCore.Qt.LeftButton,
        QtCore.Qt.NoModifier,
    )
    with qtbot.waitSignal(view.numTabsChanged):
        view.dropEvent(drop_event)
    assert drop_event.isAccepted()
    assert len(view.widgets()) == 2

    dlg = view.actionOpen()
    dlg.show()
    dlg.close()
Esempio n. 9
0
def test_laser_graphics_widgets(qtbot: QtBot):
    graphics = LaserGraphicsView(GraphicsOptions())
    qtbot.addWidget(graphics)

    x = np.random.random((10, 10))
    graphics.drawImage(x, QtCore.QRectF(0, 0, 100, 100), "x")

    qtbot.waitExposed(graphics)

    graphics.startRulerWidget()
    assert graphics.widget is not None
    event = QtGui.QMouseEvent(
        QtCore.QEvent.MouseButtonPress,
        graphics.mapFromScene(QtCore.QPointF(0, 0)),
        QtCore.Qt.LeftButton,
        QtCore.Qt.LeftButton,
        QtCore.Qt.NoModifier,
    )
    graphics.mousePressEvent(event)
    event.setLocalPos(graphics.mapFromScene(QtCore.QPointF(100, 100)))
    graphics.mouseMoveEvent(event)
    graphics.mouseReleaseEvent(event)

    assert np.isclose(graphics.widget.line.length(), 100 * np.sqrt(2))

    graphics.endWidget()
    assert graphics.widget is None

    graphics.startSliceWidget()
    assert graphics.widget is not None
    event = QtGui.QMouseEvent(
        QtCore.QEvent.MouseButtonPress,
        graphics.mapFromScene(QtCore.QPointF(5, 5)),
        QtCore.Qt.LeftButton,
        QtCore.Qt.LeftButton,
        QtCore.Qt.NoModifier,
    )
    graphics.mousePressEvent(event)
    event.setLocalPos(graphics.mapFromScene(QtCore.QPointF(95, 5)))
    graphics.mouseMoveEvent(event)
    graphics.mouseReleaseEvent(event)

    assert np.all(graphics.widget.sliced == x[0, :])
Esempio n. 10
0
def test_merge_tool(qtbot: QtBot):
    viewspace = LaserViewSpace()
    qtbot.addWidget(viewspace)
    viewspace.show()
    view = viewspace.activeView()

    data = rand_data(["A", "B"])
    view.addLaser(Laser(data, info={"Name": "Laser 1", "File Path": "/test/laser1"}))
    data = rand_data(["B", "C"])
    view.addLaser(Laser(data, info={"Name": "Laser 2", "File Path": "/test/laser1"}))

    tool = MergeTool(view.activeWidget())
    view.addTab("Tool", tool)
    qtbot.waitExposed(tool)

    assert tool.list.count() == 1

    # Test load via dialog
    dlg = tool.addLaserDialog()
    assert dlg.comboBoxItems() == ["Laser 2"]
    dlg.accept()

    assert tool.list.count() == 2
    assert [row.offset() == (0, 0) for row in tool.list.rows]
    assert tool.list.rows[0].combo_element.currentText() == "A"
    assert tool.list.rows[1].combo_element.currentText() == "B"

    tool.action_align_horz.trigger()

    assert tool.list.rows[0].offset() == (0, 0)
    assert tool.list.rows[1].offset() == (0, 10)

    tool.action_align_vert.trigger()

    assert tool.list.rows[0].offset() == (0, 0)
    assert tool.list.rows[1].offset() == (10, 0)

    tool.action_align_auto.trigger()

    assert tool.list.rows[0].offset() == (0, 0)
    # Second image position unknown

    tool.apply()
Esempio n. 11
0
def test_wizard_import_text(qtbot: QtBot):
    wiz = ImportWizard(path.joinpath("textimage", "csv.csv"))
    qtbot.addWidget(wiz)
    wiz.show()
    qtbot.waitExposed(wiz)

    # Format
    page = wiz.currentPage()
    page.radio_text.setChecked(True)
    wiz.next()
    assert wiz.currentId() == wiz.page_text

    # Path and Options
    wiz.next()

    # Config
    page = wiz.currentPage()

    with qtbot.waitSignal(wiz.laserImported) as emit:
        wiz.accept()
        assert emit.args[0].shape == (5, 5)
Esempio n. 12
0
def test_wizard_srr_import_text(qtbot: QtBot):
    path = Path(__file__).parent.joinpath("data", "io")
    wiz = SRRImportWizard([
        path.joinpath("textimage", "srr1.csv"),
        path.joinpath("textimage", "srr2.csv"),
    ], )
    qtbot.addWidget(wiz)
    wiz.show()
    qtbot.waitExposed(wiz)

    # Format
    page = wiz.currentPage()
    page.radio_text.setChecked(True)
    wiz.next()
    assert wiz.currentId() == wiz.page_text

    wiz.next()

    with qtbot.waitSignal(wiz.laserImported) as emit:
        wiz.accept()
        assert len(emit.args[0].data) == 2
Esempio n. 13
0
def test_wizard_srr_config(qtbot: QtBot):
    path = Path(__file__).parent.joinpath("data", "io")
    wiz = SRRImportWizard(
        [
            path.joinpath("textimage", "csv.csv"),
            path.joinpath("textimage", "csv.csv"),
        ],
        config=Config(10.0, 40.0, 0.25),
    )
    qtbot.addWidget(wiz)
    wiz.show()
    qtbot.waitExposed(wiz)

    # Format
    page = wiz.currentPage()
    page.radio_text.setChecked(True)
    wiz.next()
    assert wiz.currentId() == wiz.page_text

    # Path and Options
    wiz.next()

    # Config
    page = wiz.currentPage()
    assert page.getNames() == ("_Element_", )
    assert not page.isComplete()
    page.lineedit_warmup.setText("0")
    assert page.isComplete()

    page.lineedit_warmup.setText("-1")
    assert not page.isComplete()

    page.lineedit_speed.setText("0")
    assert not page.isComplete()

    dlg = page.buttonNamesPressed()
    dlg.close()

    page.updateNames({"_Element_": "Pew"})
    assert page.getNames() == ("Pew", )
Esempio n. 14
0
def test_wizard_import_thermo(qtbot: QtBot):
    wiz = ImportWizard(path.joinpath("thermo", "icap_columns.csv"))
    qtbot.addWidget(wiz)
    wiz.show()
    qtbot.waitExposed(wiz)

    # Format
    page = wiz.currentPage()
    page.radio_thermo.setChecked(True)
    wiz.next()
    assert wiz.currentId() == wiz.page_thermo

    # Path and Options
    wiz.next()

    # Config
    page = wiz.currentPage()
    assert page.lineedit_scantime.text() == "1.0049"

    with qtbot.waitSignal(wiz.laserImported) as emit:
        wiz.accept()
        assert emit.args[0].shape == (5, 5)
Esempio n. 15
0
def test_wizard_import_agilent(qtbot: QtBot):
    wiz = ImportWizard(path.joinpath("agilent", "test_ms.b"))
    qtbot.addWidget(wiz)
    wiz.show()
    qtbot.waitExposed(wiz)

    # Format
    page = wiz.currentPage()
    page.radio_agilent.setChecked(True)
    wiz.next()
    assert wiz.currentId() == wiz.page_agilent

    # Path and Options
    wiz.next()

    # Config
    page = wiz.currentPage()
    assert page.lineedit_scantime.text() == "0.5"

    with qtbot.waitSignal(wiz.laserImported) as emit:
        wiz.accept()
        assert emit.args[0].shape == (5, 5)
Esempio n. 16
0
def test_tool_filter(qtbot: QtBot):
    viewspace = LaserViewSpace()
    qtbot.addWidget(viewspace)
    viewspace.show()
    view = viewspace.activeView()
    view.addLaser(Laser(rand_data(["a"])))
    tool = FilteringTool(view.activeWidget())
    view.addTab("Tool", tool)
    qtbot.waitExposed(tool)

    tool.combo_filter.setCurrentText("Mean")
    tool.combo_filter.activated.emit(0)
    tool.lineedit_fparams[0].setText("3.0")
    tool.lineedit_fparams[1].setText("3.0")
    tool.lineedit_fparams[0].editingFinished.emit()
    assert np.all(tool.fparams == [3.0, 3.0])
    assert tool.isComplete()

    tool.lineedit_fparams[0].setText("5.0")
    tool.lineedit_fparams[0].editingFinished.emit()
    assert np.all(tool.fparams == [5.0, 3.0])
    assert tool.isComplete()

    tool.combo_filter.setCurrentText("Median")
    tool.combo_filter.activated.emit(0)
    assert np.all(tool.fparams == [5.0, 3.0])
    assert tool.isComplete()

    tool.lineedit_fparams[0].setText("4.0")
    tool.lineedit_fparams[0].editingFinished.emit()
    assert not tool.isComplete()

    tool.combo_filter.setCurrentText("Mean")
    tool.combo_filter.activated.emit(0)
    assert np.all(tool.fparams == [5.0, 3.0])
    assert tool.isComplete()

    tool.apply()
Esempio n. 17
0
def test_tool_widget(qtbot: QtBot):
    viewspace = LaserViewSpace()
    qtbot.addWidget(viewspace)
    viewspace.show()

    view = viewspace.activeView()
    widget = view.addLaser(Laser(rand_data("A1"), info={"Name": "Widget"}))
    tool = ToolWidget(widget, apply_all=True)
    index = widget.index

    widget.view.removeTab(index)
    widget.view.insertTab(index, "Tool", tool)
    qtbot.waitExposed(tool)

    tool.requestClose()
    view.tabs.tabText(index) == "Widget"

    with qtbot.wait_signal(tool.applyPressed):
        button = tool.button_box.button(QtWidgets.QDialogButtonBox.Apply)
        button.click()

    with qtbot.wait_signal(tool.applyPressed):
        button = tool.button_box.button(QtWidgets.QDialogButtonBox.Ok)
        button.click()
Esempio n. 18
0
def test_wizard_import_perkinelemer(qtbot: QtBot):
    wiz = ImportWizard(path.joinpath("perkinelmer", "perkinelmer"))
    qtbot.addWidget(wiz)
    wiz.show()
    qtbot.waitExposed(wiz)

    # Format
    page = wiz.currentPage()
    page.radio_perkinelmer.setChecked(True)
    wiz.next()
    assert wiz.currentId() == wiz.page_perkinelmer

    # Path and Options
    wiz.next()

    # Config
    page = wiz.currentPage()
    assert page.lineedit_speed.text() == "100"
    assert page.lineedit_scantime.text() == "0.2"
    assert page.lineedit_spotsize.text() == "300"

    with qtbot.waitSignal(wiz.laserImported) as emit:
        wiz.accept()
        assert emit.args[0].shape == (3, 3)
Esempio n. 19
0
def test_ruler_widget_item(qtbot: QtBot):
    window = QtWidgets.QMainWindow()
    qtbot.addWidget(window)

    scene = QtWidgets.QGraphicsScene(0, 0, 100, 100)
    view = QtWidgets.QGraphicsView(scene)
    window.setCentralWidget(view)

    img = ScaledImageItem.fromArray(np.random.random((10, 10)),
                                    QtCore.QRectF(50, 50, 50, 50))
    item = RulerWidgetItem(img)
    scene.addItem(item)
    item.mousePressEvent(
        FakeSceneMouseEvent(QtCore.Qt.LeftButton, QtCore.QPointF(50, 50)))
    item.mouseMoveEvent(
        FakeSceneMouseEvent(QtCore.Qt.LeftButton, QtCore.QPointF(100, 100)))
    item.mouseReleaseEvent(
        FakeSceneMouseEvent(QtCore.Qt.LeftButton, QtCore.QPointF(100, 100)))

    assert item.line.length() == np.sqrt(50**2 + 50**2)

    # Draw everything
    window.show()
    qtbot.waitExposed(window)
Esempio n. 20
0
def test_overlay_tool(qtbot: QtBot):
    data = np.zeros((10, 10), dtype=[("r", float), ("g", float), ("b", float)])
    data["r"][:, :] = 1.0
    data["g"][:10, :] = 1.0
    data["b"][:, :10] = 1.0

    viewspace = LaserViewSpace()
    qtbot.addWidget(viewspace)
    viewspace.show()
    view = viewspace.activeView()
    view.addLaser(
        Laser(data,
              info={
                  "Name": "real",
                  "File Path": "/home/pewpew/real.npz"
              }))
    tool = OverlayTool(view.activeWidget())
    view.addTab("Tool", tool)
    qtbot.waitExposed(tool)

    # Test rgb mode
    assert tool.rows.color_model == "rgb"
    tool.comboAdd(1)  # r
    assert np.all(tool.graphics.data[0, 0] == (255 << 24) + (255 << 16))

    tool.comboAdd(2)  # g
    assert np.all(tool.graphics.data[:10] == (255 << 24) + (255 << 16) +
                  (255 << 8))
    assert np.all(tool.graphics.data[10:] == (255 << 24) + (255 << 16))

    tool.comboAdd(3)  # g
    assert np.all(tool.graphics.data[:10, :10] == (255 << 24) + (255 << 16) +
                  (255 << 8) + 255)
    assert np.all(tool.graphics.data[10:, :10] == (255 << 24) + (255 << 16))
    assert np.all(tool.graphics.data[10:, 10:] == (255 << 24) + (255 << 16) +
                  (255 << 8))
    assert np.all(tool.graphics.data[10:, 10:] == (255 << 24) + (255 << 16))

    # Test cmyk mode
    tool.radio_cmyk.toggle()
    assert tool.rows.color_model == "cmyk"
    assert np.all(tool.graphics.data[:10, :10] == (255 << 24))
    assert np.all(tool.graphics.data[10:, :10] == (255 << 24) + (255 << 8))
    assert np.all(tool.graphics.data[10:, 10:] == (255 << 25) + 255)
    assert np.all(tool.graphics.data[10:,
                                     10:] == (255 << 24) + (255 << 8) + 255)

    # Check that the rows are limited to 3
    assert tool.rows.max_rows == 3
    assert not tool.combo_add.isEnabled()
    assert tool.rows.rowCount() == 3
    with qtbot.assert_not_emitted(tool.rows.rowsChanged):
        tool.addRow("r")
    assert tool.rows.rowCount() == 3

    # Check color buttons are not enabled
    for row in tool.rows.rows:
        assert not row.button_color.isEnabled()

    # Test any mode
    tool.radio_custom.toggle()
    assert tool.rows.color_model == "any"
    assert tool.combo_add.isEnabled()
    assert tool.check_normalise.isEnabled()
    for row in tool.rows.rows:
        assert row.button_color.isEnabled()
    tool.addRow("g")
    tool.rows[3].setColor(QtGui.QColor.fromRgbF(0.0, 1.0, 1.0))
    assert tool.rows.rowCount() == 4

    # Test normalise
    assert np.amin(tool.graphics.data) > (255 << 24)
    tool.check_normalise.setChecked(True)
    tool.refresh()
    assert tool.graphics.data.min() == (255 << 24) + (255 << 8) + 255  # No red
    tool.check_normalise.setChecked(False)

    # Test export
    dlg = tool.openExportDialog()

    dlg2 = dlg.selectDirectory()
    dlg2.close()

    with tempfile.NamedTemporaryFile() as tf:
        dlg.export(Path(tf.name))
        assert Path(tf.name).exists()

    with tempfile.TemporaryDirectory() as td:
        dlg.lineedit_directory.setText(td)
        dlg.lineedit_filename.setText("test.png")
        dlg.check_individual.setChecked(True)
        dlg.accept()
        qtbot.wait(300)
        assert Path(td).joinpath("test_1.png").exists()
        assert Path(td).joinpath("test_2.png").exists()
        assert Path(td).joinpath("test_3.png").exists()

    # Test close
    with qtbot.wait_signal(tool.rows.rowsChanged):
        tool.rows.rows[-1].close()
    assert tool.rows.rowCount() == 3

    # Test hide
    tool.radio_rgb.toggle()
    with qtbot.wait_signal(tool.rows.rows[0].itemChanged):
        tool.rows.rows[0].button_hide.click()
    assert np.all(tool.graphics.data <= ((255 << 24) + (255 << 8) + 255))

    dlg = tool.rows[0].selectColor()
    dlg.close()
Esempio n. 21
0
def test_laser_graphics_selection(qtbot: QtBot):
    graphics = LaserGraphicsView(GraphicsOptions())
    qtbot.addWidget(graphics)

    x = np.random.random((10, 10))
    graphics.drawImage(x, QtCore.QRectF(0, 0, 100, 100), "x")

    qtbot.waitExposed(graphics)

    # Test rectangle selector and center pixel selecting
    graphics.startRectangleSelection()

    event = QtGui.QMouseEvent(
        QtCore.QEvent.MouseButtonPress,
        graphics.mapFromScene(QtCore.QPointF(1, 1)),
        QtCore.Qt.LeftButton,
        QtCore.Qt.LeftButton,
        QtCore.Qt.NoModifier,
    )

    graphics.mousePressEvent(event)
    event.setLocalPos(graphics.mapFromScene(QtCore.QPointF(9, 9)))
    graphics.mouseMoveEvent(event)
    graphics.mouseReleaseEvent(event)

    assert graphics.mask[0][0]
    assert np.all(graphics.mask[1:, :] == 0)
    assert np.all(graphics.mask[:, 1:] == 0)

    graphics.endSelection()
    assert graphics.selection_item is None
    assert np.all(graphics.mask == 0)
    assert not graphics.posInSelection(graphics.mapFromScene(QtCore.QPoint(1, 1)))

    # Test lasso works
    graphics.startLassoSelection()

    event = QtGui.QMouseEvent(
        QtCore.QEvent.MouseButtonPress,
        graphics.mapFromScene(QtCore.QPointF(1, 1)),
        QtCore.Qt.LeftButton,
        QtCore.Qt.LeftButton,
        QtCore.Qt.NoModifier,
    )

    graphics.mousePressEvent(event)
    event.setLocalPos(graphics.mapFromScene(QtCore.QPointF(99, 1)))
    graphics.mouseMoveEvent(event)
    event.setLocalPos(graphics.mapFromScene(QtCore.QPointF(99, 99)))
    graphics.mouseMoveEvent(event)
    event.setLocalPos(graphics.mapFromScene(QtCore.QPointF(91, 99)))
    graphics.mouseMoveEvent(event)
    event.setLocalPos(graphics.mapFromScene(QtCore.QPointF(91, 11)))
    graphics.mouseMoveEvent(event)
    event.setLocalPos(graphics.mapFromScene(QtCore.QPointF(1, 11)))
    graphics.mouseMoveEvent(event)
    graphics.mouseReleaseEvent(event)

    assert np.all(graphics.mask[0, :])
    assert np.all(graphics.mask[:, -1])
    assert np.all(graphics.mask[1:, :-1] == 0)

    assert graphics.posInSelection(graphics.mapFromScene(QtCore.QPoint(1, 1)))
    assert not graphics.posInSelection(graphics.mapFromScene(QtCore.QPoint(11, 11)))
Esempio n. 22
0
def test_laser_view_space(qtbot: QtBot):
    viewspace = LaserViewSpace()
    qtbot.addWidget(viewspace)
    viewspace.show()

    viewspace.toggleCalibrate(False)
    viewspace.toggleColorbar(False)
    viewspace.toggleLabel(False)
    viewspace.toggleScalebar(False)
    viewspace.toggleSmooth(False)

    assert not viewspace.options.calibrate
    assert not viewspace.options.items["colorbar"]
    assert not viewspace.options.items["label"]
    assert not viewspace.options.items["scalebar"]
    assert not viewspace.options.smoothing

    viewspace.splitActiveHorizontal()

    assert viewspace.currentElement() is None

    viewspace.views[0].addLaser(Laser(rand_data(["A1", "B2"])))
    viewspace.views[0].addLaser(Laser(rand_data(["A1", "C3"])))
    viewspace.views[1].addLaser(Laser(rand_data(["A1", "C3"])))
    viewspace.views[1].addLaser(Laser(rand_data(["B2", "D4"])))

    assert viewspace.uniqueElements() == ["A1", "B2", "C3", "D4"]
    assert viewspace.currentElement() == "A1"

    # Apply config
    viewspace.applyConfig(Config(10, 10, 10))
    for view in viewspace.views:
        for widget in view.widgets():
            assert widget.laser.config.spotsize == 10
            assert widget.laser.config.speed == 10
            assert widget.laser.config.scantime == 10
    # Try to apply calibraiton
    viewspace.applyCalibration({
        "A1": Calibration(1.0, 1.0),
        "B2": Calibration(2.0, 2.0)
    })
    qtbot.waitExposed(viewspace)
    for view in viewspace.views:
        for widget in view.widgets():
            if "A1" in widget.laser.elements:
                assert widget.laser.calibration["A1"].intercept == 1.0
                assert widget.laser.calibration["A1"].gradient == 1.0
            if "B2" in widget.laser.elements:
                assert widget.laser.calibration["B2"].intercept == 2.0
                assert widget.laser.calibration["B2"].gradient == 2.0
            if "C3" in widget.laser.elements:
                assert widget.laser.calibration["C3"].intercept == 0.0
                assert widget.laser.calibration["C3"].gradient == 1.0

    # Check element changed if avilable
    assert viewspace.views[0].activeWidget().combo_element.currentText(
    ) == "A1"
    assert viewspace.views[1].activeWidget().combo_element.currentText(
    ) == "A1"
    viewspace.setCurrentElement("B2")
    assert viewspace.views[0].activeWidget().combo_element.currentText(
    ) == "B2"
    assert viewspace.views[1].activeWidget().combo_element.currentText(
    ) == "A1"
    # Close all
    for view in viewspace.views:
        for widget in view.widgets():
            widget.close()