diff --git a/skimage/draw/tests/test_draw3d.py b/skimage/draw/tests/test_draw3d.py index 2e1198eb..48caf1a0 100644 --- a/skimage/draw/tests/test_draw3d.py +++ b/skimage/draw/tests/test_draw3d.py @@ -1,9 +1,25 @@ import numpy as np from numpy.testing import assert_array_equal, assert_allclose +from nose.tools import raises from skimage.draw import ellipsoid, ellipsoid_stats +@raises(ValueError) +def test_ellipsoid_sign_parameters1(): + ellipsoid(-1, 2, 2) + + +@raises(ValueError) +def test_ellipsoid_sign_parameters2(): + ellipsoid(0, 2, 2) + + +@raises(ValueError) +def test_ellipsoid_sign_parameters3(): + ellipsoid(-3, -2, 2) + + def test_ellipsoid_bool(): test = ellipsoid(2, 2, 2)[1:-1, 1:-1, 1:-1] test_anisotropic = ellipsoid(2, 2, 4, spacing=(1., 1., 2.)) @@ -86,18 +102,18 @@ def test_ellipsoid_levelset(): def test_ellipsoid_stats(): # Test comparison values generated by Wolfram Alpha vol, surf = ellipsoid_stats(6, 10, 16) - assert(round(1280 * np.pi, 4) == round(vol, 4)) - assert(1383.28 == round(surf, 2)) + assert_allclose(1280 * np.pi, vol, atol=1e-4) + assert_allclose(1383.28, surf, atol=1e-2) # Test when a <= b <= c does not hold vol, surf = ellipsoid_stats(16, 6, 10) - assert(round(1280 * np.pi, 4) == round(vol, 4)) - assert(1383.28 == round(surf, 2)) + assert_allclose(1280 * np.pi, vol, atol=1e-4) + assert_allclose(1383.28, surf, atol=1e-2) # Larger test to ensure reliability over broad range vol, surf = ellipsoid_stats(17, 27, 169) - assert(round(103428 * np.pi, 4) == round(vol, 4)) - assert(37426.3 == round(surf, 1)) + assert_allclose(103428 * np.pi, vol, atol=1e-4) + assert_allclose(37426.3, surf, atol=1e-1) if __name__ == "__main__": diff --git a/skimage/util/shape.py b/skimage/util/shape.py index f91286c3..95e0a42e 100644 --- a/skimage/util/shape.py +++ b/skimage/util/shape.py @@ -111,9 +111,10 @@ def view_as_windows(arr_in, window_shape, step=1): window_shape: tuple Defines the shape of the elementary n-dimensional orthotope (better know as hyperrectangle [1]_) of the rolling window view. - step : int + step : int, optional Number of elements to skip when moving the window forward (by - default, move forward by one). + default, move forward by one). The value must be equal or larger + than one. Returns ------- diff --git a/skimage/util/tests/test_shape.py b/skimage/util/tests/test_shape.py index b6975d0f..b66ac2e2 100644 --- a/skimage/util/tests/test_shape.py +++ b/skimage/util/tests/test_shape.py @@ -6,41 +6,35 @@ from skimage.util.shape import view_as_blocks, view_as_windows @raises(TypeError) def test_view_as_blocks_block_not_a_tuple(): - A = np.arange(10) view_as_blocks(A, [5]) @raises(ValueError) def test_view_as_blocks_negative_shape(): - A = np.arange(10) view_as_blocks(A, (-2,)) @raises(ValueError) def test_view_as_blocks_block_too_large(): - A = np.arange(10) view_as_blocks(A, (11,)) @raises(ValueError) def test_view_as_blocks_wrong_block_dimension(): - A = np.arange(10) view_as_blocks(A, (2, 2)) @raises(ValueError) def test_view_as_blocks_1D_array_wrong_block_shape(): - A = np.arange(10) view_as_blocks(A, (3,)) def test_view_as_blocks_1D_array(): - A = np.arange(10) B = view_as_blocks(A, (5,)) assert_equal(B, np.array([[0, 1, 2, 3, 4], @@ -48,7 +42,6 @@ def test_view_as_blocks_1D_array(): def test_view_as_blocks_2D_array(): - A = np.arange(4 * 4).reshape(4, 4) B = view_as_blocks(A, (2, 2)) assert_equal(B[0, 1], np.array([[2, 3], @@ -57,7 +50,6 @@ def test_view_as_blocks_2D_array(): def test_view_as_blocks_3D_array(): - A = np.arange(4 * 4 * 6).reshape(4, 4, 6) B = view_as_blocks(A, (1, 2, 2)) assert_equal(B.shape, (4, 2, 3, 1, 2, 2)) @@ -69,41 +61,40 @@ def test_view_as_blocks_3D_array(): @raises(TypeError) def test_view_as_windows_input_not_array(): - A = [1, 2, 3, 4, 5] view_as_windows(A, (2,)) @raises(TypeError) def test_view_as_windows_window_not_tuple(): - A = np.arange(10) view_as_windows(A, [2]) @raises(ValueError) def test_view_as_windows_wrong_window_dimension(): - A = np.arange(10) view_as_windows(A, (2, 2)) @raises(ValueError) def test_view_as_windows_negative_window_length(): - A = np.arange(10) view_as_windows(A, (-1,)) @raises(ValueError) def test_view_as_windows_window_too_large(): - A = np.arange(10) view_as_windows(A, (11,)) -def test_view_as_windows_1D(): +@raises(ValueError) +def test_view_as_windows_step_below_one(): + A = np.arange(10) + view_as_windows(A, (11,), step=0.9) +def test_view_as_windows_1D(): A = np.arange(10) window_shape = (3,) B = view_as_windows(A, window_shape) @@ -118,7 +109,6 @@ def test_view_as_windows_1D(): def test_view_as_windows_2D(): - A = np.arange(5 * 4).reshape(5, 4) window_shape = (4, 3) B = view_as_windows(A, window_shape)