Skip to content

Commit 29ae237

Browse files
committed
fix for getDatasetValues
1 parent c60e1c9 commit 29ae237

File tree

3 files changed

+48
-2
lines changed

3 files changed

+48
-2
lines changed

src/h5json/hdf5db.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -587,7 +587,7 @@ def getDatasetValues(self, dset_id, sel):
587587
if fetch:
588588
arr = self.reader.getDatasetValues(dset_id, sel, dtype=dtype)
589589
else:
590-
arr = np.zeros(sel.shape, dtype=dtype)
590+
arr = np.zeros(sel.mshape, dtype=dtype)
591591

592592
if "updates" in dset_json:
593593
# apply any non-flushed changes that intersect the current selection

test/unit/h5py_reader_test.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,11 @@
1313

1414
import logging
1515
import time
16+
import numpy as np
17+
1618
from h5json import Hdf5db
1719
from h5json.h5pystore.h5py_reader import H5pyReader
20+
from h5json import selections
1821

1922

2023
class H5pyReaderTest(unittest.TestCase):
@@ -70,7 +73,23 @@ def testSimple(self):
7073
self.assertTrue(k in attr1_json)
7174
dset_shape = dset_json["shape"]
7275
self.assertEqual(dset_shape["class"], "H5S_SIMPLE")
73-
self.assertEqual(dset_shape["dims"], [10, 10])
76+
dims = dset_shape["dims"]
77+
self.assertEqual(dims, [10, 10])
78+
dims = tuple(dims)
79+
80+
# read one element from a dataset
81+
sel = selections.select(dims, (slice(4, 5), slice(5, 6)))
82+
arr = db.getDatasetValues(dset111_id, sel)
83+
self.assertTrue(isinstance(arr, np.ndarray))
84+
self.assertEqual(arr.shape, (1, 1))
85+
self.assertEqual(arr[0, 0], 20)
86+
87+
# read one row
88+
sel = selections.select(dims, (slice(4, 5), slice(0, 10)))
89+
arr = db.getDatasetValues(dset111_id, sel)
90+
self.assertTrue(isinstance(arr, np.ndarray))
91+
self.assertEqual(arr.shape, (1, 10))
92+
self.assertEqual(list(arr[0]), list(range(0, 40, 4)))
7493

7594
# try adding an attribute
7695
db.createAttribute(dset111_id, "attr3", value=42)

test/unit/hdf5db_test.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,33 @@ def testSimpleDataset(self):
448448

449449
db.close()
450450

451+
def testBoolDataset(self):
452+
shape = (10,)
453+
dtype = np.dtype(bool)
454+
455+
db = Hdf5db(app_logger=self.log)
456+
root_id = db.open()
457+
dset_id = db.createDataset(shape, dtype=dtype)
458+
db.createHardLink(root_id, "dset", dset_id)
459+
sel_first = selections.select(shape, slice(0, 1))
460+
arr = db.getDatasetValues(dset_id, sel_first)
461+
self.assertEqual(arr.dtype, dtype)
462+
self.assertEqual(arr.shape, (1,))
463+
self.assertEqual(arr[0], False)
464+
465+
# update one element
466+
sel_second = selections.select(shape, slice(1, 2))
467+
db.setDatasetValues(dset_id, sel_second, np.array([True,], dtype=dtype))
468+
469+
# read back three elements
470+
sel_three = selections.select(shape, slice(0, 3))
471+
arr = db.getDatasetValues(dset_id, sel_three)
472+
self.assertEqual(arr.dtype, dtype)
473+
self.assertEqual(arr.shape, (3,))
474+
self.assertEqual(list(arr[...]), [False, True, False])
475+
476+
db.close()
477+
451478
def testScalarDataset(self):
452479
dtype = np.int32
453480

0 commit comments

Comments
 (0)