Esempio n. 1
0
def test_point_variable_step_size():
    dims = Dims(ndim=3)
    assert dims.point == (0, ) * 3

    desired_range = ((0, 6, 0.5), (0, 6, 1), (0, 6, 2))
    dims.set_range(range(3), desired_range)
    assert dims.range == desired_range

    # set point updates current_step indirectly
    dims.set_point([0, 1, 2], (2.9, 2.9, 2.9))
    assert dims.current_step == (6, 3, 1)
    # point is a property computed on demand from current_step
    assert dims.point == (3, 3, 2)

    # can set step directly as well
    # note that out of range values get clipped
    dims.set_current_step((0, 1, 2), (1, -3, 5))
    assert dims.current_step == (1, 0, 2)
    assert dims.point == (0.5, 0, 4)

    dims.set_current_step(0, -1)
    assert dims.current_step == (0, 0, 2)
    assert dims.point == (0, 0, 4)

    # mismatched len(axis) vs. len(value)
    with pytest.raises(ValueError):
        dims.set_point((0, 1), (0, 0, 0))

    with pytest.raises(ValueError):
        dims.set_current_step((0, 1), (0, 0, 0))
Esempio n. 2
0
def test_singleton_dims(qtbot):
    """
    Test singleton dims causes no slider.
    """
    ndim = 4
    dims = Dims(ndim)
    dims.set_range(0, (0, 1, 1))
    view = QtDims(dims)
    qtbot.addWidget(view)

    # Check that the dims model has been appended to the dims view
    assert view.dims == dims

    # Check the number of displayed sliders is only one
    assert view.nsliders == 4
    assert np.sum(view._displayed_sliders) == 1
    assert np.all([
        s.isVisibleTo(view) == d
        for s, d in zip(view.slider_widgets, view._displayed_sliders)
    ])

    # Change ndisplay to three
    view.dims.ndisplay = 3

    # Check no sliders now shown
    assert np.sum(view._displayed_sliders) == 0

    # Change ndisplay back to two
    view.dims.ndisplay = 2

    # Check only slider now shown
    assert np.sum(view._displayed_sliders) == 1
Esempio n. 3
0
def test_range_set_multiple():
    """
    Tests bulk range setting.
    """
    dims = Dims(ndim=4)
    assert dims.range == ((0, 2, 1), ) * 4

    dims.set_range((0, 3), [(0, 6, 3), (0, 9, 3)])
    assert dims.range == ((0, 6, 3), ) + ((0, 2, 1), ) * 2 + ((0, 9, 3), )

    # last_used will be set to the smallest axis in range
    dims.set_range(range(1, 4), ((0, 5, 1), ) * 3)
    assert dims.range == ((0, 6, 3), ) + ((0, 5, 1), ) * 3

    # test with descending axis order
    dims.set_range(axis=(3, 0), _range=[(0, 4, 1), (0, 6, 1)])
    assert dims.range == ((0, 6, 1), ) + ((0, 5, 1), ) * 2 + ((0, 4, 1), )

    # out of range axis raises a ValueError
    with pytest.raises(ValueError):
        dims.set_range((dims.ndim, 0), [(0.0, 4.0, 1.0)] * 2)

    # sequence lengths for axis and _range do not match
    with pytest.raises(ValueError):
        dims.set_range((0, 1), [(0.0, 4.0, 1.0)] * 3)
Esempio n. 4
0
def test_range():
    """
    Tests range setting.
    """
    dims = Dims(ndim=4)
    assert dims.range == ((0, 2, 1), ) * 4

    dims.set_range(3, (0, 4, 2))
    assert dims.range == ((0, 2, 1), ) * 3 + ((0, 4, 2), )
Esempio n. 5
0
def test_range():
    """
    Tests range setting.
    """
    dims = Dims(4)
    assert dims.range == [(0, 2, 1)] * 4

    dims.set_range(3, (0, 4, 2))
    assert dims.range == [(0, 2, 1)] * 3 + [(0, 4, 2)]
Esempio n. 6
0
def test_roll():
    """Test basic roll behavior."""
    dims = Dims(ndim=4)
    dims.set_range(0, (0, 10, 1))
    dims.set_range(1, (0, 10, 1))
    dims.set_range(2, (0, 10, 1))
    dims.set_range(3, (0, 10, 1))
    assert dims.order == (0, 1, 2, 3)
    dims._roll()
    assert dims.order == (3, 0, 1, 2)
    dims._roll()
    assert dims.order == (2, 3, 0, 1)
Esempio n. 7
0
def test_point():
    """
    Test point setting.
    """
    dims = Dims(ndim=4)
    assert dims.point == (0, ) * 4

    dims.set_range(3, (0, 5, 1))
    dims.set_point(3, 4)
    assert dims.point == (0, 0, 0, 4)

    dims.set_range(2, (0, 5, 1))
    dims.set_point(2, 1)
    assert dims.point == (0, 0, 1, 4)
Esempio n. 8
0
def test_point():
    """
    Test point setting.
    """
    dims = Dims(ndim=4)
    assert dims.point == (0, ) * 4

    dims.set_range(range(dims.ndim), ((0, 5, 1), ) * dims.ndim)
    dims.set_point(3, 4)
    assert dims.point == (0, 0, 0, 4)

    dims.set_point(2, 1)
    assert dims.point == (0, 0, 1, 4)

    dims.set_point((0, 1, 2), (2.1, 2.6, 0.0))
    assert dims.point == (2, 3, 0, 4)
Esempio n. 9
0
def test_roll_skip_dummy_axis_3():
    """Test basic roll skips all axes with length 1."""
    dims = Dims(ndim=4)
    dims.set_range(0, (0, 10, 1))
    dims.set_range(1, (0, 0, 1))
    dims.set_range(2, (0, 10, 1))
    dims.set_range(3, (0, 0, 1))
    assert dims.order == (0, 1, 2, 3)
    dims._roll()
    assert dims.order == (2, 1, 0, 3)
    dims._roll()
    assert dims.order == (0, 1, 2, 3)
Esempio n. 10
0
def test_slice_labels(qtbot):
    ndim = 4
    dims = Dims(ndim=ndim)
    dims.set_range(0, (0, 20, 1))
    view = QtDims(dims)
    qtbot.addWidget(view)

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

    # make sure setting the dims.point updates the slice label
    label_edit = view.slider_widgets[0].curslice_label
    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 dims.point[0] == 8
Esempio n. 11
0
def test_indices():
    """
    Test indices values.
    """
    dims = Dims(4)
    # On instantiation the last two dims are set to sliced mode
    assert dims.indices == (0, ) * 2 + (slice(None, None, None), ) * 2

    # Set the values of the first two dims in point mode outside of range
    dims.set_point(0, 2)
    dims.set_point(1, 3)
    assert dims.indices == (1, 1) + (slice(None, None, None), ) * 2

    # Increase range and then set points again
    # Note changing the step size changes the indices for the same point value
    dims.set_range(0, (0, 4, 2))
    dims.set_range(1, (0, 4, 2))
    dims.set_point(0, 2)
    dims.set_point(1, 3)
    assert dims.indices == (1, 2) + (slice(None, None, None), ) * 2
Esempio n. 12
0
def test_order_when_changing_ndim():
    """
    Test order of the dims when changing the number of dimensions.
    """
    dims = Dims(ndim=4)
    dims.set_range(0, (0, 4, 1))
    dims.set_point(0, 2)

    dims.ndim = 5
    # Test that new dims get appended to the beginning of lists
    assert dims.point == (0, 2, 0, 0, 0)
    assert dims.order == (0, 1, 2, 3, 4)
    assert dims.axis_labels == ('0', '1', '2', '3', '4')

    dims.set_range(2, (0, 4, 1))
    dims.set_point(2, 3)
    dims.ndim = 3
    # Test that dims get removed from the beginning of lists
    assert dims.point == (3, 0, 0)
    assert dims.order == (0, 1, 2)
    assert dims.axis_labels == ('2', '3', '4')
Esempio n. 13
0
def make_worker(qtbot,
                nframes=8,
                fps=20,
                frame_range=None,
                loop_mode=LoopMode.LOOP):
    # sets up an AnimationWorker ready for testing, and breaks down when done
    dims = Dims(ndim=4)
    qtdims = QtDims(dims)
    qtbot.addWidget(qtdims)
    nz = 8
    max_index = nz - 1
    step = 1
    dims.set_range(0, (0, max_index, step))
    slider_widget = qtdims.slider_widgets[0]
    slider_widget.loop_mode = loop_mode
    slider_widget.fps = fps
    slider_widget.frame_range = frame_range

    worker = AnimationWorker(slider_widget)
    worker._count = 0
    worker.nz = nz

    def bump(*args):
        if worker._count < nframes:
            worker._count += 1
        else:
            worker.finish()

    def count_reached():
        assert worker._count >= nframes

    def go():
        worker.work()
        qtbot.waitUntil(count_reached, timeout=6000)
        return worker.current

    worker.frame_requested.connect(bump)
    worker.go = go

    yield worker
Esempio n. 14
0
def test_roll_skip_dummy_axis_2():
    """Test basic roll skips axis with length 1 when not first."""
    dims = Dims(ndim=4)
    dims.set_range(0, (0, 10, 1))
    dims.set_range(1, (0, 0, 1))
    dims.set_range(2, (0, 10, 1))
    dims.set_range(3, (0, 10, 1))
    assert dims.order == (0, 1, 2, 3)
    dims._roll()
    assert dims.order == (3, 1, 0, 2)
    dims._roll()
    assert dims.order == (2, 1, 3, 0)
Esempio n. 15
0
def test_roll_skip_dummy_axis_1():
    """Test basic roll skips axis with length 1."""
    dims = Dims(ndim=4)
    dims.set_range(0, (0, 1, 1))
    dims.set_range(1, (0, 10, 1))
    dims.set_range(2, (0, 10, 1))
    dims.set_range(3, (0, 10, 1))
    assert dims.order == [0, 1, 2, 3]
    dims._roll()
    assert dims.order == [0, 3, 1, 2]
    dims._roll()
    assert dims.order == [0, 2, 3, 1]