| |
| |
| |
| |
| |
| |
| |
| |
|
|
| """ |
| Tests for the (internal) selections module |
| """ |
|
|
| import numpy as np |
| import h5py |
| import h5py._hl.selections as sel |
| import h5py._hl.selections2 as sel2 |
|
|
| from .common import TestCase, ut |
|
|
| class BaseSelection(TestCase): |
| def setUp(self): |
| self.f = h5py.File(self.mktemp(), 'w') |
| self.dsid = self.f.create_dataset('x', ()).id |
|
|
| def tearDown(self): |
| if self.f: |
| self.f.close() |
|
|
| class TestTypeGeneration(BaseSelection): |
|
|
| """ |
| Internal feature: Determine output types from dataset dtype and fields. |
| """ |
|
|
| def test_simple(self): |
| """ Non-compound types are handled appropriately """ |
| dt = np.dtype('i') |
| out, format = sel2.read_dtypes(dt, ()) |
| self.assertEqual(out, format) |
| self.assertEqual(out, np.dtype('i')) |
|
|
| def test_simple_fieldexc(self): |
| """ Field names for non-field types raises ValueError """ |
| dt = np.dtype('i') |
| with self.assertRaises(ValueError): |
| out, format = sel2.read_dtypes(dt, ('a',)) |
|
|
| def test_compound_simple(self): |
| """ Compound types with elemental subtypes """ |
| dt = np.dtype( [('a','i'), ('b','f'), ('c','|S10')] ) |
|
|
| |
| out, format = sel2.read_dtypes(dt, ()) |
| self.assertEqual(out, format) |
| self.assertEqual(out, dt) |
|
|
| |
| out, format = sel2.read_dtypes(dt, ('a','b')) |
| self.assertEqual(out, format) |
| self.assertEqual(out, np.dtype( [('a','i'), ('b','f')] )) |
|
|
| |
| out, format = sel2.read_dtypes(dt, ('a',)) |
| self.assertEqual(out, np.dtype('i')) |
| self.assertEqual(format, np.dtype( [('a','i')] )) |
|
|
| |
| with self.assertRaises(ValueError): |
| out, format = sel2.read_dtypes(dt, ('j', 'k')) |
|
|
| class TestScalarSliceRules(BaseSelection): |
|
|
| """ |
| Internal feature: selections rules for scalar datasets |
| """ |
|
|
| def test_args(self): |
| """ Permissible arguments for scalar slicing """ |
| shape, selection = sel2.read_selections_scalar(self.dsid, ()) |
| self.assertEqual(shape, None) |
| self.assertEqual(selection.get_select_npoints(), 1) |
|
|
| shape, selection = sel2.read_selections_scalar(self.dsid, (Ellipsis,)) |
| self.assertEqual(shape, ()) |
| self.assertEqual(selection.get_select_npoints(), 1) |
|
|
| with self.assertRaises(ValueError): |
| shape, selection = sel2.read_selections_scalar(self.dsid, (1,)) |
|
|
| dsid = self.f.create_dataset('y', (1,)).id |
| with self.assertRaises(RuntimeError): |
| shape, selection = sel2.read_selections_scalar(dsid, (1,)) |
|
|
| class TestSelection(BaseSelection): |
|
|
| """ High-level routes to generate a selection |
| """ |
|
|
| def test_selection(self): |
| dset = self.f.create_dataset('dset', (100,100)) |
| regref = dset.regionref[0:100, 0:100] |
|
|
| |
| st = sel.select((10,), list([1,2,3]), dset) |
| self.assertIsInstance(st, sel.FancySelection) |
|
|
| |
| st = sel.select((10,), ((1, 2, 3),), dset) |
| self.assertIsInstance(st, sel.FancySelection) |
|
|
| |
| st1 = sel.select((5,), np.array([True,False,False,False,True]), dset) |
| self.assertIsInstance(st1, sel.PointSelection) |
|
|
| |
| st2 = sel.select((10,), 1, dset) |
| self.assertIsInstance(st2, sel.SimpleSelection) |
|
|
| |
| with self.assertRaises(TypeError): |
| sel.select((100,), "foo", dset) |
|
|
| |
| st3 = sel.select((100,100), regref, dset) |
| self.assertIsInstance(st3, sel.Selection) |
|
|
| |
| with self.assertRaises(TypeError): |
| sel.select((100,), regref, None) |
|
|
| |
| with self.assertRaises(TypeError): |
| sel.select((100,), regref, dset) |
|
|
| |
| st4 = sel.select((100,100), st3, dset) |
| self.assertEqual(st4,st3) |
|
|
| |
| with self.assertRaises(TypeError): |
| sel.select((100,), st3, dset) |
|
|