diff options
Diffstat (limited to 'src/silx/utils/test/test_array_like.py')
-rw-r--r-- | src/silx/utils/test/test_array_like.py | 215 |
1 files changed, 105 insertions, 110 deletions
diff --git a/src/silx/utils/test/test_array_like.py b/src/silx/utils/test/test_array_like.py index 309b9ff..74e2604 100644 --- a/src/silx/utils/test/test_array_like.py +++ b/src/silx/utils/test/test_array_like.py @@ -34,12 +34,17 @@ import tempfile import unittest from ..array_like import DatasetView, ListOfImages -from ..array_like import get_dtype, get_concatenated_dtype, get_shape,\ - is_array, is_nested_sequence, is_list_of_arrays +from ..array_like import ( + get_dtype, + get_concatenated_dtype, + get_shape, + is_array, + is_nested_sequence, + is_list_of_arrays, +) class TestTransposedDatasetView(unittest.TestCase): - def setUp(self): # dataset attributes self.ndim = 3 @@ -57,8 +62,14 @@ class TestTransposedDatasetView(unittest.TestCase): self.h5f = h5py.File(self.h5_fname, "r") - self.all_permutations = [(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 2, 0), - (2, 0, 1), (2, 1, 0)] + self.all_permutations = [ + (0, 1, 2), + (0, 2, 1), + (1, 0, 2), + (1, 2, 0), + (2, 0, 1), + (2, 1, 0), + ] def tearDown(self): self.h5f.close() @@ -86,15 +97,12 @@ class TestTransposedDatasetView(unittest.TestCase): # reversing the dimensions twice results in no change rtrans = list(reversed(range(self.ndim))) - self.assertTrue(numpy.array_equal( - a, - a.transpose(rtrans).transpose(rtrans))) + self.assertTrue(numpy.array_equal(a, a.transpose(rtrans).transpose(rtrans))) for i in range(a.shape[0]): for j in range(a.shape[1]): for k in range(a.shape[2]): - self.assertEqual(self.h5f["volume"][i, j, k], - a[i, j, k]) + self.assertEqual(self.h5f["volume"][i, j, k], a[i, j, k]) def _testTransposition(self, transposition): """test transposed dataset @@ -102,56 +110,50 @@ class TestTransposedDatasetView(unittest.TestCase): :param tuple transposition: List of dimensions (0... n-1) sorted in the desired order """ - a = DatasetView(self.h5f["volume"], - transposition=transposition) + a = DatasetView(self.h5f["volume"], transposition=transposition) self._testSize(a) # sort shape of transposed object, to hopefully find the original shape - sorted_shape = tuple(dim_size for (_, dim_size) in - sorted(zip(transposition, a.shape))) + sorted_shape = tuple( + dim_size for (_, dim_size) in sorted(zip(transposition, a.shape)) + ) self.assertEqual(sorted_shape, self.original_shape) a_as_array = numpy.array(self.h5f["volume"]).transpose(transposition) # test the __array__ method - self.assertTrue(numpy.array_equal( - numpy.array(a), - a_as_array)) + self.assertTrue(numpy.array_equal(numpy.array(a), a_as_array)) # test slicing - for selection in [(2, slice(None), slice(None)), - (slice(None), 1, slice(0, 8)), - (slice(0, 3), slice(None), 3), - (1, 3, slice(None)), - (slice(None), 2, 1), - (4, slice(1, 9, 2), 2)]: + for selection in [ + (2, slice(None), slice(None)), + (slice(None), 1, slice(0, 8)), + (slice(0, 3), slice(None), 3), + (1, 3, slice(None)), + (slice(None), 2, 1), + (4, slice(1, 9, 2), 2), + ]: self.assertIsInstance(a[selection], numpy.ndarray) - self.assertTrue(numpy.array_equal( - a[selection], - a_as_array[selection])) + self.assertTrue(numpy.array_equal(a[selection], a_as_array[selection])) # test the DatasetView.__getitem__ for single values # (step adjusted to test at least 3 indices in each dimension) for i in range(0, a.shape[0], a.shape[0] // 3): for j in range(0, a.shape[1], a.shape[1] // 3): for k in range(0, a.shape[2], a.shape[2] // 3): - sorted_indices = tuple(idx for (_, idx) in - sorted(zip(transposition, [i, j, k]))) + sorted_indices = tuple( + idx for (_, idx) in sorted(zip(transposition, [i, j, k])) + ) viewed_value = a[i, j, k] corresponding_original_value = self.h5f["volume"][sorted_indices] - self.assertEqual(viewed_value, - corresponding_original_value) + self.assertEqual(viewed_value, corresponding_original_value) # reversing the dimensions twice results in no change rtrans = list(reversed(range(self.ndim))) - self.assertTrue(numpy.array_equal( - a, - a.transpose(rtrans).transpose(rtrans))) + self.assertTrue(numpy.array_equal(a, a.transpose(rtrans).transpose(rtrans))) # test .T property - self.assertTrue(numpy.array_equal( - a.T, - a.transpose(rtrans))) + self.assertTrue(numpy.array_equal(a.T, a.transpose(rtrans))) def testTransposition012(self): """transposition = (0, 1, 2) @@ -184,22 +186,23 @@ class TestTransposedDatasetView(unittest.TestCase): self._testDoubleTransposition(trans1, trans2) def _testDoubleTransposition(self, transposition1, transposition2): - a = DatasetView(self.h5f["volume"], - transposition=transposition1).transpose(transposition2) + a = DatasetView(self.h5f["volume"], transposition=transposition1).transpose( + transposition2 + ) b = self.volume.transpose(transposition1).transpose(transposition2) - self.assertTrue(numpy.array_equal(a, b), - "failed with double transposition %s %s" % (transposition1, transposition2)) + self.assertTrue( + numpy.array_equal(a, b), + "failed with double transposition %s %s" % (transposition1, transposition2), + ) def test1DIndex(self): a = DatasetView(self.h5f["volume"]) - self.assertTrue(numpy.array_equal(self.volume[1], - a[1])) + self.assertTrue(numpy.array_equal(self.volume[1], a[1])) b = DatasetView(self.h5f["volume"], transposition=(1, 0, 2)) - self.assertTrue(numpy.array_equal(self.volume[:, 1, :], - b[1])) + self.assertTrue(numpy.array_equal(self.volume[:, 1, :], b[1])) class TestTransposedListOfImages(unittest.TestCase): @@ -215,13 +218,18 @@ class TestTransposedListOfImages(unittest.TestCase): self.images = [] for i in range(self.original_shape[0]): - self.images.append( - volume[i]) + self.images.append(volume[i]) self.images_as_3D_array = numpy.array(self.images) - self.all_permutations = [(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 2, 0), - (2, 0, 1), (2, 1, 0)] + self.all_permutations = [ + (0, 1, 2), + (0, 2, 1), + (1, 0, 2), + (1, 2, 0), + (2, 0, 1), + (2, 1, 0), + ] def tearDown(self): pass @@ -248,19 +256,14 @@ class TestTransposedListOfImages(unittest.TestCase): for i in range(a.shape[0]): for j in range(a.shape[1]): for k in range(a.shape[2]): - self.assertEqual(self.images[i][j, k], - a[i, j, k]) + self.assertEqual(self.images[i][j, k], a[i, j, k]) # reversing the dimensions twice results in no change rtrans = list(reversed(range(self.ndim))) - self.assertTrue(numpy.array_equal( - a, - a.transpose(rtrans).transpose(rtrans))) + self.assertTrue(numpy.array_equal(a, a.transpose(rtrans).transpose(rtrans))) # test .T property - self.assertTrue(numpy.array_equal( - a.T, - a.transpose(rtrans))) + self.assertTrue(numpy.array_equal(a.T, a.transpose(rtrans))) def _testTransposition(self, transposition): """test transposed dataset @@ -268,33 +271,31 @@ class TestTransposedListOfImages(unittest.TestCase): :param tuple transposition: List of dimensions (0... n-1) sorted in the desired order """ - a = ListOfImages(self.images, - transposition=transposition) + a = ListOfImages(self.images, transposition=transposition) self._testSize(a) # sort shape of transposed object, to hopefully find the original shape - sorted_shape = tuple(dim_size for (_, dim_size) in - sorted(zip(transposition, a.shape))) + sorted_shape = tuple( + dim_size for (_, dim_size) in sorted(zip(transposition, a.shape)) + ) self.assertEqual(sorted_shape, self.original_shape) a_as_array = numpy.array(self.images).transpose(transposition) # test the DatasetView.__array__ method - self.assertTrue(numpy.array_equal( - numpy.array(a), - a_as_array)) + self.assertTrue(numpy.array_equal(numpy.array(a), a_as_array)) # test slicing - for selection in [(2, slice(None), slice(None)), - (slice(None), 1, slice(0, 8)), - (slice(0, 3), slice(None), 3), - (1, 3, slice(None)), - (slice(None), 2, 1), - (4, slice(1, 9, 2), 2)]: + for selection in [ + (2, slice(None), slice(None)), + (slice(None), 1, slice(0, 8)), + (slice(0, 3), slice(None), 3), + (1, 3, slice(None)), + (slice(None), 2, 1), + (4, slice(1, 9, 2), 2), + ]: self.assertIsInstance(a[selection], numpy.ndarray) - self.assertTrue(numpy.array_equal( - a[selection], - a_as_array[selection])) + self.assertTrue(numpy.array_equal(a[selection], a_as_array[selection])) # test the DatasetView.__getitem__ for single values # (step adjusted to test at least 3 indices in each dimension) @@ -302,31 +303,32 @@ class TestTransposedListOfImages(unittest.TestCase): for j in range(0, a.shape[1], a.shape[1] // 3): for k in range(0, a.shape[2], a.shape[2] // 3): viewed_value = a[i, j, k] - sorted_indices = tuple(idx for (_, idx) in - sorted(zip(transposition, [i, j, k]))) - corresponding_original_value = self.images[sorted_indices[0]][sorted_indices[1:]] - self.assertEqual(viewed_value, - corresponding_original_value) + sorted_indices = tuple( + idx for (_, idx) in sorted(zip(transposition, [i, j, k])) + ) + corresponding_original_value = self.images[sorted_indices[0]][ + sorted_indices[1:] + ] + self.assertEqual(viewed_value, corresponding_original_value) # reversing the dimensions twice results in no change rtrans = list(reversed(range(self.ndim))) - self.assertTrue(numpy.array_equal( - a, - a.transpose(rtrans).transpose(rtrans))) + self.assertTrue(numpy.array_equal(a, a.transpose(rtrans).transpose(rtrans))) # test .T property - self.assertTrue(numpy.array_equal( - a.T, - a.transpose(rtrans))) + self.assertTrue(numpy.array_equal(a.T, a.transpose(rtrans))) def _testDoubleTransposition(self, transposition1, transposition2): - a = ListOfImages(self.images, - transposition=transposition1).transpose(transposition2) + a = ListOfImages(self.images, transposition=transposition1).transpose( + transposition2 + ) b = self.images_as_3D_array.transpose(transposition1).transpose(transposition2) - self.assertTrue(numpy.array_equal(a, b), - "failed with double transposition %s %s" % (transposition1, transposition2)) + self.assertTrue( + numpy.array_equal(a, b), + "failed with double transposition %s %s" % (transposition1, transposition2), + ) def testTransposition012(self): """transposition = (0, 1, 2) @@ -360,52 +362,46 @@ class TestTransposedListOfImages(unittest.TestCase): def test1DIndex(self): a = ListOfImages(self.images) - self.assertTrue(numpy.array_equal(self.images[1], - a[1])) + self.assertTrue(numpy.array_equal(self.images[1], a[1])) b = ListOfImages(self.images, transposition=(1, 0, 2)) - self.assertTrue(numpy.array_equal(self.images_as_3D_array[:, 1, :], - b[1])) + self.assertTrue(numpy.array_equal(self.images_as_3D_array[:, 1, :], b[1])) class TestFunctions(unittest.TestCase): """Test functions to guess the dtype and shape of an array_like object""" + def testListOfLists(self): l = [[0, 1, 2], [2, 3, 4]] - self.assertEqual(get_dtype(l), - numpy.dtype(int)) - self.assertEqual(get_shape(l), - (2, 3)) + self.assertEqual(get_dtype(l), numpy.dtype(int)) + self.assertEqual(get_shape(l), (2, 3)) self.assertTrue(is_nested_sequence(l)) self.assertFalse(is_array(l)) self.assertFalse(is_list_of_arrays(l)) - l = [[0., 1.], [2., 3.]] - self.assertEqual(get_dtype(l), - numpy.dtype(float)) - self.assertEqual(get_shape(l), - (2, 2)) + l = [[0.0, 1.0], [2.0, 3.0]] + self.assertEqual(get_dtype(l), numpy.dtype(float)) + self.assertEqual(get_shape(l), (2, 2)) self.assertTrue(is_nested_sequence(l)) self.assertFalse(is_array(l)) self.assertFalse(is_list_of_arrays(l)) # concatenated dtype of int and float - l = [numpy.array([[0, 1, 2], [2, 3, 4]]), - numpy.array([[0., 1., 2.], [2., 3., 4.]])] + l = [ + numpy.array([[0, 1, 2], [2, 3, 4]]), + numpy.array([[0.0, 1.0, 2.0], [2.0, 3.0, 4.0]]), + ] - self.assertEqual(get_concatenated_dtype(l), - numpy.array(l).dtype) - self.assertEqual(get_shape(l), - (2, 2, 3)) + self.assertEqual(get_concatenated_dtype(l), numpy.array(l).dtype) + self.assertEqual(get_shape(l), (2, 2, 3)) self.assertFalse(is_nested_sequence(l)) self.assertFalse(is_array(l)) self.assertTrue(is_list_of_arrays(l)) def testNumpyArray(self): a = numpy.array([[0, 1], [2, 3]]) - self.assertEqual(get_dtype(a), - a.dtype) + self.assertEqual(get_dtype(a), a.dtype) self.assertFalse(is_nested_sequence(a)) self.assertTrue(is_array(a)) self.assertFalse(is_list_of_arrays(a)) @@ -419,8 +415,7 @@ class TestFunctions(unittest.TestCase): h5f["dataset"] = a d = h5f["dataset"] - self.assertEqual(get_dtype(d), - numpy.dtype(int)) + self.assertEqual(get_dtype(d), numpy.dtype(int)) self.assertFalse(is_nested_sequence(d)) self.assertTrue(is_array(d)) self.assertFalse(is_list_of_arrays(d)) |