summaryrefslogtreecommitdiff
path: root/src/silx/utils/test/test_array_like.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/silx/utils/test/test_array_like.py')
-rw-r--r--src/silx/utils/test/test_array_like.py215
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))